vireuikit 0.6.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/dist/web.js.map CHANGED
@@ -1 +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/index.ts"],"names":[],"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};\n\nexport type GlassSession = {\n setMaterial(material: VireGlassMaterial): void;\n setGeometry(geometry: VireGlassGeometry): void;\n setAppear(t: number): void;\n setMorph(morph: GlassMorph | null): void;\n setSample(sample: BackdropSample | null): void;\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 } = 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.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 setAppear: (t) => handle.setAppear(t),\n setMorph: (morph) => handle.setMorph(morph),\n setSample: (sample) => handle.setSample(sample),\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`;\n\n// Every rule is keyed on `data-vk`, set at upgrade, so a native button 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{display:inline-flex;vertical-align:middle}\n${HOST}{position:relative;--vk-press:0;--vk-hover:0;--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)*100%),transparent);\n text-shadow:0 0 calc(var(--vk-press)*var(--vk-defocus)*1px) currentColor;\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);filter:blur(calc(var(--vk-press)*var(--vk-defocus)*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 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))}\n${HOST}[data-frost][data-surface=glass]>button{color:oklab(from var(--vireglass-tint-color,#fff) calc(.95 - .87*clamp(0,(l + var(--vk-body-lift) - .6)*20,1)) 0 0)}\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@supports not (color:oklab(from red l a b)){\n${HOST}[data-frost][data-surface=glass]>button{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{background:color-mix(in srgb,color-mix(in srgb,#fff calc((1 - var(--vireglass-ink,0))*100%),#000) 88%,transparent)}\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}\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}\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\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 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 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 this.#control = null;\n this.#state = CONTROL_IDLE;\n this.#suppressClick = false;\n for (const name of ['data-vk', 'data-surface', 'data-glass', 'data-frost', 'data-size']) this.removeAttribute(name);\n for (const name of Array.from(this.style)) if (name.startsWith('--vk-')) this.style.removeProperty(name);\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.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.#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 { createControlElementClass } from './element';\n\nexport { getA11yOverride, setA11yOverride, systemA11y } from './a11y';\nexport type { VireControlElement } from './element';\nexport { STYLES } from './styles';\n\nexport const BUTTON_TAG = 'vire-button';\nexport const ICON_BUTTON_TAG = 'vire-icon-button';\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}\n"]}
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,6 +1,6 @@
1
1
  {
2
2
  "name": "vireuikit",
3
- "version": "0.6.0",
3
+ "version": "0.7.0",
4
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",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/kit/a11y.ts","../src/kit/atom.ts","../src/kit/behavior/focus.ts","../src/kit/behavior/hover.ts","../src/kit/behavior/press.ts","../src/kit/behavior/control.ts","../src/kit/morph.ts","../src/kit/behavior/visual.ts","../src/kit/response.ts","../src/kit/sizes.ts"],"names":["mix"],"mappings":"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","file":"chunk-I3BD3XGC.js","sourcesContent":["export type A11yMode = {\n reduceTransparency: boolean;\n increaseContrast: boolean;\n reduceMotion: boolean;\n};\n\nexport const A11Y_NONE: A11yMode = {\n reduceTransparency: false,\n increaseContrast: false,\n reduceMotion: false,\n};\n\n/** `undefined` follows the system; a boolean overrides it. */\nexport type A11yOverride = { [K in keyof A11yMode]?: boolean | undefined };\n\nexport function resolveA11y(system: A11yMode, override: A11yOverride = {}): A11yMode {\n return {\n reduceTransparency: override.reduceTransparency ?? system.reduceTransparency,\n increaseContrast: override.increaseContrast ?? system.increaseContrast,\n reduceMotion: override.reduceMotion ?? system.reduceMotion,\n };\n}\n\n/** `plain`: no glass was asked for. `frosted`: the stand-in when glass under reduced transparency cannot attach. */\nexport type Surface = 'plain' | 'frosted' | 'glass';\n\nexport type Presentation = {\n glass: boolean;\n /** Reduced transparency: the glass stays and frosts. */\n frost: boolean;\n surface: Surface;\n contrastBorder: boolean;\n instantSprings: boolean;\n};\n\n// Reduced motion stops the springs, not the press response itself.\nexport function presentationFor(mode: A11yMode, wantsGlass: boolean): Presentation {\n return {\n glass: wantsGlass,\n frost: wantsGlass && mode.reduceTransparency,\n surface: wantsGlass ? 'glass' : 'plain',\n contrastBorder: mode.increaseContrast,\n instantSprings: mode.reduceMotion,\n };\n}\n\nexport function sameA11y(a: A11yMode, b: A11yMode): boolean {\n return (\n a.reduceTransparency === b.reduceTransparency &&\n a.increaseContrast === b.increaseContrast &&\n a.reduceMotion === b.reduceMotion\n );\n}\n","// Atom states — shared across every client: the set of states, what they mean, and what they do\n// to the material. Sizes, layout and per-input idioms are client-specific and live elsewhere.\nimport { activeMaterial, applyAccessibility, resolveOptics, type VireGlassMaterial } from 'vireglass';\n\nexport type VireUIKitAtomKind =\n | 'button'\n | 'iconButton'\n | 'switch'\n | 'slider'\n | 'segment'\n | 'chip'\n | 'field'\n | 'menu';\n\n/** Hover and focus don't exist everywhere: touch has neither. The atom accepts them, but has to\n * look complete at zero too — otherwise a touch client gets an unfinished look. */\nexport type VireUIKitAtomState = {\n pressed: number;\n hovered: number;\n selected: number;\n disabled: boolean;\n};\n\nexport const ATOM_AT_REST: VireUIKitAtomState = {\n pressed: 0,\n hovered: 0,\n selected: 0,\n disabled: false,\n};\n\n/**\n * Whether the piece lifts INTO the glass under press (1) or sinks into the backing (0).\n *\n * Lift isn't decoration: a small target has the finger covering it entirely, and an enlarged\n * transparent lens underneath is the only sign of a hit. A large target stays visible past the\n * finger, so it reads more naturally sinking toward the backing instead.\n */\nexport function atomLift(kind: VireUIKitAtomKind): number {\n switch (kind) {\n case 'iconButton':\n case 'switch':\n case 'slider':\n return 1;\n default:\n return 0;\n }\n}\n\n/** A disabled piece stays glass but stops asserting itself: the legibility requirement is lifted\n * and tint turns off. Hiding it via transparency won't do — the material is already transparent. */\nconst DISABLED_PRESENCE = 0.25;\n/** Hover is halfway to a press: the cursor is already on the target, but nothing is chosen yet. */\nconst HOVER_GAIN = 0.35;\n\n/** How far a state is from rest toward the pressed end, 0..1. */\nfunction activation(state: VireUIKitAtomState): number {\n if (state.disabled) return 0;\n const clamp = (v: number) => (v < 0 ? 0 : v > 1 ? 1 : v);\n return Math.max(clamp(state.selected), clamp(state.pressed), clamp(state.hovered) * HOVER_GAIN);\n}\n\n/**\n * The atom's material for a given state. Press and selection go through `activeMaterial` — for\n * glass, state is a change in the MEDIUM itself (denser, thicker, clearer), not a highlight\n * drawn over it.\n */\nexport function atomMaterial(\n base: VireGlassMaterial,\n kind: VireUIKitAtomKind,\n state: VireUIKitAtomState = ATOM_AT_REST,\n): VireGlassMaterial {\n const out = activeMaterial(base, activation(state));\n if (!state.disabled) return out;\n return { ...out, presence: out.presence * DISABLED_PRESENCE };\n}\n\n/** Whether every field on the atom matches rest — lets a client skip redraws for states its own\n * input can never produce (hover on touch, focus on Android). */\nexport function atomAtRest(state: VireUIKitAtomState): boolean {\n return (\n state.pressed === 0 && state.hovered === 0 && state.selected === 0 && state.disabled === false\n );\n}\n\n/** The veil over the backdrop: the surroundings' colour, `white` of it swapped for white, lifted by `lift` in OKLab lightness. */\nexport type AtomBody = { alpha: number; white: number; lift: number };\n\nconst REST_BODY: AtomBody = { alpha: 0.25, white: 0.15, lift: 0.1 };\nconst PRESSED_BODY: AtomBody = { alpha: 0.34, white: 0.35, lift: 0 };\nconst FROST_LIFT = 0.26;\n\n/** The body for a state; reduced transparency raises it to the density `vireglass` asks of the glass in that mode. */\nexport function atomBody(\n base: VireGlassMaterial,\n state: VireUIKitAtomState = ATOM_AT_REST,\n frost = false,\n): AtomBody {\n const on = activation(state);\n const mix = (key: keyof AtomBody) => REST_BODY[key] + (PRESSED_BODY[key] - REST_BODY[key]) * on;\n let alpha = mix('alpha');\n let white = mix('white');\n let lift = mix('lift');\n if (state.disabled) alpha *= DISABLED_PRESENCE;\n if (frost) {\n const density = applyAccessibility(resolveOptics(base), {\n reduceTransparency: true,\n increaseContrast: false,\n reduceMotion: false,\n }).bodyDensity;\n alpha = Math.max(alpha, density);\n white = 0;\n lift = FROST_LIFT;\n }\n return { alpha, white, lift };\n}\n","export type FocusChange = { type: 'focus'; visible: boolean } | { type: 'blur' };\n\n// `visible` is the browser's keyboard-modality verdict, so a ring follows a key on any device, and a\n// click, which also focuses a button, shows none.\nexport function stepFocus(event: FocusChange): boolean {\n return event.type === 'focus' && event.visible;\n}\n","export type HoverChange = { type: 'enter' } | { type: 'leave' };\n\nexport function stepHover(event: HoverChange, canHover: boolean): boolean {\n return canHover && event.type === 'enter';\n}\n","export type PressSource = 'pointer' | 'keyboard';\n\nexport type PressState = { by: PressSource | null };\n\nexport type PressEvent =\n | { type: 'down'; source: PressSource }\n | { type: 'up'; source: PressSource }\n | { type: 'cancel' }\n | { type: 'leave' };\n\nexport const PRESS_IDLE: PressState = { by: null };\n\nexport type PressStep = {\n state: PressState;\n activated: boolean;\n};\n\nexport function stepPress(state: PressState, event: PressEvent, enabled: boolean): PressStep {\n switch (event.type) {\n case 'down':\n if (!enabled || state.by !== null) return { state, activated: false };\n return { state: { by: event.source }, activated: false };\n case 'up':\n // A key lifted mid-touch is not a tap.\n if (state.by !== event.source) return { state, activated: false };\n return { state: PRESS_IDLE, activated: enabled };\n case 'cancel':\n return { state: PRESS_IDLE, activated: false };\n case 'leave':\n // A key press has no position, so the pointer leaving cannot cancel it.\n return state.by === 'pointer' ? { state: PRESS_IDLE, activated: false } : { state, activated: false };\n }\n}\n","import { stepFocus, type FocusChange } from './focus';\nimport { stepHover, type HoverChange } from './hover';\nimport { PRESS_IDLE, stepPress, type PressEvent, type PressState } from './press';\n\nexport type InputCaps = { hover: boolean };\n\nexport const TOUCH_INPUT: InputCaps = { hover: false };\nexport const POINTER_INPUT: InputCaps = { hover: true };\n\nexport type ControlState = {\n press: PressState;\n hovered: boolean;\n focused: boolean;\n disabled: boolean;\n};\n\nexport const CONTROL_IDLE: ControlState = {\n press: PRESS_IDLE,\n hovered: false,\n focused: false,\n disabled: false,\n};\n\nexport type ControlEvent = PressEvent | HoverChange | FocusChange | { type: 'disable'; disabled: boolean };\n\nexport type ControlStep = { state: ControlState; activated: boolean };\n\nexport function stepControl(state: ControlState, event: ControlEvent, caps: InputCaps): ControlStep {\n switch (event.type) {\n case 'down':\n case 'up':\n case 'cancel': {\n const next = stepPress(state.press, event, !state.disabled);\n return { state: { ...state, press: next.state }, activated: next.activated };\n }\n case 'leave': {\n const next = stepPress(state.press, event, !state.disabled);\n return { state: { ...state, press: next.state, hovered: false }, activated: false };\n }\n case 'enter':\n return {\n state: { ...state, hovered: !state.disabled && stepHover(event, caps.hover) },\n activated: false,\n };\n case 'focus':\n case 'blur': {\n // Focus moving away takes the key-up with it, so a held key press must not outlive it.\n const press = event.type === 'blur' && state.press.by === 'keyboard' ? PRESS_IDLE : state.press;\n return {\n state: { ...state, press, focused: !state.disabled && stepFocus(event) },\n activated: false,\n };\n }\n case 'disable':\n return {\n state: event.disabled\n ? { press: PRESS_IDLE, hovered: false, focused: false, disabled: true }\n : { ...state, disabled: false },\n activated: false,\n };\n }\n}\n\nexport type ControlTargets = {\n pressed: number;\n hovered: number;\n focus: number;\n disabled: boolean;\n};\n\nexport function controlTargets(state: ControlState): ControlTargets {\n return {\n pressed: state.press.by !== null ? 1 : 0,\n hovered: state.hovered ? 1 : 0,\n focus: state.focused ? 1 : 0,\n disabled: state.disabled,\n };\n}\n","// Two-phase \"capsule → drop → target\" growth: atom behavior, not layout. The body contracts into\n// a drop, a neck grows from its side toward the target, the drop grows into the target with a\n// slight overshoot; closing retraces the same path in reverse, because the model holds no\n// direction, only the current phase. Source and target sizes are layout, supplied as parameters.\nimport { halfMinDp, type VireGlassGeometry, type VireGlassMorph } from 'vireglass';\n\n/** A spring with `response`-second settle time; `damping` < 1 overshoots. `instant` skips\n * integration entirely, for reduced motion. */\nexport type Spring = { x: number; v: number; target: number };\n\nexport function stepSpring(\n s: Spring,\n dt: number,\n response: number,\n damping: number,\n instant = false,\n): boolean {\n if (instant) {\n const moved = s.x !== s.target || s.v !== 0;\n s.x = s.target;\n s.v = 0;\n return moved;\n }\n const stiffness = ((2 * Math.PI) / response) ** 2;\n const friction = (4 * Math.PI * damping) / response;\n const h = 1 / 240;\n // Fixed step, but not a fixed frame budget: without this, a rare slow frame hands the spring a\n // huge dt and it diverges.\n for (let left = Math.min(dt, 0.05); left > 0; left -= h) {\n const step = Math.min(left, h);\n s.v += (stiffness * (s.target - s.x) - friction * s.v) * step;\n s.x += s.v * step;\n }\n if (Math.abs(s.target - s.x) < 1e-3 && Math.abs(s.v) < 1e-2) {\n s.x = s.target;\n s.v = 0;\n return false;\n }\n return true;\n}\n\nexport const smoothstep = (e0: number, e1: number, x: number): number => {\n const t = Math.min(Math.max((x - e0) / (e1 - e0), 0), 1);\n return t * t * (3 - 2 * t);\n};\n\nconst mix = (a: number, b: number, t: number) => a + (b - a) * t;\n\nexport type GrowthPoint = { x: number; y: number };\n\n/** A shape and its position — it has no role of its own; `growthFrame` assigns the role (body, or\n * what the body is merging into). */\nexport type GrowthShape = { geometry: VireGlassGeometry; center: GrowthPoint };\n\n/** `shrink` — capsule → drop, no overshoot. `grow` — drop → target; may exceed 1 for the\n * overshoot. Both are read as-is; `stepGrowth` owns the bounds and the handoff between them. */\nexport type GrowthPhase = { shrink: number; grow: number };\n\nexport type GrowthInk = {\n /** 0…1: how much of the source's ink is still visible (1) vs. already defocused into the drop (0). */\n outgoing: number;\n /** 0…1: how much of the target's ink has come into focus (0 = not yet, 1 = fully). */\n incoming: number;\n};\n\nexport type GrowthFrame = {\n /** The shape worth drawing as glass right now: the larger of the two, which supplies the\n * thickness and the bevel. */\n body: GrowthShape;\n /** The target shape as-is, regardless of role — it drives the response to finger/light while\n * the glass hasn't become it yet (while `body` is still the drop). */\n grown: GrowthShape;\n /** The second merge shape, ready for `toLensProps`/`toSurfaceUniforms`; `undefined` while the\n * neck hasn't grown yet or has already retracted. */\n merge: VireGlassMorph | undefined;\n ink: GrowthInk;\n};\n\n/** The drop's size — a fraction of the source's diameter, with headroom for the neck. */\nconst DROP_DIAMETER = 1.1;\n/** How far the drop travels from the source toward the target, as a fraction of the source's diameter. */\nconst DROP_LIFT = 0.5;\nconst NECK_GAIN = 0.3;\nconst NECK_RAMP = 4;\nconst CORNER_EASE_START = 0.55;\nconst INK_OUT_END = 0.4;\nconst INK_IN_START = 0.45;\nconst INK_IN_END = 0.95;\n\nexport function growthInk(phase: GrowthPhase): GrowthInk {\n const a = Math.min(Math.max(phase.shrink, 0), 1);\n const b = Math.max(phase.grow, 0);\n // Ink leaves and arrives by going out of focus, not by plain transparency — the blur amount is\n // the drawer's job, this only reports the fraction of focus.\n return {\n outgoing: 1 - smoothstep(0, INK_OUT_END, a),\n incoming: smoothstep(INK_IN_START, INK_IN_END, b),\n };\n}\n\n/** The main shape is the larger one by half-size: it supplies the thickness and the bevel, so the\n * roles swap exactly at equal half-sizes, which is invisible on screen. */\nfunction largerOf(a: GrowthShape, b: GrowthShape): { main: GrowthShape; other: GrowthShape } {\n return halfMinDp(a.geometry) >= halfMinDp(b.geometry) ? { main: a, other: b } : { main: b, other: a };\n}\n\n/** `anchor` is the corner shared by source and target: the body pins to it, otherwise the target\n * would grow out of the drop's center instead of the button's corner. */\nexport function growthFrame(\n source: GrowthShape,\n target: GrowthShape,\n anchor: GrowthPoint,\n phase: GrowthPhase,\n): GrowthFrame {\n const dx = target.center.x - source.center.x;\n const dy = target.center.y - source.center.y;\n const len = Math.hypot(dx, dy) || 1;\n const sourceSize = halfMinDp(source.geometry) * 2;\n const lift = DROP_LIFT * sourceSize;\n const drop: GrowthPoint = {\n x: source.center.x + (dx / len) * lift,\n y: source.center.y + (dy / len) * lift,\n };\n\n const a = Math.min(Math.max(phase.shrink, 0), 1);\n const b = Math.max(phase.grow, 0);\n const keep = Math.max(1 - b, 0);\n const d = DROP_DIAMETER * sourceSize;\n\n const shrunkGeometry: VireGlassGeometry = {\n width: mix(source.geometry.width, 0.6 * d, a) * keep,\n height: mix(source.geometry.height, 0.6 * d, a) * keep,\n cornerRadius: 0,\n };\n // The source's radius EASES into the drop's rather than being replaced by it outright —\n // otherwise a field with a partial corner radius at rest would render as a full pill.\n shrunkGeometry.cornerRadius = Math.min(\n mix(source.geometry.cornerRadius, halfMinDp(shrunkGeometry), a),\n halfMinDp(shrunkGeometry),\n );\n const shrunk: GrowthShape = {\n geometry: shrunkGeometry,\n center: { x: mix(source.center.x, drop.x, a), y: mix(source.center.y, drop.y, a) },\n };\n\n const seed = d * Math.sqrt(a);\n // The sign of the corner the body pins to. Zero means the anchor sits on the same axis as the\n // source's center, so growth along that axis centers instead of hugging an edge.\n const cornerX = Math.sign(anchor.x - source.center.x);\n const cornerY = Math.sign(anchor.y - source.center.y);\n const edgeX = mix(drop.x + cornerX * (seed / 2), anchor.x, Math.min(b, 1));\n const edgeY = mix(drop.y + cornerY * (seed / 2), anchor.y, Math.min(b, 1));\n const width = mix(seed, target.geometry.width, b);\n const height = mix(seed, target.geometry.height, b);\n const grownGeometry: VireGlassGeometry = { width, height, cornerRadius: 0 };\n grownGeometry.cornerRadius = Math.min(\n mix(halfMinDp(grownGeometry), target.geometry.cornerRadius, smoothstep(CORNER_EASE_START, 1, b)),\n halfMinDp(grownGeometry),\n );\n const grown: GrowthShape = {\n geometry: grownGeometry,\n center: { x: edgeX - cornerX * (width / 2), y: edgeY - cornerY * (height / 2) },\n };\n\n const { main, other } = largerOf(grown, shrunk);\n const neck = NECK_GAIN * sourceSize * Math.min(a * NECK_RAMP, 1) * keep;\n const united = neck > 0.01 && other.geometry.width > 0.5 && other.geometry.height > 0.5;\n\n return {\n body: main,\n grown,\n merge: united\n ? {\n offsetX: other.center.x - main.center.x,\n offsetY: other.center.y - main.center.y,\n width: other.geometry.width,\n height: other.geometry.height,\n cornerRadius: other.geometry.cornerRadius,\n smoothing: neck,\n }\n : undefined,\n ink: growthInk(phase),\n };\n}\n\nexport type GrowthState = { shrink: Spring; grow: Spring };\n\nexport const createGrowthState = (): GrowthState => ({\n shrink: { x: 0, v: 0, target: 0 },\n grow: { x: 0, v: 0, target: 0 },\n});\n\nexport const growthPhase = (state: GrowthState): GrowthPhase => ({\n shrink: state.shrink.x,\n grow: state.grow.x,\n});\n\n/** Durations are client-specific: this set is tuned for the capsule-to-menu transition, and an\n * atom at a different scale (an icon opening into a sheet) isn't obligated to match it. The\n * shape of the transition is shared regardless. */\nexport type GrowthTiming = {\n shrinkOpen: number;\n shrinkClose: number;\n growOpen: number;\n growClose: number;\n /** < 1 gives the target a slight overshoot on open; closing never overshoots. */\n growDampingOpen: number;\n};\n\nexport const DEFAULT_GROWTH_TIMING: GrowthTiming = {\n shrinkOpen: 0.38,\n shrinkClose: 0.3,\n growOpen: 0.46,\n growClose: 0.4,\n growDampingOpen: 0.72,\n};\n\nconst GROW_DAMPING_CLOSE = 1;\nconst SHRINK_DAMPING = 1;\nconst GROW_STARTS_AT = 0.8;\nconst SHRINK_RETURNS_AT = 0.12;\n\n/** Growth starts once the drop has gathered, and the reverse on close. `reduceMotion` turns off\n * the spring entirely: both phases jump straight to their target in one step, with no overshoot\n * and no defocus phase. */\nexport function stepGrowth(\n state: GrowthState,\n dt: number,\n open: boolean,\n reduceMotion = false,\n timing: GrowthTiming = DEFAULT_GROWTH_TIMING,\n): boolean {\n const { shrink, grow } = state;\n if (reduceMotion) {\n shrink.target = open ? 1 : 0;\n grow.target = open ? 1 : 0;\n } else if (open) {\n shrink.target = 1;\n if (shrink.x > GROW_STARTS_AT) grow.target = 1;\n } else {\n grow.target = 0;\n if (grow.x < SHRINK_RETURNS_AT) shrink.target = 0;\n }\n const movedShrink = stepSpring(\n shrink,\n dt,\n open ? timing.shrinkOpen : timing.shrinkClose,\n SHRINK_DAMPING,\n reduceMotion,\n );\n const movedGrow = stepSpring(\n grow,\n dt,\n open ? timing.growOpen : timing.growClose,\n open ? timing.growDampingOpen : GROW_DAMPING_CLOSE,\n reduceMotion,\n );\n return movedShrink || movedGrow;\n}\n","import type { VireUIKitAtomState } from '../atom';\nimport { stepSpring, type Spring } from '../morph';\nimport { controlTargets, type ControlState } from './control';\n\nexport type ControlVisual = {\n pressed: Spring;\n hovered: Spring;\n focus: Spring;\n};\n\nexport const createControlVisual = (): ControlVisual => ({\n pressed: { x: 0, v: 0, target: 0 },\n hovered: { x: 0, v: 0, target: 0 },\n focus: { x: 0, v: 0, target: 0 },\n});\n\n// Press attacks fast and settles with a little give; hover and focus just ease.\nconst PRESS = { response: 0.18, damping: 0.78 };\nconst HOVER = { response: 0.22, damping: 1 };\nconst FOCUS = { response: 0.16, damping: 1 };\n\nexport function stepControlVisual(\n visual: ControlVisual,\n dt: number,\n state: ControlState,\n instant = false,\n): boolean {\n const t = controlTargets(state);\n visual.pressed.target = t.pressed;\n visual.hovered.target = t.hovered;\n visual.focus.target = t.focus;\n const a = stepSpring(visual.pressed, dt, PRESS.response, PRESS.damping, instant);\n const b = stepSpring(visual.hovered, dt, HOVER.response, HOVER.damping, instant);\n const c = stepSpring(visual.focus, dt, FOCUS.response, FOCUS.damping, instant);\n return a || b || c;\n}\n\n// The press may overshoot 1; `atomMaterial` clamps, so the raw value is passed through.\nexport function visualAtomState(visual: ControlVisual, state: ControlState): VireUIKitAtomState {\n return {\n pressed: visual.pressed.x,\n hovered: visual.hovered.x,\n selected: 0,\n disabled: state.disabled,\n };\n}\n\nexport function settleControlVisual(visual: ControlVisual, state: ControlState): void {\n stepControlVisual(visual, 0, state, true);\n}\n","import { atomLift, type VireUIKitAtomKind } from './atom';\n\nexport type PressResponse = {\n /** Fraction of its own size the body adds at full press. */\n grow: number;\n /** Glyph blur at full press, px. */\n defocus: number;\n};\n\n// A lifted piece grows more: the finger covers it, so the enlarged lens is the only sign of a hit.\nconst LIFTING: PressResponse = { grow: 0.18, defocus: 1.6 };\nconst SINKING: PressResponse = { grow: 0.06, defocus: 1 };\n\nexport function pressResponse(kind: VireUIKitAtomKind): PressResponse {\n return atomLift(kind) === 1 ? LIFTING : SINKING;\n}\n","import { concentricRadius } from 'vireglass';\n\nexport type ControlSize = 'touch' | 'small' | 'medium' | 'large' | 'xlarge';\n\nexport const CONTROL_SIZES: readonly ControlSize[] = ['touch', 'small', 'medium', 'large', 'xlarge'];\n\nexport type SizeSpec = {\n /** Body height; an icon button is a square of this side. */\n height: number;\n paddingX: number;\n icon: number;\n radius: number;\n shape: 'capsule' | 'rounded';\n};\n\nexport const MIN_TOUCH_TARGET_DP = 44;\nexport const MIN_POINTER_TARGET_DP = 24;\n\nconst capsule = (height: number, paddingX: number): SizeSpec => ({\n height,\n paddingX,\n icon: Math.round(height / 2),\n radius: height / 2,\n shape: 'capsule',\n});\n\nconst rounded = (height: number, paddingX: number): SizeSpec => ({\n height,\n paddingX,\n icon: Math.round(height / 2),\n radius: height / 4,\n shape: 'rounded',\n});\n\n// Where each number comes from: docs/acceptance.md.\nexport const BUTTON_SIZES: Readonly<Record<ControlSize, SizeSpec>> = {\n touch: capsule(44, 20),\n small: rounded(24, 10),\n medium: rounded(32, 14),\n large: capsule(40, 18),\n xlarge: capsule(48, 22),\n};\n\nexport function iconButtonSize(size: ControlSize): SizeSpec & { width: number } {\n const spec = BUTTON_SIZES[size];\n return { ...spec, width: spec.height, paddingX: 0 };\n}\n\nexport function nestedRadius(outerRadius: number, inset: number, minimum = 0): number {\n return concentricRadius(outerRadius, inset, minimum);\n}\n\nexport function defaultSize(input: { touch: boolean }): ControlSize {\n return input.touch ? 'touch' : 'medium';\n}\n\nexport function hitSlop(bodyDp: number, minTargetDp: number): number {\n return bodyDp >= minTargetDp ? 0 : (minTargetDp - bodyDp) / 2;\n}\n\nexport function minTarget(input: { touch: boolean }): number {\n return input.touch ? MIN_TOUCH_TARGET_DP : MIN_POINTER_TARGET_DP;\n}\n"]}