Skip to content

chore: version packages (beta)#389

Open
github-actions[bot] wants to merge 1 commit into
masterfrom
changeset-release/master
Open

chore: version packages (beta)#389
github-actions[bot] wants to merge 1 commit into
masterfrom
changeset-release/master

Conversation

@github-actions

@github-actions github-actions Bot commented Jun 25, 2026

Copy link
Copy Markdown

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 master, this PR will be updated.

⚠️⚠️⚠️⚠️⚠️⚠️

master is currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, run changeset pre exit on master.

⚠️⚠️⚠️⚠️⚠️⚠️

Releases

@vuetify/v0@1.0.0-beta.4

Minor Changes

  • #372 d075615 Thanks @sridhar-3009! - feat(locale): add ti() so components carry inline English aria labels without bundling a locale (WCAG 4.1.2)

    • locale.ti(key, ...params) ("translate if exists") returns the translation or undefined instead of echoing the key, enabling the ti(key) ?? '<default>' pattern at call sites
    • Every v0 component now provides a built-in English aria label via ti(...) ?? '<default>', so apps with no locale plugin get meaningful accessible names — with zero strings bundled into the runtime fallback
    • @vuetify/v0/locale/messages/en is exposed as an optional export: the canonical English catalog, handy for seeding a translation or registering full English coverage (never imported by the runtime)
  • #397 19aac62 Thanks @johnleider! - fix(Dialog, Snackbar): overlays can teleport into the topmost open modal so snackbars shown over a modal Dialog appear above it and stay interactive (#279)

    A native modal <dialog> (showModal()) is promoted to the browser top layer, which paints above all z-index and makes everything outside its subtree inert — so an overlay teleported to body rendered beneath the dialog and was unclickable. Overlays can now teleport into the top-layer subtree instead:

    • Snackbar.Portal now defaults teleport to 'top-layer', mounting into the topmost open modal <dialog> when one is open and falling back to body otherwise. teleport="body" (always body) and :teleport="false" (render inline) remain escape hatches.
    • Portal accepts a new to="top-layer" token that resolves to the topmost modal element, or body when no modal is open.
    • useStack exposes a new topElement context field and an el option on register(), so modal dialogs publish their element as the teleport target.
    • useClickOutside bounds mode no longer treats a strict DOM descendant as an outside click, so clicking an overlay teleported into a <dialog> (e.g. a Snackbar and its close button) no longer dismisses the dialog. Backdrop clicks (target is the dialog itself) still close it.

