Skip to content

chore(deps): update @tenphi/tasty to 3.5.0 - #1374

Merged
tenphi merged 3 commits into
mainfrom
chore/tasty-3.5.0
Aug 28, 2026
Merged

chore(deps): update @tenphi/tasty to 3.5.0#1374
tenphi merged 3 commits into
mainfrom
chore/tasty-3.5.0

Conversation

@tenphi

@tenphi tenphi commented Aug 28, 2026

Copy link
Copy Markdown
Member

Describe changes

Updates @tenphi/tasty from 3.3.1 to 3.5.0 (3.4.0 + 3.5.0). No changes were needed in the kit — the two releases are additive, and the new holdKeyframes() / ownKeyframes() reach consumers automatically through the existing export * from '@tenphi/tasty' in src/index.ts.

Two things matter to apps built on the kit:

Injected CSS is garbage-collected again. Once Tasty's render path became hook-free it stopped disposing the classes it injected, so reference counts never fell back to zero and gc() / cleanup() / tastyDebug.cleanup() all read a non-zero count as "still in use". Nothing was ever evicted, and a long-lived page accumulated injected rules for its entire lifetime — the failure mode is a session that gets slower the longer it stays open, worst in a UI that mounts many short-lived styled subtrees (dialogs, popovers, table cells). What a style is worth keeping is now decided by the DOM. touch() and StyleUsage are deprecated but still exported, and tastyDebug no longer reports Unused: 0 classes for a page holding hundreds of stale rules.

Local @keyframes are content-addressed. A @keyframes block written inside a styles object is now emitted as fade-<hash of its steps>, resolved identically by the client, the SSR collector and the RSC pass. Two components authoring animation: fade 1s over different steps get two rules instead of one definition silently winning — which previously also let server and client disagree about which class to use. Three components here use local @keyframes (LoadingAnimation, Spin/Cube, SpinsContainer); all render unchanged. keyframes()-registered global animations are unaffected and keep their authored names.

3.4.0 is pure performance: LRU cache reads are 1.79x faster in their steady-state shape, and a repeat SSR render of one component is 1.8x faster end to end now that tasty() factories memoize their chunk cache keys.

Verification

Merged with main (25 commits) — the only conflict was pnpm-lock.yaml, resolved by regenerating from main's lockfile rather than hand-merging, then re-pinning tasty to 3.5.0. The diff against main is 4 files: package.json, pnpm-lock.yaml, the changeset, and the size note. Main's @tenphi/eslint-plugin-tasty 1.0.5 is preserved and re-pointed at tasty 3.5.0.

All re-run after the merge:

  • pnpm test — 102 files, 2202 passed / 1 skipped
  • pnpm test:browser — 12 files, 141 passed
  • pnpm lint — clean (only the pre-existing consistent-token-usage warnings), Prettier clean
  • tsc --noEmit — byte-identical to main: the same 18 pre-existing errors, no new ones

Worth noting for reviewers: two intermediate full-suite runs failed 17 and 2 tests respectively, in different files each time (Form, then ItemTable), while the machine was also running builds. Four runs total, two fully clean, and the failure sets never repeated — timing flake under load, not a regression. main in a clean worktree passes the same suite, and the merged branch actually runs faster than main (45.6s vs 58.8s back-to-back on a quiet machine), consistent with 3.4.0's LRU work.

