toastory 0.1.2 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +15 -1
- package/dist/angular.cjs +1 -3
- package/dist/angular.cjs.map +1 -1
- package/dist/angular.d.cts +12 -5
- package/dist/angular.d.ts +12 -5
- package/dist/angular.js +1 -3
- package/dist/angular.js.map +1 -1
- package/dist/core.cjs +1 -2
- package/dist/core.cjs.map +1 -1
- package/dist/core.d.cts +20 -6
- package/dist/core.d.ts +20 -6
- package/dist/core.js +1 -2
- package/dist/core.js.map +1 -1
- package/dist/{dialog-Buemfm7I.d.ts → dialog-DAgL0wyv.d.ts} +1 -1
- package/dist/{dialog-fziFV6J0.d.cts → dialog-DosUuJM_.d.cts} +1 -1
- package/dist/index.cjs +1 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +6 -5
- package/dist/index.d.ts +6 -5
- package/dist/index.js +1 -6
- package/dist/index.js.map +1 -1
- package/dist/native.cjs +1 -2
- package/dist/native.cjs.map +1 -1
- package/dist/native.d.cts +45 -3
- package/dist/native.d.ts +45 -3
- package/dist/native.js +1 -2
- package/dist/native.js.map +1 -1
- package/dist/react.cjs +1 -3
- package/dist/react.cjs.map +1 -1
- package/dist/react.d.cts +5 -4
- package/dist/react.d.ts +5 -4
- package/dist/react.js +1 -3
- package/dist/react.js.map +1 -1
- package/dist/sound-CedBML6j.d.ts +22 -0
- package/dist/sound-DLGxVNC0.d.cts +22 -0
- package/dist/svelte.cjs +1 -3
- package/dist/svelte.cjs.map +1 -1
- package/dist/svelte.d.cts +3 -2
- package/dist/svelte.d.ts +3 -2
- package/dist/svelte.js +1 -3
- package/dist/svelte.js.map +1 -1
- package/dist/themes/_base.css +1 -1
- package/dist/themes/_base.dialog.css +1 -1
- package/dist/themes/_base.toast.css +1 -1
- package/dist/themes/all.css +1 -1
- package/dist/themes/aurora.css +1 -1
- package/dist/themes/aurora.dialog.css +1 -1
- package/dist/themes/aurora.toast.css +1 -1
- package/dist/themes/basic.css +1 -1
- package/dist/themes/basic.dialog.css +1 -1
- package/dist/themes/basic.toast.css +1 -1
- package/dist/themes/brutal.css +1 -1
- package/dist/themes/brutal.dialog.css +1 -1
- package/dist/themes/brutal.toast.css +1 -1
- package/dist/themes/classic-bar.css +1 -1
- package/dist/themes/classic-bar.dialog.css +1 -1
- package/dist/themes/classic-bar.toast.css +1 -1
- package/dist/themes/classic-stack.css +1 -1
- package/dist/themes/classic-stack.dialog.css +1 -1
- package/dist/themes/classic-stack.toast.css +1 -1
- package/dist/themes/dialogs.css +1 -1
- package/dist/themes/dialogs.dialog.css +1 -1
- package/dist/themes/dialogs.toast.css +1 -1
- package/dist/themes/essentials.css +1 -1
- package/dist/themes/essentials.dialog.css +1 -1
- package/dist/themes/essentials.toast.css +1 -1
- package/dist/themes/flat.css +1 -1
- package/dist/themes/flat.dialog.css +1 -1
- package/dist/themes/flat.toast.css +1 -1
- package/dist/themes/gradient-strip.css +1 -1
- package/dist/themes/gradient-strip.dialog.css +1 -1
- package/dist/themes/gradient-strip.toast.css +1 -1
- package/dist/themes/gradient.css +1 -1
- package/dist/themes/gradient.dialog.css +1 -1
- package/dist/themes/gradient.toast.css +1 -1
- package/dist/themes/ios-glass.css +1 -1
- package/dist/themes/ios-glass.dialog.css +1 -1
- package/dist/themes/ios-glass.toast.css +1 -1
- package/dist/themes/liquid-glass.css +1 -1
- package/dist/themes/liquid-glass.dialog.css +1 -1
- package/dist/themes/liquid-glass.toast.css +1 -1
- package/dist/themes/material.css +1 -1
- package/dist/themes/material.dialog.css +1 -1
- package/dist/themes/material.toast.css +1 -1
- package/dist/themes/minimal.css +1 -1
- package/dist/themes/minimal.dialog.css +1 -1
- package/dist/themes/minimal.toast.css +1 -1
- package/dist/themes/neon.css +1 -1
- package/dist/themes/neon.dialog.css +1 -1
- package/dist/themes/neon.toast.css +1 -1
- package/dist/themes/outline.css +1 -1
- package/dist/themes/outline.dialog.css +1 -1
- package/dist/themes/outline.toast.css +1 -1
- package/dist/themes/pastel.css +1 -1
- package/dist/themes/pastel.dialog.css +1 -1
- package/dist/themes/pastel.toast.css +1 -1
- package/dist/themes/pill.css +1 -1
- package/dist/themes/pill.dialog.css +1 -1
- package/dist/themes/pill.toast.css +1 -1
- package/dist/themes/ripple.css +1 -1
- package/dist/themes/ripple.dialog.css +1 -1
- package/dist/themes/ripple.toast.css +1 -1
- package/dist/themes/showcase.css +1 -1
- package/dist/themes/showcase.dialog.css +1 -1
- package/dist/themes/showcase.toast.css +1 -1
- package/dist/themes/sweet.css +1 -1
- package/dist/themes/sweet.dialog.css +1 -1
- package/dist/themes/sweet.toast.css +1 -1
- package/dist/{toast-api-D6WYDtUy.d.cts → toast-api-Bwjc_Kxh.d.cts} +16 -4
- package/dist/{toast-api-D6WYDtUy.d.ts → toast-api-Bwjc_Kxh.d.ts} +16 -4
- package/dist/{ui-D5FwMD8Y.d.cts → ui-Bdu8EJ3m.d.cts} +4 -2
- package/dist/{ui-Cs1AjRNH.d.ts → ui-DJXC9cko.d.ts} +4 -2
- package/dist/vue.cjs +1 -3
- package/dist/vue.cjs.map +1 -1
- package/dist/vue.d.cts +42 -5
- package/dist/vue.d.ts +42 -5
- package/dist/vue.js +1 -3
- package/dist/vue.js.map +1 -1
- package/package.json +1 -1
package/dist/core.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/store.ts","../src/core/a11y-rules.ts","../src/core/promise.ts","../src/core/dialog-manager.ts","../src/core/dialog.ts","../src/core/toast-api.ts","../src/core/index.ts"],"names":["defaultClock","fn","ms","t","counter","nextId","p","normalizeId","id","resetIdCounter","DEFAULT_CONFIG","resolvePrecedence","callVal","themeVal","globalVal","defaultVal","createConfigStore","initial","current","stripUndefined","listeners","emit","listener","patch","value","out","k","createTimer","duration","onDone","clock","totalDuration","remainingMs","startedAt","cancelTimeout","cancelInterval","started","done","pauseReasons","tickListeners","isLive","notifyTick","rem","getRemaining","frac","err","stopTimers","arm","reason","count","live","callback","tDef","color","ariaLive","BUILT_IN_TYPES","createTypeRegistry","custom","name","definition","USER_REASONS","safeCall","args","MANUAL_PAUSE","BUILTIN_DEFAULTS","createToastManager","options","config","now","types","entries","order","snapshot","history","regionOf","record","build","opts","previous","cfg","type","merged","rawDuration","urgent","stamp","remainingOf","entry","dedupeKeyOf","d","promote","counts","key","used","isImportant","finalize","flushOpened","dismissEntry","exit","makeEntry","input","restartTimer","store","existing","other","resetTimer","rest","next","changed","rebuilt","positionChanged","list","e","nextPausedBy","createToastStore","createStore","initialValue","state","batchScheduled","notify","scheduleNotify","immediate","updater","decideAriaLive","important","decideToastRole","decideDialogRole","o","decideFocusTarget","decideDialogLabels","toPatch","message","errorText","error","runPromiseToast","messages","promise","requestedId","base","loadingPatch","settle","raw","payload","desc","errorMessage","createDialogManager","activeItem","queue","observable","notifyChange","prev","processQueue","a","b","itemId","priority","resolveResult","resultPromise","resolve","stateListeners","emitState","timer","readValue","settled","patchState","cleanup","complete","res","handle","override","loading","msg","controller","reader","action","isConfirm","val","check","hook","outcome","item","q","itemsToResolve","messageOf","createDialogController","open","revision","result","finish","partial","final","startTimer","kind","runSteps","steps","backLabel","values","index","last","restored","createToastApi","make","api","renderer","createUI","toastStore","toast","dialogManager","activeRenderer","replayQueue","toDialogOptions","runDlg","DISMISSED","ui","stepList","s","r","i","loadingOpts","closed","defaultUI","def","registerRenderer","createToastEngine"],"mappings":"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","file":"core.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 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 current = Object.freeze({ ...current, ...stripUndefined(patch) });\n emit();\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 totalDuration = duration;\n let remainingMs = duration;\n let startedAt = 0;\n let cancelTimeout: (() => void) | undefined;\n let cancelInterval: (() => void) | undefined;\n let started = false;\n let done = false;\n\n // Reference-counted pause reasons: reason -> count\n const pauseReasons = new Map<string, number>();\n const tickListeners = new Set<(remaining: number, fraction: number) => void>();\n\n const isLive = (): boolean => Number.isFinite(remainingMs) && remainingMs > 0;\n\n const notifyTick = (): void => {\n if (tickListeners.size === 0) return;\n const rem = getRemaining();\n const frac = totalDuration > 0 ? Math.max(0, Math.min(1, rem / totalDuration)) : 0;\n for (const listener of tickListeners) {\n try {\n listener(rem, frac);\n } catch (err) {\n console.error(err);\n }\n }\n };\n\n const getRemaining = (): number => {\n if (done) return 0;\n if (started && pauseReasons.size === 0) {\n return Math.max(0, remainingMs - (clock.now() - startedAt));\n }\n return remainingMs;\n };\n\n const stopTimers = (): void => {\n cancelTimeout?.();\n cancelTimeout = undefined;\n cancelInterval?.();\n cancelInterval = undefined;\n };\n\n const arm = (): void => {\n stopTimers();\n if (!isLive() || pauseReasons.size > 0 || done) return;\n\n startedAt = clock.now();\n cancelTimeout = clock.setTimeout(() => {\n stopTimers();\n remainingMs = 0;\n done = true;\n started = false;\n notifyTick();\n onDone();\n }, remainingMs);\n\n if (tickListeners.size > 0) {\n cancelInterval = clock.setInterval(() => {\n notifyTick();\n }, 50);\n }\n };\n\n const pauseTimer = (reason = 'manual'): void => {\n if (done) return;\n pauseReasons.set(reason, (pauseReasons.get(reason) ?? 0) + 1);\n\n if (started && pauseReasons.size === 1) {\n remainingMs = Math.max(0, remainingMs - (clock.now() - startedAt));\n stopTimers();\n notifyTick();\n }\n };\n\n const resumeTimer = (reason = 'manual'): void => {\n if (done) return;\n const count = pauseReasons.get(reason);\n if (!count) return;\n\n if (count <= 1) pauseReasons.delete(reason);\n else pauseReasons.set(reason, count - 1);\n\n if (started && pauseReasons.size === 0 && isLive()) {\n arm();\n notifyTick();\n }\n };\n\n return {\n start() {\n if (done || !isLive()) return;\n started = true;\n pauseReasons.clear();\n arm();\n notifyTick();\n },\n pause: pauseTimer,\n resume: resumeTimer,\n clearReasons() {\n pauseReasons.clear();\n if (started && isLive()) arm();\n },\n add(ms: number) {\n if (done || !Number.isFinite(remainingMs)) return;\n const live = started && pauseReasons.size === 0;\n remainingMs = Math.max(\n 1,\n (live ? remainingMs - (clock.now() - startedAt) : remainingMs) + ms,\n );\n totalDuration = Math.max(totalDuration, remainingMs);\n if (live) arm();\n notifyTick();\n },\n reset(ms?: number) {\n done = false;\n remainingMs = totalDuration = ms !== undefined ? ms : totalDuration;\n if (started && pauseReasons.size === 0) {\n if (isLive()) arm();\n else stopTimers();\n }\n notifyTick();\n },\n cancel() {\n stopTimers();\n started = false;\n done = true;\n remainingMs = 0;\n },\n remaining: getRemaining,\n elapsed() {\n return Math.max(0, totalDuration - getRemaining());\n },\n isRunning: () => started && !done && !pauseReasons.size && isLive(),\n isPaused: () => pauseReasons.size > 0,\n pausedReasons: () => [...pauseReasons.keys()],\n onTick(callback) {\n tickListeners.add(callback);\n if (started && pauseReasons.size === 0 && !cancelInterval) {\n cancelInterval = clock.setInterval(notifyTick, 50);\n }\n return () => {\n tickListeners.delete(callback);\n if (tickListeners.size === 0 && cancelInterval) {\n cancelInterval();\n cancelInterval = 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\n/** Reasons that originate from a person and are blocked on non-dismissible toasts. */\nconst USER_REASONS = new Set<CloseReason>(['user', 'swipe', 'click']);\n\nconst safeCall = <A extends unknown[]>(\n fn: ((...args: A) => void) | undefined,\n ...args: A\n): void => {\n try {\n fn?.(...args);\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 openedFired: boolean;\n closedFired: boolean;\n dismissFired: boolean;\n autoCloseFired: boolean;\n}\n\nconst BUILTIN_DEFAULTS: Readonly<Record<string, ToastOptions>> = {\n loading: { duration: 0 },\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 regionOf = (record: ToastRecord): string => `${record.container ?? ''}|${record.position}`;\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 ...BUILTIN_DEFAULTS[type],\n ...types.get(type)?.defaults,\n ...opts,\n };\n const rawDuration = merged.duration ?? 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 ? 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 = (opts: ToastOptions): string | undefined => {\n if (opts.dedupe === false) return;\n if (typeof opts.dedupe === 'string') return opts.dedupe;\n const t = typeof opts.title === 'string' ? opts.title : '';\n const d = typeof opts.description === 'string' ? opts.description : '';\n return t || d ? `${opts.type ?? 'default'}|${t}|${d}` : undefined;\n };\n\n const promote = (): void => {\n const cfg = 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 = regionOf(entry.record);\n const used = counts.get(key) ?? 0;\n const isImportant = !!entry.record.important;\n if (used < cfg.maxVisible || isImportant) {\n if (!entry.record.visible) {\n entry.record = { ...entry.record, visible: true };\n if (!entry.record.pausedBy.length && entry.record.duration > 0) {\n entry.timer.start();\n }\n }\n if (!isImportant) 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.closedFired) {\n entry.closedFired = true;\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 (entry.record.dismissible === false && USER_REASONS.has(reason)) 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.dismissFired && reason !== 'auto') {\n entry.dismissFired = true;\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 openedFired: false,\n closedFired: false,\n dismissFired: false,\n autoCloseFired: false,\n };\n entry.timer = createTimer(\n record.duration,\n () => {\n if (!entry.autoCloseFired) {\n entry.autoCloseFired = true;\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.openedFired && !entry.record.dismissed) {\n entry.openedFired = true;\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 const list =\n id === undefined\n ? [...entries.values()]\n : [entries.get(id)].filter((e): e is Entry => Boolean(e));\n for (const entry of list) {\n if (entry.record.pausedBy.includes(reason)) continue;\n entry.timer.pause(reason);\n entry.record = {\n ...entry.record,\n pausedBy: [...entry.record.pausedBy, reason],\n remaining: remainingOf(entry),\n };\n }\n emit();\n },\n\n resume(id, reason) {\n const list =\n id === undefined\n ? [...entries.values()]\n : [entries.get(id)].filter((e): e is Entry => Boolean(e));\n for (const entry of list) {\n if (!entry.record.pausedBy.includes(reason)) continue;\n entry.timer.resume(reason);\n const nextPausedBy = entry.record.pausedBy.filter((value) => value !== reason);\n entry.record = {\n ...entry.record,\n pausedBy: nextPausedBy,\n remaining: remainingOf(entry),\n };\n if (!nextPausedBy.length && entry.record.visible && entry.record.duration > 0) {\n entry.timer.start();\n }\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 { Store } from './types';\n\n/**\n * Creates a tiny observable store with batched microtask updates.\n * Compatible with React `useSyncExternalStore`, Svelte store contract,\n * Vue reactivity, and Angular signals/observables.\n *\n * @param initialValue Initial state value.\n */\nexport function createStore<T>(initialValue: T): Store<T> {\n let state = initialValue;\n const listeners = new Set<((state: T) => void) | (() => void)>();\n let batchScheduled = false;\n\n const notify = (): void => {\n batchScheduled = false;\n const current = state;\n listeners.forEach((fn) => {\n try {\n (fn as (val: T) => void)(current);\n } catch (err) {\n console.error(err);\n }\n });\n };\n\n const scheduleNotify = (immediate: boolean): void => {\n if (immediate) {\n notify();\n return;\n }\n if (batchScheduled) return;\n batchScheduled = true;\n if (typeof queueMicrotask === 'function') queueMicrotask(notify);\n else void Promise.resolve().then(notify);\n };\n\n return {\n getSnapshot: () => state,\n setState: (updater, immediate = false) => {\n const next = typeof updater === 'function' ? (updater as (prev: T) => T)(state) : updater;\n if (Object.is(next, state)) return;\n state = next;\n scheduleNotify(immediate);\n },\n subscribe: (listener) => {\n listeners.add(listener);\n // Svelte store contract: if callback accepts an argument, invoke it synchronously with the snapshot\n if (listener.length > 0) {\n try {\n (listener as (val: T) => void)(state);\n } catch (err) {\n console.error(err);\n }\n }\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\n// Re-exports for backward-compatibility with tests and adapters\nexport { createToastManager, createToastStore, MANUAL_PAUSE } from './toast-manager';\nexport type {\n AddToastInput,\n ToastManager,\n ToastManagerOptions,\n ToastStore,\n ToastStoreOptions,\n} from './toast-manager';\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\nfunction toPatch(message: string | ToastPatch): ToastPatch {\n return typeof message === 'string' ? { title: message } : message;\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\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 type { Clock } from './clock';\nimport { defaultClock } from './clock';\nimport { createStore } from './store';\nimport { createTimer } from './timer';\nimport type { PausableTimer } from './timer';\nimport type {\n DialogHandle,\n DialogOptions,\n DialogResult,\n DialogState,\n DismissReason,\n Listener,\n Store,\n Unsubscribe,\n ValidateResult,\n} from './types';\n\nexport interface DialogQueueItem {\n id: number;\n options: DialogOptions;\n priority: number;\n resolve: (result: DialogResult) => void;\n controller: HeadlessDialogController;\n}\n\nexport interface HeadlessDialogController {\n readonly handle: DialogHandle;\n getState(): Readonly<DialogState>;\n subscribe(listener: Listener): Unsubscribe;\n setValueReader(reader: () => unknown): void;\n opened(): void;\n submit(action: 'confirm' | 'deny'): Promise<void>;\n dismiss(reason: DismissReason): Promise<void>;\n}\n\nexport interface DialogManager {\n readonly clock: Clock;\n open<T = unknown>(options: DialogOptions): DialogHandle<T>;\n getActive(): HeadlessDialogController | undefined;\n getQueue(): readonly DialogOptions[];\n clear(): void;\n subscribe(listener: Listener): Unsubscribe;\n}\n\nfunction errorMessage(err: unknown): string {\n if (err instanceof Error) return err.message;\n return typeof err === 'string' ? err : String(err);\n}\n\nexport function createDialogManager(clock: Clock = defaultClock): DialogManager {\n let counter = 0;\n let activeItem: DialogQueueItem | undefined;\n const queue: DialogQueueItem[] = [];\n const observable: Store<number> = createStore(0);\n\n const notifyChange = (): void => {\n observable.setState((prev) => prev + 1, true);\n };\n\n const processQueue = (): void => {\n if (activeItem !== null && activeItem !== undefined) return;\n if (queue.length === 0) return;\n\n // Highest priority first, then FIFO by insertion id\n queue.sort((a, b) => {\n if (b.priority !== a.priority) return b.priority - a.priority;\n return a.id - b.id;\n });\n\n activeItem = queue.shift();\n if (activeItem) {\n notifyChange();\n activeItem.controller.opened();\n }\n };\n\n const openDialog = <T = unknown>(options: DialogOptions): DialogHandle<T> => {\n counter += 1;\n const itemId = counter;\n const priority = options.priority ?? 0;\n\n let resolveResult!: (result: DialogResult<T>) => void;\n const resultPromise = new Promise<DialogResult<T>>((resolve) => {\n resolveResult = resolve;\n });\n\n let state: DialogState = {\n options: { ...options },\n loading: null,\n error: undefined,\n open: true,\n revision: 0,\n };\n\n const stateListeners = new Set<Listener>();\n const emitState = (): void => {\n for (const listener of [...stateListeners]) {\n try {\n listener();\n } catch (err) {\n console.error(err);\n }\n }\n };\n\n let timer: PausableTimer | undefined;\n let readValue: () => unknown = () => state.options.inputValue;\n let settled = false;\n\n const patchState = (patch: Partial<DialogState>): void => {\n state = { ...state, ...patch, revision: state.revision + 1 };\n emitState();\n };\n\n const cleanup = (): void => {\n timer?.cancel();\n state = { ...state, open: false, revision: state.revision + 1 };\n emitState();\n if (activeItem?.id === itemId) {\n activeItem = undefined;\n notifyChange();\n processQueue();\n }\n };\n\n const complete = (res: DialogResult<T>): void => {\n if (settled) return;\n settled = true;\n try {\n state.options.willClose?.(handle as unknown as DialogHandle, res as DialogResult);\n } catch (err) {\n console.error(err);\n }\n cleanup();\n resolveResult(res);\n };\n\n const handle: DialogHandle<T> = {\n close(override) {\n complete({\n isConfirmed: override?.isConfirmed ?? false,\n isDenied: override?.isDenied ?? false,\n isDismissed: override?.isDismissed ?? true,\n value: override?.value,\n dismiss: override?.dismiss ?? 'close',\n });\n },\n\n update(patch) {\n if (!settled) patchState({ options: { ...state.options, ...patch } });\n },\n\n setLoading(loading) {\n patchState({ loading: loading === true ? 'confirm' : loading === false ? null : loading });\n },\n\n showError(msg) {\n patchState({ error: msg ?? undefined });\n },\n\n timer: {\n pause: () => timer?.pause('manual'),\n resume: () => timer?.resume('manual'),\n add: (ms) => timer?.add(ms),\n remaining: () => timer?.remaining() ?? 0,\n paused: () => timer?.isPaused() ?? false,\n },\n\n result: resultPromise,\n };\n\n const controller: HeadlessDialogController = {\n handle: handle as unknown as DialogHandle,\n getState: () => state,\n subscribe(listener) {\n stateListeners.add(listener);\n return () => {\n stateListeners.delete(listener);\n };\n },\n setValueReader(reader) {\n readValue = reader;\n },\n opened() {\n if (state.options.timer && state.options.timer > 0) {\n timer = createTimer(\n state.options.timer,\n () => {\n void controller.dismiss('timer');\n },\n clock,\n );\n timer.start();\n }\n try {\n state.options.didOpen?.(handle as unknown as DialogHandle);\n } catch (err) {\n console.error(err);\n }\n emitState();\n },\n async submit(action) {\n if (settled || state.loading !== null) return;\n const isConfirm = action === 'confirm';\n let val = readValue();\n\n if (isConfirm && state.options.validate) {\n try {\n const check: ValidateResult = await state.options.validate(\n val,\n handle as unknown as DialogHandle,\n );\n if (typeof check === 'string' && check.trim() !== '') {\n handle.showError(check);\n return;\n }\n } catch (err) {\n handle.showError(errorMessage(err));\n return;\n }\n }\n\n handle.showError(undefined);\n\n const hook = isConfirm ? state.options.preConfirm : state.options.preDeny;\n if (hook) {\n handle.setLoading(action);\n try {\n const outcome = await hook(val, handle as unknown as DialogHandle);\n if (outcome === false) {\n handle.setLoading(false);\n return;\n }\n if (outcome !== undefined) val = outcome;\n } catch (err) {\n handle.showError(errorMessage(err));\n handle.setLoading(false);\n return;\n }\n handle.setLoading(false);\n }\n\n complete({\n isConfirmed: isConfirm,\n isDenied: !isConfirm,\n isDismissed: false,\n value: val as T,\n dismiss: undefined,\n });\n },\n async dismiss(reason) {\n complete({\n isConfirmed: false,\n isDenied: false,\n isDismissed: true,\n value: undefined,\n dismiss: reason,\n });\n },\n };\n\n const item: DialogQueueItem = {\n id: itemId,\n options,\n priority,\n resolve: resolveResult as (result: DialogResult) => void,\n controller,\n };\n\n if (activeItem === undefined) {\n activeItem = item;\n controller.opened();\n } else {\n queue.push(item);\n }\n\n notifyChange();\n return handle;\n };\n\n return {\n clock,\n open: openDialog,\n getActive: () => activeItem?.controller,\n getQueue: () => queue.map((q) => q.options),\n clear() {\n const itemsToResolve = [...queue];\n queue.length = 0;\n for (const item of itemsToResolve) {\n item.resolve({\n isConfirmed: false,\n isDenied: false,\n isDismissed: true,\n value: undefined,\n dismiss: 'close',\n });\n }\n if (activeItem) {\n const current = activeItem;\n activeItem = undefined;\n current.controller.handle.close({ dismiss: 'close' });\n }\n notifyChange();\n },\n subscribe: observable.subscribe,\n };\n}\n\n/**\n * Executes a sequence of dialog steps until completion or dismissal.\n */\nexport async function runSteps(\n steps: readonly DialogOptions[],\n manager: DialogManager,\n): Promise<DialogResult<unknown[]>> {\n const values: unknown[] = [];\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n if (!step) continue;\n const res = await manager.open({\n ...step,\n reverseButtons: step.reverseButtons ?? i > 0,\n confirmButton: { label: i === steps.length - 1 ? 'Finish' : 'Next', ...step.confirmButton },\n cancelButton: { label: 'Cancel', ...step.cancelButton },\n }).result;\n if (!res.isConfirmed) return { ...res, isConfirmed: false, value: values };\n values.push(res.value);\n }\n return {\n isConfirmed: true,\n isDenied: false,\n isDismissed: false,\n value: values,\n dismiss: undefined,\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]) listener();\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 options.willClose?.(handle, final);\n open = false;\n timer?.cancel();\n emit();\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 options.didOpen?.(handle);\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 const api = make() as ToastApi;\n api.success = make('success');\n api.error = make('error');\n api.info = make('info');\n api.warning = make('warning');\n api.loading = make('loading');\n api.message = make('message');\n\n api.custom = (renderer, options) => store.add({ ...options, custom: renderer });\n api.update = store.update;\n api.dismiss = store.dismiss;\n api.dismissAll = store.dismissAll;\n api.getToasts = store.getToasts;\n api.getHistory = store.getHistory;\n (api as unknown as { types: TypeRegistry }).types = store.types;\n api.promise = (input, messages, options) => runPromiseToast(store, input, messages, options);\n\n return api;\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 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 activeRenderer: Renderer | undefined;\n const replayQueue: (() => void)[] = [];\n\n const toDialogOptions = (opts: DialogOptions | string): DialogOptions =>\n typeof opts === 'string' ? { title: opts } : { ...opts };\n\n const runDlg = (merged: DialogOptions): Promise<DialogResult> => {\n const handle = dialogManager.open(merged);\n if (activeRenderer?.openDialog) void activeRenderer.openDialog(merged, handle);\n else replayQueue.push(() => void activeRenderer?.openDialog?.(merged, handle));\n return handle.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\n confirm: (opts) =>\n runDlg({\n confirmButton: { show: true },\n cancelButton: { show: true },\n ...toDialogOptions(opts),\n }),\n\n alert: (opts) =>\n runDlg({\n confirmButton: { show: true },\n cancelButton: { show: false },\n denyButton: { show: false },\n ...toDialogOptions(opts),\n }),\n\n prompt: (opts) =>\n runDlg({\n input: 'text',\n confirmButton: { show: true },\n cancelButton: { show: true },\n ...toDialogOptions(opts),\n }),\n\n steps(stepList, backLabel = 'Back') {\n return runSteps(stepList, (s) => ui.confirm(s), backLabel);\n },\n\n sheet: (opts) =>\n activeRenderer?.openSheet\n ? activeRenderer.openSheet(opts)\n : new Promise((res) => {\n replayQueue.push(() =>\n activeRenderer?.openSheet\n ? void activeRenderer.openSheet(opts).then(res)\n : res(DISMISSED),\n );\n }),\n\n bottomSheet(opts) {\n if (activeRenderer?.openBottomSheet) return activeRenderer.openBottomSheet(opts);\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 replayQueue.push(() =>\n activeRenderer?.openBottomSheet\n ? void (live = activeRenderer.openBottomSheet(opts)).result.then(res)\n : res(DISMISSED),\n );\n }),\n };\n },\n\n loading(loadingOpts = {}) {\n const opts = typeof loadingOpts === 'string' ? { text: loadingOpts } : loadingOpts;\n if (activeRenderer?.openLoading) return activeRenderer.openLoading(opts);\n let live: LoadingHandle | undefined, done: () => void;\n const closed = new Promise<void>((res) => {\n done = res;\n });\n replayQueue.push(() =>\n activeRenderer?.openLoading\n ? void (live = activeRenderer.openLoading(opts)).closed.then(done)\n : done(),\n );\n return {\n update: (p) => live?.update(p),\n close: () => {\n live?.close();\n done();\n },\n closed,\n };\n },\n\n configure: (patch) => config.set(patch),\n getConfig: () => config.get(),\n\n clear() {\n toastStore.clear();\n dialogManager.clear();\n replayQueue.length = 0;\n },\n\n registerRenderer(renderer) {\n activeRenderer = renderer;\n while (replayQueue.length > 0) {\n const replay = replayQueue.shift();\n replay?.();\n }\n },\n\n getRenderer: () => activeRenderer,\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"]}
|
|
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/store.ts","../src/core/a11y-rules.ts","../src/core/promise.ts","../src/core/dialog-manager.ts","../src/core/dialog.ts","../src/core/toast-api.ts","../src/core/spring.ts","../src/core/index.ts"],"names":["counter","ui"],"mappings":"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","file":"core.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 container: undefined,\n sound: false,\n soundVolume: 0.5,\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 current = Object.freeze({ ...current, ...stripUndefined(patch) });\n emit();\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 totalDuration = duration;\n let remainingMs = duration;\n let startedAt = 0;\n let cancelTimeout: (() => void) | undefined;\n let cancelInterval: (() => void) | undefined;\n let started = false;\n let done = false;\n\n // Reference-counted pause reasons: reason -> count\n const pauseReasons = new Map<string, number>();\n const tickListeners = new Set<(remaining: number, fraction: number) => void>();\n\n const isLive = (): boolean => Number.isFinite(remainingMs) && remainingMs > 0;\n\n const notifyTick = (): void => {\n if (tickListeners.size === 0) return;\n const rem = getRemaining();\n const frac = totalDuration > 0 ? Math.max(0, Math.min(1, rem / totalDuration)) : 0;\n for (const listener of tickListeners) {\n try {\n listener(rem, frac);\n } catch (err) {\n console.error(err);\n }\n }\n };\n\n const getRemaining = (): number => {\n if (done) return 0;\n if (started && pauseReasons.size === 0) {\n return Math.max(0, remainingMs - (clock.now() - startedAt));\n }\n return remainingMs;\n };\n\n const stopTimers = (): void => {\n cancelTimeout?.();\n cancelTimeout = undefined;\n cancelInterval?.();\n cancelInterval = undefined;\n };\n\n const arm = (): void => {\n stopTimers();\n if (!isLive() || pauseReasons.size > 0 || done) return;\n\n startedAt = clock.now();\n cancelTimeout = clock.setTimeout(() => {\n stopTimers();\n remainingMs = 0;\n done = true;\n started = false;\n notifyTick();\n onDone();\n }, remainingMs);\n\n if (tickListeners.size > 0) {\n cancelInterval = clock.setInterval(() => {\n notifyTick();\n }, 50);\n }\n };\n\n const pauseTimer = (reason = 'manual'): void => {\n if (done) return;\n pauseReasons.set(reason, (pauseReasons.get(reason) ?? 0) + 1);\n\n if (started && pauseReasons.size === 1) {\n remainingMs = Math.max(0, remainingMs - (clock.now() - startedAt));\n stopTimers();\n notifyTick();\n }\n };\n\n const resumeTimer = (reason = 'manual'): void => {\n if (done) return;\n const count = pauseReasons.get(reason);\n if (!count) return;\n\n if (count <= 1) pauseReasons.delete(reason);\n else pauseReasons.set(reason, count - 1);\n\n if (started && pauseReasons.size === 0 && isLive()) {\n arm();\n notifyTick();\n }\n };\n\n return {\n start() {\n if (done || !isLive()) return;\n started = true;\n pauseReasons.clear();\n arm();\n notifyTick();\n },\n pause: pauseTimer,\n resume: resumeTimer,\n clearReasons() {\n pauseReasons.clear();\n if (started && isLive()) arm();\n },\n add(ms: number) {\n if (done || !Number.isFinite(remainingMs)) return;\n const live = started && pauseReasons.size === 0;\n remainingMs = Math.max(\n 1,\n (live ? remainingMs - (clock.now() - startedAt) : remainingMs) + ms,\n );\n totalDuration = Math.max(totalDuration, remainingMs);\n if (live) arm();\n notifyTick();\n },\n reset(ms?: number) {\n done = false;\n remainingMs = totalDuration = ms !== undefined ? ms : totalDuration;\n if (started && pauseReasons.size === 0) {\n if (isLive()) arm();\n else stopTimers();\n }\n notifyTick();\n },\n cancel() {\n stopTimers();\n started = false;\n done = true;\n remainingMs = 0;\n },\n remaining: getRemaining,\n elapsed() {\n return Math.max(0, totalDuration - getRemaining());\n },\n isRunning: () => started && !done && !pauseReasons.size && isLive(),\n isPaused: () => pauseReasons.size > 0,\n pausedReasons: () => [...pauseReasons.keys()],\n onTick(callback) {\n tickListeners.add(callback);\n if (started && pauseReasons.size === 0 && !cancelInterval) {\n cancelInterval = clock.setInterval(notifyTick, 50);\n }\n return () => {\n tickListeners.delete(callback);\n if (tickListeners.size === 0 && cancelInterval) {\n cancelInterval();\n cancelInterval = 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\n/** Reasons that originate from a person and are blocked on non-dismissible toasts. */\nconst isUserReason = (r: CloseReason): boolean => r === 'user' || r === 'swipe' || r === 'click';\n\nconst safeCall = <A extends unknown[]>(\n fn: ((...args: A) => void) | undefined,\n ...args: A\n): void => {\n try {\n fn?.(...args);\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 openedFired: boolean;\n closedFired: boolean;\n dismissFired: boolean;\n autoCloseFired: boolean;\n}\n\nconst BUILTIN_DEFAULTS: Readonly<Record<string, ToastOptions>> = {\n loading: { duration: 0 },\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 regionOf = (record: ToastRecord): string => `${record.container ?? ''}|${record.position}`;\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 ...BUILTIN_DEFAULTS[type],\n ...types.get(type)?.defaults,\n ...opts,\n };\n const rawDuration = merged.duration ?? 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 ? 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 = (opts: ToastOptions): string | undefined => {\n if (opts.dedupe === false) return;\n if (typeof opts.dedupe === 'string') return opts.dedupe;\n const t = typeof opts.title === 'string' ? opts.title : '';\n const d = typeof opts.description === 'string' ? opts.description : '';\n return t || d ? `${opts.type ?? 'default'}|${t}|${d}` : undefined;\n };\n\n const promote = (): void => {\n const cfg = 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 = regionOf(entry.record);\n const used = counts.get(key) ?? 0;\n const isImportant = !!entry.record.important;\n if (used < cfg.maxVisible || isImportant) {\n if (!entry.record.visible) {\n entry.record = { ...entry.record, visible: true };\n if (!entry.record.pausedBy.length && entry.record.duration > 0) {\n entry.timer.start();\n }\n }\n if (!isImportant) 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.closedFired) {\n entry.closedFired = true;\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 (entry.record.dismissible === false && isUserReason(reason)) 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.dismissFired && reason !== 'auto') {\n entry.dismissFired = true;\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 openedFired: false,\n closedFired: false,\n dismissFired: false,\n autoCloseFired: false,\n };\n entry.timer = createTimer(\n record.duration,\n () => {\n if (!entry.autoCloseFired) {\n entry.autoCloseFired = true;\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.openedFired && !entry.record.dismissed) {\n entry.openedFired = true;\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 const list =\n id === undefined\n ? [...entries.values()]\n : [entries.get(id)].filter((e): e is Entry => Boolean(e));\n for (const entry of list) {\n if (entry.record.pausedBy.includes(reason)) continue;\n entry.timer.pause(reason);\n entry.record = {\n ...entry.record,\n pausedBy: [...entry.record.pausedBy, reason],\n remaining: remainingOf(entry),\n };\n }\n emit();\n },\n\n resume(id, reason) {\n const list =\n id === undefined\n ? [...entries.values()]\n : [entries.get(id)].filter((e): e is Entry => Boolean(e));\n for (const entry of list) {\n if (!entry.record.pausedBy.includes(reason)) continue;\n entry.timer.resume(reason);\n const nextPausedBy = entry.record.pausedBy.filter((value) => value !== reason);\n entry.record = {\n ...entry.record,\n pausedBy: nextPausedBy,\n remaining: remainingOf(entry),\n };\n if (!nextPausedBy.length && entry.record.visible && entry.record.duration > 0) {\n entry.timer.start();\n }\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 { Store } from './types';\n\n/**\n * Creates a tiny observable store with batched microtask updates.\n * Compatible with React `useSyncExternalStore`, Svelte store contract,\n * Vue reactivity, and Angular signals/observables.\n *\n * @param initialValue Initial state value.\n */\nexport function createStore<T>(initialValue: T): Store<T> {\n let state = initialValue;\n const listeners = new Set<((state: T) => void) | (() => void)>();\n let batchScheduled = false;\n\n const notify = (): void => {\n batchScheduled = false;\n const current = state;\n listeners.forEach((fn) => {\n try {\n (fn as (val: T) => void)(current);\n } catch (err) {\n console.error(err);\n }\n });\n };\n\n const scheduleNotify = (immediate: boolean): void => {\n if (immediate) {\n notify();\n return;\n }\n if (batchScheduled) return;\n batchScheduled = true;\n if (typeof queueMicrotask === 'function') queueMicrotask(notify);\n else void Promise.resolve().then(notify);\n };\n\n return {\n getSnapshot: () => state,\n setState: (updater, immediate = false) => {\n const next = typeof updater === 'function' ? (updater as (prev: T) => T)(state) : updater;\n if (Object.is(next, state)) return;\n state = next;\n scheduleNotify(immediate);\n },\n subscribe: (listener) => {\n listeners.add(listener);\n // Svelte store contract: if callback accepts an argument, invoke it synchronously with the snapshot\n if (listener.length > 0) {\n try {\n (listener as (val: T) => void)(state);\n } catch (err) {\n console.error(err);\n }\n }\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\n// Re-exports for backward-compatibility with tests and adapters\nexport { createToastManager, createToastStore, MANUAL_PAUSE } from './toast-manager';\nexport type {\n AddToastInput,\n ToastManager,\n ToastManagerOptions,\n ToastStore,\n ToastStoreOptions,\n} from './toast-manager';\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\nfunction toPatch(message: string | ToastPatch): ToastPatch {\n return typeof message === 'string' ? { title: message } : message;\n}\n\nfunction errorText(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\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 type { Clock } from './clock';\nimport { defaultClock } from './clock';\nimport { createStore } from './store';\nimport { createTimer } from './timer';\nimport type { PausableTimer } from './timer';\nimport type {\n DialogHandle,\n DialogOptions,\n DialogResult,\n DialogState,\n DismissReason,\n Listener,\n Store,\n Unsubscribe,\n ValidateResult,\n} from './types';\n\nexport interface DialogQueueItem {\n id: number;\n options: DialogOptions;\n priority: number;\n resolve: (result: DialogResult) => void;\n controller: HeadlessDialogController;\n}\n\nexport interface HeadlessDialogController {\n readonly handle: DialogHandle;\n getState(): Readonly<DialogState>;\n subscribe(listener: Listener): Unsubscribe;\n setValueReader(reader: () => unknown): void;\n opened(): void;\n submit(action: 'confirm' | 'deny'): Promise<void>;\n dismiss(reason: DismissReason): Promise<void>;\n}\n\nexport interface DialogManager {\n readonly clock: Clock;\n open<T = unknown>(options: DialogOptions): DialogHandle<T>;\n getActive(): HeadlessDialogController | undefined;\n getQueue(): readonly DialogOptions[];\n clear(): void;\n subscribe(listener: Listener): Unsubscribe;\n}\n\nfunction errorMessage(err: unknown): string {\n if (err instanceof Error) return err.message;\n return typeof err === 'string' ? err : String(err);\n}\n\nexport function createDialogManager(clock: Clock = defaultClock): DialogManager {\n let counter = 0;\n let activeItem: DialogQueueItem | undefined;\n const queue: DialogQueueItem[] = [];\n const observable: Store<number> = createStore(0);\n\n const notifyChange = (): void => {\n observable.setState((prev) => prev + 1, true);\n };\n\n const processQueue = (): void => {\n if (activeItem !== null && activeItem !== undefined) return;\n if (queue.length === 0) return;\n\n // Highest priority first, then FIFO by insertion id\n queue.sort((a, b) => {\n if (b.priority !== a.priority) return b.priority - a.priority;\n return a.id - b.id;\n });\n\n activeItem = queue.shift();\n if (activeItem) {\n notifyChange();\n activeItem.controller.opened();\n }\n };\n\n const openDialog = <T = unknown>(options: DialogOptions): DialogHandle<T> => {\n counter += 1;\n const itemId = counter;\n const priority = options.priority ?? 0;\n\n let resolveResult!: (result: DialogResult<T>) => void;\n const resultPromise = new Promise<DialogResult<T>>((resolve) => {\n resolveResult = resolve;\n });\n\n let state: DialogState = {\n options: { ...options },\n loading: null,\n error: undefined,\n open: true,\n revision: 0,\n };\n\n const stateListeners = new Set<Listener>();\n const emitState = (): void => {\n for (const listener of [...stateListeners]) {\n try {\n listener();\n } catch (err) {\n console.error(err);\n }\n }\n };\n\n let timer: PausableTimer | undefined;\n let readValue: () => unknown = () => state.options.inputValue;\n let settled = false;\n\n const patchState = (patch: Partial<DialogState>): void => {\n state = { ...state, ...patch, revision: state.revision + 1 };\n emitState();\n };\n\n const cleanup = (): void => {\n timer?.cancel();\n state = { ...state, open: false, revision: state.revision + 1 };\n emitState();\n if (activeItem?.id === itemId) {\n activeItem = undefined;\n notifyChange();\n processQueue();\n }\n };\n\n const complete = (res: DialogResult<T>): void => {\n if (settled) return;\n settled = true;\n try {\n state.options.willClose?.(handle as unknown as DialogHandle, res as DialogResult);\n } catch (err) {\n console.error(err);\n }\n cleanup();\n resolveResult(res);\n };\n\n const handle: DialogHandle<T> = {\n close(override) {\n complete({\n isConfirmed: override?.isConfirmed ?? false,\n isDenied: override?.isDenied ?? false,\n isDismissed: override?.isDismissed ?? true,\n value: override?.value,\n dismiss: override?.dismiss ?? 'close',\n });\n },\n\n update(patch) {\n if (!settled) patchState({ options: { ...state.options, ...patch } });\n },\n\n setLoading(loading) {\n patchState({ loading: loading === true ? 'confirm' : loading === false ? null : loading });\n },\n\n showError(msg) {\n patchState({ error: msg ?? undefined });\n },\n\n timer: {\n pause: () => timer?.pause('manual'),\n resume: () => timer?.resume('manual'),\n add: (ms) => timer?.add(ms),\n remaining: () => timer?.remaining() ?? 0,\n paused: () => timer?.isPaused() ?? false,\n },\n\n result: resultPromise,\n };\n\n const controller: HeadlessDialogController = {\n handle: handle as unknown as DialogHandle,\n getState: () => state,\n subscribe(listener) {\n stateListeners.add(listener);\n return () => {\n stateListeners.delete(listener);\n };\n },\n setValueReader(reader) {\n readValue = reader;\n },\n opened() {\n if (state.options.timer && state.options.timer > 0) {\n timer = createTimer(\n state.options.timer,\n () => {\n void controller.dismiss('timer');\n },\n clock,\n );\n timer.start();\n }\n try {\n state.options.didOpen?.(handle as unknown as DialogHandle);\n } catch (err) {\n console.error(err);\n }\n emitState();\n },\n async submit(action) {\n if (settled || state.loading !== null) return;\n const isConfirm = action === 'confirm';\n let val = readValue();\n\n if (isConfirm && state.options.validate) {\n try {\n const check: ValidateResult = await state.options.validate(\n val,\n handle as unknown as DialogHandle,\n );\n if (typeof check === 'string' && check.trim() !== '') {\n handle.showError(check);\n return;\n }\n } catch (err) {\n handle.showError(errorMessage(err));\n return;\n }\n }\n\n handle.showError(undefined);\n\n const hook = isConfirm ? state.options.preConfirm : state.options.preDeny;\n if (hook) {\n handle.setLoading(action);\n try {\n const outcome = await hook(val, handle as unknown as DialogHandle);\n if (outcome === false) {\n handle.setLoading(false);\n return;\n }\n if (outcome !== undefined) val = outcome;\n } catch (err) {\n handle.showError(errorMessage(err));\n handle.setLoading(false);\n return;\n }\n handle.setLoading(false);\n }\n\n complete({\n isConfirmed: isConfirm,\n isDenied: !isConfirm,\n isDismissed: false,\n value: val as T,\n dismiss: undefined,\n });\n },\n async dismiss(reason) {\n complete({\n isConfirmed: false,\n isDenied: false,\n isDismissed: true,\n value: undefined,\n dismiss: reason,\n });\n },\n };\n\n const item: DialogQueueItem = {\n id: itemId,\n options,\n priority,\n resolve: resolveResult as (result: DialogResult) => void,\n controller,\n };\n\n if (activeItem === undefined) {\n activeItem = item;\n controller.opened();\n } else {\n queue.push(item);\n }\n\n notifyChange();\n return handle;\n };\n\n return {\n clock,\n open: openDialog,\n getActive: () => activeItem?.controller,\n getQueue: () => queue.map((q) => q.options),\n clear() {\n const itemsToResolve = [...queue];\n queue.length = 0;\n for (const item of itemsToResolve) {\n item.resolve({\n isConfirmed: false,\n isDenied: false,\n isDismissed: true,\n value: undefined,\n dismiss: 'close',\n });\n }\n if (activeItem) {\n const current = activeItem;\n activeItem = undefined;\n current.controller.handle.close({ dismiss: 'close' });\n }\n notifyChange();\n },\n subscribe: observable.subscribe,\n };\n}\n\n/**\n * Executes a sequence of dialog steps until completion or dismissal.\n */\nexport async function runSteps(\n steps: readonly DialogOptions[],\n manager: DialogManager,\n): Promise<DialogResult<unknown[]>> {\n const values: unknown[] = [];\n for (let i = 0; i < steps.length; i++) {\n const step = steps[i];\n if (!step) continue;\n const res = await manager.open({\n ...step,\n reverseButtons: step.reverseButtons ?? i > 0,\n confirmButton: { label: i === steps.length - 1 ? 'Finish' : 'Next', ...step.confirmButton },\n cancelButton: { label: 'Cancel', ...step.cancelButton },\n }).result;\n if (!res.isConfirmed) return { ...res, isConfirmed: false, value: values };\n values.push(res.value);\n }\n return {\n isConfirmed: true,\n isDenied: false,\n isDismissed: false,\n value: values,\n dismiss: undefined,\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]) listener();\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 options.willClose?.(handle, final);\n open = false;\n timer?.cancel();\n emit();\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 options.didOpen?.(handle);\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 const api = make() as ToastApi;\n api.success = make('success');\n api.error = make('error');\n api.info = make('info');\n api.warning = make('warning');\n api.loading = make('loading');\n api.message = make('message');\n\n api.custom = (renderer, options) => store.add({ ...options, custom: renderer });\n api.update = store.update;\n api.dismiss = store.dismiss;\n api.dismissAll = store.dismissAll;\n api.getToasts = store.getToasts;\n api.getHistory = store.getHistory;\n (api as unknown as { types: TypeRegistry }).types = store.types;\n api.promise = (input, messages, options) => runPromiseToast(store, input, messages, options);\n\n return api;\n}\n","export interface SpringConfig {\n stiffness?: number;\n damping?: number;\n mass?: number;\n}\n\n/** Closed-form damped harmonic oscillator, 0 to 1, zero initial velocity. */\nfunction springPosition(t: number, k: number, c: number, m: number): number {\n const w0 = Math.sqrt(k / m);\n const z = c / (2 * Math.sqrt(k * m));\n if (z < 1) {\n const wd = w0 * Math.sqrt(1 - z * z);\n return 1 - Math.exp(-z * w0 * t) * (Math.cos(wd * t) + ((z * w0) / wd) * Math.sin(wd * t));\n }\n if (z === 1) return 1 - Math.exp(-w0 * t) * (1 + w0 * t);\n const s = w0 * Math.sqrt(z * z - 1);\n const r1 = -z * w0 + s;\n const r2 = -z * w0 - s;\n return 1 - (r2 * Math.exp(r1 * t) - r1 * Math.exp(r2 * t)) / (r2 - r1);\n}\n\n/**\n * Bakes a physics-accurate spring curve into a CSS linear() easing function.\n * Enables 100% native GPU-accelerated spring animations without per-frame JS.\n */\nexport function springEasing(config: SpringConfig = {}): { easing: string; duration: number } {\n const { stiffness = 170, damping = 18, mass = 1 } = config;\n const f = (t: number) => springPosition(t, stiffness, damping, mass);\n const dt = 1 / 120;\n const maxT = 5;\n let settle = 0;\n for (let t = 0; t <= maxT; t += dt) {\n if (Math.abs(1 - f(t)) > 0.001) settle = t;\n }\n settle = Math.max(settle + dt, 0.05);\n const steps = Math.max(2, Math.ceil(settle * 60));\n const pts: string[] = [];\n for (let i = 0; i <= steps; i++) pts.push(String(+f((i / steps) * settle).toFixed(4)));\n pts[steps] = '1';\n return { easing: `linear(${pts.join(',')})`, duration: Math.round(settle * 1000) };\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 } 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 activeRenderer: Renderer | undefined;\n const replayQueue: (() => void)[] = [];\n\n const toDialogOptions = (opts: DialogOptions | string): DialogOptions =>\n typeof opts === 'string' ? { title: opts } : { ...opts };\n\n const runDlg = (merged: DialogOptions): Promise<DialogResult> => {\n const handle = dialogManager.open(merged);\n if (activeRenderer?.openDialog) void activeRenderer.openDialog(merged, handle);\n else replayQueue.push(() => void activeRenderer?.openDialog?.(merged, handle));\n return handle.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\n confirm: (opts) =>\n runDlg({\n confirmButton: { show: true },\n cancelButton: { show: true },\n ...toDialogOptions(opts),\n }),\n\n alert: (opts) =>\n runDlg({\n confirmButton: { show: true },\n cancelButton: { show: false },\n denyButton: { show: false },\n ...toDialogOptions(opts),\n }),\n\n prompt: (opts) =>\n runDlg({\n input: 'text',\n confirmButton: { show: true },\n cancelButton: { show: true },\n ...toDialogOptions(opts),\n }),\n\n steps(stepList, backLabel = 'Back') {\n return runSteps(stepList, (s) => ui.confirm(s), backLabel);\n },\n\n sheet: (opts) =>\n activeRenderer?.openSheet\n ? activeRenderer.openSheet(opts)\n : new Promise((res) => {\n replayQueue.push(() =>\n activeRenderer?.openSheet\n ? void activeRenderer.openSheet(opts).then(res)\n : res(DISMISSED),\n );\n }),\n\n bottomSheet(opts) {\n if (activeRenderer?.openBottomSheet) return activeRenderer.openBottomSheet(opts);\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 replayQueue.push(() =>\n activeRenderer?.openBottomSheet\n ? void (live = activeRenderer.openBottomSheet(opts)).result.then(res)\n : res(DISMISSED),\n );\n }),\n };\n },\n\n loading(loadingOpts = {}) {\n const opts = typeof loadingOpts === 'string' ? { text: loadingOpts } : loadingOpts;\n if (activeRenderer?.openLoading) return activeRenderer.openLoading(opts);\n let live: LoadingHandle | undefined, done: () => void;\n const closed = new Promise<void>((res) => {\n done = res;\n });\n replayQueue.push(() =>\n activeRenderer?.openLoading\n ? void (live = activeRenderer.openLoading(opts)).closed.then(done)\n : done(),\n );\n return {\n update: (p) => live?.update(p),\n close: () => {\n live?.close();\n done();\n },\n closed,\n };\n },\n\n configure: (patch) => config.set(patch),\n getConfig: () => config.get(),\n\n clear() {\n toastStore.clear();\n dialogManager.clear();\n replayQueue.length = 0;\n },\n\n registerRenderer(renderer) {\n activeRenderer = renderer;\n while (replayQueue.length > 0) {\n const replay = replayQueue.shift();\n replay?.();\n }\n },\n\n getRenderer: () => activeRenderer,\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"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as DialogResult, o as DialogHandle, r as DialogOptions, L as Listener, aq as Unsubscribe, z as DismissReason } from './toast-api-Bwjc_Kxh.js';
|
|
2
2
|
|
|
3
3
|
/** Observable view of a running dialog. */
|
|
4
4
|
interface DialogState {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as DialogResult, o as DialogHandle, r as DialogOptions, L as Listener, aq as Unsubscribe, z as DismissReason } from './toast-api-Bwjc_Kxh.cjs';
|
|
2
2
|
|
|
3
3
|
/** Observable view of a running dialog. */
|
|
4
4
|
interface DialogState {
|