vireuikit 0.5.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -1
- package/dist/a11y-D3SS74I3.d.cts +25 -0
- package/dist/a11y-D3SS74I3.d.ts +25 -0
- package/dist/chunk-AR2AM3BR.js +557 -0
- package/dist/chunk-AR2AM3BR.js.map +1 -0
- package/dist/index.cjs +421 -9
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +283 -4
- package/dist/index.d.ts +283 -4
- package/dist/index.js +1 -186
- package/dist/index.js.map +1 -1
- package/dist/web.cjs +1892 -0
- package/dist/web.cjs.map +1 -0
- package/dist/web.d.cts +37 -0
- package/dist/web.d.ts +37 -0
- package/dist/web.js +1339 -0
- package/dist/web.js.map +1 -0
- package/package.json +18 -6
package/dist/web.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/web/a11y.ts","../src/web/glass.ts","../src/web/input.ts","../src/web/styles.ts","../src/web/element.ts","../src/web/menu.ts","../src/web/index.ts"],"names":["FORCE_ATTRIBUTE","FORCED","MATERIAL_STEPS","VIREGLASS_CONTROL_MATERIAL"],"mappings":"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","file":"web.js","sourcesContent":["import { A11Y_NONE, resolveA11y, type A11yMode, type A11yOverride } from '../kit/a11y';\n\nconst QUERIES = {\n reduceMotion: '(prefers-reduced-motion: reduce)',\n increaseContrast: '(prefers-contrast: more)',\n reduceTransparency: '(prefers-reduced-transparency: reduce)',\n} as const satisfies Record<keyof A11yMode, string>;\n\nconst KEYS = Object.keys(QUERIES) as (keyof A11yMode)[];\n\nexport function systemA11y(): A11yMode {\n if (typeof matchMedia === 'undefined') return A11Y_NONE;\n return {\n reduceMotion: matchMedia(QUERIES.reduceMotion).matches,\n increaseContrast: matchMedia(QUERIES.increaseContrast).matches,\n reduceTransparency: matchMedia(QUERIES.reduceTransparency).matches,\n };\n}\n\nexport function watchSystemA11y(onChange: () => void): () => void {\n if (typeof matchMedia === 'undefined') return () => {};\n const lists = KEYS.map((key) => matchMedia(QUERIES[key]));\n for (const list of lists) list.addEventListener('change', onChange);\n return () => {\n for (const list of lists) list.removeEventListener('change', onChange);\n };\n}\n\nlet globalOverride: A11yOverride = {};\nconst listeners = new Set<() => void>();\n\n/** Overrides the system for every element on the page; a key set to `undefined` follows it again. */\nexport function setA11yOverride(next: A11yOverride): void {\n globalOverride = { ...globalOverride, ...next };\n for (const listener of listeners) listener();\n}\n\nexport function getA11yOverride(): A11yOverride {\n return globalOverride;\n}\n\nexport function watchA11yOverride(onChange: () => void): () => void {\n listeners.add(onChange);\n return () => {\n listeners.delete(onChange);\n };\n}\n\n/** An element's own override wins over the page's, which wins over the system. */\nexport function effectiveA11y(own: A11yOverride): A11yMode {\n const merged: A11yOverride = { ...globalOverride };\n for (const key of KEYS) if (own[key] !== undefined) merged[key] = own[key];\n return resolveA11y(systemA11y(), merged);\n}\n","import type { BackdropSample, VireGlassAccessibility, VireGlassGeometry, VireGlassMaterial } from 'vireglass';\nimport type { AttachGlassOptions, GlassHandle, GlassMorph } from 'vireglass/dom';\n\nexport type GlassParams = {\n material: VireGlassMaterial;\n geometry: VireGlassGeometry;\n accessibility: VireGlassAccessibility;\n /** The glass appears only under the finger. */\n onTouch: boolean;\n /** The backdrop as the host knows it; null leaves it to the lens's probe. */\n sample: BackdropSample | null;\n /** The lens's own pointer response; off where the element's children take the pointer. */\n interactive?: boolean;\n};\n\nexport type GlassFrame = {\n material?: VireGlassMaterial;\n geometry?: VireGlassGeometry;\n morph?: GlassMorph | null;\n};\n\nexport type GlassSession = {\n setMaterial(material: VireGlassMaterial): void;\n setGeometry(geometry: VireGlassGeometry): void;\n /** Material, geometry and morph together, for one repaint instead of three. */\n frame(next: GlassFrame): void;\n setAppear(t: number): void;\n setMorph(morph: GlassMorph | null): void;\n setSample(sample: BackdropSample | null): void;\n /** What the probe reads behind the element where it is now. */\n probe(): BackdropSample;\n destroy(): void;\n};\n\n// Loaded on demand: the control works without it, so the glass is an upgrade, not a dependency of\n// first paint. Resolves to null if the caller stopped wanting it while the module loaded.\nexport async function attachControlGlass(\n el: HTMLElement,\n params: GlassParams,\n stillWanted: () => boolean,\n): Promise<GlassSession | null> {\n const { attachGlass, probeBackdrop } = await import('vireglass/dom');\n if (!stillWanted()) return null;\n\n // `attachGlass` re-reads these on `update()`. The geometry is passed in because a pressed\n // element is scaled and a measured box would be the scaled one.\n const opts: AttachGlassOptions = {\n material: params.material,\n geometry: params.geometry,\n accessibility: params.accessibility,\n variant: params.onTouch ? 'interactive' : 'present',\n // The kit paints its own body: the core's is not lighter than its surround over a light backdrop and\n // near black under reduced transparency with light ink (docs/acceptance.md, \"Resting body\").\n body: false,\n };\n if (params.interactive === false) opts.interactive = false;\n if (params.sample) opts.sample = params.sample;\n const handle: GlassHandle = attachGlass(el, opts);\n\n return {\n setMaterial(material) {\n opts.material = material;\n handle.update();\n },\n setGeometry(geometry) {\n opts.geometry = geometry;\n handle.update();\n },\n frame(next) {\n if (next.material) opts.material = next.material;\n if (next.geometry) opts.geometry = next.geometry;\n if (next.morph !== undefined) handle.setMorph(next.morph);\n else handle.update();\n },\n setAppear: (t) => handle.setAppear(t),\n setMorph: (morph) => handle.setMorph(morph),\n setSample: (sample) => handle.setSample(sample),\n probe: () => probeBackdrop(el),\n destroy: () => handle.destroy(),\n };\n}\n","const COARSE = '(pointer: coarse)';\n\n/** One query decides the size tier, the hit area, and whether hover and focus rings exist. */\nexport function isCoarsePointer(): boolean {\n return typeof matchMedia !== 'undefined' && matchMedia(COARSE).matches;\n}\n\nexport function watchCoarsePointer(onChange: () => void): () => void {\n if (typeof matchMedia === 'undefined') return () => {};\n const list = matchMedia(COARSE);\n list.addEventListener('change', onChange);\n return () => list.removeEventListener('change', onChange);\n}\n","const HOST = ':is(vire-button,vire-icon-button)[data-vk]';\nconst BODY = `${HOST}>button`;\nconst MENU = 'vire-menu[data-vk]';\nconst SURFACE = `${MENU}>[popover]`;\nconst ITEM = `${SURFACE}>button`;\n\nconst GLASS_BODY = `background:color-mix(in srgb,color-mix(in srgb,#fff calc((var(--vk-body-white) + var(--vk-body-lift)*2)*100%),var(--vireglass-tint-color,#fff)) calc(var(--vk-body-alpha)*100%),transparent);\n background:oklab(from color-mix(in srgb,#fff calc(var(--vk-body-white)*100%),var(--vireglass-tint-color,#fff)) calc(l + var(--vk-body-lift)) a b / var(--vk-body-alpha))`;\nconst FROST_INK = 'color:oklab(from var(--vireglass-tint-color,#fff) calc(.95 - .87*clamp(0,(l + var(--vk-body-lift) - .6)*20,1)) 0 0)';\nconst CONTRAST_GLASS = 'background:color-mix(in srgb,color-mix(in srgb,#fff calc((1 - var(--vireglass-ink,0))*100%),#000) 88%,transparent)';\nconst SHADOW = 'box-shadow:0 0 0 1px color-mix(in srgb,currentColor 14%,transparent),0 10px 30px color-mix(in srgb,currentColor 18%,transparent)';\n\n// Every rule is keyed on `data-vk`, set at upgrade, so native markup keeps its own look until\n// then. Text takes the page's colour; frosted and contrast bodies assume `color-scheme` matches it.\nexport const STYLES = `\nvire-button,vire-icon-button,vire-menu{display:inline-flex;vertical-align:middle}\n${HOST}{position:relative;--vk-press:0;--vk-hover:0;--vk-carry:1;--vk-body-alpha:0;--vk-body-white:0;--vk-body-lift:0;--vk-grow:0;--vk-defocus:0;--vk-slop-x:0;--vk-slop-y:0}\n${HOST}::before{content:'';position:absolute;inset:calc(var(--vk-slop-y)*-1px) calc(var(--vk-slop-x)*-1px)}\n${BODY}{appearance:none;-webkit-appearance:none;box-sizing:border-box;margin:0;border:0;outline:none;\n font:inherit;font-weight:500;line-height:1;white-space:nowrap;color:inherit;\n display:inline-flex;align-items:center;justify-content:center;gap:8px;position:relative;\n height:var(--vk-height);min-width:var(--vk-height);padding:0 var(--vk-pad-x);border-radius:var(--vk-radius);\n -webkit-text-fill-color:color-mix(in srgb,currentColor calc((1 - var(--vk-press)*.55)*var(--vk-carry)*100%),transparent);\n text-shadow:0 0 calc((var(--vk-press)*var(--vk-defocus) + (1 - var(--vk-carry))*4)*1px) color-mix(in srgb,currentColor calc(var(--vk-carry)*100%),transparent);\n background:transparent;cursor:pointer;touch-action:manipulation;user-select:none;-webkit-tap-highlight-color:transparent;\n transform:scale(calc(1 + var(--vk-press)*var(--vk-grow)))}\nvire-icon-button[data-vk]>button{padding:0;width:var(--vk-height)}\n${BODY}>svg{width:var(--vk-icon);height:var(--vk-icon);flex:none;\n opacity:calc((1 - var(--vk-press)*.45)*var(--vk-carry));filter:blur(calc((var(--vk-press)*var(--vk-defocus) + (1 - var(--vk-carry))*4)*1px))}\n${BODY}:disabled{cursor:default}\n${HOST}[data-disabled]>button{-webkit-text-fill-color:color-mix(in srgb,currentColor 40%,transparent)}\n${HOST}[data-disabled]>button>svg{opacity:.4}\n${HOST}[data-focus]>button{outline:2px solid currentColor;outline-offset:2px}\n\n${HOST}[data-surface=glass]>button{color:var(--vireglass-ink-color,inherit);\n ${GLASS_BODY}}\n${HOST}[data-frost][data-surface=glass]>button{${FROST_INK}}\n\n${HOST}[data-surface=plain]>button{background:color-mix(in srgb,currentColor calc(10% + var(--vk-hover)*6% + var(--vk-press)*14%),transparent)}\n\n${HOST}[data-surface=frosted]>button{\n background:color-mix(in srgb,Canvas calc(88% - var(--vk-hover)*4% - var(--vk-press)*10%),currentColor);\n backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);\n box-shadow:0 1px 3px color-mix(in srgb,currentColor 22%,transparent)}\n\n${MENU}{position:relative;--vk-ink-in:1;--vk-cx:0px;--vk-cy:0px}\n${SURFACE}{position:fixed;inset:auto;left:var(--vk-x,0);top:var(--vk-y,0);width:var(--vk-w,auto);height:var(--vk-h,auto);\n margin:0;padding:var(--vk-menu-pad);border:0;border-radius:var(--vk-r,var(--vk-menu-radius));box-sizing:border-box;\n overflow:clip;color:inherit;font:inherit;background:transparent;outline:none;\n --vk-body-alpha:0;--vk-body-white:0;--vk-body-lift:0}\n${SURFACE}:popover-open{display:flex;flex-direction:column;align-items:flex-start}\n${MENU}[data-phase=open]>[popover][data-scroll]{overflow-y:auto}\n${ITEM}{appearance:none;-webkit-appearance:none;box-sizing:border-box;margin:0;border:0;outline:none;flex:none;position:relative;\n font:inherit;line-height:1.2;color:inherit;text-align:start;white-space:nowrap;\n display:flex;align-items:center;width:var(--vk-content-w,auto);height:var(--vk-menu-row);\n padding-block:0;padding-inline:var(--vk-label-pad) var(--vk-menu-row);border-radius:var(--vk-item-radius);\n background:color-mix(in srgb,currentColor calc(var(--vk-fill,0)*100%),transparent);\n cursor:pointer;user-select:none;touch-action:manipulation;-webkit-tap-highlight-color:transparent}\n${SURFACE}:has(>button>svg)>button{padding-inline-start:var(--vk-menu-row)}\n${ITEM}>svg{position:absolute;inset-inline-start:calc((var(--vk-menu-row) - var(--vk-menu-icon))/2);top:calc((var(--vk-menu-row) - var(--vk-menu-icon))/2);\n width:var(--vk-menu-icon);height:var(--vk-menu-icon)}\n${ITEM}:is(:focus,[data-vire-force-state=hover]){--vk-fill:var(--vk-fill-active)}\n${ITEM}:is([data-pressed],[data-vire-force-state=pressed]){--vk-fill:var(--vk-fill-pressed)}\n${ITEM}:focus-visible{outline:2px solid currentColor;outline-offset:-2px}\n${ITEM}:is(:disabled,[aria-disabled=true]){cursor:default;--vk-fill:0;-webkit-text-fill-color:color-mix(in srgb,currentColor 40%,transparent)}\n${ITEM}:is(:disabled,[aria-disabled=true])>svg{opacity:.4}\n${MENU}[data-phase=moving]>[popover]{padding:0}\n${MENU}[data-phase=moving]>[popover]>*{transform:translate(calc(var(--vk-cx) + var(--vk-menu-pad)),calc(var(--vk-cy) + var(--vk-menu-pad)));\n opacity:min(1,calc(var(--vk-ink-in)*2));filter:blur(calc((1 - var(--vk-ink-in))*8px))}\n${MENU}[data-measure]>[popover]{width:max-content!important;height:auto!important;left:0!important;top:0!important;padding:var(--vk-menu-pad)!important;visibility:hidden}\n${MENU}[data-measure]>[popover]>*{width:auto!important;transform:none!important}\n\n${MENU}[data-surface=glass]>[popover]{color:var(--vireglass-ink-color,inherit);\n ${GLASS_BODY}}\n${MENU}[data-frost][data-surface=glass]>[popover]{${FROST_INK}}\n${MENU}[data-surface=plain]>[popover]{background:Canvas;${SHADOW}}\n${MENU}[data-surface=frosted]>[popover]{background:color-mix(in srgb,Canvas 88%,currentColor);\n backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);${SHADOW}}\n\n@supports not (color:oklab(from red l a b)){\n${HOST}[data-frost][data-surface=glass]>button,${MENU}[data-frost][data-surface=glass]>[popover]{color:inherit;background:color-mix(in srgb,Canvas 82%,currentColor)}\n}\n\n${HOST}[data-contrast]:is([data-surface=plain],[data-surface=frosted])>button{box-shadow:inset 0 0 0 2px currentColor}\n${HOST}[data-contrast][data-surface=frosted]>button{background:Canvas}\n${HOST}[data-contrast][data-surface=glass]>button{${CONTRAST_GLASS}}\n${MENU}[data-contrast]:is([data-surface=plain],[data-surface=frosted])>[popover]{background:Canvas;box-shadow:inset 0 0 0 2px currentColor}\n${MENU}[data-contrast][data-surface=glass]>[popover]{${CONTRAST_GLASS}}\n\n${HOST}[data-carried]>button{background:transparent!important;backdrop-filter:none!important;-webkit-backdrop-filter:none!important;box-shadow:none!important;pointer-events:none}\n${HOST}[data-carried]>button::after{visibility:hidden}\n\n@media (forced-colors:active){\n${BODY}{-webkit-text-fill-color:currentColor;text-shadow:none;color:ButtonText;background:ButtonFace;border:1px solid ButtonText;backdrop-filter:none;-webkit-backdrop-filter:none;transform:none}\n${BODY}>svg{opacity:1;filter:none}\n${HOST}[data-disabled]>button{-webkit-text-fill-color:currentColor;color:GrayText;border-color:GrayText}\n${HOST}[data-focus]>button{outline-color:Highlight}\n${SURFACE}{color:CanvasText!important;background:Canvas!important;border:1px solid CanvasText;backdrop-filter:none!important;-webkit-backdrop-filter:none!important}\n${SURFACE}>*{filter:none!important;opacity:1!important}\n${ITEM}{-webkit-text-fill-color:currentColor!important;color:CanvasText;background:Canvas}\n${ITEM}:is(:focus,[data-vire-force-state=hover],[data-pressed]){color:HighlightText;background:Highlight}\n${ITEM}:is(:disabled,[aria-disabled=true]){color:GrayText;background:Canvas}\n${HOST}[data-carried]>button{opacity:var(--vk-carry)}\n}\n`;\n\nconst STYLE_ATTR = 'data-vireuikit';\n\nexport function ensureStyles(from: Element, nonce?: string): void {\n const root = from.getRootNode();\n const host: Document | ShadowRoot = root instanceof ShadowRoot ? root : from.ownerDocument;\n if (host.querySelector(`style[${STYLE_ATTR}]`)) return;\n const style = from.ownerDocument.createElement('style');\n style.setAttribute(STYLE_ATTR, '');\n if (nonce) style.nonce = nonce;\n style.textContent = STYLES;\n (host instanceof ShadowRoot ? host : host.head).appendChild(style);\n}\n","import { VIREGLASS_CONTROL_MATERIAL, type BackdropSample, type VireGlassMaterial } from 'vireglass';\nimport type { GlassMorph } from 'vireglass/dom';\nimport { presentationFor, sameA11y, type A11yMode, type A11yOverride, type Presentation } from '../kit/a11y';\nimport { atomBody, atomMaterial, type VireUIKitAtomKind } from '../kit/atom';\nimport {\n CONTROL_IDLE,\n POINTER_INPUT,\n TOUCH_INPUT,\n stepControl,\n type ControlEvent,\n type ControlState,\n type InputCaps,\n} from '../kit/behavior/control';\nimport {\n createControlVisual,\n settleControlVisual,\n stepControlVisual,\n visualAtomState,\n} from '../kit/behavior/visual';\nimport { pressResponse } from '../kit/response';\nimport {\n BUTTON_SIZES,\n CONTROL_SIZES,\n defaultSize,\n hitSlop,\n iconButtonSize,\n minTarget,\n type ControlSize,\n} from '../kit/sizes';\nimport { effectiveA11y, watchA11yOverride, watchSystemA11y } from './a11y';\nimport { attachControlGlass, type GlassSession } from './glass';\nimport { isCoarsePointer, watchCoarsePointer } from './input';\nimport { ensureStyles } from './styles';\n\ntype GlassMode = 'present' | 'touch' | 'off';\n\nconst FORCE_ATTRIBUTE = 'data-vire-force-state';\n\nconst FORCED = {\n rest: CONTROL_IDLE,\n hover: { ...CONTROL_IDLE, hovered: true },\n focus: { ...CONTROL_IDLE, focused: true },\n pressed: { ...CONTROL_IDLE, press: { by: 'pointer' } },\n disabled: { ...CONTROL_IDLE, disabled: true },\n} as const satisfies Record<string, ControlState>;\n\ntype ForcedState = keyof typeof FORCED;\n\n// Every distinct material rebuilds the lens's displacement map, so the press value is snapped\n// instead of handing the lens a new one every frame.\nconst MATERIAL_STEPS = 10;\n// How long after a release outside the button its click is still treated as that release's.\nconst SUPPRESS_MS = 100;\n\nexport interface VireControlElement extends HTMLElement {\n a11y: A11yOverride;\n sample: BackdropSample | null;\n setMorph(morph: GlassMorph | null): void;\n /** A menu growing out of this control carries its body: no lens and no body of its own, the glyph in\n * focus by `ink` (1 sharp, 0 gone). `null` takes the body back. */\n setCarried(ink: number | null): void;\n}\n\nexport type ControlElementOptions = { nonce?: string | undefined };\n\nexport function createControlElementClass(\n kind: Extract<VireUIKitAtomKind, 'button' | 'iconButton'>,\n options: ControlElementOptions = {},\n) {\n const response = pressResponse(kind);\n\n return class VireControl extends HTMLElement implements VireControlElement {\n static observedAttributes = ['glass', 'size', 'disabled', FORCE_ATTRIBUTE];\n\n #control: HTMLButtonElement | null = null;\n #state: ControlState = CONTROL_IDLE;\n #caps: InputCaps = POINTER_INPUT;\n #visual = createControlVisual();\n #own: A11yOverride = {};\n #mode: A11yMode | null = null;\n #presentation: Presentation | null = null;\n #glass: GlassSession | null = null;\n #glassToken = 0;\n #glassKey = '';\n #glassBroken = false;\n #lastMaterialKey = '';\n #frame = 0;\n #lastFrame = 0;\n #cleanups: (() => void)[] = [];\n #suppressClick = false;\n #suppressTimer = 0;\n #slop = { x: 0, y: 0 };\n #morph: GlassMorph | null = null;\n #sample: BackdropSample | null = null;\n #carried: number | null = null;\n #hadStyle = { host: false, control: false };\n\n get a11y(): A11yOverride {\n return this.#own;\n }\n\n set a11y(next: A11yOverride) {\n this.#own = { ...next };\n if (this.#control) this.#refreshMode();\n }\n\n get sample(): BackdropSample | null {\n return this.#sample;\n }\n\n set sample(next: BackdropSample | null) {\n this.#sample = next;\n this.#glass?.setSample(next);\n }\n\n setMorph(morph: GlassMorph | null): void {\n this.#morph = morph;\n this.#glass?.setMorph(morph);\n }\n\n setCarried(ink: number | null): void {\n const handedOver = (this.#carried === null) !== (ink === null);\n this.#carried = ink === null ? null : Math.min(Math.max(ink, 0), 1);\n this.toggleAttribute('data-carried', this.#carried !== null);\n if (this.#carried === null) this.style.removeProperty('--vk-carry');\n else this.style.setProperty('--vk-carry', this.#carried.toFixed(3));\n // The lens materialises out rather than being removed, so taking the body back is one synchronous repaint;\n // a lens that appears only under the finger goes back to absent.\n if (handedOver) this.#glass?.setAppear(this.#carried === null && this.#glassMode() !== 'touch' ? 1 : 0);\n }\n\n connectedCallback(): void {\n // Set before the element was defined, a property lands on the instance and hides the accessor.\n for (const key of ['a11y', 'sample']) {\n if (!Object.prototype.hasOwnProperty.call(this, key)) continue;\n const value: unknown = Reflect.get(this, key);\n Reflect.deleteProperty(this, key);\n Reflect.set(this, key, value);\n }\n this.#hadStyle.host = this.hasAttribute('style');\n ensureStyles(this, options.nonce);\n this.#cleanups.push(watchCoarsePointer(() => this.#onInputChange()));\n this.#cleanups.push(watchSystemA11y(() => this.#refreshMode()));\n this.#cleanups.push(watchA11yOverride(() => this.#refreshMode()));\n this.#awaitControl();\n }\n\n disconnectedCallback(): void {\n for (const cleanup of this.#cleanups.splice(0)) cleanup();\n cancelAnimationFrame(this.#frame);\n clearTimeout(this.#suppressTimer);\n this.#frame = 0;\n this.#dropGlass();\n if (this.#control && !this.#hadStyle.control && this.#control.getAttribute('style') === '') this.#control.removeAttribute('style');\n this.#control = null;\n this.#state = CONTROL_IDLE;\n this.#suppressClick = false;\n this.#carried = null;\n for (const name of ['data-vk', 'data-surface', 'data-glass', 'data-frost', 'data-size', 'data-carried']) this.removeAttribute(name);\n for (const name of Array.from(this.style)) if (name.startsWith('--vk-')) this.style.removeProperty(name);\n if (!this.#hadStyle.host && this.getAttribute('style') === '') this.removeAttribute('style');\n this.#presentation = null;\n this.#mode = null;\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.#control) return;\n if (name === 'disabled') {\n const wanted = this.hasAttribute('disabled');\n if (this.#control.disabled !== wanted) this.#control.disabled = wanted;\n this.#syncDisabled();\n } else if (name === FORCE_ATTRIBUTE) {\n this.#applyForced();\n } else {\n this.#refreshMode(true);\n }\n }\n\n // The parser connects the element before its children exist, so the button is waited for\n // rather than made up.\n #awaitControl(): void {\n const found = this.querySelector<HTMLButtonElement>(':scope > button');\n if (found) {\n this.#upgrade(found);\n return;\n }\n const observer = new MutationObserver(() => {\n const button = this.querySelector<HTMLButtonElement>(':scope > button');\n if (!button) return;\n observer.disconnect();\n this.#upgrade(button);\n });\n observer.observe(this, { childList: true });\n this.#cleanups.push(() => observer.disconnect());\n }\n\n #upgrade(control: HTMLButtonElement): void {\n this.#control = control;\n this.#hadStyle.control = control.hasAttribute('style');\n this.setAttribute('data-vk', '');\n this.#caps = isCoarsePointer() ? TOUCH_INPUT : POINTER_INPUT;\n this.#listen(control);\n this.#cleanups.push(this.#observeSize(control));\n this.#syncDisabled();\n if (control.matches(':focus')) {\n this.#dispatch({ type: 'focus', visible: control.matches(':focus-visible') });\n }\n this.#mode = null;\n this.#refreshMode();\n }\n\n #onInputChange(): void {\n if (!this.#control) return;\n this.#caps = isCoarsePointer() ? TOUCH_INPUT : POINTER_INPUT;\n this.#refreshMode(true);\n }\n\n #size(): ControlSize {\n const wanted = this.getAttribute('size');\n if (wanted && (CONTROL_SIZES as readonly string[]).includes(wanted)) return wanted as ControlSize;\n return defaultSize({ touch: isCoarsePointer() });\n }\n\n #glassMode(): GlassMode {\n const wanted = this.getAttribute('glass');\n if (wanted === 'touch') return 'touch';\n return wanted === '' || wanted === 'present' ? 'present' : 'off';\n }\n\n #forced(): ForcedState | null {\n const wanted = this.getAttribute(FORCE_ATTRIBUTE);\n return wanted !== null && Object.hasOwn(FORCED, wanted) ? (wanted as ForcedState) : null;\n }\n\n #dispatch(event: ControlEvent): boolean {\n if (this.#forced()) return false;\n const step = stepControl(this.#state, event, this.#caps);\n this.#state = step.state;\n this.#render();\n return step.activated;\n }\n\n #listen(control: HTMLButtonElement): void {\n const on = <E extends Event>(\n target: EventTarget,\n type: string,\n handler: (event: E) => void,\n capture = false,\n ) => {\n target.addEventListener(type, handler as EventListener, capture);\n this.#cleanups.push(() => target.removeEventListener(type, handler as EventListener, capture));\n };\n // The host's own box is the unscaled one; the button grows while pressed.\n const inside = (e: PointerEvent) => {\n const r = this.getBoundingClientRect();\n return (\n e.clientX >= r.left - this.#slop.x &&\n e.clientX <= r.right + this.#slop.x &&\n e.clientY >= r.top - this.#slop.y &&\n e.clientY <= r.bottom + this.#slop.y\n );\n };\n const holdSuppression = () => {\n this.#suppressClick = true;\n clearTimeout(this.#suppressTimer);\n this.#suppressTimer = window.setTimeout(() => (this.#suppressClick = false), SUPPRESS_MS);\n };\n const releaseSuppression = () => {\n this.#suppressClick = false;\n clearTimeout(this.#suppressTimer);\n };\n\n // The hit area reaches past the button on coarse pointers, so the host sees those events.\n const bind = (target: HTMLElement, own: boolean) => {\n const mine = (e: Event) => own || e.target === this;\n on<PointerEvent>(target, 'pointerdown', (e) => {\n if (e.button !== 0 || !mine(e)) return;\n releaseSuppression();\n this.#dispatch({ type: 'down', source: 'pointer' });\n });\n on<PointerEvent>(target, 'pointermove', (e) => {\n if (!mine(e)) return;\n if (this.#state.press.by === 'pointer' && !inside(e)) this.#dispatch({ type: 'leave' });\n });\n on<PointerEvent>(target, 'pointerup', (e) => {\n if (!mine(e)) return;\n const wasPressed = this.#state.press.by === 'pointer';\n const activated = this.#dispatch({ type: 'up', source: 'pointer' });\n if (own && !activated && !wasPressed && !inside(e)) holdSuppression();\n });\n on<PointerEvent>(target, 'pointercancel', (e) => {\n if (mine(e)) this.#dispatch({ type: 'cancel' });\n });\n on<PointerEvent>(target, 'pointerenter', (e) => {\n if (mine(e) && e.pointerType !== 'touch') this.#dispatch({ type: 'enter' });\n });\n on<PointerEvent>(target, 'pointerleave', (e) => {\n // A captured pointer never leaves; the move handler decides by position instead.\n if (mine(e) && !control.hasPointerCapture?.(e.pointerId)) this.#dispatch({ type: 'leave' });\n });\n };\n bind(control, true);\n bind(this, false);\n\n // A tap in the hit area clicks the host; the button gets the one click, and the host sees it bubble.\n on<MouseEvent>(\n this,\n 'click',\n (e) => {\n if (e.target !== this) return;\n e.stopImmediatePropagation();\n e.preventDefault();\n control.click();\n },\n true,\n );\n\n // The lens captures the pointer, so a release outside the button still clicks it; only a\n // click that follows such a release is dropped, a keyboard or scripted one never is.\n on<MouseEvent>(\n control,\n 'click',\n (e) => {\n if (!this.#suppressClick) return;\n releaseSuppression();\n if (e.detail === 0) return;\n e.preventDefault();\n e.stopImmediatePropagation();\n },\n true,\n );\n on<KeyboardEvent>(control, 'keydown', (e) => {\n releaseSuppression();\n if ((e.key === ' ' || e.key === 'Enter') && !e.repeat) this.#dispatch({ type: 'down', source: 'keyboard' });\n });\n on<KeyboardEvent>(control, 'keyup', (e) => {\n if (e.key === ' ' || e.key === 'Enter') this.#dispatch({ type: 'up', source: 'keyboard' });\n });\n on(control, 'focus', () => this.#dispatch({ type: 'focus', visible: control.matches(':focus-visible') }));\n on(control, 'blur', () => this.#dispatch({ type: 'blur' }));\n on(control, 'focusout', () => this.#dispatch({ type: 'blur' }));\n\n const mutations = new MutationObserver(() => this.#syncDisabled());\n mutations.observe(control, { attributes: true, attributeFilter: ['disabled'] });\n this.#cleanups.push(() => mutations.disconnect());\n }\n\n #observeSize(control: HTMLButtonElement): () => void {\n if (typeof ResizeObserver === 'undefined') return () => {};\n const observer = new ResizeObserver(() => {\n this.#applySlop();\n this.#glass?.setGeometry(this.#geometry(control));\n });\n observer.observe(control);\n return () => observer.disconnect();\n }\n\n #geometry(control: HTMLElement) {\n const radius = parseFloat(getComputedStyle(control).borderTopLeftRadius) || 0;\n return { width: control.offsetWidth, height: control.offsetHeight, cornerRadius: radius };\n }\n\n #applySlop(): void {\n const control = this.#control;\n if (!control) return;\n const floor = minTarget({ touch: isCoarsePointer() });\n this.#slop = { x: hitSlop(control.offsetWidth, floor), y: hitSlop(control.offsetHeight, floor) };\n this.style.setProperty('--vk-slop-x', String(this.#slop.x));\n this.style.setProperty('--vk-slop-y', String(this.#slop.y));\n }\n\n #syncDisabled(): void {\n const control = this.#control;\n if (!control) return;\n // Assigning an already-set `disabled` still queues a mutation record, which would loop.\n if (this.hasAttribute('disabled') && !control.disabled) control.disabled = true;\n const disabled = control.disabled;\n if (this.#forced()) return;\n if (disabled !== this.#state.disabled) {\n this.#state = stepControl(this.#state, { type: 'disable', disabled }, this.#caps).state;\n this.#render();\n }\n }\n\n #applyForced(): void {\n const forced = this.#forced();\n if (forced) {\n this.#state = FORCED[forced];\n settleControlVisual(this.#visual, this.#state);\n if (forced === 'disabled' && this.#control && !this.#control.disabled) this.#control.disabled = true;\n } else {\n this.#state = CONTROL_IDLE;\n this.#syncDisabled();\n }\n this.#render(true);\n }\n\n #refreshMode(force = false, afterFailure = false): void {\n if (!afterFailure) this.#glassBroken = false;\n const mode = effectiveA11y(this.#own);\n let next = presentationFor(mode, this.#glassMode() !== 'off');\n if (this.#glassBroken && next.glass) next = { ...next, glass: false, surface: next.frost ? 'frosted' : 'plain' };\n const changed =\n force || !this.#mode || !sameA11y(this.#mode, mode) || next.surface !== this.#presentation?.surface;\n this.#mode = mode;\n this.#presentation = next;\n this.#applySize();\n this.setAttribute('data-surface', next.surface);\n this.toggleAttribute('data-contrast', next.contrastBorder);\n this.toggleAttribute('data-frost', next.frost);\n this.setAttribute('data-glass', next.glass ? 'on' : 'off');\n if (changed) this.#reattachGlass(mode);\n if (this.#forced()) this.#applyForced();\n else this.#render(true);\n }\n\n #applySize(): void {\n const size = this.#size();\n const spec = kind === 'iconButton' ? iconButtonSize(size) : BUTTON_SIZES[size];\n const set = (name: string, value: string) => this.style.setProperty(name, value);\n set('--vk-height', `${spec.height}px`);\n set('--vk-pad-x', `${spec.paddingX}px`);\n set('--vk-icon', `${spec.icon}px`);\n set('--vk-radius', `${spec.radius}px`);\n set('--vk-grow', String(response.grow));\n set('--vk-defocus', String(response.defocus));\n this.setAttribute('data-size', size);\n this.#applySlop();\n }\n\n #dropGlass(): void {\n this.#glassToken += 1;\n this.#glass?.destroy();\n this.#glass = null;\n this.#glassKey = '';\n this.#lastMaterialKey = '';\n }\n\n #reattachGlass(mode: A11yMode): void {\n const control = this.#control;\n const want = this.#presentation?.glass === true && control !== null;\n const key = want ? `${this.#glassMode()}|${JSON.stringify(mode)}|${this.#size()}` : '';\n if (key === this.#glassKey) return;\n this.#dropGlass();\n this.#glassKey = key;\n if (!want || !control) return;\n const token = this.#glassToken;\n const sample = this.#sample;\n void attachControlGlass(\n control,\n {\n material: VIREGLASS_CONTROL_MATERIAL,\n geometry: this.#geometry(control),\n accessibility: mode,\n onTouch: this.#glassMode() === 'touch',\n sample,\n },\n () => token === this.#glassToken && this.isConnected,\n )\n .then((session) => {\n if (!session) return;\n this.#glass = session;\n if (this.#morph) session.setMorph(this.#morph);\n if (this.#carried !== null) session.setAppear(0);\n if (this.#sample !== sample) session.setSample(this.#sample);\n this.#pushMaterial(true);\n this.dispatchEvent(new CustomEvent('vire-glass-ready'));\n })\n .catch(() => {\n if (token !== this.#glassToken) return;\n this.#glassKey = '';\n this.#glassBroken = true;\n this.#refreshMode(false, true);\n });\n }\n\n #pushMaterial(force = false): void {\n const glass = this.#glass;\n if (!glass) return;\n const atom = visualAtomState(this.#visual, this.#state);\n const snap = (v: number) => Math.round(Math.min(Math.max(v, 0), 1) * MATERIAL_STEPS) / MATERIAL_STEPS;\n const quantized = { ...atom, pressed: snap(atom.pressed), hovered: snap(atom.hovered) };\n const key = `${quantized.pressed}|${quantized.hovered}|${quantized.disabled}`;\n if (!force && key === this.#lastMaterialKey) return;\n this.#lastMaterialKey = key;\n const material: VireGlassMaterial = atomMaterial(VIREGLASS_CONTROL_MATERIAL, kind, quantized);\n glass.setMaterial(material);\n if (this.#glassMode() === 'touch' && this.#forced()) glass.setAppear(quantized.pressed);\n }\n\n #render(immediate = false): void {\n if (immediate && this.#forced()) settleControlVisual(this.#visual, this.#state);\n this.#paint();\n if (this.#frame || (immediate && this.#forced())) return;\n this.#lastFrame = 0;\n this.#frame = requestAnimationFrame((t) => this.#tick(t));\n }\n\n #tick(now: number): void {\n this.#frame = 0;\n if (!this.isConnected) return;\n const dt = this.#lastFrame ? Math.min((now - this.#lastFrame) / 1000, 0.05) : 1 / 60;\n this.#lastFrame = now;\n const moving = stepControlVisual(this.#visual, dt, this.#state, this.#presentation?.instantSprings ?? false);\n this.#paint();\n if (moving) this.#frame = requestAnimationFrame((t) => this.#tick(t));\n }\n\n #paint(): void {\n const v = this.#visual;\n const set = (name: string, value: number) => this.style.setProperty(name, value.toFixed(3));\n set('--vk-press', v.pressed.x);\n set('--vk-hover', v.hovered.x);\n const body = atomBody(VIREGLASS_CONTROL_MATERIAL, visualAtomState(v, this.#state), this.#presentation?.frost ?? false);\n set('--vk-body-alpha', body.alpha);\n set('--vk-body-white', body.white);\n set('--vk-body-lift', body.lift);\n this.toggleAttribute('data-pressed', this.#state.press.by !== null);\n this.toggleAttribute('data-hovered', this.#state.hovered);\n this.toggleAttribute('data-focus', this.#state.focused);\n this.toggleAttribute('data-disabled', this.#state.disabled);\n this.#pushMaterial();\n }\n };\n}\n","import { VIREGLASS_CONTROL_MATERIAL, type BackdropSample, type VireGlassMorph } from 'vireglass';\nimport type { GlassMorph } from 'vireglass/dom';\nimport { presentationFor, sameA11y, type A11yMode, type A11yOverride, type Presentation } from '../kit/a11y';\nimport {\n MENU_CLOSED,\n MENU_CORNERS,\n MENU_ITEM_FILL,\n menuBody,\n menuMaterial,\n menuPlacement,\n menuSurfaceFrame,\n stepMenu,\n type MenuCorner,\n type MenuEvent,\n type MenuFocus,\n type MenuItem,\n type MenuState,\n type Rect,\n type RoundedRect,\n type Size,\n} from '../kit/menu';\nimport { createGrowthState, growthPhase, stepGrowth, type GrowthPhase, type GrowthPoint } from '../kit/morph';\nimport { CONTROL_SIZES, defaultSize, menuSize, type ControlSize } from '../kit/sizes';\nimport { effectiveA11y, watchA11yOverride, watchSystemA11y } from './a11y';\nimport { attachControlGlass, type GlassFrame, type GlassSession } from './glass';\nimport { isCoarsePointer, watchCoarsePointer } from './input';\nimport { ensureStyles } from './styles';\n\nconst FORCE_ATTRIBUTE = 'data-vire-force-state';\nconst FORCED: Record<string, GrowthPhase | null> = {\n closed: null,\n growing: { shrink: 1, grow: 0.3 },\n open: { shrink: 1, grow: 1 },\n retracting: { shrink: 0.55, grow: 0 },\n};\n// A phase given as \"<shrink> <grow>\", for putting a frame next to a reference frame.\nconst FORCED_PHASE = /^\\d*\\.?\\d+ \\d*\\.?\\d+$/;\nconst GLASS_ON = new Set(['', 'present', 'touch']);\nconst MATERIAL_STEPS = 10;\nconst VIEWPORT_MARGIN = 8;\nconst TRIGGER = ':scope > button, :scope > vire-button > button, :scope > vire-icon-button > button';\nconst ACTIVATION_KEYS = new Set(['Enter', ' ']);\n\ntype Carrier = HTMLElement & { setCarried?: (ink: number | null) => void };\ntype Root = Document | ShadowRoot;\n\nexport interface VireMenuElement extends HTMLElement {\n a11y: A11yOverride;\n sample: BackdropSample | null;\n readonly open: boolean;\n}\n\nexport type MenuElementOptions = { nonce?: string | undefined };\n\nlet ids = 0;\n\n// Both stay the author's: a native disabled item cannot take focus, an aria-disabled one can (WAI-ARIA APG).\nconst nativelyDisabled = (item: Element) => item.hasAttribute('disabled');\nconst isDisabled = (item: Element) => nativelyDisabled(item) || item.getAttribute('aria-disabled') === 'true';\n\n/** The element's own tree outwards: its root first, the document last. */\nfunction rootsOf(el: Element): Root[] {\n const roots: Root[] = [];\n let node: Node = el.getRootNode();\n while (node instanceof ShadowRoot) {\n roots.push(node);\n node = node.host.getRootNode();\n }\n roots.push(el.ownerDocument);\n return roots;\n}\n\nfunction dropEmptyStyle(el: Element, hadStyle: boolean): void {\n if (!hadStyle && el.getAttribute('style') === '') el.removeAttribute('style');\n}\n\nexport function createMenuElementClass(options: MenuElementOptions = {}) {\n return class VireMenu extends HTMLElement implements VireMenuElement {\n static observedAttributes = ['glass', 'size', 'corner', FORCE_ATTRIBUTE];\n\n #trigger: HTMLButtonElement | null = null;\n #carrier: Carrier | null = null;\n #list: HTMLElement | null = null;\n #restore: (() => void)[] = [];\n #itemRestore = new Map<Element, () => void>();\n #hadStyle = { host: false, list: false };\n #cleanups: (() => void)[] = [];\n #state: MenuState = MENU_CLOSED;\n #growth = createGrowthState();\n #from: RoundedRect | null = null;\n #to: RoundedRect | null = null;\n #anchor: GrowthPoint | null = null;\n #natural: Size | null = null;\n #out = false;\n #viaPointer = false;\n #frame = 0;\n #placeFrame = 0;\n #inertTimer = 0;\n #lastFrame = 0;\n /** When the content was last fully in focus; null while it is still arriving or leaving. */\n #readySince: number | null = null;\n /** When the content came into focus, which is when a deliberate key may choose. */\n #inSince: number | null = null;\n #downAt = Number.NEGATIVE_INFINITY;\n #own: A11yOverride = {};\n #mode: A11yMode | null = null;\n #presentation: Presentation | null = null;\n #glass: GlassSession | null = null;\n #glassToken = 0;\n #glassKey = '';\n #glassBroken = false;\n #lastLens = { material: '', morph: '', geometry: '' };\n #sample: BackdropSample | null = null;\n #held: BackdropSample | null = null;\n\n get a11y(): A11yOverride {\n return this.#own;\n }\n\n set a11y(next: A11yOverride) {\n this.#own = { ...next };\n if (this.#list) this.#refreshMode();\n }\n\n get sample(): BackdropSample | null {\n return this.#sample;\n }\n\n set sample(next: BackdropSample | null) {\n this.#sample = next;\n if (!this.#glass) return;\n if (this.#out) this.#holdSample();\n else this.#glass.setSample(next);\n }\n\n get open(): boolean {\n return this.#state.open;\n }\n\n connectedCallback(): void {\n for (const key of ['a11y', 'sample']) {\n if (!Object.prototype.hasOwnProperty.call(this, key)) continue;\n const value: unknown = Reflect.get(this, key);\n Reflect.deleteProperty(this, key);\n Reflect.set(this, key, value);\n }\n this.#hadStyle.host = this.hasAttribute('style');\n ensureStyles(this, options.nonce);\n this.#cleanups.push(watchCoarsePointer(() => this.#list && this.#refreshMode(true)));\n this.#cleanups.push(watchSystemA11y(() => this.#list && this.#refreshMode()));\n this.#cleanups.push(watchA11yOverride(() => this.#list && this.#refreshMode()));\n this.#awaitParts();\n }\n\n disconnectedCallback(): void {\n for (const cleanup of this.#cleanups.splice(0)) cleanup();\n cancelAnimationFrame(this.#frame);\n cancelAnimationFrame(this.#placeFrame);\n clearTimeout(this.#inertTimer);\n this.#frame = this.#placeFrame = this.#inertTimer = 0;\n this.#dropGlass();\n const list = this.#list;\n if (list) {\n if (list.matches(':popover-open')) list.hidePopover();\n list.inert = false;\n list.removeAttribute('data-scroll');\n for (const name of Array.from(list.style)) if (name.startsWith('--vk-')) list.style.removeProperty(name);\n for (const item of this.#items()) item.removeAttribute('data-pressed');\n }\n this.#carrier?.setCarried?.(null);\n for (const restore of this.#itemRestore.values()) restore();\n this.#itemRestore.clear();\n for (const restore of this.#restore.splice(0).reverse()) restore();\n if (list) dropEmptyStyle(list, this.#hadStyle.list);\n this.#trigger = null;\n this.#carrier = null;\n this.#list = null;\n this.#state = MENU_CLOSED;\n this.#growth = createGrowthState();\n this.#out = false;\n this.#from = this.#to = this.#anchor = null;\n this.#natural = null;\n this.#held = null;\n this.#readySince = null;\n this.#inSince = null;\n for (const name of ['data-vk', 'data-surface', 'data-glass', 'data-frost', 'data-contrast', 'data-size', 'data-phase', 'data-measure']) {\n this.removeAttribute(name);\n }\n for (const name of Array.from(this.style)) if (name.startsWith('--vk-')) this.style.removeProperty(name);\n dropEmptyStyle(this, this.#hadStyle.host);\n this.#presentation = null;\n this.#mode = null;\n }\n\n attributeChangedCallback(name: string): void {\n if (!this.#list) return;\n if (name === FORCE_ATTRIBUTE) this.#applyForced();\n else if (name === 'corner') this.#out && this.#place();\n else this.#refreshMode(true);\n }\n\n // The parser connects the element before its children exist, so the parts are waited for, not made up.\n #awaitParts(): void {\n if (this.#tryUpgrade()) return;\n const observer = new MutationObserver(() => {\n if (this.#tryUpgrade()) observer.disconnect();\n });\n observer.observe(this, { childList: true, subtree: true });\n this.#cleanups.push(() => observer.disconnect());\n }\n\n #tryUpgrade(): boolean {\n const list = this.querySelector<HTMLElement>(':scope > [popover]');\n const trigger = this.querySelector<HTMLButtonElement>(TRIGGER);\n if (!list || !trigger) return false;\n this.#upgrade(trigger, list);\n return true;\n }\n\n #keep(el: Element, name: string, value: string | null, into: (() => void)[] = this.#restore): void {\n const was = el.getAttribute(name);\n if (value === null) el.removeAttribute(name);\n else el.setAttribute(name, value);\n into.push(() => (was === null ? el.removeAttribute(name) : el.setAttribute(name, was)));\n }\n\n #upgrade(trigger: HTMLButtonElement, list: HTMLElement): void {\n this.#trigger = trigger;\n this.#list = list;\n this.#hadStyle.list = list.hasAttribute('style');\n const parent = trigger.parentElement;\n this.#carrier = parent && parent !== this ? (parent as Carrier) : null;\n const wasOpen = list.matches(':popover-open');\n this.setAttribute('data-vk', '');\n ids += 1;\n if (!list.id) this.#keep(list, 'id', `vire-menu-${ids}`);\n if (!trigger.id) this.#keep(trigger, 'id', `vire-menu-trigger-${ids}`);\n // The platform would hide the list at once; the growth has to run back before it leaves the top layer.\n this.#keep(trigger, 'popovertarget', null);\n this.#keep(trigger, 'popovertargetaction', null);\n this.#keep(trigger, 'aria-haspopup', 'menu');\n this.#keep(trigger, 'aria-expanded', 'false');\n this.#keep(trigger, 'aria-controls', list.id);\n this.#keep(list, 'popover', 'manual');\n this.#keep(list, 'role', 'menu');\n this.#keep(list, 'tabindex', '-1');\n this.#keep(list, 'aria-labelledby', trigger.id);\n this.#adoptItems();\n const items = new MutationObserver((records) => {\n let changed = false;\n for (const record of records) {\n if (record.type === 'childList' && record.target === list) {\n changed = true;\n for (const node of record.removedNodes) this.#releaseItem(node);\n } else if (record.type === 'attributes') {\n this.#keepFocusOff(record.target as Element);\n }\n }\n if (!changed) return;\n this.#adoptItems();\n if (this.#out) {\n this.#natural = null;\n this.#place();\n }\n });\n // Read, never rewritten: the disabled attribute stays the author's.\n items.observe(list, { childList: true, subtree: true, attributes: true, attributeFilter: ['disabled'] });\n this.#cleanups.push(() => items.disconnect());\n this.#listen(trigger, list);\n this.#mode = null;\n this.#refreshMode();\n if (this.#forced()) this.#applyForced();\n else if (wasOpen) this.#show('menu');\n }\n\n #adoptItems(): void {\n for (const item of this.#items()) {\n if (this.#itemRestore.has(item)) continue;\n const restore: (() => void)[] = [];\n this.#keep(item, 'popovertarget', null, restore);\n this.#keep(item, 'popovertargetaction', null, restore);\n this.#keep(item, 'role', 'menuitem', restore);\n this.#keep(item, 'tabindex', '-1', restore);\n this.#itemRestore.set(item, () => {\n for (const undo of restore.reverse()) undo();\n });\n }\n }\n\n /** A focused item that turns natively disabled loses focus to the page; the menu keeps it instead. */\n #keepFocusOff(item: Element): void {\n const list = this.#list;\n if (!list || !this.#state.open || item.parentElement !== list || !nativelyDisabled(item)) return;\n const active = (list.getRootNode() as Root).activeElement;\n if (active !== item && list.contains(active)) return;\n this.#state = { ...this.#state, active: -1 };\n list.focus({ preventScroll: true });\n }\n\n #releaseItem(node: Node): void {\n const restore = this.#itemRestore.get(node as Element);\n if (!restore) return;\n this.#itemRestore.delete(node as Element);\n restore();\n }\n\n #items(): HTMLButtonElement[] {\n return this.#list ? Array.from(this.#list.querySelectorAll<HTMLButtonElement>(':scope > button')) : [];\n }\n\n #model(): MenuItem[] {\n return this.#items().map((item) => ({\n label: item.getAttribute('aria-label') ?? item.textContent ?? '',\n disabled: isDisabled(item),\n focusable: !nativelyDisabled(item),\n }));\n }\n\n #listen(trigger: HTMLButtonElement, list: HTMLElement): void {\n const on = <E extends Event>(target: EventTarget, type: string, handler: (event: E) => void, capture = false) => {\n target.addEventListener(type, handler as EventListener, capture);\n this.#cleanups.push(() => target.removeEventListener(type, handler as EventListener, capture));\n };\n const itemOf = (target: EventTarget | null) => {\n const item = target instanceof Element ? target.closest('button') : null;\n return item && item.parentElement === list ? (item as HTMLButtonElement) : null;\n };\n const drop = (e: Event) => {\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n\n on<PointerEvent>(this.#carrier ?? trigger, 'pointerdown', () => (this.#viaPointer = true));\n on<KeyboardEvent>(trigger, 'keydown', (e) => {\n this.#viaPointer = false;\n if (this.#forced()) return;\n // A held key would open, choose the first item and open again, round and round.\n if (e.repeat && ACTIVATION_KEYS.has(e.key)) {\n e.preventDefault();\n } else if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n this.#show(e.key === 'ArrowDown' ? 'first' : 'last');\n } else if (e.key === 'Escape' && this.#state.open) {\n e.preventDefault();\n this.#close({ type: 'dismiss', reason: 'escape' });\n }\n });\n on<MouseEvent>(trigger, 'click', (e) => {\n if (this.#forced()) return;\n // The menu covers its trigger, yet a press can still land on it while the surface grows: a second click\n // there belongs to the press that opened the menu, as it would on the first item.\n const pointer = e.detail > 0 || this.#viaPointer;\n const early = e.detail > 1 || (pointer && this.#readySince === null);\n if (this.#state.open && !early) this.#close({ type: 'dismiss', reason: 'trigger' });\n else if (!this.#state.open) this.#show(this.#viaPointer ? 'menu' : 'first');\n this.#viaPointer = false;\n });\n\n on<KeyboardEvent>(list, 'keydown', (e) => {\n if (!this.#state.open || this.#forced()) return;\n const move = { ArrowDown: 'next', ArrowUp: 'previous', Home: 'first', End: 'last' } as const;\n if (e.repeat && ACTIVATION_KEYS.has(e.key)) {\n e.preventDefault();\n } else if (e.key in move) {\n e.preventDefault();\n this.#step({ type: 'move', to: move[e.key as keyof typeof move] });\n } else if (e.key === 'Escape') {\n e.preventDefault();\n this.#close({ type: 'dismiss', reason: 'escape' });\n } else if (e.key === 'Tab') {\n // Focus is put on the trigger before the browser moves it, so Tab carries on from there.\n this.#close({ type: 'dismiss', reason: 'tab' });\n } else if (e.key.length === 1 && e.key !== ' ' && !e.ctrlKey && !e.metaKey && !e.altKey) {\n this.#step({ type: 'type', key: e.key, at: e.timeStamp / 1000 });\n } else if (ACTIVATION_KEYS.has(e.key)) {\n const item = itemOf(e.target);\n if (item && !isDisabled(item)) item.setAttribute('data-pressed', '');\n }\n });\n on<KeyboardEvent>(list, 'keyup', (e) => itemOf(e.target)?.removeAttribute('data-pressed'));\n\n // Captured, so a choice closes the menu even when an item's own handler stops the click.\n on<MouseEvent>(\n list,\n 'click',\n (e) => {\n const item = itemOf(e.target);\n if (!item || this.#forced()) return;\n if (isDisabled(item)) return drop(e);\n if (!this.#state.open) {\n if (this.#out) drop(e);\n return;\n }\n // Not what the person chose: the second click of a double click, a pointer click before the menu has\n // arrived or whose press began earlier (the item grew in under the pointer), or a key before the content shows.\n const ready = this.#readySince;\n const pointerEarly = e.detail > 0 && (ready === null || this.#downAt < ready);\n if (e.detail > 1 || pointerEarly || this.#inSince === null) return drop(e);\n this.#close({ type: 'choose', index: this.#items().indexOf(item) });\n },\n true,\n );\n on<PointerEvent>(\n list,\n 'pointerdown',\n (e) => {\n this.#downAt = e.timeStamp;\n const item = itemOf(e.target);\n if (e.button === 0 && item && !isDisabled(item) && !this.#forced()) item.setAttribute('data-pressed', '');\n },\n true,\n );\n on<PointerEvent>(list, 'pointermove', (e) => {\n const item = itemOf(e.target);\n if (item && this.#state.open && !this.#forced()) this.#step({ type: 'point', index: this.#items().indexOf(item) });\n });\n for (const type of ['pointerup', 'pointercancel', 'pointerout']) {\n on<PointerEvent>(list, type, (e) => itemOf(e.target)?.removeAttribute('data-pressed'));\n }\n on<FocusEvent>(list, 'focusout', (e) => {\n const to = e.relatedTarget as Node | null;\n if (!this.#state.open || !to || this.#forced()) return;\n if (list.contains(to) || trigger.contains(to) || this.#carrier?.contains(to)) return;\n this.#close({ type: 'dismiss', reason: 'outside' });\n });\n\n // A press is judged in the innermost tree that can see it: a closed shadow root hides the menu from the document.\n const roots = rootsOf(this);\n roots.forEach((root, i) => {\n const inner = i === 0 ? null : (roots[i - 1] as ShadowRoot).host;\n on<PointerEvent>(\n root,\n 'pointerdown',\n (e) => {\n if (!this.#state.open || this.#forced()) return;\n const path = e.composedPath();\n if (inner && path.includes(inner)) return;\n if ([list, trigger, this.#carrier].some((node) => node !== null && path.includes(node))) return;\n this.#close({ type: 'dismiss', reason: 'outside' });\n },\n true,\n );\n on(root, 'scroll', (e: Event) => this.#follow(e), true);\n });\n on(window, 'resize', (e: Event) => this.#follow(e));\n // A trigger inside an element that upgrades after this one changes size under the menu.\n if (typeof ResizeObserver !== 'undefined') {\n const resized = new ResizeObserver(() => this.#out && this.#follow());\n resized.observe(this.#carrier ?? trigger);\n this.#cleanups.push(() => resized.disconnect());\n }\n }\n\n /** Puts the menu back over its trigger after a scroll or a resize, once per frame. */\n #follow(e?: Event): void {\n if (!this.#out || this.#placeFrame) return;\n if (e?.target instanceof Node && this.#list?.contains(e.target)) return;\n this.#placeFrame = requestAnimationFrame(() => {\n this.#placeFrame = 0;\n if (this.#out) this.#place();\n });\n }\n\n #step(event: MenuEvent): void {\n const step = stepMenu(this.#state, event, this.#model());\n this.#state = step.state;\n this.#applyFocus(step.focus);\n }\n\n #applyFocus(focus: MenuFocus): void {\n const list = this.#list!;\n if (focus.to === 'item') this.#items()[focus.index]?.focus({ preventScroll: true });\n else if (focus.to === 'menu') list.focus({ preventScroll: true });\n else if (focus.to === 'trigger') this.#trigger!.focus({ preventScroll: true });\n else if (focus.to === 'none') {\n const active = (list.getRootNode() as Root).activeElement;\n if (active instanceof HTMLElement && list.contains(active)) active.blur();\n }\n }\n\n #show(focus: 'menu' | 'first' | 'last'): void {\n const list = this.#list!;\n const step = stepMenu(this.#state, { type: 'open', focus }, this.#model());\n this.#state = step.state;\n this.#readySince = null;\n this.#inSince = null;\n clearTimeout(this.#inertTimer);\n list.inert = false;\n this.#trigger!.setAttribute('aria-expanded', 'true');\n this.#comeOut();\n this.#run();\n this.#applyFocus(step.focus);\n }\n\n #close(event: MenuEvent): void {\n const step = stepMenu(this.#state, event, this.#model());\n const closing = this.#state.open && !step.state.open;\n this.#state = step.state;\n this.#applyFocus(step.focus);\n if (!closing) return;\n this.#readySince = null;\n this.#inSince = null;\n this.#trigger!.setAttribute('aria-expanded', 'false');\n for (const item of this.#items()) item.removeAttribute('data-pressed');\n // Not inside the click that chose: the item still owes its own handlers that click.\n clearTimeout(this.#inertTimer);\n this.#inertTimer = window.setTimeout(() => {\n if (this.#list && !this.#state.open && this.#out) this.#list.inert = true;\n });\n this.#run();\n }\n\n #comeOut(): void {\n const list = this.#list!;\n const wasOut = this.#out;\n if (!list.matches(':popover-open')) list.showPopover();\n this.#out = true;\n if (!wasOut) this.#natural = null;\n this.#place();\n if (wasOut) return;\n this.#carrier?.setCarried?.(1);\n this.#holdSample();\n }\n\n #triggerBox(): RoundedRect {\n const trigger = this.#trigger!;\n // The host's box is the unscaled one; a pressed button is still growing when the menu opens.\n const r = (this.#carrier ?? trigger).getBoundingClientRect();\n const radius = parseFloat(getComputedStyle(trigger).borderTopLeftRadius) || 0;\n return { x: r.x, y: r.y, width: r.width, height: r.height, radius: Math.min(radius, r.width / 2, r.height / 2) };\n }\n\n #corner(): MenuCorner | undefined {\n const wanted = this.getAttribute('corner');\n return wanted && Object.hasOwn(MENU_CORNERS, wanted) ? MENU_CORNERS[wanted as keyof typeof MENU_CORNERS] : undefined;\n }\n\n #measure(): Size {\n const list = this.#list!;\n this.setAttribute('data-measure', '');\n const natural = { width: list.offsetWidth, height: list.offsetHeight };\n this.removeAttribute('data-measure');\n return natural;\n }\n\n #place(): void {\n const list = this.#list!;\n const spec = menuSize(this.#size());\n this.#natural ??= this.#measure();\n const natural = this.#natural;\n const viewport = { width: document.documentElement.clientWidth, height: document.documentElement.clientHeight };\n const trigger = this.#triggerBox();\n const placement = menuPlacement(trigger, natural, viewport, { corner: this.#corner(), margin: VIEWPORT_MARGIN });\n this.#from = trigger;\n this.#to = { ...placement.rect, radius: spec.radius };\n this.#anchor = placement.anchor;\n list.style.setProperty('--vk-content-w', `${placement.rect.width - 2 * spec.padding}px`);\n list.toggleAttribute('data-scroll', placement.rect.height < natural.height);\n this.#paint();\n }\n\n #holdSample(): void {\n const glass = this.#glass;\n if (!glass || !this.#to) return;\n let sample = this.#sample;\n if (!sample) {\n this.#setBox(this.#to);\n sample = glass.probe();\n }\n this.#held = sample;\n glass.setSample(sample);\n this.#paint();\n }\n\n #setBox(box: RoundedRect): void {\n const s = this.#list!.style;\n const px = (v: number) => `${v.toFixed(2)}px`;\n s.setProperty('--vk-x', px(box.x));\n s.setProperty('--vk-y', px(box.y));\n s.setProperty('--vk-w', px(box.width));\n s.setProperty('--vk-h', px(box.height));\n s.setProperty('--vk-r', px(box.radius));\n }\n\n #run(): void {\n const instant = this.#presentation?.instantSprings ?? false;\n if (instant) stepGrowth(this.#growth, 0, this.#state.open, true);\n this.#paint();\n if (instant) {\n this.#settle();\n return;\n }\n if (this.#frame) return;\n this.#lastFrame = 0;\n this.#frame = requestAnimationFrame((t) => this.#tick(t));\n }\n\n #tick(now: number): void {\n this.#frame = 0;\n if (!this.isConnected || this.#forced()) return;\n const dt = this.#lastFrame ? Math.min((now - this.#lastFrame) / 1000, 0.05) : 1 / 60;\n this.#lastFrame = now;\n const instant = this.#presentation?.instantSprings ?? false;\n const moving = stepGrowth(this.#growth, dt, this.#state.open, instant);\n this.#paint();\n if (moving) this.#frame = requestAnimationFrame((t) => this.#tick(t));\n else this.#settle();\n }\n\n #settle(): void {\n if (this.#state.open) {\n this.#paint();\n return;\n }\n const list = this.#list!;\n // The list's own toggle event fires here, once the growth has run back; aria-expanded turned false as it began.\n if (list.matches(':popover-open')) list.hidePopover();\n clearTimeout(this.#inertTimer);\n list.inert = false;\n list.removeAttribute('data-scroll');\n for (const name of Array.from(list.style)) if (name.startsWith('--vk-')) list.style.removeProperty(name);\n this.removeAttribute('data-phase');\n this.#out = false;\n this.#held = null;\n this.#from = this.#to = this.#anchor = null;\n this.#glass?.setSample(this.#sample);\n this.#carrier?.setCarried?.(null);\n }\n\n #paint(): void {\n const list = this.#list;\n if (!list || !this.#out || !this.#from || !this.#to || !this.#anchor) return;\n const phase = growthPhase(this.#growth);\n const f = menuSurfaceFrame(this.#from, this.#to, this.#anchor, phase);\n const settled = phase.shrink === 1 && phase.grow === 1;\n // The ink as drawn decides it, so what shows in focus is what can be chosen.\n const inkIn = Math.round(f.ink.incoming * 1000) / 1000;\n // Arrived: the content in focus and the surface no longer growing (past its overshoot).\n if (this.#state.open && inkIn >= 1) {\n this.#inSince ??= performance.now();\n if (this.#growth.grow.v <= 0) this.#readySince ??= performance.now();\n }\n this.setAttribute('data-phase', settled ? 'open' : 'moving');\n this.#setBox(f.box);\n const s = list.style;\n s.setProperty('--vk-cx', `${f.content.x.toFixed(2)}px`);\n s.setProperty('--vk-cy', `${f.content.y.toFixed(2)}px`);\n s.setProperty('--vk-ink-in', inkIn.toFixed(3));\n const body = menuBody(VIREGLASS_CONTROL_MATERIAL, f.activity, this.#presentation?.frost ?? false);\n s.setProperty('--vk-body-alpha', body.alpha.toFixed(3));\n s.setProperty('--vk-body-white', body.white.toFixed(3));\n s.setProperty('--vk-body-lift', body.lift.toFixed(3));\n this.#carrier?.setCarried?.(f.ink.outgoing);\n this.#pushGlass(f.box, f.morph, f.activity);\n }\n\n /** Hands the lens only what changed: a new morph or material rebuilds its filter, a moved box needs nothing. */\n #pushGlass(box: RoundedRect, morph: VireGlassMorph | undefined, activity: number): void {\n const glass = this.#glass;\n if (!glass) return;\n // Whole pixels, so a repeated open finds its displacement maps in the core's cache.\n const round = Math.round;\n const step = round(Math.min(Math.max(activity, 0), 1) * MATERIAL_STEPS) / MATERIAL_STEPS;\n const geometry = { width: round(box.width), height: round(box.height), cornerRadius: round(box.radius) };\n const lens: GlassMorph | null = morph\n ? {\n smoothing: round(morph.smoothing),\n shape: {\n offsetX: round(morph.offsetX),\n offsetY: round(morph.offsetY),\n width: round(morph.width),\n height: round(morph.height),\n cornerRadius: round(morph.cornerRadius),\n },\n }\n : null;\n const key = {\n material: String(step),\n morph: lens ? JSON.stringify(lens) : 'none',\n geometry: `${geometry.width}x${geometry.height}r${geometry.cornerRadius}`,\n };\n const last = this.#lastLens;\n if (key.material === last.material && key.morph === last.morph && key.geometry === last.geometry) return;\n const next: GlassFrame = {};\n if (key.geometry !== last.geometry) next.geometry = geometry;\n if (key.material !== last.material) next.material = menuMaterial(VIREGLASS_CONTROL_MATERIAL, step);\n if (key.morph !== last.morph) next.morph = lens;\n this.#lastLens = key;\n glass.frame(next);\n }\n\n #forced(): string | null {\n const wanted = this.getAttribute(FORCE_ATTRIBUTE);\n return wanted !== null && (Object.hasOwn(FORCED, wanted) || FORCED_PHASE.test(wanted)) ? wanted : null;\n }\n\n #applyForced(): void {\n const forced = this.#forced();\n const [shrink, grow] = (forced ?? '').split(' ').map(Number);\n const phase = !forced ? null : Object.hasOwn(FORCED, forced) ? FORCED[forced]! : { shrink: shrink!, grow: grow! };\n cancelAnimationFrame(this.#frame);\n this.#frame = 0;\n if (!phase) {\n this.#state = MENU_CLOSED;\n this.#growth = createGrowthState();\n this.#trigger!.setAttribute('aria-expanded', 'false');\n if (this.#out) this.#settle();\n return;\n }\n this.#state = { ...MENU_CLOSED, open: forced !== 'retracting' };\n this.#growth = {\n shrink: { x: phase.shrink, v: 0, target: phase.shrink },\n grow: { x: phase.grow, v: 0, target: phase.grow },\n };\n this.#trigger!.setAttribute('aria-expanded', String(this.#state.open));\n this.#list!.inert = true;\n this.#comeOut();\n }\n\n #size(): ControlSize {\n const wanted = this.getAttribute('size');\n if (wanted && (CONTROL_SIZES as readonly string[]).includes(wanted)) return wanted as ControlSize;\n return defaultSize({ touch: isCoarsePointer() });\n }\n\n #wantsGlass(): boolean {\n const wanted = this.getAttribute('glass');\n return wanted !== null && GLASS_ON.has(wanted);\n }\n\n #refreshMode(force = false, afterFailure = false): void {\n if (!afterFailure) this.#glassBroken = false;\n const mode = effectiveA11y(this.#own);\n let next = presentationFor(mode, this.#wantsGlass());\n if (this.#glassBroken && next.glass) next = { ...next, glass: false, surface: next.frost ? 'frosted' : 'plain' };\n const changed =\n force || !this.#mode || !sameA11y(this.#mode, mode) || next.surface !== this.#presentation?.surface;\n this.#mode = mode;\n this.#presentation = next;\n this.#applySize();\n this.setAttribute('data-surface', next.surface);\n this.toggleAttribute('data-contrast', next.contrastBorder);\n this.toggleAttribute('data-frost', next.frost);\n this.setAttribute('data-glass', next.glass ? 'on' : 'off');\n if (changed) this.#reattachGlass(mode);\n if (this.#out) {\n this.#natural = null;\n this.#place();\n }\n }\n\n #applySize(): void {\n const spec = menuSize(this.#size());\n const set = (name: string, value: string) => this.style.setProperty(name, value);\n set('--vk-menu-row', `${spec.row}px`);\n set('--vk-menu-pad', `${spec.padding}px`);\n set('--vk-menu-radius', `${spec.radius}px`);\n set('--vk-item-radius', `${spec.itemRadius}px`);\n set('--vk-menu-icon', `${spec.icon}px`);\n set('--vk-label-pad', `${spec.labelPad}px`);\n set('--vk-fill-active', String(MENU_ITEM_FILL.active));\n set('--vk-fill-pressed', String(MENU_ITEM_FILL.pressed));\n this.setAttribute('data-size', this.#size());\n }\n\n #dropGlass(): void {\n this.#glassToken += 1;\n this.#glass?.destroy();\n this.#glass = null;\n this.#glassKey = '';\n this.#lastLens = { material: '', morph: '', geometry: '' };\n }\n\n #reattachGlass(mode: A11yMode): void {\n const list = this.#list;\n const want = this.#presentation?.glass === true && list !== null;\n const key = want ? `${JSON.stringify(mode)}|${this.#size()}` : '';\n if (key === this.#glassKey) return;\n this.#dropGlass();\n this.#glassKey = key;\n if (!want || !list) return;\n const token = this.#glassToken;\n const box: Rect = this.#from ?? this.#triggerBox();\n void attachControlGlass(\n list,\n {\n material: menuMaterial(VIREGLASS_CONTROL_MATERIAL, 0),\n geometry: { width: Math.round(box.width), height: Math.round(box.height), cornerRadius: menuSize(this.#size()).radius },\n accessibility: mode,\n onTouch: false,\n sample: this.#held ?? this.#sample,\n interactive: false,\n },\n () => token === this.#glassToken && this.isConnected,\n )\n .then((session) => {\n if (!session) return;\n this.#glass = session;\n this.#lastLens = { material: '', morph: '', geometry: '' };\n if (this.#out) this.#holdSample();\n this.dispatchEvent(new CustomEvent('vire-glass-ready'));\n })\n .catch(() => {\n if (token !== this.#glassToken) return;\n this.#glassKey = '';\n this.#glassBroken = true;\n this.#refreshMode(false, true);\n });\n }\n };\n}\n","import { createControlElementClass } from './element';\nimport { createMenuElementClass } from './menu';\n\nexport { getA11yOverride, setA11yOverride, systemA11y } from './a11y';\nexport type { VireControlElement } from './element';\nexport type { VireMenuElement } from './menu';\nexport { STYLES } from './styles';\n\nexport const BUTTON_TAG = 'vire-button';\nexport const ICON_BUTTON_TAG = 'vire-icon-button';\nexport const MENU_TAG = 'vire-menu';\n\nexport type DefineOptions = {\n /** CSP nonce for the stylesheet the elements inject. Alternatively, ship `STYLES` yourself. */\n nonce?: string | undefined;\n registry?: CustomElementRegistry | undefined;\n};\n\n// A call rather than an import side effect: the classes extend `HTMLElement`, which a server lacks.\nexport function defineVireElements(options: DefineOptions = {}): void {\n const registry = options.registry ?? (typeof customElements === 'undefined' ? undefined : customElements);\n if (!registry) return;\n const pairs: [string, 'button' | 'iconButton'][] = [\n [BUTTON_TAG, 'button'],\n [ICON_BUTTON_TAG, 'iconButton'],\n ];\n for (const [tag, kind] of pairs) {\n if (!registry.get(tag)) registry.define(tag, createControlElementClass(kind, { nonce: options.nonce }));\n }\n if (!registry.get(MENU_TAG)) registry.define(MENU_TAG, createMenuElementClass({ nonce: options.nonce }));\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vireuikit",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "A UI kit built on the VireGlass material: atom states
|
|
3
|
+
"version": "0.7.0",
|
|
4
|
+
"description": "A UI kit built on the VireGlass material: atom states, capsule-to-target morphs and web elements.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Danil Kotlaev",
|
|
7
7
|
"homepage": "https://github.com/pruffit/vireuikit#readme",
|
|
@@ -31,6 +31,11 @@
|
|
|
31
31
|
"import": "./dist/index.js",
|
|
32
32
|
"require": "./dist/index.cjs"
|
|
33
33
|
},
|
|
34
|
+
"./web": {
|
|
35
|
+
"types": "./dist/web.d.ts",
|
|
36
|
+
"import": "./dist/web.js",
|
|
37
|
+
"require": "./dist/web.cjs"
|
|
38
|
+
},
|
|
34
39
|
"./package.json": "./package.json"
|
|
35
40
|
},
|
|
36
41
|
"main": "./dist/index.cjs",
|
|
@@ -44,21 +49,28 @@
|
|
|
44
49
|
],
|
|
45
50
|
"scripts": {
|
|
46
51
|
"build": "tsup",
|
|
47
|
-
"typecheck": "tsc --noEmit && tsc -p tsconfig.scripts.json",
|
|
52
|
+
"typecheck": "tsc --noEmit && tsc -p tsconfig.kit.json && tsc -p tsconfig.scripts.json",
|
|
48
53
|
"test": "vitest run",
|
|
49
54
|
"test:watch": "vitest",
|
|
50
55
|
"check:english": "node scripts/check-english.mjs",
|
|
51
56
|
"check:package": "node scripts/check-package.mjs",
|
|
52
|
-
"check:readme": "node scripts/check-readme.mjs"
|
|
57
|
+
"check:readme": "node scripts/check-readme.mjs",
|
|
58
|
+
"lab": "vite --config lab/vite.config.ts",
|
|
59
|
+
"check:lab": "playwright test behavior",
|
|
60
|
+
"check:lab:visual": "playwright test visual",
|
|
61
|
+
"check:lab:visual:update": "playwright test visual --update-snapshots"
|
|
53
62
|
},
|
|
54
63
|
"peerDependencies": {
|
|
55
|
-
"vireglass": "^
|
|
64
|
+
"vireglass": "^3.0.0"
|
|
56
65
|
},
|
|
57
66
|
"devDependencies": {
|
|
67
|
+
"@playwright/test": "1.63.0",
|
|
58
68
|
"@types/node": "^22",
|
|
69
|
+
"esbuild": "0.27.7",
|
|
59
70
|
"tsup": "^8.5.0",
|
|
60
71
|
"typescript": "^5.8.3",
|
|
61
|
-
"vireglass": "^
|
|
72
|
+
"vireglass": "^3.0.0",
|
|
73
|
+
"vite": "8.3.2",
|
|
62
74
|
"vitest": "^4.1.11"
|
|
63
75
|
}
|
|
64
76
|
}
|