Main now sets batchInjection: true and opens TastyBatchProvider windows in Root, Portal and Overlay (#1344), so this bump also picks up 3.5.0's fix for tastyDebug reads taken inside a batch window reporting empty.

Size, both sides freshly rebuilt on the same machine, against the new main:

Entry main this branch Δ Limit Headroom
All 512.39 kB 513.60 kB +1.21 kB 515 kB 1.40 kB
{ Button } 121.81 kB 123.02 kB +1.21 kB 125 kB 1.98 kB

Both stay inside budget, so no limit is raised. Matching deltas on both entries are the signature of a change inside Tasty's always-included core.

All is now down to 1.40 kB, the thinnest it has been — but most of that was spent before this bump: main climbed 508.95 → 512.39 kB on its own (+3.44 kB of Board chrome, tokens/resolve, useScheme, TextInput autoComplete and the batching wiring), leaving 2.61 kB before tasty was touched. The next change here will likely need to raise it.

One calibration note, since .size-limit.cjs warns that macOS reads ~1.6 kB lower than the Linux runner: on this machine it did not. CI reported main at 500.38 KB / 118.96 KB binary, which is 512.39 kB / 121.81 kB decimal, and the local rebuild of the same commit read 512.39 kB / 121.81 kB — an exact match on both entries. CI has since measured this branch too, at 501.56 KB / 120.13 KB binary — 513.60 kB / 123.02 kB, matching the local readings the budgets were checked against. Assuming the 1.6 kB gap would have raised this budget for no reason. I recorded that in the file without retiring the warning.

Checklist
  • Pipeline is passed — all checks green, including Measure size of the library
  • Tests are passed successfully
  • Changeset(s) is(are) added
  • You have passed the threshold of the library size
  • Commit message follows commit guidelines

Closes: N/A

Other information

Local @keyframes naming is the one behaviour change worth a second look at review time: any CSS or test that refers to a local keyframes name literally would no longer resolve. Nothing in this repo does, and Chromatic covers the three animated components visually.

Tasty 3.6.0 was published mid-review (2026-08-28 17:29), after this branch was measured. This PR deliberately stays on 3.5.0, which is what was asked for and what every number above was measured against. A plain pnpm install will resolve the ^3.5.0 range up to 3.6.0, so the lockfile pin is what holds it — worth a follow-up rather than an in-place retarget of this branch.

🤖 Generated with Claude Code


Note

Low Risk
Dependency-only bump with no kit logic changes; main caveat is Tasty’s local @keyframes naming for apps that reference those names outside Tasty.

Overview
Bumps @tenphi/tasty from 3.3.1 to 3.5.0 (lockfile, package.json, and a minor changeset). No kit source changes — new APIs like holdKeyframes() / ownKeyframes() still reach apps via the existing export * from '@tenphi/tasty'.

Consumers inherit Tasty 3.4.0 perf (faster LRU / memoized SSR chunk keys) and 3.5.0 runtime fixes: DOM-based GC for injected CSS (fixes long-lived pages accumulating stale rules), content-addressed local @keyframes (avoids SSR/client name clashes; literal references to local animation names in external CSS/tests may break), and tastyDebug that flushes pending writes before registry reads (relevant with batchInjection on Root / Portal / Overlay).

.size-limit.cjs comments are refreshed for +1.21 kB on both All and { Button } entries (~1.40 kB headroom on All); limits stay 515 kB / 125 kB.

Reviewed by Cursor Bugbot for commit 5b27db0. Bugbot is set up for automated code reviews on this repo. Configure here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Aug 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cube-ui-kit Ready Ready Preview Aug 28, 2026 5:56pm

Request Review

@changeset-bot

changeset-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 5b27db0

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@cube-dev/ui-kit Minor

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

Resolved pnpm-lock.yaml by regenerating from main's lockfile, then re-pinning
@tenphi/tasty to 3.5.0 (a plain install resolved the ^3.5.0 range up to the
3.6.0 published mid-session).

Re-measured both size-limit entries against the new main: +1.21 kB on each,
still inside budget, no limit raised.
@github-actions

github-actions Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

📦 NPM canary release

Deployed canary version 0.0.0-canary-ed3208f.

@github-actions

github-actions Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

🧪 Storybook is successfully deployed!

@github-actions

github-actions Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

🏋️ Size limit report

Name Size Passed?
All 501.56 KB (+0.24% 🔺) Yes 🎉
Tree shaking (just a Button) 120.13 KB (+0.99% 🔺) Yes 🎉

Compared against main at d996d98run 33081215297, 2026-08-27T14:15:19Z.

To see which modules changed, download the size-limit-statoscope-report artifact from this run and open report.html.

CI measured this branch at exactly the local readings the budgets were checked
against, so the macOS/Linux caveat did not apply here.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@tenphi
tenphi merged commit 9adb076 into main Aug 28, 2026
16 checks passed
@tenphi
tenphi deleted the chore/tasty-3.5.0 branch August 28, 2026 18:46
@tenphi tenphi mentioned this pull request Aug 28, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant