@filip.mazev/blocks 1.4.3 → 1.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/_index.scss +1 -1
- package/core/styles/_field-state.scss +16 -4
- package/core/styles/_index.scss +0 -1
- package/core/styles/_mixins.scss +2 -2
- package/core/styles/_motion.scss +1 -1
- package/core/styles/_palettes.scss +127 -132
- package/core/styles/_slider.scss +158 -40
- package/core/styles/_theme-engine.scss +43 -63
- package/core/styles/_utilities.scss +3 -4
- package/core/styles/_validation.scss +6 -1
- package/core/styles/_variables.scss +24 -14
- package/core/styles/themes/_cyberpunk-theme.scss +1 -1
- package/core/styles/themes/_green-theme.scss +1 -1
- package/core/styles/themes/_high-contrast-theme.scss +152 -133
- package/core/styles/themes/_orange-theme.scss +1 -1
- package/core/styles/themes/_purple-theme.scss +1 -1
- package/core/styles/themes/_red-theme.scss +1 -1
- package/core/styles/themes/_white-theme.scss +26 -20
- package/effects/README.md +5 -9
- package/effects/effects.css +200 -121
- package/effects/runtime/README.md +19 -11
- package/fesm2022/filip.mazev-blocks-core.mjs +27 -22
- package/fesm2022/filip.mazev-blocks-core.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-effects-runtime.mjs +887 -67
- package/fesm2022/filip.mazev-blocks-effects-runtime.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-effects.mjs +8 -48
- package/fesm2022/filip.mazev-blocks-effects.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-forms.mjs +65 -61
- package/fesm2022/filip.mazev-blocks-forms.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-modal.mjs +29 -32
- package/fesm2022/filip.mazev-blocks-modal.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-navigation.mjs +35 -1
- package/fesm2022/filip.mazev-blocks-navigation.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-primitives.mjs +106 -32
- package/fesm2022/filip.mazev-blocks-primitives.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks-toastr.mjs +5 -7
- package/fesm2022/filip.mazev-blocks-toastr.mjs.map +1 -1
- package/fesm2022/filip.mazev-blocks.mjs +1 -1
- package/fesm2022/filip.mazev-blocks.mjs.map +1 -1
- package/navigation/README.md +44 -0
- package/package.json +1 -1
- package/schematics/ng-add/index.js +4 -1
- package/types/filip.mazev-blocks-core.d.ts +3 -4
- package/types/filip.mazev-blocks-effects-runtime.d.ts +10 -8
- package/types/filip.mazev-blocks-effects.d.ts +5 -17
- package/types/filip.mazev-blocks-forms.d.ts +13 -11
- package/types/filip.mazev-blocks-modal.d.ts +1 -0
- package/types/filip.mazev-blocks-navigation.d.ts +21 -5
- package/types/filip.mazev-blocks-primitives.d.ts +10 -0
- package/types/filip.mazev-blocks-toastr.d.ts +4 -4
- package/types/filip.mazev-blocks.d.ts +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filip.mazev-blocks-effects-runtime.mjs","names":[],"sources":["../../../projects/blocks/effects/runtime/dom.ts","../../../projects/blocks/effects/runtime/configuration.ts","../../../projects/blocks/effects/runtime/scheduler.ts","../../../projects/blocks/effects/runtime/visibility.ts","../../../projects/blocks/effects/runtime/scene.ts","../../../projects/blocks/effects/runtime/spring.ts","../../../projects/blocks/effects/runtime/surface.ts","../../../projects/blocks/effects/runtime/transition.ts"],"sourcesContent":["/** Only the properties owned by a controller are restored, leaving application changes intact. */\nexport function rememberStyles(element: HTMLElement, properties: readonly string[]): () => void {\n const values = properties.map((property) => ({\n property,\n value: element.style.getPropertyValue(property),\n priority: element.style.getPropertyPriority(property)\n }));\n return () => {\n for (const item of values) {\n if (item.value) element.style.setProperty(item.property, item.value, item.priority);\n else element.style.removeProperty(item.property);\n }\n };\n}\n\nexport function rememberAttributes(element: HTMLElement, attributes: readonly string[]): () => void {\n const values = attributes.map((attribute) => [attribute, element.getAttribute(attribute)] as const);\n return () => {\n for (const [attribute, value] of values) {\n if (value === null) element.removeAttribute(attribute);\n else element.setAttribute(attribute, value);\n }\n };\n}\n\nexport function finiteClamp(value: number | undefined, low: number, high: number, fallback: number): number {\n return value === undefined || !Number.isFinite(value) ? fallback : Math.min(high, Math.max(low, value));\n}\n\nexport function smoothstep(low: number, high: number, value: number): number {\n const t = Math.min(1, Math.max(0, (value - low) / (high - low)));\n return t * t * (3 - 2 * t);\n}\n","import { finiteClamp, rememberAttributes, rememberStyles } from './dom';\nimport type { AppearanceConfiguration, AppearanceConfigurationController } from './types';\n\nexport const configurationEvent = 'bx-glass-config-change';\nconst attributes = ['data-bx-glass-material', 'data-bx-glass-quality', 'data-bx-reduced-motion', 'data-bx-reduced-transparency'];\nconst properties = ['--bx-glass-blur', '--bx-glass-opacity'];\nconst configured = new WeakSet<HTMLElement>();\n\n/** Configure one inherited application scope. Use document.documentElement to include overlays. */\nexport function configureAppearance(root: HTMLElement, initial: AppearanceConfiguration = {}): AppearanceConfigurationController {\n if (configured.has(root)) throw new Error('A glass configuration is already mounted on this root.');\n configured.add(root);\n const restoreAttributes = rememberAttributes(root, attributes);\n const restoreStyles = rememberStyles(root, properties);\n let options = { ...initial };\n let disposed = false;\n const notify = () => {\n const ViewEvent = root.ownerDocument.defaultView?.CustomEvent;\n if (ViewEvent) root.ownerDocument.dispatchEvent(new ViewEvent(configurationEvent, { detail: root }));\n };\n const paint = () => {\n restoreAttributes();\n restoreStyles();\n const values: [string, unknown][] = [\n ['data-bx-glass-material', options.material],\n ['data-bx-glass-quality', options.quality],\n ['data-bx-reduced-motion', options.reducedMotion],\n ['data-bx-reduced-transparency', options.reducedTransparency]\n ];\n for (const [name, value] of values) if (value !== undefined) root.setAttribute(name, String(value));\n if (options.blur !== undefined) root.style.setProperty('--bx-glass-blur', `${finiteClamp(options.blur, 0, 40, 10)}px`);\n if (options.tint !== undefined) root.style.setProperty('--bx-glass-opacity', String(finiteClamp(options.tint, 0, 1, 0.4)));\n notify();\n };\n paint();\n return {\n update(next) {\n if (!disposed) {\n options = { ...options, ...next };\n paint();\n }\n },\n destroy() {\n if (disposed) return;\n disposed = true;\n restoreAttributes();\n restoreStyles();\n configured.delete(root);\n notify();\n }\n };\n}\n\nexport function inheritedAttribute(element: HTMLElement, name: string): string | null {\n let current: HTMLElement | null = element;\n while (current) {\n const value = current.getAttribute(name);\n if (value !== null) return value;\n current = current.parentElement;\n }\n return null;\n}\n","export type FrameCallback = (deltaSeconds: number, timestamp: number) => boolean;\n\ninterface FrameEntry {\n callback: FrameCallback;\n}\nconst entries = new Set<FrameEntry>();\nlet frame: number | undefined;\nlet previousTime: number | undefined;\nlet ticking = false;\n\nfunction tick(timestamp: number): void {\n frame = undefined;\n ticking = true;\n const delta = previousTime === undefined ? 1 / 60 : Math.min(0.064, Math.max(0, (timestamp - previousTime) / 1000));\n previousTime = timestamp;\n for (const entry of Array.from(entries)) {\n if (!entries.has(entry)) continue;\n try {\n if (!entry.callback(delta, timestamp)) entries.delete(entry);\n } catch (error) {\n entries.delete(entry);\n // Keep unrelated surfaces running; report the failed callback separately.\n queueMicrotask(() => {\n throw error;\n });\n }\n }\n ticking = false;\n if (entries.size > 0) frame = requestAnimationFrame(tick);\n else previousTime = undefined;\n}\n\n/** All effects share one lazy clock. Returning false removes the callback. */\nexport function subscribeFrame(callback: FrameCallback): () => void {\n if (typeof requestAnimationFrame !== 'function') return () => {};\n const entry: FrameEntry = { callback };\n entries.add(entry);\n if (frame === undefined && !ticking) frame = requestAnimationFrame(tick);\n return () => {\n entries.delete(entry);\n if (entries.size === 0) {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n previousTime = undefined;\n }\n };\n}\n","/** Structural overlay boundaries are independent of numeric z-index values in nested contexts. */\nexport const lightBoundarySelector =\n '[data-bx-light-scope], dialog, [role=\"dialog\"], [role=\"alertdialog\"], [popover], .cdk-overlay-pane, .toast-container, bx-modal';\n\n/** A short-lived snapshot: caches style reads within a lighting batch, never tracks pointer motion. */\nexport function lightingVisibility(doc: Document, view: Window) {\n const styles = new Map<Element, CSSStyleDeclaration>();\n const boundaries = new Map<HTMLElement, HTMLElement>();\n const layers = new Map<HTMLElement, HTMLElement>();\n const style = (element: HTMLElement) => {\n let value = styles.get(element);\n if (!value) {\n value = view.getComputedStyle(element);\n styles.set(element, value);\n }\n return value;\n };\n const boundary = (element: HTMLElement): HTMLElement => {\n const cached = boundaries.get(element);\n if (cached) return cached;\n const css = style(element);\n const result =\n element.matches(lightBoundarySelector) || css.position === 'fixed' || css.position === 'sticky'\n ? element\n : element.parentElement\n ? boundary(element.parentElement)\n : element;\n boundaries.set(element, result);\n return result;\n };\n const layer = (element: HTMLElement): HTMLElement => {\n const cached = layers.get(element);\n if (cached) return cached;\n const css = style(element);\n const positionedLayer = css.position !== 'static' && css.zIndex !== 'auto';\n const result =\n element.matches(lightBoundarySelector) || css.position === 'fixed' || css.position === 'sticky' || positionedLayer\n ? element\n : element.parentElement\n ? layer(element.parentElement)\n : element;\n layers.set(element, result);\n return result;\n };\n const exposed = (element: HTMLElement, x: number, y: number, bounds: DOMRect): boolean => {\n if (!element.isConnected || bounds.width <= 0 || bounds.height <= 0) return false;\n // Stay inside rounded corners: their bounding-box corners are not painted pixels.\n const css = style(element);\n const radius = Math.min(\n bounds.width / 2,\n bounds.height / 2,\n Math.max(\n ...[css.borderTopLeftRadius, css.borderTopRightRadius, css.borderBottomLeftRadius, css.borderBottomRightRadius].map((value) => parseFloat(value) || 0)\n )\n );\n const inset = Math.min(bounds.width / 2, bounds.height / 2, 1 + radius * (1 - Math.SQRT1_2));\n const px = Math.max(bounds.left + inset, Math.min(x, bounds.right - inset));\n const py = Math.max(bounds.top + inset, Math.min(y, bounds.bottom - inset));\n if (px < 0 || py < 0 || px >= view.innerWidth || py >= view.innerHeight) return false;\n const hit = doc.elementFromPoint(px, py);\n return !!hit && (hit === element || element.contains(hit));\n };\n return { boundary, layer, exposed };\n}\n","import { configurationEvent } from './configuration';\nimport { finiteClamp } from './dom';\nimport { subscribeFrame } from './scheduler';\nimport { lightBoundarySelector, lightingVisibility } from './visibility';\nimport type { GlassLight, GlassReflector, GlassScene, GlassSceneOptions } from './types';\n\nexport interface LightContribution {\n key: string;\n x: number;\n y: number;\n color: string;\n strength: number;\n edgeStrength: number;\n}\nexport interface Lighting {\n x: number;\n y: number;\n strength: number;\n color: string;\n rim: string;\n contributions: LightContribution[];\n reflection: string;\n reflectionStrength: number;\n reflectionX: number;\n reflectionY: number;\n}\ninterface SurfaceHooks {\n hitTarget?: HTMLElement;\n light(value: Lighting): void;\n interactive(): boolean;\n emission?(): string | undefined;\n focusEmission?(): string | undefined;\n emit?(active: boolean, color?: string): void;\n press(): void;\n release(): void;\n sync(): void;\n}\ninterface Entry {\n id: number;\n element: HTMLElement;\n hooks: SurfaceHooks;\n visible: boolean;\n bounds?: DOMRect;\n}\ninterface SceneEntry {\n id: number;\n root: HTMLElement;\n options: GlassSceneOptions;\n}\ninterface PointLight {\n key: string;\n bounds?: DOMRect;\n source?: HTMLElement;\n excludeSource?: boolean;\n excludeElement?: HTMLElement;\n x: number;\n y: number;\n z: number;\n color: string;\n intensity: number;\n radius: number;\n}\ninterface Reflection {\n source: HTMLElement;\n x: number;\n y: number;\n depth: number;\n color: string;\n intensity: number;\n radius: number;\n}\nconst runtimes = new WeakMap<Document, SceneRuntime>();\nconst activeStateSelector =\n '[aria-pressed=\"true\"], [aria-selected=\"true\"], [aria-expanded=\"true\"], [aria-current]:not([aria-current=\"false\"]):not([aria-current=\"\"])';\nconst disabledSelector = ':disabled, [aria-disabled=\"true\"], .is-disabled, [inert]';\n\nfunction runtimeFor(doc: Document): SceneRuntime {\n let runtime = runtimes.get(doc);\n if (!runtime) {\n runtime = new SceneRuntime(doc);\n runtimes.set(doc, runtime);\n }\n return runtime;\n}\n\n/** One delegated pointer stream and visibility observer per document, never per control. */\nexport function registerSurface(element: HTMLElement, hooks: SurfaceHooks): () => void {\n return runtimeFor(element.ownerDocument).register(element, hooks);\n}\n\n/** Receive scene lighting for a native pseudo-element without inserting decoration into its host. */\nexport function observeGlassLighting(element: HTMLElement, light: (value: Lighting) => void, hitTarget: HTMLElement = element): () => void {\n return registerSurface(element, { light, hitTarget, interactive: () => false, press() {}, release() {}, sync() {} });\n}\n\n/** Invalidate a receiver after an application changes its geometry. */\nexport function refreshGlassLighting(element: HTMLElement): void {\n runtimeFor(element.ownerDocument).refreshElement(element);\n}\n\n/** Lighting is an explicit spatial model; this does not capture or rasterize arbitrary page content. */\nexport function mountGlassScene(root: HTMLElement, options: GlassSceneOptions = {}): GlassScene {\n return runtimeFor(root.ownerDocument).scene(root, options);\n}\n\nclass SceneRuntime {\n private entries = new Map<HTMLElement, Entry>();\n private scenes = new Set<SceneEntry>();\n private observer?: IntersectionObserver;\n private stateObserver?: MutationObserver;\n private selected = new Set<Entry>();\n private pressed?: Entry;\n private hovered?: Entry;\n private focused?: Entry;\n private focusedTarget?: Element;\n private emitting = new Map<Entry, string>();\n private nextId = 0;\n private lightIds = new WeakMap<HTMLElement, number>();\n private queue = new Set<Entry>();\n private stopFrame?: () => void;\n private connected = false;\n private motion: MediaQueryList;\n private transparency: MediaQueryList;\n private view: Window;\n private down = (event: PointerEvent) => {\n this.pressed = this.find(event);\n this.pressed?.hooks.press();\n this.updateEmitter();\n };\n\n private up = () => {\n this.pressed?.hooks.release();\n this.pressed = undefined;\n this.updateEmitter();\n };\n\n private leave = () => {\n this.up();\n this.hovered = undefined;\n this.updateEmitter();\n };\n\n private blur = () => {\n this.up();\n this.hovered = this.focused = undefined;\n this.focusedTarget = undefined;\n this.updateEmitter();\n };\n\n private over = (event: Event) => {\n const found = this.find(event);\n const next = found?.hooks.emission?.() ? found : undefined;\n if (next !== this.hovered) {\n this.hovered = next;\n this.updateEmitter();\n }\n };\n\n private out = (event: PointerEvent) => {\n if (this.hovered && !this.hovered.element.contains(event.relatedTarget as Node | null)) {\n this.hovered = undefined;\n this.updateEmitter();\n }\n };\n\n private focus = (event: Event) => {\n const target = event.target as Element;\n const visual = target.matches('input[type=\"checkbox\"], input[type=\"radio\"]')\n ? target.closest('label')?.querySelector<HTMLElement>('[data-bx-surface]')\n : undefined;\n this.focused = visual ? this.entries.get(visual) : this.find(event);\n this.focusedTarget = target;\n this.updateEmitter();\n };\n\n private unfocus = () => {\n this.focused = undefined;\n this.focusedTarget = undefined;\n this.updateEmitter();\n };\n\n private sync = () => {\n for (const entry of this.entries.values()) {\n entry.hooks.sync();\n this.updateSelected(entry);\n }\n this.updateEmitter();\n this.refresh();\n };\n\n private refresh = () => {\n for (const entry of this.entries.values()) {\n entry.bounds = undefined;\n if (entry.visible) this.queue.add(entry);\n }\n this.schedule();\n };\n\n constructor(private doc: Document) {\n const view = doc.defaultView;\n if (!view) throw new Error('Glass scenes require a browser document.');\n this.view = view;\n this.motion = view.matchMedia('(prefers-reduced-motion: reduce)');\n this.transparency = view.matchMedia('(prefers-reduced-transparency: reduce)');\n if (typeof view.IntersectionObserver === 'function')\n this.observer = new view.IntersectionObserver(\n (records) => {\n for (const record of records) {\n const entry = this.entries.get(record.target as HTMLElement);\n if (!entry) continue;\n entry.visible = record.isIntersecting;\n if (entry.visible) {\n entry.bounds = undefined;\n this.queue.add(entry);\n }\n }\n this.schedule();\n },\n { rootMargin: '64px' }\n );\n // Watch semantic state only, once per document. Decoration/style mutations\n // and pointer movement never trigger this observer.\n if (typeof view.MutationObserver === 'function')\n this.stateObserver = new view.MutationObserver((records) => {\n const changed = new Set<Entry>();\n for (const record of records) {\n const entry = this.entries.get(record.target as HTMLElement);\n if (entry) changed.add(entry);\n if (record.attributeName === 'data-bx-field-invalid') {\n for (const surface of (record.target as HTMLElement).querySelectorAll<HTMLElement>('[data-bx-surface]')) {\n const child = this.entries.get(surface);\n if (child) changed.add(child);\n }\n }\n }\n if (!changed.size) return;\n for (const entry of changed) this.updateSelected(entry);\n this.updateEmitter();\n });\n }\n\n register(element: HTMLElement, hooks: SurfaceHooks): () => void {\n this.connect();\n const entry: Entry = { id: this.nextId++, element, hooks, visible: true };\n const overlay = lightingVisibility(this.doc, this.view).boundary(element) !== this.doc.documentElement;\n this.entries.set(element, entry);\n this.observer?.observe(element);\n this.updateSelected(entry);\n this.updateEmitter();\n this.queue.add(entry);\n this.schedule();\n // New overlays can cover receivers which already have highlights. Re-evaluate those as well.\n if (overlay) this.refresh();\n return () => {\n this.observer?.unobserve(element);\n this.entries.delete(element);\n this.queue.delete(entry);\n this.selected.delete(entry);\n if (this.pressed === entry) this.pressed = undefined;\n if (this.hovered === entry || this.focused === entry || this.emitting.has(entry)) {\n if (this.hovered === entry) this.hovered = undefined;\n if (this.focused === entry) this.focused = undefined;\n this.updateEmitter();\n }\n if (overlay) this.refresh();\n this.disconnectIfEmpty();\n };\n }\n\n refreshElement(element: HTMLElement): void {\n const entry = this.entries.get(element);\n if (entry) this.updateSelected(entry);\n this.updateEmitter();\n if (entry) {\n entry.bounds = undefined;\n this.queue.add(entry);\n this.schedule();\n }\n }\n\n scene(root: HTMLElement, options: GlassSceneOptions): GlassScene {\n this.connect();\n const entry = { id: this.nextId++, root, options };\n this.scenes.add(entry);\n this.refreshRoot(root);\n let disposed = false;\n return {\n update: (next) => {\n if (!disposed) {\n entry.options = next;\n this.refreshRoot(root);\n }\n },\n refresh: () => {\n if (!disposed) this.refreshRoot(root);\n },\n destroy: () => {\n if (disposed) return;\n disposed = true;\n this.scenes.delete(entry);\n this.refreshRoot(root);\n this.disconnectIfEmpty();\n }\n };\n }\n\n private find(event: Event): Entry | undefined {\n for (const node of event.composedPath()) {\n const found = this.entries.get(node as HTMLElement);\n if (!found) continue;\n if (found.element.closest(disabledSelector)) return undefined;\n // A decorative surface inside a button/link is still part of that action.\n if (found.hooks.interactive()) return found;\n }\n return undefined;\n }\n\n private scope(element: HTMLElement): HTMLElement {\n return element.closest<HTMLElement>(`${lightBoundarySelector}, main, aside, nav`) ?? this.doc.body;\n }\n\n private updateEmitter(): void {\n const next = new Map<Entry, string>();\n const enabled = (entry: Entry) => entry.hooks.interactive() && !entry.element.closest(disabledSelector);\n for (const entry of [...this.selected, this.hovered, this.pressed]) {\n const color = entry && enabled(entry) ? entry.hooks.emission?.() : undefined;\n if (entry && color) next.set(entry, color);\n }\n const focusColor = this.focused?.hooks.focusEmission?.() ?? (this.focusedTarget?.matches(':focus-visible') ? this.focused?.hooks.emission?.() : undefined);\n if (this.focused && enabled(this.focused) && focusColor) next.set(this.focused, focusColor);\n const previous = this.emitting;\n if (previous.size === next.size && [...next].every(([entry, color]) => previous.get(entry) === color)) return;\n for (const entry of previous.keys()) if (!next.has(entry)) entry.hooks.emit?.(false);\n this.emitting = next;\n for (const [entry, color] of next) entry.hooks.emit?.(true, color);\n const sources = [...new Set([...previous.keys(), ...next.keys()])];\n for (const entry of this.entries.values()) {\n if (!entry.visible) continue;\n const affected = sources.some((source) => this.scope(source.element) === this.scope(entry.element));\n // A panel may have finished its opening animation since its surfaces were registered.\n if (affected) {\n entry.bounds = undefined;\n this.queue.add(entry);\n }\n }\n this.schedule();\n }\n\n private updateSelected(entry: Entry): void {\n if (entry.hooks.emission?.() && entry.element.matches(activeStateSelector)) this.selected.add(entry);\n else this.selected.delete(entry);\n }\n\n private refreshRoot(root: HTMLElement): void {\n for (const entry of this.entries.values()) {\n if (!root.contains(entry.element)) continue;\n entry.bounds = undefined;\n if (entry.visible) this.queue.add(entry);\n }\n this.schedule();\n }\n\n private connect(): void {\n if (this.connected) return;\n this.connected = true;\n this.stateObserver?.observe(this.doc.documentElement, {\n subtree: true,\n attributes: true,\n attributeFilter: ['aria-pressed', 'aria-selected', 'aria-expanded', 'aria-current', 'disabled', 'aria-disabled', 'aria-invalid', 'data-bx-field-invalid']\n });\n this.doc.addEventListener('pointerdown', this.down, { passive: true });\n this.doc.addEventListener('pointerover', this.over, { passive: true });\n this.doc.addEventListener('pointerout', this.out, { passive: true });\n this.doc.addEventListener('focusin', this.focus);\n this.doc.addEventListener('focusout', this.unfocus);\n this.view.addEventListener('pointerup', this.up, { passive: true });\n this.view.addEventListener('pointercancel', this.up, { passive: true });\n this.doc.addEventListener('pointerleave', this.leave, { passive: true });\n this.view.addEventListener('blur', this.blur);\n this.view.addEventListener('resize', this.refresh, { passive: true });\n this.doc.addEventListener('scroll', this.refresh, { passive: true, capture: true });\n this.doc.addEventListener(configurationEvent, this.sync);\n this.motion.addEventListener('change', this.sync);\n this.transparency.addEventListener('change', this.sync);\n }\n\n private disconnectIfEmpty(): void {\n if (this.entries.size || this.scenes.size) return;\n this.stopFrame?.();\n this.stopFrame = undefined;\n this.queue.clear();\n this.observer?.disconnect();\n this.connected = false;\n this.stateObserver?.disconnect();\n this.selected.clear();\n this.doc.removeEventListener('pointerdown', this.down);\n this.doc.removeEventListener('pointerover', this.over);\n this.doc.removeEventListener('pointerout', this.out);\n this.doc.removeEventListener('focusin', this.focus);\n this.doc.removeEventListener('focusout', this.unfocus);\n this.view.removeEventListener('pointerup', this.up);\n this.view.removeEventListener('pointercancel', this.up);\n this.doc.removeEventListener('pointerleave', this.leave);\n this.view.removeEventListener('blur', this.blur);\n this.view.removeEventListener('resize', this.refresh);\n this.doc.removeEventListener('scroll', this.refresh, true);\n this.doc.removeEventListener(configurationEvent, this.sync);\n this.motion.removeEventListener('change', this.sync);\n this.transparency.removeEventListener('change', this.sync);\n }\n\n private schedule(): void {\n if (this.stopFrame || !this.queue.size) return;\n this.stopFrame = subscribeFrame(() => {\n // Bound lighting work when hundreds of components become visible or a global setting changes.\n const batch = Array.from(this.queue).slice(0, 24);\n const visibility = lightingVisibility(this.doc, this.view);\n const emissions = [...this.emitting].map(([emitter, color]) => {\n const bounds = emitter.element.getBoundingClientRect();\n const exposed =\n visibility.exposed(emitter.element, bounds.x + bounds.width / 2, bounds.y + bounds.height / 2, bounds) && !emitter.element.closest(disabledSelector);\n return { emitter, color, exposed };\n });\n const activeLights = emissions\n .filter((source) => source.exposed)\n .map(({ emitter, color }) => ({\n emitter,\n light: this.lightPoint({ element: emitter.element, color, excludeSource: true, z: 24, intensity: 0.85, radius: 120 }, `hover:${emitter.id}`, true)\n }));\n const sceneData = new Map<SceneEntry, { lights: PointLight[]; reflections: Reflection[] }>();\n // Read only scenes used by this batch; avoid measuring offscreen or unrelated objects.\n const projections = batch\n .filter((entry) => entry.visible && entry.element.isConnected)\n .map((entry) => {\n entry.bounds ??= entry.element.getBoundingClientRect();\n let nearest: SceneEntry | undefined;\n for (const candidate of this.scenes)\n if (candidate.root.contains(entry.element) && (!nearest || nearest.root.contains(candidate.root))) nearest = candidate;\n if (nearest && !sceneData.has(nearest))\n sceneData.set(nearest, {\n lights: (nearest.options.lights ?? []).slice(0, 4).map((light, index) => this.lightPoint(light, `${nearest!.id}:${index}`)),\n reflections: (nearest.options.reflectors ?? []).slice(0, 4).map((reflection) => this.reflectionPoint(reflection))\n });\n const data = nearest ? sceneData.get(nearest) : undefined;\n // Explicit scene lights and an active semantic element share the same spatial model.\n const boundary = visibility.boundary(entry.element);\n const lights = (data?.lights ?? []).filter((light) => visibility.boundary(light.source ?? nearest!.root) === boundary);\n for (const { emitter, light } of activeLights) {\n if (\n this.scope(emitter.element) === this.scope(entry.element) &&\n visibility.layer(emitter.element) === visibility.layer(entry.element) &&\n !emitter.element.contains(entry.element) &&\n !entry.element.contains(emitter.element)\n )\n lights.push(light);\n }\n const reflections = (data?.reflections ?? []).filter((reflection) => visibility.boundary(reflection.source) === boundary);\n return [entry, this.project(entry, lights, reflections, visibility)] as const;\n });\n for (const entry of batch) this.queue.delete(entry);\n for (const { emitter, color, exposed } of emissions) emitter.hooks.emit?.(exposed, color);\n for (const [entry, lighting] of projections) entry.hooks.light(lighting);\n if (!this.queue.size) this.stopFrame = undefined;\n return this.queue.size > 0;\n });\n }\n\n private lightPoint(light: GlassLight, key: string, border = false): PointLight {\n const rect = light.element?.getBoundingClientRect();\n if (light.element && !border) {\n if (!this.lightIds.has(light.element)) this.lightIds.set(light.element, this.nextId++);\n key = `scene:${this.lightIds.get(light.element)}`;\n }\n return {\n key,\n bounds: rect && light.edge === 'bottom' ? new DOMRect(rect.left, rect.bottom, rect.width, 0) : border ? rect : undefined,\n source: light.element,\n excludeSource: light.excludeSource,\n excludeElement: light.excludeElement,\n x: rect ? rect.left + rect.width * finiteClamp(light.offsetX, 0, 1, 0.5) : finiteClamp(light.x, -1e6, 1e6, this.view.innerWidth * 0.25),\n y: rect ? rect.top + rect.height * finiteClamp(light.offsetY, 0, 1, 0.5) : finiteClamp(light.y, -1e6, 1e6, 0),\n z: finiteClamp(light.z, 1, 4000, 180),\n color: light.color ?? 'var(--bx-text-inverse, Canvas)',\n intensity: finiteClamp(light.intensity, 0, 4, 1),\n radius: finiteClamp(light.radius, 1, 4000, 640)\n };\n }\n\n private reflectionPoint(reflector: GlassReflector): Reflection {\n const rect = reflector.element.getBoundingClientRect();\n return {\n source: reflector.element,\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n depth: finiteClamp(reflector.depth, -2000, 2000, 80),\n color: reflector.color ?? this.view.getComputedStyle(reflector.element).backgroundColor,\n intensity: finiteClamp(reflector.intensity, 0, 1, 0.28),\n radius: Math.max(rect.width, rect.height, 160)\n };\n }\n\n private project(entry: Entry, lights: PointLight[], reflectors: Reflection[], visibility: ReturnType<typeof lightingVisibility>): Lighting {\n const b = entry.bounds!;\n const cx = b.left + b.width / 2,\n cy = b.top + b.height / 2;\n let x = 25,\n y = 0,\n strength = 0.04,\n color = 'white';\n let strongest = 0,\n weightedX = 0,\n weightedY = 0,\n totalWeight = 0;\n const rims: string[] = [];\n const contributions: LightContribution[] = [];\n for (const light of lights) {\n if ((light.excludeSource && light.source === entry.element) || light.excludeElement === entry.element) continue;\n // Semantic borders emit from their closest edge, so large buttons still have a short reach.\n const lx = light.bounds ? Math.max(light.bounds.left, Math.min(cx, light.bounds.right)) : light.x;\n const ly = light.bounds ? Math.max(light.bounds.top, Math.min(cy, light.bounds.bottom)) : light.y;\n const dx = lx - cx,\n dy = ly - cy;\n const distance = Math.hypot(dx, dy, light.z);\n const weight = light.intensity * Math.pow(Math.max(0, 1 - distance / light.radius), 2) * (light.z / distance);\n // Project actual viewport coordinates into this surface, without a perspective speed-up.\n const localX = Math.max(0, Math.min(100, ((lx - b.left) / Math.max(1, b.width)) * 100));\n const localY = Math.max(0, Math.min(100, ((ly - b.top) / Math.max(1, b.height)) * 100));\n const edgeDistance = Math.hypot(Math.max(b.left - lx, 0, lx - b.right), Math.max(b.top - ly, 0, ly - b.bottom), light.z);\n const edgeWeight = Math.min(0.85, light.intensity * Math.pow(Math.max(0, 1 - edgeDistance / light.radius), 2));\n if (edgeWeight <= 0.01 && weight <= 0.001) continue;\n if (!visibility.exposed(entry.hooks.hitTarget ?? entry.element, lx, ly, b)) continue;\n if (light.source) {\n const source = light.source.closest<HTMLElement>('[data-bx-surface]') ?? light.source;\n if (!visibility.exposed(source, lx, ly, source.getBoundingClientRect())) continue;\n }\n weightedX += localX * weight;\n weightedY += localY * weight;\n if (edgeWeight > 0.01)\n rims.push(\n `radial-gradient(ellipse farthest-side at ${localX.toFixed(2)}% ${localY.toFixed(2)}%, color-mix(in srgb, ${light.color} ${(edgeWeight * 100).toFixed(2)}%, transparent), transparent 75%)`\n );\n if (edgeWeight > 0.01 || weight > 0.001)\n contributions.push({ key: light.key, x: localX, y: localY, color: light.color, strength: Math.min(0.25, weight * 0.4), edgeStrength: edgeWeight });\n totalWeight += weight;\n if (weight > strongest) {\n strongest = weight;\n color = light.color;\n }\n }\n if (totalWeight > 0.001) {\n x = weightedX / totalWeight;\n y = weightedY / totalWeight;\n strength = Math.min(0.4, 0.04 + totalWeight * 0.4);\n }\n let reflectionStrength = 0,\n reflection = 'transparent',\n reflectionX = 50,\n reflectionY = 50;\n for (const reflector of reflectors) {\n if (!visibility.exposed(entry.hooks.hitTarget ?? entry.element, reflector.x, reflector.y, b)) continue;\n const distance = Math.hypot(reflector.x - cx, reflector.y - cy, reflector.depth);\n const weight = reflector.intensity * Math.max(0, 1 - distance / (reflector.radius * 2));\n if (weight > reflectionStrength) {\n reflectionStrength = weight;\n reflection = reflector.color;\n // Signed depth gives background and foreground proxies opposite parallax around the surface normal.\n const direction = reflector.depth < 0 ? 1 : -1;\n const perspective = Math.max(80, Math.abs(reflector.depth) + reflector.radius * 0.5);\n reflectionX = Math.max(0, Math.min(100, 50 + ((reflector.x - cx) / perspective) * 45 * direction));\n reflectionY = Math.max(0, Math.min(100, 50 + ((reflector.y - cy) / perspective) * 45 * direction));\n }\n }\n return { x, y, strength, color, rim: rims.join(', ') || 'none', contributions, reflection, reflectionStrength, reflectionX, reflectionY };\n }\n}\n","/** A scalar spring whose target can change without resetting its velocity. */\nexport interface SpringOptions {\n stiffness?: number;\n damping?: number;\n mass?: number;\n}\n\nexport class Spring {\n private readonly stiffness: number;\n private readonly damping: number;\n private readonly mass: number;\n public value: number;\n\n public velocity = 0;\n\n public target: number;\n\n constructor(value = 0, options: SpringOptions = {}) {\n if (!Number.isFinite(value)) throw new RangeError('Spring value must be finite.');\n this.value = this.target = value;\n this.stiffness = options.stiffness ?? 380;\n this.damping = options.damping ?? 32;\n this.mass = options.mass ?? 1;\n if (\n !Number.isFinite(this.stiffness) ||\n this.stiffness <= 0 ||\n !Number.isFinite(this.damping) ||\n this.damping < 0 ||\n !Number.isFinite(this.mass) ||\n this.mass <= 0\n ) {\n throw new RangeError('Spring stiffness and mass must be positive; damping must be nonnegative.');\n }\n }\n\n /** Advances the exact damped harmonic solution. Returns true while moving. */\n public step(deltaSeconds: number): boolean {\n if (!Number.isFinite(this.target)) throw new RangeError('Spring target must be finite.');\n if (!Number.isFinite(deltaSeconds) || deltaSeconds < 0) {\n throw new RangeError('Spring delta must be finite and nonnegative.');\n }\n const displacement = this.value - this.target;\n if (Math.abs(displacement) < 0.001 && Math.abs(this.velocity) < 0.001) {\n this.snap(this.target);\n return false;\n }\n if (deltaSeconds === 0) return true;\n\n const decay = this.damping / (2 * this.mass);\n const frequencySquared = this.stiffness / this.mass;\n const discriminant = decay * decay - frequencySquared;\n const velocity = this.velocity;\n const time = deltaSeconds;\n let nextDisplacement: number;\n let nextVelocity: number;\n\n if (Math.abs(discriminant) < 0.000001 * frequencySquared) {\n const coefficient = velocity + decay * displacement;\n const exponential = Math.exp(-decay * time);\n nextDisplacement = exponential * (displacement + coefficient * time);\n nextVelocity = exponential * (velocity - decay * coefficient * time);\n } else if (discriminant < 0) {\n const frequency = Math.sqrt(-discriminant);\n const coefficient = (velocity + decay * displacement) / frequency;\n const exponential = Math.exp(-decay * time);\n const cosine = Math.cos(frequency * time);\n const sine = Math.sin(frequency * time);\n nextDisplacement = exponential * (displacement * cosine + coefficient * sine);\n nextVelocity = exponential * ((coefficient * frequency - decay * displacement) * cosine - (displacement * frequency + decay * coefficient) * sine);\n } else {\n const root = Math.sqrt(discriminant);\n const firstRoot = -decay + root;\n const secondRoot = -decay - root;\n const first = (velocity - secondRoot * displacement) / (firstRoot - secondRoot);\n const second = displacement - first;\n const firstTerm = first * Math.exp(firstRoot * time);\n const secondTerm = second * Math.exp(secondRoot * time);\n nextDisplacement = firstTerm + secondTerm;\n nextVelocity = firstRoot * firstTerm + secondRoot * secondTerm;\n }\n this.value = this.target + nextDisplacement;\n this.velocity = nextVelocity;\n if (Math.abs(nextDisplacement) < 0.001 && Math.abs(nextVelocity) < 0.001) {\n this.snap(this.target);\n return false;\n }\n return true;\n }\n\n public snap(value: number): void {\n if (!Number.isFinite(value)) throw new RangeError('Spring value must be finite.');\n this.value = this.target = value;\n this.velocity = 0;\n }\n}\n","import { rememberAttributes, rememberStyles, finiteClamp } from './dom';\nimport { inheritedAttribute } from './configuration';\nimport { registerSurface, refreshGlassLighting } from './scene';\nimport type { Lighting, LightContribution } from './scene';\nimport { subscribeFrame } from './scheduler';\nimport { Spring } from './spring';\nimport type { GlassSurface, SurfaceOptions } from './types';\n\nconst mounted = new WeakMap<HTMLElement, GlassSurface>();\n\n/** Structural surfaces receive light; controls and actionable surfaces also emit it. */\nfunction isActionSurface(element: HTMLElement): boolean {\n if (\n element.matches(\n 'button, bx-button, [bx-button], a[href], summary, input:not([type=\"hidden\"]), select, textarea, [role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"radio\"], [role=\"switch\"], [role=\"tab\"], [role=\"menuitem\"], [role=\"combobox\"], [onclick]'\n ) ||\n typeof element.onclick === 'function'\n )\n return true;\n // Checkbox/radio/switch visuals share a label with their native control.\n if (element.closest('label')?.control) return true;\n // A field's surface may wrap its input, including a floating-label container.\n // A surrounding panel must not inherit interactivity from nested glass controls.\n const controls = element.querySelectorAll('input:not([type=\"hidden\"]), select, textarea');\n return controls.length === 1 && controls[0].closest('[data-bx-surface]') === element;\n}\n\n/** Enhance a native DOM element. Omitted options inherit configureAppearance() and Blocks theme tokens. */\nexport function mountSurface(element: HTMLElement, initial: SurfaceOptions = {}): GlassSurface {\n if (mounted.has(element)) throw new Error('A glass surface is already mounted on this element.');\n const doc = element.ownerDocument;\n const view = doc.defaultView;\n if (!view) throw new Error('Glass surfaces must be mounted in a browser document.');\n const ownProperties = ['position', '--bx-glass-blur', '--bx-glass-opacity'];\n const restoreStyles = rememberStyles(element, ownProperties);\n const attributes = ['data-bx-surface', 'data-bx-reduced-transparency', 'data-bx-reduced-motion', 'data-bx-glass-renderer'];\n const originalAttributes = new Map(attributes.map((name) => [name, element.getAttribute(name)]));\n const restoreAttributes = rememberAttributes(element, attributes);\n const originals = new Map(\n ownProperties.map((property) => [\n property,\n {\n value: element.style.getPropertyValue(property),\n priority: element.style.getPropertyPriority(property)\n }\n ])\n );\n const decoration = doc.createElement('span');\n decoration.className = 'bx-glass-decoration';\n decoration.setAttribute('aria-hidden', 'true');\n const light = doc.createElement('span');\n light.className = 'bx-glass-light';\n const rim = doc.createElement('span');\n rim.className = 'bx-glass-rim';\n rim.setAttribute('aria-hidden', 'true');\n element.append(rim);\n const ambient = doc.createElement('span');\n ambient.className = 'bx-glass-ambient';\n decoration.append(light);\n element.append(decoration);\n decoration.append(ambient);\n const motion = view.matchMedia('(prefers-reduced-motion: reduce)');\n const transparency = view.matchMedia('(prefers-reduced-transparency: reduce)');\n let options = { ...initial };\n let disposed = false;\n let unsubscribe: (() => void) | undefined;\n let reducedMotion = false;\n const interactive = () => options.interactive ?? isActionSurface(element);\n let emitting = false;\n let emittingColor: string | undefined;\n type Layer = { edge: HTMLElement; glow: HTMLElement; animations: Animation[]; leaving: boolean };\n const layers = new Map<string, Layer>();\n const removeLayer = (key: string, layer: Layer) => {\n layer.animations.forEach((animation) => animation.cancel());\n layer.edge.remove();\n layer.glow.remove();\n layers.delete(key);\n };\n const fadeLayer = (key: string, layer: Layer, visible: boolean) => {\n const opacity = view.getComputedStyle(layer.edge).opacity;\n layer.animations.forEach((animation) => animation.cancel());\n layer.leaving = !visible;\n for (const node of [layer.edge, layer.glow]) node.style.opacity = visible ? '1' : '0';\n if (reducedMotion) {\n if (!visible) removeLayer(key, layer);\n return;\n }\n layer.animations = [layer.edge, layer.glow].map((node) => node.animate([{ opacity }, { opacity: visible ? 1 : 0 }], { duration: 200, easing: 'ease-out' }));\n void Promise.all(layer.animations.map((animation) => animation.finished))\n .then(() => {\n if (layer.leaving && layers.get(key) === layer) removeLayer(key, layer);\n })\n .catch(() => {\n /* Interrupted fades continue from their rendered opacity. */\n });\n };\n const setLayer = (value: LightContribution, source = false) => {\n let layer = layers.get(value.key);\n const fresh = !layer;\n if (!layer) {\n const edge = doc.createElement('span'),\n glow = doc.createElement('span');\n edge.className = glow.className = 'bx-glass-contribution';\n edge.dataset['bxLightSource'] = glow.dataset['bxLightSource'] = value.key;\n edge.style.opacity = glow.style.opacity = '0';\n rim.append(edge);\n ambient.append(glow);\n layer = { edge, glow, animations: [], leaving: false };\n layers.set(value.key, layer);\n }\n const at = `${value.x.toFixed(2)}% ${value.y.toFixed(2)}%`;\n const edgeColor = `color-mix(in srgb, ${value.color} ${(value.edgeStrength * 100).toFixed(2)}%, transparent)`;\n layer.edge.style.backgroundImage = source\n ? `linear-gradient(${edgeColor}, ${edgeColor})`\n : `radial-gradient(ellipse farthest-side at ${at}, ${edgeColor}, transparent 75%)`;\n layer.glow.style.backgroundImage = `radial-gradient(ellipse at ${at}, color-mix(in srgb, ${value.color} ${(value.strength * 100).toFixed(2)}%, transparent), transparent 68%)`;\n if (fresh || layer.leaving) fadeLayer(value.key, layer, true);\n // Bound retiring layers during rapid movement across a dense grid.\n if (layers.size > 8)\n for (const [key, old] of layers) {\n if (old.leaving) removeLayer(key, old);\n if (layers.size <= 8) break;\n }\n };\n const emissionColor = () =>\n options.emission ??\n options.focusEmission ??\n (element.closest('[data-bx-field-invalid=\"true\"]') || element.matches('[aria-invalid=\"true\"]') ? 'var(--bx-text-danger)' : 'var(--bx-primary)');\n const emit = (active: boolean, color = emissionColor()) => {\n emitting = active;\n emittingColor = color;\n if (active && color) setLayer({ key: 'emitter', color, x: 50, y: 50, strength: 0, edgeStrength: 0.8 }, true);\n else {\n const layer = layers.get('emitter');\n if (layer && !layer.leaving) fadeLayer('emitter', layer, false);\n }\n };\n const x = new Spring(25, { stiffness: 300, damping: 30 });\n const y = new Spring(0, { stiffness: 300, damping: 30 });\n const strength = new Spring(0.04, { stiffness: 300, damping: 30 });\n const pressure = new Spring(0, { stiffness: 440, damping: 25 });\n const globalValue = (name: string) => inheritedAttribute(element.parentElement ?? element, name);\n const paint = () => {\n // The backdrop and its reflection share this geometry; content remains unscaled and selectable.\n decoration.style.setProperty('--bx-glass-light-x', `${x.value.toFixed(2)}%`);\n decoration.style.setProperty('--bx-glass-light-y', `${y.value.toFixed(2)}%`);\n decoration.style.setProperty('--bx-glass-light-strength', strength.value.toFixed(3));\n decoration.style.setProperty('--bx-glass-press', pressure.value.toFixed(4));\n };\n const animate = () => {\n if (disposed || unsubscribe) return;\n if (reducedMotion || typeof requestAnimationFrame !== 'function') {\n x.snap(x.target);\n y.snap(y.target);\n strength.snap(strength.target);\n pressure.snap(0);\n paint();\n return;\n }\n unsubscribe = subscribeFrame((dt) => {\n if (disposed) return false;\n const moving = [x.step(dt), y.step(dt), strength.step(dt), pressure.step(dt)].some(Boolean);\n paint();\n if (!moving) unsubscribe = undefined;\n return moving;\n });\n };\n const lighting = (value: Lighting) => {\n // Geometry is already measured from the rendered source. A second spring would make it drift.\n x.snap(value.x);\n y.snap(value.y);\n strength.target = value.strength;\n const active = new Set(value.contributions.map((contribution) => contribution.key));\n for (const contribution of value.contributions) setLayer(contribution);\n for (const [key, layer] of layers) if (key !== 'emitter' && !active.has(key) && !layer.leaving) fadeLayer(key, layer, false);\n decoration.style.setProperty('--bx-glass-light-color', value.color);\n decoration.style.setProperty('--bx-glass-reflection-color', value.reflection);\n decoration.style.setProperty('--bx-glass-reflection-strength', String(value.reflectionStrength));\n decoration.style.setProperty('--bx-glass-reflection-x', `${value.reflectionX.toFixed(2)}%`);\n decoration.style.setProperty('--bx-glass-reflection-y', `${value.reflectionY.toFixed(2)}%`);\n animate();\n };\n const sync = () => {\n const inheritedMaterial = inheritedAttribute(element, 'data-bx-glass-material');\n const material = options.material ?? (inheritedMaterial === 'frosted' || inheritedMaterial === 'solid' ? inheritedMaterial : 'glass');\n element.setAttribute('data-bx-surface', material);\n const inheritedMotion = globalValue('data-bx-reduced-motion') ?? originalAttributes.get('data-bx-reduced-motion');\n const inheritedTransparency = globalValue('data-bx-reduced-transparency') ?? originalAttributes.get('data-bx-reduced-transparency');\n reducedMotion = options.reducedMotion ?? (inheritedMotion === null || inheritedMotion === undefined ? motion.matches : inheritedMotion === 'true');\n const reducedTransparency = options.reducedTransparency ?? (inheritedTransparency === 'true' || transparency.matches);\n element.setAttribute('data-bx-reduced-transparency', String(reducedTransparency));\n element.setAttribute('data-bx-reduced-motion', String(reducedMotion));\n const quality = inheritedAttribute(element, 'data-bx-glass-quality') ?? 'auto';\n const supported =\n typeof CSS !== 'undefined' &&\n CSS.supports('background', 'color-mix(in srgb, white, black)') &&\n (CSS.supports('backdrop-filter', 'blur(1px)') || CSS.supports('-webkit-backdrop-filter', 'blur(1px)'));\n const connection = (view.navigator as Navigator & { connection?: { saveData?: boolean } }).connection;\n const economical =\n connection?.saveData ||\n (view.navigator.hardwareConcurrency > 0 && view.navigator.hardwareConcurrency <= 4) ||\n view.matchMedia('(pointer: coarse)').matches;\n const enhanced = quality !== 'baseline' && supported && (quality === 'enhanced' || !economical);\n element.setAttribute('data-bx-glass-renderer', enhanced ? 'enhanced' : 'baseline');\n if (options.blur !== undefined) element.style.setProperty('--bx-glass-blur', `${finiteClamp(options.blur, 0, 40, 10)}px`);\n else restoreProperty('--bx-glass-blur');\n if (options.tint !== undefined) element.style.setProperty('--bx-glass-opacity', String(finiteClamp(options.tint, 0, 1, 0.4)));\n else restoreProperty('--bx-glass-opacity');\n // Absolutely positioned children use the padding box. Extend only across the\n // host's real border so their inherited outer radius describes the same curve.\n // Borderless and one-sided surfaces must never grow beyond their border box.\n const style = view.getComputedStyle(element);\n for (const side of ['top', 'right', 'bottom', 'left']) {\n const width = style.getPropertyValue(`border-${side}-width`);\n const inset = `${-parseFloat(width || '0')}px`;\n for (const layer of [decoration, rim]) {\n if (layer.style.getPropertyValue(side) !== inset) layer.style.setProperty(side, inset);\n }\n }\n if (reducedMotion || !interactive()) {\n unsubscribe?.();\n unsubscribe = undefined;\n x.snap(x.target);\n y.snap(y.target);\n strength.snap(strength.target);\n pressure.snap(0);\n paint();\n }\n if (reducedMotion)\n for (const [key, layer] of layers) {\n if (layer.leaving) removeLayer(key, layer);\n else layer.animations.forEach((animation) => animation.cancel());\n }\n if (emitting) emit(true, emittingColor);\n };\n function restoreProperty(property: string): void {\n const original = originals.get(property);\n if (original?.value) element.style.setProperty(property, original.value, original.priority);\n else element.style.removeProperty(property);\n }\n sync();\n // Apply the material before the first style read to avoid transitioning from legacy colors.\n if (view.getComputedStyle(element).position === 'static') element.style.position = 'relative';\n const unregister = registerSurface(element, {\n light: lighting,\n sync,\n interactive,\n emission: emissionColor,\n focusEmission: () => options.focusEmission ?? emissionColor(),\n emit,\n press() {\n if (interactive() && !reducedMotion) {\n pressure.target = 1;\n animate();\n }\n },\n release() {\n pressure.target = 0;\n animate();\n }\n });\n const controller: GlassSurface = {\n update(next) {\n if (!disposed) {\n options = { ...next };\n sync();\n refreshGlassLighting(element);\n }\n },\n destroy() {\n if (disposed) return;\n disposed = true;\n unsubscribe?.();\n unregister();\n decoration.remove();\n rim.remove();\n for (const [key, layer] of layers) removeLayer(key, layer);\n restoreStyles();\n restoreAttributes();\n mounted.delete(element);\n }\n };\n mounted.set(element, controller);\n return controller;\n}\n","import { rememberAttributes, rememberStyles, smoothstep } from './dom';\nimport { configurationEvent, inheritedAttribute } from './configuration';\nimport { subscribeFrame } from './scheduler';\nimport type { GlassTransition, GlassTransitionOptions, MotionResult } from './types';\n\n/** Fade a positioned overlay without changing the geometry of its content. */\nexport function createGlassTransition(origin: HTMLElement, target: HTMLElement, options: GlassTransitionOptions = {}): GlassTransition {\n const doc = target.ownerDocument;\n const view = doc.defaultView;\n if (!view) throw new Error('Glass transitions must be mounted in a browser document.');\n if (origin.ownerDocument !== doc) throw new Error('Glass transition endpoints must share a document.');\n const restoreStyles = rememberStyles(target, ['opacity', 'visibility']);\n const skin = target.matches('[data-bx-surface]') ? target : (target.querySelector<HTMLElement>('[data-bx-surface]') ?? target);\n const restoreMaterial = rememberAttributes(skin, ['data-bx-motion-material']);\n // Opacity isolates a descendant's backdrop. Keep a consistent opaque backing at rest as well.\n skin.setAttribute('data-bx-motion-material', 'solid');\n const preference = view.matchMedia('(prefers-reduced-motion: reduce)');\n let disposed = false;\n let active = false;\n let value = 0,\n from = 0,\n destination = 0,\n elapsed = 0;\n let unsubscribe: (() => void) | undefined;\n let resolvePending: ((result: MotionResult) => void) | undefined;\n const reduced = () => {\n const inherited = inheritedAttribute(origin, 'data-bx-reduced-motion');\n return options.reducedMotion ?? (inherited === null ? preference.matches : inherited === 'true');\n };\n const paint = () => {\n target.style.opacity = String(value);\n options.onUpdate?.();\n };\n function settle(): void {\n active = false;\n value = destination;\n unsubscribe?.();\n unsubscribe = undefined;\n restoreStyles();\n if (destination === 0) target.style.visibility = 'hidden';\n const resolve = resolvePending;\n resolvePending = undefined;\n resolve?.('finished');\n }\n function move(open: boolean): Promise<MotionResult> {\n if (disposed) return Promise.resolve('cancelled');\n resolvePending?.('cancelled');\n unsubscribe?.();\n unsubscribe = undefined;\n from = value;\n destination = open ? 1 : 0;\n elapsed = 0;\n active = true;\n restoreStyles();\n const finished = new Promise<MotionResult>((resolve) => {\n resolvePending = resolve;\n });\n if (reduced() || from === destination) settle();\n else {\n paint();\n const duration = (open ? 0.18 : 0.14) * Math.abs(destination - from);\n unsubscribe = subscribeFrame((dt) => {\n elapsed += dt;\n value = from + (destination - from) * smoothstep(0, duration, elapsed);\n paint();\n if (disposed) return false;\n if (elapsed >= duration) {\n settle();\n return false;\n }\n return true;\n });\n }\n return finished;\n }\n const onPreference = () => {\n if (active && reduced()) settle();\n };\n preference.addEventListener('change', onPreference);\n doc.addEventListener(configurationEvent, onPreference);\n return {\n enter: () => move(true),\n exit: () => move(false),\n refresh() {},\n destroy() {\n if (disposed) return;\n disposed = true;\n active = false;\n unsubscribe?.();\n unsubscribe = undefined;\n resolvePending?.('cancelled');\n resolvePending = undefined;\n preference.removeEventListener('change', onPreference);\n doc.removeEventListener(configurationEvent, onPreference);\n restoreStyles();\n restoreMaterial();\n }\n };\n}\n\n/** @deprecated Use createGlassTransition. */\nexport const createLiquidTransition = createGlassTransition;\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filip.mazev-blocks-effects-runtime.mjs","names":[],"sources":["../../../projects/blocks/effects/runtime/dom.ts","../../../projects/blocks/effects/runtime/configuration.ts","../../../projects/blocks/effects/runtime/scheduler.ts","../../../projects/blocks/effects/runtime/visibility.ts","../../../projects/blocks/effects/runtime/ambient.ts","../../../projects/blocks/effects/runtime/scene.ts","../../../projects/blocks/effects/runtime/spring.ts","../../../projects/blocks/effects/runtime/surface.ts","../../../projects/blocks/effects/runtime/transition.ts"],"sourcesContent":["/** Only the properties owned by a controller are restored, leaving application changes intact. */\nexport function rememberStyles(element: HTMLElement, properties: readonly string[]): () => void {\n const values = properties.map((property) => ({\n property,\n value: element.style.getPropertyValue(property),\n priority: element.style.getPropertyPriority(property)\n }));\n return () => {\n for (const item of values) {\n if (item.value) element.style.setProperty(item.property, item.value, item.priority);\n else element.style.removeProperty(item.property);\n }\n };\n}\n\nexport function rememberAttributes(element: HTMLElement, attributes: readonly string[]): () => void {\n const values = attributes.map((attribute) => [attribute, element.getAttribute(attribute)] as const);\n return () => {\n for (const [attribute, value] of values) {\n if (value === null) element.removeAttribute(attribute);\n else element.setAttribute(attribute, value);\n }\n };\n}\n\nexport function finiteClamp(value: number | undefined, low: number, high: number, fallback: number): number {\n return value === undefined || !Number.isFinite(value) ? fallback : Math.min(high, Math.max(low, value));\n}\n\nexport function smoothstep(low: number, high: number, value: number): number {\n const t = Math.min(1, Math.max(0, (value - low) / (high - low)));\n return t * t * (3 - 2 * t);\n}\n","import { finiteClamp, rememberAttributes, rememberStyles } from './dom';\nimport type { AppearanceConfiguration, AppearanceConfigurationController } from './types';\n\nexport const configurationEvent = 'bx-glass-config-change';\nconst attributes = ['data-bx-glass-quality', 'data-bx-reduced-motion', 'data-bx-reduced-transparency'];\nconst properties = ['--bx-glassiness'];\nconst configured = new WeakSet<HTMLElement>();\n\n/** Configure one inherited application scope. Use document.documentElement to include overlays. */\nexport function configureAppearance(root: HTMLElement, initial: AppearanceConfiguration = {}): AppearanceConfigurationController {\n if (configured.has(root)) throw new Error('A glass configuration is already mounted on this root.');\n configured.add(root);\n const restoreAttributes = rememberAttributes(root, attributes);\n const restoreStyles = rememberStyles(root, properties);\n let options = { ...initial };\n let disposed = false;\n const notify = () => {\n const viewEvent = root.ownerDocument.defaultView?.CustomEvent;\n if (viewEvent) root.ownerDocument.dispatchEvent(new viewEvent(configurationEvent, { detail: root }));\n };\n const paint = () => {\n restoreAttributes();\n restoreStyles();\n const values: [string, unknown][] = [\n ['data-bx-glass-quality', options.quality],\n ['data-bx-reduced-motion', options.reducedMotion],\n ['data-bx-reduced-transparency', options.reducedTransparency]\n ];\n for (const [name, value] of values) if (value !== undefined) root.setAttribute(name, String(value));\n if (options.glassiness !== undefined) root.style.setProperty('--bx-glassiness', String(finiteClamp(options.glassiness, 0, 1, 0.5)));\n notify();\n };\n paint();\n return {\n update(next) {\n if (!disposed) {\n options = { ...options, ...next };\n paint();\n }\n },\n destroy() {\n if (disposed) return;\n disposed = true;\n restoreAttributes();\n restoreStyles();\n configured.delete(root);\n notify();\n }\n };\n}\n\nexport function inheritedAttribute(element: HTMLElement, name: string): string | null {\n let current: HTMLElement | null = element;\n while (current) {\n const value = current.getAttribute(name);\n if (value !== null) return value;\n current = current.parentElement;\n }\n return null;\n}\n","export type FrameCallback = (deltaSeconds: number, timestamp: number) => boolean;\n\ninterface FrameEntry {\n callback: FrameCallback;\n}\nconst entries = new Set<FrameEntry>();\nlet frame: number | undefined;\nlet previousTime: number | undefined;\nlet ticking = false;\n\nfunction tick(timestamp: number): void {\n frame = undefined;\n ticking = true;\n const delta = previousTime === undefined ? 1 / 60 : Math.min(0.064, Math.max(0, (timestamp - previousTime) / 1000));\n previousTime = timestamp;\n for (const entry of Array.from(entries)) {\n if (!entries.has(entry)) continue;\n try {\n if (!entry.callback(delta, timestamp)) entries.delete(entry);\n } catch (error) {\n entries.delete(entry);\n // Keep unrelated surfaces running; report the failed callback separately.\n queueMicrotask(() => {\n throw error;\n });\n }\n }\n ticking = false;\n if (entries.size > 0) frame = requestAnimationFrame(tick);\n else previousTime = undefined;\n}\n\n/** All effects share one lazy clock. Returning false removes the callback. */\nexport function subscribeFrame(callback: FrameCallback): () => void {\n if (typeof requestAnimationFrame !== 'function') return () => {};\n const entry: FrameEntry = { callback };\n entries.add(entry);\n if (frame === undefined && !ticking) frame = requestAnimationFrame(tick);\n return () => {\n entries.delete(entry);\n if (entries.size === 0) {\n if (frame !== undefined) cancelAnimationFrame(frame);\n frame = undefined;\n previousTime = undefined;\n }\n };\n}\n","/** Structural overlay boundaries are independent of numeric z-index values in nested contexts. */\nexport const lightBoundarySelector =\n '[data-bx-light-scope], dialog, [role=\"dialog\"], [role=\"alertdialog\"], [popover], .cdk-overlay-pane, .toast-container, bx-modal';\n\nconst lightingOrigins = new WeakMap<HTMLElement, HTMLElement>();\n\n/** Let a passive overlay receive light from its trigger's context. Register before mounting its surfaces. */\nexport function inheritGlassLighting(overlay: HTMLElement, origin: HTMLElement): () => void {\n if (overlay.contains(origin)) throw new Error('A lighting origin must be outside its overlay.');\n lightingOrigins.set(overlay, origin);\n return () => lightingOrigins.delete(overlay);\n}\n\nexport function lightingOrigin(element: Element): Element {\n let current: Element | null = element;\n while (current) {\n const origin = lightingOrigins.get(current as HTMLElement);\n if (origin) return origin;\n current = current.parentElement;\n }\n return element;\n}\n\n/** A short-lived snapshot: caches style reads within a lighting batch, never tracks pointer motion. */\nexport function lightingVisibility(doc: Document, view: Window) {\n const styles = new Map<Element, CSSStyleDeclaration>();\n const boundaries = new Map<HTMLElement, HTMLElement>();\n const layers = new Map<HTMLElement, HTMLElement>();\n const ambientBoundaries = new Map<Element, HTMLElement>();\n const hitStacks = new Map<string, Element[]>();\n const style = (element: Element) => {\n let value = styles.get(element);\n if (!value) {\n value = view.getComputedStyle(element);\n styles.set(element, value);\n }\n return value;\n };\n const elementsAt = (x: number, y: number): Element[] => {\n const key = `${Math.round(x)},${Math.round(y)}`;\n const cached = hitStacks.get(key);\n if (cached) return cached;\n const elements = [...doc.elementsFromPoint(x, y)];\n for (let index = 0; index < elements.length; index++) {\n const root = elements[index].shadowRoot;\n if (!root) continue;\n const shadowElements = root.elementsFromPoint(x, y);\n if (!shadowElements.length) continue;\n elements.splice(index, 0, ...shadowElements);\n index += shadowElements.length;\n }\n hitStacks.set(key, elements);\n return elements;\n };\n const ambientBoundary = (element: Element): HTMLElement => {\n const cached = ambientBoundaries.get(element);\n if (cached) return cached;\n const origin = lightingOrigin(element);\n if (origin !== element) {\n const result = ambientBoundary(origin);\n ambientBoundaries.set(element, result);\n return result;\n }\n let current: Element | null = element;\n const visited: Element[] = [];\n while (current) {\n visited.push(current);\n const boundary = ambientBoundaries.get(current) ?? current.closest<HTMLElement>(lightBoundarySelector);\n if (boundary) {\n for (const ancestor of visited) ambientBoundaries.set(ancestor, boundary);\n return boundary;\n }\n const root = current.getRootNode() as ShadowRoot;\n current = current.parentElement ?? root.host ?? null;\n }\n for (const ancestor of visited) ambientBoundaries.set(ancestor, doc.documentElement);\n return doc.documentElement;\n };\n const boundary = (element: HTMLElement): HTMLElement => {\n const cached = boundaries.get(element);\n if (cached) return cached;\n const origin = lightingOrigin(element);\n if (origin !== element) {\n const result = boundary(origin as HTMLElement);\n boundaries.set(element, result);\n return result;\n }\n const css = style(element);\n const result =\n element.matches(lightBoundarySelector) || css.position === 'fixed' || css.position === 'sticky'\n ? element\n : element.parentElement\n ? boundary(element.parentElement)\n : element;\n boundaries.set(element, result);\n return result;\n };\n const layer = (element: HTMLElement): HTMLElement => {\n const cached = layers.get(element);\n if (cached) return cached;\n const css = style(element);\n const positionedLayer = css.position !== 'static' && css.zIndex !== 'auto';\n const result =\n element.matches(lightBoundarySelector) || css.position === 'fixed' || css.position === 'sticky' || positionedLayer\n ? element\n : element.parentElement\n ? layer(element.parentElement)\n : element;\n layers.set(element, result);\n return result;\n };\n const exposed = (element: HTMLElement, x: number, y: number, bounds: DOMRect): boolean => {\n if (!element.isConnected || bounds.width <= 0 || bounds.height <= 0) return false;\n // Stay inside rounded corners: their bounding-box corners are not painted pixels.\n const css = style(element);\n const radius = Math.min(\n bounds.width / 2,\n bounds.height / 2,\n Math.max(\n ...[css.borderTopLeftRadius, css.borderTopRightRadius, css.borderBottomLeftRadius, css.borderBottomRightRadius].map((value) => parseFloat(value) || 0)\n )\n );\n const inset = Math.min(bounds.width / 2, bounds.height / 2, 1 + radius * (1 - Math.SQRT1_2));\n const px = Math.max(bounds.left + inset, Math.min(x, bounds.right - inset));\n const py = Math.max(bounds.top + inset, Math.min(y, bounds.bottom - inset));\n if (px < 0 || py < 0 || px >= view.innerWidth || py >= view.innerHeight) return false;\n // Passive help bubbles are intentionally absent from pointer hit testing.\n if (css.pointerEvents === 'none' && element.closest('bx-tooltip, [role=\"tooltip\"]')) {\n if (css.visibility !== 'visible' || css.display === 'none' || Number(css.opacity) === 0) return false;\n const origin = lightingOrigin(element);\n if (origin !== element) {\n const rect = origin.getBoundingClientRect();\n return exposed(origin as HTMLElement, rect.left + rect.width / 2, rect.top + rect.height / 2, rect);\n }\n const behind = doc.elementFromPoint(px, py);\n return !!behind && ambientBoundary(behind) === ambientBoundary(element);\n }\n const hit = doc.elementFromPoint(px, py);\n return !!hit && (hit === element || element.contains(hit));\n };\n return { boundary, layer, exposed, style, elementsAt, ambientBoundary };\n}\n","import { subscribeFrame } from './scheduler';\nimport { inheritedAttribute } from './configuration';\nimport { lightingVisibility } from './visibility';\nimport type { PointLight } from './scene';\n\nexport interface AmbientReceiver {\n id: number;\n element: HTMLElement;\n visible: boolean;\n bounds?: DOMRect;\n}\ninterface VisualSource {\n element: Element;\n color: string;\n}\ninterface Sample {\n lights: PointLight[];\n media: Set<Element>;\n rects: Map<Element, DOMRect>;\n}\ninterface RasterSample {\n data: ImageData | null;\n stamp?: number;\n}\n\nconst sampleInterval = 180;\nconst liveInterval = 500;\nconst rasterSize = 32;\n\n/** Slow, shared environmental sampling stays independent of immediate semantic lighting. */\nexport class AmbientSampler {\n private samples = new Map<AmbientReceiver, Sample>();\n private dirty = new Set<AmbientReceiver>();\n private pending = new Set<AmbientReceiver>();\n private sources = new Set<Element>();\n private initialized = false;\n private media = new WeakMap<Element, RasterSample>();\n private dependencies?: Set<Element>;\n private sampleCanvas: HTMLCanvasElement;\n private sampleContext: CanvasRenderingContext2D | null;\n private timer?: number;\n private liveTimer?: number;\n private stopFrame?: () => void;\n private nextSample = 0;\n private liveDelay = liveInterval;\n private motion: MediaQueryList;\n\n constructor(\n private doc: Document,\n private view: Window,\n private changed: (entry: AmbientReceiver) => void,\n private observeRoot: (root: ShadowRoot) => void\n ) {\n this.sampleCanvas = doc.createElement('canvas');\n this.sampleCanvas.width = this.sampleCanvas.height = rasterSize;\n this.sampleContext = this.sampleCanvas.getContext('2d', { willReadFrequently: true });\n this.motion = view.matchMedia('(prefers-reduced-motion: reduce)');\n }\n\n public add(entry: AmbientReceiver): void {\n if (!this.initialized) {\n this.scan(this.doc);\n this.initialized = true;\n }\n const root = entry.element.getRootNode();\n if ('host' in root) this.scan(root as ShadowRoot);\n this.samples.set(entry, { lights: [], media: new Set(), rects: new Map() });\n this.invalidate(entry);\n }\n\n public remove(entry: AmbientReceiver): void {\n this.samples.delete(entry);\n this.dirty.delete(entry);\n this.pending.delete(entry);\n this.syncLive();\n }\n\n public lights(entry: AmbientReceiver): PointLight[] {\n return this.samples.get(entry)?.lights ?? [];\n }\n\n public invalidate(entry?: AmbientReceiver): void {\n for (const receiver of entry ? [entry] : this.samples.keys()) {\n if (receiver.visible && receiver.element.isConnected) this.dirty.add(receiver);\n }\n this.resume();\n }\n\n public assetChanged(element: Element): void {\n this.media.delete(element);\n this.invalidate();\n }\n\n public sourcesChanged(record: MutationRecord): void {\n for (const node of record.addedNodes) {\n if (node.nodeType === 1) this.scan(node as Element);\n }\n for (const source of this.sources) if (!source.isConnected) this.sources.delete(source);\n }\n\n public resume(): void {\n if (this.doc.hidden) {\n if (this.timer !== undefined) this.view.clearTimeout(this.timer);\n if (this.liveTimer !== undefined) this.view.clearTimeout(this.liveTimer);\n this.timer = this.liveTimer = undefined;\n this.stopFrame?.();\n this.stopFrame = undefined;\n for (const entry of this.pending) this.dirty.add(entry);\n this.pending.clear();\n return;\n }\n if (this.dirty.size && this.timer === undefined && !this.stopFrame) {\n this.timer = this.view.setTimeout(\n () => {\n this.timer = undefined;\n this.nextSample = this.view.performance.now() + sampleInterval;\n this.pending = this.dirty;\n this.dirty = new Set();\n this.stopFrame = subscribeFrame(() => this.sampleBatch());\n },\n Math.max(0, this.nextSample - this.view.performance.now())\n );\n }\n this.syncLive();\n }\n\n public destroy(): void {\n if (this.timer !== undefined) this.view.clearTimeout(this.timer);\n if (this.liveTimer !== undefined) this.view.clearTimeout(this.liveTimer);\n this.stopFrame?.();\n this.stopFrame = undefined;\n this.timer = this.liveTimer = undefined;\n this.samples.clear();\n this.dirty.clear();\n this.pending.clear();\n this.sources.clear();\n this.media = new WeakMap();\n this.initialized = false;\n this.nextSample = 0;\n this.liveDelay = liveInterval;\n }\n\n private scan(root: ParentNode): void {\n // Inventory only on insertion, including open shadow roots; never rescan the page on a tick.\n if ('host' in root) this.observeRoot(root as ShadowRoot);\n if ('tagName' in root && /^(IMG|VIDEO|CANVAS)$/.test(String(root.tagName))) this.sources.add(root as Element);\n const shadow = 'shadowRoot' in root ? (root as Element).shadowRoot : null;\n if (shadow) this.scan(shadow);\n for (const element of root.querySelectorAll('*')) {\n if (/^(IMG|VIDEO|CANVAS)$/.test(element.tagName)) this.sources.add(element);\n if (element.shadowRoot) this.scan(element.shadowRoot);\n }\n }\n\n private sampleBatch(): boolean {\n const start = this.view.performance.now();\n const visibility = lightingVisibility(this.doc, this.view);\n const rects = new Map<Element, DOMRect>();\n const rasterSamples = new Map<Element, ImageData | null>();\n const sources = [...this.sources];\n const completed: AmbientReceiver[] = [];\n for (const entry of this.pending) {\n this.pending.delete(entry);\n if (!entry.visible || !entry.element.isConnected || !this.samples.has(entry)) continue;\n entry.bounds = entry.element.getBoundingClientRect();\n this.dependencies = new Set();\n const lights = this.environmentLights(entry, sources, rasterSamples, rects, visibility);\n const mediaRects = new Map<Element, DOMRect>();\n for (const source of this.dependencies) mediaRects.set(source, this.rectFor(source, rects));\n this.samples.set(entry, { lights, media: this.dependencies, rects: mediaRects });\n completed.push(entry);\n // A receiver is atomic. Yield between receivers rather than block a frame with a whole page.\n if (completed.length >= 4 || this.view.performance.now() - start >= 4) break;\n }\n this.dependencies = undefined;\n for (const entry of completed) this.changed(entry);\n if (this.pending.size) return true;\n this.stopFrame = undefined;\n this.resume();\n return false;\n }\n\n private liveSources(): Map<Element, AmbientReceiver[]> {\n const sources = new Map<Element, AmbientReceiver[]>();\n for (const [entry, sample] of this.samples) {\n const motion = inheritedAttribute(entry.element, 'data-bx-reduced-motion');\n if (!entry.visible || !entry.element.isConnected || (motion === null ? this.motion.matches : motion === 'true')) continue;\n for (const source of sample.media) {\n if (!source.isConnected || !/^(CANVAS|VIDEO)$/.test(source.tagName) || this.media.get(source)?.data === null) continue;\n if (source.tagName === 'VIDEO' && (source as HTMLVideoElement).paused) continue;\n const entries = sources.get(source) ?? [];\n entries.push(entry);\n sources.set(source, entries);\n }\n }\n return sources;\n }\n\n private syncLive(): void {\n const active = !this.doc.hidden && this.liveSources().size > 0;\n if (!active && this.liveTimer !== undefined) {\n this.view.clearTimeout(this.liveTimer);\n this.liveTimer = undefined;\n }\n if (!active || this.liveTimer !== undefined) return;\n this.liveTimer = this.view.setTimeout(() => {\n this.liveTimer = undefined;\n let changed = false;\n const recolored = new Set<AmbientReceiver>();\n const visibility = lightingVisibility(this.doc, this.view);\n for (const [source, entries] of this.liveSources()) {\n const previous = this.media.get(source);\n const next = this.readRaster(source, true);\n // Compare quantized pixels, not just the fact that a canvas/video exists.\n if (previous?.data && next?.data && this.samePixels(previous.data, next.data)) continue;\n if (previous?.data === next?.data) continue;\n changed = true;\n const coverageChanged = !previous?.data || !next?.data || !this.samePixels(previous.data, next.data, true);\n for (const entry of entries) {\n const sample = this.samples.get(entry);\n if (!sample || coverageChanged || this.dirty.has(entry) || this.pending.has(entry)) {\n this.dirty.add(entry);\n continue;\n }\n // Animation changes pixels, not the hit-test stack. Reuse the source bindings and\n // geometry until a real layout/visibility invalidation, and repaint only changed taps.\n const pixels = new Map([[source, next?.data ?? null]]);\n sample.lights = sample.lights.map((light) => {\n if (light.source !== source) return light;\n const color = this.rasterColorAt(source, light.x, light.y, pixels, sample.rects, visibility);\n if (!color || color === light.color) return light;\n recolored.add(entry);\n return { ...light, color };\n });\n }\n }\n for (const entry of recolored) this.changed(entry);\n this.liveDelay = changed ? liveInterval : Math.min(2000, this.liveDelay * 2);\n this.resume();\n }, this.liveDelay);\n }\n\n private samePixels(first: ImageData, second: ImageData, alphaOnly = false): boolean {\n for (let index = alphaOnly ? 3 : 0; index < first.data.length; index += alphaOnly ? 4 : 1) {\n if (first.data[index] >> 3 !== second.data[index] >> 3) return false;\n }\n return true;\n }\n\n private readRaster(element: Element, refresh = false): RasterSample | undefined {\n const cached = this.media.get(element);\n if (cached && !refresh) return cached;\n const tag = element.tagName;\n let source: CanvasImageSource;\n let stamp: number | undefined;\n if (tag === 'IMG') {\n const image = element as HTMLImageElement;\n if (!image.complete || !image.naturalWidth) return undefined;\n source = image;\n } else if (tag === 'VIDEO') {\n const video = element as HTMLVideoElement;\n if (video.readyState < 2 || !video.videoWidth) return undefined;\n stamp = video.currentTime;\n if (cached?.stamp === stamp) return cached;\n source = video;\n } else {\n const canvas = element as HTMLCanvasElement;\n if (!canvas.width || !canvas.height) return undefined;\n source = canvas;\n }\n if (!this.sampleContext) return undefined;\n let data: ImageData | null = null;\n try {\n this.sampleContext.clearRect(0, 0, rasterSize, rasterSize);\n this.sampleContext.drawImage(source, 0, 0, rasterSize, rasterSize);\n data = this.sampleContext.getImageData(0, 0, rasterSize, rasterSize);\n } catch {\n // Cache failures too, and recover the shared buffer after a cross-origin source taints it.\n this.sampleCanvas.width = rasterSize;\n this.sampleContext = this.sampleCanvas.getContext('2d', { willReadFrequently: true });\n }\n const result = { data, stamp };\n this.media.set(element, result);\n return result;\n }\n\n private environmentLights(\n entry: AmbientReceiver,\n rasterSources: Element[],\n rasterSamples: Map<Element, ImageData | null>,\n rects: Map<Element, DOMRect>,\n visibility: ReturnType<typeof lightingVisibility>\n ): PointLight[] {\n const bounds = entry.bounds;\n if (\n !bounds ||\n bounds.width <= 0 ||\n bounds.height <= 0 ||\n entry.element.getAttribute('data-bx-surface') === 'solid' ||\n entry.element.getAttribute('data-bx-reduced-transparency') === 'true'\n )\n return [];\n const insetX = Math.min(3, bounds.width * 0.1);\n const insetY = Math.min(3, bounds.height * 0.1);\n const points = [\n { x: bounds.left + bounds.width * 0.24, y: bounds.top + insetY, side: 'inside' as const, edge: 0 },\n { x: bounds.left + bounds.width * 0.76, y: bounds.top + insetY, side: 'inside' as const, edge: 0 },\n { x: bounds.right - insetX, y: bounds.top + bounds.height * 0.24, side: 'inside' as const, edge: 1 },\n { x: bounds.right - insetX, y: bounds.top + bounds.height * 0.76, side: 'inside' as const, edge: 1 },\n { x: bounds.left + bounds.width * 0.76, y: bounds.bottom - insetY, side: 'inside' as const, edge: 2 },\n { x: bounds.left + bounds.width * 0.24, y: bounds.bottom - insetY, side: 'inside' as const, edge: 2 },\n { x: bounds.left + insetX, y: bounds.top + bounds.height * 0.76, side: 'inside' as const, edge: 3 },\n { x: bounds.left + insetX, y: bounds.top + bounds.height * 0.24, side: 'inside' as const, edge: 3 },\n ...[24, 96].flatMap((gap) => [\n { x: bounds.left + bounds.width / 2, y: bounds.top - gap, side: 'outside' as const, edge: 0 },\n { x: bounds.right + gap, y: bounds.top + bounds.height / 2, side: 'outside' as const, edge: 1 },\n { x: bounds.left + bounds.width / 2, y: bounds.bottom + gap, side: 'outside' as const, edge: 2 },\n { x: bounds.left - gap, y: bounds.top + bounds.height / 2, side: 'outside' as const, edge: 3 }\n ])\n ];\n const visibleX = Math.max(1, Math.min(this.view.innerWidth - 1, bounds.left + bounds.width / 2));\n const visibleY = Math.max(1, Math.min(this.view.innerHeight - 1, bounds.top + bounds.height / 2));\n if (!visibility.exposed(entry.element, visibleX, visibleY, bounds)) return [];\n const targetBoundary = visibility.ambientBoundary(entry.element);\n const passiveTooltip = visibility.style(entry.element).pointerEvents === 'none' && !!entry.element.closest('bx-tooltip, [role=\"tooltip\"]');\n // Cull once per receiver, rather than walking every media element at every edge probe.\n rasterSources = rasterSources.filter((source) => {\n const rect = this.rectFor(source, rects);\n return (\n rect.width > 0 &&\n rect.height > 0 &&\n rect.right >= bounds.left - 96 &&\n rect.left <= bounds.right + 96 &&\n rect.bottom >= bounds.top - 96 &&\n rect.top <= bounds.bottom + 96 &&\n visibility.ambientBoundary(source) === targetBoundary\n );\n });\n const lights: PointLight[] = [];\n const sourcesByEdge = new Map<number, Set<Element>>();\n const colorsByEdge = new Map<number, Map<Element, Set<string>>>();\n\n points.forEach((point, index) => {\n if (point.x < 0 || point.y < 0 || point.x >= this.view.innerWidth || point.y >= this.view.innerHeight) return;\n const stack = visibility.elementsAt(point.x, point.y);\n const receiverIndex = stack.findIndex((element) => this.isInside(element, entry.element));\n let source: VisualSource | undefined;\n let foreground = false;\n\n if (point.side === 'inside' && receiverIndex >= 0) {\n source = this.findVisualSource(stack.slice(0, receiverIndex), entry, point.x, point.y, visibility, rasterSamples, rects, {\n skipAncestors: true,\n skipRoot: true\n });\n if (source) foreground = true;\n source ??= this.findRasterSource(rasterSources, entry, point.x, point.y, visibility, rasterSamples, rects, stack, receiverIndex, true, targetBoundary);\n source ??= this.findVisualSource(stack.slice(receiverIndex + 1), entry, point.x, point.y, visibility, rasterSamples, rects, {\n skipAncestors: true,\n skipRoot: true\n });\n source ??= this.findRasterSource(rasterSources, entry, point.x, point.y, visibility, rasterSamples, rects, stack, receiverIndex, false, targetBoundary);\n source ??= this.findVisualSource(stack.slice(receiverIndex + 1), entry, point.x, point.y, visibility, rasterSamples, rects, {\n skipAncestors: false,\n skipRoot: true\n });\n source ??= this.findVisualSource(stack.slice(receiverIndex + 1), entry, point.x, point.y, visibility, rasterSamples, rects, {\n skipAncestors: false,\n skipRoot: false\n });\n } else if (point.side === 'outside' || (receiverIndex < 0 && passiveTooltip)) {\n source = this.findVisualSource(stack, entry, point.x, point.y, visibility, rasterSamples, rects, {\n skipAncestors: true,\n skipRoot: true\n });\n source ??= this.findRasterSource(rasterSources, entry, point.x, point.y, visibility, rasterSamples, rects, stack, -1, undefined, targetBoundary);\n source ??= this.findVisualSource(stack, entry, point.x, point.y, visibility, rasterSamples, rects, {\n skipAncestors: false,\n skipRoot: true\n });\n source ??= this.findVisualSource(stack, entry, point.x, point.y, visibility, rasterSamples, rects, {\n skipAncestors: false,\n skipRoot: false\n });\n }\n\n if (!source || visibility.ambientBoundary(source.element) !== targetBoundary) return;\n const sourceRect = this.rectFor(source.element, rects);\n const gapX = Math.max(bounds.left - sourceRect.right, sourceRect.left - bounds.right, 0);\n const gapY = Math.max(bounds.top - sourceRect.bottom, sourceRect.top - bounds.bottom, 0);\n if (point.side === 'outside' && Math.hypot(gapX, gapY) > 160) return;\n if (source.element === entry.element || this.isInside(source.element, entry.element)) return;\n const edgeSources = sourcesByEdge.get(point.edge) ?? new Set<Element>();\n if (point.side === 'outside' && edgeSources.has(source.element)) return;\n const edgeColors = colorsByEdge.get(point.edge) ?? new Map<Element, Set<string>>();\n const sourceColors = edgeColors.get(source.element) ?? new Set<string>();\n if (point.side === 'outside' && sourceColors.has(source.color)) return;\n sourceColors.add(source.color);\n edgeColors.set(source.element, sourceColors);\n colorsByEdge.set(point.edge, edgeColors);\n if (point.side === 'inside') {\n edgeSources.add(source.element);\n sourcesByEdge.set(point.edge, edgeSources);\n }\n\n if (point.side === 'outside') {\n foreground = this.isAmbientForeground(source.element, entry.element, stack, -1, visibility);\n }\n const depth = foreground ? 24 : 52;\n const gap = Math.hypot(gapX, gapY);\n const edgeLength = point.edge % 2 === 0 ? bounds.width : bounds.height;\n lights.push({\n key: `environment:${entry.id}:${index}`,\n source: source.element.namespaceURI === 'http://www.w3.org/1999/xhtml' ? (source.element as HTMLElement) : undefined,\n ambient: true,\n x: point.x,\n y: point.y,\n z: depth,\n color: source.color,\n intensity: (point.side === 'inside' ? 0.38 : 0.48) * Math.pow(Math.max(0, 1 - gap / 160), 2),\n radius: 240,\n spread: Math.max(48, Math.min(240, edgeLength * 0.65))\n });\n });\n\n return lights;\n }\n\n private findVisualSource(\n elements: Element[],\n entry: AmbientReceiver,\n x: number,\n y: number,\n visibility: ReturnType<typeof lightingVisibility>,\n rasterSamples: Map<Element, ImageData | null>,\n rects: Map<Element, DOMRect>,\n options: { skipAncestors: boolean; skipRoot: boolean }\n ): VisualSource | undefined {\n for (const element of elements) {\n if (element === entry.element || this.isInside(element, entry.element)) continue;\n if (options.skipAncestors && this.isInside(entry.element, element)) continue;\n if (options.skipRoot && (element === this.doc.documentElement || element === this.doc.body)) continue;\n if (visibility.ambientBoundary(element) !== visibility.ambientBoundary(entry.element)) continue;\n const color = this.visualColorAt(element, x, y, visibility, rasterSamples, rects);\n if (color) return { element, color };\n }\n return undefined;\n }\n\n private findRasterSource(\n sources: Element[],\n entry: AmbientReceiver,\n x: number,\n y: number,\n visibility: ReturnType<typeof lightingVisibility>,\n rasterSamples: Map<Element, ImageData | null>,\n rects: Map<Element, DOMRect>,\n stack: Element[],\n receiverIndex: number,\n foreground: boolean | undefined,\n targetBoundary: HTMLElement\n ): VisualSource | undefined {\n const matches = sources\n .filter((element) => {\n if (this.isInside(element, entry.element) || visibility.ambientBoundary(element) !== targetBoundary) return false;\n const bounds = this.rectFor(element, rects);\n if (x < bounds.left || x >= bounds.right || y < bounds.top || y >= bounds.bottom) return false;\n return foreground === undefined || this.isAmbientForeground(element, entry.element, stack, receiverIndex, visibility) === foreground;\n })\n .sort((first, second) => this.rasterOrder(second, stack, entry.element, visibility) - this.rasterOrder(first, stack, entry.element, visibility));\n\n for (const element of matches) {\n const color = this.rasterColorAt(element, x, y, rasterSamples, rects, visibility);\n if (color) return { element, color };\n }\n return undefined;\n }\n\n private visualColorAt(\n element: Element,\n x: number,\n y: number,\n visibility: ReturnType<typeof lightingVisibility>,\n rasterSamples: Map<Element, ImageData | null>,\n rects: Map<Element, DOMRect>\n ): string | undefined {\n const raster = this.rasterColorAt(element, x, y, rasterSamples, rects, visibility);\n if (raster) return raster;\n const style = visibility.style(element);\n const gradient = this.gradientColorAt(style.backgroundImage, this.rectFor(element, rects), x, y);\n if (gradient) return gradient;\n if (!this.isTransparent(style.backgroundColor)) return style.backgroundColor;\n for (const side of ['top', 'right', 'bottom', 'left']) {\n const color = style.getPropertyValue(`border-${side}-color`);\n if (parseFloat(style.getPropertyValue(`border-${side}-width`)) > 0 && !this.isTransparent(color)) return color;\n }\n return undefined;\n }\n\n private rasterColorAt(\n element: Element,\n x: number,\n y: number,\n cache: Map<Element, ImageData | null>,\n rects: Map<Element, DOMRect>,\n visibility: ReturnType<typeof lightingVisibility>\n ): string | undefined {\n const tag = element.tagName;\n if (!/^(IMG|CANVAS|VIDEO)$/.test(tag)) return undefined;\n const bounds = this.rectFor(element, rects);\n if (bounds.width <= 0 || bounds.height <= 0) return undefined;\n const css = visibility.style(element);\n if (css.visibility !== 'visible' || Number(css.opacity) === 0) return undefined;\n this.dependencies?.add(element);\n let data = cache.get(element);\n if (data === undefined) {\n data = this.readRaster(element)?.data ?? null;\n cache.set(element, data);\n }\n if (!data) return undefined;\n\n let u = Math.max(0, Math.min(1, (x - bounds.left) / bounds.width));\n let v = Math.max(0, Math.min(1, (y - bounds.top) / bounds.height));\n if ((tag === 'IMG' || tag === 'VIDEO') && css.objectFit !== 'fill') {\n const width = tag === 'IMG' ? (element as HTMLImageElement).naturalWidth : (element as HTMLVideoElement).videoWidth;\n const height = tag === 'IMG' ? (element as HTMLImageElement).naturalHeight : (element as HTMLVideoElement).videoHeight;\n if (!width || !height) return undefined;\n const contain = Math.min(bounds.width / width, bounds.height / height);\n const scale =\n css.objectFit === 'cover'\n ? Math.max(bounds.width / width, bounds.height / height)\n : css.objectFit === 'none'\n ? 1\n : css.objectFit === 'scale-down'\n ? Math.min(1, contain)\n : contain;\n const [positionX = '50%', positionY = '50%'] = css.objectPosition.split(' ');\n const offset = (position: string, space: number) => {\n if (position.endsWith('%')) return (parseFloat(position) / 100) * space;\n if (position.endsWith('px')) return parseFloat(position);\n return position === 'left' || position === 'top' ? 0 : position === 'right' || position === 'bottom' ? space : space / 2;\n };\n u = (x - bounds.left - offset(positionX, bounds.width - width * scale)) / (width * scale);\n v = (y - bounds.top - offset(positionY, bounds.height - height * scale)) / (height * scale);\n // A letterbox is the element's CSS background, not a stretched image edge.\n if (u < 0 || u > 1 || v < 0 || v > 1) return undefined;\n }\n const px = Math.max(0, Math.min(data.width - 1, Math.floor(u * data.width)));\n const py = Math.max(0, Math.min(data.height - 1, Math.floor(v * data.height)));\n const offset = (py * data.width + px) * 4;\n const alpha = data.data[offset + 3] / 255;\n if (alpha < 0.08) return undefined;\n return `rgb(${data.data[offset]} ${data.data[offset + 1]} ${data.data[offset + 2]} / ${alpha.toFixed(2)})`;\n }\n\n private gradientColorAt(image: string, bounds: DOMRect, x: number, y: number): string | undefined {\n if (!image.includes('gradient(')) return undefined;\n const matches = image.match(\n /#[\\da-f]{3,8}\\b|(?:rgba?|hsla?|hwb|lab|lch|oklab|oklch|color)\\([^)]*\\)|\\b(?:transparent|black|white|red|green|blue|orange|yellow|purple|gray|grey|teal|cyan|magenta)\\b/gi\n );\n const colors = (matches ?? []).filter((color) => !this.isTransparent(color));\n if (!colors.length) return undefined;\n\n let amount = 0.5;\n if (image.includes('linear-gradient(')) {\n const prelude =\n image\n .match(/linear-gradient\\(\\s*([^,]+)/i)?.[1]\n ?.trim()\n .toLowerCase() ?? '';\n let dx = 0,\n dy = 1;\n const angle = prelude.match(/^(-?[\\d.]+)deg$/);\n if (angle) {\n const radians = (Number(angle[1]) * Math.PI) / 180;\n dx = Math.sin(radians);\n dy = -Math.cos(radians);\n } else if (prelude.startsWith('to ')) {\n dx = prelude.includes('right') ? 1 : prelude.includes('left') ? -1 : 0;\n dy = prelude.includes('bottom') ? 1 : prelude.includes('top') ? -1 : 0;\n }\n const range = Math.max(0.01, Math.abs(dx) + Math.abs(dy));\n const u = (x - bounds.left) / Math.max(1, bounds.width) - 0.5;\n const v = (y - bounds.top) / Math.max(1, bounds.height) - 0.5;\n amount = Math.max(0, Math.min(1, 0.5 + (u * dx + v * dy) / range));\n } else {\n const u = (x - (bounds.left + bounds.width / 2)) / Math.max(1, bounds.width / 2);\n const v = (y - (bounds.top + bounds.height / 2)) / Math.max(1, bounds.height / 2);\n amount = Math.max(0, Math.min(1, Math.hypot(u, v) / Math.SQRT2));\n }\n return colors[Math.min(colors.length - 1, Math.round(amount * (colors.length - 1)))];\n }\n\n private isTransparent(color: string): boolean {\n const value = color.trim().toLowerCase();\n if (!value || value === 'transparent') return true;\n const alpha = value.match(/\\/\\s*([\\d.]+)%?\\s*\\)$/) ?? (/^rgba\\(|^hsla\\(/.test(value) ? value.match(/,\\s*([\\d.]+)\\s*\\)$/) : null);\n return !!alpha && Number(alpha[1]) <= 0.02;\n }\n\n private isInside(element: Element, ancestor: Element): boolean {\n let current: Element | null = element;\n while (current) {\n if (current === ancestor) return true;\n const root = current.getRootNode() as ShadowRoot;\n current = current.parentElement ?? root.host ?? null;\n }\n return false;\n }\n\n private layerElement(element: Element, visibility: ReturnType<typeof lightingVisibility>): HTMLElement {\n let current: Element | null = element;\n while (current && current.namespaceURI !== 'http://www.w3.org/1999/xhtml') {\n const root = current.getRootNode() as ShadowRoot;\n current = current.parentElement ?? root.host ?? null;\n }\n return current ? visibility.layer(current as HTMLElement) : this.doc.documentElement;\n }\n\n private zIndex(element: HTMLElement, visibility: ReturnType<typeof lightingVisibility>): number {\n const value = Number.parseFloat(visibility.style(element).zIndex);\n return Number.isFinite(value) ? value : 0;\n }\n\n private isAmbientForeground(\n source: Element,\n receiver: HTMLElement,\n stack: Element[],\n receiverIndex: number,\n visibility: ReturnType<typeof lightingVisibility>\n ): boolean {\n const sourceIndex = stack.indexOf(source);\n if (sourceIndex >= 0 && receiverIndex >= 0) return sourceIndex < receiverIndex;\n const sourceLayer = this.layerElement(source, visibility);\n const receiverLayer = visibility.layer(receiver);\n const depth = this.zIndex(sourceLayer, visibility) - this.zIndex(receiverLayer, visibility);\n if (depth !== 0) return depth > 0;\n return !!(source.compareDocumentPosition(receiver) & 2);\n }\n\n private rasterOrder(element: Element, stack: Element[], receiver: HTMLElement, visibility: ReturnType<typeof lightingVisibility>): number {\n const index = stack.indexOf(element);\n if (index >= 0) return 10000 - index;\n return this.zIndex(this.layerElement(element, visibility), visibility) - this.zIndex(visibility.layer(receiver), visibility);\n }\n\n private rectFor(element: Element, rects: Map<Element, DOMRect>): DOMRect {\n let rect = rects.get(element);\n if (!rect) {\n rect = element.getBoundingClientRect();\n rects.set(element, rect);\n }\n return rect;\n }\n}\n","import { AmbientSampler } from './ambient';\nimport { configurationEvent } from './configuration';\nimport { finiteClamp } from './dom';\nimport { subscribeFrame } from './scheduler';\nimport { lightBoundarySelector, lightingOrigin, lightingVisibility } from './visibility';\nimport type { GlassLight, GlassReflector, GlassScene, GlassSceneOptions } from './types';\n\nexport interface LightContribution {\n key: string;\n x: number;\n y: number;\n color: string;\n strength: number;\n edgeStrength: number;\n ambient?: boolean;\n spread?: number;\n}\nexport interface Lighting {\n x: number;\n y: number;\n strength: number;\n color: string;\n rim: string;\n contributions: LightContribution[];\n reflection: string;\n reflectionStrength: number;\n reflectionX: number;\n reflectionY: number;\n}\ninterface SurfaceHooks {\n hitTarget?: HTMLElement;\n light(value: Lighting): void;\n interactive(): boolean;\n emission?(): string | undefined;\n focusEmission?(): string | undefined;\n emit?(active: boolean, color?: string): void;\n press(): void;\n release(): void;\n sync(): void;\n}\ninterface Entry {\n id: number;\n element: HTMLElement;\n hooks: SurfaceHooks;\n visible: boolean;\n bounds?: DOMRect;\n lastLighting?: Lighting;\n}\ninterface SceneEntry {\n id: number;\n root: HTMLElement;\n options: GlassSceneOptions;\n}\nexport interface PointLight {\n key: string;\n bounds?: DOMRect;\n source?: HTMLElement;\n ambient?: boolean;\n spread?: number;\n excludeSource?: boolean;\n excludeElement?: HTMLElement;\n x: number;\n y: number;\n z: number;\n color: string;\n intensity: number;\n radius: number;\n}\ninterface Reflection {\n source: HTMLElement;\n x: number;\n y: number;\n depth: number;\n color: string;\n intensity: number;\n radius: number;\n}\nconst runtimes = new WeakMap<Document, SceneRuntime>();\nconst activeStateSelector =\n ':checked, [aria-checked=\"true\"], [aria-pressed=\"true\"], [aria-selected=\"true\"], [aria-expanded=\"true\"], [aria-current]:not([aria-current=\"false\"]):not([aria-current=\"\"])';\nconst disabledSelector = ':disabled, [aria-disabled=\"true\"], .is-disabled, [inert]';\n\nfunction runtimeFor(doc: Document): SceneRuntime {\n let runtime = runtimes.get(doc);\n if (!runtime) {\n runtime = new SceneRuntime(doc);\n runtimes.set(doc, runtime);\n }\n return runtime;\n}\n\n/** One delegated pointer stream and visibility observer per document, never per control. */\nexport function registerSurface(element: HTMLElement, hooks: SurfaceHooks): () => void {\n return runtimeFor(element.ownerDocument).register(element, hooks);\n}\n\n/** Receive scene lighting for a native pseudo-element without inserting decoration into its host. */\nexport function observeGlassLighting(element: HTMLElement, light: (value: Lighting) => void, hitTarget: HTMLElement = element): () => void {\n return registerSurface(element, { light, hitTarget, interactive: () => false, press() {}, release() {}, sync() {} });\n}\n\n/** Invalidate a receiver after an application changes its geometry. */\nexport function refreshGlassLighting(element: HTMLElement): void {\n runtimeFor(element.ownerDocument).refreshElement(element);\n}\n\n/** Light fields are explicit; surfaces also sample nearby visual sources for ambient edge color. */\nexport function mountGlassScene(root: HTMLElement, options: GlassSceneOptions = {}): GlassScene {\n return runtimeFor(root.ownerDocument).scene(root, options);\n}\n\nclass SceneRuntime {\n private entries = new Map<HTMLElement, Entry>();\n private scenes = new Set<SceneEntry>();\n private observer?: IntersectionObserver;\n private stateObserver?: MutationObserver;\n private selected = new Set<Entry>();\n private pressed?: Entry;\n private hovered?: Entry;\n private focused?: Entry;\n private focusedTarget?: Element;\n private emitting = new Map<Entry, string>();\n private nextId = 0;\n private lightIds = new WeakMap<HTMLElement, number>();\n private queue = new Set<Entry>();\n private stopFrame?: () => void;\n private connected = false;\n private motion: MediaQueryList;\n private transparency: MediaQueryList;\n private view: Window;\n private ambient: AmbientSampler;\n private renderedStyles = new WeakMap<HTMLElement, string | null>();\n private assetLoad = (event: Event) => {\n const target = event.target as Element | null;\n if (target && /^(IMG|VIDEO)$/.test(target.tagName)) this.ambient.assetChanged(target);\n };\n\n private visibilityChange = () => {\n if (!this.doc.hidden) this.refresh();\n this.ambient.resume();\n };\n\n private down = (event: PointerEvent) => {\n this.pressed = this.find(event);\n this.pressed?.hooks.press();\n this.updateEmitter();\n };\n\n private up = () => {\n this.pressed?.hooks.release();\n this.pressed = undefined;\n this.updateEmitter();\n };\n\n private leave = () => {\n this.up();\n this.hovered = undefined;\n this.updateEmitter();\n };\n\n private blur = () => {\n this.up();\n this.hovered = this.focused = undefined;\n this.focusedTarget = undefined;\n this.updateEmitter();\n };\n\n private over = (event: Event) => {\n const found = this.find(event);\n const next = found?.hooks.emission?.() ? found : undefined;\n if (next !== this.hovered) {\n this.hovered = next;\n this.updateEmitter();\n }\n };\n\n private out = (event: PointerEvent) => {\n const target = this.hovered?.element.closest('label') ?? this.hovered?.element;\n if (target && !target.contains(event.relatedTarget as Node | null)) {\n this.hovered = undefined;\n this.updateEmitter();\n }\n };\n\n private focus = (event: Event) => {\n const target = event.target as Element;\n const visual = target.matches('input[type=\"checkbox\"], input[type=\"radio\"]')\n ? target.closest('label')?.querySelector<HTMLElement>('[data-bx-surface]')\n : undefined;\n this.focused = visual ? this.entries.get(visual) : this.find(event);\n this.focusedTarget = target;\n this.updateEmitter();\n };\n\n private unfocus = () => {\n this.focused = undefined;\n this.focusedTarget = undefined;\n this.updateEmitter();\n };\n\n private change = () => {\n for (const entry of this.entries.values()) this.updateSelected(entry);\n this.updateEmitter();\n };\n\n private sync = () => {\n for (const entry of this.entries.values()) {\n entry.hooks.sync();\n this.updateSelected(entry);\n }\n this.updateEmitter();\n this.refresh();\n };\n\n private refresh = () => {\n this.ambient.invalidate();\n for (const entry of this.entries.values()) {\n entry.bounds = undefined;\n entry.lastLighting = undefined;\n if (entry.visible) this.queue.add(entry);\n }\n this.schedule();\n };\n\n constructor(private doc: Document) {\n const view = doc.defaultView;\n if (!view) throw new Error('Glass scenes require a browser document.');\n this.view = view;\n this.ambient = new AmbientSampler(\n doc,\n view,\n (entry) => {\n if (this.entries.get(entry.element) !== entry) return;\n this.queue.add(entry as Entry);\n this.schedule();\n },\n (root) => this.observeState(root)\n );\n this.motion = view.matchMedia('(prefers-reduced-motion: reduce)');\n this.transparency = view.matchMedia('(prefers-reduced-transparency: reduce)');\n if (typeof view.IntersectionObserver === 'function')\n this.observer = new view.IntersectionObserver(\n (records) => {\n for (const record of records) {\n const entry = this.entries.get(record.target as HTMLElement);\n if (!entry) continue;\n entry.visible = record.isIntersecting;\n this.ambient.invalidate(entry);\n if (entry.visible) {\n entry.bounds = undefined;\n entry.lastLighting = undefined;\n this.queue.add(entry);\n }\n }\n this.schedule();\n },\n { rootMargin: '64px' }\n );\n // Watch semantic and visual source changes once per document. Lighting's\n // own decoration writes are excluded so sampling cannot trigger a loop.\n if (typeof view.MutationObserver === 'function')\n this.stateObserver = new view.MutationObserver((records) => {\n const changed = new Set<Entry>();\n let visualChanged = false;\n for (const record of records) {\n if (record.type === 'childList') {\n if (record.target.nodeType === 1 && this.isLightingDecoration(record.target)) continue;\n if ([...record.addedNodes, ...record.removedNodes].some((node) => !this.isLightingDecoration(node))) {\n visualChanged = true;\n this.ambient.sourcesChanged(record);\n }\n continue;\n }\n const target = record.target as HTMLElement;\n if (record.attributeName === 'style' && this.renderedStyles.get(target) === target.getAttribute('style')) continue;\n if (record.attributeName === 'class') {\n const entry = this.entries.get(target);\n if (entry) changed.add(entry);\n }\n if (\n record.attributeName === 'class' ||\n record.attributeName === 'style' ||\n record.attributeName === 'hidden' ||\n /^(role|data-bx-light-scope|data-bx-surface|data-bx-reduced-transparency|data-bx-reduced-motion|src|srcset|width|height)$/.test(\n record.attributeName ?? ''\n )\n ) {\n if (!this.isLightingDecoration(target)) {\n visualChanged = true;\n if (/^(src|srcset|width|height)$/.test(record.attributeName ?? '')) this.ambient.assetChanged(target);\n }\n continue;\n }\n const visual = target.matches('input[type=\"checkbox\"], input[type=\"radio\"]')\n ? target.closest('label')?.querySelector<HTMLElement>('[data-bx-surface]')\n : undefined;\n const entry = this.entries.get(target) ?? (visual ? this.entries.get(visual) : undefined);\n if (entry) changed.add(entry);\n if (record.attributeName === 'data-bx-field-invalid') {\n for (const surface of target.querySelectorAll<HTMLElement>('[data-bx-surface]')) {\n const child = this.entries.get(surface);\n if (child) changed.add(child);\n }\n }\n }\n if (visualChanged) {\n for (const entry of this.entries.values()) {\n entry.bounds = undefined;\n entry.lastLighting = undefined;\n }\n this.ambient.invalidate();\n }\n if (!changed.size && !visualChanged) return;\n for (const entry of changed) this.updateSelected(entry);\n this.updateEmitter();\n });\n }\n\n public register(element: HTMLElement, hooks: SurfaceHooks): () => void {\n this.connect();\n const entry: Entry = { id: this.nextId++, element, hooks, visible: true };\n const overlay = lightingVisibility(this.doc, this.view).boundary(element) !== this.doc.documentElement;\n this.entries.set(element, entry);\n this.ambient.add(entry);\n this.observer?.observe(element);\n this.updateSelected(entry);\n this.updateEmitter();\n this.queue.add(entry);\n this.schedule();\n // New overlays can cover receivers which already have highlights. Re-evaluate those as well.\n if (overlay) this.refresh();\n return () => {\n this.observer?.unobserve(element);\n this.entries.delete(element);\n this.ambient.remove(entry);\n this.queue.delete(entry);\n this.selected.delete(entry);\n if (this.pressed === entry) this.pressed = undefined;\n if (this.hovered === entry || this.focused === entry || this.emitting.has(entry)) {\n if (this.hovered === entry) this.hovered = undefined;\n if (this.focused === entry) this.focused = undefined;\n this.updateEmitter();\n }\n if (overlay) this.refresh();\n this.disconnectIfEmpty();\n };\n }\n\n public refreshElement(element: HTMLElement): void {\n const entry = this.entries.get(element);\n if (entry) this.updateSelected(entry);\n this.updateEmitter();\n if (entry) {\n this.ambient.invalidate(entry);\n entry.bounds = undefined;\n entry.lastLighting = undefined;\n this.queue.add(entry);\n this.schedule();\n }\n }\n\n public scene(root: HTMLElement, options: GlassSceneOptions): GlassScene {\n this.connect();\n const entry = { id: this.nextId++, root, options };\n this.scenes.add(entry);\n this.refreshRoot(root);\n let disposed = false;\n return {\n update: (next) => {\n if (!disposed) {\n entry.options = next;\n this.refreshRoot(root, next.reuseGeometry !== true);\n }\n },\n refresh: () => {\n if (!disposed) {\n this.ambient.invalidate();\n this.refreshRoot(root);\n }\n },\n destroy: () => {\n if (disposed) return;\n disposed = true;\n this.scenes.delete(entry);\n this.refreshRoot(root);\n this.disconnectIfEmpty();\n }\n };\n }\n\n private isLightingDecoration(node: Node): boolean {\n if (node.nodeType !== node.ELEMENT_NODE) return true;\n const element = node as Element;\n return element.matches('.bx-glass-decoration, .bx-glass-rim') || !!element.closest('.bx-glass-decoration, .bx-glass-rim');\n }\n\n private find(event: Event): Entry | undefined {\n for (const node of event.composedPath()) {\n const found = this.entries.get(node as HTMLElement);\n if (!found) continue;\n if (found.element.closest(disabledSelector)) return undefined;\n // A decorative surface inside a button/link is still part of that action.\n if (found.hooks.interactive()) return found;\n }\n const target = event.target as Element;\n const label = target.closest('label');\n const visual = label?.control?.matches('input[type=\"checkbox\"], input[type=\"radio\"]') ? label.querySelector<HTMLElement>('[data-bx-surface]') : undefined;\n const found = visual ? this.entries.get(visual) : undefined;\n if (found && !found.element.closest(disabledSelector) && !label?.control?.matches(disabledSelector) && found.hooks.interactive()) return found;\n return undefined;\n }\n\n private scope(element: HTMLElement): HTMLElement {\n return lightingOrigin(element).closest<HTMLElement>(`${lightBoundarySelector}, main, aside, nav`) ?? this.doc.body;\n }\n\n private updateEmitter(): void {\n const next = new Map<Entry, string>();\n const enabled = (entry: Entry) =>\n entry.hooks.interactive() && !entry.element.closest(disabledSelector) && !entry.element.closest('label')?.control?.matches(disabledSelector);\n for (const entry of [...this.selected, this.hovered, this.pressed]) {\n const color = entry && enabled(entry) ? entry.hooks.emission?.() : undefined;\n if (entry && color) next.set(entry, color);\n }\n const focusColor = this.focused?.hooks.focusEmission?.() ?? (this.focusedTarget?.matches(':focus-visible') ? this.focused?.hooks.emission?.() : undefined);\n if (this.focused && enabled(this.focused) && focusColor) next.set(this.focused, focusColor);\n const previous = this.emitting;\n if (previous.size === next.size && [...next].every(([entry, color]) => previous.get(entry) === color)) return;\n for (const entry of previous.keys()) if (!next.has(entry)) entry.hooks.emit?.(false);\n this.emitting = next;\n for (const [entry, color] of next) entry.hooks.emit?.(true, color);\n const sources = [...new Set([...previous.keys(), ...next.keys()])];\n for (const entry of this.entries.values()) {\n if (!entry.visible) continue;\n const affected = sources.some((source) => this.scope(source.element) === this.scope(entry.element));\n // A panel may have finished its opening animation since its surfaces were registered.\n if (affected) {\n entry.bounds = undefined;\n entry.lastLighting = undefined;\n this.queue.add(entry);\n }\n }\n this.schedule();\n }\n\n private updateSelected(entry: Entry): void {\n const control = entry.element.closest('label')?.control;\n const checked = control?.matches('input[type=\"checkbox\"]:checked, input[type=\"radio\"]:checked');\n if (entry.hooks.emission?.() && (entry.element.matches(activeStateSelector) || checked)) this.selected.add(entry);\n else this.selected.delete(entry);\n }\n\n private refreshRoot(root: HTMLElement, measure = true): void {\n for (const entry of this.entries.values()) {\n if (!root.contains(lightingOrigin(entry.element))) continue;\n if (measure) {\n entry.bounds = undefined;\n entry.lastLighting = undefined;\n }\n if (entry.visible) this.queue.add(entry);\n }\n this.schedule();\n }\n\n private observeState(root: Node): void {\n this.stateObserver?.observe(root, {\n subtree: true,\n attributes: true,\n childList: true,\n attributeFilter: [\n 'aria-pressed',\n 'aria-checked',\n 'checked',\n 'aria-selected',\n 'aria-expanded',\n 'aria-current',\n 'disabled',\n 'aria-disabled',\n 'aria-invalid',\n 'data-bx-field-invalid',\n 'class',\n 'style',\n 'hidden',\n 'role',\n 'data-bx-light-scope',\n 'data-bx-surface',\n 'data-bx-reduced-transparency',\n 'data-bx-reduced-motion',\n 'src',\n 'srcset',\n 'width',\n 'height'\n ]\n });\n }\n\n private connect(): void {\n if (this.connected) return;\n this.connected = true;\n this.observeState(this.doc.documentElement);\n this.doc.addEventListener('pointerdown', this.down, { passive: true });\n this.doc.addEventListener('pointerover', this.over, { passive: true });\n this.doc.addEventListener('pointerout', this.out, { passive: true });\n this.doc.addEventListener('focusin', this.focus);\n this.doc.addEventListener('focusout', this.unfocus);\n this.doc.addEventListener('change', this.change);\n this.view.addEventListener('pointerup', this.up, { passive: true });\n this.view.addEventListener('pointercancel', this.up, { passive: true });\n this.doc.addEventListener('pointerleave', this.leave, { passive: true });\n this.view.addEventListener('blur', this.blur);\n this.view.addEventListener('resize', this.refresh, { passive: true });\n this.doc.addEventListener('scroll', this.refresh, { passive: true, capture: true });\n this.doc.addEventListener('load', this.assetLoad, true);\n this.doc.addEventListener('loadeddata', this.assetLoad, true);\n this.doc.addEventListener('play', this.assetLoad, true);\n this.doc.addEventListener('pause', this.assetLoad, true);\n this.doc.addEventListener('seeked', this.assetLoad, true);\n this.doc.addEventListener('visibilitychange', this.visibilityChange);\n this.doc.addEventListener(configurationEvent, this.sync);\n this.motion.addEventListener('change', this.sync);\n this.transparency.addEventListener('change', this.sync);\n }\n\n private disconnectIfEmpty(): void {\n if (this.entries.size || this.scenes.size) return;\n this.ambient.destroy();\n this.stopFrame?.();\n this.stopFrame = undefined;\n this.queue.clear();\n this.observer?.disconnect();\n this.connected = false;\n this.stateObserver?.disconnect();\n this.selected.clear();\n this.doc.removeEventListener('pointerdown', this.down);\n this.doc.removeEventListener('pointerover', this.over);\n this.doc.removeEventListener('pointerout', this.out);\n this.doc.removeEventListener('focusin', this.focus);\n this.doc.removeEventListener('focusout', this.unfocus);\n this.doc.removeEventListener('change', this.change);\n this.view.removeEventListener('pointerup', this.up);\n this.view.removeEventListener('pointercancel', this.up);\n this.doc.removeEventListener('pointerleave', this.leave);\n this.view.removeEventListener('blur', this.blur);\n this.view.removeEventListener('resize', this.refresh);\n this.doc.removeEventListener('scroll', this.refresh, true);\n this.doc.removeEventListener('load', this.assetLoad, true);\n this.doc.removeEventListener('loadeddata', this.assetLoad, true);\n this.doc.removeEventListener('play', this.assetLoad, true);\n this.doc.removeEventListener('pause', this.assetLoad, true);\n this.doc.removeEventListener('seeked', this.assetLoad, true);\n this.doc.removeEventListener('visibilitychange', this.visibilityChange);\n this.doc.removeEventListener(configurationEvent, this.sync);\n this.motion.removeEventListener('change', this.sync);\n this.transparency.removeEventListener('change', this.sync);\n }\n\n private schedule(): void {\n if (this.stopFrame || !this.queue.size) return;\n this.stopFrame = subscribeFrame(() => {\n // Bound lighting work when hundreds of components become visible or a global setting changes.\n const batch = Array.from(this.queue).slice(0, 24);\n const visibility = lightingVisibility(this.doc, this.view);\n const emissions = [...this.emitting].map(([emitter, color]) => {\n const bounds = emitter.element.getBoundingClientRect();\n const exposed =\n visibility.exposed(emitter.element, bounds.x + bounds.width / 2, bounds.y + bounds.height / 2, bounds) && !emitter.element.closest(disabledSelector);\n return { emitter, color, exposed };\n });\n const activeLights = emissions\n .filter((source) => source.exposed)\n .map(({ emitter, color }) => ({\n emitter,\n light: this.lightPoint({ element: emitter.element, color, excludeSource: true, z: 24, intensity: 0.85, radius: 120 }, `hover:${emitter.id}`, true)\n }));\n const sceneData = new Map<SceneEntry, { lights: PointLight[]; reflections: Reflection[] }>();\n // Read only scenes used by this batch; avoid measuring offscreen or unrelated objects.\n const projections = batch\n .filter((entry) => entry.visible && entry.element.isConnected)\n .map((entry) => {\n entry.bounds ??= entry.element.getBoundingClientRect();\n const origin = lightingOrigin(entry.element) as HTMLElement;\n let nearest: SceneEntry | undefined;\n for (const candidate of this.scenes) if (candidate.root.contains(origin) && (!nearest || nearest.root.contains(candidate.root))) nearest = candidate;\n if (nearest && !sceneData.has(nearest)) {\n const scene = nearest;\n sceneData.set(scene, {\n lights: (scene.options.lights ?? []).slice(0, 4).map((light, index) => this.lightPoint(light, `${scene.id}:${index}`)),\n reflections: (scene.options.reflectors ?? []).slice(0, 4).map((reflection) => this.reflectionPoint(reflection))\n });\n }\n const data = nearest ? sceneData.get(nearest) : undefined;\n const sceneRoot = nearest?.root ?? entry.element;\n // Explicit scene lights and an active semantic element share the same spatial model.\n const boundary = visibility.boundary(entry.element);\n const lights = (data?.lights ?? []).filter((light) => visibility.boundary(light.source ?? sceneRoot) === boundary);\n for (const { emitter, light } of activeLights) {\n if (\n this.scope(emitter.element) === this.scope(entry.element) &&\n visibility.layer(lightingOrigin(emitter.element) as HTMLElement) === visibility.layer(origin) &&\n !emitter.element.contains(entry.element) &&\n (!entry.element.contains(emitter.element) || entry.element.matches('[role=\"menu\"]'))\n )\n lights.push(light);\n }\n lights.push(...this.ambient.lights(entry));\n const reflections = (data?.reflections ?? []).filter((reflection) => visibility.boundary(reflection.source) === boundary);\n return [entry, this.project(entry, lights, reflections, visibility)] as const;\n });\n for (const entry of batch) this.queue.delete(entry);\n for (const { emitter, color, exposed } of emissions) emitter.hooks.emit?.(exposed, color);\n for (const [entry, lighting] of projections) {\n if (this.sameLighting(entry.lastLighting, lighting)) continue;\n entry.lastLighting = lighting;\n const before = entry.element.getAttribute('style');\n entry.hooks.light(lighting);\n const after = entry.element.getAttribute('style');\n // Native receivers (e.g. the slider thumb) paint on their host, not a decoration child.\n if (before !== after) this.renderedStyles.set(entry.element, after);\n }\n if (!this.queue.size) this.stopFrame = undefined;\n return this.queue.size > 0;\n });\n }\n\n private sameLighting(previous: Lighting | undefined, next: Lighting): boolean {\n if (\n !previous ||\n previous.x !== next.x ||\n previous.y !== next.y ||\n previous.color !== next.color ||\n previous.strength !== next.strength ||\n previous.rim !== next.rim ||\n previous.reflection !== next.reflection ||\n previous.reflectionStrength !== next.reflectionStrength ||\n previous.reflectionX !== next.reflectionX ||\n previous.reflectionY !== next.reflectionY ||\n previous.contributions.length !== next.contributions.length\n )\n return false;\n return previous.contributions.every((light, index) => {\n const other = next.contributions[index];\n return (\n light.key === other.key &&\n light.x === other.x &&\n light.y === other.y &&\n light.color === other.color &&\n light.strength === other.strength &&\n light.edgeStrength === other.edgeStrength &&\n light.ambient === other.ambient &&\n light.spread === other.spread\n );\n });\n }\n\n private lightPoint(light: GlassLight, key: string, border = false): PointLight {\n const rect = light.element?.getBoundingClientRect();\n if (light.element && !border) {\n if (!this.lightIds.has(light.element)) this.lightIds.set(light.element, this.nextId++);\n key = `scene:${this.lightIds.get(light.element)}`;\n }\n return {\n key,\n bounds: rect && light.edge === 'bottom' ? new DOMRect(rect.left, rect.bottom, rect.width, 0) : border ? rect : undefined,\n source: light.element,\n excludeSource: light.excludeSource,\n excludeElement: light.excludeElement,\n x: rect ? rect.left + rect.width * finiteClamp(light.offsetX, 0, 1, 0.5) : finiteClamp(light.x, -1e6, 1e6, this.view.innerWidth * 0.25),\n y: rect ? rect.top + rect.height * finiteClamp(light.offsetY, 0, 1, 0.5) : finiteClamp(light.y, -1e6, 1e6, 0),\n z: finiteClamp(light.z, 1, 4000, 180),\n color: light.color ?? 'var(--bx-text-inverse, Canvas)',\n intensity: finiteClamp(light.intensity, 0, 4, 1),\n radius: finiteClamp(light.radius, 1, 4000, 640)\n };\n }\n\n private reflectionPoint(reflector: GlassReflector): Reflection {\n const rect = reflector.element.getBoundingClientRect();\n return {\n source: reflector.element,\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2,\n depth: finiteClamp(reflector.depth, -2000, 2000, 80),\n color: reflector.color ?? this.view.getComputedStyle(reflector.element).backgroundColor,\n intensity: finiteClamp(reflector.intensity, 0, 1, 0.28),\n radius: Math.max(rect.width, rect.height, 160)\n };\n }\n\n private project(entry: Entry, lights: PointLight[], reflectors: Reflection[], visibility: ReturnType<typeof lightingVisibility>): Lighting {\n const b = (entry.bounds ??= entry.element.getBoundingClientRect());\n const cx = b.left + b.width / 2,\n cy = b.top + b.height / 2;\n let x = 25,\n y = 0,\n strength = 0.04,\n color = 'white';\n let strongest = 0,\n weightedX = 0,\n weightedY = 0,\n totalWeight = 0;\n const rims: string[] = [];\n const contributions: LightContribution[] = [];\n for (const light of lights) {\n if ((light.excludeSource && light.source === entry.element) || light.excludeElement === entry.element) continue;\n // Semantic borders emit from their closest edge, so large buttons still have a short reach.\n const lx = light.bounds ? Math.max(light.bounds.left, Math.min(cx, light.bounds.right)) : light.x;\n const ly = light.bounds ? Math.max(light.bounds.top, Math.min(cy, light.bounds.bottom)) : light.y;\n const dx = lx - cx,\n dy = ly - cy;\n const distance = Math.hypot(dx, dy, light.z);\n const weight = light.intensity * Math.pow(Math.max(0, 1 - distance / light.radius), 2) * (light.z / distance);\n // Project actual viewport coordinates into this surface, without a perspective speed-up.\n const localX = Math.max(0, Math.min(100, ((lx - b.left) / Math.max(1, b.width)) * 100));\n const localY = Math.max(0, Math.min(100, ((ly - b.top) / Math.max(1, b.height)) * 100));\n const edgeDistance = Math.hypot(Math.max(b.left - lx, 0, lx - b.right), Math.max(b.top - ly, 0, ly - b.bottom), light.z);\n const edgeWeight = Math.min(0.85, light.intensity * Math.pow(Math.max(0, 1 - edgeDistance / light.radius), 2));\n if (edgeWeight <= 0.01 && weight <= 0.001) continue;\n if (!light.ambient && !visibility.exposed(entry.hooks.hitTarget ?? entry.element, lx, ly, b)) continue;\n if (!light.ambient && light.source) {\n const source = light.source.closest<HTMLElement>('[data-bx-surface]') ?? light.source;\n if (!visibility.exposed(source, lx, ly, source.getBoundingClientRect())) continue;\n }\n if (edgeWeight > 0.01)\n rims.push(\n `radial-gradient(${light.spread ? `circle ${light.spread}px` : 'ellipse farthest-side'} at ${localX.toFixed(2)}% ${localY.toFixed(2)}%, color-mix(in srgb, ${light.color} ${(edgeWeight * 100).toFixed(2)}%, transparent), transparent 75%)`\n );\n if (edgeWeight > 0.01 || weight > 0.001)\n contributions.push({\n key: light.key,\n x: localX,\n y: localY,\n color: light.color,\n strength: light.ambient ? 0 : Math.min(0.25, weight * 0.4),\n edgeStrength: edgeWeight,\n ambient: light.ambient,\n spread: light.spread\n });\n if (!light.ambient) {\n weightedX += localX * weight;\n weightedY += localY * weight;\n totalWeight += weight;\n if (weight > strongest) {\n strongest = weight;\n color = light.color;\n }\n }\n }\n if (totalWeight > 0.001) {\n x = weightedX / totalWeight;\n y = weightedY / totalWeight;\n strength = Math.min(0.4, 0.04 + totalWeight * 0.4);\n }\n let reflectionStrength = 0,\n reflection = 'transparent',\n reflectionX = 50,\n reflectionY = 50;\n for (const reflector of reflectors) {\n if (!visibility.exposed(entry.hooks.hitTarget ?? entry.element, reflector.x, reflector.y, b)) continue;\n const distance = Math.hypot(reflector.x - cx, reflector.y - cy, reflector.depth);\n const weight = reflector.intensity * Math.max(0, 1 - distance / (reflector.radius * 2));\n if (weight > reflectionStrength) {\n reflectionStrength = weight;\n reflection = reflector.color;\n // Signed depth gives background and foreground proxies opposite parallax around the surface normal.\n const direction = reflector.depth < 0 ? 1 : -1;\n const perspective = Math.max(80, Math.abs(reflector.depth) + reflector.radius * 0.5);\n reflectionX = Math.max(0, Math.min(100, 50 + ((reflector.x - cx) / perspective) * 45 * direction));\n reflectionY = Math.max(0, Math.min(100, 50 + ((reflector.y - cy) / perspective) * 45 * direction));\n }\n }\n return { x, y, strength, color, rim: rims.join(', ') || 'none', contributions, reflection, reflectionStrength, reflectionX, reflectionY };\n }\n}\n","/** A scalar spring whose target can change without resetting its velocity. */\nexport interface SpringOptions {\n stiffness?: number;\n damping?: number;\n mass?: number;\n}\n\nexport class Spring {\n private readonly stiffness: number;\n private readonly damping: number;\n private readonly mass: number;\n public value: number;\n\n public velocity = 0;\n\n public target: number;\n\n constructor(value = 0, options: SpringOptions = {}) {\n if (!Number.isFinite(value)) throw new RangeError('Spring value must be finite.');\n this.value = this.target = value;\n this.stiffness = options.stiffness ?? 380;\n this.damping = options.damping ?? 32;\n this.mass = options.mass ?? 1;\n if (\n !Number.isFinite(this.stiffness) ||\n this.stiffness <= 0 ||\n !Number.isFinite(this.damping) ||\n this.damping < 0 ||\n !Number.isFinite(this.mass) ||\n this.mass <= 0\n ) {\n throw new RangeError('Spring stiffness and mass must be positive; damping must be nonnegative.');\n }\n }\n\n /** Advances the exact damped harmonic solution. Returns true while moving. */\n public step(deltaSeconds: number): boolean {\n if (!Number.isFinite(this.target)) throw new RangeError('Spring target must be finite.');\n if (!Number.isFinite(deltaSeconds) || deltaSeconds < 0) {\n throw new RangeError('Spring delta must be finite and nonnegative.');\n }\n const displacement = this.value - this.target;\n if (Math.abs(displacement) < 0.001 && Math.abs(this.velocity) < 0.001) {\n this.snap(this.target);\n return false;\n }\n if (deltaSeconds === 0) return true;\n\n const decay = this.damping / (2 * this.mass);\n const frequencySquared = this.stiffness / this.mass;\n const discriminant = decay * decay - frequencySquared;\n const velocity = this.velocity;\n const time = deltaSeconds;\n let nextDisplacement: number;\n let nextVelocity: number;\n\n if (Math.abs(discriminant) < 0.000001 * frequencySquared) {\n const coefficient = velocity + decay * displacement;\n const exponential = Math.exp(-decay * time);\n nextDisplacement = exponential * (displacement + coefficient * time);\n nextVelocity = exponential * (velocity - decay * coefficient * time);\n } else if (discriminant < 0) {\n const frequency = Math.sqrt(-discriminant);\n const coefficient = (velocity + decay * displacement) / frequency;\n const exponential = Math.exp(-decay * time);\n const cosine = Math.cos(frequency * time);\n const sine = Math.sin(frequency * time);\n nextDisplacement = exponential * (displacement * cosine + coefficient * sine);\n nextVelocity = exponential * ((coefficient * frequency - decay * displacement) * cosine - (displacement * frequency + decay * coefficient) * sine);\n } else {\n const root = Math.sqrt(discriminant);\n const firstRoot = -decay + root;\n const secondRoot = -decay - root;\n const first = (velocity - secondRoot * displacement) / (firstRoot - secondRoot);\n const second = displacement - first;\n const firstTerm = first * Math.exp(firstRoot * time);\n const secondTerm = second * Math.exp(secondRoot * time);\n nextDisplacement = firstTerm + secondTerm;\n nextVelocity = firstRoot * firstTerm + secondRoot * secondTerm;\n }\n this.value = this.target + nextDisplacement;\n this.velocity = nextVelocity;\n if (Math.abs(nextDisplacement) < 0.001 && Math.abs(nextVelocity) < 0.001) {\n this.snap(this.target);\n return false;\n }\n return true;\n }\n\n public snap(value: number): void {\n if (!Number.isFinite(value)) throw new RangeError('Spring value must be finite.');\n this.value = this.target = value;\n this.velocity = 0;\n }\n}\n","import { rememberAttributes, rememberStyles, finiteClamp } from './dom';\nimport { inheritedAttribute } from './configuration';\nimport { registerSurface, refreshGlassLighting } from './scene';\nimport type { Lighting, LightContribution } from './scene';\nimport { subscribeFrame } from './scheduler';\nimport { Spring } from './spring';\nimport type { GlassSurface, SurfaceOptions } from './types';\n\nconst mounted = new WeakMap<HTMLElement, GlassSurface>();\n\n/** Structural surfaces receive light; controls and actionable surfaces also emit it. */\nfunction isActionSurface(element: HTMLElement): boolean {\n if (\n element.matches(\n 'button, bx-button, [bx-button], a[href], summary, input:not([type=\"hidden\"]), select, textarea, [role=\"button\"], [role=\"link\"], [role=\"checkbox\"], [role=\"radio\"], [role=\"switch\"], [role=\"tab\"], [role=\"menuitem\"], [role=\"combobox\"], [role=\"textbox\"], [role=\"searchbox\"], [role=\"slider\"], [role=\"spinbutton\"], [onclick]'\n ) ||\n typeof element.onclick === 'function'\n )\n return true;\n // Checkbox/radio/switch visuals share a label with their native control.\n if (element.closest('label')?.control) return true;\n // Only a semantic field may infer interactivity from its input. A panel\n // containing one control is still a passive surface, including slider panels.\n if (!element.closest('bx-form-field')) return false;\n const controls = element.querySelectorAll('input:not([type=\"hidden\"]), select, textarea');\n return controls.length === 1 && controls[0].closest('[data-bx-surface]') === element;\n}\n\n/** Enhance a native DOM element. Omitted options inherit configureAppearance() and Blocks theme tokens. */\nexport function mountSurface(element: HTMLElement, initial: SurfaceOptions = {}): GlassSurface {\n if (mounted.has(element)) throw new Error('A glass surface is already mounted on this element.');\n const doc = element.ownerDocument;\n const view = doc.defaultView;\n if (!view) throw new Error('Glass surfaces must be mounted in a browser document.');\n const ownProperties = [\n 'position',\n '--bx-glassiness',\n '--bx-glass-lit-edge',\n '--bx-glass-lit-edge-top',\n '--bx-glass-lit-edge-right',\n '--bx-glass-lit-edge-bottom',\n '--bx-glass-lit-edge-left'\n ];\n const restoreStyles = rememberStyles(element, ownProperties);\n const attributes = ['data-bx-surface', 'data-bx-reduced-transparency', 'data-bx-reduced-motion', 'data-bx-glass-renderer'];\n const originalAttributes = new Map(attributes.map((name) => [name, element.getAttribute(name)]));\n const restoreAttributes = rememberAttributes(element, attributes);\n const originals = new Map(\n ownProperties.map((property) => [\n property,\n {\n value: element.style.getPropertyValue(property),\n priority: element.style.getPropertyPriority(property)\n }\n ])\n );\n\n const decoration = doc.createElement('span');\n decoration.className = 'bx-glass-decoration';\n decoration.setAttribute('aria-hidden', 'true');\n\n const light = doc.createElement('span');\n light.className = 'bx-glass-light';\n\n const rim = doc.createElement('span');\n rim.className = 'bx-glass-rim';\n rim.setAttribute('aria-hidden', 'true');\n element.append(rim);\n\n const environment = [doc.createElement('span'), doc.createElement('span')];\n for (const node of environment) {\n node.className = 'bx-glass-contribution bx-glass-environment';\n node.style.opacity = '0';\n rim.append(node);\n }\n let environmentImage = 'none';\n let environmentIndex = 0;\n\n const ambient = doc.createElement('span');\n ambient.className = 'bx-glass-ambient';\n decoration.append(light);\n element.append(decoration);\n decoration.append(ambient);\n\n const motion = view.matchMedia('(prefers-reduced-motion: reduce)');\n const transparency = view.matchMedia('(prefers-reduced-transparency: reduce)');\n\n let options = { ...initial };\n let disposed = false;\n let unsubscribe: (() => void) | undefined;\n let reducedMotion = false;\n let unifiedLighting = false;\n\n const interactive = () => options.interactive ?? isActionSurface(element);\n let emitting = false;\n let emittingColor: string | undefined;\n\n type Layer = { edge: HTMLElement; glow: HTMLElement; animations: Animation[]; leaving: boolean };\n\n const layers = new Map<string, Layer>();\n\n const removeLayer = (key: string, layer: Layer) => {\n layer.animations.forEach((animation) => animation.cancel());\n layer.edge.remove();\n layer.glow.remove();\n layers.delete(key);\n };\n\n const fadeLayer = (key: string, layer: Layer, visible: boolean) => {\n const opacity = view.getComputedStyle(layer.edge).opacity;\n layer.animations.forEach((animation) => animation.cancel());\n layer.leaving = !visible;\n for (const node of [layer.edge, layer.glow]) node.style.opacity = visible ? '1' : '0';\n if (reducedMotion) {\n if (!visible) removeLayer(key, layer);\n return;\n }\n layer.animations = [layer.edge, layer.glow].map((node) => node.animate([{ opacity }, { opacity: visible ? 1 : 0 }], { duration: 200, easing: 'ease-out' }));\n void Promise.all(layer.animations.map((animation) => animation.finished))\n .then(() => {\n if (layer.leaving && layers.get(key) === layer) removeLayer(key, layer);\n })\n .catch(() => {\n /* Interrupted fades continue from their rendered opacity. */\n });\n };\n\n const setLayer = (value: LightContribution, source = false) => {\n let layer = layers.get(value.key);\n const fresh = !layer;\n if (!layer) {\n const edge = doc.createElement('span'),\n glow = doc.createElement('span');\n edge.className = glow.className = 'bx-glass-contribution';\n edge.dataset['bxLightSource'] = glow.dataset['bxLightSource'] = value.key;\n edge.style.opacity = glow.style.opacity = '0';\n rim.append(edge);\n ambient.append(glow);\n layer = { edge, glow, animations: [], leaving: false };\n layers.set(value.key, layer);\n }\n const at = `${value.x.toFixed(2)}% ${value.y.toFixed(2)}%`;\n\n const edgeColor = `color-mix(in srgb, ${value.color} ${(value.edgeStrength * 100).toFixed(2)}%, transparent)`;\n layer.edge.style.backgroundImage = source\n ? `linear-gradient(${edgeColor}, ${edgeColor})`\n : `radial-gradient(ellipse farthest-side at ${at}, ${edgeColor}, transparent 75%)`;\n layer.glow.style.backgroundImage = `radial-gradient(ellipse at ${at}, color-mix(in srgb, ${value.color} ${(value.strength * 100).toFixed(2)}%, transparent), transparent 68%)`;\n if (fresh || layer.leaving) fadeLayer(value.key, layer, true);\n if (layers.size > 8)\n for (const [key, old] of layers) {\n if (old.leaving) removeLayer(key, old);\n if (layers.size <= 8) break;\n }\n };\n\n const emissionColor = () =>\n options.emission ??\n options.focusEmission ??\n (element.closest('[data-bx-field-invalid=\"true\"]') || element.matches('[aria-invalid=\"true\"]') ? 'var(--bx-text-danger)' : 'var(--bx-primary)');\n\n const emit = (active: boolean, color = emissionColor()) => {\n emitting = active;\n emittingColor = color;\n if (active && color) setLayer({ key: 'emitter', color, x: 50, y: 50, strength: 0, edgeStrength: 0.8 }, true);\n else {\n const layer = layers.get('emitter');\n if (layer && !layer.leaving) fadeLayer('emitter', layer, false);\n }\n };\n\n const x = new Spring(25, { stiffness: 300, damping: 30 });\n const y = new Spring(0, { stiffness: 300, damping: 30 });\n const strength = new Spring(0.04, { stiffness: 300, damping: 30 });\n const pressure = new Spring(0, { stiffness: 440, damping: 25 });\n const globalValue = (name: string) => inheritedAttribute(element.parentElement ?? element, name);\n\n const paint = () => {\n decoration.style.setProperty('--bx-glass-light-x', `${x.value.toFixed(2)}%`);\n decoration.style.setProperty('--bx-glass-light-y', `${y.value.toFixed(2)}%`);\n decoration.style.setProperty('--bx-glass-light-strength', strength.value.toFixed(3));\n decoration.style.setProperty('--bx-glass-press', pressure.value.toFixed(4));\n };\n\n const animate = () => {\n if (disposed || unsubscribe) return;\n if (reducedMotion || typeof requestAnimationFrame !== 'function') {\n x.snap(x.target);\n y.snap(y.target);\n strength.snap(strength.target);\n pressure.snap(0);\n paint();\n return;\n }\n unsubscribe = subscribeFrame((dt) => {\n if (disposed) return false;\n const moving = [x.step(dt), y.step(dt), strength.step(dt), pressure.step(dt)].some(Boolean);\n paint();\n if (!moving) unsubscribe = undefined;\n return moving;\n });\n };\n\n const lighting = (value: Lighting) => {\n x.snap(value.x);\n y.snap(value.y);\n strength.target = value.strength;\n\n if (unifiedLighting) {\n const sources = [...value.contributions].sort((a, b) => a.edgeStrength - b.edgeStrength).slice(-4);\n // Sample the same localized falloff used by the rim, rather than tinting\n // the entire silhouette. Small attached shapes can share a facing edge.\n const edgeAt = (x: number, y: number) => {\n let edge = 'var(--bx-border-default, GrayText)';\n for (const source of sources) {\n const distance = Math.hypot((x - source.x) / Math.max(1, source.x, 100 - source.x), (y - source.y) / Math.max(1, source.y, 100 - source.y));\n const strength = finiteClamp(source.edgeStrength, 0, 0.85, 0) * 0.35 * Math.max(0, 1 - distance / 0.75);\n if (strength > 0.001) edge = `color-mix(in srgb, ${source.color} ${(strength * 100).toFixed(2)}%, ${edge})`;\n }\n return edge;\n };\n element.style.setProperty('--bx-glass-lit-edge', edgeAt(50, 50));\n element.style.setProperty('--bx-glass-lit-edge-top', edgeAt(50, 0));\n element.style.setProperty('--bx-glass-lit-edge-right', edgeAt(100, 50));\n element.style.setProperty('--bx-glass-lit-edge-bottom', edgeAt(50, 100));\n element.style.setProperty('--bx-glass-lit-edge-left', edgeAt(0, 50));\n }\n\n const ambientImage =\n value.contributions\n .filter((contribution) => contribution.ambient)\n .map(\n (contribution) =>\n `radial-gradient(circle ${contribution.spread}px at ${contribution.x.toFixed(2)}% ${contribution.y.toFixed(2)}%, color-mix(in srgb, ${contribution.color} ${(contribution.edgeStrength * 100).toFixed(2)}%, transparent), transparent 75%)`\n )\n .join(', ') || 'none';\n\n if (ambientImage !== environmentImage) {\n environmentImage = ambientImage;\n\n const previous = environment[environmentIndex];\n environmentIndex = 1 - environmentIndex;\n\n const next = environment[environmentIndex];\n next.style.backgroundImage = ambientImage;\n next.style.opacity = '1';\n previous.style.opacity = '0';\n }\n\n const contributions = value.contributions.filter((contribution) => !contribution.ambient);\n const active = new Set(contributions.map((contribution) => contribution.key));\n\n for (const contribution of contributions) setLayer(contribution);\n for (const [key, layer] of layers) if (key !== 'emitter' && !active.has(key) && !layer.leaving) fadeLayer(key, layer, false);\n decoration.style.setProperty('--bx-glass-light-color', value.color);\n decoration.style.setProperty('--bx-glass-reflection-color', value.reflection);\n decoration.style.setProperty('--bx-glass-reflection-strength', String(value.reflectionStrength));\n decoration.style.setProperty('--bx-glass-reflection-x', `${value.reflectionX.toFixed(2)}%`);\n decoration.style.setProperty('--bx-glass-reflection-y', `${value.reflectionY.toFixed(2)}%`);\n animate();\n };\n const sync = () => {\n element.setAttribute('data-bx-surface', 'glass');\n const inheritedMotion = globalValue('data-bx-reduced-motion') ?? originalAttributes.get('data-bx-reduced-motion');\n const inheritedTransparency = globalValue('data-bx-reduced-transparency') ?? originalAttributes.get('data-bx-reduced-transparency');\n reducedMotion = options.reducedMotion ?? (inheritedMotion === null || inheritedMotion === undefined ? motion.matches : inheritedMotion === 'true');\n const reducedTransparency = options.reducedTransparency ?? (inheritedTransparency === 'true' || transparency.matches);\n element.setAttribute('data-bx-reduced-transparency', String(reducedTransparency));\n element.setAttribute('data-bx-reduced-motion', String(reducedMotion));\n const quality = inheritedAttribute(element, 'data-bx-glass-quality') ?? 'auto';\n const supported =\n typeof CSS !== 'undefined' &&\n CSS.supports('background', 'color-mix(in srgb, white, black)') &&\n (CSS.supports('backdrop-filter', 'blur(1px)') || CSS.supports('-webkit-backdrop-filter', 'blur(1px)'));\n const connection = (view.navigator as Navigator & { connection?: { saveData?: boolean } }).connection;\n const economical =\n connection?.saveData ||\n (view.navigator.hardwareConcurrency > 0 && view.navigator.hardwareConcurrency <= 4) ||\n view.matchMedia('(pointer: coarse)').matches;\n const enhanced = quality !== 'baseline' && supported && (quality === 'enhanced' || !economical);\n element.setAttribute('data-bx-glass-renderer', enhanced ? 'enhanced' : 'baseline');\n if (options.glassiness !== undefined) element.style.setProperty('--bx-glassiness', String(finiteClamp(options.glassiness, 0, 1, 0.5)));\n else restoreProperty('--bx-glassiness');\n\n // Absolutely positioned children use the padding box. Extend only across the\n // host's real border so their inherited outer radius describes the same curve.\n // Borderless and one-sided surfaces must never grow beyond their border box.\n const style = view.getComputedStyle(element);\n unifiedLighting = style.getPropertyValue('--bx-glass-unified-lighting').trim() === '1';\n\n for (const side of ['top', 'right', 'bottom', 'left']) {\n const width = style.getPropertyValue(`border-${side}-width`);\n const inset = `${-parseFloat(width || '0')}px`;\n for (const layer of [decoration, rim]) {\n if (layer.style.getPropertyValue(side) !== inset) layer.style.setProperty(side, inset);\n }\n }\n if (reducedMotion || !interactive()) {\n unsubscribe?.();\n unsubscribe = undefined;\n x.snap(x.target);\n y.snap(y.target);\n strength.snap(strength.target);\n pressure.snap(0);\n paint();\n }\n if (reducedMotion)\n for (const [key, layer] of layers) {\n if (layer.leaving) removeLayer(key, layer);\n else layer.animations.forEach((animation) => animation.cancel());\n }\n if (emitting) emit(true, emittingColor);\n };\n function restoreProperty(property: string): void {\n const original = originals.get(property);\n if (original?.value) element.style.setProperty(property, original.value, original.priority);\n else element.style.removeProperty(property);\n }\n sync();\n // Apply the material before the first style read to avoid transitioning from legacy colors.\n if (view.getComputedStyle(element).position === 'static') element.style.position = 'relative';\n const unregister = registerSurface(element, {\n light: lighting,\n sync,\n interactive,\n emission: emissionColor,\n focusEmission: () => options.focusEmission ?? emissionColor(),\n emit,\n press() {\n if (interactive() && !reducedMotion) {\n pressure.target = 1;\n animate();\n }\n },\n release() {\n pressure.target = 0;\n animate();\n }\n });\n const controller: GlassSurface = {\n update(next) {\n if (!disposed) {\n options = { ...next };\n sync();\n refreshGlassLighting(element);\n }\n },\n destroy() {\n if (disposed) return;\n disposed = true;\n unsubscribe?.();\n unregister();\n decoration.remove();\n rim.remove();\n for (const [key, layer] of layers) removeLayer(key, layer);\n restoreStyles();\n restoreAttributes();\n mounted.delete(element);\n }\n };\n mounted.set(element, controller);\n return controller;\n}\n","import { rememberStyles, smoothstep } from './dom';\nimport { configurationEvent, inheritedAttribute } from './configuration';\nimport { subscribeFrame } from './scheduler';\nimport type { GlassTransition, GlassTransitionOptions, MotionResult } from './types';\n\n/** Fade a positioned overlay without changing the geometry of its content. */\nexport function createGlassTransition(origin: HTMLElement, target: HTMLElement, options: GlassTransitionOptions = {}): GlassTransition {\n const doc = target.ownerDocument;\n const view = doc.defaultView;\n if (!view) throw new Error('Glass transitions must be mounted in a browser document.');\n if (origin.ownerDocument !== doc) throw new Error('Glass transition endpoints must share a document.');\n const skin = target.matches('[data-bx-surface]') ? target : (target.querySelector<HTMLElement>('[data-bx-surface]') ?? target);\n const restoreOpacity = rememberStyles(skin, ['opacity']);\n const restoreVisibility = rememberStyles(target, ['visibility']);\n const opacity = Number(view.getComputedStyle(skin).opacity);\n const preference = view.matchMedia('(prefers-reduced-motion: reduce)');\n let disposed = false;\n let active = false;\n let value = 0,\n from = 0,\n destination = 0,\n elapsed = 0;\n let unsubscribe: (() => void) | undefined;\n let resolvePending: ((result: MotionResult) => void) | undefined;\n const reduced = () => {\n const inherited = inheritedAttribute(origin, 'data-bx-reduced-motion');\n return options.reducedMotion ?? (inherited === null ? preference.matches : inherited === 'true');\n };\n const paint = () => {\n // Opacity on the CDK pane would create a backdrop root above the material,\n // cutting off its view of the page for every intermediate animation frame.\n // Composite the surface's own backdrop and content together instead.\n skin.style.opacity = String(value * opacity);\n options.onUpdate?.();\n };\n function settle(): void {\n active = false;\n value = destination;\n unsubscribe?.();\n unsubscribe = undefined;\n restoreOpacity();\n restoreVisibility();\n if (destination === 0) target.style.visibility = 'hidden';\n const resolve = resolvePending;\n resolvePending = undefined;\n resolve?.('finished');\n }\n function move(open: boolean): Promise<MotionResult> {\n if (disposed) return Promise.resolve('cancelled');\n resolvePending?.('cancelled');\n unsubscribe?.();\n unsubscribe = undefined;\n from = value;\n destination = open ? 1 : 0;\n elapsed = 0;\n active = true;\n restoreVisibility();\n const finished = new Promise<MotionResult>((resolve) => {\n resolvePending = resolve;\n });\n if (reduced() || from === destination) settle();\n else {\n paint();\n const duration = (open ? 0.18 : 0.14) * Math.abs(destination - from);\n unsubscribe = subscribeFrame((dt) => {\n elapsed += dt;\n value = from + (destination - from) * smoothstep(0, duration, elapsed);\n paint();\n if (disposed) return false;\n if (elapsed >= duration) {\n settle();\n return false;\n }\n return true;\n });\n }\n return finished;\n }\n const onPreference = () => {\n if (active && reduced()) settle();\n };\n preference.addEventListener('change', onPreference);\n doc.addEventListener(configurationEvent, onPreference);\n return {\n enter: () => move(true),\n exit: () => move(false),\n refresh() {},\n destroy() {\n if (disposed) return;\n disposed = true;\n active = false;\n unsubscribe?.();\n unsubscribe = undefined;\n resolvePending?.('cancelled');\n resolvePending = undefined;\n preference.removeEventListener('change', onPreference);\n doc.removeEventListener(configurationEvent, onPreference);\n restoreOpacity();\n restoreVisibility();\n }\n };\n}\n\n/** @deprecated Use createGlassTransition. */\nexport const createLiquidTransition = createGlassTransition;\n"],"mappings":"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"}
|