chore: version packages - #257
Merged
Merged
Conversation
github-actions
Bot
force-pushed
the
changeset-release/main
branch
from
August 17, 2026 19:20
0cd9bd5 to
d714f06
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR was opened by the Changesets release GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated.
Releases
@tenphi/tasty@3.0.2
Patch Changes
#264
40fa041Thanks @tenphi! - Fix$namereferences leaking unsubstituted into CSS from pass-through style values.A
$namereference is classified as a color only when the name ends with-color; otherwise it lands in the value bucket. Handlers that read one bucketand fall back to their raw input therefore emitted the authored DSL verbatim,
which browsers drop as an invalid declaration:
The same happened in the other direction (
fontSize: '$my-size-color'→font-size: $my-size-color) and in every handler that passes keyword valuesstraight through:
display,overflow,whiteSpace,flow,place/align/justifyand their longhands,textTransform,font/fontFamily,color,fill/backgroundColor,svgFill,background-clip/
-origin/-repeat/-attachment, andoutlineOffset.All of them now substitute references before emitting. Values without a
$still skip the parser entirely, so pass-through output — including case-sensitive
font family names and
var()references — is unchanged.borderandoutlinenow place a$namereference instead of dropping it. Areference fills the first free slot in shorthand order — width, then style, then
color. The style would otherwise arrive as a keyword (
solid,dashed, …) thata reference has no way to match, and colors are authored as
#name: the$name-colorform the parser buckets as a color is there to reference a raw CSScustom property, not as the way colors are written, so a reference does not reach
for the color slot until the style slot is taken.
An explicit
#nametoken still wins the color slot,$name-colorreferencesstill land there directly, and a second length is still ignored rather than
promoted (two lengths are not valid in these shorthands).
#264
40fa041Thanks @tenphi! - Fix three ways a$namereference could silently do nothing.A
-color-suffixed reference is no longer confined to color slots. The suffixis the only hint the parser has about an untyped reference, and it used to decide
the bucket outright: the reference went to
colorsalone, so a handler readingvaluesfound nothing and emitted its own default instead. Across 35 style propsthe authored value simply vanished:
Such a reference is now filed under both buckets (
Bucket.ColorValue), so a colorslot and a value slot can each read it, and it still appears once in
all.border/outlineplace it once rather than in both the style and color slots.Custom-property names keep their case. The parser lowercased its whole input
before classifying, which folded custom-property names too — and those are
case-sensitive in CSS. A camelCase name could never resolve, because the token
definition emitted
--myVarwhile the reference asked forvar(--myvar):Identifier bodies (
$name,$$name,#name,##name) now keep their case, andevery place that derives a CSS name from one applies the same rule, so definitions
and references always agree. A leading capital is not a supported name and folds
rather than being kebab-cased —
$Foo→--foo,#Purple→--purple-color—so names should start lowercase. Everything else still folds exactly as before:
keywords, units, function names, and hex literals (
#FF0000is a color, not aname). Predefined-token lookup stays case-insensitive; only the emitted name
preserves case.
A reference where a token name is expected now warns instead of emitting dead
CSS.
presetandtransitioninterpolate their input into a custom-propertyname, which cannot be indirected through a reference — the name is needed at build
time, and a reference only resolves in the browser.
preset: '$my-preset'builtfont-size: var(--var(--my-preset)-font-size, …): syntactically valid, unusable asa name, dropped by the browser without a word.
presetnow falls back toinherit(what an absent preset resolves to) andtransitionskips the entry,both warning once in development. Value slots are unaffected —
transition: 'fill $my-duration'still works.Size budgets are raised by 0.25–0.5 kB per entry to fit the added logic (~250 B
brotlied); every entry keeps headroom.
#256
b39e27fThanks @tenphi! - FixgridColumns/gridRowsemitting invalid CSS for numeric strings.The track-count shorthand only expanded real numbers, so
gridColumns={3}produced
grid-template-columns: minmax(1px, 1fr) minmax(1px, 1fr) minmax(1px, 1fr)while
gridColumns="3"producedgrid-template-columns: 3— invalid CSS thatbrowsers drop silently. Every value inside a state map arrives as a string, so
responsive grids were the common way to hit this:
Digit strings now expand exactly like numbers. Real track lists (
'1fr 2fr','repeat(auto-fit, minmax(200px, 1fr))','0') still pass through untouched,and
gridTemplateconverts each side independently instead of discarding theside that isn't a count. A negative count no longer throws inside
String.repeat.