react-snackbar-glass 1.0.0 → 1.1.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/CHANGELOG.md +17 -0
- package/README.md +31 -1
- package/dist/index.cjs +65 -15
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +56 -1
- package/dist/index.d.ts +56 -1
- package/dist/index.js +63 -16
- package/dist/index.js.map +1 -1
- package/package.json +10 -2
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,23 @@ All notable changes to this project are documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.1.0] - 2026-10-28
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- Global `toast` API: callable (`toast('Saved')`), option objects
|
|
13
|
+
(`toast({ message, variant })`), every variant preset, plus `show`,
|
|
14
|
+
`update`, `dismiss`, `dismissAll`, `promise` and a `store` accessor.
|
|
15
|
+
- `getDefaultStore()` / `setDefaultStore()` to share or swap the store behind
|
|
16
|
+
the global API.
|
|
17
|
+
- `<SnackbarProvider>` now renders the shared default store when no `store`
|
|
18
|
+
prop is given, so `toast` works with zero wiring.
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- Copy and docs rebranded from "premium" to "glass".
|
|
23
|
+
- Added `repository`, `homepage` and `bugs` metadata.
|
|
24
|
+
|
|
8
25
|
## [1.0.0] - 2026-10-28
|
|
9
26
|
|
|
10
27
|
### Added
|
package/README.md
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
# react-snackbar-glass
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A glassmorphic snackbar system for React — queueing, promise-aware
|
|
4
4
|
states, swipe-to-dismiss and token-driven theming with **zero runtime
|
|
5
5
|
dependencies**.
|
|
6
6
|
|
|
7
7
|
- 🪟 **Glass or solid** surfaces, `xs` → `lg` sizes, six screen corners
|
|
8
|
+
- 🌍 **Global `toast`** — call it from anywhere, no hook required
|
|
8
9
|
- ⏳ **Promise aware** — one call moves a snackbar through loading → success → error
|
|
9
10
|
- 👆 **Swipe to dismiss**, hover/focus/document-hidden pause, countdown hairline
|
|
10
11
|
- ♿ **Accessible** — polite/assertive live regions, keyboard reachable actions, `prefers-reduced-motion`
|
|
@@ -63,6 +64,35 @@ function Dashboard() {
|
|
|
63
64
|
| `promise(promise, messages, options?)` | Drive a single snackbar through loading, success and error. |
|
|
64
65
|
| `store` | Escape hatch: the underlying store for subscriptions and advanced updates. |
|
|
65
66
|
|
|
67
|
+
### `toast` — global API
|
|
68
|
+
|
|
69
|
+
Import `toast` when you are outside a component: data layers, event
|
|
70
|
+
emitters, API clients, `setTimeout` callbacks. It targets the same store
|
|
71
|
+
that `<SnackbarProvider>` renders, so no hook is needed.
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { toast } from 'react-snackbar-glass';
|
|
75
|
+
|
|
76
|
+
toast('Draft saved');
|
|
77
|
+
toast.success('Deployment complete.', { title: 'v1.4.0 is live' });
|
|
78
|
+
toast.error('Payment declined', { action: { label: 'Retry', onClick: retry } });
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
It mirrors `useSnackbar()` one-to-one — `show`, `update`, `dismiss`,
|
|
82
|
+
`dismissAll`, every variant preset, `promise`, and `store`:
|
|
83
|
+
|
|
84
|
+
```ts
|
|
85
|
+
const id = toast.loading('Saving…');
|
|
86
|
+
await save();
|
|
87
|
+
toast.update(id, { variant: 'success', message: 'Saved', duration: 3000 });
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
`<SnackbarProvider>` renders the shared store by default. Mount
|
|
91
|
+
`<SnackbarHost store={getDefaultStore()} />` if you need the host without a
|
|
92
|
+
provider, and `setDefaultStore(store)` to point `toast` at a store of your
|
|
93
|
+
own (handy in tests or multi-app setups). On the server, pass an explicit
|
|
94
|
+
`store` so requests stay isolated.
|
|
95
|
+
|
|
66
96
|
### Promise-aware flows
|
|
67
97
|
|
|
68
98
|
```tsx
|
package/dist/index.cjs
CHANGED
|
@@ -375,6 +375,16 @@ function createSnackbarStore(initialConfig = {}) {
|
|
|
375
375
|
setPageHidden
|
|
376
376
|
};
|
|
377
377
|
}
|
|
378
|
+
|
|
379
|
+
// src/core/defaultStore.ts
|
|
380
|
+
var defaultStore = null;
|
|
381
|
+
function getDefaultStore() {
|
|
382
|
+
if (!defaultStore) defaultStore = createSnackbarStore();
|
|
383
|
+
return defaultStore;
|
|
384
|
+
}
|
|
385
|
+
function setDefaultStore(store) {
|
|
386
|
+
defaultStore = store;
|
|
387
|
+
}
|
|
378
388
|
var strokeProps = {
|
|
379
389
|
fill: "none",
|
|
380
390
|
stroke: "currentColor",
|
|
@@ -883,14 +893,11 @@ function SnackbarProvider({
|
|
|
883
893
|
...hostProps
|
|
884
894
|
}) {
|
|
885
895
|
const store = react.useMemo(
|
|
886
|
-
() =>
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
|
|
890
|
-
|
|
891
|
-
tone,
|
|
892
|
-
size
|
|
893
|
-
}),
|
|
896
|
+
() => (
|
|
897
|
+
// Falling back to the shared default store is what makes the
|
|
898
|
+
// module-level `toast` API render without extra wiring.
|
|
899
|
+
providedStore ?? getDefaultStore()
|
|
900
|
+
),
|
|
894
901
|
// The store is intentionally created once per provider instance.
|
|
895
902
|
// Subsequent config changes are pushed below.
|
|
896
903
|
[providedStore]
|
|
@@ -907,19 +914,19 @@ function SnackbarProvider({
|
|
|
907
914
|
});
|
|
908
915
|
}, [store, position, duration, dismissible, progress, tone, size, maxVisible]);
|
|
909
916
|
const api = react.useMemo(() => {
|
|
910
|
-
const
|
|
917
|
+
const preset2 = (variant) => (message, options = {}) => store.show({ ...options, message, variant });
|
|
911
918
|
return {
|
|
912
919
|
show: store.show,
|
|
913
920
|
update: store.update,
|
|
914
921
|
dismiss: store.dismiss,
|
|
915
922
|
dismissAll: store.dismissAll,
|
|
916
923
|
promise: store.promise,
|
|
917
|
-
success:
|
|
918
|
-
error:
|
|
919
|
-
warning:
|
|
920
|
-
info:
|
|
921
|
-
neutral:
|
|
922
|
-
custom:
|
|
924
|
+
success: preset2("success"),
|
|
925
|
+
error: preset2("error"),
|
|
926
|
+
warning: preset2("warning"),
|
|
927
|
+
info: preset2("info"),
|
|
928
|
+
neutral: preset2("neutral"),
|
|
929
|
+
custom: preset2("custom"),
|
|
923
930
|
loading: (message, options = {}) => store.show({
|
|
924
931
|
...options,
|
|
925
932
|
message,
|
|
@@ -957,10 +964,53 @@ function useSnackbar() {
|
|
|
957
964
|
function useSnackbarStore() {
|
|
958
965
|
return useSnackbarContext().store;
|
|
959
966
|
}
|
|
967
|
+
function isOptionsObject(value) {
|
|
968
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) && !react.isValidElement(value) && !("$$typeof" in value);
|
|
969
|
+
}
|
|
970
|
+
function preset(variant) {
|
|
971
|
+
return (message, options = {}) => getDefaultStore().show({ ...options, message, variant });
|
|
972
|
+
}
|
|
973
|
+
function createToast() {
|
|
974
|
+
const toast2 = ((content, options) => {
|
|
975
|
+
if (options === void 0 && isOptionsObject(content)) {
|
|
976
|
+
return getDefaultStore().show(content);
|
|
977
|
+
}
|
|
978
|
+
return getDefaultStore().show({
|
|
979
|
+
...options,
|
|
980
|
+
message: content
|
|
981
|
+
});
|
|
982
|
+
});
|
|
983
|
+
toast2.show = (options) => getDefaultStore().show(options);
|
|
984
|
+
toast2.update = (id, options) => getDefaultStore().update(id, options);
|
|
985
|
+
toast2.dismiss = (id, reason) => getDefaultStore().dismiss(id, reason);
|
|
986
|
+
toast2.dismissAll = (reason) => getDefaultStore().dismissAll(reason);
|
|
987
|
+
toast2.success = preset("success");
|
|
988
|
+
toast2.error = preset("error");
|
|
989
|
+
toast2.warning = preset("warning");
|
|
990
|
+
toast2.info = preset("info");
|
|
991
|
+
toast2.neutral = preset("neutral");
|
|
992
|
+
toast2.custom = preset("custom");
|
|
993
|
+
toast2.loading = (message, options = {}) => getDefaultStore().show({
|
|
994
|
+
...options,
|
|
995
|
+
message,
|
|
996
|
+
variant: "loading",
|
|
997
|
+
duration: options.duration !== void 0 ? options.duration : null
|
|
998
|
+
});
|
|
999
|
+
toast2.promise = (input, messages, options) => getDefaultStore().promise(input, messages, options);
|
|
1000
|
+
Object.defineProperty(toast2, "store", {
|
|
1001
|
+
get: getDefaultStore,
|
|
1002
|
+
enumerable: true
|
|
1003
|
+
});
|
|
1004
|
+
return toast2;
|
|
1005
|
+
}
|
|
1006
|
+
var toast = createToast();
|
|
960
1007
|
|
|
961
1008
|
exports.SnackbarHost = SnackbarHost;
|
|
962
1009
|
exports.SnackbarProvider = SnackbarProvider;
|
|
963
1010
|
exports.createSnackbarStore = createSnackbarStore;
|
|
1011
|
+
exports.getDefaultStore = getDefaultStore;
|
|
1012
|
+
exports.setDefaultStore = setDefaultStore;
|
|
1013
|
+
exports.toast = toast;
|
|
964
1014
|
exports.useSnackbar = useSnackbar;
|
|
965
1015
|
exports.useSnackbarStore = useSnackbarStore;
|
|
966
1016
|
//# sourceMappingURL=index.cjs.map
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/createSnackbarStore.ts","../src/components/icons.tsx","../src/components/SnackbarItem.tsx","../src/SnackbarHost.tsx","../src/SnackbarProvider.tsx"],"names":["isValidElement","record","jsxs","jsx","useState","useRef","useEffect","useSyncExternalStore","useLayoutEffect","createPortal","createContext","useMemo","useContext"],"mappings":"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","file":"index.cjs","sourcesContent":["import { isValidElement } from 'react';\nimport type {\n ResolvedSnackbarStoreConfig,\n SnackbarCloseReason,\n SnackbarOptions,\n SnackbarPromiseContent,\n SnackbarPromiseOptions,\n SnackbarRecord,\n SnackbarStore,\n SnackbarStoreConfig,\n} from '../types';\n\nconst EMPTY: readonly SnackbarRecord[] = Object.freeze([]);\n\nconst DEFAULT_CONFIG: ResolvedSnackbarStoreConfig = {\n position: 'bottom-right',\n duration: 5000,\n dismissible: true,\n progress: true,\n tone: 'glass',\n size: 'md',\n maxVisible: 3,\n};\n\ninterface TimerState {\n remaining: number;\n startedAt: number | null;\n handle: ReturnType<typeof setTimeout> | null;\n}\n\nlet sequence = 0;\n\nfunction createId(): string {\n sequence += 1;\n const random = Math.random().toString(36).slice(2, 7);\n return `prs-${Date.now().toString(36)}-${sequence.toString(36)}-${random}`;\n}\n\n/**\n * Turns user-facing duration input into milliseconds.\n * `null`, `0`, negative or non-finite values mean \"persistent\".\n */\nfunction normalizeDuration(\n value: number | null | undefined,\n fallback: number,\n): number {\n if (value === undefined) return fallback;\n if (value === null) return Infinity;\n if (!Number.isFinite(value) || value <= 0) return Infinity;\n return Math.max(1, Math.round(value));\n}\n\nfunction isPlainOptions(value: unknown): value is SnackbarOptions {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n !('$$typeof' in value)\n );\n}\n\nfunction contentToOptions(content: unknown): SnackbarOptions {\n if (isPlainOptions(content)) return content;\n return { message: content as SnackbarOptions['message'] };\n}\n\nfunction resolveContent<T>(\n content: SnackbarPromiseContent<T>,\n value: T,\n): SnackbarOptions {\n const resolved = typeof content === 'function' ? content(value) : content;\n return contentToOptions(resolved);\n}\n\nexport function createSnackbarStore(\n initialConfig: SnackbarStoreConfig = {},\n): SnackbarStore {\n let config: ResolvedSnackbarStoreConfig = {\n ...DEFAULT_CONFIG,\n ...(initialConfig.position !== undefined\n ? { position: initialConfig.position }\n : null),\n ...(initialConfig.duration !== undefined\n ? {\n duration: normalizeDuration(\n initialConfig.duration,\n DEFAULT_CONFIG.duration,\n ),\n }\n : null),\n ...(initialConfig.dismissible !== undefined\n ? { dismissible: initialConfig.dismissible }\n : null),\n ...(initialConfig.progress !== undefined\n ? { progress: initialConfig.progress }\n : null),\n ...(initialConfig.tone !== undefined ? { tone: initialConfig.tone } : null),\n ...(initialConfig.size !== undefined ? { size: initialConfig.size } : null),\n ...(initialConfig.maxVisible !== undefined\n ? { maxVisible: Math.max(1, Math.floor(initialConfig.maxVisible)) }\n : null),\n };\n\n let records: readonly SnackbarRecord[] = EMPTY;\n const listeners = new Set<() => void>();\n const timers = new Map<string, TimerState>();\n const shown = new Set<string>();\n const pauseReasons = new Map<string, Set<string>>();\n let pageHidden = false;\n\n const emit = () => {\n for (const listener of listeners) listener();\n };\n\n const find = (id: string) => records.find((record) => record.id === id);\n\n const replace = (id: string, record: SnackbarRecord) => {\n records = records.map((current) => (current.id === id ? record : current));\n };\n\n const cleanup = (id: string) => {\n timers.delete(id);\n shown.delete(id);\n pauseReasons.delete(id);\n };\n\n const stopTimer = (timer: TimerState) => {\n if (timer.handle !== null) {\n clearTimeout(timer.handle);\n timer.handle = null;\n }\n if (timer.startedAt !== null) {\n timer.remaining = Math.max(0, timer.remaining - (Date.now() - timer.startedAt));\n timer.startedAt = null;\n }\n };\n\n const schedule = (id: string, timer: TimerState) => {\n timer.startedAt = Date.now();\n timer.handle = setTimeout(() => {\n timer.handle = null;\n timer.startedAt = null;\n timer.remaining = 0;\n dismiss(id, 'timeout');\n }, Math.max(0, timer.remaining));\n };\n\n const startTimer = (id: string) => {\n const record = find(id);\n if (\n !record ||\n record.phase !== 'visible' ||\n !shown.has(id) ||\n record.duration === Infinity ||\n pageHidden ||\n (pauseReasons.get(id)?.size ?? 0) > 0\n ) {\n return;\n }\n\n const existing = timers.get(id);\n if (existing) {\n // Pause stops the handle but keeps the remaining time on the entry.\n if (existing.handle === null && existing.startedAt === null) {\n schedule(id, existing);\n }\n return;\n }\n\n const timer: TimerState = {\n remaining: record.duration,\n startedAt: null,\n handle: null,\n };\n timers.set(id, timer);\n schedule(id, timer);\n };\n\n const resetTimer = (id: string) => {\n const timer = timers.get(id);\n if (timer) {\n if (timer.handle !== null) clearTimeout(timer.handle);\n timers.delete(id);\n }\n startTimer(id);\n };\n\n const setPaused = (id: string, paused: boolean) => {\n const record = find(id);\n if (!record || record.paused === paused) return;\n replace(id, { ...record, paused });\n emit();\n };\n\n const pause = (id: string, reason = 'manual') => {\n const record = find(id);\n if (!record || record.phase !== 'visible') return;\n\n let reasons = pauseReasons.get(id);\n if (!reasons) {\n reasons = new Set();\n pauseReasons.set(id, reasons);\n }\n if (reasons.has(reason)) return;\n reasons.add(reason);\n\n const timer = timers.get(id);\n if (timer) stopTimer(timer);\n setPaused(id, true);\n };\n\n const resume = (id: string, reason = 'manual') => {\n const reasons = pauseReasons.get(id);\n if (!reasons || !reasons.has(reason)) return;\n reasons.delete(reason);\n if (reasons.size > 0) return;\n\n pauseReasons.delete(id);\n setPaused(id, false);\n startTimer(id);\n };\n\n const dismiss = (id: string, reason: SnackbarCloseReason = 'manual') => {\n const record = find(id);\n if (!record || record.phase === 'exiting') return;\n\n const timer = timers.get(id);\n if (timer) {\n stopTimer(timer);\n timers.delete(id);\n }\n\n // A queued snackbar has never been painted, so it can be removed at once.\n if (!shown.has(id)) {\n records = records.filter((current) => current.id !== id);\n cleanup(id);\n emit();\n record.onClose?.(reason, id);\n return;\n }\n\n pauseReasons.delete(id);\n replace(id, {\n ...record,\n phase: 'exiting',\n closeReason: reason,\n paused: false,\n });\n emit();\n record.onClose?.(reason, id);\n };\n\n const dismissAll = (reason: SnackbarCloseReason = 'dismissAll') => {\n const callbacks: Array<() => void> = [];\n const remaining: SnackbarRecord[] = [];\n\n for (const record of records) {\n if (record.phase === 'exiting') {\n remaining.push(record);\n continue;\n }\n\n const timer = timers.get(record.id);\n if (timer) {\n stopTimer(timer);\n timers.delete(record.id);\n }\n\n if (!shown.has(record.id)) {\n cleanup(record.id);\n callbacks.push(() => record.onClose?.(reason, record.id));\n continue;\n }\n\n pauseReasons.delete(record.id);\n remaining.push({\n ...record,\n phase: 'exiting',\n closeReason: reason,\n paused: false,\n });\n callbacks.push(() => record.onClose?.(reason, record.id));\n }\n\n records = remaining;\n emit();\n for (const callback of callbacks) callback();\n };\n\n const show = (options: SnackbarOptions): string => {\n const id = options.id ?? createId();\n const existing = find(id);\n\n if (existing) {\n update(id, options);\n const current = find(id);\n if (current && current.phase === 'exiting') {\n records = records.map((record) =>\n record.id === id\n ? { ...record, phase: 'visible', closeReason: undefined, paused: false }\n : record,\n );\n pauseReasons.delete(id);\n emit();\n startTimer(id);\n }\n return id;\n }\n\n const record: SnackbarRecord = {\n id,\n title: options.title,\n message: options.message,\n variant: options.variant ?? 'neutral',\n tone: options.tone ?? config.tone,\n size: options.size ?? config.size,\n duration: normalizeDuration(options.duration, config.duration),\n position: options.position ?? config.position,\n icon: options.icon,\n action: options.action ?? null,\n dismissible: options.dismissible ?? config.dismissible,\n progress: options.progress ?? config.progress,\n className: options.className,\n style: options.style,\n createdAt: Date.now(),\n phase: 'visible',\n paused: false,\n closeReason: undefined,\n onOpen: options.onOpen,\n onClose: options.onClose,\n };\n\n records = [...records, record];\n emit();\n return id;\n };\n\n const update = (id: string, options: Partial<SnackbarOptions>): void => {\n const record = find(id);\n if (!record) return;\n\n const next: SnackbarRecord = {\n ...record,\n ...(options.title !== undefined ? { title: options.title } : null),\n ...(options.message !== undefined ? { message: options.message } : null),\n ...(options.variant !== undefined ? { variant: options.variant } : null),\n ...(options.tone !== undefined ? { tone: options.tone } : null),\n ...(options.size !== undefined ? { size: options.size } : null),\n ...(options.position !== undefined ? { position: options.position } : null),\n ...(options.icon !== undefined ? { icon: options.icon } : null),\n ...(options.action !== undefined ? { action: options.action } : null),\n ...(options.dismissible !== undefined\n ? { dismissible: options.dismissible }\n : null),\n ...(options.progress !== undefined ? { progress: options.progress } : null),\n ...(options.className !== undefined ? { className: options.className } : null),\n ...(options.style !== undefined ? { style: options.style } : null),\n ...(options.onOpen !== undefined ? { onOpen: options.onOpen } : null),\n ...(options.onClose !== undefined ? { onClose: options.onClose } : null),\n ...(options.duration !== undefined\n ? { duration: normalizeDuration(options.duration, record.duration) }\n : null),\n };\n\n const durationChanged = next.duration !== record.duration;\n replace(id, next);\n emit();\n\n if (\n durationChanged &&\n next.phase === 'visible' &&\n shown.has(id)\n ) {\n if (next.duration === Infinity) {\n const timer = timers.get(id);\n if (timer) {\n stopTimer(timer);\n timers.delete(id);\n }\n } else {\n resetTimer(id);\n }\n }\n };\n\n const notifyShown = (id: string) => {\n if (shown.has(id)) return;\n const record = find(id);\n if (!record || record.phase !== 'visible') return;\n shown.add(id);\n record.onOpen?.(id);\n startTimer(id);\n };\n\n const notifyExited = (id: string) => {\n const record = find(id);\n if (!record || record.phase !== 'exiting') return;\n cleanup(id);\n records = records.filter((current) => current.id !== id);\n emit();\n };\n\n const setPageHidden = (hidden: boolean) => {\n if (pageHidden === hidden) return;\n pageHidden = hidden;\n for (const record of records) {\n if (hidden) {\n pause(record.id, 'page');\n } else {\n resume(record.id, 'page');\n startTimer(record.id);\n }\n }\n };\n\n const setConfig = (patch: SnackbarStoreConfig) => {\n config = {\n ...config,\n ...(patch.position !== undefined ? { position: patch.position } : null),\n ...(patch.duration !== undefined\n ? {\n duration: normalizeDuration(patch.duration, config.duration),\n }\n : null),\n ...(patch.dismissible !== undefined\n ? { dismissible: patch.dismissible }\n : null),\n ...(patch.progress !== undefined ? { progress: patch.progress } : null),\n ...(patch.tone !== undefined ? { tone: patch.tone } : null),\n ...(patch.size !== undefined ? { size: patch.size } : null),\n ...(patch.maxVisible !== undefined\n ? { maxVisible: Math.max(1, Math.floor(patch.maxVisible)) }\n : null),\n };\n };\n\n const promise = <T,>(\n input: Promise<T>,\n messages: SnackbarPromiseOptions<T>,\n options: SnackbarOptions = {},\n ): Promise<T> => {\n const loadingOptions = contentToOptions(messages.loading ?? 'Loading…');\n const id = options.id ?? createId();\n\n show({\n dismissible: false,\n ...options,\n ...loadingOptions,\n id,\n duration:\n loadingOptions.duration !== undefined ? loadingOptions.duration : null,\n variant: loadingOptions.variant ?? 'loading',\n progress: loadingOptions.progress ?? false,\n });\n\n const settle = <Value,>(\n content: SnackbarPromiseContent<Value>,\n value: Value,\n variant: 'success' | 'error',\n ) => {\n const next = resolveContent(content, value);\n update(id, {\n ...next,\n variant: next.variant ?? variant,\n duration:\n next.duration !== undefined\n ? next.duration\n : options.duration !== undefined\n ? options.duration\n : 4000,\n });\n };\n\n return input.then(\n (value) => {\n settle(messages.success, value, 'success');\n return value;\n },\n (error: unknown) => {\n settle(messages.error, error, 'error');\n throw error;\n },\n );\n };\n\n return {\n show,\n update,\n dismiss,\n dismissAll,\n promise,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n getSnapshot: () => records,\n getServerSnapshot: () => EMPTY,\n getConfig: () => ({ ...config }),\n setConfig,\n pause,\n resume,\n notifyShown,\n notifyExited,\n setPageHidden,\n };\n}\n\n","import type { ReactNode } from 'react';\nimport type { SnackbarVariant } from '../types';\n\nconst strokeProps = {\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.7,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n} as const;\n\nconst BellIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M5.2 8.1a4.8 4.8 0 0 1 9.6 0c0 3.1 1.3 4.3 1.3 4.3H3.9s1.3-1.2 1.3-4.3Z\"\n />\n <path {...strokeProps} d=\"M8.2 15.2a1.9 1.9 0 0 0 3.6 0\" />\n </svg>\n);\n\nconst CheckIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path {...strokeProps} d=\"M4.6 10.4 8 13.8l7.4-7.6\" strokeWidth={2} />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <circle {...strokeProps} cx=\"10\" cy=\"10\" r=\"6.6\" />\n <path {...strokeProps} d=\"M10 6.4v4.2\" />\n <circle cx=\"10\" cy=\"13.5\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst WarningIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M8.6 3.6a1.6 1.6 0 0 1 2.8 0l5.2 9.6a1.6 1.6 0 0 1-1.4 2.4H4.8a1.6 1.6 0 0 1-1.4-2.4l5.2-9.6Z\"\n />\n <path {...strokeProps} d=\"M10 7.6v3.2\" />\n <circle cx=\"10\" cy=\"13.3\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst InfoIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <circle {...strokeProps} cx=\"10\" cy=\"10\" r=\"6.6\" />\n <path {...strokeProps} d=\"M10 9.1v4.2\" />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst SpinnerIcon = (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"18\"\n height=\"18\"\n aria-hidden=\"true\"\n className=\"prs-icon-spin\"\n >\n <circle\n {...strokeProps}\n cx=\"10\"\n cy=\"10\"\n r=\"6.4\"\n opacity=\"0.22\"\n strokeWidth={2}\n />\n <path\n {...strokeProps}\n d=\"M10 3.6a6.4 6.4 0 0 1 6.4 6.4\"\n strokeWidth={2}\n />\n </svg>\n);\n\nconst SparkIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M10 2.9c.55 3.9 2.2 5.55 6.1 6.1-3.9.55-5.55 2.2-6.1 6.1-.55-3.9-2.2-5.55-6.1-6.1C7.8 8.45 9.45 6.8 10 2.9Z\"\n />\n <path {...strokeProps} d=\"M15.2 13.4c.2 1.4.8 2 2.2 2.2-1.4.2-2 .8-2.2 2.2-.2-1.4-.8-2-2.2-2.2 1.4-.2 2-.8 2.2-2.2Z\" />\n </svg>\n);\n\nexport const defaultIcons: Record<SnackbarVariant, ReactNode> = {\n neutral: BellIcon,\n success: CheckIcon,\n error: ErrorIcon,\n warning: WarningIcon,\n info: InfoIcon,\n loading: SpinnerIcon,\n custom: SparkIcon,\n};\n\nexport const DefaultCloseIcon = (\n <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n d=\"M4.2 4.2l7.6 7.6M11.8 4.2l-7.6 7.6\"\n />\n </svg>\n);\n","import {\n useEffect,\n useRef,\n useState,\n type AnimationEvent,\n type CSSProperties,\n type FocusEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport type {\n SnackbarRecord,\n SnackbarStore,\n SnackbarVariant,\n} from '../types';\nimport { DefaultCloseIcon, defaultIcons } from './icons';\n\ninterface SnackbarItemProps {\n record: SnackbarRecord;\n store: SnackbarStore;\n icons?: Partial<Record<SnackbarVariant, ReactNode>> | undefined;\n closeIcon?: ReactNode | undefined;\n closeLabel: string;\n pauseOnHover: boolean;\n pauseOnFocus: boolean;\n swipeToDismiss: boolean;\n swipeThreshold: number;\n}\n\ninterface Gesture {\n pointerId: number;\n startX: number;\n startY: number;\n axis: 'pending' | 'x';\n}\n\nexport function SnackbarItem({\n record,\n store,\n icons,\n closeIcon,\n closeLabel,\n pauseOnHover,\n pauseOnFocus,\n swipeToDismiss,\n swipeThreshold,\n}: SnackbarItemProps) {\n const [dragX, setDragX] = useState(0);\n const [dragging, setDragging] = useState(false);\n const [actionPending, setActionPending] = useState(false);\n const gesture = useRef<Gesture | null>(null);\n const dragXRef = useRef(0);\n const draggingRef = useRef(false);\n const suppressClick = useRef(false);\n const surfaceRef = useRef<HTMLDivElement>(null);\n\n const { id, phase, action, title, message, variant, duration } = record;\n\n useEffect(() => {\n store.notifyShown(id);\n }, [store, id]);\n\n useEffect(() => {\n if (phase !== 'exiting') return;\n const timeout = setTimeout(() => store.notifyExited(id), 400);\n return () => clearTimeout(timeout);\n }, [phase, store, id]);\n\n const resetDrag = () => {\n dragXRef.current = 0;\n draggingRef.current = false;\n setDragX(0);\n setDragging(false);\n };\n\n const pauseForDrag = () => {\n store.pause(id, 'drag');\n };\n\n const resumeForDrag = () => {\n store.resume(id, 'drag');\n };\n\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n suppressClick.current = false;\n if (!swipeToDismiss || phase === 'exiting') return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n const target = event.target as HTMLElement;\n if (\n target.closest(\n 'button, a, input, textarea, select, [role=\"button\"], [data-prs-no-swipe]',\n )\n ) {\n return;\n }\n\n gesture.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n axis: 'pending',\n };\n };\n\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n const current = gesture.current;\n if (!current) return;\n\n const dx = event.clientX - current.startX;\n const dy = event.clientY - current.startY;\n\n if (current.axis === 'pending') {\n if (Math.abs(dx) < 6 && Math.abs(dy) < 6) return;\n if (Math.abs(dy) > Math.abs(dx)) {\n // Vertical intent: let the page scroll.\n gesture.current = null;\n return;\n }\n current.axis = 'x';\n draggingRef.current = true;\n setDragging(true);\n pauseForDrag();\n surfaceRef.current?.setPointerCapture?.(event.pointerId);\n }\n\n if (event.cancelable) event.preventDefault();\n const absolute = Math.abs(dx);\n const damped = absolute > 96 ? 96 + (absolute - 96) * 0.32 : absolute;\n const next = Math.sign(dx) * damped;\n dragXRef.current = next;\n setDragX(next);\n if (absolute > 8) suppressClick.current = true;\n };\n\n const finishGesture = (event: ReactPointerEvent<HTMLDivElement>) => {\n const current = gesture.current;\n if (!current) return;\n\n if (draggingRef.current) {\n const shouldDismiss = Math.abs(dragXRef.current) >= swipeThreshold;\n resetDrag();\n resumeForDrag();\n if (surfaceRef.current?.hasPointerCapture?.(current.pointerId)) {\n surfaceRef.current.releasePointerCapture(current.pointerId);\n }\n if (shouldDismiss) {\n suppressClick.current = true;\n store.dismiss(id, 'swipe');\n }\n } else {\n resetDrag();\n }\n\n gesture.current = null;\n if (event.type === 'pointercancel') resumeForDrag();\n };\n\n const handleLostPointerCapture = () => {\n if (!draggingRef.current) return;\n resetDrag();\n resumeForDrag();\n gesture.current = null;\n };\n\n const handleAnimationEnd = (event: AnimationEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return;\n if (phase === 'exiting') store.notifyExited(id);\n };\n\n const handleAction = async () => {\n if (!action || actionPending) return;\n\n const result = action.onClick?.(id);\n if (result && typeof result.then === 'function') {\n setActionPending(true);\n try {\n await result;\n } finally {\n setActionPending(false);\n }\n }\n\n if (action.closeOnClick !== false) store.dismiss(id, 'action');\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n if (!pauseOnFocus) return;\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n store.resume(id, 'focus');\n }\n };\n\n const resolvedIcon =\n record.icon === undefined\n ? (icons?.[variant] ?? defaultIcons[variant])\n : record.icon;\n const showIcon = record.icon !== false;\n const showProgress =\n record.progress && Number.isFinite(duration) && duration > 0;\n\n const style = {\n ...record.style,\n '--prs-drag-x': `${dragX}px`,\n '--prs-drag-opacity': String(\n 1 - Math.min(Math.abs(dragX) / 300, 0.55),\n ),\n } as CSSProperties;\n\n return (\n <div\n className={`prs-item${record.className ? ` ${record.className}` : ''}`}\n data-variant={variant}\n data-tone={record.tone}\n data-size={record.size}\n data-state={phase}\n data-paused={record.paused ? 'true' : 'false'}\n data-dragging={dragging ? 'true' : 'false'}\n data-has-icon={showIcon ? 'true' : 'false'}\n data-dismissible={record.dismissible ? 'true' : 'false'}\n data-prs-id={record.id}\n data-position={record.position}\n style={style}\n role={variant === 'error' ? 'alert' : 'status'}\n aria-live={variant === 'error' ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n aria-busy={actionPending || variant === 'loading' ? true : undefined}\n onPointerEnter={() => {\n if (pauseOnHover) store.pause(id, 'hover');\n }}\n onPointerLeave={() => {\n if (pauseOnHover) store.resume(id, 'hover');\n }}\n onFocus={() => {\n if (pauseOnFocus) store.pause(id, 'focus');\n }}\n onBlur={handleBlur}\n onKeyDown={(event) => {\n if (event.key === 'Escape' && record.dismissible) {\n event.stopPropagation();\n store.dismiss(id, 'escape');\n }\n }}\n onAnimationEnd={handleAnimationEnd}\n >\n <div\n ref={surfaceRef}\n className=\"prs-item__surface\"\n onClickCapture={(event) => {\n if (!suppressClick.current) return;\n suppressClick.current = false;\n event.preventDefault();\n event.stopPropagation();\n }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={finishGesture}\n onPointerCancel={finishGesture}\n onLostPointerCapture={handleLostPointerCapture}\n >\n {showIcon ? (\n <span className=\"prs-item__icon\" aria-hidden=\"true\">\n {resolvedIcon}\n </span>\n ) : null}\n\n <div\n className=\"prs-item__content\"\n data-has-title={title !== undefined && title !== null ? 'true' : 'false'}\n >\n {title !== undefined && title !== null ? (\n <div className=\"prs-item__title\">{title}</div>\n ) : null}\n {message !== undefined && message !== null ? (\n <div className=\"prs-item__message\">{message}</div>\n ) : null}\n {action ? (\n <div className=\"prs-item__actions\">\n <button\n type=\"button\"\n className=\"prs-action\"\n onClick={handleAction}\n disabled={actionPending}\n aria-busy={actionPending || undefined}\n >\n {actionPending ? (\n <span className=\"prs-action__spinner\" aria-hidden=\"true\" />\n ) : null}\n <span>{action.label}</span>\n </button>\n </div>\n ) : null}\n </div>\n\n {record.dismissible ? (\n <button\n type=\"button\"\n className=\"prs-close\"\n aria-label={closeLabel}\n onClick={() => store.dismiss(id, 'manual')}\n >\n {closeIcon ?? DefaultCloseIcon}\n </button>\n ) : null}\n\n {showProgress ? (\n <div className=\"prs-progress\" aria-hidden=\"true\">\n <span\n key={duration}\n className=\"prs-progress__bar\"\n style={{ animationDuration: `${duration}ms` }}\n />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type {\n SnackbarHostProps,\n SnackbarPosition,\n SnackbarRecord,\n} from './types';\nimport { SnackbarItem } from './components/SnackbarItem';\n\nconst POSITIONS: readonly SnackbarPosition[] = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right',\n];\n\nexport function SnackbarHost({\n store,\n maxVisible = 3,\n offset = 20,\n gap = 12,\n width = 384,\n theme = 'auto',\n container,\n pauseOnHover = true,\n pauseOnFocus = true,\n pauseOnDocumentHidden = true,\n swipeToDismiss = true,\n swipeThreshold = 88,\n icons,\n closeIcon,\n closeLabel = 'Dismiss notification',\n regionLabel = 'Notifications',\n className,\n style,\n zIndex = 2147483000,\n dir,\n}: SnackbarHostProps) {\n const records = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot,\n );\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n const regionRefs = useRef(new Map<SnackbarPosition, HTMLElement>());\n const topsRef = useRef(new Map<string, number>());\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n const target =\n typeof container === 'function'\n ? container()\n : container ?? document.body;\n setPortalNode(target);\n return () => setPortalNode(null);\n }, [container]);\n\n useEffect(() => {\n if (!pauseOnDocumentHidden || typeof document === 'undefined') return;\n\n const sync = () => store.setPageHidden(document.visibilityState === 'hidden');\n sync();\n document.addEventListener('visibilitychange', sync);\n return () => {\n document.removeEventListener('visibilitychange', sync);\n store.setPageHidden(false);\n };\n }, [store, pauseOnDocumentHidden]);\n\n // FLIP: when the stack grows or collapses, existing cards glide into their\n // new slot instead of snapping. New cards are left to the CSS enter spring.\n useLayoutEffect(() => {\n if (!portalNode) {\n topsRef.current.clear();\n return;\n }\n if (typeof window === 'undefined') return;\n\n const reduced =\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const next = new Map<string, number>();\n\n for (const region of regionRefs.current.values()) {\n const regionTop = region.getBoundingClientRect().top;\n const nodes = region.querySelectorAll<HTMLElement>('[data-prs-id]');\n\n for (const node of nodes) {\n const id = node.dataset.prsId;\n if (!id) continue;\n\n const top = regionTop + node.offsetTop;\n next.set(id, top);\n\n const previous = topsRef.current.get(id);\n if (\n reduced ||\n previous === undefined ||\n node.dataset.state === 'exiting' ||\n typeof node.animate !== 'function'\n ) {\n continue;\n }\n\n const delta = previous - top;\n if (Math.abs(delta) < 0.5) continue;\n\n node.animate(\n [\n { transform: `translate3d(0, ${delta}px, 0)` },\n { transform: 'translate3d(0, 0, 0)' },\n ],\n {\n duration: 320,\n easing: 'cubic-bezier(0.22, 1, 0.36, 1)',\n },\n );\n }\n }\n\n topsRef.current = next;\n });\n\n if (!portalNode) return null;\n\n const byPosition = new Map<SnackbarPosition, SnackbarRecord[]>();\n for (const record of records) {\n const bucket = byPosition.get(record.position);\n if (bucket) bucket.push(record);\n else byPosition.set(record.position, [record]);\n }\n\n const limit = Math.max(1, Math.floor(maxVisible));\n\n const rootStyle = {\n '--prs-width': `${width}px`,\n '--prs-offset': `${offset}px`,\n '--prs-gap': `${gap}px`,\n '--prs-z-index': String(zIndex),\n ...style,\n } as CSSProperties;\n\n return createPortal(\n <div\n className={`prs-root${className ? ` ${className}` : ''}`}\n data-prs-theme={theme}\n dir={dir}\n style={rootStyle}\n >\n {POSITIONS.map((position) => {\n const items = byPosition.get(position);\n if (!items || items.length === 0) return null;\n const visible = items.slice(0, limit);\n\n return (\n <section\n key={position}\n ref={(node) => {\n if (node) regionRefs.current.set(position, node);\n else regionRefs.current.delete(position);\n }}\n className=\"prs-region\"\n data-position={position}\n aria-label={regionLabel}\n >\n {visible.map((record) => (\n <SnackbarItem\n key={record.id}\n record={record}\n store={store}\n icons={icons}\n closeIcon={closeIcon}\n closeLabel={closeLabel}\n pauseOnHover={pauseOnHover}\n pauseOnFocus={pauseOnFocus}\n swipeToDismiss={swipeToDismiss}\n swipeThreshold={swipeThreshold}\n />\n ))}\n </section>\n );\n })}\n </div>,\n portalNode,\n );\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n type ReactNode,\n} from 'react';\nimport { createSnackbarStore } from './core/createSnackbarStore';\nimport { SnackbarHost } from './SnackbarHost';\nimport type {\n SnackbarApi,\n SnackbarOptions,\n SnackbarProviderProps,\n SnackbarStore,\n SnackbarVariant,\n} from './types';\n\ninterface SnackbarContextValue {\n store: SnackbarStore;\n api: SnackbarApi;\n}\n\nconst SnackbarContext = createContext<SnackbarContextValue | null>(null);\n\ntype PresetOptions = Omit<SnackbarOptions, 'message' | 'variant'>;\n\nexport function SnackbarProvider({\n children,\n store: providedStore,\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n maxVisible,\n ...hostProps\n}: SnackbarProviderProps) {\n const store = useMemo(\n () =>\n providedStore ??\n createSnackbarStore({\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n }),\n // The store is intentionally created once per provider instance.\n // Subsequent config changes are pushed below.\n [providedStore],\n );\n\n useEffect(() => {\n store.setConfig({\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n maxVisible,\n });\n }, [store, position, duration, dismissible, progress, tone, size, maxVisible]);\n\n const api = useMemo<SnackbarApi>(() => {\n const preset =\n (variant: SnackbarVariant) =>\n (message: ReactNode, options: PresetOptions = {}) =>\n store.show({ ...options, message, variant });\n\n return {\n show: store.show,\n update: store.update,\n dismiss: store.dismiss,\n dismissAll: store.dismissAll,\n promise: store.promise,\n success: preset('success'),\n error: preset('error'),\n warning: preset('warning'),\n info: preset('info'),\n neutral: preset('neutral'),\n custom: preset('custom'),\n loading: (message, options = {}) =>\n store.show({\n ...options,\n message,\n variant: 'loading',\n duration:\n options.duration !== undefined ? options.duration : null,\n }),\n store,\n };\n }, [store]);\n\n const value = useMemo(() => ({ store, api }), [store, api]);\n\n return (\n <SnackbarContext.Provider value={value}>\n {children}\n <SnackbarHost\n store={store}\n maxVisible={maxVisible ?? store.getConfig().maxVisible}\n {...hostProps}\n />\n </SnackbarContext.Provider>\n );\n}\n\nfunction useSnackbarContext(): SnackbarContextValue {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error(\n 'useSnackbar must be used inside a <SnackbarProvider>. ' +\n 'Render the provider above the component that displays snackbars.',\n );\n }\n return context;\n}\n\n/** Imperative API for showing and managing snackbars. */\nexport function useSnackbar(): SnackbarApi {\n return useSnackbarContext().api;\n}\n\n/** Low-level store access for subscriptions and advanced integrations. */\nexport function useSnackbarStore(): SnackbarStore {\n return useSnackbarContext().store;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/createSnackbarStore.ts","../src/core/defaultStore.ts","../src/components/icons.tsx","../src/components/SnackbarItem.tsx","../src/SnackbarHost.tsx","../src/SnackbarProvider.tsx","../src/toast.ts"],"names":["isValidElement","record","jsxs","jsx","useState","useRef","useEffect","useSyncExternalStore","useLayoutEffect","createPortal","createContext","useMemo","preset","useContext","toast"],"mappings":"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","file":"index.cjs","sourcesContent":["import { isValidElement } from 'react';\nimport type {\n ResolvedSnackbarStoreConfig,\n SnackbarCloseReason,\n SnackbarOptions,\n SnackbarPromiseContent,\n SnackbarPromiseOptions,\n SnackbarRecord,\n SnackbarStore,\n SnackbarStoreConfig,\n} from '../types';\n\nconst EMPTY: readonly SnackbarRecord[] = Object.freeze([]);\n\nconst DEFAULT_CONFIG: ResolvedSnackbarStoreConfig = {\n position: 'bottom-right',\n duration: 5000,\n dismissible: true,\n progress: true,\n tone: 'glass',\n size: 'md',\n maxVisible: 3,\n};\n\ninterface TimerState {\n remaining: number;\n startedAt: number | null;\n handle: ReturnType<typeof setTimeout> | null;\n}\n\nlet sequence = 0;\n\nfunction createId(): string {\n sequence += 1;\n const random = Math.random().toString(36).slice(2, 7);\n return `prs-${Date.now().toString(36)}-${sequence.toString(36)}-${random}`;\n}\n\n/**\n * Turns user-facing duration input into milliseconds.\n * `null`, `0`, negative or non-finite values mean \"persistent\".\n */\nfunction normalizeDuration(\n value: number | null | undefined,\n fallback: number,\n): number {\n if (value === undefined) return fallback;\n if (value === null) return Infinity;\n if (!Number.isFinite(value) || value <= 0) return Infinity;\n return Math.max(1, Math.round(value));\n}\n\nfunction isPlainOptions(value: unknown): value is SnackbarOptions {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n !('$$typeof' in value)\n );\n}\n\nfunction contentToOptions(content: unknown): SnackbarOptions {\n if (isPlainOptions(content)) return content;\n return { message: content as SnackbarOptions['message'] };\n}\n\nfunction resolveContent<T>(\n content: SnackbarPromiseContent<T>,\n value: T,\n): SnackbarOptions {\n const resolved = typeof content === 'function' ? content(value) : content;\n return contentToOptions(resolved);\n}\n\nexport function createSnackbarStore(\n initialConfig: SnackbarStoreConfig = {},\n): SnackbarStore {\n let config: ResolvedSnackbarStoreConfig = {\n ...DEFAULT_CONFIG,\n ...(initialConfig.position !== undefined\n ? { position: initialConfig.position }\n : null),\n ...(initialConfig.duration !== undefined\n ? {\n duration: normalizeDuration(\n initialConfig.duration,\n DEFAULT_CONFIG.duration,\n ),\n }\n : null),\n ...(initialConfig.dismissible !== undefined\n ? { dismissible: initialConfig.dismissible }\n : null),\n ...(initialConfig.progress !== undefined\n ? { progress: initialConfig.progress }\n : null),\n ...(initialConfig.tone !== undefined ? { tone: initialConfig.tone } : null),\n ...(initialConfig.size !== undefined ? { size: initialConfig.size } : null),\n ...(initialConfig.maxVisible !== undefined\n ? { maxVisible: Math.max(1, Math.floor(initialConfig.maxVisible)) }\n : null),\n };\n\n let records: readonly SnackbarRecord[] = EMPTY;\n const listeners = new Set<() => void>();\n const timers = new Map<string, TimerState>();\n const shown = new Set<string>();\n const pauseReasons = new Map<string, Set<string>>();\n let pageHidden = false;\n\n const emit = () => {\n for (const listener of listeners) listener();\n };\n\n const find = (id: string) => records.find((record) => record.id === id);\n\n const replace = (id: string, record: SnackbarRecord) => {\n records = records.map((current) => (current.id === id ? record : current));\n };\n\n const cleanup = (id: string) => {\n timers.delete(id);\n shown.delete(id);\n pauseReasons.delete(id);\n };\n\n const stopTimer = (timer: TimerState) => {\n if (timer.handle !== null) {\n clearTimeout(timer.handle);\n timer.handle = null;\n }\n if (timer.startedAt !== null) {\n timer.remaining = Math.max(0, timer.remaining - (Date.now() - timer.startedAt));\n timer.startedAt = null;\n }\n };\n\n const schedule = (id: string, timer: TimerState) => {\n timer.startedAt = Date.now();\n timer.handle = setTimeout(() => {\n timer.handle = null;\n timer.startedAt = null;\n timer.remaining = 0;\n dismiss(id, 'timeout');\n }, Math.max(0, timer.remaining));\n };\n\n const startTimer = (id: string) => {\n const record = find(id);\n if (\n !record ||\n record.phase !== 'visible' ||\n !shown.has(id) ||\n record.duration === Infinity ||\n pageHidden ||\n (pauseReasons.get(id)?.size ?? 0) > 0\n ) {\n return;\n }\n\n const existing = timers.get(id);\n if (existing) {\n // Pause stops the handle but keeps the remaining time on the entry.\n if (existing.handle === null && existing.startedAt === null) {\n schedule(id, existing);\n }\n return;\n }\n\n const timer: TimerState = {\n remaining: record.duration,\n startedAt: null,\n handle: null,\n };\n timers.set(id, timer);\n schedule(id, timer);\n };\n\n const resetTimer = (id: string) => {\n const timer = timers.get(id);\n if (timer) {\n if (timer.handle !== null) clearTimeout(timer.handle);\n timers.delete(id);\n }\n startTimer(id);\n };\n\n const setPaused = (id: string, paused: boolean) => {\n const record = find(id);\n if (!record || record.paused === paused) return;\n replace(id, { ...record, paused });\n emit();\n };\n\n const pause = (id: string, reason = 'manual') => {\n const record = find(id);\n if (!record || record.phase !== 'visible') return;\n\n let reasons = pauseReasons.get(id);\n if (!reasons) {\n reasons = new Set();\n pauseReasons.set(id, reasons);\n }\n if (reasons.has(reason)) return;\n reasons.add(reason);\n\n const timer = timers.get(id);\n if (timer) stopTimer(timer);\n setPaused(id, true);\n };\n\n const resume = (id: string, reason = 'manual') => {\n const reasons = pauseReasons.get(id);\n if (!reasons || !reasons.has(reason)) return;\n reasons.delete(reason);\n if (reasons.size > 0) return;\n\n pauseReasons.delete(id);\n setPaused(id, false);\n startTimer(id);\n };\n\n const dismiss = (id: string, reason: SnackbarCloseReason = 'manual') => {\n const record = find(id);\n if (!record || record.phase === 'exiting') return;\n\n const timer = timers.get(id);\n if (timer) {\n stopTimer(timer);\n timers.delete(id);\n }\n\n // A queued snackbar has never been painted, so it can be removed at once.\n if (!shown.has(id)) {\n records = records.filter((current) => current.id !== id);\n cleanup(id);\n emit();\n record.onClose?.(reason, id);\n return;\n }\n\n pauseReasons.delete(id);\n replace(id, {\n ...record,\n phase: 'exiting',\n closeReason: reason,\n paused: false,\n });\n emit();\n record.onClose?.(reason, id);\n };\n\n const dismissAll = (reason: SnackbarCloseReason = 'dismissAll') => {\n const callbacks: Array<() => void> = [];\n const remaining: SnackbarRecord[] = [];\n\n for (const record of records) {\n if (record.phase === 'exiting') {\n remaining.push(record);\n continue;\n }\n\n const timer = timers.get(record.id);\n if (timer) {\n stopTimer(timer);\n timers.delete(record.id);\n }\n\n if (!shown.has(record.id)) {\n cleanup(record.id);\n callbacks.push(() => record.onClose?.(reason, record.id));\n continue;\n }\n\n pauseReasons.delete(record.id);\n remaining.push({\n ...record,\n phase: 'exiting',\n closeReason: reason,\n paused: false,\n });\n callbacks.push(() => record.onClose?.(reason, record.id));\n }\n\n records = remaining;\n emit();\n for (const callback of callbacks) callback();\n };\n\n const show = (options: SnackbarOptions): string => {\n const id = options.id ?? createId();\n const existing = find(id);\n\n if (existing) {\n update(id, options);\n const current = find(id);\n if (current && current.phase === 'exiting') {\n records = records.map((record) =>\n record.id === id\n ? { ...record, phase: 'visible', closeReason: undefined, paused: false }\n : record,\n );\n pauseReasons.delete(id);\n emit();\n startTimer(id);\n }\n return id;\n }\n\n const record: SnackbarRecord = {\n id,\n title: options.title,\n message: options.message,\n variant: options.variant ?? 'neutral',\n tone: options.tone ?? config.tone,\n size: options.size ?? config.size,\n duration: normalizeDuration(options.duration, config.duration),\n position: options.position ?? config.position,\n icon: options.icon,\n action: options.action ?? null,\n dismissible: options.dismissible ?? config.dismissible,\n progress: options.progress ?? config.progress,\n className: options.className,\n style: options.style,\n createdAt: Date.now(),\n phase: 'visible',\n paused: false,\n closeReason: undefined,\n onOpen: options.onOpen,\n onClose: options.onClose,\n };\n\n records = [...records, record];\n emit();\n return id;\n };\n\n const update = (id: string, options: Partial<SnackbarOptions>): void => {\n const record = find(id);\n if (!record) return;\n\n const next: SnackbarRecord = {\n ...record,\n ...(options.title !== undefined ? { title: options.title } : null),\n ...(options.message !== undefined ? { message: options.message } : null),\n ...(options.variant !== undefined ? { variant: options.variant } : null),\n ...(options.tone !== undefined ? { tone: options.tone } : null),\n ...(options.size !== undefined ? { size: options.size } : null),\n ...(options.position !== undefined ? { position: options.position } : null),\n ...(options.icon !== undefined ? { icon: options.icon } : null),\n ...(options.action !== undefined ? { action: options.action } : null),\n ...(options.dismissible !== undefined\n ? { dismissible: options.dismissible }\n : null),\n ...(options.progress !== undefined ? { progress: options.progress } : null),\n ...(options.className !== undefined ? { className: options.className } : null),\n ...(options.style !== undefined ? { style: options.style } : null),\n ...(options.onOpen !== undefined ? { onOpen: options.onOpen } : null),\n ...(options.onClose !== undefined ? { onClose: options.onClose } : null),\n ...(options.duration !== undefined\n ? { duration: normalizeDuration(options.duration, record.duration) }\n : null),\n };\n\n const durationChanged = next.duration !== record.duration;\n replace(id, next);\n emit();\n\n if (\n durationChanged &&\n next.phase === 'visible' &&\n shown.has(id)\n ) {\n if (next.duration === Infinity) {\n const timer = timers.get(id);\n if (timer) {\n stopTimer(timer);\n timers.delete(id);\n }\n } else {\n resetTimer(id);\n }\n }\n };\n\n const notifyShown = (id: string) => {\n if (shown.has(id)) return;\n const record = find(id);\n if (!record || record.phase !== 'visible') return;\n shown.add(id);\n record.onOpen?.(id);\n startTimer(id);\n };\n\n const notifyExited = (id: string) => {\n const record = find(id);\n if (!record || record.phase !== 'exiting') return;\n cleanup(id);\n records = records.filter((current) => current.id !== id);\n emit();\n };\n\n const setPageHidden = (hidden: boolean) => {\n if (pageHidden === hidden) return;\n pageHidden = hidden;\n for (const record of records) {\n if (hidden) {\n pause(record.id, 'page');\n } else {\n resume(record.id, 'page');\n startTimer(record.id);\n }\n }\n };\n\n const setConfig = (patch: SnackbarStoreConfig) => {\n config = {\n ...config,\n ...(patch.position !== undefined ? { position: patch.position } : null),\n ...(patch.duration !== undefined\n ? {\n duration: normalizeDuration(patch.duration, config.duration),\n }\n : null),\n ...(patch.dismissible !== undefined\n ? { dismissible: patch.dismissible }\n : null),\n ...(patch.progress !== undefined ? { progress: patch.progress } : null),\n ...(patch.tone !== undefined ? { tone: patch.tone } : null),\n ...(patch.size !== undefined ? { size: patch.size } : null),\n ...(patch.maxVisible !== undefined\n ? { maxVisible: Math.max(1, Math.floor(patch.maxVisible)) }\n : null),\n };\n };\n\n const promise = <T,>(\n input: Promise<T>,\n messages: SnackbarPromiseOptions<T>,\n options: SnackbarOptions = {},\n ): Promise<T> => {\n const loadingOptions = contentToOptions(messages.loading ?? 'Loading…');\n const id = options.id ?? createId();\n\n show({\n dismissible: false,\n ...options,\n ...loadingOptions,\n id,\n duration:\n loadingOptions.duration !== undefined ? loadingOptions.duration : null,\n variant: loadingOptions.variant ?? 'loading',\n progress: loadingOptions.progress ?? false,\n });\n\n const settle = <Value,>(\n content: SnackbarPromiseContent<Value>,\n value: Value,\n variant: 'success' | 'error',\n ) => {\n const next = resolveContent(content, value);\n update(id, {\n ...next,\n variant: next.variant ?? variant,\n duration:\n next.duration !== undefined\n ? next.duration\n : options.duration !== undefined\n ? options.duration\n : 4000,\n });\n };\n\n return input.then(\n (value) => {\n settle(messages.success, value, 'success');\n return value;\n },\n (error: unknown) => {\n settle(messages.error, error, 'error');\n throw error;\n },\n );\n };\n\n return {\n show,\n update,\n dismiss,\n dismissAll,\n promise,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n getSnapshot: () => records,\n getServerSnapshot: () => EMPTY,\n getConfig: () => ({ ...config }),\n setConfig,\n pause,\n resume,\n notifyShown,\n notifyExited,\n setPageHidden,\n };\n}\n\n","import type { SnackbarStore } from '../types';\nimport { createSnackbarStore } from './createSnackbarStore';\n\nlet defaultStore: SnackbarStore | null = null;\n\n/**\n * The store shared by the module-level `toast` API and any\n * `<SnackbarProvider>` that is not given an explicit `store`.\n *\n * Created lazily so importing the package on the server has no side effects.\n */\nexport function getDefaultStore(): SnackbarStore {\n if (!defaultStore) defaultStore = createSnackbarStore();\n return defaultStore;\n}\n\n/**\n * Swaps the global store. Useful for tests, isolating apps or wiring the\n * global `toast` API to a store you created yourself.\n * Pass `null` to go back to a fresh default store on next use.\n */\nexport function setDefaultStore(store: SnackbarStore | null): void {\n defaultStore = store;\n}\n","import type { ReactNode } from 'react';\nimport type { SnackbarVariant } from '../types';\n\nconst strokeProps = {\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.7,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n} as const;\n\nconst BellIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M5.2 8.1a4.8 4.8 0 0 1 9.6 0c0 3.1 1.3 4.3 1.3 4.3H3.9s1.3-1.2 1.3-4.3Z\"\n />\n <path {...strokeProps} d=\"M8.2 15.2a1.9 1.9 0 0 0 3.6 0\" />\n </svg>\n);\n\nconst CheckIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path {...strokeProps} d=\"M4.6 10.4 8 13.8l7.4-7.6\" strokeWidth={2} />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <circle {...strokeProps} cx=\"10\" cy=\"10\" r=\"6.6\" />\n <path {...strokeProps} d=\"M10 6.4v4.2\" />\n <circle cx=\"10\" cy=\"13.5\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst WarningIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M8.6 3.6a1.6 1.6 0 0 1 2.8 0l5.2 9.6a1.6 1.6 0 0 1-1.4 2.4H4.8a1.6 1.6 0 0 1-1.4-2.4l5.2-9.6Z\"\n />\n <path {...strokeProps} d=\"M10 7.6v3.2\" />\n <circle cx=\"10\" cy=\"13.3\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst InfoIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <circle {...strokeProps} cx=\"10\" cy=\"10\" r=\"6.6\" />\n <path {...strokeProps} d=\"M10 9.1v4.2\" />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst SpinnerIcon = (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"18\"\n height=\"18\"\n aria-hidden=\"true\"\n className=\"prs-icon-spin\"\n >\n <circle\n {...strokeProps}\n cx=\"10\"\n cy=\"10\"\n r=\"6.4\"\n opacity=\"0.22\"\n strokeWidth={2}\n />\n <path\n {...strokeProps}\n d=\"M10 3.6a6.4 6.4 0 0 1 6.4 6.4\"\n strokeWidth={2}\n />\n </svg>\n);\n\nconst SparkIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M10 2.9c.55 3.9 2.2 5.55 6.1 6.1-3.9.55-5.55 2.2-6.1 6.1-.55-3.9-2.2-5.55-6.1-6.1C7.8 8.45 9.45 6.8 10 2.9Z\"\n />\n <path {...strokeProps} d=\"M15.2 13.4c.2 1.4.8 2 2.2 2.2-1.4.2-2 .8-2.2 2.2-.2-1.4-.8-2-2.2-2.2 1.4-.2 2-.8 2.2-2.2Z\" />\n </svg>\n);\n\nexport const defaultIcons: Record<SnackbarVariant, ReactNode> = {\n neutral: BellIcon,\n success: CheckIcon,\n error: ErrorIcon,\n warning: WarningIcon,\n info: InfoIcon,\n loading: SpinnerIcon,\n custom: SparkIcon,\n};\n\nexport const DefaultCloseIcon = (\n <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n d=\"M4.2 4.2l7.6 7.6M11.8 4.2l-7.6 7.6\"\n />\n </svg>\n);\n","import {\n useEffect,\n useRef,\n useState,\n type AnimationEvent,\n type CSSProperties,\n type FocusEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport type {\n SnackbarRecord,\n SnackbarStore,\n SnackbarVariant,\n} from '../types';\nimport { DefaultCloseIcon, defaultIcons } from './icons';\n\ninterface SnackbarItemProps {\n record: SnackbarRecord;\n store: SnackbarStore;\n icons?: Partial<Record<SnackbarVariant, ReactNode>> | undefined;\n closeIcon?: ReactNode | undefined;\n closeLabel: string;\n pauseOnHover: boolean;\n pauseOnFocus: boolean;\n swipeToDismiss: boolean;\n swipeThreshold: number;\n}\n\ninterface Gesture {\n pointerId: number;\n startX: number;\n startY: number;\n axis: 'pending' | 'x';\n}\n\nexport function SnackbarItem({\n record,\n store,\n icons,\n closeIcon,\n closeLabel,\n pauseOnHover,\n pauseOnFocus,\n swipeToDismiss,\n swipeThreshold,\n}: SnackbarItemProps) {\n const [dragX, setDragX] = useState(0);\n const [dragging, setDragging] = useState(false);\n const [actionPending, setActionPending] = useState(false);\n const gesture = useRef<Gesture | null>(null);\n const dragXRef = useRef(0);\n const draggingRef = useRef(false);\n const suppressClick = useRef(false);\n const surfaceRef = useRef<HTMLDivElement>(null);\n\n const { id, phase, action, title, message, variant, duration } = record;\n\n useEffect(() => {\n store.notifyShown(id);\n }, [store, id]);\n\n useEffect(() => {\n if (phase !== 'exiting') return;\n const timeout = setTimeout(() => store.notifyExited(id), 400);\n return () => clearTimeout(timeout);\n }, [phase, store, id]);\n\n const resetDrag = () => {\n dragXRef.current = 0;\n draggingRef.current = false;\n setDragX(0);\n setDragging(false);\n };\n\n const pauseForDrag = () => {\n store.pause(id, 'drag');\n };\n\n const resumeForDrag = () => {\n store.resume(id, 'drag');\n };\n\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n suppressClick.current = false;\n if (!swipeToDismiss || phase === 'exiting') return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n const target = event.target as HTMLElement;\n if (\n target.closest(\n 'button, a, input, textarea, select, [role=\"button\"], [data-prs-no-swipe]',\n )\n ) {\n return;\n }\n\n gesture.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n axis: 'pending',\n };\n };\n\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n const current = gesture.current;\n if (!current) return;\n\n const dx = event.clientX - current.startX;\n const dy = event.clientY - current.startY;\n\n if (current.axis === 'pending') {\n if (Math.abs(dx) < 6 && Math.abs(dy) < 6) return;\n if (Math.abs(dy) > Math.abs(dx)) {\n // Vertical intent: let the page scroll.\n gesture.current = null;\n return;\n }\n current.axis = 'x';\n draggingRef.current = true;\n setDragging(true);\n pauseForDrag();\n surfaceRef.current?.setPointerCapture?.(event.pointerId);\n }\n\n if (event.cancelable) event.preventDefault();\n const absolute = Math.abs(dx);\n const damped = absolute > 96 ? 96 + (absolute - 96) * 0.32 : absolute;\n const next = Math.sign(dx) * damped;\n dragXRef.current = next;\n setDragX(next);\n if (absolute > 8) suppressClick.current = true;\n };\n\n const finishGesture = (event: ReactPointerEvent<HTMLDivElement>) => {\n const current = gesture.current;\n if (!current) return;\n\n if (draggingRef.current) {\n const shouldDismiss = Math.abs(dragXRef.current) >= swipeThreshold;\n resetDrag();\n resumeForDrag();\n if (surfaceRef.current?.hasPointerCapture?.(current.pointerId)) {\n surfaceRef.current.releasePointerCapture(current.pointerId);\n }\n if (shouldDismiss) {\n suppressClick.current = true;\n store.dismiss(id, 'swipe');\n }\n } else {\n resetDrag();\n }\n\n gesture.current = null;\n if (event.type === 'pointercancel') resumeForDrag();\n };\n\n const handleLostPointerCapture = () => {\n if (!draggingRef.current) return;\n resetDrag();\n resumeForDrag();\n gesture.current = null;\n };\n\n const handleAnimationEnd = (event: AnimationEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return;\n if (phase === 'exiting') store.notifyExited(id);\n };\n\n const handleAction = async () => {\n if (!action || actionPending) return;\n\n const result = action.onClick?.(id);\n if (result && typeof result.then === 'function') {\n setActionPending(true);\n try {\n await result;\n } finally {\n setActionPending(false);\n }\n }\n\n if (action.closeOnClick !== false) store.dismiss(id, 'action');\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n if (!pauseOnFocus) return;\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n store.resume(id, 'focus');\n }\n };\n\n const resolvedIcon =\n record.icon === undefined\n ? (icons?.[variant] ?? defaultIcons[variant])\n : record.icon;\n const showIcon = record.icon !== false;\n const showProgress =\n record.progress && Number.isFinite(duration) && duration > 0;\n\n const style = {\n ...record.style,\n '--prs-drag-x': `${dragX}px`,\n '--prs-drag-opacity': String(\n 1 - Math.min(Math.abs(dragX) / 300, 0.55),\n ),\n } as CSSProperties;\n\n return (\n <div\n className={`prs-item${record.className ? ` ${record.className}` : ''}`}\n data-variant={variant}\n data-tone={record.tone}\n data-size={record.size}\n data-state={phase}\n data-paused={record.paused ? 'true' : 'false'}\n data-dragging={dragging ? 'true' : 'false'}\n data-has-icon={showIcon ? 'true' : 'false'}\n data-dismissible={record.dismissible ? 'true' : 'false'}\n data-prs-id={record.id}\n data-position={record.position}\n style={style}\n role={variant === 'error' ? 'alert' : 'status'}\n aria-live={variant === 'error' ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n aria-busy={actionPending || variant === 'loading' ? true : undefined}\n onPointerEnter={() => {\n if (pauseOnHover) store.pause(id, 'hover');\n }}\n onPointerLeave={() => {\n if (pauseOnHover) store.resume(id, 'hover');\n }}\n onFocus={() => {\n if (pauseOnFocus) store.pause(id, 'focus');\n }}\n onBlur={handleBlur}\n onKeyDown={(event) => {\n if (event.key === 'Escape' && record.dismissible) {\n event.stopPropagation();\n store.dismiss(id, 'escape');\n }\n }}\n onAnimationEnd={handleAnimationEnd}\n >\n <div\n ref={surfaceRef}\n className=\"prs-item__surface\"\n onClickCapture={(event) => {\n if (!suppressClick.current) return;\n suppressClick.current = false;\n event.preventDefault();\n event.stopPropagation();\n }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={finishGesture}\n onPointerCancel={finishGesture}\n onLostPointerCapture={handleLostPointerCapture}\n >\n {showIcon ? (\n <span className=\"prs-item__icon\" aria-hidden=\"true\">\n {resolvedIcon}\n </span>\n ) : null}\n\n <div\n className=\"prs-item__content\"\n data-has-title={title !== undefined && title !== null ? 'true' : 'false'}\n >\n {title !== undefined && title !== null ? (\n <div className=\"prs-item__title\">{title}</div>\n ) : null}\n {message !== undefined && message !== null ? (\n <div className=\"prs-item__message\">{message}</div>\n ) : null}\n {action ? (\n <div className=\"prs-item__actions\">\n <button\n type=\"button\"\n className=\"prs-action\"\n onClick={handleAction}\n disabled={actionPending}\n aria-busy={actionPending || undefined}\n >\n {actionPending ? (\n <span className=\"prs-action__spinner\" aria-hidden=\"true\" />\n ) : null}\n <span>{action.label}</span>\n </button>\n </div>\n ) : null}\n </div>\n\n {record.dismissible ? (\n <button\n type=\"button\"\n className=\"prs-close\"\n aria-label={closeLabel}\n onClick={() => store.dismiss(id, 'manual')}\n >\n {closeIcon ?? DefaultCloseIcon}\n </button>\n ) : null}\n\n {showProgress ? (\n <div className=\"prs-progress\" aria-hidden=\"true\">\n <span\n key={duration}\n className=\"prs-progress__bar\"\n style={{ animationDuration: `${duration}ms` }}\n />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type {\n SnackbarHostProps,\n SnackbarPosition,\n SnackbarRecord,\n} from './types';\nimport { SnackbarItem } from './components/SnackbarItem';\n\nconst POSITIONS: readonly SnackbarPosition[] = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right',\n];\n\nexport function SnackbarHost({\n store,\n maxVisible = 3,\n offset = 20,\n gap = 12,\n width = 384,\n theme = 'auto',\n container,\n pauseOnHover = true,\n pauseOnFocus = true,\n pauseOnDocumentHidden = true,\n swipeToDismiss = true,\n swipeThreshold = 88,\n icons,\n closeIcon,\n closeLabel = 'Dismiss notification',\n regionLabel = 'Notifications',\n className,\n style,\n zIndex = 2147483000,\n dir,\n}: SnackbarHostProps) {\n const records = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot,\n );\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n const regionRefs = useRef(new Map<SnackbarPosition, HTMLElement>());\n const topsRef = useRef(new Map<string, number>());\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n const target =\n typeof container === 'function'\n ? container()\n : container ?? document.body;\n setPortalNode(target);\n return () => setPortalNode(null);\n }, [container]);\n\n useEffect(() => {\n if (!pauseOnDocumentHidden || typeof document === 'undefined') return;\n\n const sync = () => store.setPageHidden(document.visibilityState === 'hidden');\n sync();\n document.addEventListener('visibilitychange', sync);\n return () => {\n document.removeEventListener('visibilitychange', sync);\n store.setPageHidden(false);\n };\n }, [store, pauseOnDocumentHidden]);\n\n // FLIP: when the stack grows or collapses, existing cards glide into their\n // new slot instead of snapping. New cards are left to the CSS enter spring.\n useLayoutEffect(() => {\n if (!portalNode) {\n topsRef.current.clear();\n return;\n }\n if (typeof window === 'undefined') return;\n\n const reduced =\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const next = new Map<string, number>();\n\n for (const region of regionRefs.current.values()) {\n const regionTop = region.getBoundingClientRect().top;\n const nodes = region.querySelectorAll<HTMLElement>('[data-prs-id]');\n\n for (const node of nodes) {\n const id = node.dataset.prsId;\n if (!id) continue;\n\n const top = regionTop + node.offsetTop;\n next.set(id, top);\n\n const previous = topsRef.current.get(id);\n if (\n reduced ||\n previous === undefined ||\n node.dataset.state === 'exiting' ||\n typeof node.animate !== 'function'\n ) {\n continue;\n }\n\n const delta = previous - top;\n if (Math.abs(delta) < 0.5) continue;\n\n node.animate(\n [\n { transform: `translate3d(0, ${delta}px, 0)` },\n { transform: 'translate3d(0, 0, 0)' },\n ],\n {\n duration: 320,\n easing: 'cubic-bezier(0.22, 1, 0.36, 1)',\n },\n );\n }\n }\n\n topsRef.current = next;\n });\n\n if (!portalNode) return null;\n\n const byPosition = new Map<SnackbarPosition, SnackbarRecord[]>();\n for (const record of records) {\n const bucket = byPosition.get(record.position);\n if (bucket) bucket.push(record);\n else byPosition.set(record.position, [record]);\n }\n\n const limit = Math.max(1, Math.floor(maxVisible));\n\n const rootStyle = {\n '--prs-width': `${width}px`,\n '--prs-offset': `${offset}px`,\n '--prs-gap': `${gap}px`,\n '--prs-z-index': String(zIndex),\n ...style,\n } as CSSProperties;\n\n return createPortal(\n <div\n className={`prs-root${className ? ` ${className}` : ''}`}\n data-prs-theme={theme}\n dir={dir}\n style={rootStyle}\n >\n {POSITIONS.map((position) => {\n const items = byPosition.get(position);\n if (!items || items.length === 0) return null;\n const visible = items.slice(0, limit);\n\n return (\n <section\n key={position}\n ref={(node) => {\n if (node) regionRefs.current.set(position, node);\n else regionRefs.current.delete(position);\n }}\n className=\"prs-region\"\n data-position={position}\n aria-label={regionLabel}\n >\n {visible.map((record) => (\n <SnackbarItem\n key={record.id}\n record={record}\n store={store}\n icons={icons}\n closeIcon={closeIcon}\n closeLabel={closeLabel}\n pauseOnHover={pauseOnHover}\n pauseOnFocus={pauseOnFocus}\n swipeToDismiss={swipeToDismiss}\n swipeThreshold={swipeThreshold}\n />\n ))}\n </section>\n );\n })}\n </div>,\n portalNode,\n );\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n type ReactNode,\n} from 'react';\nimport { getDefaultStore } from './core/defaultStore';\nimport { SnackbarHost } from './SnackbarHost';\nimport type {\n SnackbarApi,\n SnackbarOptions,\n SnackbarProviderProps,\n SnackbarStore,\n SnackbarVariant,\n} from './types';\n\ninterface SnackbarContextValue {\n store: SnackbarStore;\n api: SnackbarApi;\n}\n\nconst SnackbarContext = createContext<SnackbarContextValue | null>(null);\n\ntype PresetOptions = Omit<SnackbarOptions, 'message' | 'variant'>;\n\nexport function SnackbarProvider({\n children,\n store: providedStore,\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n maxVisible,\n ...hostProps\n}: SnackbarProviderProps) {\n const store = useMemo(\n () =>\n // Falling back to the shared default store is what makes the\n // module-level `toast` API render without extra wiring.\n providedStore ?? getDefaultStore(),\n // The store is intentionally created once per provider instance.\n // Subsequent config changes are pushed below.\n [providedStore],\n );\n\n useEffect(() => {\n store.setConfig({\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n maxVisible,\n });\n }, [store, position, duration, dismissible, progress, tone, size, maxVisible]);\n\n const api = useMemo<SnackbarApi>(() => {\n const preset =\n (variant: SnackbarVariant) =>\n (message: ReactNode, options: PresetOptions = {}) =>\n store.show({ ...options, message, variant });\n\n return {\n show: store.show,\n update: store.update,\n dismiss: store.dismiss,\n dismissAll: store.dismissAll,\n promise: store.promise,\n success: preset('success'),\n error: preset('error'),\n warning: preset('warning'),\n info: preset('info'),\n neutral: preset('neutral'),\n custom: preset('custom'),\n loading: (message, options = {}) =>\n store.show({\n ...options,\n message,\n variant: 'loading',\n duration:\n options.duration !== undefined ? options.duration : null,\n }),\n store,\n };\n }, [store]);\n\n const value = useMemo(() => ({ store, api }), [store, api]);\n\n return (\n <SnackbarContext.Provider value={value}>\n {children}\n <SnackbarHost\n store={store}\n maxVisible={maxVisible ?? store.getConfig().maxVisible}\n {...hostProps}\n />\n </SnackbarContext.Provider>\n );\n}\n\nfunction useSnackbarContext(): SnackbarContextValue {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error(\n 'useSnackbar must be used inside a <SnackbarProvider>. ' +\n 'Render the provider above the component that displays snackbars.',\n );\n }\n return context;\n}\n\n/** Imperative API for showing and managing snackbars. */\nexport function useSnackbar(): SnackbarApi {\n return useSnackbarContext().api;\n}\n\n/** Low-level store access for subscriptions and advanced integrations. */\nexport function useSnackbarStore(): SnackbarStore {\n return useSnackbarContext().store;\n}\n","import { isValidElement, type ReactNode } from 'react';\nimport { getDefaultStore } from './core/defaultStore';\nimport type {\n SnackbarCloseReason,\n SnackbarOptions,\n SnackbarPromiseOptions,\n SnackbarVariant,\n ToastApi,\n ToastPresetOptions,\n} from './types';\n\n/** Same shape as `SnackbarOptions`, minus what the preset supplies. */\nfunction isOptionsObject(value: unknown): value is SnackbarOptions {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n !('$$typeof' in value)\n );\n}\n\nfunction preset(variant: SnackbarVariant) {\n return (message: ReactNode, options: ToastPresetOptions = {}): string =>\n getDefaultStore().show({ ...options, message, variant });\n}\n\nfunction createToast(): ToastApi {\n const toast = ((\n content: ReactNode | SnackbarOptions,\n options?: ToastPresetOptions,\n ): string => {\n // `toast({ message, variant })` and `toast('Saved')` are both valid.\n if (options === undefined && isOptionsObject(content)) {\n return getDefaultStore().show(content);\n }\n return getDefaultStore().show({\n ...options,\n message: content as ReactNode,\n });\n }) as ToastApi;\n\n toast.show = (options) => getDefaultStore().show(options);\n toast.update = (id, options) => getDefaultStore().update(id, options);\n toast.dismiss = (id?: string, reason?: SnackbarCloseReason) =>\n getDefaultStore().dismiss(id, reason);\n toast.dismissAll = (reason?: SnackbarCloseReason) =>\n getDefaultStore().dismissAll(reason);\n\n toast.success = preset('success');\n toast.error = preset('error');\n toast.warning = preset('warning');\n toast.info = preset('info');\n toast.neutral = preset('neutral');\n toast.custom = preset('custom');\n toast.loading = (message, options = {}) =>\n getDefaultStore().show({\n ...options,\n message,\n variant: 'loading',\n duration: options.duration !== undefined ? options.duration : null,\n });\n\n toast.promise = <T,>(\n input: Promise<T>,\n messages: SnackbarPromiseOptions<T>,\n options?: SnackbarOptions,\n ): Promise<T> => getDefaultStore().promise(input, messages, options);\n\n Object.defineProperty(toast, 'store', {\n get: getDefaultStore,\n enumerable: true,\n });\n\n return toast;\n}\n\n/**\n * Fire-and-forget toast API that works anywhere — event handlers, data\n * layers, non-React modules — as long as a `<SnackbarProvider>` (or a\n * `<SnackbarHost store={getDefaultStore()} />`) is mounted.\n *\n * ```ts\n * import { toast } from 'react-snackbar-glass';\n *\n * toast.success('Deployment complete.', { title: 'v1.4.0 is live' });\n * toast.promise(save(), { loading: 'Saving…', success: 'Saved', error: 'Failed' });\n * ```\n */\nexport const toast: ToastApi = createToast();\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -164,6 +164,33 @@ interface SnackbarApi {
|
|
|
164
164
|
/** Escape hatch for scheduling, subscribing or advanced updates. */
|
|
165
165
|
store: SnackbarStore;
|
|
166
166
|
}
|
|
167
|
+
/** Options accepted by the preset helpers (`toast.success`, `toast.error`, …). */
|
|
168
|
+
type ToastPresetOptions = Omit<SnackbarOptions, 'message' | 'variant'>;
|
|
169
|
+
/**
|
|
170
|
+
* Module-level toast API. It mirrors {@link SnackbarApi} but talks to the
|
|
171
|
+
* global store, so it can be called from anywhere — no hook, no provider
|
|
172
|
+
* argument, no render phase.
|
|
173
|
+
*/
|
|
174
|
+
interface ToastApi {
|
|
175
|
+
/** `toast('Saved')` or `toast({ message: 'Saved', variant: 'success' })`. */
|
|
176
|
+
(message: ReactNode, options?: ToastPresetOptions): string;
|
|
177
|
+
(options: SnackbarOptions): string;
|
|
178
|
+
/** Queue a fully customised toast and return its id. */
|
|
179
|
+
show(options: SnackbarOptions): string;
|
|
180
|
+
update(id: string, options: Partial<SnackbarOptions>): void;
|
|
181
|
+
dismiss(id?: string, reason?: SnackbarCloseReason): void;
|
|
182
|
+
dismissAll(reason?: SnackbarCloseReason): void;
|
|
183
|
+
success(message: ReactNode, options?: ToastPresetOptions): string;
|
|
184
|
+
error(message: ReactNode, options?: ToastPresetOptions): string;
|
|
185
|
+
warning(message: ReactNode, options?: ToastPresetOptions): string;
|
|
186
|
+
info(message: ReactNode, options?: ToastPresetOptions): string;
|
|
187
|
+
neutral(message: ReactNode, options?: ToastPresetOptions): string;
|
|
188
|
+
loading(message: ReactNode, options?: ToastPresetOptions): string;
|
|
189
|
+
custom(message: ReactNode, options?: ToastPresetOptions): string;
|
|
190
|
+
promise<T>(promise: Promise<T>, messages: SnackbarPromiseOptions<T>, options?: SnackbarOptions): Promise<T>;
|
|
191
|
+
/** The store behind the global API (same instance the provider renders). */
|
|
192
|
+
readonly store: SnackbarStore;
|
|
193
|
+
}
|
|
167
194
|
interface SnackbarHostProps {
|
|
168
195
|
store: SnackbarStore;
|
|
169
196
|
/** Maximum simultaneously visible snackbars per corner. */
|
|
@@ -218,6 +245,20 @@ interface SnackbarProviderProps extends Omit<SnackbarHostProps, 'store'> {
|
|
|
218
245
|
|
|
219
246
|
declare function createSnackbarStore(initialConfig?: SnackbarStoreConfig): SnackbarStore;
|
|
220
247
|
|
|
248
|
+
/**
|
|
249
|
+
* The store shared by the module-level `toast` API and any
|
|
250
|
+
* `<SnackbarProvider>` that is not given an explicit `store`.
|
|
251
|
+
*
|
|
252
|
+
* Created lazily so importing the package on the server has no side effects.
|
|
253
|
+
*/
|
|
254
|
+
declare function getDefaultStore(): SnackbarStore;
|
|
255
|
+
/**
|
|
256
|
+
* Swaps the global store. Useful for tests, isolating apps or wiring the
|
|
257
|
+
* global `toast` API to a store you created yourself.
|
|
258
|
+
* Pass `null` to go back to a fresh default store on next use.
|
|
259
|
+
*/
|
|
260
|
+
declare function setDefaultStore(store: SnackbarStore | null): void;
|
|
261
|
+
|
|
221
262
|
declare function SnackbarHost({ store, maxVisible, offset, gap, width, theme, container, pauseOnHover, pauseOnFocus, pauseOnDocumentHidden, swipeToDismiss, swipeThreshold, icons, closeIcon, closeLabel, regionLabel, className, style, zIndex, dir, }: SnackbarHostProps): react.ReactPortal | null;
|
|
222
263
|
|
|
223
264
|
declare function SnackbarProvider({ children, store: providedStore, position, duration, dismissible, progress, tone, size, maxVisible, ...hostProps }: SnackbarProviderProps): react.JSX.Element;
|
|
@@ -226,4 +267,18 @@ declare function useSnackbar(): SnackbarApi;
|
|
|
226
267
|
/** Low-level store access for subscriptions and advanced integrations. */
|
|
227
268
|
declare function useSnackbarStore(): SnackbarStore;
|
|
228
269
|
|
|
229
|
-
|
|
270
|
+
/**
|
|
271
|
+
* Fire-and-forget toast API that works anywhere — event handlers, data
|
|
272
|
+
* layers, non-React modules — as long as a `<SnackbarProvider>` (or a
|
|
273
|
+
* `<SnackbarHost store={getDefaultStore()} />`) is mounted.
|
|
274
|
+
*
|
|
275
|
+
* ```ts
|
|
276
|
+
* import { toast } from 'react-snackbar-glass';
|
|
277
|
+
*
|
|
278
|
+
* toast.success('Deployment complete.', { title: 'v1.4.0 is live' });
|
|
279
|
+
* toast.promise(save(), { loading: 'Saving…', success: 'Saved', error: 'Failed' });
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
declare const toast: ToastApi;
|
|
283
|
+
|
|
284
|
+
export { type ResolvedSnackbarStoreConfig, type SnackbarAction, type SnackbarApi, type SnackbarCloseReason, SnackbarHost, type SnackbarHostProps, type SnackbarOptions, type SnackbarPhase, type SnackbarPosition, type SnackbarPromiseContent, type SnackbarPromiseOptions, SnackbarProvider, type SnackbarProviderProps, type SnackbarRecord, type SnackbarSize, type SnackbarStore, type SnackbarStoreConfig, type SnackbarTheme, type SnackbarTone, type SnackbarVariant, type ToastApi, type ToastPresetOptions, createSnackbarStore, getDefaultStore, setDefaultStore, toast, useSnackbar, useSnackbarStore };
|
package/dist/index.d.ts
CHANGED
|
@@ -164,6 +164,33 @@ interface SnackbarApi {
|
|
|
164
164
|
/** Escape hatch for scheduling, subscribing or advanced updates. */
|
|
165
165
|
store: SnackbarStore;
|
|
166
166
|
}
|
|
167
|
+
/** Options accepted by the preset helpers (`toast.success`, `toast.error`, …). */
|
|
168
|
+
type ToastPresetOptions = Omit<SnackbarOptions, 'message' | 'variant'>;
|
|
169
|
+
/**
|
|
170
|
+
* Module-level toast API. It mirrors {@link SnackbarApi} but talks to the
|
|
171
|
+
* global store, so it can be called from anywhere — no hook, no provider
|
|
172
|
+
* argument, no render phase.
|
|
173
|
+
*/
|
|
174
|
+
interface ToastApi {
|
|
175
|
+
/** `toast('Saved')` or `toast({ message: 'Saved', variant: 'success' })`. */
|
|
176
|
+
(message: ReactNode, options?: ToastPresetOptions): string;
|
|
177
|
+
(options: SnackbarOptions): string;
|
|
178
|
+
/** Queue a fully customised toast and return its id. */
|
|
179
|
+
show(options: SnackbarOptions): string;
|
|
180
|
+
update(id: string, options: Partial<SnackbarOptions>): void;
|
|
181
|
+
dismiss(id?: string, reason?: SnackbarCloseReason): void;
|
|
182
|
+
dismissAll(reason?: SnackbarCloseReason): void;
|
|
183
|
+
success(message: ReactNode, options?: ToastPresetOptions): string;
|
|
184
|
+
error(message: ReactNode, options?: ToastPresetOptions): string;
|
|
185
|
+
warning(message: ReactNode, options?: ToastPresetOptions): string;
|
|
186
|
+
info(message: ReactNode, options?: ToastPresetOptions): string;
|
|
187
|
+
neutral(message: ReactNode, options?: ToastPresetOptions): string;
|
|
188
|
+
loading(message: ReactNode, options?: ToastPresetOptions): string;
|
|
189
|
+
custom(message: ReactNode, options?: ToastPresetOptions): string;
|
|
190
|
+
promise<T>(promise: Promise<T>, messages: SnackbarPromiseOptions<T>, options?: SnackbarOptions): Promise<T>;
|
|
191
|
+
/** The store behind the global API (same instance the provider renders). */
|
|
192
|
+
readonly store: SnackbarStore;
|
|
193
|
+
}
|
|
167
194
|
interface SnackbarHostProps {
|
|
168
195
|
store: SnackbarStore;
|
|
169
196
|
/** Maximum simultaneously visible snackbars per corner. */
|
|
@@ -218,6 +245,20 @@ interface SnackbarProviderProps extends Omit<SnackbarHostProps, 'store'> {
|
|
|
218
245
|
|
|
219
246
|
declare function createSnackbarStore(initialConfig?: SnackbarStoreConfig): SnackbarStore;
|
|
220
247
|
|
|
248
|
+
/**
|
|
249
|
+
* The store shared by the module-level `toast` API and any
|
|
250
|
+
* `<SnackbarProvider>` that is not given an explicit `store`.
|
|
251
|
+
*
|
|
252
|
+
* Created lazily so importing the package on the server has no side effects.
|
|
253
|
+
*/
|
|
254
|
+
declare function getDefaultStore(): SnackbarStore;
|
|
255
|
+
/**
|
|
256
|
+
* Swaps the global store. Useful for tests, isolating apps or wiring the
|
|
257
|
+
* global `toast` API to a store you created yourself.
|
|
258
|
+
* Pass `null` to go back to a fresh default store on next use.
|
|
259
|
+
*/
|
|
260
|
+
declare function setDefaultStore(store: SnackbarStore | null): void;
|
|
261
|
+
|
|
221
262
|
declare function SnackbarHost({ store, maxVisible, offset, gap, width, theme, container, pauseOnHover, pauseOnFocus, pauseOnDocumentHidden, swipeToDismiss, swipeThreshold, icons, closeIcon, closeLabel, regionLabel, className, style, zIndex, dir, }: SnackbarHostProps): react.ReactPortal | null;
|
|
222
263
|
|
|
223
264
|
declare function SnackbarProvider({ children, store: providedStore, position, duration, dismissible, progress, tone, size, maxVisible, ...hostProps }: SnackbarProviderProps): react.JSX.Element;
|
|
@@ -226,4 +267,18 @@ declare function useSnackbar(): SnackbarApi;
|
|
|
226
267
|
/** Low-level store access for subscriptions and advanced integrations. */
|
|
227
268
|
declare function useSnackbarStore(): SnackbarStore;
|
|
228
269
|
|
|
229
|
-
|
|
270
|
+
/**
|
|
271
|
+
* Fire-and-forget toast API that works anywhere — event handlers, data
|
|
272
|
+
* layers, non-React modules — as long as a `<SnackbarProvider>` (or a
|
|
273
|
+
* `<SnackbarHost store={getDefaultStore()} />`) is mounted.
|
|
274
|
+
*
|
|
275
|
+
* ```ts
|
|
276
|
+
* import { toast } from 'react-snackbar-glass';
|
|
277
|
+
*
|
|
278
|
+
* toast.success('Deployment complete.', { title: 'v1.4.0 is live' });
|
|
279
|
+
* toast.promise(save(), { loading: 'Saving…', success: 'Saved', error: 'Failed' });
|
|
280
|
+
* ```
|
|
281
|
+
*/
|
|
282
|
+
declare const toast: ToastApi;
|
|
283
|
+
|
|
284
|
+
export { type ResolvedSnackbarStoreConfig, type SnackbarAction, type SnackbarApi, type SnackbarCloseReason, SnackbarHost, type SnackbarHostProps, type SnackbarOptions, type SnackbarPhase, type SnackbarPosition, type SnackbarPromiseContent, type SnackbarPromiseOptions, SnackbarProvider, type SnackbarProviderProps, type SnackbarRecord, type SnackbarSize, type SnackbarStore, type SnackbarStoreConfig, type SnackbarTheme, type SnackbarTone, type SnackbarVariant, type ToastApi, type ToastPresetOptions, createSnackbarStore, getDefaultStore, setDefaultStore, toast, useSnackbar, useSnackbarStore };
|
package/dist/index.js
CHANGED
|
@@ -373,6 +373,16 @@ function createSnackbarStore(initialConfig = {}) {
|
|
|
373
373
|
setPageHidden
|
|
374
374
|
};
|
|
375
375
|
}
|
|
376
|
+
|
|
377
|
+
// src/core/defaultStore.ts
|
|
378
|
+
var defaultStore = null;
|
|
379
|
+
function getDefaultStore() {
|
|
380
|
+
if (!defaultStore) defaultStore = createSnackbarStore();
|
|
381
|
+
return defaultStore;
|
|
382
|
+
}
|
|
383
|
+
function setDefaultStore(store) {
|
|
384
|
+
defaultStore = store;
|
|
385
|
+
}
|
|
376
386
|
var strokeProps = {
|
|
377
387
|
fill: "none",
|
|
378
388
|
stroke: "currentColor",
|
|
@@ -881,14 +891,11 @@ function SnackbarProvider({
|
|
|
881
891
|
...hostProps
|
|
882
892
|
}) {
|
|
883
893
|
const store = useMemo(
|
|
884
|
-
() =>
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
tone,
|
|
890
|
-
size
|
|
891
|
-
}),
|
|
894
|
+
() => (
|
|
895
|
+
// Falling back to the shared default store is what makes the
|
|
896
|
+
// module-level `toast` API render without extra wiring.
|
|
897
|
+
providedStore ?? getDefaultStore()
|
|
898
|
+
),
|
|
892
899
|
// The store is intentionally created once per provider instance.
|
|
893
900
|
// Subsequent config changes are pushed below.
|
|
894
901
|
[providedStore]
|
|
@@ -905,19 +912,19 @@ function SnackbarProvider({
|
|
|
905
912
|
});
|
|
906
913
|
}, [store, position, duration, dismissible, progress, tone, size, maxVisible]);
|
|
907
914
|
const api = useMemo(() => {
|
|
908
|
-
const
|
|
915
|
+
const preset2 = (variant) => (message, options = {}) => store.show({ ...options, message, variant });
|
|
909
916
|
return {
|
|
910
917
|
show: store.show,
|
|
911
918
|
update: store.update,
|
|
912
919
|
dismiss: store.dismiss,
|
|
913
920
|
dismissAll: store.dismissAll,
|
|
914
921
|
promise: store.promise,
|
|
915
|
-
success:
|
|
916
|
-
error:
|
|
917
|
-
warning:
|
|
918
|
-
info:
|
|
919
|
-
neutral:
|
|
920
|
-
custom:
|
|
922
|
+
success: preset2("success"),
|
|
923
|
+
error: preset2("error"),
|
|
924
|
+
warning: preset2("warning"),
|
|
925
|
+
info: preset2("info"),
|
|
926
|
+
neutral: preset2("neutral"),
|
|
927
|
+
custom: preset2("custom"),
|
|
921
928
|
loading: (message, options = {}) => store.show({
|
|
922
929
|
...options,
|
|
923
930
|
message,
|
|
@@ -955,7 +962,47 @@ function useSnackbar() {
|
|
|
955
962
|
function useSnackbarStore() {
|
|
956
963
|
return useSnackbarContext().store;
|
|
957
964
|
}
|
|
965
|
+
function isOptionsObject(value) {
|
|
966
|
+
return typeof value === "object" && value !== null && !Array.isArray(value) && !isValidElement(value) && !("$$typeof" in value);
|
|
967
|
+
}
|
|
968
|
+
function preset(variant) {
|
|
969
|
+
return (message, options = {}) => getDefaultStore().show({ ...options, message, variant });
|
|
970
|
+
}
|
|
971
|
+
function createToast() {
|
|
972
|
+
const toast2 = ((content, options) => {
|
|
973
|
+
if (options === void 0 && isOptionsObject(content)) {
|
|
974
|
+
return getDefaultStore().show(content);
|
|
975
|
+
}
|
|
976
|
+
return getDefaultStore().show({
|
|
977
|
+
...options,
|
|
978
|
+
message: content
|
|
979
|
+
});
|
|
980
|
+
});
|
|
981
|
+
toast2.show = (options) => getDefaultStore().show(options);
|
|
982
|
+
toast2.update = (id, options) => getDefaultStore().update(id, options);
|
|
983
|
+
toast2.dismiss = (id, reason) => getDefaultStore().dismiss(id, reason);
|
|
984
|
+
toast2.dismissAll = (reason) => getDefaultStore().dismissAll(reason);
|
|
985
|
+
toast2.success = preset("success");
|
|
986
|
+
toast2.error = preset("error");
|
|
987
|
+
toast2.warning = preset("warning");
|
|
988
|
+
toast2.info = preset("info");
|
|
989
|
+
toast2.neutral = preset("neutral");
|
|
990
|
+
toast2.custom = preset("custom");
|
|
991
|
+
toast2.loading = (message, options = {}) => getDefaultStore().show({
|
|
992
|
+
...options,
|
|
993
|
+
message,
|
|
994
|
+
variant: "loading",
|
|
995
|
+
duration: options.duration !== void 0 ? options.duration : null
|
|
996
|
+
});
|
|
997
|
+
toast2.promise = (input, messages, options) => getDefaultStore().promise(input, messages, options);
|
|
998
|
+
Object.defineProperty(toast2, "store", {
|
|
999
|
+
get: getDefaultStore,
|
|
1000
|
+
enumerable: true
|
|
1001
|
+
});
|
|
1002
|
+
return toast2;
|
|
1003
|
+
}
|
|
1004
|
+
var toast = createToast();
|
|
958
1005
|
|
|
959
|
-
export { SnackbarHost, SnackbarProvider, createSnackbarStore, useSnackbar, useSnackbarStore };
|
|
1006
|
+
export { SnackbarHost, SnackbarProvider, createSnackbarStore, getDefaultStore, setDefaultStore, toast, useSnackbar, useSnackbarStore };
|
|
960
1007
|
//# sourceMappingURL=index.js.map
|
|
961
1008
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/createSnackbarStore.ts","../src/components/icons.tsx","../src/components/SnackbarItem.tsx","../src/SnackbarHost.tsx","../src/SnackbarProvider.tsx"],"names":["record","jsx","jsxs","useState","useRef","useEffect"],"mappings":";;;;;AAYA,IAAM,KAAA,GAAmC,MAAA,CAAO,MAAA,CAAO,EAAE,CAAA;AAEzD,IAAM,cAAA,GAA8C;AAAA,EAClD,QAAA,EAAU,cAAA;AAAA,EACV,QAAA,EAAU,GAAA;AAAA,EACV,WAAA,EAAa,IAAA;AAAA,EACb,QAAA,EAAU,IAAA;AAAA,EACV,IAAA,EAAM,OAAA;AAAA,EACN,IAAA,EAAM,IAAA;AAAA,EACN,UAAA,EAAY;AACd,CAAA;AAQA,IAAI,QAAA,GAAW,CAAA;AAEf,SAAS,QAAA,GAAmB;AAC1B,EAAA,QAAA,IAAY,CAAA;AACZ,EAAA,MAAM,MAAA,GAAS,KAAK,MAAA,EAAO,CAAE,SAAS,EAAE,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AACpD,EAAA,OAAO,CAAA,IAAA,EAAO,IAAA,CAAK,GAAA,EAAI,CAAE,QAAA,CAAS,EAAE,CAAC,CAAA,CAAA,EAAI,QAAA,CAAS,QAAA,CAAS,EAAE,CAAC,IAAI,MAAM,CAAA,CAAA;AAC1E;AAMA,SAAS,iBAAA,CACP,OACA,QAAA,EACQ;AACR,EAAA,IAAI,KAAA,KAAU,QAAW,OAAO,QAAA;AAChC,EAAA,IAAI,KAAA,KAAU,MAAM,OAAO,QAAA;AAC3B,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,KAAK,CAAA,IAAK,KAAA,IAAS,GAAG,OAAO,QAAA;AAClD,EAAA,OAAO,KAAK,GAAA,CAAI,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,KAAK,CAAC,CAAA;AACtC;AAEA,SAAS,eAAe,KAAA,EAA0C;AAChE,EAAA,OACE,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,QACV,CAAC,KAAA,CAAM,OAAA,CAAQ,KAAK,KACpB,CAAC,cAAA,CAAe,KAAK,CAAA,IACrB,EAAE,UAAA,IAAc,KAAA,CAAA;AAEpB;AAEA,SAAS,iBAAiB,OAAA,EAAmC;AAC3D,EAAA,IAAI,cAAA,CAAe,OAAO,CAAA,EAAG,OAAO,OAAA;AACpC,EAAA,OAAO,EAAE,SAAS,OAAA,EAAsC;AAC1D;AAEA,SAAS,cAAA,CACP,SACA,KAAA,EACiB;AACjB,EAAA,MAAM,WAAW,OAAO,OAAA,KAAY,UAAA,GAAa,OAAA,CAAQ,KAAK,CAAA,GAAI,OAAA;AAClE,EAAA,OAAO,iBAAiB,QAAQ,CAAA;AAClC;AAEO,SAAS,mBAAA,CACd,aAAA,GAAqC,EAAC,EACvB;AACf,EAAA,IAAI,MAAA,GAAsC;AAAA,IACxC,GAAG,cAAA;AAAA,IACH,GAAI,cAAc,QAAA,KAAa,MAAA,GAC3B,EAAE,QAAA,EAAU,aAAA,CAAc,UAAS,GACnC,IAAA;AAAA,IACJ,GAAI,aAAA,CAAc,QAAA,KAAa,MAAA,GAC3B;AAAA,MACE,QAAA,EAAU,iBAAA;AAAA,QACR,aAAA,CAAc,QAAA;AAAA,QACd,cAAA,CAAe;AAAA;AACjB,KACF,GACA,IAAA;AAAA,IACJ,GAAI,cAAc,WAAA,KAAgB,MAAA,GAC9B,EAAE,WAAA,EAAa,aAAA,CAAc,aAAY,GACzC,IAAA;AAAA,IACJ,GAAI,cAAc,QAAA,KAAa,MAAA,GAC3B,EAAE,QAAA,EAAU,aAAA,CAAc,UAAS,GACnC,IAAA;AAAA,IACJ,GAAI,cAAc,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,aAAA,CAAc,MAAK,GAAI,IAAA;AAAA,IACtE,GAAI,cAAc,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,aAAA,CAAc,MAAK,GAAI,IAAA;AAAA,IACtE,GAAI,aAAA,CAAc,UAAA,KAAe,MAAA,GAC7B,EAAE,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,aAAA,CAAc,UAAU,CAAC,GAAE,GAChE;AAAA,GACN;AAEA,EAAA,IAAI,OAAA,GAAqC,KAAA;AACzC,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAgB;AACtC,EAAA,MAAM,MAAA,uBAAa,GAAA,EAAwB;AAC3C,EAAA,MAAM,KAAA,uBAAY,GAAA,EAAY;AAC9B,EAAA,MAAM,YAAA,uBAAmB,GAAA,EAAyB;AAClD,EAAA,IAAI,UAAA,GAAa,KAAA;AAEjB,EAAA,MAAM,OAAO,MAAM;AACjB,IAAA,KAAA,MAAW,QAAA,IAAY,WAAW,QAAA,EAAS;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,EAAA,KAAe,OAAA,CAAQ,KAAK,CAAC,MAAA,KAAW,MAAA,CAAO,EAAA,KAAO,EAAE,CAAA;AAEtE,EAAA,MAAM,OAAA,GAAU,CAAC,EAAA,EAAY,MAAA,KAA2B;AACtD,IAAA,OAAA,GAAU,OAAA,CAAQ,IAAI,CAAC,OAAA,KAAa,QAAQ,EAAA,KAAO,EAAA,GAAK,SAAS,OAAQ,CAAA;AAAA,EAC3E,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,EAAA,KAAe;AAC9B,IAAA,MAAA,CAAO,OAAO,EAAE,CAAA;AAChB,IAAA,KAAA,CAAM,OAAO,EAAE,CAAA;AACf,IAAA,YAAA,CAAa,OAAO,EAAE,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAsB;AACvC,IAAA,IAAI,KAAA,CAAM,WAAW,IAAA,EAAM;AACzB,MAAA,YAAA,CAAa,MAAM,MAAM,CAAA;AACzB,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AAAA,IACjB;AACA,IAAA,IAAI,KAAA,CAAM,cAAc,IAAA,EAAM;AAC5B,MAAA,KAAA,CAAM,SAAA,GAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,aAAa,IAAA,CAAK,GAAA,EAAI,GAAI,KAAA,CAAM,SAAA,CAAU,CAAA;AAC9E,MAAA,KAAA,CAAM,SAAA,GAAY,IAAA;AAAA,IACpB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,CAAC,EAAA,EAAY,KAAA,KAAsB;AAClD,IAAA,KAAA,CAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,KAAA,CAAM,MAAA,GAAS,WAAW,MAAM;AAC9B,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,KAAA,CAAM,SAAA,GAAY,IAAA;AAClB,MAAA,KAAA,CAAM,SAAA,GAAY,CAAA;AAClB,MAAA,OAAA,CAAQ,IAAI,SAAS,CAAA;AAAA,IACvB,GAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,EACjC,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,EAAA,KAAe;AACjC,IAAA,MAAM,MAAA,GAAS,KAAK,EAAE,CAAA;AACtB,IAAA,IACE,CAAC,UACD,MAAA,CAAO,KAAA,KAAU,aACjB,CAAC,KAAA,CAAM,IAAI,EAAE,CAAA,IACb,OAAO,QAAA,KAAa,QAAA,IACpB,eACC,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA,EAAG,IAAA,IAAQ,KAAK,CAAA,EACpC;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,QAAA,GAAW,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AAC9B,IAAA,IAAI,QAAA,EAAU;AAEZ,MAAA,IAAI,QAAA,CAAS,MAAA,KAAW,IAAA,IAAQ,QAAA,CAAS,cAAc,IAAA,EAAM;AAC3D,QAAA,QAAA,CAAS,IAAI,QAAQ,CAAA;AAAA,MACvB;AACA,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,KAAA,GAAoB;AAAA,MACxB,WAAW,MAAA,CAAO,QAAA;AAAA,MAClB,SAAA,EAAW,IAAA;AAAA,MACX,MAAA,EAAQ;AAAA,KACV;AACA,IAAA,MAAA,CAAO,GAAA,CAAI,IAAI,KAAK,CAAA;AACpB,IAAA,QAAA,CAAS,IAAI,KAAK,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,EAAA,KAAe;AACjC,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AAC3B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,IAAI,KAAA,CAAM,MAAA,KAAW,IAAA,EAAM,YAAA,CAAa,MAAM,MAAM,CAAA;AACpD,MAAA,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,IAClB;AACA,IAAA,UAAA,CAAW,EAAE,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,EAAA,EAAY,MAAA,KAAoB;AACjD,IAAA,MAAM,MAAA,GAAS,KAAK,EAAE,CAAA;AACtB,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,MAAA,KAAW,MAAA,EAAQ;AACzC,IAAA,OAAA,CAAQ,EAAA,EAAI,EAAE,GAAG,MAAA,EAAQ,QAAQ,CAAA;AACjC,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,KAAA,GAAQ,CAAC,EAAA,EAAY,MAAA,GAAS,QAAA,KAAa;AAC/C,IAAA,MAAM,MAAA,GAAS,KAAK,EAAE,CAAA;AACtB,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,KAAU,SAAA,EAAW;AAE3C,IAAA,IAAI,OAAA,GAAU,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AACjC,IAAA,IAAI,CAAC,OAAA,EAAS;AACZ,MAAA,OAAA,uBAAc,GAAA,EAAI;AAClB,MAAA,YAAA,CAAa,GAAA,CAAI,IAAI,OAAO,CAAA;AAAA,IAC9B;AACA,IAAA,IAAI,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AACzB,IAAA,OAAA,CAAQ,IAAI,MAAM,CAAA;AAElB,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AAC3B,IAAA,IAAI,KAAA,YAAiB,KAAK,CAAA;AAC1B,IAAA,SAAA,CAAU,IAAI,IAAI,CAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,EAAY,MAAA,GAAS,QAAA,KAAa;AAChD,IAAA,MAAM,OAAA,GAAU,YAAA,CAAa,GAAA,CAAI,EAAE,CAAA;AACnC,IAAA,IAAI,CAAC,OAAA,IAAW,CAAC,OAAA,CAAQ,GAAA,CAAI,MAAM,CAAA,EAAG;AACtC,IAAA,OAAA,CAAQ,OAAO,MAAM,CAAA;AACrB,IAAA,IAAI,OAAA,CAAQ,OAAO,CAAA,EAAG;AAEtB,IAAA,YAAA,CAAa,OAAO,EAAE,CAAA;AACtB,IAAA,SAAA,CAAU,IAAI,KAAK,CAAA;AACnB,IAAA,UAAA,CAAW,EAAE,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,OAAA,GAAU,CAAC,EAAA,EAAY,MAAA,GAA8B,QAAA,KAAa;AACtE,IAAA,MAAM,MAAA,GAAS,KAAK,EAAE,CAAA;AACtB,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,KAAU,SAAA,EAAW;AAE3C,IAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AAC3B,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,SAAA,CAAU,KAAK,CAAA;AACf,MAAA,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,IAClB;AAGA,IAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG;AAClB,MAAA,OAAA,GAAU,QAAQ,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,OAAO,EAAE,CAAA;AACvD,MAAA,OAAA,CAAQ,EAAE,CAAA;AACV,MAAA,IAAA,EAAK;AACL,MAAA,MAAA,CAAO,OAAA,GAAU,QAAQ,EAAE,CAAA;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,YAAA,CAAa,OAAO,EAAE,CAAA;AACtB,IAAA,OAAA,CAAQ,EAAA,EAAI;AAAA,MACV,GAAG,MAAA;AAAA,MACH,KAAA,EAAO,SAAA;AAAA,MACP,WAAA,EAAa,MAAA;AAAA,MACb,MAAA,EAAQ;AAAA,KACT,CAAA;AACD,IAAA,IAAA,EAAK;AACL,IAAA,MAAA,CAAO,OAAA,GAAU,QAAQ,EAAE,CAAA;AAAA,EAC7B,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,MAAA,GAA8B,YAAA,KAAiB;AACjE,IAAA,MAAM,YAA+B,EAAC;AACtC,IAAA,MAAM,YAA8B,EAAC;AAErC,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,MAAA,CAAO,UAAU,SAAA,EAAW;AAC9B,QAAA,SAAA,CAAU,KAAK,MAAM,CAAA;AACrB,QAAA;AAAA,MACF;AAEA,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA;AAClC,MAAA,IAAI,KAAA,EAAO;AACT,QAAA,SAAA,CAAU,KAAK,CAAA;AACf,QAAA,MAAA,CAAO,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,MACzB;AAEA,MAAA,IAAI,CAAC,KAAA,CAAM,GAAA,CAAI,MAAA,CAAO,EAAE,CAAA,EAAG;AACzB,QAAA,OAAA,CAAQ,OAAO,EAAE,CAAA;AACjB,QAAA,SAAA,CAAU,KAAK,MAAM,MAAA,CAAO,UAAU,MAAA,EAAQ,MAAA,CAAO,EAAE,CAAC,CAAA;AACxD,QAAA;AAAA,MACF;AAEA,MAAA,YAAA,CAAa,MAAA,CAAO,OAAO,EAAE,CAAA;AAC7B,MAAA,SAAA,CAAU,IAAA,CAAK;AAAA,QACb,GAAG,MAAA;AAAA,QACH,KAAA,EAAO,SAAA;AAAA,QACP,WAAA,EAAa,MAAA;AAAA,QACb,MAAA,EAAQ;AAAA,OACT,CAAA;AACD,MAAA,SAAA,CAAU,KAAK,MAAM,MAAA,CAAO,UAAU,MAAA,EAAQ,MAAA,CAAO,EAAE,CAAC,CAAA;AAAA,IAC1D;AAEA,IAAA,OAAA,GAAU,SAAA;AACV,IAAA,IAAA,EAAK;AACL,IAAA,KAAA,MAAW,QAAA,IAAY,WAAW,QAAA,EAAS;AAAA,EAC7C,CAAA;AAEA,EAAA,MAAM,IAAA,GAAO,CAAC,OAAA,KAAqC;AACjD,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,EAAA,IAAM,QAAA,EAAS;AAClC,IAAA,MAAM,QAAA,GAAW,KAAK,EAAE,CAAA;AAExB,IAAA,IAAI,QAAA,EAAU;AACZ,MAAA,MAAA,CAAO,IAAI,OAAO,CAAA;AAClB,MAAA,MAAM,OAAA,GAAU,KAAK,EAAE,CAAA;AACvB,MAAA,IAAI,OAAA,IAAW,OAAA,CAAQ,KAAA,KAAU,SAAA,EAAW;AAC1C,QAAA,OAAA,GAAU,OAAA,CAAQ,GAAA;AAAA,UAAI,CAACA,OAAAA,KACrBA,OAAAA,CAAO,EAAA,KAAO,KACV,EAAE,GAAGA,OAAAA,EAAQ,KAAA,EAAO,SAAA,EAAW,WAAA,EAAa,MAAA,EAAW,MAAA,EAAQ,OAAM,GACrEA;AAAA,SACN;AACA,QAAA,YAAA,CAAa,OAAO,EAAE,CAAA;AACtB,QAAA,IAAA,EAAK;AACL,QAAA,UAAA,CAAW,EAAE,CAAA;AAAA,MACf;AACA,MAAA,OAAO,EAAA;AAAA,IACT;AAEA,IAAA,MAAM,MAAA,GAAyB;AAAA,MAC7B,EAAA;AAAA,MACA,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,SAAS,OAAA,CAAQ,OAAA;AAAA,MACjB,OAAA,EAAS,QAAQ,OAAA,IAAW,SAAA;AAAA,MAC5B,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ,MAAA,CAAO,IAAA;AAAA,MAC7B,IAAA,EAAM,OAAA,CAAQ,IAAA,IAAQ,MAAA,CAAO,IAAA;AAAA,MAC7B,QAAA,EAAU,iBAAA,CAAkB,OAAA,CAAQ,QAAA,EAAU,OAAO,QAAQ,CAAA;AAAA,MAC7D,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,MAAA,CAAO,QAAA;AAAA,MACrC,MAAM,OAAA,CAAQ,IAAA;AAAA,MACd,MAAA,EAAQ,QAAQ,MAAA,IAAU,IAAA;AAAA,MAC1B,WAAA,EAAa,OAAA,CAAQ,WAAA,IAAe,MAAA,CAAO,WAAA;AAAA,MAC3C,QAAA,EAAU,OAAA,CAAQ,QAAA,IAAY,MAAA,CAAO,QAAA;AAAA,MACrC,WAAW,OAAA,CAAQ,SAAA;AAAA,MACnB,OAAO,OAAA,CAAQ,KAAA;AAAA,MACf,SAAA,EAAW,KAAK,GAAA,EAAI;AAAA,MACpB,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,KAAA;AAAA,MACR,WAAA,EAAa,MAAA;AAAA,MACb,QAAQ,OAAA,CAAQ,MAAA;AAAA,MAChB,SAAS,OAAA,CAAQ;AAAA,KACnB;AAEA,IAAA,OAAA,GAAU,CAAC,GAAG,OAAA,EAAS,MAAM,CAAA;AAC7B,IAAA,IAAA,EAAK;AACL,IAAA,OAAO,EAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,MAAA,GAAS,CAAC,EAAA,EAAY,OAAA,KAA4C;AACtE,IAAA,MAAM,MAAA,GAAS,KAAK,EAAE,CAAA;AACtB,IAAA,IAAI,CAAC,MAAA,EAAQ;AAEb,IAAA,MAAM,IAAA,GAAuB;AAAA,MAC3B,GAAG,MAAA;AAAA,MACH,GAAI,QAAQ,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAM,GAAI,IAAA;AAAA,MAC7D,GAAI,QAAQ,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,OAAA,CAAQ,SAAQ,GAAI,IAAA;AAAA,MACnE,GAAI,QAAQ,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,OAAA,CAAQ,SAAQ,GAAI,IAAA;AAAA,MACnE,GAAI,QAAQ,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,OAAA,CAAQ,MAAK,GAAI,IAAA;AAAA,MAC1D,GAAI,QAAQ,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,OAAA,CAAQ,MAAK,GAAI,IAAA;AAAA,MAC1D,GAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,UAAS,GAAI,IAAA;AAAA,MACtE,GAAI,QAAQ,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,OAAA,CAAQ,MAAK,GAAI,IAAA;AAAA,MAC1D,GAAI,QAAQ,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAO,GAAI,IAAA;AAAA,MAChE,GAAI,QAAQ,WAAA,KAAgB,MAAA,GACxB,EAAE,WAAA,EAAa,OAAA,CAAQ,aAAY,GACnC,IAAA;AAAA,MACJ,GAAI,QAAQ,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,OAAA,CAAQ,UAAS,GAAI,IAAA;AAAA,MACtE,GAAI,QAAQ,SAAA,KAAc,MAAA,GAAY,EAAE,SAAA,EAAW,OAAA,CAAQ,WAAU,GAAI,IAAA;AAAA,MACzE,GAAI,QAAQ,KAAA,KAAU,MAAA,GAAY,EAAE,KAAA,EAAO,OAAA,CAAQ,OAAM,GAAI,IAAA;AAAA,MAC7D,GAAI,QAAQ,MAAA,KAAW,MAAA,GAAY,EAAE,MAAA,EAAQ,OAAA,CAAQ,QAAO,GAAI,IAAA;AAAA,MAChE,GAAI,QAAQ,OAAA,KAAY,MAAA,GAAY,EAAE,OAAA,EAAS,OAAA,CAAQ,SAAQ,GAAI,IAAA;AAAA,MACnE,GAAI,OAAA,CAAQ,QAAA,KAAa,MAAA,GACrB,EAAE,QAAA,EAAU,iBAAA,CAAkB,OAAA,CAAQ,QAAA,EAAU,MAAA,CAAO,QAAQ,CAAA,EAAE,GACjE;AAAA,KACN;AAEA,IAAA,MAAM,eAAA,GAAkB,IAAA,CAAK,QAAA,KAAa,MAAA,CAAO,QAAA;AACjD,IAAA,OAAA,CAAQ,IAAI,IAAI,CAAA;AAChB,IAAA,IAAA,EAAK;AAEL,IAAA,IACE,mBACA,IAAA,CAAK,KAAA,KAAU,aACf,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EACZ;AACA,MAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,QAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,CAAI,EAAE,CAAA;AAC3B,QAAA,IAAI,KAAA,EAAO;AACT,UAAA,SAAA,CAAU,KAAK,CAAA;AACf,UAAA,MAAA,CAAO,OAAO,EAAE,CAAA;AAAA,QAClB;AAAA,MACF,CAAA,MAAO;AACL,QAAA,UAAA,CAAW,EAAE,CAAA;AAAA,MACf;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,CAAC,EAAA,KAAe;AAClC,IAAA,IAAI,KAAA,CAAM,GAAA,CAAI,EAAE,CAAA,EAAG;AACnB,IAAA,MAAM,MAAA,GAAS,KAAK,EAAE,CAAA;AACtB,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,KAAU,SAAA,EAAW;AAC3C,IAAA,KAAA,CAAM,IAAI,EAAE,CAAA;AACZ,IAAA,MAAA,CAAO,SAAS,EAAE,CAAA;AAClB,IAAA,UAAA,CAAW,EAAE,CAAA;AAAA,EACf,CAAA;AAEA,EAAA,MAAM,YAAA,GAAe,CAAC,EAAA,KAAe;AACnC,IAAA,MAAM,MAAA,GAAS,KAAK,EAAE,CAAA;AACtB,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,KAAU,SAAA,EAAW;AAC3C,IAAA,OAAA,CAAQ,EAAE,CAAA;AACV,IAAA,OAAA,GAAU,QAAQ,MAAA,CAAO,CAAC,OAAA,KAAY,OAAA,CAAQ,OAAO,EAAE,CAAA;AACvD,IAAA,IAAA,EAAK;AAAA,EACP,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,MAAA,KAAoB;AACzC,IAAA,IAAI,eAAe,MAAA,EAAQ;AAC3B,IAAA,UAAA,GAAa,MAAA;AACb,IAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,MAAA,IAAI,MAAA,EAAQ;AACV,QAAA,KAAA,CAAM,MAAA,CAAO,IAAI,MAAM,CAAA;AAAA,MACzB,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,MAAA,CAAO,IAAI,MAAM,CAAA;AACxB,QAAA,UAAA,CAAW,OAAO,EAAE,CAAA;AAAA,MACtB;AAAA,IACF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAA+B;AAChD,IAAA,MAAA,GAAS;AAAA,MACP,GAAG,MAAA;AAAA,MACH,GAAI,MAAM,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,KAAA,CAAM,UAAS,GAAI,IAAA;AAAA,MAClE,GAAI,KAAA,CAAM,QAAA,KAAa,MAAA,GACnB;AAAA,QACE,QAAA,EAAU,iBAAA,CAAkB,KAAA,CAAM,QAAA,EAAU,OAAO,QAAQ;AAAA,OAC7D,GACA,IAAA;AAAA,MACJ,GAAI,MAAM,WAAA,KAAgB,MAAA,GACtB,EAAE,WAAA,EAAa,KAAA,CAAM,aAAY,GACjC,IAAA;AAAA,MACJ,GAAI,MAAM,QAAA,KAAa,MAAA,GAAY,EAAE,QAAA,EAAU,KAAA,CAAM,UAAS,GAAI,IAAA;AAAA,MAClE,GAAI,MAAM,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,KAAA,CAAM,MAAK,GAAI,IAAA;AAAA,MACtD,GAAI,MAAM,IAAA,KAAS,MAAA,GAAY,EAAE,IAAA,EAAM,KAAA,CAAM,MAAK,GAAI,IAAA;AAAA,MACtD,GAAI,KAAA,CAAM,UAAA,KAAe,MAAA,GACrB,EAAE,UAAA,EAAY,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,KAAA,CAAM,KAAA,CAAM,UAAU,CAAC,GAAE,GACxD;AAAA,KACN;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAU,CACd,KAAA,EACA,QAAA,EACA,OAAA,GAA2B,EAAC,KACb;AACf,IAAA,MAAM,cAAA,GAAiB,gBAAA,CAAiB,QAAA,CAAS,OAAA,IAAW,eAAU,CAAA;AACtE,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,EAAA,IAAM,QAAA,EAAS;AAElC,IAAA,IAAA,CAAK;AAAA,MACH,WAAA,EAAa,KAAA;AAAA,MACb,GAAG,OAAA;AAAA,MACH,GAAG,cAAA;AAAA,MACH,EAAA;AAAA,MACA,QAAA,EACE,cAAA,CAAe,QAAA,KAAa,MAAA,GAAY,eAAe,QAAA,GAAW,IAAA;AAAA,MACpE,OAAA,EAAS,eAAe,OAAA,IAAW,SAAA;AAAA,MACnC,QAAA,EAAU,eAAe,QAAA,IAAY;AAAA,KACtC,CAAA;AAED,IAAA,MAAM,MAAA,GAAS,CACb,OAAA,EACA,KAAA,EACA,OAAA,KACG;AACH,MAAA,MAAM,IAAA,GAAO,cAAA,CAAe,OAAA,EAAS,KAAK,CAAA;AAC1C,MAAA,MAAA,CAAO,EAAA,EAAI;AAAA,QACT,GAAG,IAAA;AAAA,QACH,OAAA,EAAS,KAAK,OAAA,IAAW,OAAA;AAAA,QACzB,QAAA,EACE,IAAA,CAAK,QAAA,KAAa,MAAA,GACd,IAAA,CAAK,WACL,OAAA,CAAQ,QAAA,KAAa,MAAA,GACnB,OAAA,CAAQ,QAAA,GACR;AAAA,OACT,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,OAAO,KAAA,CAAM,IAAA;AAAA,MACX,CAAC,KAAA,KAAU;AACT,QAAA,MAAA,CAAO,QAAA,CAAS,OAAA,EAAS,KAAA,EAAO,SAAS,CAAA;AACzC,QAAA,OAAO,KAAA;AAAA,MACT,CAAA;AAAA,MACA,CAAC,KAAA,KAAmB;AAClB,QAAA,MAAA,CAAO,QAAA,CAAS,KAAA,EAAO,KAAA,EAAO,OAAO,CAAA;AACrC,QAAA,MAAM,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAU,QAAA,EAAU;AAClB,MAAA,SAAA,CAAU,IAAI,QAAQ,CAAA;AACtB,MAAA,OAAO,MAAM,SAAA,CAAU,MAAA,CAAO,QAAQ,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,aAAa,MAAM,OAAA;AAAA,IACnB,mBAAmB,MAAM,KAAA;AAAA,IACzB,SAAA,EAAW,OAAO,EAAE,GAAG,MAAA,EAAO,CAAA;AAAA,IAC9B,SAAA;AAAA,IACA,KAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AACF;ACvfA,IAAM,WAAA,GAAc;AAAA,EAClB,IAAA,EAAM,MAAA;AAAA,EACN,MAAA,EAAQ,cAAA;AAAA,EACR,WAAA,EAAa,GAAA;AAAA,EACb,aAAA,EAAe,OAAA;AAAA,EACf,cAAA,EAAgB;AAClB,CAAA;AAEA,IAAM,QAAA,mBACJ,IAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,aAAA,EAAY,MAAA,EAC1D,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,WAAA;AAAA,MACJ,CAAA,EAAE;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA,CAAC,MAAA,EAAA,EAAM,GAAG,WAAA,EAAa,GAAE,+BAAA,EAAgC;AAAA,CAAA,EAC3D,CAAA;AAGF,IAAM,4BACJ,GAAA,CAAC,KAAA,EAAA,EAAI,SAAQ,WAAA,EAAY,KAAA,EAAM,MAAK,MAAA,EAAO,IAAA,EAAK,eAAY,MAAA,EAC1D,QAAA,kBAAA,GAAA,CAAC,UAAM,GAAG,WAAA,EAAa,GAAE,0BAAA,EAA2B,WAAA,EAAa,GAAG,CAAA,EACtE,CAAA;AAGF,IAAM,SAAA,mBACJ,IAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,aAAA,EAAY,MAAA,EAC1D,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAQ,GAAG,WAAA,EAAa,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,KAAA,EAAM,CAAA;AAAA,kBACjD,GAAA,CAAC,MAAA,EAAA,EAAM,GAAG,WAAA,EAAa,GAAE,aAAA,EAAc,CAAA;AAAA,kBACvC,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,IAAG,MAAA,EAAO,CAAA,EAAE,MAAA,EAAO,IAAA,EAAK,cAAA,EAAe;AAAA,CAAA,EACzD,CAAA;AAGF,IAAM,WAAA,mBACJ,IAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,aAAA,EAAY,MAAA,EAC1D,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,WAAA;AAAA,MACJ,CAAA,EAAE;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA,CAAC,MAAA,EAAA,EAAM,GAAG,WAAA,EAAa,GAAE,aAAA,EAAc,CAAA;AAAA,kBACvC,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,IAAG,MAAA,EAAO,CAAA,EAAE,MAAA,EAAO,IAAA,EAAK,cAAA,EAAe;AAAA,CAAA,EACzD,CAAA;AAGF,IAAM,QAAA,mBACJ,IAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,aAAA,EAAY,MAAA,EAC1D,QAAA,EAAA;AAAA,kBAAA,GAAA,CAAC,QAAA,EAAA,EAAQ,GAAG,WAAA,EAAa,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,KAAA,EAAM,CAAA;AAAA,kBACjD,GAAA,CAAC,MAAA,EAAA,EAAM,GAAG,WAAA,EAAa,GAAE,aAAA,EAAc,CAAA;AAAA,kBACvC,GAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,IAAG,KAAA,EAAM,CAAA,EAAE,MAAA,EAAO,IAAA,EAAK,cAAA,EAAe;AAAA,CAAA,EACxD,CAAA;AAGF,IAAM,WAAA,mBACJ,IAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,OAAA,EAAQ,WAAA;AAAA,IACR,KAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAO,IAAA;AAAA,IACP,aAAA,EAAY,MAAA;AAAA,IACZ,SAAA,EAAU,eAAA;AAAA,IAEV,QAAA,EAAA;AAAA,sBAAA,GAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,EAAA,EAAG,IAAA;AAAA,UACH,EAAA,EAAG,IAAA;AAAA,UACH,CAAA,EAAE,KAAA;AAAA,UACF,OAAA,EAAQ,MAAA;AAAA,UACR,WAAA,EAAa;AAAA;AAAA,OACf;AAAA,sBACA,GAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACE,GAAG,WAAA;AAAA,UACJ,CAAA,EAAE,+BAAA;AAAA,UACF,WAAA,EAAa;AAAA;AAAA;AACf;AAAA;AACF,CAAA;AAGF,IAAM,SAAA,mBACJ,IAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,aAAA,EAAY,MAAA,EAC1D,QAAA,EAAA;AAAA,kBAAA,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACE,GAAG,WAAA;AAAA,MACJ,CAAA,EAAE;AAAA;AAAA,GACJ;AAAA,kBACA,GAAA,CAAC,MAAA,EAAA,EAAM,GAAG,WAAA,EAAa,GAAE,2FAAA,EAA4F;AAAA,CAAA,EACvH,CAAA;AAGK,IAAM,YAAA,GAAmD;AAAA,EAC9D,OAAA,EAAS,QAAA;AAAA,EACT,OAAA,EAAS,SAAA;AAAA,EACT,KAAA,EAAO,SAAA;AAAA,EACP,OAAA,EAAS,WAAA;AAAA,EACT,IAAA,EAAM,QAAA;AAAA,EACN,OAAA,EAAS,WAAA;AAAA,EACT,MAAA,EAAQ;AACV,CAAA;AAEO,IAAM,gBAAA,mBACX,GAAA,CAAC,KAAA,EAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,OAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,aAAA,EAAY,MAAA,EAC1D,QAAA,kBAAA,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,IAAA,EAAK,MAAA;AAAA,IACL,MAAA,EAAO,cAAA;AAAA,IACP,WAAA,EAAY,KAAA;AAAA,IACZ,aAAA,EAAc,OAAA;AAAA,IACd,CAAA,EAAE;AAAA;AACJ,CAAA,EACF,CAAA;ACvEK,SAAS,YAAA,CAAa;AAAA,EAC3B,MAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA,cAAA;AAAA,EACA;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAAS,CAAC,CAAA;AACpC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAC9C,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAI,SAAS,KAAK,CAAA;AACxD,EAAA,MAAM,OAAA,GAAU,OAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,OAAO,CAAC,CAAA;AACzB,EAAA,MAAM,WAAA,GAAc,OAAO,KAAK,CAAA;AAChC,EAAA,MAAM,aAAA,GAAgB,OAAO,KAAK,CAAA;AAClC,EAAA,MAAM,UAAA,GAAa,OAAuB,IAAI,CAAA;AAE9C,EAAA,MAAM,EAAE,IAAI,KAAA,EAAO,MAAA,EAAQ,OAAO,OAAA,EAAS,OAAA,EAAS,UAAS,GAAI,MAAA;AAEjE,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,KAAA,CAAM,YAAY,EAAE,CAAA;AAAA,EACtB,CAAA,EAAG,CAAC,KAAA,EAAO,EAAE,CAAC,CAAA;AAEd,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,UAAU,SAAA,EAAW;AACzB,IAAA,MAAM,UAAU,UAAA,CAAW,MAAM,MAAM,YAAA,CAAa,EAAE,GAAG,GAAG,CAAA;AAC5D,IAAA,OAAO,MAAM,aAAa,OAAO,CAAA;AAAA,EACnC,CAAA,EAAG,CAAC,KAAA,EAAO,KAAA,EAAO,EAAE,CAAC,CAAA;AAErB,EAAA,MAAM,YAAY,MAAM;AACtB,IAAA,QAAA,CAAS,OAAA,GAAU,CAAA;AACnB,IAAA,WAAA,CAAY,OAAA,GAAU,KAAA;AACtB,IAAA,QAAA,CAAS,CAAC,CAAA;AACV,IAAA,WAAA,CAAY,KAAK,CAAA;AAAA,EACnB,CAAA;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,KAAA,CAAM,KAAA,CAAM,IAAI,MAAM,CAAA;AAAA,EACxB,CAAA;AAEA,EAAA,MAAM,gBAAgB,MAAM;AAC1B,IAAA,KAAA,CAAM,MAAA,CAAO,IAAI,MAAM,CAAA;AAAA,EACzB,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAA6C;AACtE,IAAA,aAAA,CAAc,OAAA,GAAU,KAAA;AACxB,IAAA,IAAI,CAAC,cAAA,IAAkB,KAAA,KAAU,SAAA,EAAW;AAC5C,IAAA,IAAI,KAAA,CAAM,WAAA,KAAgB,OAAA,IAAW,KAAA,CAAM,WAAW,CAAA,EAAG;AAEzD,IAAA,MAAM,SAAS,KAAA,CAAM,MAAA;AACrB,IAAA,IACE,MAAA,CAAO,OAAA;AAAA,MACL;AAAA,KACF,EACA;AACA,MAAA;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,OAAA,GAAU;AAAA,MAChB,WAAW,KAAA,CAAM,SAAA;AAAA,MACjB,QAAQ,KAAA,CAAM,OAAA;AAAA,MACd,QAAQ,KAAA,CAAM,OAAA;AAAA,MACd,IAAA,EAAM;AAAA,KACR;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,iBAAA,GAAoB,CAAC,KAAA,KAA6C;AACtE,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,MAAM,EAAA,GAAK,KAAA,CAAM,OAAA,GAAU,OAAA,CAAQ,MAAA;AACnC,IAAA,MAAM,EAAA,GAAK,KAAA,CAAM,OAAA,GAAU,OAAA,CAAQ,MAAA;AAEnC,IAAA,IAAI,OAAA,CAAQ,SAAS,SAAA,EAAW;AAC9B,MAAA,IAAI,IAAA,CAAK,IAAI,EAAE,CAAA,GAAI,KAAK,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,GAAI,CAAA,EAAG;AAC1C,MAAA,IAAI,KAAK,GAAA,CAAI,EAAE,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA,EAAG;AAE/B,QAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,QAAA;AAAA,MACF;AACA,MAAA,OAAA,CAAQ,IAAA,GAAO,GAAA;AACf,MAAA,WAAA,CAAY,OAAA,GAAU,IAAA;AACtB,MAAA,WAAA,CAAY,IAAI,CAAA;AAChB,MAAA,YAAA,EAAa;AACb,MAAA,UAAA,CAAW,OAAA,EAAS,iBAAA,GAAoB,KAAA,CAAM,SAAS,CAAA;AAAA,IACzD;AAEA,IAAA,IAAI,KAAA,CAAM,UAAA,EAAY,KAAA,CAAM,cAAA,EAAe;AAC3C,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,CAAI,EAAE,CAAA;AAC5B,IAAA,MAAM,SAAS,QAAA,GAAW,EAAA,GAAK,EAAA,GAAA,CAAM,QAAA,GAAW,MAAM,IAAA,GAAO,QAAA;AAC7D,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,CAAK,EAAE,CAAA,GAAI,MAAA;AAC7B,IAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AACnB,IAAA,QAAA,CAAS,IAAI,CAAA;AACb,IAAA,IAAI,QAAA,GAAW,CAAA,EAAG,aAAA,CAAc,OAAA,GAAU,IAAA;AAAA,EAC5C,CAAA;AAEA,EAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAA6C;AAClE,IAAA,MAAM,UAAU,OAAA,CAAQ,OAAA;AACxB,IAAA,IAAI,CAAC,OAAA,EAAS;AAEd,IAAA,IAAI,YAAY,OAAA,EAAS;AACvB,MAAA,MAAM,aAAA,GAAgB,IAAA,CAAK,GAAA,CAAI,QAAA,CAAS,OAAO,CAAA,IAAK,cAAA;AACpD,MAAA,SAAA,EAAU;AACV,MAAA,aAAA,EAAc;AACd,MAAA,IAAI,UAAA,CAAW,OAAA,EAAS,iBAAA,GAAoB,OAAA,CAAQ,SAAS,CAAA,EAAG;AAC9D,QAAA,UAAA,CAAW,OAAA,CAAQ,qBAAA,CAAsB,OAAA,CAAQ,SAAS,CAAA;AAAA,MAC5D;AACA,MAAA,IAAI,aAAA,EAAe;AACjB,QAAA,aAAA,CAAc,OAAA,GAAU,IAAA;AACxB,QAAA,KAAA,CAAM,OAAA,CAAQ,IAAI,OAAO,CAAA;AAAA,MAC3B;AAAA,IACF,CAAA,MAAO;AACL,MAAA,SAAA,EAAU;AAAA,IACZ;AAEA,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAClB,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,eAAA,EAAiB,aAAA,EAAc;AAAA,EACpD,CAAA;AAEA,EAAA,MAAM,2BAA2B,MAAM;AACrC,IAAA,IAAI,CAAC,YAAY,OAAA,EAAS;AAC1B,IAAA,SAAA,EAAU;AACV,IAAA,aAAA,EAAc;AACd,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,EACpB,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAA0C;AACpE,IAAA,IAAI,KAAA,CAAM,MAAA,KAAW,KAAA,CAAM,aAAA,EAAe;AAC1C,IAAA,IAAI,KAAA,KAAU,SAAA,EAAW,KAAA,CAAM,YAAA,CAAa,EAAE,CAAA;AAAA,EAChD,CAAA;AAEA,EAAA,MAAM,eAAe,YAAY;AAC/B,IAAA,IAAI,CAAC,UAAU,aAAA,EAAe;AAE9B,IAAA,MAAM,MAAA,GAAS,MAAA,CAAO,OAAA,GAAU,EAAE,CAAA;AAClC,IAAA,IAAI,MAAA,IAAU,OAAO,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AAC/C,MAAA,gBAAA,CAAiB,IAAI,CAAA;AACrB,MAAA,IAAI;AACF,QAAA,MAAM,MAAA;AAAA,MACR,CAAA,SAAE;AACA,QAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,MACxB;AAAA,IACF;AAEA,IAAA,IAAI,OAAO,YAAA,KAAiB,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAAA,EAC/D,CAAA;AAEA,EAAA,MAAM,UAAA,GAAa,CAAC,KAAA,KAAsC;AACxD,IAAA,IAAI,CAAC,YAAA,EAAc;AACnB,IAAA,IAAI,CAAC,KAAA,CAAM,aAAA,CAAc,QAAA,CAAS,KAAA,CAAM,aAA4B,CAAA,EAAG;AACrE,MAAA,KAAA,CAAM,MAAA,CAAO,IAAI,OAAO,CAAA;AAAA,IAC1B;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,YAAA,GACJ,MAAA,CAAO,IAAA,KAAS,MAAA,GACX,KAAA,GAAQ,OAAO,CAAA,IAAK,YAAA,CAAa,OAAO,CAAA,GACzC,MAAA,CAAO,IAAA;AACb,EAAA,MAAM,QAAA,GAAW,OAAO,IAAA,KAAS,KAAA;AACjC,EAAA,MAAM,eACJ,MAAA,CAAO,QAAA,IAAY,OAAO,QAAA,CAAS,QAAQ,KAAK,QAAA,GAAW,CAAA;AAE7D,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ,GAAG,MAAA,CAAO,KAAA;AAAA,IACV,cAAA,EAAgB,GAAG,KAAK,CAAA,EAAA,CAAA;AAAA,IACxB,oBAAA,EAAsB,MAAA;AAAA,MACpB,CAAA,GAAI,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,KAAK,CAAA,GAAI,KAAK,IAAI;AAAA;AAC1C,GACF;AAEA,EAAA,uBACEC,GAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,WAAW,MAAA,CAAO,SAAA,GAAY,IAAI,MAAA,CAAO,SAAS,KAAK,EAAE,CAAA,CAAA;AAAA,MACpE,cAAA,EAAc,OAAA;AAAA,MACd,aAAW,MAAA,CAAO,IAAA;AAAA,MAClB,aAAW,MAAA,CAAO,IAAA;AAAA,MAClB,YAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAa,MAAA,CAAO,MAAA,GAAS,MAAA,GAAS,OAAA;AAAA,MACtC,eAAA,EAAe,WAAW,MAAA,GAAS,OAAA;AAAA,MACnC,eAAA,EAAe,WAAW,MAAA,GAAS,OAAA;AAAA,MACnC,kBAAA,EAAkB,MAAA,CAAO,WAAA,GAAc,MAAA,GAAS,OAAA;AAAA,MAChD,eAAa,MAAA,CAAO,EAAA;AAAA,MACpB,iBAAe,MAAA,CAAO,QAAA;AAAA,MACtB,KAAA;AAAA,MACA,IAAA,EAAM,OAAA,KAAY,OAAA,GAAU,OAAA,GAAU,QAAA;AAAA,MACtC,WAAA,EAAW,OAAA,KAAY,OAAA,GAAU,WAAA,GAAc,QAAA;AAAA,MAC/C,aAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAW,aAAA,IAAiB,OAAA,KAAY,SAAA,GAAY,IAAA,GAAO,MAAA;AAAA,MAC3D,gBAAgB,MAAM;AACpB,QAAA,IAAI,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,EAAA,EAAI,OAAO,CAAA;AAAA,MAC3C,CAAA;AAAA,MACA,gBAAgB,MAAM;AACpB,QAAA,IAAI,YAAA,EAAc,KAAA,CAAM,MAAA,CAAO,EAAA,EAAI,OAAO,CAAA;AAAA,MAC5C,CAAA;AAAA,MACA,SAAS,MAAM;AACb,QAAA,IAAI,YAAA,EAAc,KAAA,CAAM,KAAA,CAAM,EAAA,EAAI,OAAO,CAAA;AAAA,MAC3C,CAAA;AAAA,MACA,MAAA,EAAQ,UAAA;AAAA,MACR,SAAA,EAAW,CAAC,KAAA,KAAU;AACpB,QAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,MAAA,CAAO,WAAA,EAAa;AAChD,UAAA,KAAA,CAAM,eAAA,EAAgB;AACtB,UAAA,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAAA,QAC5B;AAAA,MACF,CAAA;AAAA,MACA,cAAA,EAAgB,kBAAA;AAAA,MAEhB,QAAA,kBAAAC,IAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,GAAA,EAAK,UAAA;AAAA,UACL,SAAA,EAAU,mBAAA;AAAA,UACV,cAAA,EAAgB,CAAC,KAAA,KAAU;AACzB,YAAA,IAAI,CAAC,cAAc,OAAA,EAAS;AAC5B,YAAA,aAAA,CAAc,OAAA,GAAU,KAAA;AACxB,YAAA,KAAA,CAAM,cAAA,EAAe;AACrB,YAAA,KAAA,CAAM,eAAA,EAAgB;AAAA,UACxB,CAAA;AAAA,UACA,aAAA,EAAe,iBAAA;AAAA,UACf,aAAA,EAAe,iBAAA;AAAA,UACf,WAAA,EAAa,aAAA;AAAA,UACb,eAAA,EAAiB,aAAA;AAAA,UACjB,oBAAA,EAAsB,wBAAA;AAAA,UAErB,QAAA,EAAA;AAAA,YAAA,QAAA,mBACCD,IAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kBAAiB,aAAA,EAAY,MAAA,EAC1C,wBACH,CAAA,GACE,IAAA;AAAA,4BAEJC,IAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,mBAAA;AAAA,gBACV,gBAAA,EAAgB,KAAA,KAAU,MAAA,IAAa,KAAA,KAAU,OAAO,MAAA,GAAS,OAAA;AAAA,gBAEhE,QAAA,EAAA;AAAA,kBAAA,KAAA,KAAU,MAAA,IAAa,UAAU,IAAA,mBAChCD,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBAAA,EAAmB,QAAA,EAAA,KAAA,EAAM,CAAA,GACtC,IAAA;AAAA,kBACH,OAAA,KAAY,MAAA,IAAa,OAAA,KAAY,IAAA,mBACpCA,IAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mBAAA,EAAqB,QAAA,EAAA,OAAA,EAAQ,CAAA,GAC1C,IAAA;AAAA,kBACH,yBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBACb,QAAA,kBAAAC,IAAAA;AAAA,oBAAC,QAAA;AAAA,oBAAA;AAAA,sBACC,IAAA,EAAK,QAAA;AAAA,sBACL,SAAA,EAAU,YAAA;AAAA,sBACV,OAAA,EAAS,YAAA;AAAA,sBACT,QAAA,EAAU,aAAA;AAAA,sBACV,aAAW,aAAA,IAAiB,MAAA;AAAA,sBAE3B,QAAA,EAAA;AAAA,wBAAA,aAAA,mBACCD,GAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,qBAAA,EAAsB,aAAA,EAAY,QAAO,CAAA,GACvD,IAAA;AAAA,wCACJA,GAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM;AAAA;AAAA;AAAA,qBAExB,CAAA,GACE;AAAA;AAAA;AAAA,aACN;AAAA,YAEC,MAAA,CAAO,8BACNA,GAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,IAAA,EAAK,QAAA;AAAA,gBACL,SAAA,EAAU,WAAA;AAAA,gBACV,YAAA,EAAY,UAAA;AAAA,gBACZ,OAAA,EAAS,MAAM,KAAA,CAAM,OAAA,CAAQ,IAAI,QAAQ,CAAA;AAAA,gBAExC,QAAA,EAAA,SAAA,IAAa;AAAA;AAAA,aAChB,GACE,IAAA;AAAA,YAEH,YAAA,mBACCA,GAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,cAAA,EAAe,aAAA,EAAY,QACxC,QAAA,kBAAAA,GAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBAEC,SAAA,EAAU,mBAAA;AAAA,gBACV,KAAA,EAAO,EAAE,iBAAA,EAAmB,CAAA,EAAG,QAAQ,CAAA,EAAA,CAAA;AAAK,eAAA;AAAA,cAFvC;AAAA,eAIT,CAAA,GACE;AAAA;AAAA;AAAA;AACN;AAAA,GACF;AAEJ;AC7SA,IAAM,SAAA,GAAyC;AAAA,EAC7C,UAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA;AAEO,SAAS,YAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,UAAA,GAAa,CAAA;AAAA,EACb,MAAA,GAAS,EAAA;AAAA,EACT,GAAA,GAAM,EAAA;AAAA,EACN,KAAA,GAAQ,GAAA;AAAA,EACR,KAAA,GAAQ,MAAA;AAAA,EACR,SAAA;AAAA,EACA,YAAA,GAAe,IAAA;AAAA,EACf,YAAA,GAAe,IAAA;AAAA,EACf,qBAAA,GAAwB,IAAA;AAAA,EACxB,cAAA,GAAiB,IAAA;AAAA,EACjB,cAAA,GAAiB,EAAA;AAAA,EACjB,KAAA;AAAA,EACA,SAAA;AAAA,EACA,UAAA,GAAa,sBAAA;AAAA,EACb,WAAA,GAAc,eAAA;AAAA,EACd,SAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA,GAAS,SAAA;AAAA,EACT;AACF,CAAA,EAAsB;AACpB,EAAA,MAAM,OAAA,GAAU,oBAAA;AAAA,IACd,KAAA,CAAM,SAAA;AAAA,IACN,KAAA,CAAM,WAAA;AAAA,IACN,KAAA,CAAM;AAAA,GACR;AACA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIE,SAA6B,IAAI,CAAA;AACrE,EAAA,MAAM,UAAA,GAAaC,MAAAA,iBAAO,IAAI,GAAA,EAAoC,CAAA;AAClE,EAAA,MAAM,OAAA,GAAUA,MAAAA,iBAAO,IAAI,GAAA,EAAqB,CAAA;AAEhD,EAAAC,UAAU,MAAM;AACd,IAAA,IAAI,OAAO,aAAa,WAAA,EAAa;AACrC,IAAA,MAAM,SACJ,OAAO,SAAA,KAAc,aACjB,SAAA,EAAU,GACV,aAAa,QAAA,CAAS,IAAA;AAC5B,IAAA,aAAA,CAAc,MAAM,CAAA;AACpB,IAAA,OAAO,MAAM,cAAc,IAAI,CAAA;AAAA,EACjC,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAAA,UAAU,MAAM;AACd,IAAA,IAAI,CAAC,qBAAA,IAAyB,OAAO,QAAA,KAAa,WAAA,EAAa;AAE/D,IAAA,MAAM,OAAO,MAAM,KAAA,CAAM,aAAA,CAAc,QAAA,CAAS,oBAAoB,QAAQ,CAAA;AAC5E,IAAA,IAAA,EAAK;AACL,IAAA,QAAA,CAAS,gBAAA,CAAiB,oBAAoB,IAAI,CAAA;AAClD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,oBAAoB,IAAI,CAAA;AACrD,MAAA,KAAA,CAAM,cAAc,KAAK,CAAA;AAAA,IAC3B,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,KAAA,EAAO,qBAAqB,CAAC,CAAA;AAIjC,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,IAAI,CAAC,UAAA,EAAY;AACf,MAAA,OAAA,CAAQ,QAAQ,KAAA,EAAM;AACtB,MAAA;AAAA,IACF;AACA,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AAEnC,IAAA,MAAM,OAAA,GACJ,OAAO,MAAA,CAAO,UAAA,KAAe,cAC7B,MAAA,CAAO,UAAA,CAAW,kCAAkC,CAAA,CAAE,OAAA;AACxD,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAoB;AAErC,IAAA,KAAA,MAAW,MAAA,IAAU,UAAA,CAAW,OAAA,CAAQ,MAAA,EAAO,EAAG;AAChD,MAAA,MAAM,SAAA,GAAY,MAAA,CAAO,qBAAA,EAAsB,CAAE,GAAA;AACjD,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,gBAAA,CAA8B,eAAe,CAAA;AAElE,MAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,QAAA,MAAM,EAAA,GAAK,KAAK,OAAA,CAAQ,KAAA;AACxB,QAAA,IAAI,CAAC,EAAA,EAAI;AAET,QAAA,MAAM,GAAA,GAAM,YAAY,IAAA,CAAK,SAAA;AAC7B,QAAA,IAAA,CAAK,GAAA,CAAI,IAAI,GAAG,CAAA;AAEhB,QAAA,MAAM,QAAA,GAAW,OAAA,CAAQ,OAAA,CAAQ,GAAA,CAAI,EAAE,CAAA;AACvC,QAAA,IACE,OAAA,IACA,QAAA,KAAa,MAAA,IACb,IAAA,CAAK,OAAA,CAAQ,UAAU,SAAA,IACvB,OAAO,IAAA,CAAK,OAAA,KAAY,UAAA,EACxB;AACA,UAAA;AAAA,QACF;AAEA,QAAA,MAAM,QAAQ,QAAA,GAAW,GAAA;AACzB,QAAA,IAAI,IAAA,CAAK,GAAA,CAAI,KAAK,CAAA,GAAI,GAAA,EAAK;AAE3B,QAAA,IAAA,CAAK,OAAA;AAAA,UACH;AAAA,YACE,EAAE,SAAA,EAAW,CAAA,eAAA,EAAkB,KAAK,CAAA,MAAA,CAAA,EAAS;AAAA,YAC7C,EAAE,WAAW,sBAAA;AAAuB,WACtC;AAAA,UACA;AAAA,YACE,QAAA,EAAU,GAAA;AAAA,YACV,MAAA,EAAQ;AAAA;AACV,SACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,OAAA,CAAQ,OAAA,GAAU,IAAA;AAAA,EACpB,CAAC,CAAA;AAED,EAAA,IAAI,CAAC,YAAY,OAAO,IAAA;AAExB,EAAA,MAAM,UAAA,uBAAiB,GAAA,EAAwC;AAC/D,EAAA,KAAA,MAAW,UAAU,OAAA,EAAS;AAC5B,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,GAAA,CAAI,MAAA,CAAO,QAAQ,CAAA;AAC7C,IAAA,IAAI,MAAA,EAAQ,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAAA,oBACd,GAAA,CAAI,MAAA,CAAO,QAAA,EAAU,CAAC,MAAM,CAAC,CAAA;AAAA,EAC/C;AAEA,EAAA,MAAM,QAAQ,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,UAAU,CAAC,CAAA;AAEhD,EAAA,MAAM,SAAA,GAAY;AAAA,IAChB,aAAA,EAAe,GAAG,KAAK,CAAA,EAAA,CAAA;AAAA,IACvB,cAAA,EAAgB,GAAG,MAAM,CAAA,EAAA,CAAA;AAAA,IACzB,WAAA,EAAa,GAAG,GAAG,CAAA,EAAA,CAAA;AAAA,IACnB,eAAA,EAAiB,OAAO,MAAM,CAAA;AAAA,IAC9B,GAAG;AAAA,GACL;AAEA,EAAA,OAAO,YAAA;AAAA,oBACLJ,GAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAW,CAAA,QAAA,EAAW,SAAA,GAAY,CAAA,CAAA,EAAI,SAAS,KAAK,EAAE,CAAA,CAAA;AAAA,QACtD,gBAAA,EAAgB,KAAA;AAAA,QAChB,GAAA;AAAA,QACA,KAAA,EAAO,SAAA;AAAA,QAEN,QAAA,EAAA,SAAA,CAAU,GAAA,CAAI,CAAC,QAAA,KAAa;AAC3B,UAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,GAAA,CAAI,QAAQ,CAAA;AACrC,UAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,GAAG,OAAO,IAAA;AACzC,UAAA,MAAM,OAAA,GAAU,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,KAAK,CAAA;AAEpC,UAAA,uBACEA,GAAAA;AAAA,YAAC,SAAA;AAAA,YAAA;AAAA,cAEC,GAAA,EAAK,CAAC,IAAA,KAAS;AACb,gBAAA,IAAI,IAAA,EAAM,UAAA,CAAW,OAAA,CAAQ,GAAA,CAAI,UAAU,IAAI,CAAA;AAAA,qBAC1C,UAAA,CAAW,OAAA,CAAQ,MAAA,CAAO,QAAQ,CAAA;AAAA,cACzC,CAAA;AAAA,cACA,SAAA,EAAU,YAAA;AAAA,cACV,eAAA,EAAe,QAAA;AAAA,cACf,YAAA,EAAY,WAAA;AAAA,cAEX,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,qBACZA,GAAAA;AAAA,gBAAC,YAAA;AAAA,gBAAA;AAAA,kBAEC,MAAA;AAAA,kBACA,KAAA;AAAA,kBACA,KAAA;AAAA,kBACA,SAAA;AAAA,kBACA,UAAA;AAAA,kBACA,YAAA;AAAA,kBACA,YAAA;AAAA,kBACA,cAAA;AAAA,kBACA;AAAA,iBAAA;AAAA,gBATK,MAAA,CAAO;AAAA,eAWf;AAAA,aAAA;AAAA,YAtBI;AAAA,WAuBP;AAAA,QAEJ,CAAC;AAAA;AAAA,KACH;AAAA,IACA;AAAA,GACF;AACF;AC5KA,IAAM,eAAA,GAAkB,cAA2C,IAAI,CAAA;AAIhE,SAAS,gBAAA,CAAiB;AAAA,EAC/B,QAAA;AAAA,EACA,KAAA,EAAO,aAAA;AAAA,EACP,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,UAAA;AAAA,EACA,GAAG;AACL,CAAA,EAA0B;AACxB,EAAA,MAAM,KAAA,GAAQ,OAAA;AAAA,IACZ,MACE,iBACA,mBAAA,CAAoB;AAAA,MAClB,QAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA;AAAA;AAAA,IAGH,CAAC,aAAa;AAAA,GAChB;AAEA,EAAAI,UAAU,MAAM;AACd,IAAA,KAAA,CAAM,SAAA,CAAU;AAAA,MACd,QAAA;AAAA,MACA,QAAA;AAAA,MACA,WAAA;AAAA,MACA,QAAA;AAAA,MACA,IAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KACD,CAAA;AAAA,EACH,CAAA,EAAG,CAAC,KAAA,EAAO,QAAA,EAAU,QAAA,EAAU,aAAa,QAAA,EAAU,IAAA,EAAM,IAAA,EAAM,UAAU,CAAC,CAAA;AAE7E,EAAA,MAAM,GAAA,GAAM,QAAqB,MAAM;AACrC,IAAA,MAAM,MAAA,GACJ,CAAC,OAAA,KACD,CAAC,SAAoB,OAAA,GAAyB,EAAC,KAC7C,KAAA,CAAM,KAAK,EAAE,GAAG,OAAA,EAAS,OAAA,EAAS,SAAS,CAAA;AAE/C,IAAA,OAAO;AAAA,MACL,MAAM,KAAA,CAAM,IAAA;AAAA,MACZ,QAAQ,KAAA,CAAM,MAAA;AAAA,MACd,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,YAAY,KAAA,CAAM,UAAA;AAAA,MAClB,SAAS,KAAA,CAAM,OAAA;AAAA,MACf,OAAA,EAAS,OAAO,SAAS,CAAA;AAAA,MACzB,KAAA,EAAO,OAAO,OAAO,CAAA;AAAA,MACrB,OAAA,EAAS,OAAO,SAAS,CAAA;AAAA,MACzB,IAAA,EAAM,OAAO,MAAM,CAAA;AAAA,MACnB,OAAA,EAAS,OAAO,SAAS,CAAA;AAAA,MACzB,MAAA,EAAQ,OAAO,QAAQ,CAAA;AAAA,MACvB,SAAS,CAAC,OAAA,EAAS,UAAU,EAAC,KAC5B,MAAM,IAAA,CAAK;AAAA,QACT,GAAG,OAAA;AAAA,QACH,OAAA;AAAA,QACA,OAAA,EAAS,SAAA;AAAA,QACT,QAAA,EACE,OAAA,CAAQ,QAAA,KAAa,MAAA,GAAY,QAAQ,QAAA,GAAW;AAAA,OACvD,CAAA;AAAA,MACH;AAAA,KACF;AAAA,EACF,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,MAAM,KAAA,GAAQ,OAAA,CAAQ,OAAO,EAAE,KAAA,EAAO,KAAI,CAAA,EAAI,CAAC,KAAA,EAAO,GAAG,CAAC,CAAA;AAE1D,EAAA,uBACEH,IAAAA,CAAC,eAAA,CAAgB,QAAA,EAAhB,EAAyB,KAAA,EACvB,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBACDD,GAAAA;AAAA,MAAC,YAAA;AAAA,MAAA;AAAA,QACC,KAAA;AAAA,QACA,UAAA,EAAY,UAAA,IAAc,KAAA,CAAM,SAAA,EAAU,CAAE,UAAA;AAAA,QAC3C,GAAG;AAAA;AAAA;AACN,GAAA,EACF,CAAA;AAEJ;AAEA,SAAS,kBAAA,GAA2C;AAClD,EAAA,MAAM,OAAA,GAAU,WAAW,eAAe,CAAA;AAC1C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KAEF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;AAGO,SAAS,WAAA,GAA2B;AACzC,EAAA,OAAO,oBAAmB,CAAE,GAAA;AAC9B;AAGO,SAAS,gBAAA,GAAkC;AAChD,EAAA,OAAO,oBAAmB,CAAE,KAAA;AAC9B","file":"index.js","sourcesContent":["import { isValidElement } from 'react';\nimport type {\n ResolvedSnackbarStoreConfig,\n SnackbarCloseReason,\n SnackbarOptions,\n SnackbarPromiseContent,\n SnackbarPromiseOptions,\n SnackbarRecord,\n SnackbarStore,\n SnackbarStoreConfig,\n} from '../types';\n\nconst EMPTY: readonly SnackbarRecord[] = Object.freeze([]);\n\nconst DEFAULT_CONFIG: ResolvedSnackbarStoreConfig = {\n position: 'bottom-right',\n duration: 5000,\n dismissible: true,\n progress: true,\n tone: 'glass',\n size: 'md',\n maxVisible: 3,\n};\n\ninterface TimerState {\n remaining: number;\n startedAt: number | null;\n handle: ReturnType<typeof setTimeout> | null;\n}\n\nlet sequence = 0;\n\nfunction createId(): string {\n sequence += 1;\n const random = Math.random().toString(36).slice(2, 7);\n return `prs-${Date.now().toString(36)}-${sequence.toString(36)}-${random}`;\n}\n\n/**\n * Turns user-facing duration input into milliseconds.\n * `null`, `0`, negative or non-finite values mean \"persistent\".\n */\nfunction normalizeDuration(\n value: number | null | undefined,\n fallback: number,\n): number {\n if (value === undefined) return fallback;\n if (value === null) return Infinity;\n if (!Number.isFinite(value) || value <= 0) return Infinity;\n return Math.max(1, Math.round(value));\n}\n\nfunction isPlainOptions(value: unknown): value is SnackbarOptions {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n !('$$typeof' in value)\n );\n}\n\nfunction contentToOptions(content: unknown): SnackbarOptions {\n if (isPlainOptions(content)) return content;\n return { message: content as SnackbarOptions['message'] };\n}\n\nfunction resolveContent<T>(\n content: SnackbarPromiseContent<T>,\n value: T,\n): SnackbarOptions {\n const resolved = typeof content === 'function' ? content(value) : content;\n return contentToOptions(resolved);\n}\n\nexport function createSnackbarStore(\n initialConfig: SnackbarStoreConfig = {},\n): SnackbarStore {\n let config: ResolvedSnackbarStoreConfig = {\n ...DEFAULT_CONFIG,\n ...(initialConfig.position !== undefined\n ? { position: initialConfig.position }\n : null),\n ...(initialConfig.duration !== undefined\n ? {\n duration: normalizeDuration(\n initialConfig.duration,\n DEFAULT_CONFIG.duration,\n ),\n }\n : null),\n ...(initialConfig.dismissible !== undefined\n ? { dismissible: initialConfig.dismissible }\n : null),\n ...(initialConfig.progress !== undefined\n ? { progress: initialConfig.progress }\n : null),\n ...(initialConfig.tone !== undefined ? { tone: initialConfig.tone } : null),\n ...(initialConfig.size !== undefined ? { size: initialConfig.size } : null),\n ...(initialConfig.maxVisible !== undefined\n ? { maxVisible: Math.max(1, Math.floor(initialConfig.maxVisible)) }\n : null),\n };\n\n let records: readonly SnackbarRecord[] = EMPTY;\n const listeners = new Set<() => void>();\n const timers = new Map<string, TimerState>();\n const shown = new Set<string>();\n const pauseReasons = new Map<string, Set<string>>();\n let pageHidden = false;\n\n const emit = () => {\n for (const listener of listeners) listener();\n };\n\n const find = (id: string) => records.find((record) => record.id === id);\n\n const replace = (id: string, record: SnackbarRecord) => {\n records = records.map((current) => (current.id === id ? record : current));\n };\n\n const cleanup = (id: string) => {\n timers.delete(id);\n shown.delete(id);\n pauseReasons.delete(id);\n };\n\n const stopTimer = (timer: TimerState) => {\n if (timer.handle !== null) {\n clearTimeout(timer.handle);\n timer.handle = null;\n }\n if (timer.startedAt !== null) {\n timer.remaining = Math.max(0, timer.remaining - (Date.now() - timer.startedAt));\n timer.startedAt = null;\n }\n };\n\n const schedule = (id: string, timer: TimerState) => {\n timer.startedAt = Date.now();\n timer.handle = setTimeout(() => {\n timer.handle = null;\n timer.startedAt = null;\n timer.remaining = 0;\n dismiss(id, 'timeout');\n }, Math.max(0, timer.remaining));\n };\n\n const startTimer = (id: string) => {\n const record = find(id);\n if (\n !record ||\n record.phase !== 'visible' ||\n !shown.has(id) ||\n record.duration === Infinity ||\n pageHidden ||\n (pauseReasons.get(id)?.size ?? 0) > 0\n ) {\n return;\n }\n\n const existing = timers.get(id);\n if (existing) {\n // Pause stops the handle but keeps the remaining time on the entry.\n if (existing.handle === null && existing.startedAt === null) {\n schedule(id, existing);\n }\n return;\n }\n\n const timer: TimerState = {\n remaining: record.duration,\n startedAt: null,\n handle: null,\n };\n timers.set(id, timer);\n schedule(id, timer);\n };\n\n const resetTimer = (id: string) => {\n const timer = timers.get(id);\n if (timer) {\n if (timer.handle !== null) clearTimeout(timer.handle);\n timers.delete(id);\n }\n startTimer(id);\n };\n\n const setPaused = (id: string, paused: boolean) => {\n const record = find(id);\n if (!record || record.paused === paused) return;\n replace(id, { ...record, paused });\n emit();\n };\n\n const pause = (id: string, reason = 'manual') => {\n const record = find(id);\n if (!record || record.phase !== 'visible') return;\n\n let reasons = pauseReasons.get(id);\n if (!reasons) {\n reasons = new Set();\n pauseReasons.set(id, reasons);\n }\n if (reasons.has(reason)) return;\n reasons.add(reason);\n\n const timer = timers.get(id);\n if (timer) stopTimer(timer);\n setPaused(id, true);\n };\n\n const resume = (id: string, reason = 'manual') => {\n const reasons = pauseReasons.get(id);\n if (!reasons || !reasons.has(reason)) return;\n reasons.delete(reason);\n if (reasons.size > 0) return;\n\n pauseReasons.delete(id);\n setPaused(id, false);\n startTimer(id);\n };\n\n const dismiss = (id: string, reason: SnackbarCloseReason = 'manual') => {\n const record = find(id);\n if (!record || record.phase === 'exiting') return;\n\n const timer = timers.get(id);\n if (timer) {\n stopTimer(timer);\n timers.delete(id);\n }\n\n // A queued snackbar has never been painted, so it can be removed at once.\n if (!shown.has(id)) {\n records = records.filter((current) => current.id !== id);\n cleanup(id);\n emit();\n record.onClose?.(reason, id);\n return;\n }\n\n pauseReasons.delete(id);\n replace(id, {\n ...record,\n phase: 'exiting',\n closeReason: reason,\n paused: false,\n });\n emit();\n record.onClose?.(reason, id);\n };\n\n const dismissAll = (reason: SnackbarCloseReason = 'dismissAll') => {\n const callbacks: Array<() => void> = [];\n const remaining: SnackbarRecord[] = [];\n\n for (const record of records) {\n if (record.phase === 'exiting') {\n remaining.push(record);\n continue;\n }\n\n const timer = timers.get(record.id);\n if (timer) {\n stopTimer(timer);\n timers.delete(record.id);\n }\n\n if (!shown.has(record.id)) {\n cleanup(record.id);\n callbacks.push(() => record.onClose?.(reason, record.id));\n continue;\n }\n\n pauseReasons.delete(record.id);\n remaining.push({\n ...record,\n phase: 'exiting',\n closeReason: reason,\n paused: false,\n });\n callbacks.push(() => record.onClose?.(reason, record.id));\n }\n\n records = remaining;\n emit();\n for (const callback of callbacks) callback();\n };\n\n const show = (options: SnackbarOptions): string => {\n const id = options.id ?? createId();\n const existing = find(id);\n\n if (existing) {\n update(id, options);\n const current = find(id);\n if (current && current.phase === 'exiting') {\n records = records.map((record) =>\n record.id === id\n ? { ...record, phase: 'visible', closeReason: undefined, paused: false }\n : record,\n );\n pauseReasons.delete(id);\n emit();\n startTimer(id);\n }\n return id;\n }\n\n const record: SnackbarRecord = {\n id,\n title: options.title,\n message: options.message,\n variant: options.variant ?? 'neutral',\n tone: options.tone ?? config.tone,\n size: options.size ?? config.size,\n duration: normalizeDuration(options.duration, config.duration),\n position: options.position ?? config.position,\n icon: options.icon,\n action: options.action ?? null,\n dismissible: options.dismissible ?? config.dismissible,\n progress: options.progress ?? config.progress,\n className: options.className,\n style: options.style,\n createdAt: Date.now(),\n phase: 'visible',\n paused: false,\n closeReason: undefined,\n onOpen: options.onOpen,\n onClose: options.onClose,\n };\n\n records = [...records, record];\n emit();\n return id;\n };\n\n const update = (id: string, options: Partial<SnackbarOptions>): void => {\n const record = find(id);\n if (!record) return;\n\n const next: SnackbarRecord = {\n ...record,\n ...(options.title !== undefined ? { title: options.title } : null),\n ...(options.message !== undefined ? { message: options.message } : null),\n ...(options.variant !== undefined ? { variant: options.variant } : null),\n ...(options.tone !== undefined ? { tone: options.tone } : null),\n ...(options.size !== undefined ? { size: options.size } : null),\n ...(options.position !== undefined ? { position: options.position } : null),\n ...(options.icon !== undefined ? { icon: options.icon } : null),\n ...(options.action !== undefined ? { action: options.action } : null),\n ...(options.dismissible !== undefined\n ? { dismissible: options.dismissible }\n : null),\n ...(options.progress !== undefined ? { progress: options.progress } : null),\n ...(options.className !== undefined ? { className: options.className } : null),\n ...(options.style !== undefined ? { style: options.style } : null),\n ...(options.onOpen !== undefined ? { onOpen: options.onOpen } : null),\n ...(options.onClose !== undefined ? { onClose: options.onClose } : null),\n ...(options.duration !== undefined\n ? { duration: normalizeDuration(options.duration, record.duration) }\n : null),\n };\n\n const durationChanged = next.duration !== record.duration;\n replace(id, next);\n emit();\n\n if (\n durationChanged &&\n next.phase === 'visible' &&\n shown.has(id)\n ) {\n if (next.duration === Infinity) {\n const timer = timers.get(id);\n if (timer) {\n stopTimer(timer);\n timers.delete(id);\n }\n } else {\n resetTimer(id);\n }\n }\n };\n\n const notifyShown = (id: string) => {\n if (shown.has(id)) return;\n const record = find(id);\n if (!record || record.phase !== 'visible') return;\n shown.add(id);\n record.onOpen?.(id);\n startTimer(id);\n };\n\n const notifyExited = (id: string) => {\n const record = find(id);\n if (!record || record.phase !== 'exiting') return;\n cleanup(id);\n records = records.filter((current) => current.id !== id);\n emit();\n };\n\n const setPageHidden = (hidden: boolean) => {\n if (pageHidden === hidden) return;\n pageHidden = hidden;\n for (const record of records) {\n if (hidden) {\n pause(record.id, 'page');\n } else {\n resume(record.id, 'page');\n startTimer(record.id);\n }\n }\n };\n\n const setConfig = (patch: SnackbarStoreConfig) => {\n config = {\n ...config,\n ...(patch.position !== undefined ? { position: patch.position } : null),\n ...(patch.duration !== undefined\n ? {\n duration: normalizeDuration(patch.duration, config.duration),\n }\n : null),\n ...(patch.dismissible !== undefined\n ? { dismissible: patch.dismissible }\n : null),\n ...(patch.progress !== undefined ? { progress: patch.progress } : null),\n ...(patch.tone !== undefined ? { tone: patch.tone } : null),\n ...(patch.size !== undefined ? { size: patch.size } : null),\n ...(patch.maxVisible !== undefined\n ? { maxVisible: Math.max(1, Math.floor(patch.maxVisible)) }\n : null),\n };\n };\n\n const promise = <T,>(\n input: Promise<T>,\n messages: SnackbarPromiseOptions<T>,\n options: SnackbarOptions = {},\n ): Promise<T> => {\n const loadingOptions = contentToOptions(messages.loading ?? 'Loading…');\n const id = options.id ?? createId();\n\n show({\n dismissible: false,\n ...options,\n ...loadingOptions,\n id,\n duration:\n loadingOptions.duration !== undefined ? loadingOptions.duration : null,\n variant: loadingOptions.variant ?? 'loading',\n progress: loadingOptions.progress ?? false,\n });\n\n const settle = <Value,>(\n content: SnackbarPromiseContent<Value>,\n value: Value,\n variant: 'success' | 'error',\n ) => {\n const next = resolveContent(content, value);\n update(id, {\n ...next,\n variant: next.variant ?? variant,\n duration:\n next.duration !== undefined\n ? next.duration\n : options.duration !== undefined\n ? options.duration\n : 4000,\n });\n };\n\n return input.then(\n (value) => {\n settle(messages.success, value, 'success');\n return value;\n },\n (error: unknown) => {\n settle(messages.error, error, 'error');\n throw error;\n },\n );\n };\n\n return {\n show,\n update,\n dismiss,\n dismissAll,\n promise,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n getSnapshot: () => records,\n getServerSnapshot: () => EMPTY,\n getConfig: () => ({ ...config }),\n setConfig,\n pause,\n resume,\n notifyShown,\n notifyExited,\n setPageHidden,\n };\n}\n\n","import type { ReactNode } from 'react';\nimport type { SnackbarVariant } from '../types';\n\nconst strokeProps = {\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.7,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n} as const;\n\nconst BellIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M5.2 8.1a4.8 4.8 0 0 1 9.6 0c0 3.1 1.3 4.3 1.3 4.3H3.9s1.3-1.2 1.3-4.3Z\"\n />\n <path {...strokeProps} d=\"M8.2 15.2a1.9 1.9 0 0 0 3.6 0\" />\n </svg>\n);\n\nconst CheckIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path {...strokeProps} d=\"M4.6 10.4 8 13.8l7.4-7.6\" strokeWidth={2} />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <circle {...strokeProps} cx=\"10\" cy=\"10\" r=\"6.6\" />\n <path {...strokeProps} d=\"M10 6.4v4.2\" />\n <circle cx=\"10\" cy=\"13.5\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst WarningIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M8.6 3.6a1.6 1.6 0 0 1 2.8 0l5.2 9.6a1.6 1.6 0 0 1-1.4 2.4H4.8a1.6 1.6 0 0 1-1.4-2.4l5.2-9.6Z\"\n />\n <path {...strokeProps} d=\"M10 7.6v3.2\" />\n <circle cx=\"10\" cy=\"13.3\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst InfoIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <circle {...strokeProps} cx=\"10\" cy=\"10\" r=\"6.6\" />\n <path {...strokeProps} d=\"M10 9.1v4.2\" />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst SpinnerIcon = (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"18\"\n height=\"18\"\n aria-hidden=\"true\"\n className=\"prs-icon-spin\"\n >\n <circle\n {...strokeProps}\n cx=\"10\"\n cy=\"10\"\n r=\"6.4\"\n opacity=\"0.22\"\n strokeWidth={2}\n />\n <path\n {...strokeProps}\n d=\"M10 3.6a6.4 6.4 0 0 1 6.4 6.4\"\n strokeWidth={2}\n />\n </svg>\n);\n\nconst SparkIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M10 2.9c.55 3.9 2.2 5.55 6.1 6.1-3.9.55-5.55 2.2-6.1 6.1-.55-3.9-2.2-5.55-6.1-6.1C7.8 8.45 9.45 6.8 10 2.9Z\"\n />\n <path {...strokeProps} d=\"M15.2 13.4c.2 1.4.8 2 2.2 2.2-1.4.2-2 .8-2.2 2.2-.2-1.4-.8-2-2.2-2.2 1.4-.2 2-.8 2.2-2.2Z\" />\n </svg>\n);\n\nexport const defaultIcons: Record<SnackbarVariant, ReactNode> = {\n neutral: BellIcon,\n success: CheckIcon,\n error: ErrorIcon,\n warning: WarningIcon,\n info: InfoIcon,\n loading: SpinnerIcon,\n custom: SparkIcon,\n};\n\nexport const DefaultCloseIcon = (\n <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n d=\"M4.2 4.2l7.6 7.6M11.8 4.2l-7.6 7.6\"\n />\n </svg>\n);\n","import {\n useEffect,\n useRef,\n useState,\n type AnimationEvent,\n type CSSProperties,\n type FocusEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport type {\n SnackbarRecord,\n SnackbarStore,\n SnackbarVariant,\n} from '../types';\nimport { DefaultCloseIcon, defaultIcons } from './icons';\n\ninterface SnackbarItemProps {\n record: SnackbarRecord;\n store: SnackbarStore;\n icons?: Partial<Record<SnackbarVariant, ReactNode>> | undefined;\n closeIcon?: ReactNode | undefined;\n closeLabel: string;\n pauseOnHover: boolean;\n pauseOnFocus: boolean;\n swipeToDismiss: boolean;\n swipeThreshold: number;\n}\n\ninterface Gesture {\n pointerId: number;\n startX: number;\n startY: number;\n axis: 'pending' | 'x';\n}\n\nexport function SnackbarItem({\n record,\n store,\n icons,\n closeIcon,\n closeLabel,\n pauseOnHover,\n pauseOnFocus,\n swipeToDismiss,\n swipeThreshold,\n}: SnackbarItemProps) {\n const [dragX, setDragX] = useState(0);\n const [dragging, setDragging] = useState(false);\n const [actionPending, setActionPending] = useState(false);\n const gesture = useRef<Gesture | null>(null);\n const dragXRef = useRef(0);\n const draggingRef = useRef(false);\n const suppressClick = useRef(false);\n const surfaceRef = useRef<HTMLDivElement>(null);\n\n const { id, phase, action, title, message, variant, duration } = record;\n\n useEffect(() => {\n store.notifyShown(id);\n }, [store, id]);\n\n useEffect(() => {\n if (phase !== 'exiting') return;\n const timeout = setTimeout(() => store.notifyExited(id), 400);\n return () => clearTimeout(timeout);\n }, [phase, store, id]);\n\n const resetDrag = () => {\n dragXRef.current = 0;\n draggingRef.current = false;\n setDragX(0);\n setDragging(false);\n };\n\n const pauseForDrag = () => {\n store.pause(id, 'drag');\n };\n\n const resumeForDrag = () => {\n store.resume(id, 'drag');\n };\n\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n suppressClick.current = false;\n if (!swipeToDismiss || phase === 'exiting') return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n const target = event.target as HTMLElement;\n if (\n target.closest(\n 'button, a, input, textarea, select, [role=\"button\"], [data-prs-no-swipe]',\n )\n ) {\n return;\n }\n\n gesture.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n axis: 'pending',\n };\n };\n\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n const current = gesture.current;\n if (!current) return;\n\n const dx = event.clientX - current.startX;\n const dy = event.clientY - current.startY;\n\n if (current.axis === 'pending') {\n if (Math.abs(dx) < 6 && Math.abs(dy) < 6) return;\n if (Math.abs(dy) > Math.abs(dx)) {\n // Vertical intent: let the page scroll.\n gesture.current = null;\n return;\n }\n current.axis = 'x';\n draggingRef.current = true;\n setDragging(true);\n pauseForDrag();\n surfaceRef.current?.setPointerCapture?.(event.pointerId);\n }\n\n if (event.cancelable) event.preventDefault();\n const absolute = Math.abs(dx);\n const damped = absolute > 96 ? 96 + (absolute - 96) * 0.32 : absolute;\n const next = Math.sign(dx) * damped;\n dragXRef.current = next;\n setDragX(next);\n if (absolute > 8) suppressClick.current = true;\n };\n\n const finishGesture = (event: ReactPointerEvent<HTMLDivElement>) => {\n const current = gesture.current;\n if (!current) return;\n\n if (draggingRef.current) {\n const shouldDismiss = Math.abs(dragXRef.current) >= swipeThreshold;\n resetDrag();\n resumeForDrag();\n if (surfaceRef.current?.hasPointerCapture?.(current.pointerId)) {\n surfaceRef.current.releasePointerCapture(current.pointerId);\n }\n if (shouldDismiss) {\n suppressClick.current = true;\n store.dismiss(id, 'swipe');\n }\n } else {\n resetDrag();\n }\n\n gesture.current = null;\n if (event.type === 'pointercancel') resumeForDrag();\n };\n\n const handleLostPointerCapture = () => {\n if (!draggingRef.current) return;\n resetDrag();\n resumeForDrag();\n gesture.current = null;\n };\n\n const handleAnimationEnd = (event: AnimationEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return;\n if (phase === 'exiting') store.notifyExited(id);\n };\n\n const handleAction = async () => {\n if (!action || actionPending) return;\n\n const result = action.onClick?.(id);\n if (result && typeof result.then === 'function') {\n setActionPending(true);\n try {\n await result;\n } finally {\n setActionPending(false);\n }\n }\n\n if (action.closeOnClick !== false) store.dismiss(id, 'action');\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n if (!pauseOnFocus) return;\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n store.resume(id, 'focus');\n }\n };\n\n const resolvedIcon =\n record.icon === undefined\n ? (icons?.[variant] ?? defaultIcons[variant])\n : record.icon;\n const showIcon = record.icon !== false;\n const showProgress =\n record.progress && Number.isFinite(duration) && duration > 0;\n\n const style = {\n ...record.style,\n '--prs-drag-x': `${dragX}px`,\n '--prs-drag-opacity': String(\n 1 - Math.min(Math.abs(dragX) / 300, 0.55),\n ),\n } as CSSProperties;\n\n return (\n <div\n className={`prs-item${record.className ? ` ${record.className}` : ''}`}\n data-variant={variant}\n data-tone={record.tone}\n data-size={record.size}\n data-state={phase}\n data-paused={record.paused ? 'true' : 'false'}\n data-dragging={dragging ? 'true' : 'false'}\n data-has-icon={showIcon ? 'true' : 'false'}\n data-dismissible={record.dismissible ? 'true' : 'false'}\n data-prs-id={record.id}\n data-position={record.position}\n style={style}\n role={variant === 'error' ? 'alert' : 'status'}\n aria-live={variant === 'error' ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n aria-busy={actionPending || variant === 'loading' ? true : undefined}\n onPointerEnter={() => {\n if (pauseOnHover) store.pause(id, 'hover');\n }}\n onPointerLeave={() => {\n if (pauseOnHover) store.resume(id, 'hover');\n }}\n onFocus={() => {\n if (pauseOnFocus) store.pause(id, 'focus');\n }}\n onBlur={handleBlur}\n onKeyDown={(event) => {\n if (event.key === 'Escape' && record.dismissible) {\n event.stopPropagation();\n store.dismiss(id, 'escape');\n }\n }}\n onAnimationEnd={handleAnimationEnd}\n >\n <div\n ref={surfaceRef}\n className=\"prs-item__surface\"\n onClickCapture={(event) => {\n if (!suppressClick.current) return;\n suppressClick.current = false;\n event.preventDefault();\n event.stopPropagation();\n }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={finishGesture}\n onPointerCancel={finishGesture}\n onLostPointerCapture={handleLostPointerCapture}\n >\n {showIcon ? (\n <span className=\"prs-item__icon\" aria-hidden=\"true\">\n {resolvedIcon}\n </span>\n ) : null}\n\n <div\n className=\"prs-item__content\"\n data-has-title={title !== undefined && title !== null ? 'true' : 'false'}\n >\n {title !== undefined && title !== null ? (\n <div className=\"prs-item__title\">{title}</div>\n ) : null}\n {message !== undefined && message !== null ? (\n <div className=\"prs-item__message\">{message}</div>\n ) : null}\n {action ? (\n <div className=\"prs-item__actions\">\n <button\n type=\"button\"\n className=\"prs-action\"\n onClick={handleAction}\n disabled={actionPending}\n aria-busy={actionPending || undefined}\n >\n {actionPending ? (\n <span className=\"prs-action__spinner\" aria-hidden=\"true\" />\n ) : null}\n <span>{action.label}</span>\n </button>\n </div>\n ) : null}\n </div>\n\n {record.dismissible ? (\n <button\n type=\"button\"\n className=\"prs-close\"\n aria-label={closeLabel}\n onClick={() => store.dismiss(id, 'manual')}\n >\n {closeIcon ?? DefaultCloseIcon}\n </button>\n ) : null}\n\n {showProgress ? (\n <div className=\"prs-progress\" aria-hidden=\"true\">\n <span\n key={duration}\n className=\"prs-progress__bar\"\n style={{ animationDuration: `${duration}ms` }}\n />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type {\n SnackbarHostProps,\n SnackbarPosition,\n SnackbarRecord,\n} from './types';\nimport { SnackbarItem } from './components/SnackbarItem';\n\nconst POSITIONS: readonly SnackbarPosition[] = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right',\n];\n\nexport function SnackbarHost({\n store,\n maxVisible = 3,\n offset = 20,\n gap = 12,\n width = 384,\n theme = 'auto',\n container,\n pauseOnHover = true,\n pauseOnFocus = true,\n pauseOnDocumentHidden = true,\n swipeToDismiss = true,\n swipeThreshold = 88,\n icons,\n closeIcon,\n closeLabel = 'Dismiss notification',\n regionLabel = 'Notifications',\n className,\n style,\n zIndex = 2147483000,\n dir,\n}: SnackbarHostProps) {\n const records = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot,\n );\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n const regionRefs = useRef(new Map<SnackbarPosition, HTMLElement>());\n const topsRef = useRef(new Map<string, number>());\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n const target =\n typeof container === 'function'\n ? container()\n : container ?? document.body;\n setPortalNode(target);\n return () => setPortalNode(null);\n }, [container]);\n\n useEffect(() => {\n if (!pauseOnDocumentHidden || typeof document === 'undefined') return;\n\n const sync = () => store.setPageHidden(document.visibilityState === 'hidden');\n sync();\n document.addEventListener('visibilitychange', sync);\n return () => {\n document.removeEventListener('visibilitychange', sync);\n store.setPageHidden(false);\n };\n }, [store, pauseOnDocumentHidden]);\n\n // FLIP: when the stack grows or collapses, existing cards glide into their\n // new slot instead of snapping. New cards are left to the CSS enter spring.\n useLayoutEffect(() => {\n if (!portalNode) {\n topsRef.current.clear();\n return;\n }\n if (typeof window === 'undefined') return;\n\n const reduced =\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const next = new Map<string, number>();\n\n for (const region of regionRefs.current.values()) {\n const regionTop = region.getBoundingClientRect().top;\n const nodes = region.querySelectorAll<HTMLElement>('[data-prs-id]');\n\n for (const node of nodes) {\n const id = node.dataset.prsId;\n if (!id) continue;\n\n const top = regionTop + node.offsetTop;\n next.set(id, top);\n\n const previous = topsRef.current.get(id);\n if (\n reduced ||\n previous === undefined ||\n node.dataset.state === 'exiting' ||\n typeof node.animate !== 'function'\n ) {\n continue;\n }\n\n const delta = previous - top;\n if (Math.abs(delta) < 0.5) continue;\n\n node.animate(\n [\n { transform: `translate3d(0, ${delta}px, 0)` },\n { transform: 'translate3d(0, 0, 0)' },\n ],\n {\n duration: 320,\n easing: 'cubic-bezier(0.22, 1, 0.36, 1)',\n },\n );\n }\n }\n\n topsRef.current = next;\n });\n\n if (!portalNode) return null;\n\n const byPosition = new Map<SnackbarPosition, SnackbarRecord[]>();\n for (const record of records) {\n const bucket = byPosition.get(record.position);\n if (bucket) bucket.push(record);\n else byPosition.set(record.position, [record]);\n }\n\n const limit = Math.max(1, Math.floor(maxVisible));\n\n const rootStyle = {\n '--prs-width': `${width}px`,\n '--prs-offset': `${offset}px`,\n '--prs-gap': `${gap}px`,\n '--prs-z-index': String(zIndex),\n ...style,\n } as CSSProperties;\n\n return createPortal(\n <div\n className={`prs-root${className ? ` ${className}` : ''}`}\n data-prs-theme={theme}\n dir={dir}\n style={rootStyle}\n >\n {POSITIONS.map((position) => {\n const items = byPosition.get(position);\n if (!items || items.length === 0) return null;\n const visible = items.slice(0, limit);\n\n return (\n <section\n key={position}\n ref={(node) => {\n if (node) regionRefs.current.set(position, node);\n else regionRefs.current.delete(position);\n }}\n className=\"prs-region\"\n data-position={position}\n aria-label={regionLabel}\n >\n {visible.map((record) => (\n <SnackbarItem\n key={record.id}\n record={record}\n store={store}\n icons={icons}\n closeIcon={closeIcon}\n closeLabel={closeLabel}\n pauseOnHover={pauseOnHover}\n pauseOnFocus={pauseOnFocus}\n swipeToDismiss={swipeToDismiss}\n swipeThreshold={swipeThreshold}\n />\n ))}\n </section>\n );\n })}\n </div>,\n portalNode,\n );\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n type ReactNode,\n} from 'react';\nimport { createSnackbarStore } from './core/createSnackbarStore';\nimport { SnackbarHost } from './SnackbarHost';\nimport type {\n SnackbarApi,\n SnackbarOptions,\n SnackbarProviderProps,\n SnackbarStore,\n SnackbarVariant,\n} from './types';\n\ninterface SnackbarContextValue {\n store: SnackbarStore;\n api: SnackbarApi;\n}\n\nconst SnackbarContext = createContext<SnackbarContextValue | null>(null);\n\ntype PresetOptions = Omit<SnackbarOptions, 'message' | 'variant'>;\n\nexport function SnackbarProvider({\n children,\n store: providedStore,\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n maxVisible,\n ...hostProps\n}: SnackbarProviderProps) {\n const store = useMemo(\n () =>\n providedStore ??\n createSnackbarStore({\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n }),\n // The store is intentionally created once per provider instance.\n // Subsequent config changes are pushed below.\n [providedStore],\n );\n\n useEffect(() => {\n store.setConfig({\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n maxVisible,\n });\n }, [store, position, duration, dismissible, progress, tone, size, maxVisible]);\n\n const api = useMemo<SnackbarApi>(() => {\n const preset =\n (variant: SnackbarVariant) =>\n (message: ReactNode, options: PresetOptions = {}) =>\n store.show({ ...options, message, variant });\n\n return {\n show: store.show,\n update: store.update,\n dismiss: store.dismiss,\n dismissAll: store.dismissAll,\n promise: store.promise,\n success: preset('success'),\n error: preset('error'),\n warning: preset('warning'),\n info: preset('info'),\n neutral: preset('neutral'),\n custom: preset('custom'),\n loading: (message, options = {}) =>\n store.show({\n ...options,\n message,\n variant: 'loading',\n duration:\n options.duration !== undefined ? options.duration : null,\n }),\n store,\n };\n }, [store]);\n\n const value = useMemo(() => ({ store, api }), [store, api]);\n\n return (\n <SnackbarContext.Provider value={value}>\n {children}\n <SnackbarHost\n store={store}\n maxVisible={maxVisible ?? store.getConfig().maxVisible}\n {...hostProps}\n />\n </SnackbarContext.Provider>\n );\n}\n\nfunction useSnackbarContext(): SnackbarContextValue {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error(\n 'useSnackbar must be used inside a <SnackbarProvider>. ' +\n 'Render the provider above the component that displays snackbars.',\n );\n }\n return context;\n}\n\n/** Imperative API for showing and managing snackbars. */\nexport function useSnackbar(): SnackbarApi {\n return useSnackbarContext().api;\n}\n\n/** Low-level store access for subscriptions and advanced integrations. */\nexport function useSnackbarStore(): SnackbarStore {\n return useSnackbarContext().store;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/createSnackbarStore.ts","../src/core/defaultStore.ts","../src/components/icons.tsx","../src/components/SnackbarItem.tsx","../src/SnackbarHost.tsx","../src/SnackbarProvider.tsx","../src/toast.ts"],"names":["record","jsx","jsxs","useState","useRef","useEffect","preset","isValidElement","toast"],"mappings":"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","file":"index.js","sourcesContent":["import { isValidElement } from 'react';\nimport type {\n ResolvedSnackbarStoreConfig,\n SnackbarCloseReason,\n SnackbarOptions,\n SnackbarPromiseContent,\n SnackbarPromiseOptions,\n SnackbarRecord,\n SnackbarStore,\n SnackbarStoreConfig,\n} from '../types';\n\nconst EMPTY: readonly SnackbarRecord[] = Object.freeze([]);\n\nconst DEFAULT_CONFIG: ResolvedSnackbarStoreConfig = {\n position: 'bottom-right',\n duration: 5000,\n dismissible: true,\n progress: true,\n tone: 'glass',\n size: 'md',\n maxVisible: 3,\n};\n\ninterface TimerState {\n remaining: number;\n startedAt: number | null;\n handle: ReturnType<typeof setTimeout> | null;\n}\n\nlet sequence = 0;\n\nfunction createId(): string {\n sequence += 1;\n const random = Math.random().toString(36).slice(2, 7);\n return `prs-${Date.now().toString(36)}-${sequence.toString(36)}-${random}`;\n}\n\n/**\n * Turns user-facing duration input into milliseconds.\n * `null`, `0`, negative or non-finite values mean \"persistent\".\n */\nfunction normalizeDuration(\n value: number | null | undefined,\n fallback: number,\n): number {\n if (value === undefined) return fallback;\n if (value === null) return Infinity;\n if (!Number.isFinite(value) || value <= 0) return Infinity;\n return Math.max(1, Math.round(value));\n}\n\nfunction isPlainOptions(value: unknown): value is SnackbarOptions {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n !('$$typeof' in value)\n );\n}\n\nfunction contentToOptions(content: unknown): SnackbarOptions {\n if (isPlainOptions(content)) return content;\n return { message: content as SnackbarOptions['message'] };\n}\n\nfunction resolveContent<T>(\n content: SnackbarPromiseContent<T>,\n value: T,\n): SnackbarOptions {\n const resolved = typeof content === 'function' ? content(value) : content;\n return contentToOptions(resolved);\n}\n\nexport function createSnackbarStore(\n initialConfig: SnackbarStoreConfig = {},\n): SnackbarStore {\n let config: ResolvedSnackbarStoreConfig = {\n ...DEFAULT_CONFIG,\n ...(initialConfig.position !== undefined\n ? { position: initialConfig.position }\n : null),\n ...(initialConfig.duration !== undefined\n ? {\n duration: normalizeDuration(\n initialConfig.duration,\n DEFAULT_CONFIG.duration,\n ),\n }\n : null),\n ...(initialConfig.dismissible !== undefined\n ? { dismissible: initialConfig.dismissible }\n : null),\n ...(initialConfig.progress !== undefined\n ? { progress: initialConfig.progress }\n : null),\n ...(initialConfig.tone !== undefined ? { tone: initialConfig.tone } : null),\n ...(initialConfig.size !== undefined ? { size: initialConfig.size } : null),\n ...(initialConfig.maxVisible !== undefined\n ? { maxVisible: Math.max(1, Math.floor(initialConfig.maxVisible)) }\n : null),\n };\n\n let records: readonly SnackbarRecord[] = EMPTY;\n const listeners = new Set<() => void>();\n const timers = new Map<string, TimerState>();\n const shown = new Set<string>();\n const pauseReasons = new Map<string, Set<string>>();\n let pageHidden = false;\n\n const emit = () => {\n for (const listener of listeners) listener();\n };\n\n const find = (id: string) => records.find((record) => record.id === id);\n\n const replace = (id: string, record: SnackbarRecord) => {\n records = records.map((current) => (current.id === id ? record : current));\n };\n\n const cleanup = (id: string) => {\n timers.delete(id);\n shown.delete(id);\n pauseReasons.delete(id);\n };\n\n const stopTimer = (timer: TimerState) => {\n if (timer.handle !== null) {\n clearTimeout(timer.handle);\n timer.handle = null;\n }\n if (timer.startedAt !== null) {\n timer.remaining = Math.max(0, timer.remaining - (Date.now() - timer.startedAt));\n timer.startedAt = null;\n }\n };\n\n const schedule = (id: string, timer: TimerState) => {\n timer.startedAt = Date.now();\n timer.handle = setTimeout(() => {\n timer.handle = null;\n timer.startedAt = null;\n timer.remaining = 0;\n dismiss(id, 'timeout');\n }, Math.max(0, timer.remaining));\n };\n\n const startTimer = (id: string) => {\n const record = find(id);\n if (\n !record ||\n record.phase !== 'visible' ||\n !shown.has(id) ||\n record.duration === Infinity ||\n pageHidden ||\n (pauseReasons.get(id)?.size ?? 0) > 0\n ) {\n return;\n }\n\n const existing = timers.get(id);\n if (existing) {\n // Pause stops the handle but keeps the remaining time on the entry.\n if (existing.handle === null && existing.startedAt === null) {\n schedule(id, existing);\n }\n return;\n }\n\n const timer: TimerState = {\n remaining: record.duration,\n startedAt: null,\n handle: null,\n };\n timers.set(id, timer);\n schedule(id, timer);\n };\n\n const resetTimer = (id: string) => {\n const timer = timers.get(id);\n if (timer) {\n if (timer.handle !== null) clearTimeout(timer.handle);\n timers.delete(id);\n }\n startTimer(id);\n };\n\n const setPaused = (id: string, paused: boolean) => {\n const record = find(id);\n if (!record || record.paused === paused) return;\n replace(id, { ...record, paused });\n emit();\n };\n\n const pause = (id: string, reason = 'manual') => {\n const record = find(id);\n if (!record || record.phase !== 'visible') return;\n\n let reasons = pauseReasons.get(id);\n if (!reasons) {\n reasons = new Set();\n pauseReasons.set(id, reasons);\n }\n if (reasons.has(reason)) return;\n reasons.add(reason);\n\n const timer = timers.get(id);\n if (timer) stopTimer(timer);\n setPaused(id, true);\n };\n\n const resume = (id: string, reason = 'manual') => {\n const reasons = pauseReasons.get(id);\n if (!reasons || !reasons.has(reason)) return;\n reasons.delete(reason);\n if (reasons.size > 0) return;\n\n pauseReasons.delete(id);\n setPaused(id, false);\n startTimer(id);\n };\n\n const dismiss = (id: string, reason: SnackbarCloseReason = 'manual') => {\n const record = find(id);\n if (!record || record.phase === 'exiting') return;\n\n const timer = timers.get(id);\n if (timer) {\n stopTimer(timer);\n timers.delete(id);\n }\n\n // A queued snackbar has never been painted, so it can be removed at once.\n if (!shown.has(id)) {\n records = records.filter((current) => current.id !== id);\n cleanup(id);\n emit();\n record.onClose?.(reason, id);\n return;\n }\n\n pauseReasons.delete(id);\n replace(id, {\n ...record,\n phase: 'exiting',\n closeReason: reason,\n paused: false,\n });\n emit();\n record.onClose?.(reason, id);\n };\n\n const dismissAll = (reason: SnackbarCloseReason = 'dismissAll') => {\n const callbacks: Array<() => void> = [];\n const remaining: SnackbarRecord[] = [];\n\n for (const record of records) {\n if (record.phase === 'exiting') {\n remaining.push(record);\n continue;\n }\n\n const timer = timers.get(record.id);\n if (timer) {\n stopTimer(timer);\n timers.delete(record.id);\n }\n\n if (!shown.has(record.id)) {\n cleanup(record.id);\n callbacks.push(() => record.onClose?.(reason, record.id));\n continue;\n }\n\n pauseReasons.delete(record.id);\n remaining.push({\n ...record,\n phase: 'exiting',\n closeReason: reason,\n paused: false,\n });\n callbacks.push(() => record.onClose?.(reason, record.id));\n }\n\n records = remaining;\n emit();\n for (const callback of callbacks) callback();\n };\n\n const show = (options: SnackbarOptions): string => {\n const id = options.id ?? createId();\n const existing = find(id);\n\n if (existing) {\n update(id, options);\n const current = find(id);\n if (current && current.phase === 'exiting') {\n records = records.map((record) =>\n record.id === id\n ? { ...record, phase: 'visible', closeReason: undefined, paused: false }\n : record,\n );\n pauseReasons.delete(id);\n emit();\n startTimer(id);\n }\n return id;\n }\n\n const record: SnackbarRecord = {\n id,\n title: options.title,\n message: options.message,\n variant: options.variant ?? 'neutral',\n tone: options.tone ?? config.tone,\n size: options.size ?? config.size,\n duration: normalizeDuration(options.duration, config.duration),\n position: options.position ?? config.position,\n icon: options.icon,\n action: options.action ?? null,\n dismissible: options.dismissible ?? config.dismissible,\n progress: options.progress ?? config.progress,\n className: options.className,\n style: options.style,\n createdAt: Date.now(),\n phase: 'visible',\n paused: false,\n closeReason: undefined,\n onOpen: options.onOpen,\n onClose: options.onClose,\n };\n\n records = [...records, record];\n emit();\n return id;\n };\n\n const update = (id: string, options: Partial<SnackbarOptions>): void => {\n const record = find(id);\n if (!record) return;\n\n const next: SnackbarRecord = {\n ...record,\n ...(options.title !== undefined ? { title: options.title } : null),\n ...(options.message !== undefined ? { message: options.message } : null),\n ...(options.variant !== undefined ? { variant: options.variant } : null),\n ...(options.tone !== undefined ? { tone: options.tone } : null),\n ...(options.size !== undefined ? { size: options.size } : null),\n ...(options.position !== undefined ? { position: options.position } : null),\n ...(options.icon !== undefined ? { icon: options.icon } : null),\n ...(options.action !== undefined ? { action: options.action } : null),\n ...(options.dismissible !== undefined\n ? { dismissible: options.dismissible }\n : null),\n ...(options.progress !== undefined ? { progress: options.progress } : null),\n ...(options.className !== undefined ? { className: options.className } : null),\n ...(options.style !== undefined ? { style: options.style } : null),\n ...(options.onOpen !== undefined ? { onOpen: options.onOpen } : null),\n ...(options.onClose !== undefined ? { onClose: options.onClose } : null),\n ...(options.duration !== undefined\n ? { duration: normalizeDuration(options.duration, record.duration) }\n : null),\n };\n\n const durationChanged = next.duration !== record.duration;\n replace(id, next);\n emit();\n\n if (\n durationChanged &&\n next.phase === 'visible' &&\n shown.has(id)\n ) {\n if (next.duration === Infinity) {\n const timer = timers.get(id);\n if (timer) {\n stopTimer(timer);\n timers.delete(id);\n }\n } else {\n resetTimer(id);\n }\n }\n };\n\n const notifyShown = (id: string) => {\n if (shown.has(id)) return;\n const record = find(id);\n if (!record || record.phase !== 'visible') return;\n shown.add(id);\n record.onOpen?.(id);\n startTimer(id);\n };\n\n const notifyExited = (id: string) => {\n const record = find(id);\n if (!record || record.phase !== 'exiting') return;\n cleanup(id);\n records = records.filter((current) => current.id !== id);\n emit();\n };\n\n const setPageHidden = (hidden: boolean) => {\n if (pageHidden === hidden) return;\n pageHidden = hidden;\n for (const record of records) {\n if (hidden) {\n pause(record.id, 'page');\n } else {\n resume(record.id, 'page');\n startTimer(record.id);\n }\n }\n };\n\n const setConfig = (patch: SnackbarStoreConfig) => {\n config = {\n ...config,\n ...(patch.position !== undefined ? { position: patch.position } : null),\n ...(patch.duration !== undefined\n ? {\n duration: normalizeDuration(patch.duration, config.duration),\n }\n : null),\n ...(patch.dismissible !== undefined\n ? { dismissible: patch.dismissible }\n : null),\n ...(patch.progress !== undefined ? { progress: patch.progress } : null),\n ...(patch.tone !== undefined ? { tone: patch.tone } : null),\n ...(patch.size !== undefined ? { size: patch.size } : null),\n ...(patch.maxVisible !== undefined\n ? { maxVisible: Math.max(1, Math.floor(patch.maxVisible)) }\n : null),\n };\n };\n\n const promise = <T,>(\n input: Promise<T>,\n messages: SnackbarPromiseOptions<T>,\n options: SnackbarOptions = {},\n ): Promise<T> => {\n const loadingOptions = contentToOptions(messages.loading ?? 'Loading…');\n const id = options.id ?? createId();\n\n show({\n dismissible: false,\n ...options,\n ...loadingOptions,\n id,\n duration:\n loadingOptions.duration !== undefined ? loadingOptions.duration : null,\n variant: loadingOptions.variant ?? 'loading',\n progress: loadingOptions.progress ?? false,\n });\n\n const settle = <Value,>(\n content: SnackbarPromiseContent<Value>,\n value: Value,\n variant: 'success' | 'error',\n ) => {\n const next = resolveContent(content, value);\n update(id, {\n ...next,\n variant: next.variant ?? variant,\n duration:\n next.duration !== undefined\n ? next.duration\n : options.duration !== undefined\n ? options.duration\n : 4000,\n });\n };\n\n return input.then(\n (value) => {\n settle(messages.success, value, 'success');\n return value;\n },\n (error: unknown) => {\n settle(messages.error, error, 'error');\n throw error;\n },\n );\n };\n\n return {\n show,\n update,\n dismiss,\n dismissAll,\n promise,\n subscribe(listener) {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n getSnapshot: () => records,\n getServerSnapshot: () => EMPTY,\n getConfig: () => ({ ...config }),\n setConfig,\n pause,\n resume,\n notifyShown,\n notifyExited,\n setPageHidden,\n };\n}\n\n","import type { SnackbarStore } from '../types';\nimport { createSnackbarStore } from './createSnackbarStore';\n\nlet defaultStore: SnackbarStore | null = null;\n\n/**\n * The store shared by the module-level `toast` API and any\n * `<SnackbarProvider>` that is not given an explicit `store`.\n *\n * Created lazily so importing the package on the server has no side effects.\n */\nexport function getDefaultStore(): SnackbarStore {\n if (!defaultStore) defaultStore = createSnackbarStore();\n return defaultStore;\n}\n\n/**\n * Swaps the global store. Useful for tests, isolating apps or wiring the\n * global `toast` API to a store you created yourself.\n * Pass `null` to go back to a fresh default store on next use.\n */\nexport function setDefaultStore(store: SnackbarStore | null): void {\n defaultStore = store;\n}\n","import type { ReactNode } from 'react';\nimport type { SnackbarVariant } from '../types';\n\nconst strokeProps = {\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 1.7,\n strokeLinecap: 'round',\n strokeLinejoin: 'round',\n} as const;\n\nconst BellIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M5.2 8.1a4.8 4.8 0 0 1 9.6 0c0 3.1 1.3 4.3 1.3 4.3H3.9s1.3-1.2 1.3-4.3Z\"\n />\n <path {...strokeProps} d=\"M8.2 15.2a1.9 1.9 0 0 0 3.6 0\" />\n </svg>\n);\n\nconst CheckIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path {...strokeProps} d=\"M4.6 10.4 8 13.8l7.4-7.6\" strokeWidth={2} />\n </svg>\n);\n\nconst ErrorIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <circle {...strokeProps} cx=\"10\" cy=\"10\" r=\"6.6\" />\n <path {...strokeProps} d=\"M10 6.4v4.2\" />\n <circle cx=\"10\" cy=\"13.5\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst WarningIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M8.6 3.6a1.6 1.6 0 0 1 2.8 0l5.2 9.6a1.6 1.6 0 0 1-1.4 2.4H4.8a1.6 1.6 0 0 1-1.4-2.4l5.2-9.6Z\"\n />\n <path {...strokeProps} d=\"M10 7.6v3.2\" />\n <circle cx=\"10\" cy=\"13.3\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst InfoIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <circle {...strokeProps} cx=\"10\" cy=\"10\" r=\"6.6\" />\n <path {...strokeProps} d=\"M10 9.1v4.2\" />\n <circle cx=\"10\" cy=\"6.5\" r=\"0.95\" fill=\"currentColor\" />\n </svg>\n);\n\nconst SpinnerIcon = (\n <svg\n viewBox=\"0 0 20 20\"\n width=\"18\"\n height=\"18\"\n aria-hidden=\"true\"\n className=\"prs-icon-spin\"\n >\n <circle\n {...strokeProps}\n cx=\"10\"\n cy=\"10\"\n r=\"6.4\"\n opacity=\"0.22\"\n strokeWidth={2}\n />\n <path\n {...strokeProps}\n d=\"M10 3.6a6.4 6.4 0 0 1 6.4 6.4\"\n strokeWidth={2}\n />\n </svg>\n);\n\nconst SparkIcon = (\n <svg viewBox=\"0 0 20 20\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n {...strokeProps}\n d=\"M10 2.9c.55 3.9 2.2 5.55 6.1 6.1-3.9.55-5.55 2.2-6.1 6.1-.55-3.9-2.2-5.55-6.1-6.1C7.8 8.45 9.45 6.8 10 2.9Z\"\n />\n <path {...strokeProps} d=\"M15.2 13.4c.2 1.4.8 2 2.2 2.2-1.4.2-2 .8-2.2 2.2-.2-1.4-.8-2-2.2-2.2 1.4-.2 2-.8 2.2-2.2Z\" />\n </svg>\n);\n\nexport const defaultIcons: Record<SnackbarVariant, ReactNode> = {\n neutral: BellIcon,\n success: CheckIcon,\n error: ErrorIcon,\n warning: WarningIcon,\n info: InfoIcon,\n loading: SpinnerIcon,\n custom: SparkIcon,\n};\n\nexport const DefaultCloseIcon = (\n <svg viewBox=\"0 0 16 16\" width=\"14\" height=\"14\" aria-hidden=\"true\">\n <path\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"1.6\"\n strokeLinecap=\"round\"\n d=\"M4.2 4.2l7.6 7.6M11.8 4.2l-7.6 7.6\"\n />\n </svg>\n);\n","import {\n useEffect,\n useRef,\n useState,\n type AnimationEvent,\n type CSSProperties,\n type FocusEvent,\n type PointerEvent as ReactPointerEvent,\n type ReactNode,\n} from 'react';\nimport type {\n SnackbarRecord,\n SnackbarStore,\n SnackbarVariant,\n} from '../types';\nimport { DefaultCloseIcon, defaultIcons } from './icons';\n\ninterface SnackbarItemProps {\n record: SnackbarRecord;\n store: SnackbarStore;\n icons?: Partial<Record<SnackbarVariant, ReactNode>> | undefined;\n closeIcon?: ReactNode | undefined;\n closeLabel: string;\n pauseOnHover: boolean;\n pauseOnFocus: boolean;\n swipeToDismiss: boolean;\n swipeThreshold: number;\n}\n\ninterface Gesture {\n pointerId: number;\n startX: number;\n startY: number;\n axis: 'pending' | 'x';\n}\n\nexport function SnackbarItem({\n record,\n store,\n icons,\n closeIcon,\n closeLabel,\n pauseOnHover,\n pauseOnFocus,\n swipeToDismiss,\n swipeThreshold,\n}: SnackbarItemProps) {\n const [dragX, setDragX] = useState(0);\n const [dragging, setDragging] = useState(false);\n const [actionPending, setActionPending] = useState(false);\n const gesture = useRef<Gesture | null>(null);\n const dragXRef = useRef(0);\n const draggingRef = useRef(false);\n const suppressClick = useRef(false);\n const surfaceRef = useRef<HTMLDivElement>(null);\n\n const { id, phase, action, title, message, variant, duration } = record;\n\n useEffect(() => {\n store.notifyShown(id);\n }, [store, id]);\n\n useEffect(() => {\n if (phase !== 'exiting') return;\n const timeout = setTimeout(() => store.notifyExited(id), 400);\n return () => clearTimeout(timeout);\n }, [phase, store, id]);\n\n const resetDrag = () => {\n dragXRef.current = 0;\n draggingRef.current = false;\n setDragX(0);\n setDragging(false);\n };\n\n const pauseForDrag = () => {\n store.pause(id, 'drag');\n };\n\n const resumeForDrag = () => {\n store.resume(id, 'drag');\n };\n\n const handlePointerDown = (event: ReactPointerEvent<HTMLDivElement>) => {\n suppressClick.current = false;\n if (!swipeToDismiss || phase === 'exiting') return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n\n const target = event.target as HTMLElement;\n if (\n target.closest(\n 'button, a, input, textarea, select, [role=\"button\"], [data-prs-no-swipe]',\n )\n ) {\n return;\n }\n\n gesture.current = {\n pointerId: event.pointerId,\n startX: event.clientX,\n startY: event.clientY,\n axis: 'pending',\n };\n };\n\n const handlePointerMove = (event: ReactPointerEvent<HTMLDivElement>) => {\n const current = gesture.current;\n if (!current) return;\n\n const dx = event.clientX - current.startX;\n const dy = event.clientY - current.startY;\n\n if (current.axis === 'pending') {\n if (Math.abs(dx) < 6 && Math.abs(dy) < 6) return;\n if (Math.abs(dy) > Math.abs(dx)) {\n // Vertical intent: let the page scroll.\n gesture.current = null;\n return;\n }\n current.axis = 'x';\n draggingRef.current = true;\n setDragging(true);\n pauseForDrag();\n surfaceRef.current?.setPointerCapture?.(event.pointerId);\n }\n\n if (event.cancelable) event.preventDefault();\n const absolute = Math.abs(dx);\n const damped = absolute > 96 ? 96 + (absolute - 96) * 0.32 : absolute;\n const next = Math.sign(dx) * damped;\n dragXRef.current = next;\n setDragX(next);\n if (absolute > 8) suppressClick.current = true;\n };\n\n const finishGesture = (event: ReactPointerEvent<HTMLDivElement>) => {\n const current = gesture.current;\n if (!current) return;\n\n if (draggingRef.current) {\n const shouldDismiss = Math.abs(dragXRef.current) >= swipeThreshold;\n resetDrag();\n resumeForDrag();\n if (surfaceRef.current?.hasPointerCapture?.(current.pointerId)) {\n surfaceRef.current.releasePointerCapture(current.pointerId);\n }\n if (shouldDismiss) {\n suppressClick.current = true;\n store.dismiss(id, 'swipe');\n }\n } else {\n resetDrag();\n }\n\n gesture.current = null;\n if (event.type === 'pointercancel') resumeForDrag();\n };\n\n const handleLostPointerCapture = () => {\n if (!draggingRef.current) return;\n resetDrag();\n resumeForDrag();\n gesture.current = null;\n };\n\n const handleAnimationEnd = (event: AnimationEvent<HTMLDivElement>) => {\n if (event.target !== event.currentTarget) return;\n if (phase === 'exiting') store.notifyExited(id);\n };\n\n const handleAction = async () => {\n if (!action || actionPending) return;\n\n const result = action.onClick?.(id);\n if (result && typeof result.then === 'function') {\n setActionPending(true);\n try {\n await result;\n } finally {\n setActionPending(false);\n }\n }\n\n if (action.closeOnClick !== false) store.dismiss(id, 'action');\n };\n\n const handleBlur = (event: FocusEvent<HTMLDivElement>) => {\n if (!pauseOnFocus) return;\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {\n store.resume(id, 'focus');\n }\n };\n\n const resolvedIcon =\n record.icon === undefined\n ? (icons?.[variant] ?? defaultIcons[variant])\n : record.icon;\n const showIcon = record.icon !== false;\n const showProgress =\n record.progress && Number.isFinite(duration) && duration > 0;\n\n const style = {\n ...record.style,\n '--prs-drag-x': `${dragX}px`,\n '--prs-drag-opacity': String(\n 1 - Math.min(Math.abs(dragX) / 300, 0.55),\n ),\n } as CSSProperties;\n\n return (\n <div\n className={`prs-item${record.className ? ` ${record.className}` : ''}`}\n data-variant={variant}\n data-tone={record.tone}\n data-size={record.size}\n data-state={phase}\n data-paused={record.paused ? 'true' : 'false'}\n data-dragging={dragging ? 'true' : 'false'}\n data-has-icon={showIcon ? 'true' : 'false'}\n data-dismissible={record.dismissible ? 'true' : 'false'}\n data-prs-id={record.id}\n data-position={record.position}\n style={style}\n role={variant === 'error' ? 'alert' : 'status'}\n aria-live={variant === 'error' ? 'assertive' : 'polite'}\n aria-atomic=\"true\"\n aria-busy={actionPending || variant === 'loading' ? true : undefined}\n onPointerEnter={() => {\n if (pauseOnHover) store.pause(id, 'hover');\n }}\n onPointerLeave={() => {\n if (pauseOnHover) store.resume(id, 'hover');\n }}\n onFocus={() => {\n if (pauseOnFocus) store.pause(id, 'focus');\n }}\n onBlur={handleBlur}\n onKeyDown={(event) => {\n if (event.key === 'Escape' && record.dismissible) {\n event.stopPropagation();\n store.dismiss(id, 'escape');\n }\n }}\n onAnimationEnd={handleAnimationEnd}\n >\n <div\n ref={surfaceRef}\n className=\"prs-item__surface\"\n onClickCapture={(event) => {\n if (!suppressClick.current) return;\n suppressClick.current = false;\n event.preventDefault();\n event.stopPropagation();\n }}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={finishGesture}\n onPointerCancel={finishGesture}\n onLostPointerCapture={handleLostPointerCapture}\n >\n {showIcon ? (\n <span className=\"prs-item__icon\" aria-hidden=\"true\">\n {resolvedIcon}\n </span>\n ) : null}\n\n <div\n className=\"prs-item__content\"\n data-has-title={title !== undefined && title !== null ? 'true' : 'false'}\n >\n {title !== undefined && title !== null ? (\n <div className=\"prs-item__title\">{title}</div>\n ) : null}\n {message !== undefined && message !== null ? (\n <div className=\"prs-item__message\">{message}</div>\n ) : null}\n {action ? (\n <div className=\"prs-item__actions\">\n <button\n type=\"button\"\n className=\"prs-action\"\n onClick={handleAction}\n disabled={actionPending}\n aria-busy={actionPending || undefined}\n >\n {actionPending ? (\n <span className=\"prs-action__spinner\" aria-hidden=\"true\" />\n ) : null}\n <span>{action.label}</span>\n </button>\n </div>\n ) : null}\n </div>\n\n {record.dismissible ? (\n <button\n type=\"button\"\n className=\"prs-close\"\n aria-label={closeLabel}\n onClick={() => store.dismiss(id, 'manual')}\n >\n {closeIcon ?? DefaultCloseIcon}\n </button>\n ) : null}\n\n {showProgress ? (\n <div className=\"prs-progress\" aria-hidden=\"true\">\n <span\n key={duration}\n className=\"prs-progress__bar\"\n style={{ animationDuration: `${duration}ms` }}\n />\n </div>\n ) : null}\n </div>\n </div>\n );\n}\n","import {\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n useSyncExternalStore,\n type CSSProperties,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport type {\n SnackbarHostProps,\n SnackbarPosition,\n SnackbarRecord,\n} from './types';\nimport { SnackbarItem } from './components/SnackbarItem';\n\nconst POSITIONS: readonly SnackbarPosition[] = [\n 'top-left',\n 'top-center',\n 'top-right',\n 'bottom-left',\n 'bottom-center',\n 'bottom-right',\n];\n\nexport function SnackbarHost({\n store,\n maxVisible = 3,\n offset = 20,\n gap = 12,\n width = 384,\n theme = 'auto',\n container,\n pauseOnHover = true,\n pauseOnFocus = true,\n pauseOnDocumentHidden = true,\n swipeToDismiss = true,\n swipeThreshold = 88,\n icons,\n closeIcon,\n closeLabel = 'Dismiss notification',\n regionLabel = 'Notifications',\n className,\n style,\n zIndex = 2147483000,\n dir,\n}: SnackbarHostProps) {\n const records = useSyncExternalStore(\n store.subscribe,\n store.getSnapshot,\n store.getServerSnapshot,\n );\n const [portalNode, setPortalNode] = useState<HTMLElement | null>(null);\n const regionRefs = useRef(new Map<SnackbarPosition, HTMLElement>());\n const topsRef = useRef(new Map<string, number>());\n\n useEffect(() => {\n if (typeof document === 'undefined') return;\n const target =\n typeof container === 'function'\n ? container()\n : container ?? document.body;\n setPortalNode(target);\n return () => setPortalNode(null);\n }, [container]);\n\n useEffect(() => {\n if (!pauseOnDocumentHidden || typeof document === 'undefined') return;\n\n const sync = () => store.setPageHidden(document.visibilityState === 'hidden');\n sync();\n document.addEventListener('visibilitychange', sync);\n return () => {\n document.removeEventListener('visibilitychange', sync);\n store.setPageHidden(false);\n };\n }, [store, pauseOnDocumentHidden]);\n\n // FLIP: when the stack grows or collapses, existing cards glide into their\n // new slot instead of snapping. New cards are left to the CSS enter spring.\n useLayoutEffect(() => {\n if (!portalNode) {\n topsRef.current.clear();\n return;\n }\n if (typeof window === 'undefined') return;\n\n const reduced =\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n const next = new Map<string, number>();\n\n for (const region of regionRefs.current.values()) {\n const regionTop = region.getBoundingClientRect().top;\n const nodes = region.querySelectorAll<HTMLElement>('[data-prs-id]');\n\n for (const node of nodes) {\n const id = node.dataset.prsId;\n if (!id) continue;\n\n const top = regionTop + node.offsetTop;\n next.set(id, top);\n\n const previous = topsRef.current.get(id);\n if (\n reduced ||\n previous === undefined ||\n node.dataset.state === 'exiting' ||\n typeof node.animate !== 'function'\n ) {\n continue;\n }\n\n const delta = previous - top;\n if (Math.abs(delta) < 0.5) continue;\n\n node.animate(\n [\n { transform: `translate3d(0, ${delta}px, 0)` },\n { transform: 'translate3d(0, 0, 0)' },\n ],\n {\n duration: 320,\n easing: 'cubic-bezier(0.22, 1, 0.36, 1)',\n },\n );\n }\n }\n\n topsRef.current = next;\n });\n\n if (!portalNode) return null;\n\n const byPosition = new Map<SnackbarPosition, SnackbarRecord[]>();\n for (const record of records) {\n const bucket = byPosition.get(record.position);\n if (bucket) bucket.push(record);\n else byPosition.set(record.position, [record]);\n }\n\n const limit = Math.max(1, Math.floor(maxVisible));\n\n const rootStyle = {\n '--prs-width': `${width}px`,\n '--prs-offset': `${offset}px`,\n '--prs-gap': `${gap}px`,\n '--prs-z-index': String(zIndex),\n ...style,\n } as CSSProperties;\n\n return createPortal(\n <div\n className={`prs-root${className ? ` ${className}` : ''}`}\n data-prs-theme={theme}\n dir={dir}\n style={rootStyle}\n >\n {POSITIONS.map((position) => {\n const items = byPosition.get(position);\n if (!items || items.length === 0) return null;\n const visible = items.slice(0, limit);\n\n return (\n <section\n key={position}\n ref={(node) => {\n if (node) regionRefs.current.set(position, node);\n else regionRefs.current.delete(position);\n }}\n className=\"prs-region\"\n data-position={position}\n aria-label={regionLabel}\n >\n {visible.map((record) => (\n <SnackbarItem\n key={record.id}\n record={record}\n store={store}\n icons={icons}\n closeIcon={closeIcon}\n closeLabel={closeLabel}\n pauseOnHover={pauseOnHover}\n pauseOnFocus={pauseOnFocus}\n swipeToDismiss={swipeToDismiss}\n swipeThreshold={swipeThreshold}\n />\n ))}\n </section>\n );\n })}\n </div>,\n portalNode,\n );\n}\n","import {\n createContext,\n useContext,\n useEffect,\n useMemo,\n type ReactNode,\n} from 'react';\nimport { getDefaultStore } from './core/defaultStore';\nimport { SnackbarHost } from './SnackbarHost';\nimport type {\n SnackbarApi,\n SnackbarOptions,\n SnackbarProviderProps,\n SnackbarStore,\n SnackbarVariant,\n} from './types';\n\ninterface SnackbarContextValue {\n store: SnackbarStore;\n api: SnackbarApi;\n}\n\nconst SnackbarContext = createContext<SnackbarContextValue | null>(null);\n\ntype PresetOptions = Omit<SnackbarOptions, 'message' | 'variant'>;\n\nexport function SnackbarProvider({\n children,\n store: providedStore,\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n maxVisible,\n ...hostProps\n}: SnackbarProviderProps) {\n const store = useMemo(\n () =>\n // Falling back to the shared default store is what makes the\n // module-level `toast` API render without extra wiring.\n providedStore ?? getDefaultStore(),\n // The store is intentionally created once per provider instance.\n // Subsequent config changes are pushed below.\n [providedStore],\n );\n\n useEffect(() => {\n store.setConfig({\n position,\n duration,\n dismissible,\n progress,\n tone,\n size,\n maxVisible,\n });\n }, [store, position, duration, dismissible, progress, tone, size, maxVisible]);\n\n const api = useMemo<SnackbarApi>(() => {\n const preset =\n (variant: SnackbarVariant) =>\n (message: ReactNode, options: PresetOptions = {}) =>\n store.show({ ...options, message, variant });\n\n return {\n show: store.show,\n update: store.update,\n dismiss: store.dismiss,\n dismissAll: store.dismissAll,\n promise: store.promise,\n success: preset('success'),\n error: preset('error'),\n warning: preset('warning'),\n info: preset('info'),\n neutral: preset('neutral'),\n custom: preset('custom'),\n loading: (message, options = {}) =>\n store.show({\n ...options,\n message,\n variant: 'loading',\n duration:\n options.duration !== undefined ? options.duration : null,\n }),\n store,\n };\n }, [store]);\n\n const value = useMemo(() => ({ store, api }), [store, api]);\n\n return (\n <SnackbarContext.Provider value={value}>\n {children}\n <SnackbarHost\n store={store}\n maxVisible={maxVisible ?? store.getConfig().maxVisible}\n {...hostProps}\n />\n </SnackbarContext.Provider>\n );\n}\n\nfunction useSnackbarContext(): SnackbarContextValue {\n const context = useContext(SnackbarContext);\n if (!context) {\n throw new Error(\n 'useSnackbar must be used inside a <SnackbarProvider>. ' +\n 'Render the provider above the component that displays snackbars.',\n );\n }\n return context;\n}\n\n/** Imperative API for showing and managing snackbars. */\nexport function useSnackbar(): SnackbarApi {\n return useSnackbarContext().api;\n}\n\n/** Low-level store access for subscriptions and advanced integrations. */\nexport function useSnackbarStore(): SnackbarStore {\n return useSnackbarContext().store;\n}\n","import { isValidElement, type ReactNode } from 'react';\nimport { getDefaultStore } from './core/defaultStore';\nimport type {\n SnackbarCloseReason,\n SnackbarOptions,\n SnackbarPromiseOptions,\n SnackbarVariant,\n ToastApi,\n ToastPresetOptions,\n} from './types';\n\n/** Same shape as `SnackbarOptions`, minus what the preset supplies. */\nfunction isOptionsObject(value: unknown): value is SnackbarOptions {\n return (\n typeof value === 'object' &&\n value !== null &&\n !Array.isArray(value) &&\n !isValidElement(value) &&\n !('$$typeof' in value)\n );\n}\n\nfunction preset(variant: SnackbarVariant) {\n return (message: ReactNode, options: ToastPresetOptions = {}): string =>\n getDefaultStore().show({ ...options, message, variant });\n}\n\nfunction createToast(): ToastApi {\n const toast = ((\n content: ReactNode | SnackbarOptions,\n options?: ToastPresetOptions,\n ): string => {\n // `toast({ message, variant })` and `toast('Saved')` are both valid.\n if (options === undefined && isOptionsObject(content)) {\n return getDefaultStore().show(content);\n }\n return getDefaultStore().show({\n ...options,\n message: content as ReactNode,\n });\n }) as ToastApi;\n\n toast.show = (options) => getDefaultStore().show(options);\n toast.update = (id, options) => getDefaultStore().update(id, options);\n toast.dismiss = (id?: string, reason?: SnackbarCloseReason) =>\n getDefaultStore().dismiss(id, reason);\n toast.dismissAll = (reason?: SnackbarCloseReason) =>\n getDefaultStore().dismissAll(reason);\n\n toast.success = preset('success');\n toast.error = preset('error');\n toast.warning = preset('warning');\n toast.info = preset('info');\n toast.neutral = preset('neutral');\n toast.custom = preset('custom');\n toast.loading = (message, options = {}) =>\n getDefaultStore().show({\n ...options,\n message,\n variant: 'loading',\n duration: options.duration !== undefined ? options.duration : null,\n });\n\n toast.promise = <T,>(\n input: Promise<T>,\n messages: SnackbarPromiseOptions<T>,\n options?: SnackbarOptions,\n ): Promise<T> => getDefaultStore().promise(input, messages, options);\n\n Object.defineProperty(toast, 'store', {\n get: getDefaultStore,\n enumerable: true,\n });\n\n return toast;\n}\n\n/**\n * Fire-and-forget toast API that works anywhere — event handlers, data\n * layers, non-React modules — as long as a `<SnackbarProvider>` (or a\n * `<SnackbarHost store={getDefaultStore()} />`) is mounted.\n *\n * ```ts\n * import { toast } from 'react-snackbar-glass';\n *\n * toast.success('Deployment complete.', { title: 'v1.4.0 is live' });\n * toast.promise(save(), { loading: 'Saving…', success: 'Saved', error: 'Failed' });\n * ```\n */\nexport const toast: ToastApi = createToast();\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-snackbar-glass",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "A
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "A glassmorphic snackbar system for React — queueing, promises, swipe-to-dismiss and first-class theming with zero runtime dependencies.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"react",
|
|
7
7
|
"snackbar",
|
|
@@ -14,6 +14,14 @@
|
|
|
14
14
|
],
|
|
15
15
|
"license": "MIT",
|
|
16
16
|
"author": "react-snackbar-glass contributors",
|
|
17
|
+
"homepage": "https://gorkembayraktar.github.io/react-snackbar-glass/",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/gorkembayraktar/react-snackbar-glass.git"
|
|
21
|
+
},
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/gorkembayraktar/react-snackbar-glass/issues"
|
|
24
|
+
},
|
|
17
25
|
"type": "module",
|
|
18
26
|
"sideEffects": [
|
|
19
27
|
"**/*.css"
|