Patch Changes

  • #443 2f4275c Thanks @johnleider! - fix(build): ship type declarations for the @vuetify/v0/browser entry — ./browser mapped to ./dist/browser/index.js with no .d.ts, so are-the-types-wrong flagged it UntypedResolution and TypeScript consumers importing @vuetify/v0/browser got no types. The browser bundle now emits dist/browser/index.d.ts (it bundles the same src/index.ts as the main entry, so its types are identical), and the repo:exports attw check no longer needs to exclude the browser entrypoint.

  • #390 5db6a0d Thanks @johnleider! - fix(Button): don't auto-set aria-label in renderless mode — in renderless mode the consumer owns the DOM and is responsible for the accessible name; the automatic icon-only fallback no longer overrides visible text in mixed-content renderless usages

    Also migrates the solo icon-only fallback to locale.ti('Button.label') ?? 'Button', matching the inline accessible-name default every other component now ships, so an unconfigured app gets "Button" instead of the raw Button.label key.

  • #426 dc0fc00 Thanks @johnleider! - fix(createSelection): reject disabled items in multiple-mode apply() — the v-model sync path (apply()) could select a disabled item even though select/unselect/toggle all reject them, violating the "disabled = all selection ops are no-ops" contract. createModel.apply()'s browse-fallback now routes through select() (which guards instance- and ticket-level disabled), and createSelection.apply()'s multiple branch gains an inline per-ticket guard before adding (kept inline rather than routed through select() so the single-mode multiple: true override still works). The ref-write value-sync path is untouched. Affects multiple-mode createSelection/createGroup/createNested via useProxyModel.

  • #371 3ee1d85 Thanks @sridhar-3009! - fix(NumberField): pass parsed value directly to commit() so typed values correctly propagate to the parent v-model on blur and Enter — avoids reading the stale model before Vue's reactivity round-trip completes

  • #417 0cd2de5 Thanks @johnleider! - perf(Overflow): cache item visibility in a hidden-index set, dropping per-item O(n) rank scans to O(1) (whole-list visibility goes from O(n²) to O(n) per resize)

  • #416 6e8f86c Thanks @johnleider! - fix(usePopover): coerce the synthesized anchor-name / position-anchor custom-ident to a valid charset

    A consumer-supplied id (or activator target / content _id) containing non-ident characters produced an invalid --${id} custom-property name. The browser rejects it on the client (style.setProperty drops the whole inline value), so anchor positioning silently broke. The interpolated identifier is now coerced to [a-zA-Z0-9_-], mirroring the SAFE_IDENT guard ThemeAdapter already applies. The raw id is still used verbatim for the DOM element id and the popovertarget linkage — only the CSS custom-ident is coerced, so the native popover wiring is unchanged.

  • #424 ceaeba8 Thanks @johnleider! - fix(useTheme): remove the adopted stylesheet on V0 adapter dispose — the browser adapter (V0StyleSheetThemeAdapter) appended a CSSStyleSheet to document.adoptedStyleSheets in upsert() but dispose() only stopped the Vue watchers, leaking orphaned sheets on repeated mount/unmount (HMR, test suites, micro-frontend teardown). Dispose now filters the sheet out of adoptedStyleSheets and clears the ref across all three dispose paths, mirroring the sibling unhead adapter. Follow-up to the leak-safe adapter lifecycle work.

  • #441 bf61d28 Thanks @johnleider! - fix(useTheme): apply cspNonce on the SSR head path — V0StyleSheetThemeAdapter accepted a cspNonce option but never applied it: the SSR head.push <style> was emitted without the nonce, so strict-CSP (style-src 'nonce-…') apps had their server-rendered theme styles blocked (FOUC until client hydration). The nonce is now threaded into the SSR style entry, and V0UnheadThemeAdapter accepts and forwards cspNonce too (initial push, reactive patch, and update()). The nonce is added only when set, so non-CSP usage is unchanged. The client adoptedStyleSheets path correctly needs no nonce.

  • #440 999c41f Thanks @johnleider! - fix(useTheme): validate the theme adapter prefix against SAFE_IDENTThemeAdapter.generate() sanitized theme names, color keys, and values, but interpolated the adapter prefix into the generated CSS (--${prefix}-…, var(--${prefix}-on-background)) unvalidated, so a malformed prefix (e.g. containing }) could break out of the declaration block and inject arbitrary CSS rules. The constructor now rejects any prefix that doesn't match SAFE_IDENT (/^[a-zA-Z0-9_-]+$/) with a V0Error (V0_THEME_INVALID_PREFIX), mirroring the guard already applied to adjacent inputs and the V0_PALETTE_INVALID_SEED precedent. Both V0StyleSheetThemeAdapter and the unhead adapter inherit it. Non-breaking — valid prefixes already match.

  • #427 0c355e6 Thanks @johnleider! - fix(createTokens): resolve() no longer returns inherited prototype members — the alias-path walk used segment in current, which traverses the prototype chain, so resolving a path whose final segment named an Object.prototype member (constructor, toString, hasOwnProperty, __proto__, …) returned that builtin instead of undefined + the "Path not found" warning. resolve() now mirrors flatten()'s guard (UNSAFE_KEYS + Object.prototype.hasOwnProperty.call). Correctness/defense-in-depth — config and the resolve argument are developer-authored, so this is a consistency fix, not a security fix.

  • #370 7bd450c Thanks @sridhar-3009! - fix(Treeview): don't intercept keyboard events originating from embedded interactive controls (switches, comboboxes, etc.) so they can handle their own key events

  • #341 ab6da17 Thanks @J-Sek! - fix(Treeview): let keyboard focus reach controls inside items

    Tab and Shift+Tab now move focus between a tree node and the focusable controls it contains. Tabbing out of a control advances from that control's own row, and aria-disabled controls are skipped.

  • #418 9063b2c Thanks @johnleider! - fix(useStack): make ticket blocking/scrim reactive

    register() now accepts MaybeRefOrGetter for blocking/scrim and exposes them as Readonly<Ref<boolean>> on the ticket, so a reactive blocking (e.g. a Dialog backing VDialog's reactive persistent) propagates instead of freezing at registration. Dialog/AlertDialog/Portal now pass them as getters.

    Type change: StackTicket.blocking/scrim are now Readonly<Ref<boolean>> (were boolean) — read .value. Reads are internal to v0; register() still accepts plain booleans.

  • #442 789c2e9 Thanks @johnleider! - fix(useStack): don't share the fallback stack across SSR requests — useStack() fell back to a module-scoped singleton when no provider existed, so in a long-lived Node SSR process overlay tickets persisted across requests (z-index bleed + unbounded memory growth). Under SSR (!IN_BROWSER), getStackFallback() now returns a fresh ephemeral createStack() per call instead of the shared global; the browser singleton is unchanged. For coordinated per-app SSR z-index, use createStackPlugin (as the docs already advise).

@paper/genesis@1.0.0-beta.3

Patch Changes

@vuetify/paper@1.0.0-beta.4

Patch Changes

@github-actions github-actions Bot force-pushed the changeset-release/master branch 30 times, most recently from e9ed6b8 to 23db25e Compare June 30, 2026 14:43
@github-actions github-actions Bot force-pushed the changeset-release/master branch 7 times, most recently from 116f814 to a8aee70 Compare June 30, 2026 16:56
@github-actions github-actions Bot force-pushed the changeset-release/master branch from a8aee70 to 8e7d460 Compare June 30, 2026 19:28
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.

0 participants