chore: version packages (beta)#389
Open
github-actions[bot] wants to merge 1 commit into
Open
Conversation
e9ed6b8 to
23db25e
Compare
116f814 to
a8aee70
Compare
a8aee70 to
8e7d460
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 master, this PR will be updated.
masteris currently in pre mode so this branch has prereleases rather than normal releases. If you want to exit prereleases, runchangeset pre exitonmaster.Releases
@vuetify/v0@1.0.0-beta.4
Minor Changes
#372
d075615Thanks @sridhar-3009! - feat(locale): addti()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 orundefinedinstead of echoing the key, enabling theti(key) ?? '<default>'pattern at call sitesti(...) ?? '<default>', so apps with no locale plugin get meaningful accessible names — with zero strings bundled into the runtime fallback@vuetify/v0/locale/messages/enis 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
19aac62Thanks @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 allz-indexand makes everything outside its subtree inert — so an overlay teleported tobodyrendered beneath the dialog and was unclickable. Overlays can now teleport into the top-layer subtree instead:Snackbar.Portalnow defaultsteleportto'top-layer', mounting into the topmost open modal<dialog>when one is open and falling back tobodyotherwise.teleport="body"(always body) and:teleport="false"(render inline) remain escape hatches.Portalaccepts a newto="top-layer"token that resolves to the topmost modal element, orbodywhen no modal is open.useStackexposes a newtopElementcontext field and aneloption onregister(), so modal dialogs publish their element as the teleport target.useClickOutsidebounds 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
2f4275cThanks @johnleider! - fix(build): ship type declarations for the@vuetify/v0/browserentry —./browsermapped to./dist/browser/index.jswith no.d.ts, soare-the-types-wrongflagged itUntypedResolutionand TypeScript consumers importing@vuetify/v0/browsergot no types. The browser bundle now emitsdist/browser/index.d.ts(it bundles the samesrc/index.tsas the main entry, so its types are identical), and therepo:exportsattw check no longer needs to exclude the browser entrypoint.#390
5db6a0dThanks @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 usagesAlso 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 rawButton.labelkey.#426
dc0fc00Thanks @johnleider! - fix(createSelection): reject disabled items in multiple-modeapply()— the v-model sync path (apply()) could select a disabled item even thoughselect/unselect/toggleall reject them, violating the "disabled = all selection ops are no-ops" contract.createModel.apply()'s browse-fallback now routes throughselect()(which guards instance- and ticket-leveldisabled), andcreateSelection.apply()'s multiple branch gains an inline per-ticket guard before adding (kept inline rather than routed throughselect()so the single-modemultiple: trueoverride still works). The ref-write value-sync path is untouched. Affects multiple-modecreateSelection/createGroup/createNestedviauseProxyModel.#371
3ee1d85Thanks @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
0cd2de5Thanks @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
6e8f86cThanks @johnleider! - fix(usePopover): coerce the synthesizedanchor-name/position-anchorcustom-ident to a valid charsetA consumer-supplied
id(or activatortarget/ content_id) containing non-ident characters produced an invalid--${id}custom-property name. The browser rejects it on the client (style.setPropertydrops the whole inline value), so anchor positioning silently broke. The interpolated identifier is now coerced to[a-zA-Z0-9_-], mirroring theSAFE_IDENTguardThemeAdapteralready applies. The rawidis still used verbatim for the DOM element id and thepopovertargetlinkage — only the CSS custom-ident is coerced, so the native popover wiring is unchanged.#424
ceaeba8Thanks @johnleider! - fix(useTheme): remove the adopted stylesheet on V0 adapter dispose — the browser adapter (V0StyleSheetThemeAdapter) appended aCSSStyleSheettodocument.adoptedStyleSheetsinupsert()butdispose()only stopped the Vue watchers, leaking orphaned sheets on repeated mount/unmount (HMR, test suites, micro-frontend teardown). Dispose now filters the sheet out ofadoptedStyleSheetsand clears the ref across all three dispose paths, mirroring the sibling unhead adapter. Follow-up to the leak-safe adapter lifecycle work.#441
bf61d28Thanks @johnleider! - fix(useTheme): applycspNonceon the SSR head path —V0StyleSheetThemeAdapteraccepted acspNonceoption but never applied it: the SSRhead.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, andV0UnheadThemeAdapteraccepts and forwardscspNoncetoo (initial push, reactive patch, andupdate()). The nonce is added only when set, so non-CSP usage is unchanged. The clientadoptedStyleSheetspath correctly needs no nonce.#440
999c41fThanks @johnleider! - fix(useTheme): validate the theme adapterprefixagainstSAFE_IDENT—ThemeAdapter.generate()sanitized theme names, color keys, and values, but interpolated the adapterprefixinto 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 matchSAFE_IDENT(/^[a-zA-Z0-9_-]+$/) with aV0Error(V0_THEME_INVALID_PREFIX), mirroring the guard already applied to adjacent inputs and theV0_PALETTE_INVALID_SEEDprecedent. BothV0StyleSheetThemeAdapterand the unhead adapter inherit it. Non-breaking — valid prefixes already match.#427
0c355e6Thanks @johnleider! - fix(createTokens):resolve()no longer returns inherited prototype members — the alias-path walk usedsegment in current, which traverses the prototype chain, so resolving a path whose final segment named anObject.prototypemember (constructor,toString,hasOwnProperty,__proto__, …) returned that builtin instead ofundefined+ the "Path not found" warning.resolve()now mirrorsflatten()'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
7bd450cThanks @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
ab6da17Thanks @J-Sek! - fix(Treeview): let keyboard focus reach controls inside itemsTab 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-disabledcontrols are skipped.#418
9063b2cThanks @johnleider! - fix(useStack): make ticket blocking/scrim reactiveregister()now acceptsMaybeRefOrGetterforblocking/scrimand exposes them asReadonly<Ref<boolean>>on the ticket, so a reactiveblocking(e.g. a Dialog backing VDialog's reactivepersistent) propagates instead of freezing at registration.Dialog/AlertDialog/Portalnow pass them as getters.Type change:
StackTicket.blocking/scrimare nowReadonly<Ref<boolean>>(wereboolean) — read.value. Reads are internal to v0;register()still accepts plain booleans.#442
789c2e9Thanks @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 ephemeralcreateStack()per call instead of the shared global; the browser singleton is unchanged. For coordinated per-app SSR z-index, usecreateStackPlugin(as the docs already advise).@paper/genesis@1.0.0-beta.3
Patch Changes
47a20c1Thanks @johnleider! - fix(GnDocsExample): pad the expanded example description so the expand pill clears the prose — the centered pill is absolutely positioned across the bottom border and was clipping the last line of fully-expanded descriptions. Bottom padding is reserved only in the expanded state, so the collapsed fade is unchanged.Updated dependencies [
2f4275c,5db6a0d,dc0fc00,d075615,3ee1d85,0cd2de5,6e8f86c,ceaeba8,bf61d28,999c41f,0c355e6,19aac62,7bd450c,ab6da17,9063b2c,789c2e9]:@vuetify/paper@1.0.0-beta.4
Patch Changes
2f4275c,5db6a0d,dc0fc00,d075615,3ee1d85,0cd2de5,6e8f86c,ceaeba8,bf61d28,999c41f,0c355e6,19aac62,7bd450c,ab6da17,9063b2c,789c2e9]: