toastory 0.3.3 → 0.3.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.
Files changed (70) hide show
  1. package/dist/angular.cjs +1 -1
  2. package/dist/angular.cjs.map +1 -1
  3. package/dist/angular.js +1 -1
  4. package/dist/angular.js.map +1 -1
  5. package/dist/core.cjs +1 -1
  6. package/dist/core.js +1 -1
  7. package/dist/index.cjs +1 -1
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.js +1 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/native.cjs +1 -1
  12. package/dist/native.js +1 -1
  13. package/dist/react.cjs +1 -1
  14. package/dist/react.cjs.map +1 -1
  15. package/dist/react.js +1 -1
  16. package/dist/react.js.map +1 -1
  17. package/dist/svelte.cjs +1 -1
  18. package/dist/svelte.cjs.map +1 -1
  19. package/dist/svelte.js +1 -1
  20. package/dist/svelte.js.map +1 -1
  21. package/dist/themes/_base.css +1 -1
  22. package/dist/themes/_base.toast.css +1 -1
  23. package/dist/themes/all.css +1 -1
  24. package/dist/themes/aurora.css +1 -1
  25. package/dist/themes/aurora.toast.css +1 -1
  26. package/dist/themes/basic.css +1 -1
  27. package/dist/themes/basic.toast.css +1 -1
  28. package/dist/themes/brutal.css +1 -1
  29. package/dist/themes/brutal.toast.css +1 -1
  30. package/dist/themes/classic-bar.css +1 -1
  31. package/dist/themes/classic-bar.toast.css +1 -1
  32. package/dist/themes/classic-stack.css +1 -1
  33. package/dist/themes/classic-stack.toast.css +1 -1
  34. package/dist/themes/dialogs.css +1 -1
  35. package/dist/themes/dialogs.toast.css +1 -1
  36. package/dist/themes/essentials.css +1 -1
  37. package/dist/themes/essentials.toast.css +1 -1
  38. package/dist/themes/flat.css +1 -1
  39. package/dist/themes/flat.toast.css +1 -1
  40. package/dist/themes/gradient-strip.css +1 -1
  41. package/dist/themes/gradient-strip.toast.css +1 -1
  42. package/dist/themes/gradient.css +1 -1
  43. package/dist/themes/gradient.toast.css +1 -1
  44. package/dist/themes/ios-glass.css +1 -1
  45. package/dist/themes/ios-glass.toast.css +1 -1
  46. package/dist/themes/liquid-glass.css +1 -1
  47. package/dist/themes/liquid-glass.toast.css +1 -1
  48. package/dist/themes/material.css +1 -1
  49. package/dist/themes/material.toast.css +1 -1
  50. package/dist/themes/minimal.css +1 -1
  51. package/dist/themes/minimal.toast.css +1 -1
  52. package/dist/themes/neon.css +1 -1
  53. package/dist/themes/neon.toast.css +1 -1
  54. package/dist/themes/outline.css +1 -1
  55. package/dist/themes/outline.toast.css +1 -1
  56. package/dist/themes/pastel.css +1 -1
  57. package/dist/themes/pastel.toast.css +1 -1
  58. package/dist/themes/pill.css +1 -1
  59. package/dist/themes/pill.toast.css +1 -1
  60. package/dist/themes/ripple.css +1 -1
  61. package/dist/themes/ripple.toast.css +1 -1
  62. package/dist/themes/showcase.css +1 -1
  63. package/dist/themes/showcase.toast.css +1 -1
  64. package/dist/themes/sweet.css +1 -1
  65. package/dist/themes/sweet.toast.css +1 -1
  66. package/dist/vue.cjs +1 -1
  67. package/dist/vue.cjs.map +1 -1
  68. package/dist/vue.js +1 -1
  69. package/dist/vue.js.map +1 -1
  70. package/package.json +1 -1
package/dist/react.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/core/clock.ts","../src/core/ids.ts","../src/core/config.ts","../src/core/timer.ts","../src/core/types-registry.ts","../src/core/toast-manager.ts","../src/core/a11y-rules.ts","../src/core/promise.ts","../src/core/dialog.ts","../src/core/toast-api.ts","../src/core/index.ts","../src/web/dom.ts","../src/web/icons.ts","../src/web/sanitize.ts","../src/web/variants.ts","../src/web/sound.ts","../src/web/toaster.ts","../src/web/overlay.ts","../src/web/engine.ts","../src/web/inputs.ts","../src/web/dialog.ts","../src/web/sheets.ts","../src/themes/css.ts","../src/web/theme-engine.ts","../src/web/ui.ts","../src/react/index.tsx"],"names":["custom","el","c","toast","target","o"],"mappings":"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","file":"react.js","sourcesContent":["/**\n * Injectable clock and scheduler interface.\n * Abstracts time and timers so tests and headless engines can run deterministically.\n */\nexport interface Clock {\n /** Returns the current timestamp in milliseconds. */\n now(): number;\n /**\n * Schedules a callback after `ms` milliseconds.\n * @returns A cancellation function.\n */\n setTimeout(fn: () => void, ms: number): () => void;\n /**\n * Schedules a recurring callback every `ms` milliseconds.\n * @returns A cancellation function.\n */\n setInterval(fn: () => void, ms: number): () => void;\n}\n\n/** Default system clock using standard global timer functions. */\nexport const defaultClock: Clock = {\n now: () => Date.now(),\n setTimeout: (fn, ms) => {\n const t = setTimeout(fn, ms);\n return () => clearTimeout(t);\n },\n setInterval: (fn, ms) => {\n const t = setInterval(fn, ms);\n return () => clearInterval(t);\n },\n};\n","import type { ToastId } from './types';\n\nlet counter = 0;\n\n/**\n * Returns a collision-safe, incremental unique identifier.\n * @param prefix Optional prefix for the id (default: 'gk').\n */\nexport function nextId(p = 'gk'): string {\n return `${p}-${++counter}`;\n}\n\n/**\n * Normalizes an optional user-provided id, generating an incremental id if omitted.\n * @param id User-supplied id or undefined.\n * @param prefix Prefix used when generating an id.\n */\nexport function normalizeId(id: ToastId | undefined, p = 'gk'): ToastId {\n return id !== undefined && id !== '' ? id : nextId(p);\n}\n\n/**\n * Resets the internal counter. Useful for deterministic test execution.\n */\nexport function resetIdCounter(): void {\n counter = 0;\n}\n","import type { GlazeConfig, Listener, Unsubscribe } from './types';\n\n/** Library default configuration. */\nexport const DEFAULT_CONFIG: Readonly<GlazeConfig> = Object.freeze({\n theme: 'ios-glass',\n mode: 'auto',\n position: 'top-right',\n duration: 4000,\n maxVisible: 8,\n gap: 12,\n stack: true,\n dir: 'auto',\n hotkey: 'alt+t',\n pauseOn: ['hover', 'focus', 'hidden'],\n shadow: true,\n closeButton: false,\n richColors: false,\n invert: false,\n swipe: true,\n dragThreshold: 45,\n progress: false,\n closeOnClick: false,\n exitDuration: 250,\n historyLimit: 100,\n regionLabel: 'Notifications',\n closeLabel: 'Close notification',\n startPaused: false,\n newestOnTop: true,\n dedupeWindow: 500,\n sound: false,\n soundVolume: 0.5,\n container: undefined,\n} satisfies GlazeConfig);\n\n/** Observable configuration container holding immutable snapshots. */\nexport interface ConfigStore {\n /** Returns the current immutable configuration snapshot. */\n get(): Readonly<GlazeConfig>;\n /** Merges a partial configuration and notifies subscribers. Returns the updated snapshot. */\n set(patch: Partial<GlazeConfig>): Readonly<GlazeConfig>;\n /** Restores library defaults. */\n reset(): void;\n /** Subscribes to configuration changes. */\n subscribe(listener: Listener): Unsubscribe;\n}\n\n/**\n * Resolves an option according to precedence:\n * Call option > Theme default > Global config > Library default.\n */\nexport const resolvePrecedence = <T>(\n callVal: T | undefined,\n themeVal: T | undefined,\n globalVal: T | undefined,\n defaultVal: T,\n): T => callVal ?? themeVal ?? globalVal ?? defaultVal;\n\n/** Creates an isolated, immutable configuration store. */\nexport function createConfigStore(initial: Partial<GlazeConfig> = {}): ConfigStore {\n let current: Readonly<GlazeConfig> = Object.freeze({\n ...DEFAULT_CONFIG,\n ...stripUndefined(initial),\n });\n const listeners = new Set<Listener>();\n\n const emit = (): void => {\n listeners.forEach((listener) => listener());\n };\n\n return {\n get: () => current,\n set(patch) {\n const next = { ...current, ...stripUndefined(patch) };\n if ((Object.keys(next) as (keyof GlazeConfig)[]).some((k) => next[k] !== current[k])) {\n current = Object.freeze(next);\n emit();\n }\n return current;\n },\n reset() {\n current = DEFAULT_CONFIG;\n emit();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\nfunction stripUndefined<T extends object>(value: T): Partial<T> {\n const out: Partial<T> = {};\n for (const k in value) if (value[k] !== undefined) out[k] = value[k];\n return out;\n}\n","import type { Clock } from './clock';\nimport { defaultClock } from './clock';\n\nexport interface PausableTimer {\n /** Starts or resumes the countdown. No effect when already running or finished. */\n start(): void;\n /**\n * Pauses the timer for a named reason (reference-counted).\n * @param reason The pause trigger identifier, e.g. 'hover', 'focus', 'hidden', 'manual'.\n */\n pause(reason?: string): void;\n /**\n * Resumes the timer for a named reason (decrements reference count).\n * Restarts the countdown when all pause reasons are cleared.\n */\n resume(reason?: string): void;\n /** Adds milliseconds to the remaining countdown (or subtracts if negative). */\n add(ms: number): void;\n /** Resets the countdown duration and restarts if previously active. */\n reset(ms?: number): void;\n /** Permanently cancels and tears down the timer. */\n cancel(): void;\n /** Current milliseconds remaining on the countdown. */\n remaining(): number;\n /** Current milliseconds elapsed on the countdown. */\n elapsed(): number;\n /** Whether the countdown is actively ticking. */\n isRunning(): boolean;\n /** Whether the countdown is held by one or more pause reasons. */\n isPaused(): boolean;\n /** List of all currently active pause reason names. */\n pausedReasons(): string[];\n /** Clears all pause reasons and resumes if started. */\n clearReasons(): void;\n /** Registers a progress tick listener called while ticking. */\n onTick(callback: (remaining: number, fraction: number) => void): () => void;\n}\n\n/**\n * Creates a pausable countdown timer with reference-counted pause reasons.\n *\n * @param duration Total countdown duration in milliseconds.\n * @param onDone Callback fired when countdown reaches zero.\n * @param clock Injectable clock/scheduler (defaults to defaultClock).\n */\nexport function createTimer(\n duration: number,\n onDone: () => void,\n clock: Clock = defaultClock,\n): PausableTimer {\n let total = duration;\n let remMs = duration;\n let startedAt = 0;\n let cancelT: (() => void) | undefined;\n let cancelI: (() => void) | undefined;\n let started = false;\n let done = false;\n\n const reasons = new Map<string, number>();\n const ticks = new Set<(remaining: number, fraction: number) => void>();\n\n const isLive = (): boolean => Number.isFinite(remMs) && remMs > 0;\n const active = (): boolean => started && !reasons.size;\n\n const getRem = (): number =>\n done ? 0 : active() ? Math.max(0, remMs - (clock.now() - startedAt)) : remMs;\n\n const notifyTick = (): void => {\n if (!ticks.size) return;\n const r = getRem();\n const f = total > 0 ? Math.max(0, Math.min(1, r / total)) : 0;\n for (const cb of ticks) {\n try {\n cb(r, f);\n } catch (err) {\n console.error(err);\n }\n }\n };\n\n const stop = (): void => {\n cancelT?.();\n cancelI?.();\n cancelT = cancelI = undefined;\n };\n\n const arm = (): void => {\n stop();\n if (!isLive() || reasons.size || done) return;\n startedAt = clock.now();\n cancelT = clock.setTimeout(() => {\n stop();\n remMs = 0;\n done = true;\n started = false;\n notifyTick();\n onDone();\n }, remMs);\n if (ticks.size) cancelI = clock.setInterval(notifyTick, 50);\n };\n\n return {\n start() {\n if (done || !isLive()) return;\n started = true;\n reasons.clear();\n arm();\n notifyTick();\n },\n pause(reason = 'manual') {\n if (done) return;\n reasons.set(reason, (reasons.get(reason) ?? 0) + 1);\n if (started && reasons.size === 1) {\n remMs = Math.max(0, remMs - (clock.now() - startedAt));\n stop();\n notifyTick();\n }\n },\n resume(reason = 'manual') {\n const c = !done && reasons.get(reason);\n if (!c) return;\n if (c <= 1) reasons.delete(reason);\n else reasons.set(reason, c - 1);\n if (active() && isLive()) {\n arm();\n notifyTick();\n }\n },\n clearReasons() {\n reasons.clear();\n if (started && isLive()) arm();\n },\n add(ms: number) {\n if (done || !Number.isFinite(remMs)) return;\n const live = active();\n remMs = Math.max(1, getRem() + ms);\n total = Math.max(total, remMs);\n if (live) arm();\n notifyTick();\n },\n reset(ms?: number) {\n done = false;\n remMs = total = ms ?? total;\n if (active()) {\n if (isLive()) arm();\n else stop();\n }\n notifyTick();\n },\n cancel() {\n stop();\n ticks.clear();\n started = false;\n done = true;\n remMs = 0;\n },\n remaining: getRem,\n elapsed: () => Math.max(0, total - getRem()),\n isRunning: () => active() && !done && isLive(),\n isPaused: () => reasons.size > 0,\n pausedReasons: () => [...reasons.keys()],\n onTick(cb) {\n ticks.add(cb);\n if (active() && !cancelI) cancelI = clock.setInterval(notifyTick, 50);\n return () => {\n ticks.delete(cb);\n if (!ticks.size && cancelI) {\n cancelI();\n cancelI = undefined;\n }\n };\n },\n };\n}\n","import type { ToastTypeDefinition } from './types';\n\n/** Registry of custom and built-in toast types. */\nexport interface TypeRegistry {\n /**\n * Registers or replaces a toast type.\n * @param name Non-empty type name.\n * @param definition Defaults, icon, color tokens, default duration, ariaLive.\n */\n add(name: string, definition?: ToastTypeDefinition): void;\n /** Removes a type. Returns whether it existed. */\n remove(name: string): boolean;\n /** Looks a type up. */\n get(name: string): ToastTypeDefinition | undefined;\n /** Lists registered custom type names. */\n list(): string[];\n}\n\nconst tDef = (color: string, ariaLive: 'polite' | 'assertive' = 'polite') => ({\n color: `var(--gk-${color})`,\n ariaLive,\n});\n\nconst BUILT_IN_TYPES: Record<string, ToastTypeDefinition> = {\n success: tDef('success'),\n error: tDef('error', 'assertive'),\n warning: tDef('warning', 'assertive'),\n info: tDef('info'),\n loading: { ...tDef('info'), defaults: { duration: 0, dismissible: false } },\n message: tDef('fg'),\n};\n\n/** Creates a type registry. */\nexport function createTypeRegistry(): TypeRegistry {\n const custom = new Map<string, ToastTypeDefinition>();\n\n return {\n add(name, definition = {}) {\n const k = typeof name === 'string' ? name.trim() : '';\n if (!k) throw new TypeError('toastory: invalid type');\n custom.set(k, definition);\n },\n remove: (name) => custom.delete(name),\n get: (name) => custom.get(name) ?? BUILT_IN_TYPES[name],\n list: () => [...custom.keys()],\n };\n}\n","import type { Clock } from './clock';\nimport { defaultClock } from './clock';\nimport type { ConfigStore } from './config';\nimport { createConfigStore } from './config';\nimport { normalizeId } from './ids';\nimport { createTimer } from './timer';\nimport type { PausableTimer } from './timer';\nimport { createTypeRegistry } from './types-registry';\nimport type { TypeRegistry } from './types-registry';\nimport type {\n CloseReason,\n Listener,\n ToastCustomRenderer,\n ToastId,\n ToastOptions,\n ToastPatch,\n ToastRecord,\n Unsubscribe,\n} from './types';\n\nconst safeCall = <A, B>(fn?: (a: A, b: B) => void, a?: A, b?: B): void => {\n try {\n fn?.(a as A, b as B);\n } catch (err) {\n console.error(err);\n }\n};\n\n/** Pause reason used by `startPaused`. */\nexport const MANUAL_PAUSE = 'manual';\n\n/** Options for creating a toast manager / store. */\nexport interface ToastManagerOptions {\n config?: ConfigStore;\n clock?: Clock;\n now?: () => number;\n types?: TypeRegistry;\n}\n\nexport type ToastStoreOptions = ToastManagerOptions;\n\n/** Input for adding a toast. */\nexport interface AddToastInput extends ToastOptions {\n custom?: ToastCustomRenderer;\n}\n\ninterface Entry {\n opts: ToastOptions;\n custom: ToastCustomRenderer | undefined;\n record: ToastRecord;\n timer: PausableTimer;\n dedupeKey: string | undefined;\n exitHandle: (() => void) | undefined;\n reason: CloseReason | undefined;\n flags: number;\n}\n\n/** State container for toasts. Pure logic: no DOM, no framework. */\nexport interface ToastManager {\n add(input: AddToastInput): ToastId;\n update(id: ToastId, patch: ToastPatch): boolean;\n dismiss(id?: ToastId, reason?: CloseReason): void;\n dismissAll(reason?: CloseReason): void;\n pause(id: ToastId | undefined, reason: string): void;\n resume(id: ToastId | undefined, reason: string): void;\n extend(id: ToastId, ms: number): void;\n getRemaining(id: ToastId): number;\n getToasts(): readonly ToastRecord[];\n getHistory(): readonly ToastRecord[];\n clear(): void;\n clearHistory(): void;\n subscribe(listener: Listener): Unsubscribe;\n readonly config: ConfigStore;\n readonly types: TypeRegistry;\n}\n\nexport type ToastStore = ToastManager;\n\nexport function createToastManager(options: ToastManagerOptions = {}): ToastManager {\n const config = options.config ?? createConfigStore();\n const clock = options.clock ?? defaultClock;\n const now = options.now ?? clock.now;\n const types = options.types ?? createTypeRegistry();\n\n const entries = new Map<ToastId, Entry>();\n let order: ToastId[] = [];\n let snapshot: readonly ToastRecord[] = [];\n let history: readonly ToastRecord[] = [];\n const listeners = new Set<Listener>();\n\n const emit = (): void => {\n snapshot = order.map((id) => entries.get(id)?.record).filter(Boolean) as ToastRecord[];\n listeners.forEach((listener) => listener());\n };\n\n const build = (\n id: ToastId,\n opts: ToastOptions,\n previous: ToastRecord | undefined,\n custom: ToastCustomRenderer | undefined,\n ): ToastRecord => {\n const cfg = config.get();\n const type = opts.type ?? 'default';\n const merged: ToastOptions = {\n ...types.get(type)?.defaults,\n ...opts,\n };\n merged.title ??= merged.text1;\n merged.description ??= merged.text2;\n merged.onOpen ??= merged.onShow;\n merged.onClose ??= merged.onHide;\n if (!merged.actions && merged.buttons) {\n merged.actions = merged.buttons.map((b) => ({\n label: b.label,\n onClick: (e: { preventDefault(): void; defaultPrevented: boolean }) =>\n (b.onClick ?? b.onPress)?.(e),\n autoDismiss: b.autoDismiss,\n kind: b.kind,\n }));\n }\n const rawDuration =\n merged.autoHide === false ? 0 : (merged.duration ?? merged.visibilityTime ?? cfg.duration);\n const duration = Number.isFinite(rawDuration) && rawDuration > 0 ? rawDuration : 0;\n const urgent = merged.important || type === 'error';\n const stamp = now();\n\n const record: ToastRecord = {\n ...merged,\n id,\n type,\n duration,\n position: merged.position ?? cfg.position,\n ariaLive: merged.ariaLive ?? (urgent ? 'assertive' : 'polite'),\n role: merged.role ?? (urgent ? 'alert' : 'status'),\n createdAt: previous?.createdAt ?? stamp,\n updatedAt: stamp,\n revision: (previous?.revision ?? -1) + 1,\n timerEpoch: previous?.timerEpoch ?? 0,\n count: previous?.count ?? 1,\n visible: previous?.visible ?? false,\n dismissed: false,\n pausedBy: previous?.pausedBy ?? (cfg.startPaused ? [MANUAL_PAUSE] : []),\n remaining: previous?.remaining ?? (duration || Infinity),\n custom,\n };\n return record;\n };\n\n const remainingOf = (entry: Entry): number => {\n return entry.record.duration === 0 ? Infinity : entry.timer.remaining();\n };\n\n const dedupeKeyOf = (o: ToastOptions): string | undefined => {\n if (o.dedupe === false) return;\n if (typeof o.dedupe === 'string') return o.dedupe;\n const t = o.title ?? o.text1;\n const d = o.description ?? o.text2;\n return typeof t === 'string' || typeof d === 'string'\n ? `${o.type ?? 'default'}|${t ?? ''}|${d ?? ''}`\n : undefined;\n };\n\n const promote = (): void => {\n const { maxVisible } = config.get();\n const counts = new Map<string, number>();\n for (const id of order) {\n const entry = entries.get(id);\n if (!entry || entry.record.dismissed) continue;\n const key = `${entry.record.container ?? ''}|${entry.record.position}`;\n const used = counts.get(key) ?? 0;\n const imp = !!entry.record.important;\n if (used < maxVisible || imp) {\n if (!entry.record.visible) {\n entry.record = { ...entry.record, visible: true };\n if (!entry.record.pausedBy.length && entry.record.duration > 0) entry.timer.start();\n }\n if (!imp) counts.set(key, used + 1);\n } else if (entry.record.visible) {\n entry.record = { ...entry.record, visible: false };\n entry.timer.pause();\n }\n }\n };\n\n const finalize = (entry: Entry): void => {\n entry.exitHandle?.();\n entry.timer.cancel();\n entries.delete(entry.record.id);\n order = order.filter((id) => id !== entry.record.id);\n history = [{ ...entry.record, dismissed: true }, ...history].slice(\n 0,\n config.get().historyLimit,\n );\n promote();\n flushOpened();\n emit();\n if (!(entry.flags & 2)) {\n entry.flags |= 2;\n safeCall(entry.record.onClose, entry.record, entry.reason ?? 'api');\n }\n };\n\n const dismissEntry = (entry: Entry, reason: CloseReason): void => {\n if (entry.record.dismissed) return;\n if (\n entry.record.dismissible === false &&\n (reason === 'user' || reason === 'swipe' || reason === 'click')\n )\n return;\n entry.reason = reason;\n entry.record = {\n ...entry.record,\n dismissed: true,\n remaining: 0,\n revision: entry.record.revision + 1,\n };\n entry.timer.cancel();\n\n if (!(entry.flags & 4) && reason !== 'auto') {\n entry.flags |= 4;\n safeCall(entry.record.onDismiss, entry.record, reason);\n }\n\n promote();\n flushOpened();\n emit();\n\n const exit = config.get().exitDuration;\n if (exit <= 0 || !entry.record.visible) {\n finalize(entry);\n } else {\n entry.exitHandle = clock.setTimeout(() => finalize(entry), exit);\n }\n };\n\n const makeEntry = (id: ToastId, input: AddToastInput): Entry => {\n const { custom, ...opts } = input;\n const record = build(id, opts, undefined, custom);\n const entry: Entry = {\n opts,\n custom,\n record,\n timer: undefined as unknown as PausableTimer,\n dedupeKey: dedupeKeyOf(opts),\n exitHandle: undefined,\n reason: undefined,\n flags: 0,\n };\n entry.timer = createTimer(\n record.duration,\n () => {\n if (!(entry.flags & 8)) {\n entry.flags |= 8;\n safeCall(entry.record.onAutoClose, entry.record);\n }\n dismissEntry(entry, 'auto');\n },\n clock,\n );\n if (record.pausedBy.length) entry.timer.pause();\n return entry;\n };\n\n const restartTimer = (entry: Entry): void => {\n entry.timer.cancel();\n if (entry.record.duration > 0) {\n entry.timer.reset(entry.record.duration);\n if (entry.record.visible && !entry.record.pausedBy.length) entry.timer.start();\n }\n entry.record = {\n ...entry.record,\n timerEpoch: entry.record.timerEpoch + 1,\n remaining: remainingOf(entry),\n };\n };\n\n const flushOpened = (): void => {\n for (const id of order) {\n const entry = entries.get(id);\n if (entry && entry.record.visible && !(entry.flags & 1) && !entry.record.dismissed) {\n entry.flags |= 1;\n safeCall(entry.record.onOpen, entry.record);\n }\n }\n };\n\n const store: ToastManager = {\n config,\n types,\n\n add(input: AddToastInput): ToastId {\n const id = normalizeId(input.id);\n const existing = entries.get(id);\n if (existing && !existing.record.dismissed) {\n const { custom, ...patch } = input;\n store.update(id, patch);\n if (custom) {\n existing.custom = custom;\n existing.record = { ...existing.record, custom };\n emit();\n }\n return id;\n }\n if (existing) finalize(existing);\n\n const key = dedupeKeyOf(input);\n if (key !== undefined) {\n for (const other of entries.values()) {\n if (other.dedupeKey === key && !other.record.dismissed) {\n other.record = {\n ...other.record,\n count: other.record.count + 1,\n revision: other.record.revision + 1,\n updatedAt: now(),\n };\n restartTimer(other);\n emit();\n return other.record.id;\n }\n }\n }\n\n const entry = makeEntry(id, input);\n entries.set(id, entry);\n order = [...order, id];\n promote();\n emit();\n flushOpened();\n return id;\n },\n\n update(id, patch) {\n const entry = entries.get(id);\n if (!entry || entry.record.dismissed) return false;\n const { resetTimer = true, ...rest } = patch;\n const next: ToastOptions = { ...entry.opts };\n if (rest.type !== undefined && rest.type !== entry.record.type) {\n delete next.duration;\n delete next.ariaLive;\n delete next.role;\n delete next.icon;\n }\n let changed = false;\n for (const key in rest) {\n const value = (rest as Record<string, unknown>)[key];\n if (value !== undefined) {\n if ((entry.opts as Record<string, unknown>)[key] !== value) changed = true;\n (next as Record<string, unknown>)[key] = value;\n }\n }\n if (!changed && rest.type === undefined && rest.position === undefined) return true;\n entry.opts = next;\n entry.dedupeKey = dedupeKeyOf(next);\n const rebuilt = build(id, next, entry.record, entry.custom);\n const positionChanged = rebuilt.position !== entry.record.position;\n entry.record = rebuilt;\n if (positionChanged) {\n entry.record = { ...entry.record, visible: false };\n promote();\n }\n if (resetTimer || positionChanged) restartTimer(entry);\n else {\n entry.record = {\n ...entry.record,\n remaining: remainingOf(entry),\n };\n }\n emit();\n flushOpened();\n return true;\n },\n\n dismiss(id, reason = 'api') {\n if (id === undefined) return store.dismissAll(reason);\n const entry = entries.get(id);\n if (entry) dismissEntry(entry, reason);\n },\n\n dismissAll(reason = 'api') {\n for (const entry of entries.values()) dismissEntry(entry, reason);\n },\n\n pause(id, reason) {\n for (const e of id !== undefined ? [entries.get(id)] : entries.values()) {\n if (!e || e.record.pausedBy.includes(reason)) continue;\n e.timer.pause(reason);\n e.record = {\n ...e.record,\n pausedBy: [...e.record.pausedBy, reason],\n remaining: remainingOf(e),\n };\n }\n emit();\n },\n\n resume(id, reason) {\n for (const e of id !== undefined ? [entries.get(id)] : entries.values()) {\n if (!e || !e.record.pausedBy.includes(reason)) continue;\n e.timer.resume(reason);\n const pausedBy = e.record.pausedBy.filter((v) => v !== reason);\n e.record = { ...e.record, pausedBy, remaining: remainingOf(e) };\n if (!pausedBy.length && e.record.visible && e.record.duration > 0) e.timer.start();\n }\n emit();\n },\n\n extend(id, ms) {\n const entry = entries.get(id);\n if (!entry || entry.record.dismissed) return;\n entry.timer.add(ms);\n entry.record = {\n ...entry.record,\n remaining: remainingOf(entry),\n timerEpoch: entry.record.timerEpoch + 1,\n revision: entry.record.revision + 1,\n };\n emit();\n },\n\n getRemaining(id) {\n const entry = entries.get(id);\n return entry ? remainingOf(entry) : 0;\n },\n\n getToasts: () => snapshot,\n getHistory: () => history,\n\n clear() {\n for (const entry of entries.values()) {\n entry.exitHandle?.();\n entry.timer.cancel();\n }\n entries.clear();\n order = [];\n snapshot = [];\n emit();\n },\n\n clearHistory() {\n history = [];\n emit();\n },\n\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n\n return store;\n}\n\nexport const createToastStore = createToastManager;\n","import type { DialogOptions, ToastType } from './types';\n\n/** Decides ARIA live politeness level. */\nexport const decideAriaLive = (\n type?: ToastType,\n important?: boolean,\n custom?: 'polite' | 'assertive' | 'off',\n): 'polite' | 'assertive' | 'off' =>\n custom ?? (important || type === 'error' || type === 'warning' ? 'assertive' : 'polite');\n\n/** Decides ARIA role for a toast. */\nexport const decideToastRole = (\n type?: ToastType,\n important?: boolean,\n custom?: 'status' | 'alert' | 'log',\n): 'status' | 'alert' | 'log' => custom ?? (important || type === 'error' ? 'alert' : 'status');\n\n/** Decides ARIA dialog role. */\nexport const decideDialogRole = (o: DialogOptions): 'dialog' | 'alertdialog' =>\n !o.input && (o.tone === 'danger' || o.tone === 'warning') ? 'alertdialog' : 'dialog';\n\n/** Decides which element receives initial focus when a dialog opens. */\nexport const decideFocusTarget = (\n o: DialogOptions,\n): 'confirm' | 'deny' | 'cancel' | 'input' | 'close' | 'none' =>\n o.focusOn ??\n (o.input !== undefined\n ? 'input'\n : o.tone === 'danger' && o.cancelButton?.show !== false\n ? 'cancel'\n : 'confirm');\n\n/** Computes accessible labels and button text with default fallbacks. */\nexport const decideDialogLabels = (\n o: DialogOptions,\n): { confirmLabel: string; denyLabel: string; cancelLabel: string } => ({\n confirmLabel: o.confirmButton?.label ?? 'OK',\n denyLabel: o.denyButton?.label ?? 'No',\n cancelLabel: o.cancelButton?.label ?? 'Cancel',\n});\n","import type { PromiseHandle, PromiseMessages, ToastId, ToastOptions, ToastPatch } from './types';\nimport type { ToastStore } from './toast-manager';\n\nconst toPatch = (m: string | ToastPatch): ToastPatch => (typeof m === 'string' ? { title: m } : m);\n\nconst errorText = (e: unknown): string => (e instanceof Error ? e.message : String(e));\n\n/**\n * Handles async promise toasts: displays loading state, resolves to success or error,\n * calls lifecycle hooks, and provides `unwrap()` returning the raw promise result.\n */\nexport function runPromiseToast<T>(\n store: ToastStore,\n input: Promise<T> | (() => Promise<T>),\n messages: PromiseMessages<T>,\n options: ToastOptions = {},\n): PromiseHandle<T> {\n let promise: Promise<T>;\n try {\n promise = typeof input === 'function' ? input() : input;\n } catch (error) {\n promise = Promise.reject(error);\n }\n\n const { id: requestedId, ...base } = options;\n const loadingPatch = toPatch(messages.loading);\n\n const id: ToastId = store.add({\n ...base,\n id: requestedId,\n ...loadingPatch,\n type: 'loading',\n duration: 0,\n });\n\n const settle = (type: 'success' | 'error', raw: unknown, payload: unknown): void => {\n const desc =\n typeof messages.description === 'function'\n ? messages.description(\n type === 'success'\n ? { status: type, value: payload as T }\n : { status: type, error: payload },\n )\n : messages.description;\n store.update(id, {\n duration: base.duration ?? store.config.get().duration,\n ...toPatch(raw as string | ToastPatch),\n type,\n ...(desc !== undefined ? { description: desc } : {}),\n resetTimer: true,\n });\n };\n\n promise\n .then((value) => {\n if (messages.success === undefined) {\n store.dismiss(id);\n } else {\n settle(\n 'success',\n typeof messages.success === 'function' ? messages.success(value) : messages.success,\n value,\n );\n }\n })\n .catch((error: unknown) => {\n settle(\n 'error',\n messages.error === undefined\n ? errorText(error)\n : typeof messages.error === 'function'\n ? messages.error(error)\n : messages.error,\n error,\n );\n })\n .finally(() => {\n try {\n void messages.finally?.();\n } catch (err) {\n console.error(err);\n }\n });\n\n return {\n id,\n unwrap: () => promise,\n };\n}\n","import { createTimer } from './timer';\nimport type { PausableTimer } from './timer';\nimport type { Listener, Unsubscribe } from './types';\n\nexport type {\n DialogBackdrop,\n DialogButton,\n DialogChoice,\n DialogColumn,\n DialogHandle,\n DialogIcon,\n DialogInputType,\n DialogOptions,\n DialogPosition,\n DialogResult,\n DialogRow,\n DialogTone,\n DismissReason,\n ValidateResult,\n} from './types';\nimport type {\n DialogHandle,\n DialogOptions,\n DialogResult,\n DismissReason,\n ValidateResult,\n} from './types';\n\n/** Observable view of a running dialog. */\nexport interface DialogState {\n /** Current merged options. */\n options: DialogOptions;\n /** Which button is busy. */\n loading: 'confirm' | 'deny' | null;\n /** Inline error. */\n error: string | undefined;\n /** `true` until the dialog resolves. */\n open: boolean;\n /** Increments on every change. */\n revision: number;\n}\n\n/** Drives validation, async hooks, timer and result of one dialog. No DOM. */\nexport interface DialogController {\n /** Control surface shared with user callbacks. */\n readonly handle: DialogHandle;\n /** Current state. */\n getState(): DialogState;\n /** Subscribes to state changes. */\n subscribe(listener: Listener): Unsubscribe;\n /** Renderer supplies the function that reads the current input value. */\n setValueReader(reader: () => unknown): void;\n /** Renderer calls this once mounted. Starts the timer and fires `didOpen`. */\n opened(): void;\n /** Runs confirm or deny. Resolves after hooks have run. */\n submit(kind: 'confirm' | 'deny'): Promise<void>;\n /** Dismisses when allowed. Returns whether the dialog closed. */\n dismiss(reason: DismissReason): boolean;\n}\n\nconst messageOf = (err: unknown): string => (err instanceof Error ? err.message : String(err));\n\n/** Creates the controller for a dialog. */\nexport function createDialogController(initial: DialogOptions): DialogController {\n let options: DialogOptions = { ...initial };\n let loading: DialogState['loading'] = null;\n let error: string | undefined;\n let open = true;\n let revision = 0;\n let timer: PausableTimer | undefined;\n let readValue: () => unknown = () => options.inputValue;\n let resolveResult: (result: DialogResult) => void = () => undefined;\n const listeners = new Set<Listener>();\n const result = new Promise<DialogResult>((resolve) => {\n resolveResult = resolve;\n });\n let state: DialogState = { options, loading, error, open, revision };\n\n const emit = (): void => {\n revision += 1;\n state = { options, loading, error, open, revision };\n for (const listener of [...listeners]) {\n try {\n listener();\n } catch (err) {\n console.error(err);\n }\n }\n };\n\n const finish = (partial: Partial<DialogResult>): void => {\n if (!open) return;\n const final: DialogResult = {\n isConfirmed: false,\n isDenied: false,\n isDismissed: false,\n value: undefined,\n dismiss: undefined,\n ...partial,\n };\n try {\n options.willClose?.(handle, final);\n } catch (err) {\n console.error(err);\n }\n open = false;\n timer?.cancel();\n emit();\n listeners.clear();\n resolveResult(final);\n };\n\n const startTimer = (ms: number): void => {\n timer?.cancel();\n timer = undefined;\n if (ms > 0 && Number.isFinite(ms)) {\n timer = createTimer(ms, () => {\n finish({ isDismissed: true, dismiss: 'timer' });\n });\n timer.start();\n }\n };\n\n const handle: DialogHandle = {\n result,\n close(partial) {\n finish(partial ?? { isDismissed: true, dismiss: 'close' });\n },\n update(patch) {\n if (!open) return;\n options = { ...options, ...patch };\n if (patch.timer !== undefined) startTimer(patch.timer);\n emit();\n },\n setLoading(value) {\n if (!open) return;\n loading = value === true ? 'confirm' : value === false ? null : value;\n emit();\n },\n showError(message) {\n if (!open) return;\n error = message ?? undefined;\n emit();\n },\n timer: {\n pause: () => {\n timer?.pause();\n emit();\n },\n resume: () => {\n timer?.resume();\n emit();\n },\n add: (ms) => {\n if (timer) timer.add(ms);\n else startTimer(Math.max(1, ms));\n emit();\n },\n remaining: () => timer?.remaining() ?? 0,\n paused: () => (timer ? !timer.isRunning() && timer.remaining() > 0 : false),\n },\n };\n\n const controller: DialogController = {\n handle,\n getState: () => state,\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n setValueReader(reader) {\n readValue = reader;\n },\n opened() {\n if (!open) return;\n if (options.timer !== undefined) startTimer(options.timer);\n emit();\n try {\n options.didOpen?.(handle);\n } catch (err) {\n console.error(err);\n }\n },\n async submit(kind) {\n if (!open || loading) return;\n let value = readValue();\n if (error !== undefined) {\n error = undefined;\n emit();\n }\n if (kind === 'confirm' && options.validate) {\n loading = 'confirm';\n emit();\n let msg: ValidateResult;\n try {\n msg = await options.validate(value, handle);\n } catch (t) {\n msg = messageOf(t);\n }\n loading = null;\n if (!open) return;\n if (typeof msg === 'string' && msg) {\n error = msg;\n emit();\n return;\n }\n emit();\n }\n const hook = kind === 'confirm' ? options.preConfirm : options.preDeny;\n if (hook) {\n loading = kind;\n emit();\n let out: unknown;\n try {\n out = await hook(value, handle);\n } catch (t) {\n loading = null;\n if (open) {\n error = messageOf(t);\n emit();\n }\n return;\n }\n loading = null;\n if (!open) return;\n if (out === false) {\n emit();\n return;\n }\n if (out !== undefined) value = out;\n }\n finish({ isConfirmed: kind === 'confirm', isDenied: kind === 'deny', value });\n },\n dismiss(reason) {\n if (!open || (loading && reason !== 'timer')) return false;\n if (reason === 'backdrop' && options.allowOutsideClick === false) return false;\n if (reason === 'esc' && options.allowEscape === false) return false;\n finish({ isDismissed: true, dismiss: reason });\n return true;\n },\n };\n\n return controller;\n}\n\n/** Promise returned by dialog helpers, with the live handle attached. */\nexport type DialogPromise<R = DialogResult> = Promise<R> & { handle: DialogHandle };\n\n/** Result of `ui.steps`. */\nexport interface StepsResult extends DialogResult {\n /** Confirmed values of every completed step. */\n values: unknown[];\n /** Zero based index of the step the flow ended on. */\n step: number;\n}\n\n/**\n * Runs dialogs one after another. From the second step on, the deny button becomes a \"back\"\n * button using `backLabel`, and activating it returns to the previous step.\n * @param steps Options of each step.\n * @param openOrManager Opens one dialog, or a DialogManager instance.\n * @param backLabel Label for the back button.\n */\nexport async function runSteps(\n steps: readonly DialogOptions[],\n open: (options: DialogOptions) => Promise<DialogResult>,\n backLabel = 'Back',\n): Promise<StepsResult> {\n const values: unknown[] = [];\n let index = 0;\n let last: DialogResult = {\n isConfirmed: false,\n isDenied: false,\n isDismissed: true,\n value: undefined,\n dismiss: 'close',\n };\n while (index < steps.length) {\n const base = steps[index];\n if (!base) {\n index += 1;\n continue;\n }\n const options: DialogOptions =\n index > 0\n ? { ...base, denyButton: { show: true, label: backLabel, ...base.denyButton } }\n : base;\n const previous = values[index];\n const restored =\n typeof previous === 'string' || typeof previous === 'number' || typeof previous === 'boolean'\n ? previous\n : options.inputValue;\n last = await open({ ...options, inputValue: restored });\n if (last.isConfirmed) {\n values[index] = last.value;\n index += 1;\n } else if (last.isDenied && index > 0) {\n index -= 1;\n } else {\n return { ...last, values: values.slice(0, index), step: index };\n }\n }\n return { ...last, values, step: Math.max(0, steps.length - 1) };\n}\n","import { runPromiseToast } from './promise';\nimport type { ToastStore } from './toast-manager';\nimport type {\n PromiseHandle,\n PromiseMessage,\n PromiseMessages,\n PromiseOutcome,\n Renderable,\n ToastCustomRenderer,\n ToastId,\n ToastOptions,\n ToastPatch,\n ToastRecord,\n} from './types';\nimport type { TypeRegistry } from './types-registry';\n\nexport type { PromiseHandle, PromiseMessage, PromiseMessages, PromiseOutcome };\n\n/** Callable toast function shape shared by all entry points. */\nexport type ToastFn = (message?: Renderable, options?: ToastOptions) => ToastId;\n\n/** The `ui.toast` API. */\nexport interface ToastApi extends ToastFn {\n /** Success toast. */\n success: ToastFn;\n /** Error toast. Uses an assertive live region. */\n error: ToastFn;\n /** Informational toast. */\n info: ToastFn;\n /** Warning toast. */\n warning: ToastFn;\n /** Loading toast with indefinite duration. */\n loading: ToastFn;\n /** Neutral message toast. */\n message: ToastFn;\n /** Custom renderer. */\n custom: (renderer: ToastCustomRenderer, options?: ToastOptions) => ToastId;\n /** Updates an existing toast. */\n update: (id: ToastId, patch: ToastPatch) => boolean;\n /** Dismisses one toast, or all when id is omitted. */\n dismiss: (id?: ToastId) => void;\n /** Dismisses every toast in every region. */\n dismissAll: () => void;\n /** Tracks a promise with loading, success and error states. */\n promise: <T>(\n input: Promise<T> | (() => Promise<T>),\n messages: PromiseMessages<T>,\n options?: ToastOptions,\n ) => PromiseHandle<T>;\n /** Returns a snapshot of active and queued toasts. */\n getToasts: () => readonly ToastRecord[];\n /** Returns closed toasts up to `config.historyLimit`. */\n getHistory: () => readonly ToastRecord[];\n /** Registry of custom toast types. */\n readonly types: TypeRegistry;\n}\n\n/** Builds the `ui.toast` API on top of a store/manager. */\nexport function createToastApi(store: ToastStore): ToastApi {\n const make =\n (type?: ToastOptions['type']): ToastFn =>\n (message, options = {}) => {\n const input: ToastOptions = { type, ...options };\n if (options.type !== undefined) input.type = options.type;\n if (message !== undefined) {\n if (options.title === undefined) input.title = message;\n else if (options.description === undefined) input.description = message;\n }\n return store.add(input);\n };\n\n return Object.assign(make() as ToastApi, {\n success: make('success'),\n error: make('error'),\n info: make('info'),\n warning: make('warning'),\n loading: make('loading'),\n message: make('message'),\n custom: (renderer: ToastCustomRenderer, options?: ToastOptions) =>\n store.add({ ...options, custom: renderer }),\n update: store.update,\n dismiss: store.dismiss,\n dismissAll: store.dismissAll,\n getToasts: store.getToasts,\n getHistory: store.getHistory,\n types: store.types,\n promise: <T>(\n input: Promise<T> | (() => Promise<T>),\n messages: PromiseMessages<T>,\n options?: ToastOptions,\n ) => runPromiseToast(store, input, messages, options),\n });\n}\n","export { defaultClock } from './clock';\nexport type { Clock } from './clock';\n\nexport { nextId, normalizeId, resetIdCounter } from './ids';\n\nexport { createStore } from './store';\nexport type { Store } from './types';\n\nexport { createTimer } from './timer';\nexport type { PausableTimer } from './timer';\n\nexport { createTypeRegistry } from './types-registry';\nexport type { TypeRegistry } from './types-registry';\n\nexport {\n decideAriaLive,\n decideDialogLabels,\n decideDialogRole,\n decideFocusTarget,\n decideToastRole,\n} from './a11y-rules';\n\nexport { createConfigStore, DEFAULT_CONFIG, resolvePrecedence } from './config';\nexport type { ConfigStore } from './config';\n\nexport { createToastManager, createToastStore, MANUAL_PAUSE } from './toast-manager';\nexport type { AddToastInput, ToastManager, ToastManagerOptions, ToastStore } from './toast-manager';\n\nexport { runPromiseToast } from './promise';\n\nexport { createDialogManager } from './dialog-manager';\nexport type { DialogManager, DialogQueueItem, HeadlessDialogController } from './dialog-manager';\n\nexport { createDialogController, runSteps } from './dialog';\nexport type { DialogController, DialogPromise, StepsResult } from './dialog';\n\nexport { createToastApi } from './toast-api';\nexport type {\n PromiseHandle,\n PromiseMessage,\n PromiseMessages,\n PromiseOutcome,\n ToastApi,\n ToastFn,\n} from './toast-api';\n\nexport { springEasing, Spring, springPosition, runSpringTask } from './spring';\nexport type { SpringConfig } from './spring';\n\nexport type * from './types';\n\nimport type { Clock } from './clock';\nimport { defaultClock } from './clock';\nimport type { ConfigStore } from './config';\nimport { createConfigStore } from './config';\nimport { runSteps } from './dialog';\nimport type { StepsResult } from './dialog';\nimport { createDialogManager } from './dialog-manager';\nimport type { DialogManager } from './dialog-manager';\nimport { createToastManager } from './toast-manager';\nimport type { ToastStore } from './toast-manager';\nimport { createToastApi } from './toast-api';\nimport type { ToastApi } from './toast-api';\nimport type {\n BottomSheetHandle,\n BottomSheetOptions,\n DialogHandle,\n DialogOptions,\n DialogResult,\n GlazeConfig,\n LoadingHandle,\n LoadingOptions,\n SheetOptions,\n ToastRecord,\n} from './types';\n\n/**\n * Renderer interface for bridging the framework-agnostic core to UI adapters.\n * If a call happens before a renderer is registered, it queues and replays upon registration.\n */\nexport interface Renderer {\n openDialog?(options: DialogOptions, handle: DialogHandle): Promise<DialogResult> | undefined;\n openSheet?(options: SheetOptions): Promise<DialogResult>;\n openBottomSheet?(options: BottomSheetOptions): BottomSheetHandle;\n openLoading?(options: LoadingOptions): LoadingHandle;\n mountToast?(record: ToastRecord): void;\n}\n\n/** Complete framework-agnostic UI feedback toolkit. */\nexport interface CoreUI {\n /** Toast notifications API. */\n readonly toast: ToastApi;\n /** Global configuration store. */\n readonly config: ConfigStore;\n /** Toast state manager. */\n readonly toastStore: ToastStore;\n /** Headless dialog manager. */\n readonly dialogManager: DialogManager;\n\n /** Opens a confirm dialog. */\n confirm(options: DialogOptions | string): Promise<DialogResult>;\n /** Opens an informational alert dialog. */\n alert(options: DialogOptions | string): Promise<DialogResult>;\n /** Opens a prompt dialog for user text/value input. */\n prompt(options: DialogOptions | string): Promise<DialogResult>;\n /** Runs a multi-step dialog sequence. */\n steps(steps: readonly DialogOptions[], backLabel?: string): Promise<StepsResult>;\n /** Opens an action sheet. */\n sheet(options: SheetOptions): Promise<DialogResult>;\n /** Opens a bottom sheet. */\n bottomSheet(options: BottomSheetOptions): BottomSheetHandle;\n /** Opens a loading overlay. */\n loading(options?: LoadingOptions | string): LoadingHandle;\n\n /** Merges global configuration. */\n configure(patch: Partial<GlazeConfig>): Readonly<GlazeConfig>;\n /** Returns the current configuration snapshot. */\n getConfig(): Readonly<GlazeConfig>;\n /** Clears all active toasts and dialogs. */\n clear(): void;\n\n /** Registers a concrete UI renderer, replaying any calls queued during hydration. */\n registerRenderer(renderer: Renderer): void;\n /** Returns the active renderer if registered. */\n getRenderer(): Renderer | undefined;\n}\n\nexport interface CreateUIOptions {\n config?: ConfigStore;\n clock?: Clock;\n}\n\n/**\n * Creates an isolated, framework-agnostic CoreUI instance.\n * Useful for multi-tenant applications, microfrontends, and isolated tests.\n */\nexport function createUI(options: CreateUIOptions = {}): CoreUI {\n const clock = options.clock ?? defaultClock;\n const config = options.config ?? createConfigStore();\n const toastStore = createToastManager({ config, clock });\n const toast = createToastApi(toastStore);\n const dialogManager = createDialogManager(clock);\n\n let renderer: Renderer | undefined;\n const q: (() => void)[] = [];\n const toOpts = (o: DialogOptions | string): DialogOptions =>\n typeof o === 'string' ? { title: o } : { ...o };\n\n const runDlg = (m: DialogOptions): Promise<DialogResult> => {\n const h = dialogManager.open(m);\n if (renderer?.openDialog) void renderer.openDialog(m, h);\n else q.push(() => void renderer?.openDialog?.(m, h));\n return h.result;\n };\n\n const DISMISSED: DialogResult = {\n isConfirmed: false,\n isDenied: false,\n isDismissed: true,\n value: undefined,\n dismiss: 'close',\n };\n\n const ui: CoreUI = {\n toast,\n config,\n toastStore,\n dialogManager,\n confirm: (o) =>\n runDlg({ confirmButton: { show: true }, cancelButton: { show: true }, ...toOpts(o) }),\n alert: (o) =>\n runDlg({\n confirmButton: { show: true },\n cancelButton: { show: false },\n denyButton: { show: false },\n ...toOpts(o),\n }),\n prompt: (o) =>\n runDlg({\n input: 'text',\n confirmButton: { show: true },\n cancelButton: { show: true },\n ...toOpts(o),\n }),\n steps: (list, back = 'Back') => runSteps(list, (s) => ui.confirm(s), back),\n sheet: (o) =>\n renderer?.openSheet\n ? renderer.openSheet(o)\n : new Promise((res) => {\n q.push(() =>\n renderer?.openSheet ? void renderer.openSheet(o).then(res) : res(DISMISSED),\n );\n }),\n bottomSheet(o) {\n if (renderer?.openBottomSheet) return renderer.openBottomSheet(o);\n let live: BottomSheetHandle | undefined;\n return {\n body: undefined,\n close: (r) => live?.close(r),\n snapTo: (i) => live?.snapTo(i),\n update: (p) => live?.update(p),\n result: new Promise((res) => {\n q.push(() =>\n renderer?.openBottomSheet\n ? void (live = renderer.openBottomSheet(o)).result.then(res)\n : res(DISMISSED),\n );\n }),\n };\n },\n loading(loadingOpts = {}) {\n const o = typeof loadingOpts === 'string' ? { text: loadingOpts } : loadingOpts;\n if (renderer?.openLoading) return renderer.openLoading(o);\n let live: LoadingHandle | undefined, done: () => void;\n const closed = new Promise<void>((res) => {\n done = res;\n });\n q.push(() =>\n renderer?.openLoading ? void (live = renderer.openLoading(o)).closed.then(done) : done(),\n );\n return {\n update: (p) => live?.update(p),\n close: () => {\n live?.close();\n done();\n },\n closed,\n };\n },\n configure: (p) => config.set(p),\n getConfig: () => config.get(),\n clear() {\n toastStore.clear();\n dialogManager.clear();\n q.length = 0;\n },\n registerRenderer(r) {\n renderer = r;\n while (q.length) q.shift()?.();\n },\n getRenderer: () => renderer,\n };\n\n return ui;\n}\n\nlet defaultUI: CoreUI | undefined;\nconst def = (): CoreUI => (defaultUI ??= createUI());\n\n/** Default singleton instance of the CoreUI toolkit. */\nexport const ui: CoreUI = {\n get toast() {\n return def().toast;\n },\n get config() {\n return def().config;\n },\n get toastStore() {\n return def().toastStore;\n },\n get dialogManager() {\n return def().dialogManager;\n },\n confirm: (o) => def().confirm(o),\n alert: (o) => def().alert(o),\n prompt: (o) => def().prompt(o),\n steps: (s, b) => def().steps(s, b),\n sheet: (o) => def().sheet(o),\n bottomSheet: (o) => def().bottomSheet(o),\n loading: (o) => def().loading(o),\n configure: (p) => def().configure(p),\n getConfig: () => def().getConfig(),\n clear: () => def().clear(),\n registerRenderer: (r) => def().registerRenderer(r),\n getRenderer: () => def().getRenderer(),\n};\n\n/** Registers the renderer with the default UI instance. */\nexport function registerRenderer(renderer: Renderer): void {\n def().registerRenderer(renderer);\n}\n\n/** Backward-compatible ToastEngine interface. */\nexport interface ToastEngine {\n store: ToastStore;\n toast: ToastApi;\n}\n\n/** Backward-compatible factory for ToastEngine. */\nexport function createToastEngine(options: { config?: ConfigStore } = {}): ToastEngine {\n const store = createToastManager({ config: options.config });\n return { store, toast: createToastApi(store) };\n}\n","import type { Renderable } from '../core';\n\n/** Small DOM helpers shared by the web renderers. Every function is safe to import on the server. */\n\n/** Whether a DOM is available right now. Evaluated at call time, never at import time. */\nexport function hasDom(): boolean {\n return typeof document !== 'undefined' && typeof document.createElement === 'function';\n}\n\n/** Asserts DOM availability, throwing in SSR or headless runtimes without document. */\nexport function requireDom(): void {\n if (typeof document === 'undefined') throw new Error('toastory: DOM required');\n}\n\ntype Child = Node | string | null | undefined | false;\n\n/**\n * Creates an element.\n * @param tag Tag name.\n * @param className Space separated classes, empty for none.\n * @param attrs Attributes to set. `undefined` values are skipped.\n * @param children Nodes or text.\n */\nexport function el<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n className = '',\n attrs: Record<string, string | undefined> = {},\n ...children: Child[]\n): HTMLElementTagNameMap[K] {\n const node = document.createElement(tag);\n if (className) node.className = className;\n for (const k in attrs) if (attrs[k] !== undefined) node.setAttribute(k, attrs[k] as string);\n for (const child of children) {\n if (child) node.append(child);\n }\n return node;\n}\n\n/** Writes a renderable into a node: DOM nodes are appended, everything else becomes text. */\nexport function fill(target: HTMLElement, value: Renderable): void {\n if (value === undefined || value === null || value === false) return;\n if (typeof Node !== 'undefined' && value instanceof Node) target.append(value);\n else target.append(String(value));\n}\n\nexport { nextId } from '../core';\n\n/** Whether the user asked for reduced motion. */\nexport function prefersReducedMotion(): boolean {\n return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/** Whether the OS currently prefers a dark color scheme. */\nexport function prefersDark(): boolean {\n return typeof matchMedia === 'function' && matchMedia('(prefers-color-scheme: dark)').matches;\n}\n\n/** Converts a number to a CSS length, leaving strings untouched. */\nexport function cssLength(value: string | number): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\n/** Elements that can receive keyboard focus. */\nexport const FOCUSABLE =\n 'a[href],button:not([disabled]),input:not([disabled]):not([type=hidden]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\n/** Lists visible focusable descendants in DOM order. */\nexport function focusables(root: HTMLElement): HTMLElement[] {\n return [...root.querySelectorAll<HTMLElement>(FOCUSABLE)].filter(\n (node) => !node.hasAttribute('hidden') && node.getAttribute('aria-hidden') !== 'true',\n );\n}\n","const C = 'M12 3a9 9 0 1 0 0 18a9 9 0 0 0 0-18z';\n\n/** Built-in icon names. */\nexport type IconName =\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'question'\n | 'loading'\n | 'close'\n | 'trash'\n | 'lock'\n | 'shield'\n | 'check';\n\nexport const PATHS: Record<IconName, string> = {\n success: `${C}M8 12.4l2.6 2.6L16 9.4`,\n error: `${C}M9 9l6 6M15 9l-6 6`,\n warning: 'M12 3.5l9.2 16H2.8z M12 10v4.2M12 17.2h.01',\n info: `${C}M12 11v5.2M12 7.8h.01`,\n question: `${C}M9.6 9.6a2.5 2.5 0 1 1 3.6 2.2c-.8.4-1.2 1-1.2 1.8M12 17h.01`,\n loading: 'M12 3a9 9 0 1 0 9 9',\n close: 'M6 6l12 12M18 6L6 18',\n trash:\n 'M3 6h18 M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2 M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6',\n lock: 'M7 11V7a5 5 0 0 1 10 0v4 M5 11h14a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2z',\n shield: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z',\n check: 'M20 6L9 17l-5-5',\n};\n\nconst SVG_HEAD =\n 'viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"';\n\n/**\n * Builds an inline SVG for a built-in icon. The SVG is decorative (`aria-hidden`) because\n * every toast and dialog states its meaning in text as well.\n */\nexport function icon(name: IconName): SVGElement {\n const p = PATHS[name] ?? PATHS.info;\n const cls = name === 'loading' ? ' class=\"gk-spin\"' : '';\n const div = document.createElement('div');\n div.innerHTML = `<svg ${SVG_HEAD}${cls}><path d=\"${p}\"/></svg>`;\n return div.firstElementChild as SVGElement;\n}\n\n/** Maps a toast type to its built-in icon name, if any. */\nexport function iconForType(type: string): IconName | undefined {\n return type === 'success' ||\n type === 'error' ||\n type === 'warning' ||\n type === 'info' ||\n type === 'loading'\n ? type\n : undefined;\n}\n","import { hasDom } from './dom';\n\n/** Function that turns untrusted HTML into safe HTML. Compatible with `DOMPurify.sanitize`. */\nexport type Sanitizer = (html: string) => string;\n\nlet custom: Sanitizer | undefined;\n\n/**\n * Replaces the built-in sanitizer, for example with DOMPurify:\n * `setSanitizer((html) => DOMPurify.sanitize(html))`.\n * Pass `undefined` to restore the built-in allowlist sanitizer.\n */\nexport function setSanitizer(fn: Sanitizer | undefined): void {\n custom = fn;\n}\n\nconst TAGS = new Set(\n 'a,abbr,b,blockquote,br,code,div,em,h1,h2,h3,h4,h5,h6,hr,i,img,kbd,li,mark,ol,p,pre,s,small,span,strong,sub,sup,u,ul'.split(\n ',',\n ),\n);\nconst ATTRS = new Set('href,src,alt,title,target,rel,width,height,lang,dir'.split(','));\nconst SAFE_URL =\n /^(?:https?:|mailto:|tel:|data:image\\/(?:png|jpe?g|webp|gif|svg\\+xml)[;,]|\\/|#|\\.\\/|\\.\\.\\/|[^:]*$)/i;\n\n/** Whether a URL is safe to place in `href` or `src`. Rejects `javascript:` and similar schemes. */\nexport function safeUrl(url: string): boolean {\n // eslint-disable-next-line no-control-regex -- control character stripping is essential for url security\n return SAFE_URL.test(url.replace(/[\\s\\u0000-\\u001f]/g, ''));\n}\n\nfunction walk(parent: Node): void {\n for (const node of [...parent.childNodes]) {\n if (node.nodeType === 3) continue;\n if (node.nodeType !== 1) {\n parent.removeChild(node);\n continue;\n }\n const element = node as Element;\n const tag = element.tagName.toLowerCase();\n if (!TAGS.has(tag)) {\n if (!/^(script|style|iframe|object|template)$/.test(tag)) {\n walk(element);\n while (element.firstChild) parent.insertBefore(element.firstChild, element);\n }\n parent.removeChild(element);\n continue;\n }\n for (const attr of [...element.attributes]) {\n const name = attr.name.toLowerCase();\n if (!ATTRS.has(name) || ((name === 'href' || name === 'src') && !safeUrl(attr.value)))\n element.removeAttribute(attr.name);\n }\n if (element.getAttribute('target') === '_blank')\n element.setAttribute('rel', 'noopener noreferrer');\n walk(element);\n }\n}\n\n/**\n * Parses untrusted HTML into an inert fragment containing only allowlisted tags and attributes.\n * Scripts, event handlers, styles and `javascript:` URLs are removed.\n * Returns `null` when no DOM exists.\n */\nexport function sanitizeToFragment(html: string): DocumentFragment | null {\n if (!hasDom()) return null;\n const pur = (globalThis as { DOMPurify?: { sanitize(h: string): string } }).DOMPurify;\n const external = custom ?? (pur ? (v: string) => pur.sanitize(v) : undefined);\n const template = document.createElement('template');\n template.innerHTML = external ? external(html) : html;\n if (!external) walk(template.content);\n return template.content;\n}\n","export function resolveVariant(\n _themeName: string,\n variant: string | undefined,\n): string | undefined {\n return variant;\n}\n","import type { BuiltInSoundCue, SoundCue, ToastType } from '../core';\n\n/** A single frequency note in a sound cue: [frequency in Hz, start offset in seconds, gain level 0..1]. */\nexport type SoundNote = [frequency: number, offset: number, level: number];\n\nlet audioCtx: AudioContext | undefined;\n\n/** Built-in melodic sound cues synthesized with Web Audio partials. */\nconst CUES: Record<string, SoundNote[]> = {\n success: [\n [392, 0, 1],\n [523, 0.1, 1],\n ],\n error: [\n [233, 0, 1],\n [185, 0.13, 1],\n ],\n warning: [\n [349, 0, 0.8],\n [349, 0.16, 0.6],\n ],\n info: [[466, 0, 0.9]],\n ding: [\n [659, 0, 0.9],\n [880, 0.08, 1],\n ],\n pop: [\n [440, 0, 0.7],\n [880, 0.03, 0.9],\n ],\n chime: [\n [523, 0, 0.8],\n [659, 0.09, 0.85],\n [784, 0.18, 1],\n ],\n bell: [\n [587, 0, 1],\n [1175, 0.04, 0.5],\n ],\n message: [\n [440, 0, 0.8],\n [659, 0.12, 0.9],\n ],\n bubble: [\n [330, 0, 0.6],\n [494, 0.06, 0.8],\n ],\n marimba: [\n [523, 0, 1],\n [659, 0.06, 0.9],\n [784, 0.12, 1],\n [1047, 0.18, 0.8],\n ],\n crystal: [\n [880, 0, 0.8],\n [1319, 0.08, 0.9],\n [1760, 0.16, 0.7],\n ],\n subtle: [[440, 0, 0.6]],\n harp: [\n [392, 0, 0.7],\n [494, 0.05, 0.8],\n [587, 0.1, 0.9],\n [784, 0.15, 1],\n ],\n};\n\nconst getAudioCtxClass = () =>\n typeof window !== 'undefined'\n ? window.AudioContext ||\n (window as unknown as { webkitAudioContext?: typeof AudioContext }).webkitAudioContext\n : undefined;\n\n/** Returns whether Web Audio is available in the current environment. */\nexport const isAudioSupported = (): boolean => Boolean(getAudioCtxClass());\n\n/** Returns the list of registered sound cue names. */\nexport const getSoundCues = (): readonly string[] => Object.keys(CUES);\n\n/** Registers or overrides a sound cue with custom frequency partials. */\nexport const registerSoundCue = (name: string, notes: SoundNote[]): void => {\n CUES[name] = notes;\n};\n\nconst MALLET = [\n [1, 0.6, 0.5],\n [2, 0.06, 0.15],\n] as const;\n\nfunction playTone(c: AudioContext, out: AudioNode, freq: number, at: number, level: number): void {\n const t = c.currentTime + at;\n const f = freq * (1 + (Math.random() - 0.5) * 0.008);\n for (const [m, gain, decay] of MALLET) {\n const osc = c.createOscillator();\n const g = c.createGain();\n osc.frequency.value = f * m;\n g.gain.setValueAtTime(1e-4, t);\n g.gain.linearRampToValueAtTime(gain * level, t + 0.015);\n g.gain.exponentialRampToValueAtTime(1e-4, t + decay);\n osc.connect(g).connect(out);\n osc.start(t);\n osc.stop(t + decay + 0.05);\n }\n}\n\nexport function playSound(cueOrType?: SoundCue | ToastType | boolean | string, volume = 0.5): void {\n if (!cueOrType || typeof window === 'undefined') return;\n const target = cueOrType === true ? 'info' : String(cueOrType);\n const vol = Math.min(1, Math.max(0, volume));\n\n if (/^(https?:|data:audio|blob:)/.test(target)) {\n try {\n const a = new Audio(target);\n a.volume = vol;\n void a.play().catch(() => undefined);\n } catch {\n // ignore\n }\n return;\n }\n\n const notes = CUES[target];\n const Ctx = notes && getAudioCtxClass();\n if (!notes || !Ctx) return;\n\n try {\n audioCtx ??= new Ctx();\n if (audioCtx.state === 'suspended') void audioCtx.resume();\n if (audioCtx.state === 'closed') return;\n\n const master = audioCtx.createGain();\n master.gain.value = vol * 0.45;\n const soften = audioCtx.createBiquadFilter();\n soften.frequency.value = 1300;\n master.connect(soften).connect(audioCtx.destination);\n for (const [freq, offset, level] of notes) playTone(audioCtx, master, freq, offset, level);\n } catch {\n // ignore\n }\n}\n\n/** Alias for playSound for backward compatibility with chime references. */\nexport const chime = playSound;\n\n/** Helper to resolve which sound to play for a toast record. */\nexport function resolveToastSound(\n recordSound: boolean | SoundCue | string | ((type: ToastType) => void) | undefined,\n globalSound: boolean | SoundCue | undefined,\n toastType: ToastType,\n): SoundCue | string | undefined {\n if (recordSound === false) return undefined;\n if (typeof recordSound === 'string') return recordSound;\n if (typeof recordSound === 'function') {\n try {\n recordSound(toastType);\n } catch {\n // Ignore errors in custom generator\n }\n return undefined;\n }\n if (recordSound === true || globalSound === true) {\n return CUES[toastType]\n ? (toastType as BuiltInSoundCue)\n : toastType === 'loading'\n ? 'bubble'\n : 'info';\n }\n return typeof globalSound === 'string' ? globalSound : undefined;\n}\n","import type {\n CloseReason,\n Direction,\n GlazeConfig,\n PauseOn,\n Renderable,\n SwipeDirection,\n ToastAvatarOption,\n ToastId,\n ToastPosition,\n ToastRecord,\n ToastStore,\n} from '../core';\nimport { el, fill, hasDom, prefersDark, prefersReducedMotion } from './dom';\nimport { icon, iconForType, PATHS } from './icons';\nimport type { IconName } from './icons';\nimport { safeUrl, sanitizeToFragment } from './sanitize';\nimport { resolveVariant } from './variants';\nimport { playSound, resolveToastSound } from './sound';\n\nconst COLORS = ['#38bdf8', '#818cf8', '#ec4899', '#f97316', '#10b981', '#6366f1', '#eab308'];\n\nfunction deterministicColor(str: string): string {\n let h = 0;\n for (let i = 0; i < str.length; i++) h = (h * 31 + str.charCodeAt(i)) >>> 0;\n return COLORS[h % 7] as string;\n}\n\nfunction formatRelativeTime(ts: number | Date | string | boolean, locale = 'en'): string {\n if (typeof ts === 'string') return ts;\n if (ts === true) return 'now';\n const min = Math.round(\n (Date.now() - (ts instanceof Date ? ts.getTime() : Number(ts) || Date.now())) / 6e4,\n );\n if (!min) return 'now';\n const [v, u] =\n min < 60\n ? [min, 'minute']\n : min < 1440\n ? [Math.round(min / 60), 'hour']\n : [Math.round(min / 1440), 'day'];\n try {\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(\n -v,\n u as Intl.RelativeTimeFormatUnit,\n );\n } catch {\n return `${v}${u[0]} ago`;\n }\n}\n\n/** Options passed when mounting the DOM toaster. */\nexport interface ToasterOptions {\n /** Target element or selector to host regions. */\n container?: string | HTMLElement;\n /** Whether to mount inside a Shadow DOM root. */\n shadow?: boolean | 'open' | 'closed';\n}\n\n/** Handle of a mounted toast renderer. */\nexport interface ToasterHandle {\n /** Removes all DOM and listeners. */\n destroy(): void;\n /** Moves focus to the newest toast. Returns whether a toast was focused. */\n focus(): boolean;\n}\n\ninterface Item {\n el: HTMLElement;\n record: ToastRecord;\n stamp: string;\n hover: boolean;\n swiping: boolean;\n height: number;\n measured: boolean;\n}\n\ninterface Region {\n key: string;\n el: HTMLElement;\n list: HTMLElement;\n items: Map<ToastId, Item>;\n hover: boolean;\n focus: boolean;\n}\n\nconst stampOf = (record: ToastRecord): string =>\n `${record.updatedAt}:${record.timerEpoch}:${record.count}`;\n\nconst INTERACTIVE = 'button,a,input,select,textarea,[role=button]';\n\n/** Default swipe directions for a position: toward the nearest screen edge. */\nfunction getRobotSvg(c: string): string {\n const dot = (x: number, y = 18) => `<circle cx=\"${x}\" cy=\"${y}\" r=\"2\" fill=\"currentColor\"/>`;\n const eyes = dot(12) + dot(20);\n const ant = '<path d=\"M16 4v6M12 4h8\"/>';\n const map: Record<string, string> = {\n wave: `${eyes}${ant}<path d=\"M2 14l4 4M30 10l-4 4\"/>`,\n success: `<path d=\"M11 18l3 3 7-7\"/>${ant}`,\n error: `<path d=\"M12 16l8 8M20 16l-8 8\"/>${ant}`,\n think: `${eyes}<path d=\"M12 22h8M16 4v6\"/>`,\n loading:\n '<circle cx=\"16\" cy=\"18\" r=\"4\" stroke-dasharray=\"16\" stroke-linecap=\"round\"/><path d=\"M16 4v6\"/>',\n sleep: '<path d=\"M10 18h4M18 18h4M16 4v6\"/>',\n shock: `${dot(12, 16)}${dot(20, 16)}${dot(16, 22)}<path d=\"M16 4v6\"/>`,\n search: '<circle cx=\"14\" cy=\"18\" r=\"4\"/><path d=\"M17 21l4 4M16 4v6\"/>',\n headPalm: `${dot(12)}<path d=\"M18 16h6v6M16 4v6\"/>`,\n };\n return `<svg viewBox=\"0 0 32 32\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"${c === 'loading' ? ' class=\"gk-spin\"' : ''}><rect x=\"6\" y=\"10\" width=\"20\" height=\"16\" rx=\"4\"/>${map[c] ?? eyes + ant}</svg>`;\n}\n\nexport function defaultSwipe(position?: ToastPosition): SwipeDirection[] {\n void position;\n return ['up', 'down', 'left', 'right'];\n}\n\n/** Parses `alt+t` style hotkeys. Returns `undefined` for an empty or invalid string. */\nexport function parseHotkey(\n hotkey: string,\n): { alt: boolean; ctrl: boolean; shift: boolean; meta: boolean; code: string } | undefined {\n const parts = hotkey\n .toLowerCase()\n .split('+')\n .map((p) => p.trim())\n .filter(Boolean);\n const key = parts.find((p) => !/^(alt|ctrl|control|shift|meta|cmd)$/.test(p));\n if (!key) return undefined;\n return {\n alt: parts.includes('alt'),\n ctrl: parts.some((p) => p === 'ctrl' || p === 'control'),\n shift: parts.includes('shift'),\n meta: parts.some((p) => p === 'meta' || p === 'cmd'),\n code: /^[a-z]$/.test(key) ? `Key${key.toUpperCase()}` : /^\\d$/.test(key) ? `Digit${key}` : key,\n };\n}\n\n/** Detects whether the host document has an explicit dark mode via .dark class or data attribute. */\nexport function isDocumentDark(): boolean {\n if (!hasDom()) return false;\n return [document.documentElement, document.body].some(\n (el) =>\n el?.classList.contains('dark') ||\n el?.getAttribute('data-theme') === 'dark' ||\n el?.getAttribute('data-gk-mode') === 'dark',\n );\n}\n\n/** Resolves the mode attribute value, flipping it for inverted toasts. */\nexport function resolveMode(mode: GlazeConfig['mode'], invert: boolean): string {\n if (!invert) return mode;\n return mode === 'dark' || (mode === 'auto' && (isDocumentDark() || prefersDark()))\n ? 'light'\n : 'dark';\n}\n\n/**\n * Mounts the DOM renderer for a toast store. Call only in a browser.\n * The renderer creates one labelled region per placement, reconciles toasts into it, and handles\n * pausing, swiping, stacking and keyboard access.\n */\nexport function mountToaster(store: ToastStore, options?: ToasterOptions): ToasterHandle {\n const regions = new Map<string, Region>();\n const cleanups: (() => void)[] = [];\n let lastFocus: Element | null = null;\n let pendingHost = false;\n let shadowRoot: ShadowRoot | undefined;\n\n const cfg = (): Readonly<GlazeConfig> => store.config.get();\n const pauseSet = (record: ToastRecord): PauseOn[] => record.pauseOn ?? cfg().pauseOn;\n const flag = (value: boolean | undefined, fallback: boolean): boolean => value ?? fallback;\n\n const hostFor = (container: string | undefined): HTMLElement | ShadowRoot | null => {\n const target = container ?? options?.container ?? cfg().container;\n const parent =\n typeof target === 'string'\n ? ((document.getElementById(target) || document.querySelector<HTMLElement>(target)) ??\n document.body)\n : target instanceof HTMLElement\n ? target\n : document.body;\n\n if (!parent) return null;\n\n if (options?.shadow) {\n if (!shadowRoot) {\n let portalHost = parent.querySelector<HTMLElement>('#gk-shadow-portal');\n if (!portalHost) {\n portalHost = el('div', 'gk-portal', { id: 'gk-shadow-portal' });\n parent.append(portalHost);\n }\n shadowRoot = portalHost.shadowRoot ?? portalHost.attachShadow({ mode: 'open' });\n if (!shadowRoot.querySelector('style[data-gk-styles]')) {\n const style = el('style', '', { 'data-gk-styles': '' });\n style.textContent = `\n :host { all: initial; }\n .gk-region { position: fixed; z-index: var(--gk-z, 2147483000); }\n `;\n shadowRoot.append(style);\n }\n }\n return shadowRoot;\n }\n\n return parent;\n };\n\n const raf = (fn: () => void): void => {\n if (prefersReducedMotion() || typeof requestAnimationFrame !== 'function') fn();\n else requestAnimationFrame(() => requestAnimationFrame(fn));\n };\n\n const setPause = (region: Region, on: boolean, reason: PauseOn): void => {\n for (const item of region.items.values()) {\n if (!pauseSet(item.record).includes(reason)) continue;\n if (on) store.pause(item.record.id, reason);\n else store.resume(item.record.id, reason);\n }\n };\n\n const layout = (region: Region): void => {\n const stackConfig = cfg().stack;\n const stackMode: 'stacked' | 'expanded' | 'list' =\n stackConfig === false || stackConfig === 'list'\n ? 'list'\n : stackConfig === 'expanded'\n ? 'expanded'\n : 'stacked';\n\n const isExpanded =\n stackMode === 'expanded' || stackMode === 'list' || region.hover || region.focus;\n const newestOnTop = cfg().newestOnTop !== false;\n const rawItems = [...region.items.values()];\n const list = newestOnTop ? rawItems.reverse() : rawItems;\n const gap = cfg().gap;\n const isTop =\n region.key.includes('top-') ||\n region.key.endsWith('|center') ||\n region.key.endsWith('|middle');\n let offset = 0;\n let front = 0;\n let activeIdx = 0;\n\n list.forEach((item) => {\n const height = item.measured && item.height > 0 ? item.height : item.el.offsetHeight || 50;\n if (item.record.dismissed) return;\n const index = activeIdx++;\n if (index === 0) front = height;\n item.el.style.setProperty('--gk-index', String(index));\n item.el.style.setProperty('--gk-offset', `${offset}px`);\n item.el.style.setProperty('--gk-height', `${height}px`);\n item.el.style.zIndex = String(1000 - index);\n\n if (index > 2) {\n item.el.dataset.far = '';\n } else {\n delete item.el.dataset.far;\n }\n offset += height + gap;\n });\n\n const total = Math.max(0, offset - gap);\n region.el.style.setProperty('--gk-front', `${front}px`);\n region.el.style.setProperty('--gk-total', `${total}px`);\n region.el.style.setProperty('--gk-dir', isTop ? '1' : '-1');\n region.el.style.setProperty('--gk-gap', `${gap}px`);\n region.el.dataset.stackMode = stackMode;\n region.el.dataset.expanded = String(isExpanded);\n region.el.style.height = `${isExpanded ? total : front}px`;\n region.list.style.pointerEvents = isExpanded ? 'auto' : '';\n };\n\n // Max one ResizeObserver per container\n let resizeObserver: ResizeObserver | undefined;\n if (typeof ResizeObserver === 'function') {\n resizeObserver = new ResizeObserver((entries) => {\n let changed = false;\n for (const entry of entries) {\n const target = entry.target as HTMLElement;\n for (const r of regions.values()) {\n for (const item of r.items.values()) {\n if (item.el === target) {\n const h = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height;\n if (Math.abs(item.height - h) > 1) {\n item.height = h;\n item.measured = true;\n changed = true;\n }\n }\n }\n }\n }\n if (changed) regions.forEach(layout);\n });\n }\n\n const ensureRegion = (record: ToastRecord): Region | undefined => {\n const key = `${record.container ?? ''}|${record.position}`;\n const existing = regions.get(key);\n if (existing) return existing;\n const host = hostFor(record.container);\n if (!host) return undefined;\n const list = el('ol', 'gk-toast-list gk-list', { role: 'presentation', tabindex: '-1' });\n const root = el(\n 'section',\n 'gk-region gk-root',\n { 'aria-label': cfg().regionLabel, tabindex: '-1', role: 'region' },\n list,\n );\n const region: Region = { key, el: root, list, items: new Map(), hover: false, focus: false };\n root.dataset.position = record.position;\n if (host !== document.body) root.dataset.contained = '';\n const refresh = (): void => layout(region);\n\n const onEv = (prop: 'hover' | 'focus', on: boolean): void => {\n region[prop] = on;\n setPause(region, on, prop);\n refresh();\n };\n root.addEventListener('pointerenter', () => onEv('hover', true));\n root.addEventListener('pointerleave', () => onEv('hover', false));\n root.addEventListener('focusin', () => onEv('focus', true));\n root.addEventListener('focusout', (e) => {\n if (e.relatedTarget instanceof Node && root.contains(e.relatedTarget)) return;\n onEv('focus', false);\n });\n root.addEventListener('keydown', (event) => {\n const target = (event.target as Element).closest<HTMLElement>('.gk-toast');\n const item = target\n ? [...region.items.values()].find((entry) => entry.el === target)\n : undefined;\n\n if (event.key === 'Escape') {\n if (!item || item.record.dismissible === false) return;\n event.stopPropagation();\n store.dismiss(item.record.id, 'user');\n (lastFocus as HTMLElement | null)?.focus?.();\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n const toastNodes = [...region.items.values()].map((i) => i.el);\n if (toastNodes.length <= 1) return;\n const currentIdx = target ? toastNodes.indexOf(target) : -1;\n const nextIdx =\n event.key === 'ArrowDown'\n ? (currentIdx + 1) % toastNodes.length\n : (currentIdx - 1 + toastNodes.length) % toastNodes.length;\n toastNodes[nextIdx]?.focus();\n }\n });\n\n host.append(root);\n regions.set(key, region);\n return region;\n };\n\n const close = (id: ToastId, reason: CloseReason): void => store.dismiss(id, reason);\n\n const button = (\n cls: string,\n spec: { label: string; ariaLabel?: string },\n record: ToastRecord,\n reason: CloseReason,\n onClick: ((event: { preventDefault(): void; defaultPrevented: boolean }) => void) | undefined,\n ): HTMLButtonElement => {\n const node = el('button', cls, { type: 'button', 'aria-label': spec.ariaLabel }, spec.label);\n node.addEventListener('click', (event) => {\n event.stopPropagation();\n let p = false;\n onClick?.({\n preventDefault: () => {\n p = true;\n },\n get defaultPrevented() {\n return p;\n },\n });\n if (!p) close(record.id, reason);\n });\n return node;\n };\n\n const build = (item: Item): void => {\n const record = item.record;\n item.stamp = stampOf(record);\n const c = cfg();\n const names = record.classNames ?? {};\n const unstyled = record.unstyled === true;\n const k = (base: string, extra?: string, short = base): string => {\n const cls = unstyled ? '' : `gk-toast__${base} gk-${short}`;\n return extra ? (cls ? `${cls} ${extra}` : extra) : cls;\n };\n const node = item.el;\n node.replaceChildren();\n node.className = [\n unstyled ? '' : `gk-toast gk-toast--${record.type}`,\n names.toast,\n record.className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const content = el('div', k('content', names.content));\n if (record.custom) {\n fill(\n content,\n record.custom({\n id: record.id,\n dismiss: () => close(record.id, 'api'),\n update: (patch) => void store.update(record.id, patch),\n }) as Renderable,\n );\n } else {\n const char = record.character ?? record.robotVariant;\n const hasMascot = Boolean(char || record.avatar);\n\n if (record.badge !== undefined) {\n const bObj =\n typeof record.badge === 'object' && record.badge !== null ? record.badge : undefined;\n const tone: string = bObj ? (bObj.tone ?? 'info') : (record.badge as string);\n const badgeEl = el('div', k('badge', names.badge), {\n 'aria-hidden': 'true',\n 'data-tone': tone,\n });\n if (bObj && bObj.icon) fill(badgeEl, bObj.icon);\n else if (bObj && bObj.label) badgeEl.textContent = bObj.label;\n else if (typeof record.badge === 'string' && !PATHS[tone as IconName])\n badgeEl.textContent = record.badge;\n else badgeEl.append(icon((PATHS[tone as IconName] ? tone : 'info') as IconName));\n node.append(badgeEl);\n } else if (!hasMascot || record.icon !== undefined) {\n const customIcon = record.icon;\n const builtIn = customIcon === undefined ? iconForType(record.type) : undefined;\n const typeDef = store.types.get(record.type);\n const iconValue = customIcon === undefined ? typeDef?.icon : customIcon;\n if (customIcon !== false && (builtIn || iconValue !== undefined)) {\n const holder = el('div', k('icon', names.icon), {\n 'aria-hidden': 'true',\n });\n const a = record.iconAnimation ?? c.iconAnimation;\n const anim =\n record.animateIcon === false\n ? 'none'\n : (a ?? (record.type === 'loading' ? 'spin' : 'pop'));\n if (anim !== 'none') holder.dataset.iconAnim = anim;\n if (builtIn) holder.append(icon(builtIn));\n else fill(holder, iconValue);\n node.append(holder);\n }\n }\n\n if (char) {\n const holder = el(\n 'div',\n `${k('avatar', names.avatar)}${unstyled ? '' : ' gk-character'}`.trim(),\n );\n holder.innerHTML = getRobotSvg(char);\n node.append(holder);\n }\n\n if (record.image) {\n const imgSrc = typeof record.image === 'string' ? record.image : record.image.src;\n if (imgSrc && safeUrl(imgSrc)) {\n const imgEl = el('img', k('image', names.image, 'image'), {\n src: imgSrc,\n alt: typeof record.image === 'object' ? (record.image.alt ?? '') : '',\n });\n node.prepend(imgEl);\n }\n }\n\n if (record.avatar !== undefined) {\n const holder = el('div', k('avatar', names.avatar));\n const av = record.avatar;\n if (typeof av === 'object' && av !== null && !('nodeType' in av)) {\n const opt = av as ToastAvatarOption;\n const src = opt.src && safeUrl(opt.src) ? opt.src : '';\n const renderInitials = (): void => {\n const init =\n opt.initials ??\n (opt.name\n ? opt.name\n .split(' ')\n .map((w) => w[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n : typeof record.title === 'string'\n ? record.title.slice(0, 2).toUpperCase()\n : '?');\n holder.textContent = init;\n holder.style.cssText = `background:${opt.color ?? deterministicColor(opt.name ?? init)};color:#fff`;\n };\n if (src) {\n const imgEl = el('img', '', {\n src,\n alt: opt.alt ?? opt.name ?? '',\n });\n imgEl.addEventListener('error', () => {\n imgEl.remove();\n renderInitials();\n });\n holder.append(imgEl);\n } else {\n renderInitials();\n }\n } else if (typeof av === 'string') {\n const imgEl = el('img', '', { src: safeUrl(av) ? av : '', alt: '' });\n imgEl.addEventListener('error', () => {\n imgEl.style.display = 'none';\n if (!holder.textContent) {\n const init =\n typeof record.title === 'string' ? record.title.slice(0, 2).toUpperCase() : '?';\n holder.textContent = init;\n holder.style.cssText = 'background:var(--gk-accent);color:#fff';\n }\n });\n holder.append(imgEl);\n } else fill(holder, av as Renderable);\n node.append(holder);\n }\n\n if (record.title) {\n const title = el('div', k('title', names.title));\n fill(title, record.title);\n if (record.count > 1) {\n title.append(\n el('span', k('count', names.count), { 'aria-hidden': 'true' }, `${record.count}`),\n );\n }\n content.append(title);\n } else if (record.count > 1) {\n content.append(\n el('span', k('count', names.count), { 'aria-hidden': 'true' }, `${record.count}`),\n );\n }\n if (record.description || record.html) {\n const desc = el('div', k('description', names.description, 'desc'));\n fill(desc, record.description);\n if (record.html) {\n const fragment = sanitizeToFragment(record.html);\n if (fragment) desc.append(fragment);\n }\n content.append(desc);\n }\n\n if (record.progressValue !== undefined) {\n const pct = Math.max(0, Math.min(100, Math.round(record.progressValue * 100)));\n const fillEl = el('i', 'gk-progress-fill');\n fillEl.style.width = `${pct}%`;\n const track = el(\n 'div',\n 'gk-toast__track gk-track',\n {\n role: 'progressbar',\n 'aria-label': record.progressLabel ?? 'Progress',\n 'aria-valuenow': String(pct),\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n ...(record.progressLabel ? { 'aria-valuetext': record.progressLabel } : {}),\n },\n fillEl,\n );\n content.append(track);\n }\n }\n const body =\n record.href && safeUrl(record.href)\n ? el(\n 'a',\n k('link', names.link),\n {\n href: record.href,\n target: record.target ?? '_self',\n rel: record.target === '_blank' ? 'noopener noreferrer' : undefined,\n },\n content,\n )\n : content;\n node.append(body);\n\n const cText = record.closeText ?? record.discardText;\n const cIcon = record.closeIcon ?? record.discardIcon;\n const showClose =\n (flag(record.closeButton, c.closeButton) || Boolean(cText || cIcon)) &&\n record.dismissible !== false;\n\n const onCloseClick = (e: MouseEvent): void => {\n e.stopPropagation();\n close(record.id, 'user');\n };\n\n if (record.timestamp || record.kbd || (showClose && cText)) {\n const meta = el('div', k('meta', names.meta));\n if (record.timestamp) {\n meta.append(\n el(\n 'time',\n k('time', names.time),\n {},\n formatRelativeTime(record.timestamp, record.timestampLocale),\n ),\n );\n }\n if (record.kbd) meta.append(el('kbd', k('kbd', names.kbd), {}, record.kbd));\n if (showClose && cText) {\n const closeBtn = el(\n 'button',\n k('close', names.closeButton, 'close gk-close--text'),\n {\n type: 'button',\n 'aria-label': record.closeButtonLabel ?? cText,\n },\n cText,\n );\n closeBtn.addEventListener('click', onCloseClick);\n meta.append(closeBtn);\n }\n node.append(meta);\n }\n\n if (record.toggle) {\n const tg = record.toggle;\n const sw = el('button', 'gk-toast__switch gk-sw', {\n type: 'button',\n role: 'switch',\n 'aria-checked': String(Boolean(tg.checked)),\n 'aria-label': tg.label ?? 'Toggle option',\n });\n sw.addEventListener('click', (e) => {\n e.stopPropagation();\n const next = sw.getAttribute('aria-checked') !== 'true';\n sw.setAttribute('aria-checked', String(next));\n tg.onChange?.(next);\n });\n node.append(sw);\n }\n\n if (\n record.progress === 'ring' ||\n record.variant === 'countdown-ring' ||\n record.variant === 'progress-ring'\n ) {\n const val =\n record.progressValue ??\n (record.duration > 0 ? store.getRemaining(record.id) / record.duration : 1);\n const dash = 100.5 * (1 - val);\n const div = document.createElement('div');\n const c = '<circle cx=\"18\" cy=\"18\" r=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"';\n div.innerHTML = `<svg viewBox=\"0 0 36 36\" class=\"gk-ring-svg\">${c} opacity=\"0.2\"/>${c} stroke-dasharray=\"100.5\" stroke-linecap=\"round\" stroke-dashoffset=\"${dash}\"/></svg>`;\n node.append(div.firstElementChild as Element);\n }\n\n if (record.actions?.length) {\n const actionsDiv = el('div', k('actions', names.actions));\n for (const act of record.actions) {\n const label = act.label ?? act.text ?? 'Action';\n const actBtn = el(\n 'button',\n `gk-toast__action gk-btn gk-action gk-btn--${act.kind ?? 'secondary'}`,\n { type: 'button', 'aria-label': label },\n label,\n );\n actBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n act.onClick?.(e);\n if (act.autoDismiss !== false && !e.defaultPrevented) close(record.id, 'action');\n });\n actionsDiv.append(actBtn);\n }\n node.append(actionsDiv);\n } else if (record.action || record.cancel) {\n const actions = el('div', k('actions', names.actions));\n if (record.cancel) {\n actions.append(\n button(\n k('cancel', names.cancelButton, 'btn gk-cancel gk-cancel-btn'),\n record.cancel,\n record,\n 'cancel',\n record.cancel.onClick,\n ),\n );\n }\n if (record.action) {\n actions.append(\n button(\n k('action', names.actionButton, 'btn gk-action gk-action-btn'),\n record.action,\n record,\n 'action',\n record.action.onClick,\n ),\n );\n }\n node.append(actions);\n }\n\n if (showClose && !cText) {\n const closeBtn = el('button', k('close', names.closeButton), {\n type: 'button',\n 'aria-label': record.closeButtonLabel ?? c.closeLabel ?? 'Close notification',\n });\n if (cIcon) fill(closeBtn, cIcon);\n else closeBtn.append(icon('close'));\n closeBtn.addEventListener('click', onCloseClick);\n node.append(closeBtn);\n }\n const showBar =\n record.duration > 0 &&\n (record.progress === 'bar' ||\n (record.progress !== 'none' &&\n record.progress !== 'ring' &&\n flag(record.progress as boolean | undefined, c.progress)));\n if (showBar) {\n const bar = el('i');\n bar.style.setProperty('--gk-d', `${record.duration}ms`);\n bar.style.setProperty(\n '--gk-delay',\n `-${Math.max(0, record.duration - store.getRemaining(record.id))}ms`,\n );\n node.append(el('div', k('progress', names.progress), { 'aria-hidden': 'true' }, bar));\n }\n item.stamp = stampOf(record);\n };\n\n const syncAttrs = (item: Item): void => {\n const record = item.record;\n const c = cfg();\n const node = item.el;\n const set = (name: string, value: string | undefined): void => {\n if (value === undefined) node.removeAttribute(name);\n else node.setAttribute(name, value);\n };\n const toggle = (name: string, condition: unknown): void => {\n node.toggleAttribute(name, Boolean(condition));\n };\n\n const hostEl =\n (record.container ? document.getElementById(record.container) : undefined) ??\n node.parentElement?.closest('[data-gk-theme]');\n const themeName = record.theme ?? hostEl?.getAttribute('data-gk-theme') ?? c.theme;\n const activeVariant = resolveVariant(themeName, record.variant);\n set('data-gk-variant', activeVariant);\n\n const isHud = record.hud || activeVariant === 'hud-silent';\n set('role', isHud ? 'status' : record.role);\n set('aria-live', isHud ? 'polite' : record.ariaLive);\n toggle('data-hud', isHud);\n set('aria-atomic', 'true');\n set('data-type', record.type);\n set('data-gk-theme', themeName);\n set('data-gk-mode', resolveMode(c.mode, flag(record.invert, c.invert)));\n set('data-dir', record.dir ?? c.dir);\n set('dir', (record.dir ?? c.dir) === 'auto' ? undefined : (record.dir ?? c.dir));\n set('data-animation', record.animation ?? c.animation ?? 'slide');\n toggle('data-shake', record.shake || activeVariant === 'shake-error');\n toggle('data-glow', record.glow);\n toggle('data-gradient-border', record.gradientBorder || activeVariant === 'gradient-border');\n toggle('data-group', record.group);\n toggle('data-island', record.island || activeVariant === 'island');\n const typeColor = store.types.get(record.type)?.color;\n if (typeColor) node.style.setProperty('--gk-type', typeColor);\n toggle('data-rich', flag(record.richColors, c.richColors));\n toggle('data-dismissed', record.dismissed);\n set('data-state', record.dismissed ? 'exiting' : 'entered');\n toggle('data-paused', record.pausedBy.length > 0);\n toggle(\n 'data-wrap',\n record.description ||\n record.html ||\n (record.action && record.cancel) ||\n (record.actions && record.actions.length > 1),\n );\n toggle(\n 'data-has-close',\n flag(record.closeButton, c.closeButton) &&\n record.dismissible !== false &&\n !(record.closeText ?? record.discardText),\n );\n toggle(\n 'data-clickable',\n flag(record.closeOnClick, c.closeOnClick) && record.dismissible !== false,\n );\n if (record.style) {\n for (const key of Object.keys(record.style))\n node.style.setProperty(key, String(record.style[key]));\n }\n const dirs = record.swipeDirections ?? defaultSwipe(record.position);\n const horizontal = dirs.some((d) => d === 'left' || d === 'right');\n const vertical = dirs.some((d) => d === 'up' || d === 'down');\n node.style.touchAction =\n horizontal && !vertical ? 'pan-y' : vertical && !horizontal ? 'pan-x' : 'none';\n };\n\n const attachGestures = (item: Item): void => {\n const node = item.el;\n let start: { x: number; y: number; t: number } | undefined;\n\n const setS = (x: number, y: number, r = 0): void => {\n node.style.setProperty('--gk-sx', `${Math.round(x)}px`);\n node.style.setProperty('--gk-sy', `${Math.round(y)}px`);\n if (r) node.style.setProperty('--gk-rot', `${r.toFixed(1)}deg`);\n };\n\n const settings = () => ({\n dirs: item.record.swipeDirections ?? defaultSwipe(item.record.position),\n threshold: item.record.dragThreshold ?? cfg().dragThreshold,\n on: flag(item.record.swipe, cfg().swipe) && item.record.dismissible !== false,\n });\n\n const delta = (e: PointerEvent, dirs: SwipeDirection[]) => {\n const rx = e.clientX - (start?.x ?? 0),\n ry = e.clientY - (start?.y ?? 0);\n return {\n dx: dirs.includes(rx >= 0 ? 'right' : 'left') ? rx : rx * 0.18,\n dy: dirs.includes(ry >= 0 ? 'down' : 'up') ? ry : ry * 0.18,\n rx,\n ry,\n };\n };\n\n node.addEventListener('pointerenter', () => {\n item.hover = true;\n if (!cfg().stack && pauseSet(item.record).includes('hover'))\n store.pause(item.record.id, 'hover');\n });\n node.addEventListener('pointerleave', () => {\n item.hover = false;\n if (!cfg().stack) store.resume(item.record.id, 'hover');\n });\n node.addEventListener('click', (event) => {\n if (item.swiping || (event.target as Element).closest(INTERACTIVE)) return;\n item.record.onPress?.(item.record);\n if (flag(item.record.closeOnClick, cfg().closeOnClick)) close(item.record.id, 'click');\n });\n node.addEventListener('pointerdown', (e) => {\n if (!settings().on || e.button !== 0 || (e.target as Element).closest(INTERACTIVE)) return;\n start = { x: e.clientX, y: e.clientY, t: e.timeStamp };\n });\n node.addEventListener('pointermove', (e) => {\n if (!start) return;\n const { dx, dy } = delta(e, settings().dirs);\n if (!item.swiping) {\n if (Math.hypot(dx, dy) < 3) return;\n item.swiping = true;\n node.setPointerCapture?.(e.pointerId);\n node.dataset.swiping = '';\n store.pause(item.record.id, 'swipe');\n }\n setS(dx, dy, Math.max(-5, Math.min(5, dx * 0.028)));\n });\n const finish = (e: PointerEvent): void => {\n if (!start) return;\n const { dirs, threshold } = settings();\n const { dx, dy, rx, ry } = delta(e, dirs);\n const startT = start.t;\n const duration = Math.max(1, (e.timeStamp || performance.now()) - startT);\n const speed = Math.hypot(dx, dy) / duration;\n const wasSwiping = item.swiping;\n start = undefined;\n delete node.dataset.swiping;\n store.resume(item.record.id, 'swipe');\n\n const horiz = Math.abs(rx) >= Math.abs(ry);\n const out: SwipeDirection = horiz ? (rx >= 0 ? 'right' : 'left') : ry >= 0 ? 'down' : 'up';\n const dim = horiz ? node.offsetWidth || 350 : node.offsetHeight || 60;\n const limit = threshold <= 1 && threshold > 0 ? threshold * dim : threshold;\n const dist = Math.hypot(dx, dy);\n\n const isFlick = duration >= 40 && speed > 0.45 && dist > 15;\n if (wasSwiping && dirs.includes(out) && (dist >= limit || isFlick)) {\n node.dataset.swipeOut = out;\n node.dataset.flung = '';\n const len = dist || 1;\n const reach = Math.max(280, speed * 360);\n const fx = (dx / len) * reach;\n const fy = (dy / len) * reach;\n setS(fx, fy, Math.max(-10, Math.min(10, fx * 0.02)));\n close(item.record.id, 'swipe');\n } else setS(0, 0);\n setTimeout(() => {\n item.swiping = false;\n }, 50);\n };\n node.addEventListener('pointerup', finish);\n node.addEventListener('pointercancel', finish);\n };\n\n let rendering = false;\n let rerenderRequested = false;\n\n const render = (): void => {\n if (rendering) {\n rerenderRequested = true;\n return;\n }\n rendering = true;\n try {\n do {\n rerenderRequested = false;\n doRender();\n } while (rerenderRequested);\n } finally {\n rendering = false;\n }\n };\n\n const doRender = (): void => {\n if (!document.body && !pendingHost) {\n pendingHost = true;\n document.addEventListener(\n 'DOMContentLoaded',\n () => {\n pendingHost = false;\n render();\n },\n { once: true },\n );\n return;\n }\n const c = cfg();\n const visible = store.getToasts().filter((t) => t.visible);\n const seen = new Set<string>();\n for (const record of visible) {\n const region = ensureRegion(record);\n if (!region) continue;\n seen.add(`${region.key}#${String(record.id)}`);\n let item = region.items.get(record.id);\n if (!item) {\n item = {\n el: el('li'),\n record,\n stamp: '',\n hover: false,\n swiping: false,\n height: 0,\n measured: false,\n };\n item.el.dataset.mounted = 'false';\n item.el.tabIndex = -1;\n region.items.set(record.id, item);\n region.list.append(item.el);\n resizeObserver?.observe(item.el);\n attachGestures(item);\n const created = item;\n const cue = resolveToastSound(record.sound, c.sound, record.type);\n if (cue) {\n playSound(cue, record.soundVolume ?? c.soundVolume ?? 0.5);\n }\n raf(() => {\n created.el.dataset.mounted = 'true';\n });\n }\n item.record = record;\n syncAttrs(item);\n if (item.stamp !== stampOf(record)) build(item);\n }\n for (const region of regions.values()) {\n for (const [id, item] of region.items) {\n if (!seen.has(`${region.key}#${String(id)}`)) {\n resizeObserver?.unobserve(item.el);\n item.el.remove();\n region.items.delete(id);\n }\n }\n region.el.setAttribute('data-gk-theme', c.theme);\n region.el.setAttribute('data-gk-mode', c.mode);\n region.el.dataset.shadow = String(c.shadow);\n region.el.setAttribute('aria-label', c.regionLabel);\n const dir: Direction = c.dir;\n if (dir === 'auto') region.el.removeAttribute('dir');\n else region.el.setAttribute('dir', dir);\n\n // Offsets\n const setPx = (p: string, v: string | number | undefined) => {\n if (v !== undefined) region.el.style.setProperty(p, typeof v === 'number' ? `${v}px` : v);\n };\n const off = c.offset,\n isOff = typeof off === 'object' && off !== null;\n for (const s of ['top', 'bottom', 'left', 'right'] as const) {\n setPx(`--gk-offset-${s}`, isOff ? (off as Record<string, string | number>)[s] : off);\n }\n setPx('--gk-mobile-offset', c.mobileOffset);\n\n if (region.items.size === 0) {\n region.el.remove();\n regions.delete(region.key);\n } else layout(region);\n }\n };\n\n cleanups.push(store.subscribe(render), store.config.subscribe(render));\n\n const toggleHidden = (pause: boolean): void => {\n for (const t of store.getToasts()) {\n if (pauseSet(t).includes('hidden')) {\n if (pause) store.pause(t.id, 'hidden');\n else store.resume(t.id, 'hidden');\n }\n }\n };\n\n const focusNewest = (): boolean => {\n for (const region of regions.values()) {\n const last = [...region.items.values()].filter((i) => !i.record.dismissed).pop();\n if (last) {\n lastFocus = document.activeElement;\n last.el.focus();\n return true;\n }\n }\n return false;\n };\n\n const addEvt = (tgt: EventTarget, ev: string, fn: EventListener) => {\n tgt.addEventListener(ev, fn);\n cleanups.push(() => tgt.removeEventListener(ev, fn));\n };\n addEvt(document, 'visibilitychange', () => toggleHidden(document.visibilityState === 'hidden'));\n addEvt(window, 'blur', () => toggleHidden(true));\n addEvt(window, 'focus', () => toggleHidden(false));\n addEvt(window, 'resize', () => regions.forEach(layout));\n addEvt(document, 'keydown', ((event: KeyboardEvent) => {\n const spec = parseHotkey(cfg().hotkey);\n if (\n spec &&\n event.code === spec.code &&\n event.altKey === spec.alt &&\n event.ctrlKey === spec.ctrl &&\n event.shiftKey === spec.shift &&\n event.metaKey === spec.meta &&\n focusNewest()\n ) {\n event.preventDefault();\n }\n }) as EventListener);\n\n render();\n\n return {\n focus: focusNewest,\n destroy() {\n for (const fn of cleanups.splice(0)) fn();\n resizeObserver?.disconnect();\n for (const region of regions.values()) region.el.remove();\n regions.clear();\n shadowRoot?.host.remove();\n shadowRoot = undefined;\n },\n };\n}\n\n/** Whether the renderer can run in this environment. */\nexport function canMountToaster(): boolean {\n return hasDom() && typeof window !== 'undefined';\n}\n","import type { DialogBackdrop, GlazeConfig } from '../core';\nimport { el, focusables, prefersReducedMotion } from './dom';\n\n/** Options for the shared modal shell. */\nexport interface OverlayOptions {\n /** Backdrop style. Defaults to `blur`. */\n backdrop?: DialogBackdrop;\n /** Theme name. */\n theme: string;\n /** Color mode. */\n mode: GlazeConfig['mode'];\n /** Text direction. */\n dir: GlazeConfig['dir'];\n /** Extra class on the root. */\n className?: string;\n /** Called when Escape is pressed while this overlay is on top. */\n onEscape?: () => void;\n /** Called when the backdrop is clicked. */\n onBackdrop?: () => void;\n /** When false, Tab is not trapped (used for non-focusable overlays). Defaults to `true`. */\n trap?: boolean;\n}\n\n/** A mounted modal shell: backdrop, scroll lock, inert page, focus trap and focus restore. */\nexport interface Overlay {\n /** Fixed full-viewport container. Panels are appended here. */\n root: HTMLElement;\n /** Opens the transition. Call after the panel is attached. */\n show(): void;\n /** Starts the exit transition and releases the page. Resolves when the DOM is gone. */\n close(): Promise<void>;\n}\n\ntype HiddenNode = { node: Element; inert: boolean; aria: string | null };\nconst stack: Overlay[] = [];\nconst traps = new WeakMap<\n Overlay,\n { trap: boolean; onEscape?: () => void; hidden: HiddenNode[] }\n>();\nlet locks = 0;\nlet savedOverflow = '';\nlet savedPadding = '';\n\nfunction restoreHidden(list: HiddenNode[]): void {\n for (const saved of list) {\n if (!saved.inert) saved.node.removeAttribute('inert');\n if (saved.aria === null) saved.node.removeAttribute('aria-hidden');\n else saved.node.setAttribute('aria-hidden', saved.aria);\n }\n list.length = 0;\n}\n\nfunction lockScroll(): void {\n if (locks++ > 0) return;\n const body = document.body;\n const scrollbar = window.innerWidth - document.documentElement.clientWidth;\n savedOverflow = body.style.overflow;\n savedPadding = body.style.paddingRight;\n body.style.overflow = 'hidden';\n if (scrollbar > 0) body.style.paddingRight = `${scrollbar}px`;\n}\n\nfunction unlockScroll(): void {\n if (--locks > 0) return;\n document.body.style.overflow = savedOverflow;\n document.body.style.paddingRight = savedPadding;\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n const top = stack[stack.length - 1];\n if (!top) return;\n const info = traps.get(top);\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n info?.onEscape?.();\n return;\n }\n if (event.key !== 'Tab' || info?.trap === false) return;\n const root = top.root;\n const list = focusables(root);\n const first = list[0];\n const last = list[list.length - 1];\n if (!first || !last) {\n event.preventDefault();\n return;\n }\n const active = document.activeElement;\n if (event.shiftKey && (active === first || !root.contains(active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && (active === last || !root.contains(active))) {\n event.preventDefault();\n first.focus();\n }\n}\n\n/** Creates and mounts a modal shell on `document.body`. */\nexport function openOverlay(options: OverlayOptions): Overlay {\n const bKind = options.backdrop ?? 'blur';\n const backdrop = el('div', 'gk-backdrop');\n const isStd = bKind === 'blur' || bKind === 'dim' || bKind === 'none';\n backdrop.dataset.kind = isStd ? bKind : 'custom';\n if (!isStd) backdrop.style.background = bKind;\n const root = el(\n 'div',\n `gk-overlay gk-root${options.className ? ` ${options.className}` : ''}`,\n {\n 'data-gk-theme': options.theme,\n 'data-gk-mode': options.mode,\n 'data-state': 'closed',\n },\n backdrop,\n );\n if (options.dir !== 'auto') root.setAttribute('dir', options.dir);\n\n const previous = document.activeElement;\n const hidden: { node: Element; inert: boolean; aria: string | null }[] = [];\n for (const node of [...document.body.children]) {\n if (/gk-(region|overlay)/.test(node.className)) continue;\n hidden.push({\n node,\n inert: node.hasAttribute('inert'),\n aria: node.getAttribute('aria-hidden'),\n });\n node.setAttribute('inert', '');\n node.setAttribute('aria-hidden', 'true');\n }\n lockScroll();\n\n let downOnBackdrop = false;\n root.addEventListener('pointerdown', (event) => {\n downOnBackdrop = event.target === root || event.target === backdrop;\n });\n root.addEventListener('click', (event) => {\n if (downOnBackdrop && (event.target === root || event.target === backdrop))\n options.onBackdrop?.();\n downOnBackdrop = false;\n });\n\n document.body.append(root);\n let closing: Promise<void> | undefined;\n const overlay: Overlay = {\n root,\n show() {\n if (prefersReducedMotion() || typeof requestAnimationFrame !== 'function') {\n root.dataset.state = 'open';\n } else {\n requestAnimationFrame(() => {\n root.dataset.state = 'open';\n });\n }\n },\n close() {\n if (closing) return closing;\n closing = new Promise<void>((resolve) => {\n const index = stack.indexOf(overlay);\n if (index >= 0) stack.splice(index, 1);\n if (stack.length === 0) document.removeEventListener('keydown', onKeydown, true);\n root.dataset.state = 'closing';\n restoreHidden(hidden);\n traps.delete(overlay);\n unlockScroll();\n if (previous instanceof HTMLElement && previous.isConnected) previous.focus();\n const done = (): void => {\n root.remove();\n resolve();\n };\n if (prefersReducedMotion()) done();\n else setTimeout(done, 220);\n });\n return closing;\n },\n };\n traps.set(overlay, { trap: options.trap !== false, onEscape: options.onEscape, hidden });\n if (stack.length === 0) document.addEventListener('keydown', onKeydown, true);\n stack.push(overlay);\n return overlay;\n}\n\n/** Resets all active overlays and restores page state. For tests and clean teardown. */\nexport function resetOverlays(): void {\n while (stack.length > 0) {\n const o = stack.pop();\n if (o) {\n const info = traps.get(o);\n if (info) restoreHidden(info.hidden);\n traps.delete(o);\n o.root.remove();\n }\n }\n document.removeEventListener('keydown', onKeydown, true);\n if (locks > 0) {\n locks = 0;\n document.body.style.overflow = savedOverflow;\n document.body.style.paddingRight = savedPadding;\n }\n savedOverflow = '';\n savedPadding = '';\n}\n","import { createToastEngine } from '../core';\nimport type { GlazeConfig, ToastApi, ToastStore } from '../core';\nimport { resetOverlays } from './overlay';\nimport { setSanitizer } from './sanitize';\nimport { canMountToaster, mountToaster } from './toaster';\nimport type { ToasterHandle, ToasterOptions } from './toaster';\n\n/** Shared state behind `ui`. One instance exists per page, even when the package is bundled twice. */\nexport interface WebEngine {\n /** Toast state container. */\n store: ToastStore;\n /** The toast API. */\n toast: ToastApi;\n /** Whether the built-in DOM renderer mounts itself when the first toast appears. */\n autoMount: boolean;\n /** The mounted renderer, when any. */\n toaster: ToasterHandle | undefined;\n}\n\nconst KEY = Symbol.for('toastory.engine.v1');\n\n/** Options for registering the web renderer. */\nexport type WebRendererOptions = ToasterOptions;\n\n/**\n * Registers the web DOM renderer with the core UI toolkit and mounts the toaster.\n * Safe to call multiple times; auto-runs on first use in a browser.\n */\nexport function registerWebRenderer(options: WebRendererOptions = {}): WebEngine {\n const engine = getEngine();\n if (canMountToaster() && !engine.toaster) {\n engine.toaster = mountToaster(engine.store, options);\n }\n return engine;\n}\n\n/** Returns the page wide engine, creating it on first use. Safe on the server. */\nexport function getEngine(): WebEngine {\n const holder = globalThis as { [KEY]?: WebEngine };\n const existing = holder[KEY];\n if (existing) return existing;\n const { store, toast } = createToastEngine();\n const engine: WebEngine = { store, toast, autoMount: true, toaster: undefined };\n store.subscribe(() => {\n if (engine.autoMount && !engine.toaster && canMountToaster() && store.getToasts().length > 0) {\n engine.toaster = mountToaster(store);\n }\n });\n holder[KEY] = engine;\n return engine;\n}\n\n/**\n * Enables or disables the built-in DOM toast renderer. Framework adapters disable it when they\n * render toasts themselves. Disabling tears down an already mounted renderer.\n */\nexport function setAutoMount(enabled: boolean): void {\n const engine = getEngine();\n engine.autoMount = enabled;\n if (!enabled && engine.toaster) {\n engine.toaster.destroy();\n engine.toaster = undefined;\n } else if (\n enabled &&\n !engine.toaster &&\n canMountToaster() &&\n engine.store.getToasts().length > 0\n ) {\n engine.toaster = mountToaster(engine.store);\n }\n}\n\n/** Applies configuration to the page wide engine. Returns the resulting configuration. */\nexport function configure(patch: Partial<GlazeConfig>): Readonly<GlazeConfig> {\n return getEngine().store.config.set(patch);\n}\n\n/**\n * Dismisses every toast, tears down the DOM renderer, clears history and restores the default\n * configuration and auto-mount behaviour. Intended for tests and hot module reloading.\n */\nexport function resetEngine(): void {\n const engine = getEngine();\n engine.store.clear();\n engine.store.clearHistory();\n engine.store.config.reset();\n for (const name of engine.store.types.list()) engine.store.types.remove(name);\n engine.toaster?.destroy();\n engine.toaster = undefined;\n engine.autoMount = true;\n setSanitizer(undefined);\n resetOverlays();\n}\n","import type { DialogChoice, DialogOptions } from '../core';\nimport { el, nextId } from './dom';\n\n/** A built input control. */\nexport interface InputControl {\n /** Element placed in the dialog. */\n node: HTMLElement;\n /** Element that receives focus. */\n focusTarget: HTMLElement;\n /** Elements that carry `aria-invalid` and `aria-describedby`. */\n fields: HTMLElement[];\n /** Reads the current value. */\n read(): unknown;\n}\n\n/** Normalizes the `options` option to a list of choices. */\nexport function normalizeChoices(options: DialogOptions['options']): DialogChoice[] {\n if (!options) return [];\n if (Array.isArray(options)) {\n return (options as readonly (string | DialogChoice)[]).map((entry) =>\n typeof entry === 'string' ? { value: entry, label: entry } : entry,\n );\n }\n return Object.keys(options).map((value) => ({\n value,\n label: (options as Record<string, string>)[value] as string,\n }));\n}\n\nfunction applyAttributes(node: HTMLElement, attributes: DialogOptions['inputAttributes']): void {\n if (!attributes) return;\n for (const k in attributes) {\n const value = attributes[k];\n if (value !== undefined) node.setAttribute(k, value);\n }\n}\n\n/**\n * Builds the input described by `options.input`.\n * @param options Dialog options.\n * @param labelId Id of the element naming the dialog, used as fallback label.\n */\nexport function buildInput(options: DialogOptions, labelId: string): InputControl | undefined {\n const type = options.input;\n if (!type) return undefined;\n const id = nextId('gk-input');\n const initial = options.inputValue;\n const label = options.inputLabel;\n const labelNode = label ? el('label', 'gk-label', { for: id }, label) : null;\n const wrap = (...children: (Node | null)[]): HTMLElement => {\n const box = el('div', 'gk-input');\n for (const child of children) if (child) box.append(child);\n return box;\n };\n const common = (node: HTMLElement): void => {\n node.id = id;\n node.classList.add('gk-field');\n if (!label) node.setAttribute('aria-labelledby', labelId);\n applyAttributes(node, options.inputAttributes);\n };\n\n const ctrl = (\n node: HTMLElement,\n target: HTMLElement,\n fields: HTMLElement[],\n read: () => unknown,\n ): InputControl => ({\n node,\n focusTarget: target,\n fields,\n read,\n });\n\n const makeCtrl = (\n child: HTMLElement,\n target: HTMLElement,\n fields: HTMLElement[],\n read: () => unknown,\n ): InputControl => ctrl(wrap(labelNode, child), target, fields, read);\n\n if (type === 'textarea') {\n const area = el('textarea', '', { placeholder: options.placeholder, rows: '3' });\n area.value = initial === undefined ? '' : String(initial);\n common(area);\n return makeCtrl(area, area, [area], () => area.value);\n }\n\n if (type === 'select') {\n const select = el('select');\n if (options.placeholder) {\n select.append(el('option', '', { value: '', disabled: '' }, options.placeholder));\n }\n for (const choice of normalizeChoices(options.options)) {\n select.append(\n el(\n 'option',\n '',\n { value: choice.value, disabled: choice.disabled ? '' : undefined },\n choice.label,\n ),\n );\n }\n select.value = initial === undefined ? '' : String(initial);\n common(select);\n return makeCtrl(select, select, [select], () => select.value);\n }\n\n if (type === 'radio') {\n const group = el('fieldset', 'gk-radios');\n group.append(el('legend', label ? 'gk-label' : 'gk-sr', {}, label ?? ''));\n if (!label) group.setAttribute('aria-labelledby', labelId);\n const name = nextId('gk-radio');\n const radios: HTMLInputElement[] = [];\n for (const choice of normalizeChoices(options.options)) {\n const radio = el('input', '', {\n type: 'radio',\n name,\n value: choice.value,\n disabled: choice.disabled ? '' : undefined,\n });\n radio.checked = initial !== undefined && String(initial) === choice.value;\n radios.push(radio);\n group.append(el('label', 'gk-choice', {}, radio, el('span', '', {}, choice.label)));\n }\n const first = radios.find((radio) => !radio.disabled) ?? group;\n return ctrl(\n wrap(group),\n radios.find((radio) => radio.checked) ?? first,\n radios,\n () => radios.find((radio) => radio.checked)?.value,\n );\n }\n\n if (type === 'checkbox') {\n const box = el('input', '', { type: 'checkbox' });\n box.checked = initial === true || initial === 'true' || initial === 1;\n box.id = id;\n applyAttributes(box, options.inputAttributes);\n const text = label ?? options.placeholder ?? '';\n return ctrl(\n wrap(el('label', 'gk-choice', { for: id }, box, el('span', '', {}, text))),\n box,\n [box],\n () => box.checked,\n );\n }\n\n const input = el('input', '', { type, placeholder: options.placeholder });\n if (type !== 'file' && initial !== undefined) input.value = String(initial);\n common(input);\n if (type === 'range') {\n const output = el('output', 'gk-output', { for: id }, input.value);\n input.addEventListener('input', () => {\n output.textContent = input.value;\n });\n return ctrl(wrap(labelNode, input, output), input, [input], () => Number(input.value));\n }\n if (type === 'otp') {\n const len = options.otpLength ?? 6;\n const isAlpha = options.otpType === 'alphanumeric';\n const otpWrap = el('div', 'gk-otp');\n const inputs: HTMLInputElement[] = [];\n\n for (let i = 0; i < len; i++) {\n const inp = el('input', 'gk-field gk-otp-input', {\n type: 'text',\n maxLength: '1',\n inputmode: isAlpha ? 'text' : 'numeric',\n autocomplete: i ? 'off' : 'one-time-code',\n 'aria-label': `Digit ${i + 1} of ${len}`,\n }) as HTMLInputElement;\n inputs.push(inp);\n otpWrap.append(inp);\n\n inp.addEventListener('input', () => {\n if (!isAlpha) inp.value = inp.value.replace(/\\D/g, '');\n if (inp.value && inputs[i + 1]) inputs[i + 1]?.focus();\n const code = inputs.map((x) => x.value).join('');\n if (code.length === len) options.onOtpComplete?.(code);\n });\n\n inp.addEventListener('keydown', (e) => {\n if (e.key === 'Backspace' && !inp.value) inputs[i - 1]?.focus();\n else if (e.key === 'ArrowLeft') inputs[i - 1]?.focus();\n else if (e.key === 'ArrowRight') inputs[i + 1]?.focus();\n });\n\n inp.addEventListener('paste', (e) => {\n const raw = e.clipboardData?.getData('text') || '';\n const cleaned = raw.replace(isAlpha ? /[^a-zA-Z0-9]/g : /\\D/g, '').slice(0, len);\n if (!cleaned) return;\n e.preventDefault();\n inputs.forEach((x, j) => {\n x.value = cleaned[j] || '';\n });\n inputs[Math.min(cleaned.length, len - 1)]?.focus();\n if (cleaned.length === len) options.onOtpComplete?.(cleaned);\n });\n }\n\n if (typeof initial === 'string') {\n inputs.forEach((inp, idx) => {\n inp.value = initial[idx] || '';\n });\n }\n\n let footerNote: HTMLElement | null = null;\n if (options.resendCooldown !== undefined) {\n let cd = options.resendCooldown;\n const resendBtn = el('button', 'gk-btn-resend', { type: 'button' }, 'Resend code');\n const timerSpan = el('span', '', {}, cd > 0 ? ` (${cd}s)` : '');\n resendBtn.disabled = cd > 0;\n footerNote = el('p', 'gk-otp-resend', {}, \"Didn't get it? \", resendBtn, timerSpan);\n if (cd > 0) {\n const iv = setInterval(() => {\n if (!resendBtn.isConnected || --cd <= 0) {\n clearInterval(iv);\n timerSpan.textContent = '';\n resendBtn.disabled = false;\n } else timerSpan.textContent = ` (${cd}s)`;\n }, 1000);\n }\n resendBtn.addEventListener('click', () => {\n if (!resendBtn.disabled) options.onResend?.();\n });\n }\n\n return ctrl(wrap(labelNode, otpWrap, footerNote), inputs[0] ?? otpWrap, inputs, () =>\n inputs.map((x) => x.value).join(''),\n );\n }\n\n return makeCtrl(input, input, [input], () =>\n type === 'file'\n ? input.multiple\n ? [...(input.files ?? [])]\n : input.files?.[0]\n : type === 'number'\n ? input.value === ''\n ? undefined\n : Number(input.value)\n : input.value,\n );\n}\n","import { createDialogController, decideDialogRole } from '../core';\nimport type {\n DialogButton,\n DialogController,\n DialogOptions,\n DialogPromise,\n DialogState,\n} from '../core';\nimport { cssLength, el, fill, nextId, requireDom } from './dom';\nimport { getEngine } from './engine';\nimport { icon } from './icons';\nimport type { IconName } from './icons';\nimport { buildInput } from './inputs';\nimport type { InputControl } from './inputs';\nimport { openOverlay } from './overlay';\nimport { sanitizeToFragment } from './sanitize';\nimport { resolveVariant } from './variants';\n\nfunction applyButton(\n node: HTMLButtonElement,\n spec: DialogButton | undefined,\n fallbackLabel: string,\n show: boolean,\n): void {\n const visible = spec?.show ?? show;\n node.hidden = !visible;\n node.textContent = spec?.label ?? fallbackLabel;\n if (spec?.aria) node.setAttribute('aria-label', spec.aria);\n else node.removeAttribute('aria-label');\n if (spec?.color) node.style.setProperty('--gk-button', spec.color);\n else node.style.removeProperty('--gk-button');\n}\n\n/**\n * Opens a dialog in the DOM. The returned promise resolves with the result and carries the live\n * `handle`. Throws when no DOM is available.\n */\nexport function openDialog(initial: DialogOptions): DialogPromise {\n requireDom();\n const config = getEngine().store.config.get();\n const controller: DialogController = createDialogController(initial);\n const titleId = nextId('gk-title');\n const textId = nextId('gk-text');\n const errorId = nextId('gk-error');\n let input: InputControl | undefined;\n let inputKey = '';\n\n const overlay = openOverlay({\n backdrop: initial.backdrop,\n theme: initial.theme ?? config.theme,\n mode: config.mode,\n dir: config.dir,\n onEscape: () => void controller.dismiss('esc'),\n onBackdrop: () => void controller.dismiss('backdrop'),\n });\n\n const panel = el('div', 'gk-dialog', {\n tabindex: '-1',\n 'aria-modal': 'true',\n 'data-gk-theme': initial.theme ?? config.theme,\n 'data-gk-mode': config.mode,\n });\n const closeBtn = el('button', 'gk-dialog-close', { type: 'button' }, icon('close'));\n const image = el('img', 'gk-image');\n const iconBox = el('div', 'gk-dialog-icon');\n const title = el('h2', 'gk-dialog-title', { id: titleId });\n const text = el('div', 'gk-dialog-text', { id: textId });\n const noticeBox = el('div', 'gk-dialog-notice', { role: 'note' });\n noticeBox.hidden = true;\n const countdownNum = el('span', 'gk-countdown-num');\n const countdownBox = el('div', 'gk-countdown-big', { 'aria-atomic': 'true' }, countdownNum, 's');\n countdownBox.hidden = true;\n const inputBox = el('div', 'gk-input-box');\n const error = el('div', 'gk-error', { id: errorId, role: 'alert' });\n const btn = (n: string) => el('button', `gk-btn gk-${n} gk-btn--${n}`, { type: 'button' });\n const confirmBtn = btn('confirm');\n const denyBtn = btn('deny');\n const cancelBtn = btn('cancel');\n const buttons = el(\n 'div',\n 'gk-dialog-buttons gk-dialog-actions',\n {},\n cancelBtn,\n denyBtn,\n confirmBtn,\n );\n const footer = el('div', 'gk-dialog-footer');\n const bar = el('i');\n const timerBar = el('div', 'gk-timer', { 'aria-hidden': 'true' }, bar);\n panel.append(\n closeBtn,\n image,\n iconBox,\n title,\n text,\n noticeBox,\n countdownBox,\n inputBox,\n error,\n buttons,\n footer,\n timerBar,\n );\n overlay.root.append(panel);\n\n let lastTimer = -1;\n let autoPaused = false;\n const checkMatch = (): void => {\n const st = controller.getState();\n const target = st.options.confirmText;\n if (!target) return;\n const cur = String(input ? input.read() : '');\n const match = st.options.caseSensitive\n ? cur === target\n : cur.trim().toLowerCase() === target.toLowerCase();\n confirmBtn.disabled = !match || st.loading !== null;\n confirmBtn.setAttribute('aria-disabled', String(!match));\n };\n\n const sync = (state: DialogState): void => {\n const o = state.options;\n const themeName = o.theme ?? initial.theme ?? config.theme;\n const activeVariant = resolveVariant(themeName, o.variant ?? initial.variant);\n if (activeVariant) panel.setAttribute('data-gk-variant', activeVariant);\n else panel.removeAttribute('data-gk-variant');\n\n panel.className = ['gk-dialog', o.className].filter(Boolean).join(' ');\n panel.dataset.tone = o.tone ?? 'info';\n panel.dataset.grow = o.grow ?? '';\n const [row, col] = (o.position ?? 'center-center').split('-') as [string, string];\n overlay.root.dataset.row = row;\n overlay.root.dataset.col = col;\n panel.style.width = o.width === undefined ? '' : cssLength(o.width);\n panel.style.padding = o.padding === undefined ? '' : cssLength(o.padding);\n panel.setAttribute('role', decideDialogRole(o));\n title.textContent = o.title ?? '';\n title.hidden = !o.title;\n if (o.title) panel.setAttribute('aria-labelledby', titleId);\n else panel.removeAttribute('aria-labelledby');\n\n text.replaceChildren();\n if (o.text) text.append(o.text);\n if (o.html) {\n const fragment = sanitizeToFragment(o.html);\n if (fragment) text.append(fragment);\n }\n text.hidden = !o.text && !o.html;\n if (text.hidden) panel.removeAttribute('aria-describedby');\n else panel.setAttribute('aria-describedby', textId);\n\n iconBox.replaceChildren();\n iconBox.dataset.tone =\n o.tone ??\n (o.icon === 'warning'\n ? 'warning'\n : o.icon === 'error' || o.icon === 'trash'\n ? 'danger'\n : o.icon === 'success'\n ? 'success'\n : 'info');\n if (o.icon === 'custom') fill(iconBox, o.iconContent);\n else if (o.icon) {\n const iconNode = icon(o.icon as IconName);\n if (iconNode) iconBox.append(iconNode);\n }\n iconBox.hidden = !o.icon;\n iconBox.dataset.icon = o.icon ?? '';\n\n noticeBox.hidden = !o.notice;\n if (o.notice) {\n noticeBox.replaceChildren();\n noticeBox.dataset.tone = o.notice.tone ?? 'warning';\n if (o.notice.icon) fill(noticeBox, o.notice.icon);\n else {\n const ic = icon(\n o.notice.tone === 'danger' ? 'error' : o.notice.tone === 'info' ? 'info' : 'shield',\n );\n if (ic) noticeBox.append(ic);\n }\n noticeBox.append(el('span', '', {}, o.notice.text));\n }\n\n countdownBox.hidden = o.countdown === undefined;\n if (o.countdown !== undefined) {\n const sec = Math.max(0, Math.ceil(controller.handle.timer.remaining() / 1000));\n countdownNum.textContent = String(sec);\n countdownBox.setAttribute(\n 'aria-live',\n sec === 30 || sec === 10 || sec === 5 ? 'assertive' : 'off',\n );\n }\n\n if (o.image) {\n image.src = o.image.src;\n image.alt = o.image.alt;\n if (o.image.width) image.width = o.image.width;\n if (o.image.height) image.height = o.image.height;\n }\n image.hidden = !o.image;\n\n if (o.closeButtonLabel) closeBtn.setAttribute('aria-label', o.closeButtonLabel);\n closeBtn.hidden = !o.closeButtonLabel;\n\n const key = `${o.input ?? ''}|${JSON.stringify(o.options ?? null)}|${o.inputLabel ?? ''}|${o.placeholder ?? ''}`;\n if (key !== inputKey) {\n inputKey = key;\n const keepValue = input ? input.read() : undefined;\n inputBox.replaceChildren();\n input = buildInput(o, titleId);\n if (input) {\n inputBox.append(input.node);\n if (keepValue !== undefined && typeof keepValue !== 'object') {\n const field = input.focusTarget;\n if (\n field instanceof HTMLInputElement &&\n field.type !== 'checkbox' &&\n field.type !== 'radio'\n ) {\n field.value = String(keepValue);\n }\n }\n for (const field of input.fields) {\n field.addEventListener('input', checkMatch);\n field.addEventListener('keydown', (event) => {\n const target = event.target as HTMLElement;\n const multiline = target instanceof HTMLTextAreaElement;\n if (\n event.key === 'Enter' &&\n !(multiline && !event.ctrlKey && !event.metaKey) &&\n target.tagName !== 'SELECT'\n ) {\n event.preventDefault();\n void controller.submit('confirm');\n }\n });\n }\n controller.setValueReader(input.read);\n } else controller.setValueReader(() => undefined);\n }\n inputBox.hidden = !input;\n for (const field of input?.fields ?? []) {\n if (state.error) {\n field.setAttribute('aria-invalid', 'true');\n field.setAttribute('aria-describedby', errorId);\n } else {\n field.removeAttribute('aria-invalid');\n field.removeAttribute('aria-describedby');\n }\n }\n error.textContent = state.error ?? '';\n error.hidden = !state.error;\n\n applyButton(confirmBtn, o.confirmButton, 'OK', true);\n applyButton(denyBtn, o.denyButton, 'No', false);\n applyButton(cancelBtn, o.cancelButton, 'Cancel', false);\n buttons.dataset.reverse = o.reverseButtons ? 'true' : 'false';\n buttons.dataset.layout =\n o.buttonLayout ??\n (activeVariant === 'update-info'\n ? 'stack'\n : activeVariant === 'ios-glass-alert'\n ? 'divided'\n : 'row');\n buttons.hidden = confirmBtn.hidden && denyBtn.hidden && cancelBtn.hidden;\n const ld = state.loading,\n isC = ld === 'confirm',\n isD = ld === 'deny';\n confirmBtn.disabled = denyBtn.disabled = ld !== null;\n confirmBtn.setAttribute('aria-busy', String(isC));\n denyBtn.setAttribute('aria-busy', String(isD));\n confirmBtn.dataset.loading = String(isC);\n denyBtn.dataset.loading = String(isD);\n panel.setAttribute('aria-busy', String(ld !== null));\n\n if (o.confirmText) checkMatch();\n\n footer.replaceChildren();\n if (o.footer) {\n const fragment = sanitizeToFragment(o.footer);\n if (fragment) footer.append(fragment);\n }\n footer.hidden = !o.footer;\n\n const remaining = controller.handle.timer.remaining();\n timerBar.hidden = !(o.timerProgressBar && remaining > 0);\n if (!timerBar.hidden && Math.abs(remaining - lastTimer) > 60) {\n lastTimer = remaining;\n bar.style.animation = 'none';\n void bar.offsetWidth;\n bar.style.animation = '';\n bar.style.setProperty('--gk-d', `${remaining}ms`);\n }\n bar.style.animationPlayState = controller.handle.timer.paused() ? 'paused' : 'running';\n\n if (!state.open) void overlay.close();\n };\n\n closeBtn.addEventListener('click', () => void controller.dismiss('close'));\n confirmBtn.addEventListener('click', () => void controller.submit('confirm'));\n denyBtn.addEventListener('click', () => void controller.submit('deny'));\n cancelBtn.addEventListener('click', () => void controller.dismiss('cancel'));\n panel.addEventListener('pointerenter', () => {\n if (controller.handle.timer.remaining() > 0 && !controller.handle.timer.paused()) {\n autoPaused = true;\n controller.handle.timer.pause();\n }\n });\n panel.addEventListener('pointerleave', () => {\n if (autoPaused) {\n autoPaused = false;\n controller.handle.timer.resume();\n }\n });\n\n if (initial.draggable) {\n let origin: { x: number; y: number; ox: number; oy: number } | undefined;\n let offset = { x: 0, y: 0 };\n panel.dataset.draggable = 'true';\n panel.addEventListener('pointerdown', (event) => {\n const target = event.target as Element;\n if (\n target.closest('button,input,select,textarea,a') ||\n !target.closest('.gk-dialog-title,.gk-dialog-icon')\n )\n return;\n origin = { x: event.clientX, y: event.clientY, ox: offset.x, oy: offset.y };\n panel.setPointerCapture?.(event.pointerId);\n });\n panel.addEventListener('pointermove', (event) => {\n if (!origin) return;\n offset = { x: origin.ox + event.clientX - origin.x, y: origin.oy + event.clientY - origin.y };\n panel.style.transform = `translate(${offset.x}px, ${offset.y}px)`;\n });\n const stop = (): void => {\n origin = undefined;\n };\n panel.addEventListener('pointerup', stop);\n panel.addEventListener('pointercancel', stop);\n }\n\n controller.subscribe(() => sync(controller.getState()));\n sync(controller.getState());\n overlay.show();\n\n const o = controller.getState().options;\n const focusOn =\n o.focusOn ??\n (input ? 'input' : o.tone === 'danger' && !cancelBtn.hidden ? 'cancel' : 'confirm');\n const targets = {\n confirm: confirmBtn,\n deny: denyBtn,\n cancel: cancelBtn,\n input: input?.focusTarget,\n close: closeBtn,\n none: undefined,\n } as const;\n const target = targets[focusOn];\n if (target && !target.hidden) target.focus();\n else if (focusOn !== 'none') panel.focus();\n controller.opened();\n\n return Object.assign(\n controller.handle.result.then((value) => value),\n { handle: controller.handle },\n );\n}\n","import { createDialogController } from '../core';\nimport type {\n BottomSheetHandle,\n BottomSheetOptions,\n DialogPromise,\n DismissReason,\n LoadingHandle,\n LoadingOptions,\n SheetOptions,\n} from '../core';\nimport { el, nextId, requireDom } from './dom';\nimport { getEngine } from './engine';\nimport { icon } from './icons';\nimport { openOverlay } from './overlay';\nimport { sanitizeToFragment } from './sanitize';\n\n/**\n * Opens an action sheet. Resolves with `isConfirmed: true` and the chosen action value, or a\n * dismissal (`cancel`, `backdrop` or `esc`).\n */\nexport function openSheet(options: SheetOptions): DialogPromise {\n requireDom();\n const config = getEngine().store.config.get();\n const controller = createDialogController({\n allowOutsideClick: options.allowOutsideClick,\n allowEscape: options.allowEscape,\n });\n const titleId = nextId('gk-title');\n const messageId = nextId('gk-text');\n const overlay = openOverlay({\n backdrop: options.backdrop,\n theme: options.theme ?? config.theme,\n mode: config.mode,\n dir: config.dir,\n className: 'gk-overlay-sheet',\n onEscape: () => void controller.dismiss('esc'),\n onBackdrop: () => void controller.dismiss('backdrop'),\n });\n overlay.root.dataset.row = 'bottom';\n overlay.root.dataset.col = 'center';\n\n const panel = el('div', `gk-sheet${options.className ? ` ${options.className}` : ''}`, {\n role: 'dialog',\n 'aria-modal': 'true',\n tabindex: '-1',\n 'data-gk-theme': options.theme ?? config.theme,\n 'data-gk-mode': config.mode,\n });\n if (options.title) {\n panel.append(el('h2', 'gk-sheet-title', { id: titleId }, options.title));\n panel.setAttribute('aria-labelledby', titleId);\n }\n if (options.message) {\n panel.append(el('p', 'gk-sheet-message', { id: messageId }, options.message));\n panel.setAttribute('aria-describedby', messageId);\n }\n const group = el('div', 'gk-sheet-group', { role: 'group' });\n if (options.title) group.setAttribute('aria-labelledby', titleId);\n let firstEnabled: HTMLButtonElement | undefined;\n for (const action of options.actions) {\n const button = el('button', 'gk-sheet-action', {\n type: 'button',\n 'data-style': action.style ?? 'default',\n });\n if (action.disabled) button.disabled = true;\n if (action.icon) {\n const frag = sanitizeToFragment(action.icon);\n if (frag) button.append(el('span', 'gk-sheet-icon', { 'aria-hidden': 'true' }, frag));\n }\n button.append(el('span', 'gk-sheet-label', {}, action.label));\n button.addEventListener('click', () => {\n if (action.style === 'cancel') controller.dismiss('cancel');\n else controller.handle.close({ isConfirmed: true, value: action.value ?? action.label });\n });\n if (!action.disabled && !firstEnabled) firstEnabled = button;\n group.append(button);\n }\n panel.append(group);\n let cancel: HTMLButtonElement | undefined;\n if (options.cancel !== false) {\n cancel = el('button', 'gk-sheet-cancel', { type: 'button' }, options.cancel?.label ?? 'Cancel');\n cancel.addEventListener('click', () => void controller.dismiss('cancel'));\n panel.append(cancel);\n }\n panel.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n const btns = [...panel.querySelectorAll<HTMLButtonElement>('button:not([disabled])')];\n const i = btns.indexOf(document.activeElement as HTMLButtonElement);\n if (i !== -1) {\n e.preventDefault();\n btns[(i + (e.key === 'ArrowDown' ? 1 : btns.length - 1)) % btns.length]?.focus();\n }\n }\n });\n overlay.root.append(panel);\n controller.subscribe(() => {\n if (!controller.getState().open) void overlay.close();\n });\n overlay.show();\n (firstEnabled ?? cancel ?? panel).focus();\n controller.opened();\n return Object.assign(\n controller.handle.result.then((value) => value),\n { handle: controller.handle },\n );\n}\n\n/** Opens a bottom sheet with drag-to-resize snap points. */\nexport function openBottomSheet(options: BottomSheetOptions): BottomSheetHandle {\n requireDom();\n const config = getEngine().store.config.get();\n const snaps = (options.snapPoints?.length ? [...options.snapPoints] : [0.5])\n .map((value) => Math.min(1, Math.max(0.1, value)))\n .sort((a, b) => a - b);\n let index = Math.min(snaps.length - 1, Math.max(0, options.initialSnap ?? 0));\n const controller = createDialogController({\n allowOutsideClick: options.allowOutsideClick,\n allowEscape: options.allowEscape,\n willClose: () => options.willClose?.(handle),\n });\n const titleId = nextId('gk-title');\n\n const overlay = openOverlay({\n backdrop: options.backdrop,\n theme: options.theme ?? config.theme,\n mode: config.mode,\n dir: config.dir,\n className: 'gk-overlay-bottom',\n onEscape: () => void controller.dismiss('esc'),\n onBackdrop: () => void controller.dismiss('backdrop'),\n });\n overlay.root.dataset.row = 'bottom';\n overlay.root.dataset.col = 'center';\n\n const panel = el('div', `gk-bsheet${options.className ? ` ${options.className}` : ''}`, {\n role: 'dialog',\n 'aria-modal': 'true',\n tabindex: '-1',\n 'data-gk-theme': options.theme ?? config.theme,\n 'data-gk-mode': config.mode,\n });\n if (options.variant) panel.setAttribute('data-gk-variant', options.variant);\n const grab = el('button', 'gk-grab', {\n type: 'button',\n 'aria-label': options.handleLabel ?? 'Resize sheet',\n });\n const iconBox = el('div', 'gk-dialog-icon gk-dialog-badge');\n iconBox.hidden = true;\n if (options.icon) {\n iconBox.hidden = false;\n iconBox.dataset.tone = options.tone ?? 'danger';\n const ic = icon(\n options.icon === 'trash' ? 'trash' : options.icon === 'warning' ? 'warning' : 'error',\n );\n if (ic) iconBox.append(ic);\n }\n const title = el('h2', 'gk-bsheet-title', { id: titleId });\n const body = el('div', 'gk-bsheet-body');\n const buttons = el('div', 'gk-dialog-buttons gk-dialog-actions', { 'data-layout': 'stack' });\n buttons.hidden = true;\n if (options.confirmButton || options.cancelButton || options.variant === 'bottom-sheet-confirm') {\n buttons.hidden = false;\n const mkBtn = (cls: string, label: string, fn: () => void) => {\n const b = el('button', `gk-btn ${cls}`, { type: 'button' }, label);\n b.addEventListener('click', fn);\n return b;\n };\n buttons.append(\n mkBtn('gk-confirm gk-btn--confirm', options.confirmButton?.label ?? 'Confirm', () =>\n controller.submit('confirm'),\n ),\n mkBtn('gk-cancel gk-btn--cancel', options.cancelButton?.label ?? 'Cancel', () =>\n controller.dismiss('cancel'),\n ),\n );\n }\n const closeBtn = el('button', 'gk-dialog-close', { type: 'button' });\n closeBtn.append(icon('close'));\n panel.append(closeBtn, grab, iconBox, title, body, buttons);\n overlay.root.append(panel);\n\n const setHeight = (fraction: number, animate: boolean): void => {\n panel.dataset.dragging = String(!animate);\n panel.style.setProperty('--gk-sheet-h', `${fraction * 100}vh`);\n };\n const render = (patch: Pick<BottomSheetOptions, 'title' | 'text' | 'html'>): void => {\n title.textContent = patch.title ?? '';\n title.hidden = !patch.title;\n if (patch.title) panel.setAttribute('aria-labelledby', titleId);\n else panel.removeAttribute('aria-labelledby');\n body.replaceChildren();\n if (patch.text) body.append(patch.text);\n if (patch.html) {\n const fragment = sanitizeToFragment(patch.html);\n if (fragment) body.append(fragment);\n }\n };\n render(options);\n grab.hidden = options.handle === false;\n closeBtn.hidden = !options.closeButtonLabel;\n if (options.closeButtonLabel) closeBtn.setAttribute('aria-label', options.closeButtonLabel);\n closeBtn.addEventListener('click', () => void controller.dismiss('close'));\n setHeight(snaps[index] ?? 0.5, true);\n\n const snapTo = (next: number): void => {\n index = Math.min(snaps.length - 1, Math.max(0, next));\n setHeight(snaps[index] ?? 0.5, true);\n };\n\n grab.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n snapTo(index + 1);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (!index && options.dismissible !== false) controller.dismiss('close');\n else snapTo(index - 1);\n }\n });\n\n let drag: { y: number; base: number } | undefined;\n const view = (): number => window.innerHeight || 1;\n panel.addEventListener('pointerdown', (e) => {\n if (!(e.target as Element).closest('.gk-grab,.gk-bsheet-title')) return;\n drag = { y: e.clientY, base: snaps[index] ?? 0.5 };\n panel.setPointerCapture?.(e.pointerId);\n });\n panel.addEventListener('pointermove', (e) => {\n if (!drag) return;\n const f = drag.base + (drag.y - e.clientY) / view();\n setHeight(Math.min(snaps[snaps.length - 1] ?? 1, Math.max(0, f)), false);\n });\n const end = (e: PointerEvent): void => {\n if (!drag) return;\n const f = drag.base + (drag.y - e.clientY) / view();\n drag = undefined;\n if (options.dismissible !== false && f < (snaps[0] ?? 0.5) / 2) {\n controller.dismiss('close');\n return;\n }\n let best = 0;\n snaps.forEach((s, i) => {\n if (Math.abs(s - f) < Math.abs((snaps[best] ?? 0) - f)) best = i;\n });\n snapTo(best);\n };\n panel.addEventListener('pointerup', end);\n panel.addEventListener('pointercancel', end);\n\n const handle: BottomSheetHandle = {\n body,\n result: controller.handle.result,\n close: (reason: DismissReason = 'close') => void controller.dismiss(reason),\n snapTo,\n update: render,\n };\n controller.subscribe(() => {\n if (!controller.getState().open) void overlay.close();\n });\n overlay.show();\n (grab.hidden ? panel : grab).focus();\n options.didOpen?.(handle);\n return handle;\n}\n\n/** Shows a blocking loading overlay with an announced status message. */\nexport function openLoading(options: LoadingOptions = {}): LoadingHandle {\n requireDom();\n const config = getEngine().store.config.get();\n let open = true;\n let resolveClosed: () => void = () => undefined;\n const closed = new Promise<void>((resolve) => {\n resolveClosed = resolve;\n });\n const overlay = openOverlay({\n backdrop: options.backdrop,\n theme: options.theme ?? config.theme,\n mode: config.mode,\n dir: config.dir,\n className: `gk-overlay-loading${options.className ? ` ${options.className}` : ''}`,\n trap: false,\n onEscape: () => {\n if (options.allowEscape) handle.close();\n },\n });\n overlay.root.dataset.row = 'center';\n overlay.root.dataset.col = 'center';\n const spinner = icon('loading');\n spinner.classList.add('gk-loading-spinner');\n spinner.setAttribute('width', '32');\n spinner.setAttribute('height', '32');\n const label = el('div', 'gk-loading-text', { id: nextId('gk-text') });\n const fillBar = el('i');\n const track = el(\n 'div',\n 'gk-loading-bar',\n { role: 'progressbar', 'aria-valuemin': '0', 'aria-valuemax': '100' },\n fillBar,\n );\n const panel = el(\n 'div',\n 'gk-loading',\n {\n role: 'status',\n 'aria-live': 'polite',\n 'aria-busy': 'true',\n tabindex: '-1',\n 'data-gk-theme': options.theme ?? config.theme,\n 'data-gk-mode': config.mode,\n },\n spinner,\n label,\n track,\n );\n overlay.root.append(panel);\n\n let current: Pick<LoadingOptions, 'text' | 'progress'> = {\n text: options.text ?? options.title,\n progress: options.progress,\n };\n const apply = (patch: Pick<LoadingOptions, 'text' | 'progress'>): void => {\n current = patch;\n label.textContent = patch.text ?? '';\n label.hidden = !patch.text;\n track.hidden = patch.progress === undefined;\n if (patch.progress === undefined) {\n track.removeAttribute('aria-valuenow');\n } else {\n const pct = Math.round(Math.min(1, Math.max(0, patch.progress)) * 100);\n track.setAttribute('aria-valuenow', String(pct));\n if (patch.text) track.setAttribute('aria-label', patch.text);\n fillBar.style.width = `${pct}%`;\n }\n };\n apply(options);\n overlay.show();\n panel.focus();\n\n const handle: LoadingHandle = {\n closed,\n update(patch) {\n if (open) apply({ ...current, ...patch });\n },\n close() {\n if (!open) return;\n open = false;\n void overlay.close().then(resolveClosed);\n },\n };\n return handle;\n}\n","import type { ThemeDefinition, ThemeTokens } from './themes.ts';\n\nconst tokens = (t: ThemeTokens): string =>\n `--gk-bg:${t.bg};--gk-bg-solid:${t.solid};--gk-fg:${t.fg};--gk-muted:${t.muted};--gk-border:${t.border};--gk-shadow:${t.shadow};--gk-accent:${t.accent};--gk-accent-fg:${t.accentFg};--gk-danger:${t.danger};--gk-danger-fg:${t.dangerFg};--gk-success:${t.success};--gk-error:${t.error};--gk-warning:${t.warning};--gk-info:${t.info};`;\n\n/**\n * Renders the token blocks (light, explicit dark, class-based dark, and automatic dark) plus\n * fallbacks (no backdrop-filter, forced-colors, reduced transparency) and mobile optimizations.\n */\nexport function themeCss(def: ThemeDefinition): string {\n const sel = `[data-gk-theme=\"${def.name}\"]`;\n const shape =\n `--gk-radius:${def.radius};--gk-blur:${def.blur};--gk-saturate:${def.saturate};` +\n (def.borderWidth ? `--gk-border-w:${def.borderWidth};` : '') +\n (def.font ? `--gk-font:${def.font};` : '') +\n (def.ease ? `--gk-ease:${def.ease};` : '') +\n (def.duration ? `--gk-duration:${def.duration};` : '');\n\n const darkSel = `${sel}[data-gk-mode=\"dark\"],:is(.dark,[data-theme=\"dark\"]) ${sel}`;\n const extra = (def.css ?? '').split('&').join(sel);\n const darkTokens = tokens(def.dark);\n\n return (\n `${sel}{color-scheme:light;${shape}${tokens(def.light)}}` +\n `${darkSel}{color-scheme:dark;${darkTokens}}` +\n `@media (prefers-color-scheme:dark){${sel}[data-gk-mode=\"auto\"]{color-scheme:dark;${darkTokens}}}` +\n extra\n );\n}\n","import { themeCss } from '../themes/css.ts';\nimport type { ThemeDefinition, ThemeTokens } from '../themes/themes.ts';\n\nconst W = '#ffffff';\nconst R = '#b71c1c';\nconst D = '#1c1c1e';\nconst sh = (a: number) => `0 8px 28px rgba(0,0,0,${a})`;\nconst mk = (\n bg: string,\n fg: string,\n muted: string,\n border: string,\n s: number,\n accent: string,\n accentFg: string,\n danger: string,\n dangerFg: string,\n success: string,\n error: string,\n warning: string,\n info: string,\n): ThemeTokens => ({\n bg,\n solid: bg,\n fg,\n muted,\n border,\n shadow: sh(s),\n accent,\n accentFg,\n danger,\n dangerFg,\n success,\n error,\n warning,\n info,\n});\n\nconst DEFAULT_LIGHT = mk(\n W,\n '#1d1d1f',\n '#515156',\n 'rgba(60,60,67,0.22)',\n 0.14,\n '#0057c2',\n W,\n R,\n W,\n '#1a7f37',\n R,\n '#8a5a00',\n '#0b5cc7',\n);\nconst DEFAULT_DARK = mk(\n D,\n '#f5f5f7',\n '#b4b4bb',\n 'rgba(255,255,255,0.16)',\n 0.5,\n '#4da3ff',\n '#00152e',\n '#ff8a8a',\n '#2b0000',\n '#4ade80',\n '#ff7b7b',\n '#ffc857',\n '#6cb6ff',\n);\n\n/** Options for registering a custom theme via `ui.defineTheme()`. */\nexport interface CustomThemeDefinition {\n radius?: string;\n blur?: string;\n saturate?: string;\n font?: string;\n ease?: string;\n duration?: string;\n borderWidth?: string;\n tokens?:\n | {\n light?: Partial<ThemeTokens>;\n dark?: Partial<ThemeTokens>;\n }\n | Partial<ThemeTokens>;\n light?: Partial<ThemeTokens>;\n dark?: Partial<ThemeTokens>;\n css?: string;\n supportedVariants?: readonly string[];\n}\n\nconst customThemes = new Map<string, ThemeDefinition>();\n\n/**\n * Defines a custom theme. Compiles the tokens to CSS, registers the theme name with toastory,\n * and automatically injects a `<style data-gk-theme=\"<name>\">` element when called in the browser.\n *\n * @returns The compiled CSS string.\n */\nexport function defineTheme(name: string, def: CustomThemeDefinition): string {\n const t = def.tokens as { light?: Partial<ThemeTokens>; dark?: Partial<ThemeTokens> } | undefined;\n const lightInput =\n def.light ?? (t && ('light' in t || 'dark' in t) ? t.light : (t as Partial<ThemeTokens>));\n const darkInput = def.dark ?? (t && 'dark' in t ? t.dark : undefined);\n\n const fullDef: ThemeDefinition = {\n radius: '16px',\n blur: '16px',\n saturate: '160%',\n ...def,\n name,\n light: { ...DEFAULT_LIGHT, ...lightInput },\n dark: { ...DEFAULT_DARK, ...darkInput },\n };\n\n customThemes.set(name, fullDef);\n const css = themeCss(fullDef);\n\n if (typeof document !== 'undefined') {\n const sel = `style[data-gk-theme=\"${name}\"]`;\n let styleEl = document.querySelector<HTMLStyleElement>(sel);\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.setAttribute('data-gk-theme', name);\n document.head.append(styleEl);\n }\n styleEl.textContent = css;\n }\n\n return css;\n}\n\n/** Returns a custom theme definition if registered. */\nexport function getCustomTheme(name: string): ThemeDefinition | undefined {\n return customThemes.get(name);\n}\n\n/** Clears registered custom themes. Used for testing. */\nexport function clearCustomThemes(): void {\n if (typeof document !== 'undefined') {\n for (const name of customThemes.keys()) {\n document.querySelector(`style[data-gk-theme=\"${name}\"]`)?.remove();\n }\n }\n customThemes.clear();\n}\n","import { runSteps } from '../core';\nimport type {\n BottomSheetHandle,\n BottomSheetOptions,\n DialogOptions,\n DialogPromise,\n GlazeConfig,\n LoadingHandle,\n LoadingOptions,\n SheetOptions,\n SoundCue,\n StepsResult,\n ToastApi,\n ToastStore,\n} from '../core';\nimport { openDialog } from './dialog';\nimport { configure, getEngine } from './engine';\nimport { openBottomSheet, openLoading, openSheet } from './sheets';\nimport { defineTheme, type CustomThemeDefinition } from './theme-engine';\nimport { chime, playSound } from './sound';\n\n/** The unified toastory API. */\nexport interface Ui {\n /** Toast notifications. */\n toast: ToastApi;\n /** Confirmation dialog with confirm and cancel buttons. */\n confirm(options?: DialogOptions): DialogPromise;\n /** Informational dialog with a single button. */\n alert(options?: DialogOptions): DialogPromise;\n /** Dialog with an input. Defaults to a text input. */\n prompt(options?: DialogOptions): DialogPromise;\n /** Multi-step dialog flow with back navigation. */\n steps(steps: readonly DialogOptions[], backLabel?: string): Promise<StepsResult>;\n /** Action sheet. */\n sheet(options: SheetOptions): DialogPromise;\n /** Bottom sheet with snap points. */\n bottomSheet(options?: BottomSheetOptions): BottomSheetHandle;\n /** Blocking loading overlay. */\n loading(options?: LoadingOptions): LoadingHandle;\n /** Sets global configuration. Returns the resulting configuration. */\n configure(patch: Partial<GlazeConfig>): Readonly<GlazeConfig>;\n /** Plays an audio feedback sound cue, synthesizer chime, or audio URL. */\n sound(cue?: SoundCue | string | boolean, volume?: number): void;\n /** Defines a custom theme with tokens and optional CSS rules. */\n defineTheme(name: string, definition: CustomThemeDefinition): string;\n /** The underlying toast store. */\n readonly toastStore: ToastStore;\n}\n\n/** Builds the `ui` object. Called once at module load; touches no DOM. */\nexport function createUi(): Ui {\n const wb = (opts: DialogOptions, cancel: boolean, extra: Partial<DialogOptions> = {}) =>\n openDialog({ ...opts, ...extra, cancelButton: { show: cancel, ...opts.cancelButton } });\n return {\n toast: getEngine().toast,\n confirm: (options = {}) => wb(options, true),\n alert: (options = {}) => wb(options, false),\n prompt: (options = {}) => wb(options, true, { input: options.input ?? 'text' }),\n steps: (steps, backLabel) => runSteps(steps, (options) => wb(options, true), backLabel),\n sheet: openSheet,\n bottomSheet: openBottomSheet,\n loading: openLoading,\n configure,\n sound: (cue, volume) => playSound(cue, volume),\n defineTheme,\n get toastStore() {\n return getEngine().store;\n },\n };\n}\n\n/** The unified API: `ui.toast`, `ui.confirm`, `ui.sheet` and friends. */\nexport const ui: Ui = /* @__PURE__ */ createUi();\n\n/** Toast API on its own. Importing only this keeps dialog code out of your bundle. */\nexport const toast: ToastApi = /* @__PURE__ */ getEngine().toast;\n\nexport { playSound, chime };\n","import { useEffect, useMemo, useSyncExternalStore, type JSX } from 'react';\nimport type { GlazeConfig, ToastApi, ToastRecord, ToastoryConfig } from '../core';\nimport { canMountToaster, mountToaster } from '../web/toaster';\nimport { getEngine, setAutoMount } from '../web/engine';\nimport { toast, ui } from '../web/ui';\nimport { playSound, chime } from '../web/sound';\n\nexport { ui, toast, playSound, chime };\nexport type { Ui } from '../web/ui';\nexport type { GlazeConfig, ToastoryConfig };\n\n/** Props for the React Toaster component. */\nexport interface ToasterProps extends Partial<ToastoryConfig> {\n /** Custom container class name. */\n className?: string;\n}\n\n/**\n * React Toaster provider and container.\n * Safe for SSR and hydration. Configures toastory and handles toast rendering.\n */\nexport function Toaster(props: ToasterProps): JSX.Element | null {\n const { className: _className, ...configPatch } = props;\n void _className;\n const engine = getEngine();\n\n // Apply configuration on mount and prop changes\n useEffect(() => {\n if (Object.keys(configPatch).length > 0) {\n engine.store.config.set(configPatch);\n }\n }, [configPatch, engine]);\n\n useEffect(() => {\n // Disable web autoMount since React component manages the toaster lifecycle\n setAutoMount(false);\n\n if (canMountToaster()) {\n const handle = mountToaster(engine.store);\n return () => {\n handle.destroy();\n setAutoMount(true);\n };\n }\n return undefined;\n }, [engine]);\n\n return null;\n}\n\nconst EMPTY_TOASTS: readonly ToastRecord[] = [];\nconst getEmptyToasts = (): readonly ToastRecord[] => EMPTY_TOASTS;\n\n/** Hook returning the toast API and the list of currently active toasts. */\nexport function useToast(): {\n toast: ToastApi;\n toasts: readonly ToastRecord[];\n} {\n const engine = getEngine();\n const toasts = useSyncExternalStore(\n (onStoreChange) => engine.store.subscribe(onStoreChange),\n () => engine.store.getToasts(),\n getEmptyToasts,\n );\n\n return useMemo(() => ({ toast: engine.toast, toasts }), [engine, toasts]);\n}\n\n/** Hook returning the full `ui` toolkit and reactive toast state. */\nexport function useToastory(): {\n ui: typeof ui;\n toast: ToastApi;\n toasts: readonly ToastRecord[];\n config: Readonly<GlazeConfig>;\n} {\n const engine = getEngine();\n const toasts = useSyncExternalStore(\n (onStoreChange) => engine.store.subscribe(onStoreChange),\n () => engine.store.getToasts(),\n getEmptyToasts,\n );\n const config = useSyncExternalStore(\n (onStoreChange) => engine.store.config.subscribe(onStoreChange),\n () => engine.store.config.get(),\n () => engine.store.config.get(),\n );\n\n return useMemo(\n () => ({\n ui,\n toast: engine.toast,\n toasts,\n config,\n }),\n [engine, toasts, config],\n );\n}\n\n/** Backward compatibility alias for useToastory. */\nexport const useGlazekit = useToastory;\n"]}
1
+ {"version":3,"sources":["../src/core/clock.ts","../src/core/ids.ts","../src/core/config.ts","../src/core/timer.ts","../src/core/types-registry.ts","../src/core/toast-manager.ts","../src/core/a11y-rules.ts","../src/core/promise.ts","../src/core/dialog.ts","../src/core/toast-api.ts","../src/core/index.ts","../src/web/dom.ts","../src/web/icons.ts","../src/web/sanitize.ts","../src/web/variants.ts","../src/web/sound.ts","../src/web/toaster.ts","../src/web/overlay.ts","../src/web/engine.ts","../src/web/inputs.ts","../src/web/dialog.ts","../src/web/sheets.ts","../src/themes/css.ts","../src/web/theme-engine.ts","../src/web/ui.ts","../src/react/index.tsx"],"names":["custom","el","c","toast","target","o"],"mappings":"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","file":"react.js","sourcesContent":["/**\n * Injectable clock and scheduler interface.\n * Abstracts time and timers so tests and headless engines can run deterministically.\n */\nexport interface Clock {\n /** Returns the current timestamp in milliseconds. */\n now(): number;\n /**\n * Schedules a callback after `ms` milliseconds.\n * @returns A cancellation function.\n */\n setTimeout(fn: () => void, ms: number): () => void;\n /**\n * Schedules a recurring callback every `ms` milliseconds.\n * @returns A cancellation function.\n */\n setInterval(fn: () => void, ms: number): () => void;\n}\n\n/** Default system clock using standard global timer functions. */\nexport const defaultClock: Clock = {\n now: () => Date.now(),\n setTimeout: (fn, ms) => {\n const t = setTimeout(fn, ms);\n return () => clearTimeout(t);\n },\n setInterval: (fn, ms) => {\n const t = setInterval(fn, ms);\n return () => clearInterval(t);\n },\n};\n","import type { ToastId } from './types';\n\nlet counter = 0;\n\n/**\n * Returns a collision-safe, incremental unique identifier.\n * @param prefix Optional prefix for the id (default: 'gk').\n */\nexport function nextId(p = 'gk'): string {\n return `${p}-${++counter}`;\n}\n\n/**\n * Normalizes an optional user-provided id, generating an incremental id if omitted.\n * @param id User-supplied id or undefined.\n * @param prefix Prefix used when generating an id.\n */\nexport function normalizeId(id: ToastId | undefined, p = 'gk'): ToastId {\n return id !== undefined && id !== '' ? id : nextId(p);\n}\n\n/**\n * Resets the internal counter. Useful for deterministic test execution.\n */\nexport function resetIdCounter(): void {\n counter = 0;\n}\n","import type { GlazeConfig, Listener, Unsubscribe } from './types';\n\n/** Library default configuration. */\nexport const DEFAULT_CONFIG: Readonly<GlazeConfig> = Object.freeze({\n theme: 'ios-glass',\n mode: 'auto',\n position: 'top-right',\n duration: 4000,\n maxVisible: 8,\n gap: 12,\n stack: true,\n dir: 'auto',\n hotkey: 'alt+t',\n pauseOn: ['hover', 'focus', 'hidden'],\n shadow: true,\n closeButton: false,\n richColors: false,\n invert: false,\n swipe: true,\n dragThreshold: 45,\n progress: false,\n closeOnClick: false,\n exitDuration: 250,\n historyLimit: 100,\n regionLabel: 'Notifications',\n closeLabel: 'Close notification',\n startPaused: false,\n newestOnTop: true,\n dedupeWindow: 500,\n sound: false,\n soundVolume: 0.5,\n container: undefined,\n} satisfies GlazeConfig);\n\n/** Observable configuration container holding immutable snapshots. */\nexport interface ConfigStore {\n /** Returns the current immutable configuration snapshot. */\n get(): Readonly<GlazeConfig>;\n /** Merges a partial configuration and notifies subscribers. Returns the updated snapshot. */\n set(patch: Partial<GlazeConfig>): Readonly<GlazeConfig>;\n /** Restores library defaults. */\n reset(): void;\n /** Subscribes to configuration changes. */\n subscribe(listener: Listener): Unsubscribe;\n}\n\n/**\n * Resolves an option according to precedence:\n * Call option > Theme default > Global config > Library default.\n */\nexport const resolvePrecedence = <T>(\n callVal: T | undefined,\n themeVal: T | undefined,\n globalVal: T | undefined,\n defaultVal: T,\n): T => callVal ?? themeVal ?? globalVal ?? defaultVal;\n\n/** Creates an isolated, immutable configuration store. */\nexport function createConfigStore(initial: Partial<GlazeConfig> = {}): ConfigStore {\n let current: Readonly<GlazeConfig> = Object.freeze({\n ...DEFAULT_CONFIG,\n ...stripUndefined(initial),\n });\n const listeners = new Set<Listener>();\n\n const emit = (): void => {\n listeners.forEach((listener) => listener());\n };\n\n return {\n get: () => current,\n set(patch) {\n const next = { ...current, ...stripUndefined(patch) };\n if ((Object.keys(next) as (keyof GlazeConfig)[]).some((k) => next[k] !== current[k])) {\n current = Object.freeze(next);\n emit();\n }\n return current;\n },\n reset() {\n current = DEFAULT_CONFIG;\n emit();\n },\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\nfunction stripUndefined<T extends object>(value: T): Partial<T> {\n const out: Partial<T> = {};\n for (const k in value) if (value[k] !== undefined) out[k] = value[k];\n return out;\n}\n","import type { Clock } from './clock';\nimport { defaultClock } from './clock';\n\nexport interface PausableTimer {\n /** Starts or resumes the countdown. No effect when already running or finished. */\n start(): void;\n /**\n * Pauses the timer for a named reason (reference-counted).\n * @param reason The pause trigger identifier, e.g. 'hover', 'focus', 'hidden', 'manual'.\n */\n pause(reason?: string): void;\n /**\n * Resumes the timer for a named reason (decrements reference count).\n * Restarts the countdown when all pause reasons are cleared.\n */\n resume(reason?: string): void;\n /** Adds milliseconds to the remaining countdown (or subtracts if negative). */\n add(ms: number): void;\n /** Resets the countdown duration and restarts if previously active. */\n reset(ms?: number): void;\n /** Permanently cancels and tears down the timer. */\n cancel(): void;\n /** Current milliseconds remaining on the countdown. */\n remaining(): number;\n /** Current milliseconds elapsed on the countdown. */\n elapsed(): number;\n /** Whether the countdown is actively ticking. */\n isRunning(): boolean;\n /** Whether the countdown is held by one or more pause reasons. */\n isPaused(): boolean;\n /** List of all currently active pause reason names. */\n pausedReasons(): string[];\n /** Clears all pause reasons and resumes if started. */\n clearReasons(): void;\n /** Registers a progress tick listener called while ticking. */\n onTick(callback: (remaining: number, fraction: number) => void): () => void;\n}\n\n/**\n * Creates a pausable countdown timer with reference-counted pause reasons.\n *\n * @param duration Total countdown duration in milliseconds.\n * @param onDone Callback fired when countdown reaches zero.\n * @param clock Injectable clock/scheduler (defaults to defaultClock).\n */\nexport function createTimer(\n duration: number,\n onDone: () => void,\n clock: Clock = defaultClock,\n): PausableTimer {\n let total = duration;\n let remMs = duration;\n let startedAt = 0;\n let cancelT: (() => void) | undefined;\n let cancelI: (() => void) | undefined;\n let started = false;\n let done = false;\n\n const reasons = new Map<string, number>();\n const ticks = new Set<(remaining: number, fraction: number) => void>();\n\n const isLive = (): boolean => Number.isFinite(remMs) && remMs > 0;\n const active = (): boolean => started && !reasons.size;\n\n const getRem = (): number =>\n done ? 0 : active() ? Math.max(0, remMs - (clock.now() - startedAt)) : remMs;\n\n const notifyTick = (): void => {\n if (!ticks.size) return;\n const r = getRem();\n const f = total > 0 ? Math.max(0, Math.min(1, r / total)) : 0;\n for (const cb of ticks) {\n try {\n cb(r, f);\n } catch (err) {\n console.error(err);\n }\n }\n };\n\n const stop = (): void => {\n cancelT?.();\n cancelI?.();\n cancelT = cancelI = undefined;\n };\n\n const arm = (): void => {\n stop();\n if (!isLive() || reasons.size || done) return;\n startedAt = clock.now();\n cancelT = clock.setTimeout(() => {\n stop();\n remMs = 0;\n done = true;\n started = false;\n notifyTick();\n onDone();\n }, remMs);\n if (ticks.size) cancelI = clock.setInterval(notifyTick, 50);\n };\n\n return {\n start() {\n if (done || !isLive()) return;\n started = true;\n reasons.clear();\n arm();\n notifyTick();\n },\n pause(reason = 'manual') {\n if (done) return;\n reasons.set(reason, (reasons.get(reason) ?? 0) + 1);\n if (started && reasons.size === 1) {\n remMs = Math.max(0, remMs - (clock.now() - startedAt));\n stop();\n notifyTick();\n }\n },\n resume(reason = 'manual') {\n const c = !done && reasons.get(reason);\n if (!c) return;\n if (c <= 1) reasons.delete(reason);\n else reasons.set(reason, c - 1);\n if (active() && isLive()) {\n arm();\n notifyTick();\n }\n },\n clearReasons() {\n reasons.clear();\n if (started && isLive()) arm();\n },\n add(ms: number) {\n if (done || !Number.isFinite(remMs)) return;\n const live = active();\n remMs = Math.max(1, getRem() + ms);\n total = Math.max(total, remMs);\n if (live) arm();\n notifyTick();\n },\n reset(ms?: number) {\n done = false;\n remMs = total = ms ?? total;\n if (active()) {\n if (isLive()) arm();\n else stop();\n }\n notifyTick();\n },\n cancel() {\n stop();\n ticks.clear();\n started = false;\n done = true;\n remMs = 0;\n },\n remaining: getRem,\n elapsed: () => Math.max(0, total - getRem()),\n isRunning: () => active() && !done && isLive(),\n isPaused: () => reasons.size > 0,\n pausedReasons: () => [...reasons.keys()],\n onTick(cb) {\n ticks.add(cb);\n if (active() && !cancelI) cancelI = clock.setInterval(notifyTick, 50);\n return () => {\n ticks.delete(cb);\n if (!ticks.size && cancelI) {\n cancelI();\n cancelI = undefined;\n }\n };\n },\n };\n}\n","import type { ToastTypeDefinition } from './types';\n\n/** Registry of custom and built-in toast types. */\nexport interface TypeRegistry {\n /**\n * Registers or replaces a toast type.\n * @param name Non-empty type name.\n * @param definition Defaults, icon, color tokens, default duration, ariaLive.\n */\n add(name: string, definition?: ToastTypeDefinition): void;\n /** Removes a type. Returns whether it existed. */\n remove(name: string): boolean;\n /** Looks a type up. */\n get(name: string): ToastTypeDefinition | undefined;\n /** Lists registered custom type names. */\n list(): string[];\n}\n\nconst tDef = (color: string, ariaLive: 'polite' | 'assertive' = 'polite') => ({\n color: `var(--gk-${color})`,\n ariaLive,\n});\n\nconst BUILT_IN_TYPES: Record<string, ToastTypeDefinition> = {\n success: tDef('success'),\n error: tDef('error', 'assertive'),\n warning: tDef('warning', 'assertive'),\n info: tDef('info'),\n loading: { ...tDef('info'), defaults: { duration: 0, dismissible: false } },\n message: tDef('fg'),\n};\n\n/** Creates a type registry. */\nexport function createTypeRegistry(): TypeRegistry {\n const custom = new Map<string, ToastTypeDefinition>();\n\n return {\n add(name, definition = {}) {\n const k = typeof name === 'string' ? name.trim() : '';\n if (!k) throw new TypeError('toastory: invalid type');\n custom.set(k, definition);\n },\n remove: (name) => custom.delete(name),\n get: (name) => custom.get(name) ?? BUILT_IN_TYPES[name],\n list: () => [...custom.keys()],\n };\n}\n","import type { Clock } from './clock';\nimport { defaultClock } from './clock';\nimport type { ConfigStore } from './config';\nimport { createConfigStore } from './config';\nimport { normalizeId } from './ids';\nimport { createTimer } from './timer';\nimport type { PausableTimer } from './timer';\nimport { createTypeRegistry } from './types-registry';\nimport type { TypeRegistry } from './types-registry';\nimport type {\n CloseReason,\n Listener,\n ToastCustomRenderer,\n ToastId,\n ToastOptions,\n ToastPatch,\n ToastRecord,\n Unsubscribe,\n} from './types';\n\nconst safeCall = <A, B>(fn?: (a: A, b: B) => void, a?: A, b?: B): void => {\n try {\n fn?.(a as A, b as B);\n } catch (err) {\n console.error(err);\n }\n};\n\n/** Pause reason used by `startPaused`. */\nexport const MANUAL_PAUSE = 'manual';\n\n/** Options for creating a toast manager / store. */\nexport interface ToastManagerOptions {\n config?: ConfigStore;\n clock?: Clock;\n now?: () => number;\n types?: TypeRegistry;\n}\n\nexport type ToastStoreOptions = ToastManagerOptions;\n\n/** Input for adding a toast. */\nexport interface AddToastInput extends ToastOptions {\n custom?: ToastCustomRenderer;\n}\n\ninterface Entry {\n opts: ToastOptions;\n custom: ToastCustomRenderer | undefined;\n record: ToastRecord;\n timer: PausableTimer;\n dedupeKey: string | undefined;\n exitHandle: (() => void) | undefined;\n reason: CloseReason | undefined;\n flags: number;\n}\n\n/** State container for toasts. Pure logic: no DOM, no framework. */\nexport interface ToastManager {\n add(input: AddToastInput): ToastId;\n update(id: ToastId, patch: ToastPatch): boolean;\n dismiss(id?: ToastId, reason?: CloseReason): void;\n dismissAll(reason?: CloseReason): void;\n pause(id: ToastId | undefined, reason: string): void;\n resume(id: ToastId | undefined, reason: string): void;\n extend(id: ToastId, ms: number): void;\n getRemaining(id: ToastId): number;\n getToasts(): readonly ToastRecord[];\n getHistory(): readonly ToastRecord[];\n clear(): void;\n clearHistory(): void;\n subscribe(listener: Listener): Unsubscribe;\n readonly config: ConfigStore;\n readonly types: TypeRegistry;\n}\n\nexport type ToastStore = ToastManager;\n\nexport function createToastManager(options: ToastManagerOptions = {}): ToastManager {\n const config = options.config ?? createConfigStore();\n const clock = options.clock ?? defaultClock;\n const now = options.now ?? clock.now;\n const types = options.types ?? createTypeRegistry();\n\n const entries = new Map<ToastId, Entry>();\n let order: ToastId[] = [];\n let snapshot: readonly ToastRecord[] = [];\n let history: readonly ToastRecord[] = [];\n const listeners = new Set<Listener>();\n\n const emit = (): void => {\n snapshot = order.map((id) => entries.get(id)?.record).filter(Boolean) as ToastRecord[];\n listeners.forEach((listener) => listener());\n };\n\n const build = (\n id: ToastId,\n opts: ToastOptions,\n previous: ToastRecord | undefined,\n custom: ToastCustomRenderer | undefined,\n ): ToastRecord => {\n const cfg = config.get();\n const type = opts.type ?? 'default';\n const merged: ToastOptions = {\n ...types.get(type)?.defaults,\n ...opts,\n };\n merged.title ??= merged.text1;\n merged.description ??= merged.text2;\n merged.onOpen ??= merged.onShow;\n merged.onClose ??= merged.onHide;\n if (!merged.actions && merged.buttons) {\n merged.actions = merged.buttons.map((b) => ({\n label: b.label,\n onClick: (e: { preventDefault(): void; defaultPrevented: boolean }) =>\n (b.onClick ?? b.onPress)?.(e),\n autoDismiss: b.autoDismiss,\n kind: b.kind,\n }));\n }\n const rawDuration =\n merged.autoHide === false ? 0 : (merged.duration ?? merged.visibilityTime ?? cfg.duration);\n const duration = Number.isFinite(rawDuration) && rawDuration > 0 ? rawDuration : 0;\n const urgent = merged.important || type === 'error';\n const stamp = now();\n\n const record: ToastRecord = {\n ...merged,\n id,\n type,\n duration,\n position: merged.position ?? cfg.position,\n ariaLive: merged.ariaLive ?? (urgent ? 'assertive' : 'polite'),\n role: merged.role ?? (urgent ? 'alert' : 'status'),\n createdAt: previous?.createdAt ?? stamp,\n updatedAt: stamp,\n revision: (previous?.revision ?? -1) + 1,\n timerEpoch: previous?.timerEpoch ?? 0,\n count: previous?.count ?? 1,\n visible: previous?.visible ?? false,\n dismissed: false,\n pausedBy: previous?.pausedBy ?? (cfg.startPaused ? [MANUAL_PAUSE] : []),\n remaining: previous?.remaining ?? (duration || Infinity),\n custom,\n };\n return record;\n };\n\n const remainingOf = (entry: Entry): number => {\n return entry.record.duration === 0 ? Infinity : entry.timer.remaining();\n };\n\n const dedupeKeyOf = (o: ToastOptions): string | undefined => {\n if (o.dedupe === false) return;\n if (typeof o.dedupe === 'string') return o.dedupe;\n const t = o.title ?? o.text1;\n const d = o.description ?? o.text2;\n return typeof t === 'string' || typeof d === 'string'\n ? `${o.type ?? 'default'}|${t ?? ''}|${d ?? ''}`\n : undefined;\n };\n\n const promote = (): void => {\n const { maxVisible } = config.get();\n const counts = new Map<string, number>();\n for (const id of order) {\n const entry = entries.get(id);\n if (!entry || entry.record.dismissed) continue;\n const key = `${entry.record.container ?? ''}|${entry.record.position}`;\n const used = counts.get(key) ?? 0;\n const imp = !!entry.record.important;\n if (used < maxVisible || imp) {\n if (!entry.record.visible) {\n entry.record = { ...entry.record, visible: true };\n if (!entry.record.pausedBy.length && entry.record.duration > 0) entry.timer.start();\n }\n if (!imp) counts.set(key, used + 1);\n } else if (entry.record.visible) {\n entry.record = { ...entry.record, visible: false };\n entry.timer.pause();\n }\n }\n };\n\n const finalize = (entry: Entry): void => {\n entry.exitHandle?.();\n entry.timer.cancel();\n entries.delete(entry.record.id);\n order = order.filter((id) => id !== entry.record.id);\n history = [{ ...entry.record, dismissed: true }, ...history].slice(\n 0,\n config.get().historyLimit,\n );\n promote();\n flushOpened();\n emit();\n if (!(entry.flags & 2)) {\n entry.flags |= 2;\n safeCall(entry.record.onClose, entry.record, entry.reason ?? 'api');\n }\n };\n\n const dismissEntry = (entry: Entry, reason: CloseReason): void => {\n if (entry.record.dismissed) return;\n if (\n entry.record.dismissible === false &&\n (reason === 'user' || reason === 'swipe' || reason === 'click')\n )\n return;\n entry.reason = reason;\n entry.record = {\n ...entry.record,\n dismissed: true,\n remaining: 0,\n revision: entry.record.revision + 1,\n };\n entry.timer.cancel();\n\n if (!(entry.flags & 4) && reason !== 'auto') {\n entry.flags |= 4;\n safeCall(entry.record.onDismiss, entry.record, reason);\n }\n\n promote();\n flushOpened();\n emit();\n\n const exit = config.get().exitDuration;\n if (exit <= 0 || !entry.record.visible) {\n finalize(entry);\n } else {\n entry.exitHandle = clock.setTimeout(() => finalize(entry), exit);\n }\n };\n\n const makeEntry = (id: ToastId, input: AddToastInput): Entry => {\n const { custom, ...opts } = input;\n const record = build(id, opts, undefined, custom);\n const entry: Entry = {\n opts,\n custom,\n record,\n timer: undefined as unknown as PausableTimer,\n dedupeKey: dedupeKeyOf(opts),\n exitHandle: undefined,\n reason: undefined,\n flags: 0,\n };\n entry.timer = createTimer(\n record.duration,\n () => {\n if (!(entry.flags & 8)) {\n entry.flags |= 8;\n safeCall(entry.record.onAutoClose, entry.record);\n }\n dismissEntry(entry, 'auto');\n },\n clock,\n );\n if (record.pausedBy.length) entry.timer.pause();\n return entry;\n };\n\n const restartTimer = (entry: Entry): void => {\n entry.timer.cancel();\n if (entry.record.duration > 0) {\n entry.timer.reset(entry.record.duration);\n if (entry.record.visible && !entry.record.pausedBy.length) entry.timer.start();\n }\n entry.record = {\n ...entry.record,\n timerEpoch: entry.record.timerEpoch + 1,\n remaining: remainingOf(entry),\n };\n };\n\n const flushOpened = (): void => {\n for (const id of order) {\n const entry = entries.get(id);\n if (entry && entry.record.visible && !(entry.flags & 1) && !entry.record.dismissed) {\n entry.flags |= 1;\n safeCall(entry.record.onOpen, entry.record);\n }\n }\n };\n\n const store: ToastManager = {\n config,\n types,\n\n add(input: AddToastInput): ToastId {\n const id = normalizeId(input.id);\n const existing = entries.get(id);\n if (existing && !existing.record.dismissed) {\n const { custom, ...patch } = input;\n store.update(id, patch);\n if (custom) {\n existing.custom = custom;\n existing.record = { ...existing.record, custom };\n emit();\n }\n return id;\n }\n if (existing) finalize(existing);\n\n const key = dedupeKeyOf(input);\n if (key !== undefined) {\n for (const other of entries.values()) {\n if (other.dedupeKey === key && !other.record.dismissed) {\n other.record = {\n ...other.record,\n count: other.record.count + 1,\n revision: other.record.revision + 1,\n updatedAt: now(),\n };\n restartTimer(other);\n emit();\n return other.record.id;\n }\n }\n }\n\n const entry = makeEntry(id, input);\n entries.set(id, entry);\n order = [...order, id];\n promote();\n emit();\n flushOpened();\n return id;\n },\n\n update(id, patch) {\n const entry = entries.get(id);\n if (!entry || entry.record.dismissed) return false;\n const { resetTimer = true, ...rest } = patch;\n const next: ToastOptions = { ...entry.opts };\n if (rest.type !== undefined && rest.type !== entry.record.type) {\n delete next.duration;\n delete next.ariaLive;\n delete next.role;\n delete next.icon;\n }\n let changed = false;\n for (const key in rest) {\n const value = (rest as Record<string, unknown>)[key];\n if (value !== undefined) {\n if ((entry.opts as Record<string, unknown>)[key] !== value) changed = true;\n (next as Record<string, unknown>)[key] = value;\n }\n }\n if (!changed && rest.type === undefined && rest.position === undefined) return true;\n entry.opts = next;\n entry.dedupeKey = dedupeKeyOf(next);\n const rebuilt = build(id, next, entry.record, entry.custom);\n const positionChanged = rebuilt.position !== entry.record.position;\n entry.record = rebuilt;\n if (positionChanged) {\n entry.record = { ...entry.record, visible: false };\n promote();\n }\n if (resetTimer || positionChanged) restartTimer(entry);\n else {\n entry.record = {\n ...entry.record,\n remaining: remainingOf(entry),\n };\n }\n emit();\n flushOpened();\n return true;\n },\n\n dismiss(id, reason = 'api') {\n if (id === undefined) return store.dismissAll(reason);\n const entry = entries.get(id);\n if (entry) dismissEntry(entry, reason);\n },\n\n dismissAll(reason = 'api') {\n for (const entry of entries.values()) dismissEntry(entry, reason);\n },\n\n pause(id, reason) {\n for (const e of id !== undefined ? [entries.get(id)] : entries.values()) {\n if (!e || e.record.pausedBy.includes(reason)) continue;\n e.timer.pause(reason);\n e.record = {\n ...e.record,\n pausedBy: [...e.record.pausedBy, reason],\n remaining: remainingOf(e),\n };\n }\n emit();\n },\n\n resume(id, reason) {\n for (const e of id !== undefined ? [entries.get(id)] : entries.values()) {\n if (!e || !e.record.pausedBy.includes(reason)) continue;\n e.timer.resume(reason);\n const pausedBy = e.record.pausedBy.filter((v) => v !== reason);\n e.record = { ...e.record, pausedBy, remaining: remainingOf(e) };\n if (!pausedBy.length && e.record.visible && e.record.duration > 0) e.timer.start();\n }\n emit();\n },\n\n extend(id, ms) {\n const entry = entries.get(id);\n if (!entry || entry.record.dismissed) return;\n entry.timer.add(ms);\n entry.record = {\n ...entry.record,\n remaining: remainingOf(entry),\n timerEpoch: entry.record.timerEpoch + 1,\n revision: entry.record.revision + 1,\n };\n emit();\n },\n\n getRemaining(id) {\n const entry = entries.get(id);\n return entry ? remainingOf(entry) : 0;\n },\n\n getToasts: () => snapshot,\n getHistory: () => history,\n\n clear() {\n for (const entry of entries.values()) {\n entry.exitHandle?.();\n entry.timer.cancel();\n }\n entries.clear();\n order = [];\n snapshot = [];\n emit();\n },\n\n clearHistory() {\n history = [];\n emit();\n },\n\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n\n return store;\n}\n\nexport const createToastStore = createToastManager;\n","import type { DialogOptions, ToastType } from './types';\n\n/** Decides ARIA live politeness level. */\nexport const decideAriaLive = (\n type?: ToastType,\n important?: boolean,\n custom?: 'polite' | 'assertive' | 'off',\n): 'polite' | 'assertive' | 'off' =>\n custom ?? (important || type === 'error' || type === 'warning' ? 'assertive' : 'polite');\n\n/** Decides ARIA role for a toast. */\nexport const decideToastRole = (\n type?: ToastType,\n important?: boolean,\n custom?: 'status' | 'alert' | 'log',\n): 'status' | 'alert' | 'log' => custom ?? (important || type === 'error' ? 'alert' : 'status');\n\n/** Decides ARIA dialog role. */\nexport const decideDialogRole = (o: DialogOptions): 'dialog' | 'alertdialog' =>\n !o.input && (o.tone === 'danger' || o.tone === 'warning') ? 'alertdialog' : 'dialog';\n\n/** Decides which element receives initial focus when a dialog opens. */\nexport const decideFocusTarget = (\n o: DialogOptions,\n): 'confirm' | 'deny' | 'cancel' | 'input' | 'close' | 'none' =>\n o.focusOn ??\n (o.input !== undefined\n ? 'input'\n : o.tone === 'danger' && o.cancelButton?.show !== false\n ? 'cancel'\n : 'confirm');\n\n/** Computes accessible labels and button text with default fallbacks. */\nexport const decideDialogLabels = (\n o: DialogOptions,\n): { confirmLabel: string; denyLabel: string; cancelLabel: string } => ({\n confirmLabel: o.confirmButton?.label ?? 'OK',\n denyLabel: o.denyButton?.label ?? 'No',\n cancelLabel: o.cancelButton?.label ?? 'Cancel',\n});\n","import type { PromiseHandle, PromiseMessages, ToastId, ToastOptions, ToastPatch } from './types';\nimport type { ToastStore } from './toast-manager';\n\nconst toPatch = (m: string | ToastPatch): ToastPatch => (typeof m === 'string' ? { title: m } : m);\n\nconst errorText = (e: unknown): string => (e instanceof Error ? e.message : String(e));\n\n/**\n * Handles async promise toasts: displays loading state, resolves to success or error,\n * calls lifecycle hooks, and provides `unwrap()` returning the raw promise result.\n */\nexport function runPromiseToast<T>(\n store: ToastStore,\n input: Promise<T> | (() => Promise<T>),\n messages: PromiseMessages<T>,\n options: ToastOptions = {},\n): PromiseHandle<T> {\n let promise: Promise<T>;\n try {\n promise = typeof input === 'function' ? input() : input;\n } catch (error) {\n promise = Promise.reject(error);\n }\n\n const { id: requestedId, ...base } = options;\n const loadingPatch = toPatch(messages.loading);\n\n const id: ToastId = store.add({\n ...base,\n id: requestedId,\n ...loadingPatch,\n type: 'loading',\n duration: 0,\n });\n\n const settle = (type: 'success' | 'error', raw: unknown, payload: unknown): void => {\n const desc =\n typeof messages.description === 'function'\n ? messages.description(\n type === 'success'\n ? { status: type, value: payload as T }\n : { status: type, error: payload },\n )\n : messages.description;\n store.update(id, {\n duration: base.duration ?? store.config.get().duration,\n ...toPatch(raw as string | ToastPatch),\n type,\n ...(desc !== undefined ? { description: desc } : {}),\n resetTimer: true,\n });\n };\n\n promise\n .then((value) => {\n if (messages.success === undefined) {\n store.dismiss(id);\n } else {\n settle(\n 'success',\n typeof messages.success === 'function' ? messages.success(value) : messages.success,\n value,\n );\n }\n })\n .catch((error: unknown) => {\n settle(\n 'error',\n messages.error === undefined\n ? errorText(error)\n : typeof messages.error === 'function'\n ? messages.error(error)\n : messages.error,\n error,\n );\n })\n .finally(() => {\n try {\n void messages.finally?.();\n } catch (err) {\n console.error(err);\n }\n });\n\n return {\n id,\n unwrap: () => promise,\n };\n}\n","import { createTimer } from './timer';\nimport type { PausableTimer } from './timer';\nimport type { Listener, Unsubscribe } from './types';\n\nexport type {\n DialogBackdrop,\n DialogButton,\n DialogChoice,\n DialogColumn,\n DialogHandle,\n DialogIcon,\n DialogInputType,\n DialogOptions,\n DialogPosition,\n DialogResult,\n DialogRow,\n DialogTone,\n DismissReason,\n ValidateResult,\n} from './types';\nimport type {\n DialogHandle,\n DialogOptions,\n DialogResult,\n DismissReason,\n ValidateResult,\n} from './types';\n\n/** Observable view of a running dialog. */\nexport interface DialogState {\n /** Current merged options. */\n options: DialogOptions;\n /** Which button is busy. */\n loading: 'confirm' | 'deny' | null;\n /** Inline error. */\n error: string | undefined;\n /** `true` until the dialog resolves. */\n open: boolean;\n /** Increments on every change. */\n revision: number;\n}\n\n/** Drives validation, async hooks, timer and result of one dialog. No DOM. */\nexport interface DialogController {\n /** Control surface shared with user callbacks. */\n readonly handle: DialogHandle;\n /** Current state. */\n getState(): DialogState;\n /** Subscribes to state changes. */\n subscribe(listener: Listener): Unsubscribe;\n /** Renderer supplies the function that reads the current input value. */\n setValueReader(reader: () => unknown): void;\n /** Renderer calls this once mounted. Starts the timer and fires `didOpen`. */\n opened(): void;\n /** Runs confirm or deny. Resolves after hooks have run. */\n submit(kind: 'confirm' | 'deny'): Promise<void>;\n /** Dismisses when allowed. Returns whether the dialog closed. */\n dismiss(reason: DismissReason): boolean;\n}\n\nconst messageOf = (err: unknown): string => (err instanceof Error ? err.message : String(err));\n\n/** Creates the controller for a dialog. */\nexport function createDialogController(initial: DialogOptions): DialogController {\n let options: DialogOptions = { ...initial };\n let loading: DialogState['loading'] = null;\n let error: string | undefined;\n let open = true;\n let revision = 0;\n let timer: PausableTimer | undefined;\n let readValue: () => unknown = () => options.inputValue;\n let resolveResult: (result: DialogResult) => void = () => undefined;\n const listeners = new Set<Listener>();\n const result = new Promise<DialogResult>((resolve) => {\n resolveResult = resolve;\n });\n let state: DialogState = { options, loading, error, open, revision };\n\n const emit = (): void => {\n revision += 1;\n state = { options, loading, error, open, revision };\n for (const listener of [...listeners]) {\n try {\n listener();\n } catch (err) {\n console.error(err);\n }\n }\n };\n\n const finish = (partial: Partial<DialogResult>): void => {\n if (!open) return;\n const final: DialogResult = {\n isConfirmed: false,\n isDenied: false,\n isDismissed: false,\n value: undefined,\n dismiss: undefined,\n ...partial,\n };\n try {\n options.willClose?.(handle, final);\n } catch (err) {\n console.error(err);\n }\n open = false;\n timer?.cancel();\n emit();\n listeners.clear();\n resolveResult(final);\n };\n\n const startTimer = (ms: number): void => {\n timer?.cancel();\n timer = undefined;\n if (ms > 0 && Number.isFinite(ms)) {\n timer = createTimer(ms, () => {\n finish({ isDismissed: true, dismiss: 'timer' });\n });\n timer.start();\n }\n };\n\n const handle: DialogHandle = {\n result,\n close(partial) {\n finish(partial ?? { isDismissed: true, dismiss: 'close' });\n },\n update(patch) {\n if (!open) return;\n options = { ...options, ...patch };\n if (patch.timer !== undefined) startTimer(patch.timer);\n emit();\n },\n setLoading(value) {\n if (!open) return;\n loading = value === true ? 'confirm' : value === false ? null : value;\n emit();\n },\n showError(message) {\n if (!open) return;\n error = message ?? undefined;\n emit();\n },\n timer: {\n pause: () => {\n timer?.pause();\n emit();\n },\n resume: () => {\n timer?.resume();\n emit();\n },\n add: (ms) => {\n if (timer) timer.add(ms);\n else startTimer(Math.max(1, ms));\n emit();\n },\n remaining: () => timer?.remaining() ?? 0,\n paused: () => (timer ? !timer.isRunning() && timer.remaining() > 0 : false),\n },\n };\n\n const controller: DialogController = {\n handle,\n getState: () => state,\n subscribe(listener) {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n setValueReader(reader) {\n readValue = reader;\n },\n opened() {\n if (!open) return;\n if (options.timer !== undefined) startTimer(options.timer);\n emit();\n try {\n options.didOpen?.(handle);\n } catch (err) {\n console.error(err);\n }\n },\n async submit(kind) {\n if (!open || loading) return;\n let value = readValue();\n if (error !== undefined) {\n error = undefined;\n emit();\n }\n if (kind === 'confirm' && options.validate) {\n loading = 'confirm';\n emit();\n let msg: ValidateResult;\n try {\n msg = await options.validate(value, handle);\n } catch (t) {\n msg = messageOf(t);\n }\n loading = null;\n if (!open) return;\n if (typeof msg === 'string' && msg) {\n error = msg;\n emit();\n return;\n }\n emit();\n }\n const hook = kind === 'confirm' ? options.preConfirm : options.preDeny;\n if (hook) {\n loading = kind;\n emit();\n let out: unknown;\n try {\n out = await hook(value, handle);\n } catch (t) {\n loading = null;\n if (open) {\n error = messageOf(t);\n emit();\n }\n return;\n }\n loading = null;\n if (!open) return;\n if (out === false) {\n emit();\n return;\n }\n if (out !== undefined) value = out;\n }\n finish({ isConfirmed: kind === 'confirm', isDenied: kind === 'deny', value });\n },\n dismiss(reason) {\n if (!open || (loading && reason !== 'timer')) return false;\n if (reason === 'backdrop' && options.allowOutsideClick === false) return false;\n if (reason === 'esc' && options.allowEscape === false) return false;\n finish({ isDismissed: true, dismiss: reason });\n return true;\n },\n };\n\n return controller;\n}\n\n/** Promise returned by dialog helpers, with the live handle attached. */\nexport type DialogPromise<R = DialogResult> = Promise<R> & { handle: DialogHandle };\n\n/** Result of `ui.steps`. */\nexport interface StepsResult extends DialogResult {\n /** Confirmed values of every completed step. */\n values: unknown[];\n /** Zero based index of the step the flow ended on. */\n step: number;\n}\n\n/**\n * Runs dialogs one after another. From the second step on, the deny button becomes a \"back\"\n * button using `backLabel`, and activating it returns to the previous step.\n * @param steps Options of each step.\n * @param openOrManager Opens one dialog, or a DialogManager instance.\n * @param backLabel Label for the back button.\n */\nexport async function runSteps(\n steps: readonly DialogOptions[],\n open: (options: DialogOptions) => Promise<DialogResult>,\n backLabel = 'Back',\n): Promise<StepsResult> {\n const values: unknown[] = [];\n let index = 0;\n let last: DialogResult = {\n isConfirmed: false,\n isDenied: false,\n isDismissed: true,\n value: undefined,\n dismiss: 'close',\n };\n while (index < steps.length) {\n const base = steps[index];\n if (!base) {\n index += 1;\n continue;\n }\n const options: DialogOptions =\n index > 0\n ? { ...base, denyButton: { show: true, label: backLabel, ...base.denyButton } }\n : base;\n const previous = values[index];\n const restored =\n typeof previous === 'string' || typeof previous === 'number' || typeof previous === 'boolean'\n ? previous\n : options.inputValue;\n last = await open({ ...options, inputValue: restored });\n if (last.isConfirmed) {\n values[index] = last.value;\n index += 1;\n } else if (last.isDenied && index > 0) {\n index -= 1;\n } else {\n return { ...last, values: values.slice(0, index), step: index };\n }\n }\n return { ...last, values, step: Math.max(0, steps.length - 1) };\n}\n","import { runPromiseToast } from './promise';\nimport type { ToastStore } from './toast-manager';\nimport type {\n PromiseHandle,\n PromiseMessage,\n PromiseMessages,\n PromiseOutcome,\n Renderable,\n ToastCustomRenderer,\n ToastId,\n ToastOptions,\n ToastPatch,\n ToastRecord,\n} from './types';\nimport type { TypeRegistry } from './types-registry';\n\nexport type { PromiseHandle, PromiseMessage, PromiseMessages, PromiseOutcome };\n\n/** Callable toast function shape shared by all entry points. */\nexport type ToastFn = (message?: Renderable, options?: ToastOptions) => ToastId;\n\n/** The `ui.toast` API. */\nexport interface ToastApi extends ToastFn {\n /** Success toast. */\n success: ToastFn;\n /** Error toast. Uses an assertive live region. */\n error: ToastFn;\n /** Informational toast. */\n info: ToastFn;\n /** Warning toast. */\n warning: ToastFn;\n /** Loading toast with indefinite duration. */\n loading: ToastFn;\n /** Neutral message toast. */\n message: ToastFn;\n /** Custom renderer. */\n custom: (renderer: ToastCustomRenderer, options?: ToastOptions) => ToastId;\n /** Updates an existing toast. */\n update: (id: ToastId, patch: ToastPatch) => boolean;\n /** Dismisses one toast, or all when id is omitted. */\n dismiss: (id?: ToastId) => void;\n /** Dismisses every toast in every region. */\n dismissAll: () => void;\n /** Tracks a promise with loading, success and error states. */\n promise: <T>(\n input: Promise<T> | (() => Promise<T>),\n messages: PromiseMessages<T>,\n options?: ToastOptions,\n ) => PromiseHandle<T>;\n /** Returns a snapshot of active and queued toasts. */\n getToasts: () => readonly ToastRecord[];\n /** Returns closed toasts up to `config.historyLimit`. */\n getHistory: () => readonly ToastRecord[];\n /** Registry of custom toast types. */\n readonly types: TypeRegistry;\n}\n\n/** Builds the `ui.toast` API on top of a store/manager. */\nexport function createToastApi(store: ToastStore): ToastApi {\n const make =\n (type?: ToastOptions['type']): ToastFn =>\n (message, options = {}) => {\n const input: ToastOptions = { type, ...options };\n if (options.type !== undefined) input.type = options.type;\n if (message !== undefined) {\n if (options.title === undefined) input.title = message;\n else if (options.description === undefined) input.description = message;\n }\n return store.add(input);\n };\n\n return Object.assign(make() as ToastApi, {\n success: make('success'),\n error: make('error'),\n info: make('info'),\n warning: make('warning'),\n loading: make('loading'),\n message: make('message'),\n custom: (renderer: ToastCustomRenderer, options?: ToastOptions) =>\n store.add({ ...options, custom: renderer }),\n update: store.update,\n dismiss: store.dismiss,\n dismissAll: store.dismissAll,\n getToasts: store.getToasts,\n getHistory: store.getHistory,\n types: store.types,\n promise: <T>(\n input: Promise<T> | (() => Promise<T>),\n messages: PromiseMessages<T>,\n options?: ToastOptions,\n ) => runPromiseToast(store, input, messages, options),\n });\n}\n","export { defaultClock } from './clock';\nexport type { Clock } from './clock';\n\nexport { nextId, normalizeId, resetIdCounter } from './ids';\n\nexport { createStore } from './store';\nexport type { Store } from './types';\n\nexport { createTimer } from './timer';\nexport type { PausableTimer } from './timer';\n\nexport { createTypeRegistry } from './types-registry';\nexport type { TypeRegistry } from './types-registry';\n\nexport {\n decideAriaLive,\n decideDialogLabels,\n decideDialogRole,\n decideFocusTarget,\n decideToastRole,\n} from './a11y-rules';\n\nexport { createConfigStore, DEFAULT_CONFIG, resolvePrecedence } from './config';\nexport type { ConfigStore } from './config';\n\nexport { createToastManager, createToastStore, MANUAL_PAUSE } from './toast-manager';\nexport type { AddToastInput, ToastManager, ToastManagerOptions, ToastStore } from './toast-manager';\n\nexport { runPromiseToast } from './promise';\n\nexport { createDialogManager } from './dialog-manager';\nexport type { DialogManager, DialogQueueItem, HeadlessDialogController } from './dialog-manager';\n\nexport { createDialogController, runSteps } from './dialog';\nexport type { DialogController, DialogPromise, StepsResult } from './dialog';\n\nexport { createToastApi } from './toast-api';\nexport type {\n PromiseHandle,\n PromiseMessage,\n PromiseMessages,\n PromiseOutcome,\n ToastApi,\n ToastFn,\n} from './toast-api';\n\nexport { springEasing, Spring, springPosition, runSpringTask } from './spring';\nexport type { SpringConfig } from './spring';\n\nexport type * from './types';\n\nimport type { Clock } from './clock';\nimport { defaultClock } from './clock';\nimport type { ConfigStore } from './config';\nimport { createConfigStore } from './config';\nimport { runSteps } from './dialog';\nimport type { StepsResult } from './dialog';\nimport { createDialogManager } from './dialog-manager';\nimport type { DialogManager } from './dialog-manager';\nimport { createToastManager } from './toast-manager';\nimport type { ToastStore } from './toast-manager';\nimport { createToastApi } from './toast-api';\nimport type { ToastApi } from './toast-api';\nimport type {\n BottomSheetHandle,\n BottomSheetOptions,\n DialogHandle,\n DialogOptions,\n DialogResult,\n GlazeConfig,\n LoadingHandle,\n LoadingOptions,\n SheetOptions,\n ToastRecord,\n} from './types';\n\n/**\n * Renderer interface for bridging the framework-agnostic core to UI adapters.\n * If a call happens before a renderer is registered, it queues and replays upon registration.\n */\nexport interface Renderer {\n openDialog?(options: DialogOptions, handle: DialogHandle): Promise<DialogResult> | undefined;\n openSheet?(options: SheetOptions): Promise<DialogResult>;\n openBottomSheet?(options: BottomSheetOptions): BottomSheetHandle;\n openLoading?(options: LoadingOptions): LoadingHandle;\n mountToast?(record: ToastRecord): void;\n}\n\n/** Complete framework-agnostic UI feedback toolkit. */\nexport interface CoreUI {\n /** Toast notifications API. */\n readonly toast: ToastApi;\n /** Global configuration store. */\n readonly config: ConfigStore;\n /** Toast state manager. */\n readonly toastStore: ToastStore;\n /** Headless dialog manager. */\n readonly dialogManager: DialogManager;\n\n /** Opens a confirm dialog. */\n confirm(options: DialogOptions | string): Promise<DialogResult>;\n /** Opens an informational alert dialog. */\n alert(options: DialogOptions | string): Promise<DialogResult>;\n /** Opens a prompt dialog for user text/value input. */\n prompt(options: DialogOptions | string): Promise<DialogResult>;\n /** Runs a multi-step dialog sequence. */\n steps(steps: readonly DialogOptions[], backLabel?: string): Promise<StepsResult>;\n /** Opens an action sheet. */\n sheet(options: SheetOptions): Promise<DialogResult>;\n /** Opens a bottom sheet. */\n bottomSheet(options: BottomSheetOptions): BottomSheetHandle;\n /** Opens a loading overlay. */\n loading(options?: LoadingOptions | string): LoadingHandle;\n\n /** Merges global configuration. */\n configure(patch: Partial<GlazeConfig>): Readonly<GlazeConfig>;\n /** Returns the current configuration snapshot. */\n getConfig(): Readonly<GlazeConfig>;\n /** Clears all active toasts and dialogs. */\n clear(): void;\n\n /** Registers a concrete UI renderer, replaying any calls queued during hydration. */\n registerRenderer(renderer: Renderer): void;\n /** Returns the active renderer if registered. */\n getRenderer(): Renderer | undefined;\n}\n\nexport interface CreateUIOptions {\n config?: ConfigStore;\n clock?: Clock;\n}\n\n/**\n * Creates an isolated, framework-agnostic CoreUI instance.\n * Useful for multi-tenant applications, microfrontends, and isolated tests.\n */\nexport function createUI(options: CreateUIOptions = {}): CoreUI {\n const clock = options.clock ?? defaultClock;\n const config = options.config ?? createConfigStore();\n const toastStore = createToastManager({ config, clock });\n const toast = createToastApi(toastStore);\n const dialogManager = createDialogManager(clock);\n\n let renderer: Renderer | undefined;\n const q: (() => void)[] = [];\n const toOpts = (o: DialogOptions | string): DialogOptions =>\n typeof o === 'string' ? { title: o } : { ...o };\n\n const runDlg = (m: DialogOptions): Promise<DialogResult> => {\n const h = dialogManager.open(m);\n if (renderer?.openDialog) void renderer.openDialog(m, h);\n else q.push(() => void renderer?.openDialog?.(m, h));\n return h.result;\n };\n\n const DISMISSED: DialogResult = {\n isConfirmed: false,\n isDenied: false,\n isDismissed: true,\n value: undefined,\n dismiss: 'close',\n };\n\n const ui: CoreUI = {\n toast,\n config,\n toastStore,\n dialogManager,\n confirm: (o) =>\n runDlg({ confirmButton: { show: true }, cancelButton: { show: true }, ...toOpts(o) }),\n alert: (o) =>\n runDlg({\n confirmButton: { show: true },\n cancelButton: { show: false },\n denyButton: { show: false },\n ...toOpts(o),\n }),\n prompt: (o) =>\n runDlg({\n input: 'text',\n confirmButton: { show: true },\n cancelButton: { show: true },\n ...toOpts(o),\n }),\n steps: (list, back = 'Back') => runSteps(list, (s) => ui.confirm(s), back),\n sheet: (o) =>\n renderer?.openSheet\n ? renderer.openSheet(o)\n : new Promise((res) => {\n q.push(() =>\n renderer?.openSheet ? void renderer.openSheet(o).then(res) : res(DISMISSED),\n );\n }),\n bottomSheet(o) {\n if (renderer?.openBottomSheet) return renderer.openBottomSheet(o);\n let live: BottomSheetHandle | undefined;\n return {\n body: undefined,\n close: (r) => live?.close(r),\n snapTo: (i) => live?.snapTo(i),\n update: (p) => live?.update(p),\n result: new Promise((res) => {\n q.push(() =>\n renderer?.openBottomSheet\n ? void (live = renderer.openBottomSheet(o)).result.then(res)\n : res(DISMISSED),\n );\n }),\n };\n },\n loading(loadingOpts = {}) {\n const o = typeof loadingOpts === 'string' ? { text: loadingOpts } : loadingOpts;\n if (renderer?.openLoading) return renderer.openLoading(o);\n let live: LoadingHandle | undefined, done: () => void;\n const closed = new Promise<void>((res) => {\n done = res;\n });\n q.push(() =>\n renderer?.openLoading ? void (live = renderer.openLoading(o)).closed.then(done) : done(),\n );\n return {\n update: (p) => live?.update(p),\n close: () => {\n live?.close();\n done();\n },\n closed,\n };\n },\n configure: (p) => config.set(p),\n getConfig: () => config.get(),\n clear() {\n toastStore.clear();\n dialogManager.clear();\n q.length = 0;\n },\n registerRenderer(r) {\n renderer = r;\n while (q.length) q.shift()?.();\n },\n getRenderer: () => renderer,\n };\n\n return ui;\n}\n\nlet defaultUI: CoreUI | undefined;\nconst def = (): CoreUI => (defaultUI ??= createUI());\n\n/** Default singleton instance of the CoreUI toolkit. */\nexport const ui: CoreUI = {\n get toast() {\n return def().toast;\n },\n get config() {\n return def().config;\n },\n get toastStore() {\n return def().toastStore;\n },\n get dialogManager() {\n return def().dialogManager;\n },\n confirm: (o) => def().confirm(o),\n alert: (o) => def().alert(o),\n prompt: (o) => def().prompt(o),\n steps: (s, b) => def().steps(s, b),\n sheet: (o) => def().sheet(o),\n bottomSheet: (o) => def().bottomSheet(o),\n loading: (o) => def().loading(o),\n configure: (p) => def().configure(p),\n getConfig: () => def().getConfig(),\n clear: () => def().clear(),\n registerRenderer: (r) => def().registerRenderer(r),\n getRenderer: () => def().getRenderer(),\n};\n\n/** Registers the renderer with the default UI instance. */\nexport function registerRenderer(renderer: Renderer): void {\n def().registerRenderer(renderer);\n}\n\n/** Backward-compatible ToastEngine interface. */\nexport interface ToastEngine {\n store: ToastStore;\n toast: ToastApi;\n}\n\n/** Backward-compatible factory for ToastEngine. */\nexport function createToastEngine(options: { config?: ConfigStore } = {}): ToastEngine {\n const store = createToastManager({ config: options.config });\n return { store, toast: createToastApi(store) };\n}\n","import type { Renderable } from '../core';\n\n/** Small DOM helpers shared by the web renderers. Every function is safe to import on the server. */\n\n/** Whether a DOM is available right now. Evaluated at call time, never at import time. */\nexport function hasDom(): boolean {\n return typeof document !== 'undefined' && typeof document.createElement === 'function';\n}\n\n/** Asserts DOM availability, throwing in SSR or headless runtimes without document. */\nexport function requireDom(): void {\n if (typeof document === 'undefined') throw new Error('toastory: DOM required');\n}\n\ntype Child = Node | string | null | undefined | false;\n\n/**\n * Creates an element.\n * @param tag Tag name.\n * @param className Space separated classes, empty for none.\n * @param attrs Attributes to set. `undefined` values are skipped.\n * @param children Nodes or text.\n */\nexport function el<K extends keyof HTMLElementTagNameMap>(\n tag: K,\n className = '',\n attrs: Record<string, string | undefined> = {},\n ...children: Child[]\n): HTMLElementTagNameMap[K] {\n const node = document.createElement(tag);\n if (className) node.className = className;\n for (const k in attrs) if (attrs[k] !== undefined) node.setAttribute(k, attrs[k] as string);\n for (const child of children) {\n if (child) node.append(child);\n }\n return node;\n}\n\n/** Writes a renderable into a node: DOM nodes are appended, everything else becomes text. */\nexport function fill(target: HTMLElement, value: Renderable): void {\n if (value === undefined || value === null || value === false) return;\n if (typeof Node !== 'undefined' && value instanceof Node) target.append(value);\n else target.append(String(value));\n}\n\nexport { nextId } from '../core';\n\n/** Whether the user asked for reduced motion. */\nexport function prefersReducedMotion(): boolean {\n return typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/** Whether the OS currently prefers a dark color scheme. */\nexport function prefersDark(): boolean {\n return typeof matchMedia === 'function' && matchMedia('(prefers-color-scheme: dark)').matches;\n}\n\n/** Converts a number to a CSS length, leaving strings untouched. */\nexport function cssLength(value: string | number): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\n/** Elements that can receive keyboard focus. */\nexport const FOCUSABLE =\n 'a[href],button:not([disabled]),input:not([disabled]):not([type=hidden]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex=\"-1\"])';\n\n/** Lists visible focusable descendants in DOM order. */\nexport function focusables(root: HTMLElement): HTMLElement[] {\n return [...root.querySelectorAll<HTMLElement>(FOCUSABLE)].filter(\n (node) => !node.hasAttribute('hidden') && node.getAttribute('aria-hidden') !== 'true',\n );\n}\n","const C = 'M12 3a9 9 0 1 0 0 18a9 9 0 0 0 0-18z';\n\n/** Built-in icon names. */\nexport type IconName =\n | 'success'\n | 'error'\n | 'warning'\n | 'info'\n | 'question'\n | 'loading'\n | 'close'\n | 'trash'\n | 'lock'\n | 'shield'\n | 'check';\n\nexport const PATHS: Record<IconName, string> = {\n success: `${C}M8 12.4l2.6 2.6L16 9.4`,\n error: `${C}M9 9l6 6M15 9l-6 6`,\n warning: 'M12 3.5l9.2 16H2.8z M12 10v4.2M12 17.2h.01',\n info: `${C}M12 11v5.2M12 7.8h.01`,\n question: `${C}M9.6 9.6a2.5 2.5 0 1 1 3.6 2.2c-.8.4-1.2 1-1.2 1.8M12 17h.01`,\n loading: 'M12 3a9 9 0 1 0 9 9',\n close: 'M6 6l12 12M18 6L6 18',\n trash:\n 'M3 6h18 M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2 M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6',\n lock: 'M7 11V7a5 5 0 0 1 10 0v4 M5 11h14a2 2 0 0 1 2 2v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2z',\n shield: 'M12 22s8-4 8-10V5l-8-3-8 3v7c0 6 8 10 8 10z',\n check: 'M20 6L9 17l-5-5',\n};\n\nconst SVG_HEAD =\n 'viewBox=\"0 0 24 24\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\"';\n\n/**\n * Builds an inline SVG for a built-in icon. The SVG is decorative (`aria-hidden`) because\n * every toast and dialog states its meaning in text as well.\n */\nexport function icon(name: IconName): SVGElement {\n const p = PATHS[name] ?? PATHS.info;\n const cls = name === 'loading' ? ' class=\"gk-spin\"' : '';\n const div = document.createElement('div');\n div.innerHTML = `<svg ${SVG_HEAD}${cls}><path d=\"${p}\"/></svg>`;\n return div.firstElementChild as SVGElement;\n}\n\n/** Maps a toast type to its built-in icon name, if any. */\nexport function iconForType(type: string): IconName | undefined {\n return type === 'success' ||\n type === 'error' ||\n type === 'warning' ||\n type === 'info' ||\n type === 'loading'\n ? type\n : undefined;\n}\n","import { hasDom } from './dom';\n\n/** Function that turns untrusted HTML into safe HTML. Compatible with `DOMPurify.sanitize`. */\nexport type Sanitizer = (html: string) => string;\n\nlet custom: Sanitizer | undefined;\n\n/**\n * Replaces the built-in sanitizer, for example with DOMPurify:\n * `setSanitizer((html) => DOMPurify.sanitize(html))`.\n * Pass `undefined` to restore the built-in allowlist sanitizer.\n */\nexport function setSanitizer(fn: Sanitizer | undefined): void {\n custom = fn;\n}\n\nconst TAGS = new Set(\n 'a,abbr,b,blockquote,br,code,div,em,h1,h2,h3,h4,h5,h6,hr,i,img,kbd,li,mark,ol,p,pre,s,small,span,strong,sub,sup,u,ul'.split(\n ',',\n ),\n);\nconst ATTRS = new Set('href,src,alt,title,target,rel,width,height,lang,dir'.split(','));\nconst SAFE_URL =\n /^(?:https?:|mailto:|tel:|data:image\\/(?:png|jpe?g|webp|gif|svg\\+xml)[;,]|\\/|#|\\.\\/|\\.\\.\\/|[^:]*$)/i;\n\n/** Whether a URL is safe to place in `href` or `src`. Rejects `javascript:` and similar schemes. */\nexport function safeUrl(url: string): boolean {\n // eslint-disable-next-line no-control-regex -- control character stripping is essential for url security\n return SAFE_URL.test(url.replace(/[\\s\\u0000-\\u001f]/g, ''));\n}\n\nfunction walk(parent: Node): void {\n for (const node of [...parent.childNodes]) {\n if (node.nodeType === 3) continue;\n if (node.nodeType !== 1) {\n parent.removeChild(node);\n continue;\n }\n const element = node as Element;\n const tag = element.tagName.toLowerCase();\n if (!TAGS.has(tag)) {\n if (!/^(script|style|iframe|object|template)$/.test(tag)) {\n walk(element);\n while (element.firstChild) parent.insertBefore(element.firstChild, element);\n }\n parent.removeChild(element);\n continue;\n }\n for (const attr of [...element.attributes]) {\n const name = attr.name.toLowerCase();\n if (!ATTRS.has(name) || ((name === 'href' || name === 'src') && !safeUrl(attr.value)))\n element.removeAttribute(attr.name);\n }\n if (element.getAttribute('target') === '_blank')\n element.setAttribute('rel', 'noopener noreferrer');\n walk(element);\n }\n}\n\n/**\n * Parses untrusted HTML into an inert fragment containing only allowlisted tags and attributes.\n * Scripts, event handlers, styles and `javascript:` URLs are removed.\n * Returns `null` when no DOM exists.\n */\nexport function sanitizeToFragment(html: string): DocumentFragment | null {\n if (!hasDom()) return null;\n const pur = (globalThis as { DOMPurify?: { sanitize(h: string): string } }).DOMPurify;\n const external = custom ?? (pur ? (v: string) => pur.sanitize(v) : undefined);\n const template = document.createElement('template');\n template.innerHTML = external ? external(html) : html;\n if (!external) walk(template.content);\n return template.content;\n}\n","export function resolveVariant(\n _themeName: string,\n variant: string | undefined,\n): string | undefined {\n return variant;\n}\n","import type { BuiltInSoundCue, SoundCue, ToastType } from '../core';\n\n/** A single frequency note in a sound cue: [frequency in Hz, start offset in seconds, gain level 0..1]. */\nexport type SoundNote = [frequency: number, offset: number, level: number];\n\nlet audioCtx: AudioContext | undefined;\n\n/** Built-in melodic sound cues synthesized with Web Audio partials. */\nconst CUES: Record<string, SoundNote[]> = {\n success: [\n [392, 0, 1],\n [523, 0.1, 1],\n ],\n error: [\n [233, 0, 1],\n [185, 0.13, 1],\n ],\n warning: [\n [349, 0, 0.8],\n [349, 0.16, 0.6],\n ],\n info: [[466, 0, 0.9]],\n ding: [\n [659, 0, 0.9],\n [880, 0.08, 1],\n ],\n pop: [\n [440, 0, 0.7],\n [880, 0.03, 0.9],\n ],\n chime: [\n [523, 0, 0.8],\n [659, 0.09, 0.85],\n [784, 0.18, 1],\n ],\n bell: [\n [587, 0, 1],\n [1175, 0.04, 0.5],\n ],\n message: [\n [440, 0, 0.8],\n [659, 0.12, 0.9],\n ],\n bubble: [\n [330, 0, 0.6],\n [494, 0.06, 0.8],\n ],\n marimba: [\n [523, 0, 1],\n [659, 0.06, 0.9],\n [784, 0.12, 1],\n [1047, 0.18, 0.8],\n ],\n crystal: [\n [880, 0, 0.8],\n [1319, 0.08, 0.9],\n [1760, 0.16, 0.7],\n ],\n subtle: [[440, 0, 0.6]],\n harp: [\n [392, 0, 0.7],\n [494, 0.05, 0.8],\n [587, 0.1, 0.9],\n [784, 0.15, 1],\n ],\n};\n\nconst getAudioCtxClass = () =>\n typeof window !== 'undefined'\n ? window.AudioContext ||\n (window as unknown as { webkitAudioContext?: typeof AudioContext }).webkitAudioContext\n : undefined;\n\n/** Returns whether Web Audio is available in the current environment. */\nexport const isAudioSupported = (): boolean => Boolean(getAudioCtxClass());\n\n/** Returns the list of registered sound cue names. */\nexport const getSoundCues = (): readonly string[] => Object.keys(CUES);\n\n/** Registers or overrides a sound cue with custom frequency partials. */\nexport const registerSoundCue = (name: string, notes: SoundNote[]): void => {\n CUES[name] = notes;\n};\n\nconst MALLET = [\n [1, 0.6, 0.5],\n [2, 0.06, 0.15],\n] as const;\n\nfunction playTone(c: AudioContext, out: AudioNode, freq: number, at: number, level: number): void {\n const t = c.currentTime + at;\n const f = freq * (1 + (Math.random() - 0.5) * 0.008);\n for (const [m, gain, decay] of MALLET) {\n const osc = c.createOscillator();\n const g = c.createGain();\n osc.frequency.value = f * m;\n g.gain.setValueAtTime(1e-4, t);\n g.gain.linearRampToValueAtTime(gain * level, t + 0.015);\n g.gain.exponentialRampToValueAtTime(1e-4, t + decay);\n osc.connect(g).connect(out);\n osc.start(t);\n osc.stop(t + decay + 0.05);\n }\n}\n\nexport function playSound(cueOrType?: SoundCue | ToastType | boolean | string, volume = 0.5): void {\n if (!cueOrType || typeof window === 'undefined') return;\n const target = cueOrType === true ? 'info' : String(cueOrType);\n const vol = Math.min(1, Math.max(0, volume));\n\n if (/^(https?:|data:audio|blob:)/.test(target)) {\n try {\n const a = new Audio(target);\n a.volume = vol;\n void a.play().catch(() => undefined);\n } catch {\n // ignore\n }\n return;\n }\n\n const notes = CUES[target];\n const Ctx = notes && getAudioCtxClass();\n if (!notes || !Ctx) return;\n\n try {\n audioCtx ??= new Ctx();\n if (audioCtx.state === 'suspended') void audioCtx.resume();\n if (audioCtx.state === 'closed') return;\n\n const master = audioCtx.createGain();\n master.gain.value = vol * 0.45;\n const soften = audioCtx.createBiquadFilter();\n soften.frequency.value = 1300;\n master.connect(soften).connect(audioCtx.destination);\n for (const [freq, offset, level] of notes) playTone(audioCtx, master, freq, offset, level);\n } catch {\n // ignore\n }\n}\n\n/** Alias for playSound for backward compatibility with chime references. */\nexport const chime = playSound;\n\n/** Helper to resolve which sound to play for a toast record. */\nexport function resolveToastSound(\n recordSound: boolean | SoundCue | string | ((type: ToastType) => void) | undefined,\n globalSound: boolean | SoundCue | undefined,\n toastType: ToastType,\n): SoundCue | string | undefined {\n if (recordSound === false) return undefined;\n if (typeof recordSound === 'string') return recordSound;\n if (typeof recordSound === 'function') {\n try {\n recordSound(toastType);\n } catch {\n // Ignore errors in custom generator\n }\n return undefined;\n }\n if (recordSound === true || globalSound === true) {\n return CUES[toastType]\n ? (toastType as BuiltInSoundCue)\n : toastType === 'loading'\n ? 'bubble'\n : 'info';\n }\n return typeof globalSound === 'string' ? globalSound : undefined;\n}\n","import type {\n CloseReason,\n Direction,\n GlazeConfig,\n PauseOn,\n Renderable,\n SwipeDirection,\n ToastAvatarOption,\n ToastId,\n ToastPosition,\n ToastRecord,\n ToastStore,\n} from '../core';\nimport { el, fill, hasDom, prefersDark, prefersReducedMotion } from './dom';\nimport { icon, iconForType, PATHS } from './icons';\nimport type { IconName } from './icons';\nimport { safeUrl, sanitizeToFragment } from './sanitize';\nimport { resolveVariant } from './variants';\nimport { playSound, resolveToastSound } from './sound';\n\nconst COLORS = ['#38bdf8', '#818cf8', '#ec4899', '#f97316', '#10b981', '#6366f1', '#eab308'];\n\nfunction deterministicColor(str: string): string {\n let h = 0;\n for (let i = 0; i < str.length; i++) h = (h * 31 + str.charCodeAt(i)) >>> 0;\n return COLORS[h % 7] as string;\n}\n\nfunction formatRelativeTime(ts: number | Date | string | boolean, locale = 'en'): string {\n if (typeof ts === 'string') return ts;\n if (ts === true) return 'now';\n const min = Math.round(\n (Date.now() - (ts instanceof Date ? ts.getTime() : Number(ts) || Date.now())) / 6e4,\n );\n if (!min) return 'now';\n const [v, u] =\n min < 60\n ? [min, 'minute']\n : min < 1440\n ? [Math.round(min / 60), 'hour']\n : [Math.round(min / 1440), 'day'];\n try {\n return new Intl.RelativeTimeFormat(locale, { numeric: 'auto' }).format(\n -v,\n u as Intl.RelativeTimeFormatUnit,\n );\n } catch {\n return `${v}${u[0]} ago`;\n }\n}\n\n/** Options passed when mounting the DOM toaster. */\nexport interface ToasterOptions {\n /** Target element or selector to host regions. */\n container?: string | HTMLElement;\n /** Whether to mount inside a Shadow DOM root. */\n shadow?: boolean | 'open' | 'closed';\n}\n\n/** Handle of a mounted toast renderer. */\nexport interface ToasterHandle {\n /** Removes all DOM and listeners. */\n destroy(): void;\n /** Moves focus to the newest toast. Returns whether a toast was focused. */\n focus(): boolean;\n}\n\ninterface Item {\n el: HTMLElement;\n record: ToastRecord;\n stamp: string;\n hover: boolean;\n swiping: boolean;\n height: number;\n measured: boolean;\n}\n\ninterface Region {\n key: string;\n el: HTMLElement;\n list: HTMLElement;\n items: Map<ToastId, Item>;\n hover: boolean;\n focus: boolean;\n}\n\nconst stampOf = (record: ToastRecord): string =>\n `${record.updatedAt}:${record.timerEpoch}:${record.count}`;\n\nconst INTERACTIVE = 'button,a,input,select,textarea,[role=button]';\n\n/** Default swipe directions for a position: toward the nearest screen edge. */\nfunction getRobotSvg(c: string): string {\n const dot = (x: number, y = 18) => `<circle cx=\"${x}\" cy=\"${y}\" r=\"2\" fill=\"currentColor\"/>`;\n const eyes = dot(12) + dot(20);\n const ant = '<path d=\"M16 4v6M12 4h8\"/>';\n const map: Record<string, string> = {\n wave: `${eyes}${ant}<path d=\"M2 14l4 4M30 10l-4 4\"/>`,\n success: `<path d=\"M11 18l3 3 7-7\"/>${ant}`,\n error: `<path d=\"M12 16l8 8M20 16l-8 8\"/>${ant}`,\n think: `${eyes}<path d=\"M12 22h8M16 4v6\"/>`,\n loading:\n '<circle cx=\"16\" cy=\"18\" r=\"4\" stroke-dasharray=\"16\" stroke-linecap=\"round\"/><path d=\"M16 4v6\"/>',\n sleep: '<path d=\"M10 18h4M18 18h4M16 4v6\"/>',\n shock: `${dot(12, 16)}${dot(20, 16)}${dot(16, 22)}<path d=\"M16 4v6\"/>`,\n search: '<circle cx=\"14\" cy=\"18\" r=\"4\"/><path d=\"M17 21l4 4M16 4v6\"/>',\n headPalm: `${dot(12)}<path d=\"M18 16h6v6M16 4v6\"/>`,\n };\n return `<svg viewBox=\"0 0 32 32\" width=\"22\" height=\"22\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"${c === 'loading' ? ' class=\"gk-spin\"' : ''}><rect x=\"6\" y=\"10\" width=\"20\" height=\"16\" rx=\"4\"/>${map[c] ?? eyes + ant}</svg>`;\n}\n\nexport function defaultSwipe(position?: ToastPosition): SwipeDirection[] {\n void position;\n return ['up', 'down', 'left', 'right'];\n}\n\n/** Parses `alt+t` style hotkeys. Returns `undefined` for an empty or invalid string. */\nexport function parseHotkey(\n hotkey: string,\n): { alt: boolean; ctrl: boolean; shift: boolean; meta: boolean; code: string } | undefined {\n const parts = hotkey\n .toLowerCase()\n .split('+')\n .map((p) => p.trim())\n .filter(Boolean);\n const key = parts.find((p) => !/^(alt|ctrl|control|shift|meta|cmd)$/.test(p));\n if (!key) return undefined;\n return {\n alt: parts.includes('alt'),\n ctrl: parts.some((p) => p === 'ctrl' || p === 'control'),\n shift: parts.includes('shift'),\n meta: parts.some((p) => p === 'meta' || p === 'cmd'),\n code: /^[a-z]$/.test(key) ? `Key${key.toUpperCase()}` : /^\\d$/.test(key) ? `Digit${key}` : key,\n };\n}\n\n/** Detects whether the host document has an explicit dark mode via .dark class or data attribute. */\nexport function isDocumentDark(): boolean {\n if (!hasDom()) return false;\n return [document.documentElement, document.body].some(\n (el) =>\n el?.classList.contains('dark') ||\n el?.getAttribute('data-theme') === 'dark' ||\n el?.getAttribute('data-gk-mode') === 'dark',\n );\n}\n\n/** Resolves the mode attribute value, flipping it for inverted toasts. */\nexport function resolveMode(mode: GlazeConfig['mode'], invert: boolean): string {\n if (!invert) return mode;\n return mode === 'dark' || (mode === 'auto' && (isDocumentDark() || prefersDark()))\n ? 'light'\n : 'dark';\n}\n\n/**\n * Mounts the DOM renderer for a toast store. Call only in a browser.\n * The renderer creates one labelled region per placement, reconciles toasts into it, and handles\n * pausing, swiping, stacking and keyboard access.\n */\nexport function mountToaster(store: ToastStore, options?: ToasterOptions): ToasterHandle {\n const regions = new Map<string, Region>();\n const cleanups: (() => void)[] = [];\n let lastFocus: Element | null = null;\n let pendingHost = false;\n let shadowRoot: ShadowRoot | undefined;\n\n const cfg = (): Readonly<GlazeConfig> => store.config.get();\n const pauseSet = (record: ToastRecord): PauseOn[] => record.pauseOn ?? cfg().pauseOn;\n const flag = (value: boolean | undefined, fallback: boolean): boolean => value ?? fallback;\n\n const hostFor = (container: string | undefined): HTMLElement | ShadowRoot | null => {\n const target = container ?? options?.container ?? cfg().container;\n const parent =\n typeof target === 'string'\n ? ((document.getElementById(target) || document.querySelector<HTMLElement>(target)) ??\n document.body)\n : target instanceof HTMLElement\n ? target\n : document.body;\n\n if (!parent) return null;\n\n if (options?.shadow) {\n if (!shadowRoot) {\n let portalHost = parent.querySelector<HTMLElement>('#gk-shadow-portal');\n if (!portalHost) {\n portalHost = el('div', 'gk-portal', { id: 'gk-shadow-portal' });\n parent.append(portalHost);\n }\n shadowRoot = portalHost.shadowRoot ?? portalHost.attachShadow({ mode: 'open' });\n if (!shadowRoot.querySelector('style[data-gk-styles]')) {\n const style = el('style', '', { 'data-gk-styles': '' });\n style.textContent = `\n :host { all: initial; }\n .gk-region { position: fixed; z-index: var(--gk-z, 2147483000); }\n `;\n shadowRoot.append(style);\n }\n }\n return shadowRoot;\n }\n\n return parent;\n };\n\n const raf = (fn: () => void): void => {\n if (prefersReducedMotion() || typeof requestAnimationFrame !== 'function') fn();\n else requestAnimationFrame(() => requestAnimationFrame(fn));\n };\n\n const setPause = (region: Region, on: boolean, reason: PauseOn): void => {\n for (const item of region.items.values()) {\n if (!pauseSet(item.record).includes(reason)) continue;\n if (on) store.pause(item.record.id, reason);\n else store.resume(item.record.id, reason);\n }\n };\n\n const layout = (region: Region): void => {\n const stackConfig = cfg().stack;\n const stackMode: 'stacked' | 'expanded' | 'list' =\n stackConfig === false || stackConfig === 'list'\n ? 'list'\n : stackConfig === 'expanded'\n ? 'expanded'\n : 'stacked';\n\n const isExpanded =\n stackMode === 'expanded' || stackMode === 'list' || region.hover || region.focus;\n const newestOnTop = cfg().newestOnTop !== false;\n const rawItems = [...region.items.values()];\n const list = newestOnTop ? rawItems.reverse() : rawItems;\n const gap = cfg().gap;\n const isTop =\n region.key.includes('top-') ||\n region.key.endsWith('|center') ||\n region.key.endsWith('|middle');\n let offset = 0;\n let front = 0;\n let activeIdx = 0;\n\n list.forEach((item) => {\n const height = item.measured && item.height > 0 ? item.height : item.el.offsetHeight || 50;\n if (item.record.dismissed) return;\n const index = activeIdx++;\n if (index === 0) front = height;\n item.el.style.setProperty('--gk-index', String(index));\n item.el.style.setProperty('--gk-offset', `${offset}px`);\n item.el.style.setProperty('--gk-height', `${height}px`);\n item.el.style.zIndex = String(1000 - index);\n\n if (index > 2) {\n item.el.dataset.far = '';\n } else {\n delete item.el.dataset.far;\n }\n offset += height + gap;\n });\n\n const total = Math.max(0, offset - gap);\n region.el.style.setProperty('--gk-front', `${front}px`);\n region.el.style.setProperty('--gk-total', `${total}px`);\n region.el.style.setProperty('--gk-dir', isTop ? '1' : '-1');\n region.el.style.setProperty('--gk-gap', `${gap}px`);\n region.el.dataset.stackMode = stackMode;\n region.el.dataset.expanded = String(isExpanded);\n region.el.style.height = `${isExpanded ? total : front}px`;\n region.list.style.pointerEvents = isExpanded ? 'auto' : '';\n };\n\n // Max one ResizeObserver per container\n let resizeObserver: ResizeObserver | undefined;\n if (typeof ResizeObserver === 'function') {\n resizeObserver = new ResizeObserver((entries) => {\n let changed = false;\n for (const entry of entries) {\n const target = entry.target as HTMLElement;\n for (const r of regions.values()) {\n for (const item of r.items.values()) {\n if (item.el === target) {\n const h = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height;\n if (Math.abs(item.height - h) > 1) {\n item.height = h;\n item.measured = true;\n changed = true;\n }\n }\n }\n }\n }\n if (changed) regions.forEach(layout);\n });\n }\n\n const ensureRegion = (record: ToastRecord): Region | undefined => {\n const key = `${record.container ?? ''}|${record.position}`;\n const existing = regions.get(key);\n if (existing) return existing;\n const host = hostFor(record.container);\n if (!host) return undefined;\n const list = el('ol', 'gk-toast-list gk-list', { role: 'presentation', tabindex: '-1' });\n const root = el(\n 'section',\n 'gk-region gk-root',\n { 'aria-label': cfg().regionLabel, tabindex: '-1', role: 'region' },\n list,\n );\n const region: Region = { key, el: root, list, items: new Map(), hover: false, focus: false };\n root.dataset.position = record.position;\n if (host !== document.body) root.dataset.contained = '';\n const refresh = (): void => layout(region);\n\n const onEv = (prop: 'hover' | 'focus', on: boolean): void => {\n region[prop] = on;\n setPause(region, on, prop);\n refresh();\n };\n root.addEventListener('pointerenter', () => onEv('hover', true));\n root.addEventListener('pointerleave', () => onEv('hover', false));\n root.addEventListener('focusin', () => onEv('focus', true));\n root.addEventListener('focusout', (e) => {\n if (e.relatedTarget instanceof Node && root.contains(e.relatedTarget)) return;\n onEv('focus', false);\n });\n root.addEventListener('keydown', (event) => {\n const target = (event.target as Element).closest<HTMLElement>('.gk-toast');\n const item = target\n ? [...region.items.values()].find((entry) => entry.el === target)\n : undefined;\n\n if (event.key === 'Escape') {\n if (!item || item.record.dismissible === false) return;\n event.stopPropagation();\n store.dismiss(item.record.id, 'user');\n (lastFocus as HTMLElement | null)?.focus?.();\n return;\n }\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n const toastNodes = [...region.items.values()].map((i) => i.el);\n if (toastNodes.length <= 1) return;\n const currentIdx = target ? toastNodes.indexOf(target) : -1;\n const nextIdx =\n event.key === 'ArrowDown'\n ? (currentIdx + 1) % toastNodes.length\n : (currentIdx - 1 + toastNodes.length) % toastNodes.length;\n toastNodes[nextIdx]?.focus();\n }\n });\n\n host.append(root);\n regions.set(key, region);\n return region;\n };\n\n const close = (id: ToastId, reason: CloseReason): void => store.dismiss(id, reason);\n\n const button = (\n cls: string,\n spec: { label: string; ariaLabel?: string },\n record: ToastRecord,\n reason: CloseReason,\n onClick: ((event: { preventDefault(): void; defaultPrevented: boolean }) => void) | undefined,\n ): HTMLButtonElement => {\n const node = el('button', cls, { type: 'button', 'aria-label': spec.ariaLabel }, spec.label);\n node.addEventListener('click', (event) => {\n event.stopPropagation();\n let p = false;\n onClick?.({\n preventDefault: () => {\n p = true;\n },\n get defaultPrevented() {\n return p;\n },\n });\n if (!p) close(record.id, reason);\n });\n return node;\n };\n\n const build = (item: Item): void => {\n const record = item.record;\n item.stamp = stampOf(record);\n const c = cfg();\n const names = record.classNames ?? {};\n const unstyled = record.unstyled === true;\n const k = (base: string, extra?: string, short = base): string => {\n const cls = unstyled ? '' : `gk-toast__${base} gk-${short}`;\n return extra ? (cls ? `${cls} ${extra}` : extra) : cls;\n };\n const node = item.el;\n node.replaceChildren();\n node.className = [\n unstyled ? '' : `gk-toast gk-toast--${record.type}`,\n names.toast,\n record.className,\n ]\n .filter(Boolean)\n .join(' ');\n\n const content = el('div', k('content', names.content));\n if (record.custom) {\n fill(\n content,\n record.custom({\n id: record.id,\n dismiss: () => close(record.id, 'api'),\n update: (patch) => void store.update(record.id, patch),\n }) as Renderable,\n );\n } else {\n const char = record.character ?? record.robotVariant;\n const hasMascot = Boolean(char || record.avatar);\n\n if (record.badge !== undefined) {\n const bObj =\n typeof record.badge === 'object' && record.badge !== null ? record.badge : undefined;\n const tone: string = bObj ? (bObj.tone ?? 'info') : (record.badge as string);\n const badgeEl = el('div', k('badge', names.badge), {\n 'aria-hidden': 'true',\n 'data-tone': tone,\n });\n if (bObj && bObj.icon) fill(badgeEl, bObj.icon);\n else if (bObj && bObj.label) badgeEl.textContent = bObj.label;\n else if (typeof record.badge === 'string' && !PATHS[tone as IconName])\n badgeEl.textContent = record.badge;\n else badgeEl.append(icon((PATHS[tone as IconName] ? tone : 'info') as IconName));\n node.append(badgeEl);\n } else if (!hasMascot || record.icon !== undefined) {\n const customIcon = record.icon;\n const builtIn = customIcon === undefined ? iconForType(record.type) : undefined;\n const typeDef = store.types.get(record.type);\n const iconValue = customIcon === undefined ? typeDef?.icon : customIcon;\n if (customIcon !== false && (builtIn || iconValue !== undefined)) {\n const holder = el('div', k('icon', names.icon), {\n 'aria-hidden': 'true',\n });\n const a = record.iconAnimation ?? c.iconAnimation;\n const anim =\n record.animateIcon === false\n ? 'none'\n : (a ?? (record.type === 'loading' ? 'spin' : 'pop'));\n if (anim !== 'none') holder.dataset.iconAnim = anim;\n if (builtIn) holder.append(icon(builtIn));\n else fill(holder, iconValue);\n node.append(holder);\n }\n }\n\n if (char) {\n const holder = el(\n 'div',\n `${k('avatar', names.avatar)}${unstyled ? '' : ' gk-character'}`.trim(),\n );\n holder.innerHTML = getRobotSvg(char);\n node.append(holder);\n }\n\n if (record.image) {\n const imgSrc = typeof record.image === 'string' ? record.image : record.image.src;\n if (imgSrc && safeUrl(imgSrc)) {\n const imgEl = el('img', k('image', names.image, 'image'), {\n src: imgSrc,\n alt: typeof record.image === 'object' ? (record.image.alt ?? '') : '',\n });\n imgEl.style.cssText =\n 'width:calc(100% + 2em);height:96px;margin:-14px -1em 8px;object-fit:cover;display:block';\n node.prepend(imgEl);\n }\n }\n\n if (record.avatar !== undefined) {\n const holder = el('div', k('avatar', names.avatar));\n const av = record.avatar;\n if (typeof av === 'object' && av !== null && !('nodeType' in av)) {\n const opt = av as ToastAvatarOption;\n const src = opt.src && safeUrl(opt.src) ? opt.src : '';\n const renderInitials = (): void => {\n const init =\n opt.initials ??\n (opt.name\n ? opt.name\n .split(' ')\n .map((w) => w[0])\n .join('')\n .slice(0, 2)\n .toUpperCase()\n : typeof record.title === 'string'\n ? record.title.slice(0, 2).toUpperCase()\n : '?');\n holder.textContent = init;\n holder.style.cssText = `background:${opt.color ?? deterministicColor(opt.name ?? init)};color:#fff`;\n };\n if (src) {\n const imgEl = el('img', '', {\n src,\n alt: opt.alt ?? opt.name ?? '',\n });\n imgEl.style.opacity = '0';\n imgEl.onload = () => (imgEl.style.opacity = '1');\n imgEl.onerror = () => {\n imgEl.remove();\n renderInitials();\n };\n holder.append(imgEl);\n } else {\n renderInitials();\n }\n } else if (typeof av === 'string') {\n if (/^(\\w+:|\\/)/.test(av)) {\n const imgEl = el('img', '', { src: safeUrl(av) ? av : '', alt: '' });\n imgEl.style.opacity = '0';\n imgEl.onload = () => (imgEl.style.opacity = '1');\n imgEl.onerror = () => {\n imgEl.remove();\n if (!holder.textContent) {\n const init =\n typeof record.title === 'string' ? record.title.slice(0, 2).toUpperCase() : '?';\n holder.textContent = init;\n holder.style.cssText = 'background:var(--gk-accent);color:#fff';\n }\n };\n holder.append(imgEl);\n } else {\n const init = av.slice(0, 3).toUpperCase();\n holder.textContent = init;\n holder.style.cssText = `background:${deterministicColor(init)};color:#fff`;\n }\n } else fill(holder, av as Renderable);\n node.append(holder);\n }\n\n if (record.title) {\n const title = el('div', k('title', names.title));\n fill(title, record.title);\n if (record.count > 1) {\n title.append(\n el('span', k('count', names.count), { 'aria-hidden': 'true' }, `${record.count}`),\n );\n }\n content.append(title);\n } else if (record.count > 1) {\n content.append(\n el('span', k('count', names.count), { 'aria-hidden': 'true' }, `${record.count}`),\n );\n }\n if (record.description || record.html) {\n const desc = el('div', k('description', names.description, 'desc'));\n fill(desc, record.description);\n if (record.html) {\n const fragment = sanitizeToFragment(record.html);\n if (fragment) desc.append(fragment);\n }\n content.append(desc);\n }\n\n if (record.progressValue !== undefined) {\n const pct = Math.max(0, Math.min(100, Math.round(record.progressValue * 100)));\n const fillEl = el('i', 'gk-progress-fill');\n fillEl.style.width = `${pct}%`;\n const track = el(\n 'div',\n 'gk-toast__track gk-track',\n {\n role: 'progressbar',\n 'aria-label': record.progressLabel ?? 'Progress',\n 'aria-valuenow': String(pct),\n 'aria-valuemin': '0',\n 'aria-valuemax': '100',\n ...(record.progressLabel ? { 'aria-valuetext': record.progressLabel } : {}),\n },\n fillEl,\n );\n content.append(track);\n }\n }\n const body =\n record.href && safeUrl(record.href)\n ? el(\n 'a',\n k('link', names.link),\n {\n href: record.href,\n target: record.target ?? '_self',\n rel: record.target === '_blank' ? 'noopener noreferrer' : undefined,\n },\n content,\n )\n : content;\n node.append(body);\n\n const cText = record.closeText ?? record.discardText;\n const cIcon = record.closeIcon ?? record.discardIcon;\n const showClose =\n (flag(record.closeButton, c.closeButton) || Boolean(cText || cIcon)) &&\n record.dismissible !== false;\n\n const onCloseClick = (e: MouseEvent): void => {\n e.stopPropagation();\n close(record.id, 'user');\n };\n\n if (record.timestamp || record.kbd || (showClose && cText)) {\n const meta = el('div', k('meta', names.meta));\n if (record.timestamp) {\n meta.append(\n el(\n 'time',\n k('time', names.time),\n {},\n formatRelativeTime(record.timestamp, record.timestampLocale),\n ),\n );\n }\n if (record.kbd) meta.append(el('kbd', k('kbd', names.kbd), {}, record.kbd));\n if (showClose && cText) {\n const closeBtn = el(\n 'button',\n k('close', names.closeButton, 'close gk-close--text'),\n {\n type: 'button',\n 'aria-label': record.closeButtonLabel ?? cText,\n },\n cText,\n );\n closeBtn.addEventListener('click', onCloseClick);\n meta.append(closeBtn);\n }\n node.append(meta);\n }\n\n if (record.toggle) {\n const tg = record.toggle;\n const sw = el('button', 'gk-toast__switch gk-sw', {\n type: 'button',\n role: 'switch',\n 'aria-checked': String(Boolean(tg.checked)),\n 'aria-label': tg.label ?? 'Toggle option',\n });\n sw.addEventListener('click', (e) => {\n e.stopPropagation();\n const next = sw.getAttribute('aria-checked') !== 'true';\n sw.setAttribute('aria-checked', String(next));\n tg.onChange?.(next);\n });\n node.append(sw);\n }\n\n if (\n record.progress === 'ring' ||\n record.variant === 'countdown-ring' ||\n record.variant === 'progress-ring'\n ) {\n const val =\n record.progressValue ??\n (record.duration > 0 ? store.getRemaining(record.id) / record.duration : 1);\n const dash = 100.5 * (1 - val);\n const div = document.createElement('div');\n const c = '<circle cx=\"18\" cy=\"18\" r=\"16\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"3\"';\n div.innerHTML = `<svg viewBox=\"0 0 36 36\" class=\"gk-ring-svg\">${c} opacity=\"0.2\"/>${c} stroke-dasharray=\"100.5\" stroke-linecap=\"round\" stroke-dashoffset=\"${dash}\"/></svg>`;\n node.append(div.firstElementChild as Element);\n }\n\n if (record.actions?.length) {\n const actionsDiv = el('div', k('actions', names.actions));\n for (const act of record.actions) {\n const label = act.label ?? act.text ?? 'Action';\n const actBtn = el(\n 'button',\n `gk-toast__action gk-btn gk-action gk-btn--${act.kind ?? 'secondary'}`,\n { type: 'button', 'aria-label': label },\n label,\n );\n actBtn.addEventListener('click', (e) => {\n e.stopPropagation();\n act.onClick?.(e);\n if (act.autoDismiss !== false && !e.defaultPrevented) close(record.id, 'action');\n });\n actionsDiv.append(actBtn);\n }\n node.append(actionsDiv);\n } else if (record.action || record.cancel) {\n const actions = el('div', k('actions', names.actions));\n if (record.cancel) {\n actions.append(\n button(\n k('cancel', names.cancelButton, 'btn gk-cancel gk-cancel-btn'),\n record.cancel,\n record,\n 'cancel',\n record.cancel.onClick,\n ),\n );\n }\n if (record.action) {\n actions.append(\n button(\n k('action', names.actionButton, 'btn gk-action gk-action-btn'),\n record.action,\n record,\n 'action',\n record.action.onClick,\n ),\n );\n }\n node.append(actions);\n }\n\n if (showClose && !cText) {\n const closeBtn = el('button', k('close', names.closeButton), {\n type: 'button',\n 'aria-label': record.closeButtonLabel ?? c.closeLabel ?? 'Close notification',\n });\n if (cIcon) fill(closeBtn, cIcon);\n else closeBtn.append(icon('close'));\n closeBtn.addEventListener('click', onCloseClick);\n node.append(closeBtn);\n }\n const showBar =\n record.duration > 0 &&\n (record.progress === 'bar' ||\n (record.progress !== 'none' &&\n record.progress !== 'ring' &&\n flag(record.progress as boolean | undefined, c.progress)));\n if (showBar) {\n const bar = el('i');\n bar.style.setProperty('--gk-d', `${record.duration}ms`);\n bar.style.setProperty(\n '--gk-delay',\n `-${Math.max(0, record.duration - store.getRemaining(record.id))}ms`,\n );\n node.append(el('div', k('progress', names.progress), { 'aria-hidden': 'true' }, bar));\n }\n item.stamp = stampOf(record);\n };\n\n const syncAttrs = (item: Item): void => {\n const record = item.record;\n const c = cfg();\n const node = item.el;\n const set = (name: string, value: string | undefined): void => {\n if (value === undefined) node.removeAttribute(name);\n else node.setAttribute(name, value);\n };\n const toggle = (name: string, condition: unknown): void => {\n node.toggleAttribute(name, Boolean(condition));\n };\n\n const hostEl =\n (record.container ? document.getElementById(record.container) : undefined) ??\n node.parentElement?.closest('[data-gk-theme]');\n const themeName = record.theme ?? hostEl?.getAttribute('data-gk-theme') ?? c.theme;\n const activeVariant = resolveVariant(themeName, record.variant);\n set('data-gk-variant', activeVariant);\n\n const isHud = record.hud || activeVariant === 'hud-silent';\n set('role', isHud ? 'status' : record.role);\n set('aria-live', isHud ? 'polite' : record.ariaLive);\n toggle('data-hud', isHud);\n set('aria-atomic', 'true');\n set('data-type', record.type);\n set('data-gk-theme', themeName);\n set('data-gk-mode', resolveMode(c.mode, flag(record.invert, c.invert)));\n set('data-dir', record.dir ?? c.dir);\n set('dir', (record.dir ?? c.dir) === 'auto' ? undefined : (record.dir ?? c.dir));\n set('data-animation', record.animation ?? c.animation ?? 'slide');\n toggle('data-shake', record.shake || activeVariant === 'shake-error');\n toggle('data-glow', record.glow);\n toggle('data-gradient-border', record.gradientBorder || activeVariant === 'gradient-border');\n toggle('data-group', record.group);\n toggle('data-island', record.island || activeVariant === 'island');\n const typeColor = store.types.get(record.type)?.color;\n if (typeColor) node.style.setProperty('--gk-type', typeColor);\n toggle('data-rich', flag(record.richColors, c.richColors));\n toggle('data-dismissed', record.dismissed);\n set('data-state', record.dismissed ? 'exiting' : 'entered');\n toggle('data-paused', record.pausedBy.length > 0);\n toggle(\n 'data-wrap',\n record.description ||\n record.html ||\n (record.action && record.cancel) ||\n (record.actions && record.actions.length > 1),\n );\n toggle(\n 'data-has-close',\n flag(record.closeButton, c.closeButton) &&\n record.dismissible !== false &&\n !(record.closeText ?? record.discardText),\n );\n toggle(\n 'data-clickable',\n flag(record.closeOnClick, c.closeOnClick) && record.dismissible !== false,\n );\n if (record.style) {\n for (const key of Object.keys(record.style))\n node.style.setProperty(key, String(record.style[key]));\n }\n const dirs = record.swipeDirections ?? defaultSwipe(record.position);\n const horizontal = dirs.some((d) => d === 'left' || d === 'right');\n const vertical = dirs.some((d) => d === 'up' || d === 'down');\n node.style.touchAction =\n horizontal && !vertical ? 'pan-y' : vertical && !horizontal ? 'pan-x' : 'none';\n };\n\n const attachGestures = (item: Item): void => {\n const node = item.el;\n let start: { x: number; y: number; t: number } | undefined;\n\n const setS = (x: number, y: number, r = 0): void => {\n node.style.setProperty('--gk-sx', `${Math.round(x)}px`);\n node.style.setProperty('--gk-sy', `${Math.round(y)}px`);\n if (r) node.style.setProperty('--gk-rot', `${r.toFixed(1)}deg`);\n };\n\n const settings = () => ({\n dirs: item.record.swipeDirections ?? defaultSwipe(item.record.position),\n threshold: item.record.dragThreshold ?? cfg().dragThreshold,\n on: flag(item.record.swipe, cfg().swipe) && item.record.dismissible !== false,\n });\n\n const delta = (e: PointerEvent, dirs: SwipeDirection[]) => {\n const rx = e.clientX - (start?.x ?? 0),\n ry = e.clientY - (start?.y ?? 0);\n return {\n dx: dirs.includes(rx >= 0 ? 'right' : 'left') ? rx : rx * 0.18,\n dy: dirs.includes(ry >= 0 ? 'down' : 'up') ? ry : ry * 0.18,\n rx,\n ry,\n };\n };\n\n node.addEventListener('pointerenter', () => {\n item.hover = true;\n if (!cfg().stack && pauseSet(item.record).includes('hover'))\n store.pause(item.record.id, 'hover');\n });\n node.addEventListener('pointerleave', () => {\n item.hover = false;\n if (!cfg().stack) store.resume(item.record.id, 'hover');\n });\n node.addEventListener('click', (event) => {\n if (item.swiping || (event.target as Element).closest(INTERACTIVE)) return;\n item.record.onPress?.(item.record);\n if (flag(item.record.closeOnClick, cfg().closeOnClick)) close(item.record.id, 'click');\n });\n node.addEventListener('pointerdown', (e) => {\n if (!settings().on || e.button !== 0 || (e.target as Element).closest(INTERACTIVE)) return;\n start = { x: e.clientX, y: e.clientY, t: e.timeStamp };\n });\n node.addEventListener('pointermove', (e) => {\n if (!start) return;\n const { dx, dy } = delta(e, settings().dirs);\n if (!item.swiping) {\n if (Math.hypot(dx, dy) < 3) return;\n item.swiping = true;\n node.setPointerCapture?.(e.pointerId);\n node.dataset.swiping = '';\n store.pause(item.record.id, 'swipe');\n }\n setS(dx, dy, Math.max(-5, Math.min(5, dx * 0.028)));\n });\n const finish = (e: PointerEvent): void => {\n if (!start) return;\n const { dirs, threshold } = settings();\n const { dx, dy, rx, ry } = delta(e, dirs);\n const startT = start.t;\n const duration = Math.max(1, (e.timeStamp || performance.now()) - startT);\n const speed = Math.hypot(dx, dy) / duration;\n const wasSwiping = item.swiping;\n start = undefined;\n delete node.dataset.swiping;\n store.resume(item.record.id, 'swipe');\n\n const horiz = Math.abs(rx) >= Math.abs(ry);\n const out: SwipeDirection = horiz ? (rx >= 0 ? 'right' : 'left') : ry >= 0 ? 'down' : 'up';\n const dim = horiz ? node.offsetWidth || 350 : node.offsetHeight || 60;\n const limit = threshold <= 1 && threshold > 0 ? threshold * dim : threshold;\n const dist = Math.hypot(dx, dy);\n\n const isFlick = duration >= 40 && speed > 0.45 && dist > 15;\n if (wasSwiping && dirs.includes(out) && (dist >= limit || isFlick)) {\n node.dataset.swipeOut = out;\n node.dataset.flung = '';\n const len = dist || 1;\n const reach = Math.max(280, speed * 360);\n const fx = (dx / len) * reach;\n const fy = (dy / len) * reach;\n setS(fx, fy, Math.max(-10, Math.min(10, fx * 0.02)));\n close(item.record.id, 'swipe');\n } else setS(0, 0);\n setTimeout(() => {\n item.swiping = false;\n }, 50);\n };\n node.addEventListener('pointerup', finish);\n node.addEventListener('pointercancel', finish);\n };\n\n let rendering = false;\n let rerenderRequested = false;\n\n const render = (): void => {\n if (rendering) {\n rerenderRequested = true;\n return;\n }\n rendering = true;\n try {\n do {\n rerenderRequested = false;\n doRender();\n } while (rerenderRequested);\n } finally {\n rendering = false;\n }\n };\n\n const doRender = (): void => {\n if (!document.body && !pendingHost) {\n pendingHost = true;\n document.addEventListener(\n 'DOMContentLoaded',\n () => {\n pendingHost = false;\n render();\n },\n { once: true },\n );\n return;\n }\n const c = cfg();\n const visible = store.getToasts().filter((t) => t.visible);\n const seen = new Set<string>();\n for (const record of visible) {\n const region = ensureRegion(record);\n if (!region) continue;\n seen.add(`${region.key}#${String(record.id)}`);\n let item = region.items.get(record.id);\n if (!item) {\n item = {\n el: el('li'),\n record,\n stamp: '',\n hover: false,\n swiping: false,\n height: 0,\n measured: false,\n };\n item.el.dataset.mounted = 'false';\n item.el.tabIndex = -1;\n region.items.set(record.id, item);\n region.list.append(item.el);\n resizeObserver?.observe(item.el);\n attachGestures(item);\n const created = item;\n const cue = resolveToastSound(record.sound, c.sound, record.type);\n if (cue) {\n playSound(cue, record.soundVolume ?? c.soundVolume ?? 0.5);\n }\n raf(() => {\n created.el.dataset.mounted = 'true';\n });\n }\n item.record = record;\n syncAttrs(item);\n if (item.stamp !== stampOf(record)) build(item);\n }\n for (const region of regions.values()) {\n for (const [id, item] of region.items) {\n if (!seen.has(`${region.key}#${String(id)}`)) {\n resizeObserver?.unobserve(item.el);\n item.el.remove();\n region.items.delete(id);\n }\n }\n region.el.setAttribute('data-gk-theme', c.theme);\n region.el.setAttribute('data-gk-mode', c.mode);\n region.el.dataset.shadow = String(c.shadow);\n region.el.setAttribute('aria-label', c.regionLabel);\n const dir: Direction = c.dir;\n if (dir === 'auto') region.el.removeAttribute('dir');\n else region.el.setAttribute('dir', dir);\n\n // Offsets\n const setPx = (p: string, v: string | number | undefined) => {\n if (v !== undefined) region.el.style.setProperty(p, typeof v === 'number' ? `${v}px` : v);\n };\n const off = c.offset,\n isOff = typeof off === 'object' && off !== null;\n for (const s of ['top', 'bottom', 'left', 'right'] as const) {\n setPx(`--gk-offset-${s}`, isOff ? (off as Record<string, string | number>)[s] : off);\n }\n setPx('--gk-mobile-offset', c.mobileOffset);\n\n if (region.items.size === 0) {\n region.el.remove();\n regions.delete(region.key);\n } else layout(region);\n }\n };\n\n cleanups.push(store.subscribe(render), store.config.subscribe(render));\n\n const toggleHidden = (pause: boolean): void => {\n for (const t of store.getToasts()) {\n if (pauseSet(t).includes('hidden')) {\n if (pause) store.pause(t.id, 'hidden');\n else store.resume(t.id, 'hidden');\n }\n }\n };\n\n const focusNewest = (): boolean => {\n for (const region of regions.values()) {\n const last = [...region.items.values()].filter((i) => !i.record.dismissed).pop();\n if (last) {\n lastFocus = document.activeElement;\n last.el.focus();\n return true;\n }\n }\n return false;\n };\n\n const addEvt = (tgt: EventTarget, ev: string, fn: EventListener) => {\n tgt.addEventListener(ev, fn);\n cleanups.push(() => tgt.removeEventListener(ev, fn));\n };\n addEvt(document, 'visibilitychange', () => toggleHidden(document.visibilityState === 'hidden'));\n addEvt(window, 'blur', () => toggleHidden(true));\n addEvt(window, 'focus', () => toggleHidden(false));\n addEvt(window, 'resize', () => regions.forEach(layout));\n addEvt(document, 'keydown', ((event: KeyboardEvent) => {\n const spec = parseHotkey(cfg().hotkey);\n if (\n spec &&\n event.code === spec.code &&\n event.altKey === spec.alt &&\n event.ctrlKey === spec.ctrl &&\n event.shiftKey === spec.shift &&\n event.metaKey === spec.meta &&\n focusNewest()\n ) {\n event.preventDefault();\n }\n }) as EventListener);\n\n render();\n\n return {\n focus: focusNewest,\n destroy() {\n for (const fn of cleanups.splice(0)) fn();\n resizeObserver?.disconnect();\n for (const region of regions.values()) region.el.remove();\n regions.clear();\n shadowRoot?.host.remove();\n shadowRoot = undefined;\n },\n };\n}\n\n/** Whether the renderer can run in this environment. */\nexport function canMountToaster(): boolean {\n return hasDom() && typeof window !== 'undefined';\n}\n","import type { DialogBackdrop, GlazeConfig } from '../core';\nimport { el, focusables, prefersReducedMotion } from './dom';\n\n/** Options for the shared modal shell. */\nexport interface OverlayOptions {\n /** Backdrop style. Defaults to `blur`. */\n backdrop?: DialogBackdrop;\n /** Theme name. */\n theme: string;\n /** Color mode. */\n mode: GlazeConfig['mode'];\n /** Text direction. */\n dir: GlazeConfig['dir'];\n /** Extra class on the root. */\n className?: string;\n /** Called when Escape is pressed while this overlay is on top. */\n onEscape?: () => void;\n /** Called when the backdrop is clicked. */\n onBackdrop?: () => void;\n /** When false, Tab is not trapped (used for non-focusable overlays). Defaults to `true`. */\n trap?: boolean;\n}\n\n/** A mounted modal shell: backdrop, scroll lock, inert page, focus trap and focus restore. */\nexport interface Overlay {\n /** Fixed full-viewport container. Panels are appended here. */\n root: HTMLElement;\n /** Opens the transition. Call after the panel is attached. */\n show(): void;\n /** Starts the exit transition and releases the page. Resolves when the DOM is gone. */\n close(): Promise<void>;\n}\n\ntype HiddenNode = { node: Element; inert: boolean; aria: string | null };\nconst stack: Overlay[] = [];\nconst traps = new WeakMap<\n Overlay,\n { trap: boolean; onEscape?: () => void; hidden: HiddenNode[] }\n>();\nlet locks = 0;\nlet savedOverflow = '';\nlet savedPadding = '';\n\nfunction restoreHidden(list: HiddenNode[]): void {\n for (const saved of list) {\n if (!saved.inert) saved.node.removeAttribute('inert');\n if (saved.aria === null) saved.node.removeAttribute('aria-hidden');\n else saved.node.setAttribute('aria-hidden', saved.aria);\n }\n list.length = 0;\n}\n\nfunction lockScroll(): void {\n if (locks++ > 0) return;\n const body = document.body;\n const scrollbar = window.innerWidth - document.documentElement.clientWidth;\n savedOverflow = body.style.overflow;\n savedPadding = body.style.paddingRight;\n body.style.overflow = 'hidden';\n if (scrollbar > 0) body.style.paddingRight = `${scrollbar}px`;\n}\n\nfunction unlockScroll(): void {\n if (--locks > 0) return;\n document.body.style.overflow = savedOverflow;\n document.body.style.paddingRight = savedPadding;\n}\n\nfunction onKeydown(event: KeyboardEvent): void {\n const top = stack[stack.length - 1];\n if (!top) return;\n const info = traps.get(top);\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n info?.onEscape?.();\n return;\n }\n if (event.key !== 'Tab' || info?.trap === false) return;\n const root = top.root;\n const list = focusables(root);\n const first = list[0];\n const last = list[list.length - 1];\n if (!first || !last) {\n event.preventDefault();\n return;\n }\n const active = document.activeElement;\n if (event.shiftKey && (active === first || !root.contains(active))) {\n event.preventDefault();\n last.focus();\n } else if (!event.shiftKey && (active === last || !root.contains(active))) {\n event.preventDefault();\n first.focus();\n }\n}\n\n/** Creates and mounts a modal shell on `document.body`. */\nexport function openOverlay(options: OverlayOptions): Overlay {\n const bKind = options.backdrop ?? 'blur';\n const backdrop = el('div', 'gk-backdrop');\n const isStd = bKind === 'blur' || bKind === 'dim' || bKind === 'none';\n backdrop.dataset.kind = isStd ? bKind : 'custom';\n if (!isStd) backdrop.style.background = bKind;\n const root = el(\n 'div',\n `gk-overlay gk-root${options.className ? ` ${options.className}` : ''}`,\n {\n 'data-gk-theme': options.theme,\n 'data-gk-mode': options.mode,\n 'data-state': 'closed',\n },\n backdrop,\n );\n if (options.dir !== 'auto') root.setAttribute('dir', options.dir);\n\n const previous = document.activeElement;\n const hidden: { node: Element; inert: boolean; aria: string | null }[] = [];\n for (const node of [...document.body.children]) {\n if (/gk-(region|overlay)/.test(node.className)) continue;\n hidden.push({\n node,\n inert: node.hasAttribute('inert'),\n aria: node.getAttribute('aria-hidden'),\n });\n node.setAttribute('inert', '');\n node.setAttribute('aria-hidden', 'true');\n }\n lockScroll();\n\n let downOnBackdrop = false;\n root.addEventListener('pointerdown', (event) => {\n downOnBackdrop = event.target === root || event.target === backdrop;\n });\n root.addEventListener('click', (event) => {\n if (downOnBackdrop && (event.target === root || event.target === backdrop))\n options.onBackdrop?.();\n downOnBackdrop = false;\n });\n\n document.body.append(root);\n let closing: Promise<void> | undefined;\n const overlay: Overlay = {\n root,\n show() {\n if (prefersReducedMotion() || typeof requestAnimationFrame !== 'function') {\n root.dataset.state = 'open';\n } else {\n requestAnimationFrame(() => {\n root.dataset.state = 'open';\n });\n }\n },\n close() {\n if (closing) return closing;\n closing = new Promise<void>((resolve) => {\n const index = stack.indexOf(overlay);\n if (index >= 0) stack.splice(index, 1);\n if (stack.length === 0) document.removeEventListener('keydown', onKeydown, true);\n root.dataset.state = 'closing';\n restoreHidden(hidden);\n traps.delete(overlay);\n unlockScroll();\n if (previous instanceof HTMLElement && previous.isConnected) previous.focus();\n const done = (): void => {\n root.remove();\n resolve();\n };\n if (prefersReducedMotion()) done();\n else setTimeout(done, 220);\n });\n return closing;\n },\n };\n traps.set(overlay, { trap: options.trap !== false, onEscape: options.onEscape, hidden });\n if (stack.length === 0) document.addEventListener('keydown', onKeydown, true);\n stack.push(overlay);\n return overlay;\n}\n\n/** Resets all active overlays and restores page state. For tests and clean teardown. */\nexport function resetOverlays(): void {\n while (stack.length > 0) {\n const o = stack.pop();\n if (o) {\n const info = traps.get(o);\n if (info) restoreHidden(info.hidden);\n traps.delete(o);\n o.root.remove();\n }\n }\n document.removeEventListener('keydown', onKeydown, true);\n if (locks > 0) {\n locks = 0;\n document.body.style.overflow = savedOverflow;\n document.body.style.paddingRight = savedPadding;\n }\n savedOverflow = '';\n savedPadding = '';\n}\n","import { createToastEngine } from '../core';\nimport type { GlazeConfig, ToastApi, ToastStore } from '../core';\nimport { resetOverlays } from './overlay';\nimport { setSanitizer } from './sanitize';\nimport { canMountToaster, mountToaster } from './toaster';\nimport type { ToasterHandle, ToasterOptions } from './toaster';\n\n/** Shared state behind `ui`. One instance exists per page, even when the package is bundled twice. */\nexport interface WebEngine {\n /** Toast state container. */\n store: ToastStore;\n /** The toast API. */\n toast: ToastApi;\n /** Whether the built-in DOM renderer mounts itself when the first toast appears. */\n autoMount: boolean;\n /** The mounted renderer, when any. */\n toaster: ToasterHandle | undefined;\n}\n\nconst KEY = Symbol.for('toastory.engine.v1');\n\n/** Options for registering the web renderer. */\nexport type WebRendererOptions = ToasterOptions;\n\n/**\n * Registers the web DOM renderer with the core UI toolkit and mounts the toaster.\n * Safe to call multiple times; auto-runs on first use in a browser.\n */\nexport function registerWebRenderer(options: WebRendererOptions = {}): WebEngine {\n const engine = getEngine();\n if (canMountToaster() && !engine.toaster) {\n engine.toaster = mountToaster(engine.store, options);\n }\n return engine;\n}\n\n/** Returns the page wide engine, creating it on first use. Safe on the server. */\nexport function getEngine(): WebEngine {\n const holder = globalThis as { [KEY]?: WebEngine };\n const existing = holder[KEY];\n if (existing) return existing;\n const { store, toast } = createToastEngine();\n const engine: WebEngine = { store, toast, autoMount: true, toaster: undefined };\n store.subscribe(() => {\n if (engine.autoMount && !engine.toaster && canMountToaster() && store.getToasts().length > 0) {\n engine.toaster = mountToaster(store);\n }\n });\n holder[KEY] = engine;\n return engine;\n}\n\n/**\n * Enables or disables the built-in DOM toast renderer. Framework adapters disable it when they\n * render toasts themselves. Disabling tears down an already mounted renderer.\n */\nexport function setAutoMount(enabled: boolean): void {\n const engine = getEngine();\n engine.autoMount = enabled;\n if (!enabled && engine.toaster) {\n engine.toaster.destroy();\n engine.toaster = undefined;\n } else if (\n enabled &&\n !engine.toaster &&\n canMountToaster() &&\n engine.store.getToasts().length > 0\n ) {\n engine.toaster = mountToaster(engine.store);\n }\n}\n\n/** Applies configuration to the page wide engine. Returns the resulting configuration. */\nexport function configure(patch: Partial<GlazeConfig>): Readonly<GlazeConfig> {\n return getEngine().store.config.set(patch);\n}\n\n/**\n * Dismisses every toast, tears down the DOM renderer, clears history and restores the default\n * configuration and auto-mount behaviour. Intended for tests and hot module reloading.\n */\nexport function resetEngine(): void {\n const engine = getEngine();\n engine.store.clear();\n engine.store.clearHistory();\n engine.store.config.reset();\n for (const name of engine.store.types.list()) engine.store.types.remove(name);\n engine.toaster?.destroy();\n engine.toaster = undefined;\n engine.autoMount = true;\n setSanitizer(undefined);\n resetOverlays();\n}\n","import type { DialogChoice, DialogOptions } from '../core';\nimport { el, nextId } from './dom';\n\n/** A built input control. */\nexport interface InputControl {\n /** Element placed in the dialog. */\n node: HTMLElement;\n /** Element that receives focus. */\n focusTarget: HTMLElement;\n /** Elements that carry `aria-invalid` and `aria-describedby`. */\n fields: HTMLElement[];\n /** Reads the current value. */\n read(): unknown;\n}\n\n/** Normalizes the `options` option to a list of choices. */\nexport function normalizeChoices(options: DialogOptions['options']): DialogChoice[] {\n if (!options) return [];\n if (Array.isArray(options)) {\n return (options as readonly (string | DialogChoice)[]).map((entry) =>\n typeof entry === 'string' ? { value: entry, label: entry } : entry,\n );\n }\n return Object.keys(options).map((value) => ({\n value,\n label: (options as Record<string, string>)[value] as string,\n }));\n}\n\nfunction applyAttributes(node: HTMLElement, attributes: DialogOptions['inputAttributes']): void {\n if (!attributes) return;\n for (const k in attributes) {\n const value = attributes[k];\n if (value !== undefined) node.setAttribute(k, value);\n }\n}\n\n/**\n * Builds the input described by `options.input`.\n * @param options Dialog options.\n * @param labelId Id of the element naming the dialog, used as fallback label.\n */\nexport function buildInput(options: DialogOptions, labelId: string): InputControl | undefined {\n const type = options.input;\n if (!type) return undefined;\n const id = nextId('gk-input');\n const initial = options.inputValue;\n const label = options.inputLabel;\n const labelNode = label ? el('label', 'gk-label', { for: id }, label) : null;\n const wrap = (...children: (Node | null)[]): HTMLElement => {\n const box = el('div', 'gk-input');\n for (const child of children) if (child) box.append(child);\n return box;\n };\n const common = (node: HTMLElement): void => {\n node.id = id;\n node.classList.add('gk-field');\n if (!label) node.setAttribute('aria-labelledby', labelId);\n applyAttributes(node, options.inputAttributes);\n };\n\n const ctrl = (\n node: HTMLElement,\n target: HTMLElement,\n fields: HTMLElement[],\n read: () => unknown,\n ): InputControl => ({\n node,\n focusTarget: target,\n fields,\n read,\n });\n\n const makeCtrl = (\n child: HTMLElement,\n target: HTMLElement,\n fields: HTMLElement[],\n read: () => unknown,\n ): InputControl => ctrl(wrap(labelNode, child), target, fields, read);\n\n if (type === 'textarea') {\n const area = el('textarea', '', { placeholder: options.placeholder, rows: '3' });\n area.value = initial === undefined ? '' : String(initial);\n common(area);\n return makeCtrl(area, area, [area], () => area.value);\n }\n\n if (type === 'select') {\n const select = el('select');\n if (options.placeholder) {\n select.append(el('option', '', { value: '', disabled: '' }, options.placeholder));\n }\n for (const choice of normalizeChoices(options.options)) {\n select.append(\n el(\n 'option',\n '',\n { value: choice.value, disabled: choice.disabled ? '' : undefined },\n choice.label,\n ),\n );\n }\n select.value = initial === undefined ? '' : String(initial);\n common(select);\n return makeCtrl(select, select, [select], () => select.value);\n }\n\n if (type === 'radio') {\n const group = el('fieldset', 'gk-radios');\n group.append(el('legend', label ? 'gk-label' : 'gk-sr', {}, label ?? ''));\n if (!label) group.setAttribute('aria-labelledby', labelId);\n const name = nextId('gk-radio');\n const radios: HTMLInputElement[] = [];\n for (const choice of normalizeChoices(options.options)) {\n const radio = el('input', '', {\n type: 'radio',\n name,\n value: choice.value,\n disabled: choice.disabled ? '' : undefined,\n });\n radio.checked = initial !== undefined && String(initial) === choice.value;\n radios.push(radio);\n group.append(el('label', 'gk-choice', {}, radio, el('span', '', {}, choice.label)));\n }\n const first = radios.find((radio) => !radio.disabled) ?? group;\n return ctrl(\n wrap(group),\n radios.find((radio) => radio.checked) ?? first,\n radios,\n () => radios.find((radio) => radio.checked)?.value,\n );\n }\n\n if (type === 'checkbox') {\n const box = el('input', '', { type: 'checkbox' });\n box.checked = initial === true || initial === 'true' || initial === 1;\n box.id = id;\n applyAttributes(box, options.inputAttributes);\n const text = label ?? options.placeholder ?? '';\n return ctrl(\n wrap(el('label', 'gk-choice', { for: id }, box, el('span', '', {}, text))),\n box,\n [box],\n () => box.checked,\n );\n }\n\n const input = el('input', '', { type, placeholder: options.placeholder });\n if (type !== 'file' && initial !== undefined) input.value = String(initial);\n common(input);\n if (type === 'range') {\n const output = el('output', 'gk-output', { for: id }, input.value);\n input.addEventListener('input', () => {\n output.textContent = input.value;\n });\n return ctrl(wrap(labelNode, input, output), input, [input], () => Number(input.value));\n }\n if (type === 'otp') {\n const len = options.otpLength ?? 6;\n const isAlpha = options.otpType === 'alphanumeric';\n const otpWrap = el('div', 'gk-otp');\n const inputs: HTMLInputElement[] = [];\n\n for (let i = 0; i < len; i++) {\n const inp = el('input', 'gk-field gk-otp-input', {\n type: 'text',\n maxLength: '1',\n inputmode: isAlpha ? 'text' : 'numeric',\n autocomplete: i ? 'off' : 'one-time-code',\n 'aria-label': `Digit ${i + 1} of ${len}`,\n }) as HTMLInputElement;\n inputs.push(inp);\n otpWrap.append(inp);\n\n inp.addEventListener('input', () => {\n if (!isAlpha) inp.value = inp.value.replace(/\\D/g, '');\n if (inp.value && inputs[i + 1]) inputs[i + 1]?.focus();\n const code = inputs.map((x) => x.value).join('');\n if (code.length === len) options.onOtpComplete?.(code);\n });\n\n inp.addEventListener('keydown', (e) => {\n if (e.key === 'Backspace' && !inp.value) inputs[i - 1]?.focus();\n else if (e.key === 'ArrowLeft') inputs[i - 1]?.focus();\n else if (e.key === 'ArrowRight') inputs[i + 1]?.focus();\n });\n\n inp.addEventListener('paste', (e) => {\n const raw = e.clipboardData?.getData('text') || '';\n const cleaned = raw.replace(isAlpha ? /[^a-zA-Z0-9]/g : /\\D/g, '').slice(0, len);\n if (!cleaned) return;\n e.preventDefault();\n inputs.forEach((x, j) => {\n x.value = cleaned[j] || '';\n });\n inputs[Math.min(cleaned.length, len - 1)]?.focus();\n if (cleaned.length === len) options.onOtpComplete?.(cleaned);\n });\n }\n\n if (typeof initial === 'string') {\n inputs.forEach((inp, idx) => {\n inp.value = initial[idx] || '';\n });\n }\n\n let footerNote: HTMLElement | null = null;\n if (options.resendCooldown !== undefined) {\n let cd = options.resendCooldown;\n const resendBtn = el('button', 'gk-btn-resend', { type: 'button' }, 'Resend code');\n const timerSpan = el('span', '', {}, cd > 0 ? ` (${cd}s)` : '');\n resendBtn.disabled = cd > 0;\n footerNote = el('p', 'gk-otp-resend', {}, \"Didn't get it? \", resendBtn, timerSpan);\n if (cd > 0) {\n const iv = setInterval(() => {\n if (!resendBtn.isConnected || --cd <= 0) {\n clearInterval(iv);\n timerSpan.textContent = '';\n resendBtn.disabled = false;\n } else timerSpan.textContent = ` (${cd}s)`;\n }, 1000);\n }\n resendBtn.addEventListener('click', () => {\n if (!resendBtn.disabled) options.onResend?.();\n });\n }\n\n return ctrl(wrap(labelNode, otpWrap, footerNote), inputs[0] ?? otpWrap, inputs, () =>\n inputs.map((x) => x.value).join(''),\n );\n }\n\n return makeCtrl(input, input, [input], () =>\n type === 'file'\n ? input.multiple\n ? [...(input.files ?? [])]\n : input.files?.[0]\n : type === 'number'\n ? input.value === ''\n ? undefined\n : Number(input.value)\n : input.value,\n );\n}\n","import { createDialogController, decideDialogRole } from '../core';\nimport type {\n DialogButton,\n DialogController,\n DialogOptions,\n DialogPromise,\n DialogState,\n} from '../core';\nimport { cssLength, el, fill, nextId, requireDom } from './dom';\nimport { getEngine } from './engine';\nimport { icon } from './icons';\nimport type { IconName } from './icons';\nimport { buildInput } from './inputs';\nimport type { InputControl } from './inputs';\nimport { openOverlay } from './overlay';\nimport { sanitizeToFragment } from './sanitize';\nimport { resolveVariant } from './variants';\n\nfunction applyButton(\n node: HTMLButtonElement,\n spec: DialogButton | undefined,\n fallbackLabel: string,\n show: boolean,\n): void {\n const visible = spec?.show ?? show;\n node.hidden = !visible;\n node.textContent = spec?.label ?? fallbackLabel;\n if (spec?.aria) node.setAttribute('aria-label', spec.aria);\n else node.removeAttribute('aria-label');\n if (spec?.color) node.style.setProperty('--gk-button', spec.color);\n else node.style.removeProperty('--gk-button');\n}\n\n/**\n * Opens a dialog in the DOM. The returned promise resolves with the result and carries the live\n * `handle`. Throws when no DOM is available.\n */\nexport function openDialog(initial: DialogOptions): DialogPromise {\n requireDom();\n const config = getEngine().store.config.get();\n const controller: DialogController = createDialogController(initial);\n const titleId = nextId('gk-title');\n const textId = nextId('gk-text');\n const errorId = nextId('gk-error');\n let input: InputControl | undefined;\n let inputKey = '';\n\n const overlay = openOverlay({\n backdrop: initial.backdrop,\n theme: initial.theme ?? config.theme,\n mode: config.mode,\n dir: config.dir,\n onEscape: () => void controller.dismiss('esc'),\n onBackdrop: () => void controller.dismiss('backdrop'),\n });\n\n const panel = el('div', 'gk-dialog', {\n tabindex: '-1',\n 'aria-modal': 'true',\n 'data-gk-theme': initial.theme ?? config.theme,\n 'data-gk-mode': config.mode,\n });\n const closeBtn = el('button', 'gk-dialog-close', { type: 'button' }, icon('close'));\n const image = el('img', 'gk-image');\n const iconBox = el('div', 'gk-dialog-icon');\n const title = el('h2', 'gk-dialog-title', { id: titleId });\n const text = el('div', 'gk-dialog-text', { id: textId });\n const noticeBox = el('div', 'gk-dialog-notice', { role: 'note' });\n noticeBox.hidden = true;\n const countdownNum = el('span', 'gk-countdown-num');\n const countdownBox = el('div', 'gk-countdown-big', { 'aria-atomic': 'true' }, countdownNum, 's');\n countdownBox.hidden = true;\n const inputBox = el('div', 'gk-input-box');\n const error = el('div', 'gk-error', { id: errorId, role: 'alert' });\n const btn = (n: string) => el('button', `gk-btn gk-${n} gk-btn--${n}`, { type: 'button' });\n const confirmBtn = btn('confirm');\n const denyBtn = btn('deny');\n const cancelBtn = btn('cancel');\n const buttons = el(\n 'div',\n 'gk-dialog-buttons gk-dialog-actions',\n {},\n cancelBtn,\n denyBtn,\n confirmBtn,\n );\n const footer = el('div', 'gk-dialog-footer');\n const bar = el('i');\n const timerBar = el('div', 'gk-timer', { 'aria-hidden': 'true' }, bar);\n panel.append(\n closeBtn,\n image,\n iconBox,\n title,\n text,\n noticeBox,\n countdownBox,\n inputBox,\n error,\n buttons,\n footer,\n timerBar,\n );\n overlay.root.append(panel);\n\n let lastTimer = -1;\n let autoPaused = false;\n const checkMatch = (): void => {\n const st = controller.getState();\n const target = st.options.confirmText;\n if (!target) return;\n const cur = String(input ? input.read() : '');\n const match = st.options.caseSensitive\n ? cur === target\n : cur.trim().toLowerCase() === target.toLowerCase();\n confirmBtn.disabled = !match || st.loading !== null;\n confirmBtn.setAttribute('aria-disabled', String(!match));\n };\n\n const sync = (state: DialogState): void => {\n const o = state.options;\n const themeName = o.theme ?? initial.theme ?? config.theme;\n const activeVariant = resolveVariant(themeName, o.variant ?? initial.variant);\n if (activeVariant) panel.setAttribute('data-gk-variant', activeVariant);\n else panel.removeAttribute('data-gk-variant');\n\n panel.className = ['gk-dialog', o.className].filter(Boolean).join(' ');\n panel.dataset.tone = o.tone ?? 'info';\n panel.dataset.grow = o.grow ?? '';\n const [row, col] = (o.position ?? 'center-center').split('-') as [string, string];\n overlay.root.dataset.row = row;\n overlay.root.dataset.col = col;\n panel.style.width = o.width === undefined ? '' : cssLength(o.width);\n panel.style.padding = o.padding === undefined ? '' : cssLength(o.padding);\n panel.setAttribute('role', decideDialogRole(o));\n title.textContent = o.title ?? '';\n title.hidden = !o.title;\n if (o.title) panel.setAttribute('aria-labelledby', titleId);\n else panel.removeAttribute('aria-labelledby');\n\n text.replaceChildren();\n if (o.text) text.append(o.text);\n if (o.html) {\n const fragment = sanitizeToFragment(o.html);\n if (fragment) text.append(fragment);\n }\n text.hidden = !o.text && !o.html;\n if (text.hidden) panel.removeAttribute('aria-describedby');\n else panel.setAttribute('aria-describedby', textId);\n\n iconBox.replaceChildren();\n iconBox.dataset.tone =\n o.tone ??\n (o.icon === 'warning'\n ? 'warning'\n : o.icon === 'error' || o.icon === 'trash'\n ? 'danger'\n : o.icon === 'success'\n ? 'success'\n : 'info');\n if (o.icon === 'custom') fill(iconBox, o.iconContent);\n else if (o.icon) {\n const iconNode = icon(o.icon as IconName);\n if (iconNode) iconBox.append(iconNode);\n }\n iconBox.hidden = !o.icon;\n iconBox.dataset.icon = o.icon ?? '';\n\n noticeBox.hidden = !o.notice;\n if (o.notice) {\n noticeBox.replaceChildren();\n noticeBox.dataset.tone = o.notice.tone ?? 'warning';\n if (o.notice.icon) fill(noticeBox, o.notice.icon);\n else {\n const ic = icon(\n o.notice.tone === 'danger' ? 'error' : o.notice.tone === 'info' ? 'info' : 'shield',\n );\n if (ic) noticeBox.append(ic);\n }\n noticeBox.append(el('span', '', {}, o.notice.text));\n }\n\n countdownBox.hidden = o.countdown === undefined;\n if (o.countdown !== undefined) {\n const sec = Math.max(0, Math.ceil(controller.handle.timer.remaining() / 1000));\n countdownNum.textContent = String(sec);\n countdownBox.setAttribute(\n 'aria-live',\n sec === 30 || sec === 10 || sec === 5 ? 'assertive' : 'off',\n );\n }\n\n if (o.image) {\n image.src = o.image.src;\n image.alt = o.image.alt;\n if (o.image.width) image.width = o.image.width;\n if (o.image.height) image.height = o.image.height;\n }\n image.hidden = !o.image;\n\n if (o.closeButtonLabel) closeBtn.setAttribute('aria-label', o.closeButtonLabel);\n closeBtn.hidden = !o.closeButtonLabel;\n\n const key = `${o.input ?? ''}|${JSON.stringify(o.options ?? null)}|${o.inputLabel ?? ''}|${o.placeholder ?? ''}`;\n if (key !== inputKey) {\n inputKey = key;\n const keepValue = input ? input.read() : undefined;\n inputBox.replaceChildren();\n input = buildInput(o, titleId);\n if (input) {\n inputBox.append(input.node);\n if (keepValue !== undefined && typeof keepValue !== 'object') {\n const field = input.focusTarget;\n if (\n field instanceof HTMLInputElement &&\n field.type !== 'checkbox' &&\n field.type !== 'radio'\n ) {\n field.value = String(keepValue);\n }\n }\n for (const field of input.fields) {\n field.addEventListener('input', checkMatch);\n field.addEventListener('keydown', (event) => {\n const target = event.target as HTMLElement;\n const multiline = target instanceof HTMLTextAreaElement;\n if (\n event.key === 'Enter' &&\n !(multiline && !event.ctrlKey && !event.metaKey) &&\n target.tagName !== 'SELECT'\n ) {\n event.preventDefault();\n void controller.submit('confirm');\n }\n });\n }\n controller.setValueReader(input.read);\n } else controller.setValueReader(() => undefined);\n }\n inputBox.hidden = !input;\n for (const field of input?.fields ?? []) {\n if (state.error) {\n field.setAttribute('aria-invalid', 'true');\n field.setAttribute('aria-describedby', errorId);\n } else {\n field.removeAttribute('aria-invalid');\n field.removeAttribute('aria-describedby');\n }\n }\n error.textContent = state.error ?? '';\n error.hidden = !state.error;\n\n applyButton(confirmBtn, o.confirmButton, 'OK', true);\n applyButton(denyBtn, o.denyButton, 'No', false);\n applyButton(cancelBtn, o.cancelButton, 'Cancel', false);\n buttons.dataset.reverse = o.reverseButtons ? 'true' : 'false';\n buttons.dataset.layout =\n o.buttonLayout ??\n (activeVariant === 'update-info'\n ? 'stack'\n : activeVariant === 'ios-glass-alert'\n ? 'divided'\n : 'row');\n buttons.hidden = confirmBtn.hidden && denyBtn.hidden && cancelBtn.hidden;\n const ld = state.loading,\n isC = ld === 'confirm',\n isD = ld === 'deny';\n confirmBtn.disabled = denyBtn.disabled = ld !== null;\n confirmBtn.setAttribute('aria-busy', String(isC));\n denyBtn.setAttribute('aria-busy', String(isD));\n confirmBtn.dataset.loading = String(isC);\n denyBtn.dataset.loading = String(isD);\n panel.setAttribute('aria-busy', String(ld !== null));\n\n if (o.confirmText) checkMatch();\n\n footer.replaceChildren();\n if (o.footer) {\n const fragment = sanitizeToFragment(o.footer);\n if (fragment) footer.append(fragment);\n }\n footer.hidden = !o.footer;\n\n const remaining = controller.handle.timer.remaining();\n timerBar.hidden = !(o.timerProgressBar && remaining > 0);\n if (!timerBar.hidden && Math.abs(remaining - lastTimer) > 60) {\n lastTimer = remaining;\n bar.style.animation = 'none';\n void bar.offsetWidth;\n bar.style.animation = '';\n bar.style.setProperty('--gk-d', `${remaining}ms`);\n }\n bar.style.animationPlayState = controller.handle.timer.paused() ? 'paused' : 'running';\n\n if (!state.open) void overlay.close();\n };\n\n closeBtn.addEventListener('click', () => void controller.dismiss('close'));\n confirmBtn.addEventListener('click', () => void controller.submit('confirm'));\n denyBtn.addEventListener('click', () => void controller.submit('deny'));\n cancelBtn.addEventListener('click', () => void controller.dismiss('cancel'));\n panel.addEventListener('pointerenter', () => {\n if (controller.handle.timer.remaining() > 0 && !controller.handle.timer.paused()) {\n autoPaused = true;\n controller.handle.timer.pause();\n }\n });\n panel.addEventListener('pointerleave', () => {\n if (autoPaused) {\n autoPaused = false;\n controller.handle.timer.resume();\n }\n });\n\n if (initial.draggable) {\n let origin: { x: number; y: number; ox: number; oy: number } | undefined;\n let offset = { x: 0, y: 0 };\n panel.dataset.draggable = 'true';\n panel.addEventListener('pointerdown', (event) => {\n const target = event.target as Element;\n if (\n target.closest('button,input,select,textarea,a') ||\n !target.closest('.gk-dialog-title,.gk-dialog-icon')\n )\n return;\n origin = { x: event.clientX, y: event.clientY, ox: offset.x, oy: offset.y };\n panel.setPointerCapture?.(event.pointerId);\n });\n panel.addEventListener('pointermove', (event) => {\n if (!origin) return;\n offset = { x: origin.ox + event.clientX - origin.x, y: origin.oy + event.clientY - origin.y };\n panel.style.transform = `translate(${offset.x}px, ${offset.y}px)`;\n });\n const stop = (): void => {\n origin = undefined;\n };\n panel.addEventListener('pointerup', stop);\n panel.addEventListener('pointercancel', stop);\n }\n\n controller.subscribe(() => sync(controller.getState()));\n sync(controller.getState());\n overlay.show();\n\n const o = controller.getState().options;\n const focusOn =\n o.focusOn ??\n (input ? 'input' : o.tone === 'danger' && !cancelBtn.hidden ? 'cancel' : 'confirm');\n const targets = {\n confirm: confirmBtn,\n deny: denyBtn,\n cancel: cancelBtn,\n input: input?.focusTarget,\n close: closeBtn,\n none: undefined,\n } as const;\n const target = targets[focusOn];\n if (target && !target.hidden) target.focus();\n else if (focusOn !== 'none') panel.focus();\n controller.opened();\n\n return Object.assign(\n controller.handle.result.then((value) => value),\n { handle: controller.handle },\n );\n}\n","import { createDialogController } from '../core';\nimport type {\n BottomSheetHandle,\n BottomSheetOptions,\n DialogPromise,\n DismissReason,\n LoadingHandle,\n LoadingOptions,\n SheetOptions,\n} from '../core';\nimport { el, nextId, requireDom } from './dom';\nimport { getEngine } from './engine';\nimport { icon } from './icons';\nimport { openOverlay } from './overlay';\nimport { sanitizeToFragment } from './sanitize';\n\n/**\n * Opens an action sheet. Resolves with `isConfirmed: true` and the chosen action value, or a\n * dismissal (`cancel`, `backdrop` or `esc`).\n */\nexport function openSheet(options: SheetOptions): DialogPromise {\n requireDom();\n const config = getEngine().store.config.get();\n const controller = createDialogController({\n allowOutsideClick: options.allowOutsideClick,\n allowEscape: options.allowEscape,\n });\n const titleId = nextId('gk-title');\n const messageId = nextId('gk-text');\n const overlay = openOverlay({\n backdrop: options.backdrop,\n theme: options.theme ?? config.theme,\n mode: config.mode,\n dir: config.dir,\n className: 'gk-overlay-sheet',\n onEscape: () => void controller.dismiss('esc'),\n onBackdrop: () => void controller.dismiss('backdrop'),\n });\n overlay.root.dataset.row = 'bottom';\n overlay.root.dataset.col = 'center';\n\n const panel = el('div', `gk-sheet${options.className ? ` ${options.className}` : ''}`, {\n role: 'dialog',\n 'aria-modal': 'true',\n tabindex: '-1',\n 'data-gk-theme': options.theme ?? config.theme,\n 'data-gk-mode': config.mode,\n });\n if (options.title) {\n panel.append(el('h2', 'gk-sheet-title', { id: titleId }, options.title));\n panel.setAttribute('aria-labelledby', titleId);\n }\n if (options.message) {\n panel.append(el('p', 'gk-sheet-message', { id: messageId }, options.message));\n panel.setAttribute('aria-describedby', messageId);\n }\n const group = el('div', 'gk-sheet-group', { role: 'group' });\n if (options.title) group.setAttribute('aria-labelledby', titleId);\n let firstEnabled: HTMLButtonElement | undefined;\n for (const action of options.actions) {\n const button = el('button', 'gk-sheet-action', {\n type: 'button',\n 'data-style': action.style ?? 'default',\n });\n if (action.disabled) button.disabled = true;\n if (action.icon) {\n const frag = sanitizeToFragment(action.icon);\n if (frag) button.append(el('span', 'gk-sheet-icon', { 'aria-hidden': 'true' }, frag));\n }\n button.append(el('span', 'gk-sheet-label', {}, action.label));\n button.addEventListener('click', () => {\n if (action.style === 'cancel') controller.dismiss('cancel');\n else controller.handle.close({ isConfirmed: true, value: action.value ?? action.label });\n });\n if (!action.disabled && !firstEnabled) firstEnabled = button;\n group.append(button);\n }\n panel.append(group);\n let cancel: HTMLButtonElement | undefined;\n if (options.cancel !== false) {\n cancel = el('button', 'gk-sheet-cancel', { type: 'button' }, options.cancel?.label ?? 'Cancel');\n cancel.addEventListener('click', () => void controller.dismiss('cancel'));\n panel.append(cancel);\n }\n panel.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n const btns = [...panel.querySelectorAll<HTMLButtonElement>('button:not([disabled])')];\n const i = btns.indexOf(document.activeElement as HTMLButtonElement);\n if (i !== -1) {\n e.preventDefault();\n btns[(i + (e.key === 'ArrowDown' ? 1 : btns.length - 1)) % btns.length]?.focus();\n }\n }\n });\n overlay.root.append(panel);\n controller.subscribe(() => {\n if (!controller.getState().open) void overlay.close();\n });\n overlay.show();\n (firstEnabled ?? cancel ?? panel).focus();\n controller.opened();\n return Object.assign(\n controller.handle.result.then((value) => value),\n { handle: controller.handle },\n );\n}\n\n/** Opens a bottom sheet with drag-to-resize snap points. */\nexport function openBottomSheet(options: BottomSheetOptions): BottomSheetHandle {\n requireDom();\n const config = getEngine().store.config.get();\n const snaps = (options.snapPoints?.length ? [...options.snapPoints] : [0.5])\n .map((value) => Math.min(1, Math.max(0.1, value)))\n .sort((a, b) => a - b);\n let index = Math.min(snaps.length - 1, Math.max(0, options.initialSnap ?? 0));\n const controller = createDialogController({\n allowOutsideClick: options.allowOutsideClick,\n allowEscape: options.allowEscape,\n willClose: () => options.willClose?.(handle),\n });\n const titleId = nextId('gk-title');\n\n const overlay = openOverlay({\n backdrop: options.backdrop,\n theme: options.theme ?? config.theme,\n mode: config.mode,\n dir: config.dir,\n className: 'gk-overlay-bottom',\n onEscape: () => void controller.dismiss('esc'),\n onBackdrop: () => void controller.dismiss('backdrop'),\n });\n overlay.root.dataset.row = 'bottom';\n overlay.root.dataset.col = 'center';\n\n const panel = el('div', `gk-bsheet${options.className ? ` ${options.className}` : ''}`, {\n role: 'dialog',\n 'aria-modal': 'true',\n tabindex: '-1',\n 'data-gk-theme': options.theme ?? config.theme,\n 'data-gk-mode': config.mode,\n });\n if (options.variant) panel.setAttribute('data-gk-variant', options.variant);\n const grab = el('button', 'gk-grab', {\n type: 'button',\n 'aria-label': options.handleLabel ?? 'Resize sheet',\n });\n const iconBox = el('div', 'gk-dialog-icon gk-dialog-badge');\n iconBox.hidden = true;\n if (options.icon) {\n iconBox.hidden = false;\n iconBox.dataset.tone = options.tone ?? 'danger';\n const ic = icon(\n options.icon === 'trash' ? 'trash' : options.icon === 'warning' ? 'warning' : 'error',\n );\n if (ic) iconBox.append(ic);\n }\n const title = el('h2', 'gk-bsheet-title', { id: titleId });\n const body = el('div', 'gk-bsheet-body');\n const buttons = el('div', 'gk-dialog-buttons gk-dialog-actions', { 'data-layout': 'stack' });\n buttons.hidden = true;\n if (options.confirmButton || options.cancelButton || options.variant === 'bottom-sheet-confirm') {\n buttons.hidden = false;\n const mkBtn = (cls: string, label: string, fn: () => void) => {\n const b = el('button', `gk-btn ${cls}`, { type: 'button' }, label);\n b.addEventListener('click', fn);\n return b;\n };\n buttons.append(\n mkBtn('gk-confirm gk-btn--confirm', options.confirmButton?.label ?? 'Confirm', () =>\n controller.submit('confirm'),\n ),\n mkBtn('gk-cancel gk-btn--cancel', options.cancelButton?.label ?? 'Cancel', () =>\n controller.dismiss('cancel'),\n ),\n );\n }\n const closeBtn = el('button', 'gk-dialog-close', { type: 'button' });\n closeBtn.append(icon('close'));\n panel.append(closeBtn, grab, iconBox, title, body, buttons);\n overlay.root.append(panel);\n\n const setHeight = (fraction: number, animate: boolean): void => {\n panel.dataset.dragging = String(!animate);\n panel.style.setProperty('--gk-sheet-h', `${fraction * 100}vh`);\n };\n const render = (patch: Pick<BottomSheetOptions, 'title' | 'text' | 'html'>): void => {\n title.textContent = patch.title ?? '';\n title.hidden = !patch.title;\n if (patch.title) panel.setAttribute('aria-labelledby', titleId);\n else panel.removeAttribute('aria-labelledby');\n body.replaceChildren();\n if (patch.text) body.append(patch.text);\n if (patch.html) {\n const fragment = sanitizeToFragment(patch.html);\n if (fragment) body.append(fragment);\n }\n };\n render(options);\n grab.hidden = options.handle === false;\n closeBtn.hidden = !options.closeButtonLabel;\n if (options.closeButtonLabel) closeBtn.setAttribute('aria-label', options.closeButtonLabel);\n closeBtn.addEventListener('click', () => void controller.dismiss('close'));\n setHeight(snaps[index] ?? 0.5, true);\n\n const snapTo = (next: number): void => {\n index = Math.min(snaps.length - 1, Math.max(0, next));\n setHeight(snaps[index] ?? 0.5, true);\n };\n\n grab.addEventListener('keydown', (e) => {\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n snapTo(index + 1);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n if (!index && options.dismissible !== false) controller.dismiss('close');\n else snapTo(index - 1);\n }\n });\n\n let drag: { y: number; base: number } | undefined;\n const view = (): number => window.innerHeight || 1;\n panel.addEventListener('pointerdown', (e) => {\n if (!(e.target as Element).closest('.gk-grab,.gk-bsheet-title')) return;\n drag = { y: e.clientY, base: snaps[index] ?? 0.5 };\n panel.setPointerCapture?.(e.pointerId);\n });\n panel.addEventListener('pointermove', (e) => {\n if (!drag) return;\n const f = drag.base + (drag.y - e.clientY) / view();\n setHeight(Math.min(snaps[snaps.length - 1] ?? 1, Math.max(0, f)), false);\n });\n const end = (e: PointerEvent): void => {\n if (!drag) return;\n const f = drag.base + (drag.y - e.clientY) / view();\n drag = undefined;\n if (options.dismissible !== false && f < (snaps[0] ?? 0.5) / 2) {\n controller.dismiss('close');\n return;\n }\n let best = 0;\n snaps.forEach((s, i) => {\n if (Math.abs(s - f) < Math.abs((snaps[best] ?? 0) - f)) best = i;\n });\n snapTo(best);\n };\n panel.addEventListener('pointerup', end);\n panel.addEventListener('pointercancel', end);\n\n const handle: BottomSheetHandle = {\n body,\n result: controller.handle.result,\n close: (reason: DismissReason = 'close') => void controller.dismiss(reason),\n snapTo,\n update: render,\n };\n controller.subscribe(() => {\n if (!controller.getState().open) void overlay.close();\n });\n overlay.show();\n (grab.hidden ? panel : grab).focus();\n options.didOpen?.(handle);\n return handle;\n}\n\n/** Shows a blocking loading overlay with an announced status message. */\nexport function openLoading(options: LoadingOptions = {}): LoadingHandle {\n requireDom();\n const config = getEngine().store.config.get();\n let open = true;\n let resolveClosed: () => void = () => undefined;\n const closed = new Promise<void>((resolve) => {\n resolveClosed = resolve;\n });\n const overlay = openOverlay({\n backdrop: options.backdrop,\n theme: options.theme ?? config.theme,\n mode: config.mode,\n dir: config.dir,\n className: `gk-overlay-loading${options.className ? ` ${options.className}` : ''}`,\n trap: false,\n onEscape: () => {\n if (options.allowEscape) handle.close();\n },\n });\n overlay.root.dataset.row = 'center';\n overlay.root.dataset.col = 'center';\n const spinner = icon('loading');\n spinner.classList.add('gk-loading-spinner');\n spinner.setAttribute('width', '32');\n spinner.setAttribute('height', '32');\n const label = el('div', 'gk-loading-text', { id: nextId('gk-text') });\n const fillBar = el('i');\n const track = el(\n 'div',\n 'gk-loading-bar',\n { role: 'progressbar', 'aria-valuemin': '0', 'aria-valuemax': '100' },\n fillBar,\n );\n const panel = el(\n 'div',\n 'gk-loading',\n {\n role: 'status',\n 'aria-live': 'polite',\n 'aria-busy': 'true',\n tabindex: '-1',\n 'data-gk-theme': options.theme ?? config.theme,\n 'data-gk-mode': config.mode,\n },\n spinner,\n label,\n track,\n );\n overlay.root.append(panel);\n\n let current: Pick<LoadingOptions, 'text' | 'progress'> = {\n text: options.text ?? options.title,\n progress: options.progress,\n };\n const apply = (patch: Pick<LoadingOptions, 'text' | 'progress'>): void => {\n current = patch;\n label.textContent = patch.text ?? '';\n label.hidden = !patch.text;\n track.hidden = patch.progress === undefined;\n if (patch.progress === undefined) {\n track.removeAttribute('aria-valuenow');\n } else {\n const pct = Math.round(Math.min(1, Math.max(0, patch.progress)) * 100);\n track.setAttribute('aria-valuenow', String(pct));\n if (patch.text) track.setAttribute('aria-label', patch.text);\n fillBar.style.width = `${pct}%`;\n }\n };\n apply(options);\n overlay.show();\n panel.focus();\n\n const handle: LoadingHandle = {\n closed,\n update(patch) {\n if (open) apply({ ...current, ...patch });\n },\n close() {\n if (!open) return;\n open = false;\n void overlay.close().then(resolveClosed);\n },\n };\n return handle;\n}\n","import type { ThemeDefinition, ThemeTokens } from './themes.ts';\n\nconst tokens = (t: ThemeTokens): string =>\n `--gk-bg:${t.bg};--gk-bg-solid:${t.solid};--gk-fg:${t.fg};--gk-muted:${t.muted};--gk-border:${t.border};--gk-shadow:${t.shadow};--gk-accent:${t.accent};--gk-accent-fg:${t.accentFg};--gk-danger:${t.danger};--gk-danger-fg:${t.dangerFg};--gk-success:${t.success};--gk-error:${t.error};--gk-warning:${t.warning};--gk-info:${t.info};`;\n\n/**\n * Renders the token blocks (light, explicit dark, class-based dark, and automatic dark) plus\n * fallbacks (no backdrop-filter, forced-colors, reduced transparency) and mobile optimizations.\n */\nexport function themeCss(def: ThemeDefinition): string {\n const sel = `[data-gk-theme=\"${def.name}\"]`;\n const shape =\n `--gk-radius:${def.radius};--gk-blur:${def.blur};--gk-saturate:${def.saturate};` +\n (def.borderWidth ? `--gk-border-w:${def.borderWidth};` : '') +\n (def.font ? `--gk-font:${def.font};` : '') +\n (def.ease ? `--gk-ease:${def.ease};` : '') +\n (def.duration ? `--gk-duration:${def.duration};` : '');\n\n const darkSel = `${sel}[data-gk-mode=\"dark\"],:is(.dark,[data-theme=\"dark\"]) ${sel}`;\n const extra = (def.css ?? '').split('&').join(sel);\n const darkTokens = tokens(def.dark);\n\n return (\n `${sel}{color-scheme:light;${shape}${tokens(def.light)}}` +\n `${darkSel}{color-scheme:dark;${darkTokens}}` +\n `@media (prefers-color-scheme:dark){${sel}[data-gk-mode=\"auto\"]{color-scheme:dark;${darkTokens}}}` +\n extra\n );\n}\n","import { themeCss } from '../themes/css.ts';\nimport type { ThemeDefinition, ThemeTokens } from '../themes/themes.ts';\n\nconst W = '#ffffff';\nconst R = '#b71c1c';\nconst D = '#1c1c1e';\nconst sh = (a: number) => `0 8px 28px rgba(0,0,0,${a})`;\nconst mk = (\n bg: string,\n fg: string,\n muted: string,\n border: string,\n s: number,\n accent: string,\n accentFg: string,\n danger: string,\n dangerFg: string,\n success: string,\n error: string,\n warning: string,\n info: string,\n): ThemeTokens => ({\n bg,\n solid: bg,\n fg,\n muted,\n border,\n shadow: sh(s),\n accent,\n accentFg,\n danger,\n dangerFg,\n success,\n error,\n warning,\n info,\n});\n\nconst DEFAULT_LIGHT = mk(\n W,\n '#1d1d1f',\n '#515156',\n 'rgba(60,60,67,0.22)',\n 0.14,\n '#0057c2',\n W,\n R,\n W,\n '#1a7f37',\n R,\n '#8a5a00',\n '#0b5cc7',\n);\nconst DEFAULT_DARK = mk(\n D,\n '#f5f5f7',\n '#b4b4bb',\n 'rgba(255,255,255,0.16)',\n 0.5,\n '#4da3ff',\n '#00152e',\n '#ff8a8a',\n '#2b0000',\n '#4ade80',\n '#ff7b7b',\n '#ffc857',\n '#6cb6ff',\n);\n\n/** Options for registering a custom theme via `ui.defineTheme()`. */\nexport interface CustomThemeDefinition {\n radius?: string;\n blur?: string;\n saturate?: string;\n font?: string;\n ease?: string;\n duration?: string;\n borderWidth?: string;\n tokens?:\n | {\n light?: Partial<ThemeTokens>;\n dark?: Partial<ThemeTokens>;\n }\n | Partial<ThemeTokens>;\n light?: Partial<ThemeTokens>;\n dark?: Partial<ThemeTokens>;\n css?: string;\n supportedVariants?: readonly string[];\n}\n\nconst customThemes = new Map<string, ThemeDefinition>();\n\n/**\n * Defines a custom theme. Compiles the tokens to CSS, registers the theme name with toastory,\n * and automatically injects a `<style data-gk-theme=\"<name>\">` element when called in the browser.\n *\n * @returns The compiled CSS string.\n */\nexport function defineTheme(name: string, def: CustomThemeDefinition): string {\n const t = def.tokens as { light?: Partial<ThemeTokens>; dark?: Partial<ThemeTokens> } | undefined;\n const lightInput =\n def.light ?? (t && ('light' in t || 'dark' in t) ? t.light : (t as Partial<ThemeTokens>));\n const darkInput = def.dark ?? (t && 'dark' in t ? t.dark : undefined);\n\n const fullDef: ThemeDefinition = {\n radius: '16px',\n blur: '16px',\n saturate: '160%',\n ...def,\n name,\n light: { ...DEFAULT_LIGHT, ...lightInput },\n dark: { ...DEFAULT_DARK, ...darkInput },\n };\n\n customThemes.set(name, fullDef);\n const css = themeCss(fullDef);\n\n if (typeof document !== 'undefined') {\n const sel = `style[data-gk-theme=\"${name}\"]`;\n let styleEl = document.querySelector<HTMLStyleElement>(sel);\n if (!styleEl) {\n styleEl = document.createElement('style');\n styleEl.setAttribute('data-gk-theme', name);\n document.head.append(styleEl);\n }\n styleEl.textContent = css;\n }\n\n return css;\n}\n\n/** Returns a custom theme definition if registered. */\nexport function getCustomTheme(name: string): ThemeDefinition | undefined {\n return customThemes.get(name);\n}\n\n/** Clears registered custom themes. Used for testing. */\nexport function clearCustomThemes(): void {\n if (typeof document !== 'undefined') {\n for (const name of customThemes.keys()) {\n document.querySelector(`style[data-gk-theme=\"${name}\"]`)?.remove();\n }\n }\n customThemes.clear();\n}\n","import { runSteps } from '../core';\nimport type {\n BottomSheetHandle,\n BottomSheetOptions,\n DialogOptions,\n DialogPromise,\n GlazeConfig,\n LoadingHandle,\n LoadingOptions,\n SheetOptions,\n SoundCue,\n StepsResult,\n ToastApi,\n ToastStore,\n} from '../core';\nimport { openDialog } from './dialog';\nimport { configure, getEngine } from './engine';\nimport { openBottomSheet, openLoading, openSheet } from './sheets';\nimport { defineTheme, type CustomThemeDefinition } from './theme-engine';\nimport { chime, playSound } from './sound';\n\n/** The unified toastory API. */\nexport interface Ui {\n /** Toast notifications. */\n toast: ToastApi;\n /** Confirmation dialog with confirm and cancel buttons. */\n confirm(options?: DialogOptions): DialogPromise;\n /** Informational dialog with a single button. */\n alert(options?: DialogOptions): DialogPromise;\n /** Dialog with an input. Defaults to a text input. */\n prompt(options?: DialogOptions): DialogPromise;\n /** Multi-step dialog flow with back navigation. */\n steps(steps: readonly DialogOptions[], backLabel?: string): Promise<StepsResult>;\n /** Action sheet. */\n sheet(options: SheetOptions): DialogPromise;\n /** Bottom sheet with snap points. */\n bottomSheet(options?: BottomSheetOptions): BottomSheetHandle;\n /** Blocking loading overlay. */\n loading(options?: LoadingOptions): LoadingHandle;\n /** Sets global configuration. Returns the resulting configuration. */\n configure(patch: Partial<GlazeConfig>): Readonly<GlazeConfig>;\n /** Plays an audio feedback sound cue, synthesizer chime, or audio URL. */\n sound(cue?: SoundCue | string | boolean, volume?: number): void;\n /** Defines a custom theme with tokens and optional CSS rules. */\n defineTheme(name: string, definition: CustomThemeDefinition): string;\n /** The underlying toast store. */\n readonly toastStore: ToastStore;\n}\n\n/** Builds the `ui` object. Called once at module load; touches no DOM. */\nexport function createUi(): Ui {\n const wb = (opts: DialogOptions, cancel: boolean, extra: Partial<DialogOptions> = {}) =>\n openDialog({ ...opts, ...extra, cancelButton: { show: cancel, ...opts.cancelButton } });\n return {\n toast: getEngine().toast,\n confirm: (options = {}) => wb(options, true),\n alert: (options = {}) => wb(options, false),\n prompt: (options = {}) => wb(options, true, { input: options.input ?? 'text' }),\n steps: (steps, backLabel) => runSteps(steps, (options) => wb(options, true), backLabel),\n sheet: openSheet,\n bottomSheet: openBottomSheet,\n loading: openLoading,\n configure,\n sound: (cue, volume) => playSound(cue, volume),\n defineTheme,\n get toastStore() {\n return getEngine().store;\n },\n };\n}\n\n/** The unified API: `ui.toast`, `ui.confirm`, `ui.sheet` and friends. */\nexport const ui: Ui = /* @__PURE__ */ createUi();\n\n/** Toast API on its own. Importing only this keeps dialog code out of your bundle. */\nexport const toast: ToastApi = /* @__PURE__ */ getEngine().toast;\n\nexport { playSound, chime };\n","import { useEffect, useMemo, useSyncExternalStore, type JSX } from 'react';\nimport type { GlazeConfig, ToastApi, ToastRecord, ToastoryConfig } from '../core';\nimport { canMountToaster, mountToaster } from '../web/toaster';\nimport { getEngine, setAutoMount } from '../web/engine';\nimport { toast, ui } from '../web/ui';\nimport { playSound, chime } from '../web/sound';\n\nexport { ui, toast, playSound, chime };\nexport type { Ui } from '../web/ui';\nexport type { GlazeConfig, ToastoryConfig };\n\n/** Props for the React Toaster component. */\nexport interface ToasterProps extends Partial<ToastoryConfig> {\n /** Custom container class name. */\n className?: string;\n}\n\n/**\n * React Toaster provider and container.\n * Safe for SSR and hydration. Configures toastory and handles toast rendering.\n */\nexport function Toaster(props: ToasterProps): JSX.Element | null {\n const { className: _className, ...configPatch } = props;\n void _className;\n const engine = getEngine();\n\n // Apply configuration on mount and prop changes\n useEffect(() => {\n if (Object.keys(configPatch).length > 0) {\n engine.store.config.set(configPatch);\n }\n }, [configPatch, engine]);\n\n useEffect(() => {\n // Disable web autoMount since React component manages the toaster lifecycle\n setAutoMount(false);\n\n if (canMountToaster()) {\n const handle = mountToaster(engine.store);\n return () => {\n handle.destroy();\n setAutoMount(true);\n };\n }\n return undefined;\n }, [engine]);\n\n return null;\n}\n\nconst EMPTY_TOASTS: readonly ToastRecord[] = [];\nconst getEmptyToasts = (): readonly ToastRecord[] => EMPTY_TOASTS;\n\n/** Hook returning the toast API and the list of currently active toasts. */\nexport function useToast(): {\n toast: ToastApi;\n toasts: readonly ToastRecord[];\n} {\n const engine = getEngine();\n const toasts = useSyncExternalStore(\n (onStoreChange) => engine.store.subscribe(onStoreChange),\n () => engine.store.getToasts(),\n getEmptyToasts,\n );\n\n return useMemo(() => ({ toast: engine.toast, toasts }), [engine, toasts]);\n}\n\n/** Hook returning the full `ui` toolkit and reactive toast state. */\nexport function useToastory(): {\n ui: typeof ui;\n toast: ToastApi;\n toasts: readonly ToastRecord[];\n config: Readonly<GlazeConfig>;\n} {\n const engine = getEngine();\n const toasts = useSyncExternalStore(\n (onStoreChange) => engine.store.subscribe(onStoreChange),\n () => engine.store.getToasts(),\n getEmptyToasts,\n );\n const config = useSyncExternalStore(\n (onStoreChange) => engine.store.config.subscribe(onStoreChange),\n () => engine.store.config.get(),\n () => engine.store.config.get(),\n );\n\n return useMemo(\n () => ({\n ui,\n toast: engine.toast,\n toasts,\n config,\n }),\n [engine, toasts, config],\n );\n}\n\n/** Backward compatibility alias for useToastory. */\nexport const useGlazekit = useToastory;\n"]}