vue-toast-kit 1.0.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.
Files changed (52) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1145 -0
  3. package/dist/composables/useToast.d.ts +28 -0
  4. package/dist/composables/useToastContext.d.ts +6 -0
  5. package/dist/composables/useToastState.d.ts +7 -0
  6. package/dist/core/GroupManager.d.ts +16 -0
  7. package/dist/core/ToastBuffer.d.ts +19 -0
  8. package/dist/core/ToastQueue.d.ts +55 -0
  9. package/dist/core/UndoTimer.d.ts +23 -0
  10. package/dist/core/types.d.ts +114 -0
  11. package/dist/index.d.ts +23 -0
  12. package/dist/module.d.ts +1 -0
  13. package/dist/nuxt/module.cjs +2 -0
  14. package/dist/nuxt/module.cjs.map +1 -0
  15. package/dist/nuxt/module.d.ts +1 -0
  16. package/dist/nuxt/module.js +34 -0
  17. package/dist/nuxt/module.js.map +1 -0
  18. package/dist/plugin.d.ts +6 -0
  19. package/dist/style.css +1 -0
  20. package/dist/testing.d.ts +14 -0
  21. package/dist/vue-toast-kit.cjs +2 -0
  22. package/dist/vue-toast-kit.cjs.map +1 -0
  23. package/dist/vue-toast-kit.d.ts +540 -0
  24. package/dist/vue-toast-kit.js +1000 -0
  25. package/dist/vue-toast-kit.js.map +1 -0
  26. package/package.json +89 -0
  27. package/src/components/Toast.vue +222 -0
  28. package/src/components/ToastActions.vue +34 -0
  29. package/src/components/ToastContainer.vue +257 -0
  30. package/src/components/ToastIcon.vue +53 -0
  31. package/src/components/ToastProgressBar.vue +18 -0
  32. package/src/composables/useToast.ts +152 -0
  33. package/src/composables/useToastContext.ts +63 -0
  34. package/src/composables/useToastState.ts +18 -0
  35. package/src/core/GroupManager.ts +105 -0
  36. package/src/core/ToastBuffer.ts +45 -0
  37. package/src/core/ToastQueue.ts +377 -0
  38. package/src/core/UndoTimer.ts +90 -0
  39. package/src/core/types.ts +142 -0
  40. package/src/env.d.ts +7 -0
  41. package/src/index.ts +51 -0
  42. package/src/nuxt/composables.ts +13 -0
  43. package/src/nuxt/module.ts +52 -0
  44. package/src/nuxt/plugin.ts +8 -0
  45. package/src/plugin.ts +18 -0
  46. package/src/styles/animations.css +106 -0
  47. package/src/styles/base.css +201 -0
  48. package/src/styles/themes/dark.css +30 -0
  49. package/src/styles/themes/light.css +30 -0
  50. package/src/styles/themes/system.css +32 -0
  51. package/src/styles/tokens.css +74 -0
  52. package/src/testing.ts +81 -0
@@ -0,0 +1,28 @@
1
+ import { type Component, type VNode } from 'vue';
2
+ import type { ToastContext, ToastOptions, PromiseToastMessages, ToastPosition } from '../core/types';
3
+ declare function buildToastApi(ctx: ToastContext): {
4
+ (message: string, options?: ToastOptions): string;
5
+ success(message: string, options?: ToastOptions): string;
6
+ error(message: string, options?: ToastOptions): string;
7
+ warning(message: string, options?: ToastOptions): string;
8
+ info(message: string, options?: ToastOptions): string;
9
+ loading(message: string, options?: ToastOptions): string;
10
+ custom(component: Component, options?: ToastOptions): string;
11
+ dismiss(id?: string): void;
12
+ update(id: string, partial: Partial<ToastOptions> & {
13
+ message?: string | VNode;
14
+ }): void;
15
+ updateMessage(id: string, message: string | VNode): void;
16
+ isActive(id: string): boolean;
17
+ promise<T>(promise: Promise<T>, messages: PromiseToastMessages<T>, options?: ToastOptions): Promise<T>;
18
+ undo(message: string, options: ToastOptions & {
19
+ undo: NonNullable<ToastOptions["undo"]>;
20
+ }): string;
21
+ dismissAll(position?: ToastPosition): void;
22
+ pauseAll(): void;
23
+ resumeAll(): void;
24
+ };
25
+ export type ToastApi = ReturnType<typeof buildToastApi>;
26
+ export declare function useToast(context?: ToastContext): ToastApi;
27
+ export declare const toast: ToastApi;
28
+ export {};
@@ -0,0 +1,6 @@
1
+ import { type App } from 'vue';
2
+ import { type ToastContext, type GlobalToastOptions } from '../core/types';
3
+ export declare function getOrCreateGlobalContext(opts?: GlobalToastOptions): ToastContext;
4
+ export declare function createToastContext(opts?: GlobalToastOptions): ToastContext;
5
+ export declare function useToastContext(): ToastContext;
6
+ export declare function installContext(app: App, opts?: GlobalToastOptions): ToastContext;
@@ -0,0 +1,7 @@
1
+ import type { ToastContext, ToastItem } from '../core/types';
2
+ export declare function useToastState(context?: ToastContext): {
3
+ active: import("vue").ComputedRef<ToastItem[]>;
4
+ pending: import("vue").ComputedRef<ToastItem[]>;
5
+ count: import("vue").ComputedRef<number>;
6
+ has: (id: string) => boolean;
7
+ };
@@ -0,0 +1,16 @@
1
+ import type { ToastItem } from './types';
2
+ export declare class GroupManager {
3
+ private groups;
4
+ private expandedGroups;
5
+ private getItems;
6
+ private hideItem;
7
+ private showItem;
8
+ constructor(getItems: (ids: string[]) => ToastItem[], hideItem: (id: string) => void, showItem: (id: string) => void);
9
+ add(id: string, groupKey: string): void;
10
+ remove(id: string, groupKey: string): void;
11
+ toggleExpand(groupKey: string): void;
12
+ isExpanded(groupKey: string): boolean;
13
+ getGroupIds(groupKey: string): string[];
14
+ hasGroup(groupKey: string): boolean;
15
+ clear(): void;
16
+ }
@@ -0,0 +1,19 @@
1
+ import type { VNode } from 'vue';
2
+ import type { ToastOptions } from './types';
3
+ interface BufferedToast {
4
+ message: string | VNode;
5
+ options: ToastOptions;
6
+ }
7
+ export declare const isServer: boolean;
8
+ export declare class ToastBuffer {
9
+ private buffer;
10
+ private flushed;
11
+ private flushCallbacks;
12
+ push(message: string | VNode, options: ToastOptions): void;
13
+ onFlush(cb: (items: BufferedToast[]) => void): void;
14
+ flush(): void;
15
+ isFlushed(): boolean;
16
+ get size(): number;
17
+ }
18
+ export declare const globalBuffer: ToastBuffer;
19
+ export {};
@@ -0,0 +1,55 @@
1
+ import { type VNode } from 'vue';
2
+ import { type ToastItem, type ToastOptions, type ToastPosition } from './types';
3
+ type EventListener<T extends unknown[]> = (...args: T) => void;
4
+ export declare class ToastQueue {
5
+ active: import("vue").ShallowReactive<ToastItem[]>;
6
+ pending: import("vue").ShallowReactive<ToastItem[]>;
7
+ private maxVisible;
8
+ private hiddenItems;
9
+ private timers;
10
+ private groupManager;
11
+ private rateLimit;
12
+ private rateLimitWindowMs;
13
+ private recentAddTimes;
14
+ private persistStorage;
15
+ private addListeners;
16
+ private dismissListeners;
17
+ private updateListeners;
18
+ constructor(maxVisible?: number, options?: {
19
+ rateLimit?: number;
20
+ rateLimitWindowMs?: number;
21
+ persistStorage?: boolean;
22
+ });
23
+ /** Subscribe to toast add events. Returns an unsubscribe function. */
24
+ onAdd(fn: EventListener<[ToastItem]>): () => void;
25
+ /** Subscribe to toast dismiss events. Returns an unsubscribe function. */
26
+ onDismiss(fn: EventListener<[string]>): () => void;
27
+ /** Subscribe to toast update events. Returns an unsubscribe function. */
28
+ onUpdate(fn: EventListener<[string, Partial<ToastOptions>]>): () => void;
29
+ private emit;
30
+ private isRateLimited;
31
+ private restoreFromStorage;
32
+ private saveToStorage;
33
+ private removeFromStorage;
34
+ get visibleActive(): ToastItem[];
35
+ isHidden(id: string): boolean;
36
+ add(message: string | VNode, options?: ToastOptions): string;
37
+ remove(id: string): void;
38
+ update(id: string, partial: Partial<ToastOptions>): void;
39
+ dismiss(id?: string): void;
40
+ dismissAll(position?: ToastPosition): void;
41
+ isActive(id: string): boolean;
42
+ pauseAll(): void;
43
+ resumeAll(): void;
44
+ setMaxVisible(n: number): void;
45
+ toggleGroupExpand(groupKey: string): void;
46
+ isGroupExpanded(groupKey: string): boolean;
47
+ destroy(): void;
48
+ private createItem;
49
+ private startTimer;
50
+ private stopTimer;
51
+ private mergeOptions;
52
+ private findLowestPriorityIndex;
53
+ private sortPending;
54
+ }
55
+ export {};
@@ -0,0 +1,23 @@
1
+ export declare class UndoTimer {
2
+ private timerId;
3
+ private tickId;
4
+ private elapsed;
5
+ private startTime;
6
+ private _remaining;
7
+ private _isPaused;
8
+ private static readonly TICK_INTERVAL;
9
+ readonly duration: number;
10
+ readonly onExpire: () => void;
11
+ readonly onTick?: (remaining: number) => void;
12
+ constructor(duration: number, onExpire: () => void, onTick?: (remaining: number) => void);
13
+ get remaining(): number;
14
+ get isPaused(): boolean;
15
+ start(): void;
16
+ pause(): void;
17
+ resume(): void;
18
+ destroy(): void;
19
+ private scheduleExpiry;
20
+ private clearExpiry;
21
+ private startTick;
22
+ private clearTick;
23
+ }
@@ -0,0 +1,114 @@
1
+ import type { Component, VNode, Ref } from 'vue';
2
+ export type ToastType = 'info' | 'success' | 'warning' | 'error' | 'loading' | 'custom';
3
+ export type ToastPriority = 'critical' | 'high' | 'normal' | 'low';
4
+ export type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
5
+ export interface ToastAction {
6
+ label: string;
7
+ onClick: () => void;
8
+ }
9
+ export interface ToastUndo {
10
+ label?: string;
11
+ onUndo: () => void | Promise<void>;
12
+ duration?: number;
13
+ }
14
+ export interface ToastDesignTokens {
15
+ colorBg?: string;
16
+ colorText?: string;
17
+ colorBorder?: string;
18
+ colorSuccess?: string;
19
+ colorError?: string;
20
+ colorWarning?: string;
21
+ colorInfo?: string;
22
+ colorLoading?: string;
23
+ fontFamily?: string;
24
+ fontSize?: string;
25
+ fontWeight?: string;
26
+ lineHeight?: string;
27
+ borderRadius?: string;
28
+ borderWidth?: string;
29
+ shadow?: string;
30
+ paddingX?: string;
31
+ paddingY?: string;
32
+ iconSize?: string;
33
+ progressHeight?: string;
34
+ maxWidth?: string;
35
+ minWidth?: string;
36
+ transitionDuration?: string;
37
+ transitionEasing?: string;
38
+ zIndex?: string;
39
+ }
40
+ export interface ToastOptions {
41
+ id?: string;
42
+ type?: ToastType;
43
+ priority?: ToastPriority;
44
+ duration?: number;
45
+ position?: ToastPosition;
46
+ closable?: boolean;
47
+ groupKey?: string;
48
+ icon?: Component | string | false;
49
+ action?: ToastAction;
50
+ undo?: ToastUndo;
51
+ onClose?: () => void;
52
+ onAutoClose?: () => void;
53
+ pauseOnHover?: boolean;
54
+ pauseOnFocusLoss?: boolean;
55
+ swipeToDismiss?: boolean;
56
+ persist?: boolean;
57
+ component?: Component;
58
+ componentProps?: Record<string, unknown>;
59
+ ariaLive?: 'assertive' | 'polite';
60
+ theme?: 'light' | 'dark' | 'system' | ToastDesignTokens;
61
+ }
62
+ export interface ToastItem {
63
+ id: string;
64
+ message: string | VNode;
65
+ options: Required<Omit<ToastOptions, 'component' | 'componentProps' | 'icon' | 'action' | 'undo' | 'theme' | 'position'>> & {
66
+ position?: ToastPosition;
67
+ component?: Component;
68
+ componentProps?: Record<string, unknown>;
69
+ icon?: Component | string | false;
70
+ action?: ToastAction;
71
+ undo?: ToastUndo;
72
+ theme?: 'light' | 'dark' | 'system' | ToastDesignTokens;
73
+ };
74
+ createdAt: number;
75
+ remaining: Ref<number>;
76
+ isPaused: Ref<boolean>;
77
+ groupCount: Ref<number>;
78
+ isGrouped: Ref<boolean>;
79
+ pause(): void;
80
+ resume(): void;
81
+ dismiss(): void;
82
+ update(opts: Partial<ToastOptions>): void;
83
+ }
84
+ export interface PromiseToastMessages<T = unknown> {
85
+ loading: string;
86
+ success: string | ((data: T) => string);
87
+ error: string | ((err: unknown) => string);
88
+ }
89
+ export interface ToastContext {
90
+ queue: import('./ToastQueue').ToastQueue;
91
+ addToast(message: string | VNode, options?: ToastOptions): string;
92
+ dismiss(id?: string): void;
93
+ update(id: string, options: Partial<ToastOptions>): void;
94
+ isActive(id: string): boolean;
95
+ }
96
+ export interface GlobalToastOptions {
97
+ position?: ToastPosition;
98
+ maxVisible?: number;
99
+ duration?: number;
100
+ theme?: 'light' | 'dark' | 'system';
101
+ ignoreSSR?: boolean;
102
+ pauseOnHover?: boolean;
103
+ pauseOnFocusLoss?: boolean;
104
+ closable?: boolean;
105
+ /** Max toasts added within rateLimitWindowMs before extras are dropped. */
106
+ rateLimit?: number;
107
+ /** Window in ms for rateLimit (default: 1000). */
108
+ rateLimitWindowMs?: number;
109
+ /** Enable automatic localStorage persist/restore for toasts with persist:true. */
110
+ persistStorage?: boolean;
111
+ }
112
+ export declare const PRIORITY_ORDER: Record<ToastPriority, number>;
113
+ export declare const DEFAULT_OPTIONS: Required<Omit<ToastOptions, 'id' | 'component' | 'componentProps' | 'icon' | 'action' | 'undo' | 'groupKey' | 'theme' | 'onClose' | 'onAutoClose' | 'ariaLive' | 'position'>>;
114
+ export declare const TOAST_CONTEXT_KEY: unique symbol;
@@ -0,0 +1,23 @@
1
+ import './styles/tokens.css';
2
+ import './styles/base.css';
3
+ import './styles/animations.css';
4
+ import './styles/themes/light.css';
5
+ import './styles/themes/dark.css';
6
+ import './styles/themes/system.css';
7
+ export type { ToastType, ToastPriority, ToastPosition, ToastOptions, ToastItem, ToastAction, ToastUndo, PromiseToastMessages, ToastContext, GlobalToastOptions, ToastDesignTokens, } from './core/types';
8
+ export { TOAST_CONTEXT_KEY, PRIORITY_ORDER, DEFAULT_OPTIONS } from './core/types';
9
+ export { ToastQueue } from './core/ToastQueue';
10
+ export { UndoTimer } from './core/UndoTimer';
11
+ export { GroupManager } from './core/GroupManager';
12
+ export { globalBuffer, isServer } from './core/ToastBuffer';
13
+ export { useToast, toast } from './composables/useToast';
14
+ export type { ToastApi } from './composables/useToast';
15
+ export { useToastState } from './composables/useToastState';
16
+ export { useToastContext, createToastContext, getOrCreateGlobalContext, } from './composables/useToastContext';
17
+ export { default as ToastContainer } from './components/ToastContainer.vue';
18
+ export { default as Toast } from './components/Toast.vue';
19
+ export { default as ToastIcon } from './components/ToastIcon.vue';
20
+ export { default as ToastProgressBar } from './components/ToastProgressBar.vue';
21
+ export { default as ToastActions } from './components/ToastActions.vue';
22
+ export { VueToastPlugin } from './plugin';
23
+ export type { VueToastPluginOptions } from './plugin';
@@ -0,0 +1 @@
1
+ export { }
@@ -0,0 +1,2 @@
1
+ "use strict";const t=require("@nuxt/kit");var o=typeof document<"u"?document.currentScript:null;const n=t.defineNuxtModule({meta:{name:"vue-toast-kit",configKey:"vueToastKit",compatibility:{nuxt:">=3.0.0"}},defaults:{position:"bottom-right",maxVisible:5,duration:4e3,theme:"system",closable:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,registerComponent:!0},setup(s,a){const e=t.createResolver(typeof document>"u"?require("url").pathToFileURL(__filename).href:o&&o.tagName.toUpperCase()==="SCRIPT"&&o.src||new URL("nuxt/module.cjs",document.baseURI).href);a.options.runtimeConfig.public.vueToastKit=s,t.addPlugin(e.resolve("./plugin")),t.addImports([{name:"useToast",from:e.resolve("../composables/useToast")},{name:"useToastState",from:e.resolve("../composables/useToastState")},{name:"createToastContext",from:e.resolve("../composables/useToastContext")},{name:"toast",from:e.resolve("../composables/useToast")}]),s.registerComponent!==!1&&t.addComponent({name:"ToastContainer",filePath:e.resolve("../components/ToastContainer.vue")}),a.options.css.push("vue-toast-kit/style.css")}});module.exports=n;
2
+ //# sourceMappingURL=module.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.cjs","sources":["../../src/nuxt/module.ts"],"sourcesContent":["import { defineNuxtModule, addPlugin, createResolver, addImports, addComponent } from '@nuxt/kit'\nimport type { GlobalToastOptions } from '../core/types'\n\nexport interface ModuleOptions extends GlobalToastOptions {\n registerComponent?: boolean\n}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: 'vue-toast-kit',\n configKey: 'vueToastKit',\n compatibility: { nuxt: '>=3.0.0' },\n },\n defaults: {\n position: 'bottom-right',\n maxVisible: 5,\n duration: 4000,\n theme: 'system',\n closable: true,\n pauseOnHover: true,\n pauseOnFocusLoss: true,\n registerComponent: true,\n },\n setup(options, nuxt) {\n const resolver = createResolver(import.meta.url)\n\n // Pass module options to runtimeConfig\n nuxt.options.runtimeConfig.public.vueToastKit = options as Record<string, unknown>\n\n // Register Nuxt plugin\n addPlugin(resolver.resolve('./plugin'))\n\n // Auto-imports composables\n addImports([\n { name: 'useToast', from: resolver.resolve('../composables/useToast') },\n { name: 'useToastState', from: resolver.resolve('../composables/useToastState') },\n { name: 'createToastContext', from: resolver.resolve('../composables/useToastContext') },\n { name: 'toast', from: resolver.resolve('../composables/useToast') },\n ])\n\n // Auto-import components\n if (options.registerComponent !== false) {\n addComponent({\n name: 'ToastContainer',\n filePath: resolver.resolve('../components/ToastContainer.vue'),\n })\n }\n\n // Inject CSS\n nuxt.options.css.push('vue-toast-kit/style.css')\n },\n})\n"],"names":["module$1","defineNuxtModule","options","nuxt","resolver","createResolver","addPlugin","addImports","addComponent"],"mappings":"gGAOA,MAAAA,EAAeC,mBAAgC,CAC7C,KAAM,CACJ,KAAM,gBACN,UAAW,cACX,cAAe,CAAE,KAAM,SAAA,CAAU,EAEnC,SAAU,CACR,SAAU,eACV,WAAY,EACZ,SAAU,IACV,MAAO,SACP,SAAU,GACV,aAAc,GACd,iBAAkB,GAClB,kBAAmB,EAAA,EAErB,MAAMC,EAASC,EAAM,CACnB,MAAMC,EAAWC,EAAAA,+KAA8B,EAG/CF,EAAK,QAAQ,cAAc,OAAO,YAAcD,EAGhDI,EAAAA,UAAUF,EAAS,QAAQ,UAAU,CAAC,EAGtCG,aAAW,CACT,CAAE,KAAM,WAAY,KAAMH,EAAS,QAAQ,yBAAyB,CAAA,EACpE,CAAE,KAAM,gBAAiB,KAAMA,EAAS,QAAQ,8BAA8B,CAAA,EAC9E,CAAE,KAAM,qBAAsB,KAAMA,EAAS,QAAQ,gCAAgC,CAAA,EACrF,CAAE,KAAM,QAAS,KAAMA,EAAS,QAAQ,yBAAyB,CAAA,CAAE,CACpE,EAGGF,EAAQ,oBAAsB,IAChCM,eAAa,CACX,KAAM,iBACN,SAAUJ,EAAS,QAAQ,kCAAkC,CAAA,CAC9D,EAIHD,EAAK,QAAQ,IAAI,KAAK,yBAAyB,CACjD,CACF,CAAC"}
@@ -0,0 +1 @@
1
+ export * from './module'
@@ -0,0 +1,34 @@
1
+ import { defineNuxtModule as s, createResolver as a, addPlugin as r, addImports as n, addComponent as m } from "@nuxt/kit";
2
+ const i = s({
3
+ meta: {
4
+ name: "vue-toast-kit",
5
+ configKey: "vueToastKit",
6
+ compatibility: { nuxt: ">=3.0.0" }
7
+ },
8
+ defaults: {
9
+ position: "bottom-right",
10
+ maxVisible: 5,
11
+ duration: 4e3,
12
+ theme: "system",
13
+ closable: !0,
14
+ pauseOnHover: !0,
15
+ pauseOnFocusLoss: !0,
16
+ registerComponent: !0
17
+ },
18
+ setup(o, t) {
19
+ const e = a(import.meta.url);
20
+ t.options.runtimeConfig.public.vueToastKit = o, r(e.resolve("./plugin")), n([
21
+ { name: "useToast", from: e.resolve("../composables/useToast") },
22
+ { name: "useToastState", from: e.resolve("../composables/useToastState") },
23
+ { name: "createToastContext", from: e.resolve("../composables/useToastContext") },
24
+ { name: "toast", from: e.resolve("../composables/useToast") }
25
+ ]), o.registerComponent !== !1 && m({
26
+ name: "ToastContainer",
27
+ filePath: e.resolve("../components/ToastContainer.vue")
28
+ }), t.options.css.push("vue-toast-kit/style.css");
29
+ }
30
+ });
31
+ export {
32
+ i as default
33
+ };
34
+ //# sourceMappingURL=module.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"module.js","sources":["../../src/nuxt/module.ts"],"sourcesContent":["import { defineNuxtModule, addPlugin, createResolver, addImports, addComponent } from '@nuxt/kit'\nimport type { GlobalToastOptions } from '../core/types'\n\nexport interface ModuleOptions extends GlobalToastOptions {\n registerComponent?: boolean\n}\n\nexport default defineNuxtModule<ModuleOptions>({\n meta: {\n name: 'vue-toast-kit',\n configKey: 'vueToastKit',\n compatibility: { nuxt: '>=3.0.0' },\n },\n defaults: {\n position: 'bottom-right',\n maxVisible: 5,\n duration: 4000,\n theme: 'system',\n closable: true,\n pauseOnHover: true,\n pauseOnFocusLoss: true,\n registerComponent: true,\n },\n setup(options, nuxt) {\n const resolver = createResolver(import.meta.url)\n\n // Pass module options to runtimeConfig\n nuxt.options.runtimeConfig.public.vueToastKit = options as Record<string, unknown>\n\n // Register Nuxt plugin\n addPlugin(resolver.resolve('./plugin'))\n\n // Auto-imports composables\n addImports([\n { name: 'useToast', from: resolver.resolve('../composables/useToast') },\n { name: 'useToastState', from: resolver.resolve('../composables/useToastState') },\n { name: 'createToastContext', from: resolver.resolve('../composables/useToastContext') },\n { name: 'toast', from: resolver.resolve('../composables/useToast') },\n ])\n\n // Auto-import components\n if (options.registerComponent !== false) {\n addComponent({\n name: 'ToastContainer',\n filePath: resolver.resolve('../components/ToastContainer.vue'),\n })\n }\n\n // Inject CSS\n nuxt.options.css.push('vue-toast-kit/style.css')\n },\n})\n"],"names":["module$1","defineNuxtModule","options","nuxt","resolver","createResolver","addPlugin","addImports","addComponent"],"mappings":";AAOA,MAAAA,IAAeC,EAAgC;AAAA,EAC7C,MAAM;AAAA,IACJ,MAAM;AAAA,IACN,WAAW;AAAA,IACX,eAAe,EAAE,MAAM,UAAA;AAAA,EAAU;AAAA,EAEnC,UAAU;AAAA,IACR,UAAU;AAAA,IACV,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,EAAA;AAAA,EAErB,MAAMC,GAASC,GAAM;AACnB,UAAMC,IAAWC,EAAe,YAAY,GAAG;AAG/C,IAAAF,EAAK,QAAQ,cAAc,OAAO,cAAcD,GAGhDI,EAAUF,EAAS,QAAQ,UAAU,CAAC,GAGtCG,EAAW;AAAA,MACT,EAAE,MAAM,YAAY,MAAMH,EAAS,QAAQ,yBAAyB,EAAA;AAAA,MACpE,EAAE,MAAM,iBAAiB,MAAMA,EAAS,QAAQ,8BAA8B,EAAA;AAAA,MAC9E,EAAE,MAAM,sBAAsB,MAAMA,EAAS,QAAQ,gCAAgC,EAAA;AAAA,MACrF,EAAE,MAAM,SAAS,MAAMA,EAAS,QAAQ,yBAAyB,EAAA;AAAA,IAAE,CACpE,GAGGF,EAAQ,sBAAsB,MAChCM,EAAa;AAAA,MACX,MAAM;AAAA,MACN,UAAUJ,EAAS,QAAQ,kCAAkC;AAAA,IAAA,CAC9D,GAIHD,EAAK,QAAQ,IAAI,KAAK,yBAAyB;AAAA,EACjD;AACF,CAAC;"}
@@ -0,0 +1,6 @@
1
+ import type { Plugin } from 'vue';
2
+ import type { GlobalToastOptions } from './core/types';
3
+ export interface VueToastPluginOptions extends GlobalToastOptions {
4
+ registerComponent?: boolean;
5
+ }
6
+ export declare const VueToastPlugin: Plugin<VueToastPluginOptions | void>;
package/dist/style.css ADDED
@@ -0,0 +1 @@
1
+ :root{--vtk-color-bg: #ffffff;--vtk-color-text: #1a1a1a;--vtk-color-text-muted: #6b7280;--vtk-color-border: rgba(0, 0, 0, .08);--vtk-color-success: #16a34a;--vtk-color-success-bg: #f0fdf4;--vtk-color-success-border: #bbf7d0;--vtk-color-error: #dc2626;--vtk-color-error-bg: #fef2f2;--vtk-color-error-border: #fecaca;--vtk-color-warning: #d97706;--vtk-color-warning-bg: #fffbeb;--vtk-color-warning-border: #fde68a;--vtk-color-info: #2563eb;--vtk-color-info-bg: #eff6ff;--vtk-color-info-border: #bfdbfe;--vtk-color-loading: #7c3aed;--vtk-color-loading-bg: #f5f3ff;--vtk-color-loading-border: #ddd6fe;--vtk-progress-color: currentColor;--vtk-progress-opacity: .25;--vtk-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--vtk-font-size: .875rem;--vtk-font-size-sm: .75rem;--vtk-font-weight: 500;--vtk-font-weight-normal: 400;--vtk-line-height: 1.5;--vtk-border-radius: 10px;--vtk-border-width: 1px;--vtk-shadow: 0 4px 16px rgba(0, 0, 0, .1), 0 1px 4px rgba(0, 0, 0, .06);--vtk-padding-x: 1rem;--vtk-padding-y: .75rem;--vtk-icon-size: 1.25rem;--vtk-progress-height: 3px;--vtk-max-width: 400px;--vtk-min-width: 280px;--vtk-gap: .5rem;--vtk-btn-color: inherit;--vtk-btn-bg: transparent;--vtk-btn-hover-bg: rgba(0, 0, 0, .06);--vtk-btn-radius: 6px;--vtk-btn-font-size: .8125rem;--vtk-btn-font-weight: 600;--vtk-btn-padding: .25rem .625rem;--vtk-transition-duration: .3s;--vtk-transition-easing: cubic-bezier(.4, 0, .2, 1);--vtk-z-index: 9999;--vtk-container-offset-x: 1rem;--vtk-container-offset-y: 1rem}.vtk-container{position:fixed;z-index:var(--vtk-z-index);display:flex;flex-direction:column;gap:var(--vtk-gap);pointer-events:none;max-width:var(--vtk-max-width);width:100%;box-sizing:border-box}.vtk-container--top-left{top:var(--vtk-container-offset-y);left:var(--vtk-container-offset-x);align-items:flex-start}.vtk-container--top-center{top:var(--vtk-container-offset-y);left:50%;transform:translate(-50%);align-items:center}.vtk-container--top-right{top:var(--vtk-container-offset-y);right:var(--vtk-container-offset-x);align-items:flex-end}.vtk-container--bottom-left{bottom:var(--vtk-container-offset-y);left:var(--vtk-container-offset-x);align-items:flex-start;flex-direction:column-reverse}.vtk-container--bottom-center{bottom:var(--vtk-container-offset-y);left:50%;transform:translate(-50%);align-items:center;flex-direction:column-reverse}.vtk-container--bottom-right{bottom:var(--vtk-container-offset-y);right:var(--vtk-container-offset-x);align-items:flex-end;flex-direction:column-reverse}.vtk-toast{position:relative;display:flex;align-items:flex-start;gap:.625rem;padding:var(--vtk-padding-y) var(--vtk-padding-x);background:var(--vtk-color-bg);border:var(--vtk-border-width) solid var(--vtk-color-border);border-radius:var(--vtk-border-radius);box-shadow:var(--vtk-shadow);font-family:var(--vtk-font-family);font-size:var(--vtk-font-size);font-weight:var(--vtk-font-weight-normal);line-height:var(--vtk-line-height);color:var(--vtk-color-text);pointer-events:all;overflow:hidden;max-width:100%;min-width:var(--vtk-min-width);box-sizing:border-box;cursor:default;-webkit-user-select:none;user-select:none}.vtk-toast--success{border-color:var(--vtk-color-success-border);background:var(--vtk-color-success-bg)}.vtk-toast--error{border-color:var(--vtk-color-error-border);background:var(--vtk-color-error-bg)}.vtk-toast--warning{border-color:var(--vtk-color-warning-border);background:var(--vtk-color-warning-bg)}.vtk-toast--info{border-color:var(--vtk-color-info-border);background:var(--vtk-color-info-bg)}.vtk-toast--loading{border-color:var(--vtk-color-loading-border);background:var(--vtk-color-loading-bg)}.vtk-icon{flex-shrink:0;width:var(--vtk-icon-size);height:var(--vtk-icon-size);display:flex;align-items:center;justify-content:center}.vtk-icon--success{color:var(--vtk-color-success)}.vtk-icon--error{color:var(--vtk-color-error)}.vtk-icon--warning{color:var(--vtk-color-warning)}.vtk-icon--info{color:var(--vtk-color-info)}.vtk-icon--loading{color:var(--vtk-color-loading)}.vtk-icon svg{width:100%;height:100%}.vtk-spinner{width:var(--vtk-icon-size);height:var(--vtk-icon-size);border:2px solid transparent;border-top-color:var(--vtk-color-loading);border-right-color:var(--vtk-color-loading);border-radius:50%;animation:vtk-spin .7s linear infinite;flex-shrink:0}.vtk-content{flex:1;min-width:0;display:flex;flex-direction:column;gap:.25rem}.vtk-message{font-size:var(--vtk-font-size);line-height:var(--vtk-line-height);color:var(--vtk-color-text);word-break:break-word}.vtk-actions{display:flex;align-items:center;gap:.375rem;margin-top:.25rem;flex-wrap:wrap}.vtk-btn{display:inline-flex;align-items:center;gap:.25rem;padding:var(--vtk-btn-padding);font-family:var(--vtk-font-family);font-size:var(--vtk-btn-font-size);font-weight:var(--vtk-btn-font-weight);color:var(--vtk-btn-color);background:var(--vtk-btn-bg);border:none;border-radius:var(--vtk-btn-radius);cursor:pointer;transition:background var(--vtk-transition-duration) var(--vtk-transition-easing);line-height:1}.vtk-btn:hover{background:var(--vtk-btn-hover-bg)}.vtk-btn:focus-visible{outline:2px solid currentColor;outline-offset:1px}.vtk-btn--action{color:var(--vtk-color-info);font-weight:600}.vtk-btn--undo{color:var(--vtk-color-warning);font-weight:600}.vtk-btn--close{color:var(--vtk-color-text-muted);padding:.25rem;margin-inline-start:auto;flex-shrink:0}.vtk-group-count{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .3rem;font-size:.6875rem;font-weight:700;background:#0000001a;border-radius:999px;cursor:pointer;flex-shrink:0}.vtk-progress{position:absolute;bottom:0;left:0;right:0;height:var(--vtk-progress-height);overflow:hidden;border-radius:0 0 var(--vtk-border-radius) var(--vtk-border-radius)}.vtk-progress__bar{height:100%;width:100%;transform-origin:left center;background:var(--vtk-progress-color);opacity:var(--vtk-progress-opacity);transition:transform .1s linear}.vtk-toast--success .vtk-progress__bar{background:var(--vtk-color-success);opacity:.4}.vtk-toast--error .vtk-progress__bar{background:var(--vtk-color-error);opacity:.4}.vtk-toast--warning .vtk-progress__bar{background:var(--vtk-color-warning);opacity:.4}.vtk-toast--info .vtk-progress__bar{background:var(--vtk-color-info);opacity:.4}.vtk-toast--loading .vtk-progress__bar{background:var(--vtk-color-loading);opacity:.4}[dir=rtl] .vtk-btn--close{margin-inline-start:auto}@media (max-width: 480px){.vtk-container{--vtk-container-offset-x: .75rem;--vtk-container-offset-y: .75rem;--vtk-max-width: calc(100vw - 1.5rem) ;--vtk-min-width: 0}.vtk-container--top-center,.vtk-container--bottom-center{left:var(--vtk-container-offset-x);right:var(--vtk-container-offset-x);transform:none;width:auto}}@media (prefers-reduced-motion: reduce){.vtk-progress__bar{transition:none}.vtk-spinner{animation-duration:1.5s}}.vtk-slide-top-right-enter-active,.vtk-slide-top-right-leave-active{transition:transform var(--vtk-transition-duration) var(--vtk-transition-easing),opacity var(--vtk-transition-duration) var(--vtk-transition-easing)}.vtk-slide-top-right-enter-from,.vtk-slide-top-right-leave-to{transform:translate(calc(100% + var(--vtk-container-offset-x)));opacity:0}.vtk-slide-top-left-enter-active,.vtk-slide-top-left-leave-active{transition:transform var(--vtk-transition-duration) var(--vtk-transition-easing),opacity var(--vtk-transition-duration) var(--vtk-transition-easing)}.vtk-slide-top-left-enter-from,.vtk-slide-top-left-leave-to{transform:translate(calc(-100% - var(--vtk-container-offset-x)));opacity:0}.vtk-slide-top-center-enter-active,.vtk-slide-top-center-leave-active{transition:transform var(--vtk-transition-duration) var(--vtk-transition-easing),opacity var(--vtk-transition-duration) var(--vtk-transition-easing)}.vtk-slide-top-center-enter-from,.vtk-slide-top-center-leave-to{transform:translateY(calc(-100% - var(--vtk-container-offset-y))) scale(.85);opacity:0}.vtk-slide-bottom-right-enter-active,.vtk-slide-bottom-right-leave-active{transition:transform var(--vtk-transition-duration) var(--vtk-transition-easing),opacity var(--vtk-transition-duration) var(--vtk-transition-easing)}.vtk-slide-bottom-right-enter-from,.vtk-slide-bottom-right-leave-to{transform:translate(calc(100% + var(--vtk-container-offset-x)));opacity:0}.vtk-slide-bottom-left-enter-active,.vtk-slide-bottom-left-leave-active{transition:transform var(--vtk-transition-duration) var(--vtk-transition-easing),opacity var(--vtk-transition-duration) var(--vtk-transition-easing)}.vtk-slide-bottom-left-enter-from,.vtk-slide-bottom-left-leave-to{transform:translate(calc(-100% - var(--vtk-container-offset-x)));opacity:0}.vtk-slide-bottom-center-enter-active,.vtk-slide-bottom-center-leave-active{transition:transform var(--vtk-transition-duration) var(--vtk-transition-easing),opacity var(--vtk-transition-duration) var(--vtk-transition-easing)}.vtk-slide-bottom-center-enter-from,.vtk-slide-bottom-center-leave-to{transform:translateY(calc(100% + var(--vtk-container-offset-y))) scale(.85);opacity:0}@media (prefers-reduced-motion: reduce){.vtk-slide-top-right-enter-from,.vtk-slide-top-left-enter-from,.vtk-slide-top-center-enter-from,.vtk-slide-bottom-right-enter-from,.vtk-slide-bottom-left-enter-from,.vtk-slide-bottom-center-enter-from,.vtk-slide-top-right-leave-to,.vtk-slide-top-left-leave-to,.vtk-slide-top-center-leave-to,.vtk-slide-bottom-right-leave-to,.vtk-slide-bottom-left-leave-to,.vtk-slide-bottom-center-leave-to{transform:none!important;opacity:0}.vtk-slide-top-right-enter-active,.vtk-slide-top-left-enter-active,.vtk-slide-top-center-enter-active,.vtk-slide-bottom-right-enter-active,.vtk-slide-bottom-left-enter-active,.vtk-slide-bottom-center-enter-active,.vtk-slide-top-right-leave-active,.vtk-slide-top-left-leave-active,.vtk-slide-top-center-leave-active,.vtk-slide-bottom-right-leave-active,.vtk-slide-bottom-left-leave-active,.vtk-slide-bottom-center-leave-active{transition-duration:.15s!important}}@keyframes vtk-spin{to{transform:rotate(360deg)}}@keyframes vtk-progress{0%{transform:scaleX(1)}to{transform:scaleX(0)}}.vtk-theme-light,[data-vtk-theme=light]{--vtk-color-bg: #ffffff;--vtk-color-text: #1a1a1a;--vtk-color-text-muted: #6b7280;--vtk-color-border: rgba(0, 0, 0, .08);--vtk-shadow: 0 4px 16px rgba(0, 0, 0, .1), 0 1px 4px rgba(0, 0, 0, .06);--vtk-color-success: #16a34a;--vtk-color-success-bg: #f0fdf4;--vtk-color-success-border: #bbf7d0;--vtk-color-error: #dc2626;--vtk-color-error-bg: #fef2f2;--vtk-color-error-border: #fecaca;--vtk-color-warning: #d97706;--vtk-color-warning-bg: #fffbeb;--vtk-color-warning-border: #fde68a;--vtk-color-info: #2563eb;--vtk-color-info-bg: #eff6ff;--vtk-color-info-border: #bfdbfe;--vtk-color-loading: #7c3aed;--vtk-color-loading-bg: #f5f3ff;--vtk-color-loading-border: #ddd6fe;--vtk-btn-hover-bg: rgba(0, 0, 0, .06)}.vtk-theme-dark,[data-vtk-theme=dark]{--vtk-color-bg: #1c1c1e;--vtk-color-text: #f5f5f7;--vtk-color-text-muted: #98989f;--vtk-color-border: rgba(255, 255, 255, .1);--vtk-shadow: 0 4px 20px rgba(0, 0, 0, .4), 0 1px 6px rgba(0, 0, 0, .2);--vtk-color-success: #34d399;--vtk-color-success-bg: #052e16;--vtk-color-success-border: rgba(52, 211, 153, .2);--vtk-color-error: #f87171;--vtk-color-error-bg: #2d0a0a;--vtk-color-error-border: rgba(248, 113, 113, .2);--vtk-color-warning: #fbbf24;--vtk-color-warning-bg: #2d1a00;--vtk-color-warning-border: rgba(251, 191, 36, .2);--vtk-color-info: #60a5fa;--vtk-color-info-bg: #0c1a2e;--vtk-color-info-border: rgba(96, 165, 250, .2);--vtk-color-loading: #a78bfa;--vtk-color-loading-bg: #1a0a2e;--vtk-color-loading-border: rgba(167, 139, 250, .2);--vtk-btn-hover-bg: rgba(255, 255, 255, .08)}@media (prefers-color-scheme: dark){.vtk-theme-system,[data-vtk-theme=system]{--vtk-color-bg: #1c1c1e;--vtk-color-text: #f5f5f7;--vtk-color-text-muted: #98989f;--vtk-color-border: rgba(255, 255, 255, .1);--vtk-shadow: 0 4px 20px rgba(0, 0, 0, .4), 0 1px 6px rgba(0, 0, 0, .2);--vtk-color-success: #34d399;--vtk-color-success-bg: #052e16;--vtk-color-success-border: rgba(52, 211, 153, .2);--vtk-color-error: #f87171;--vtk-color-error-bg: #2d0a0a;--vtk-color-error-border: rgba(248, 113, 113, .2);--vtk-color-warning: #fbbf24;--vtk-color-warning-bg: #2d1a00;--vtk-color-warning-border: rgba(251, 191, 36, .2);--vtk-color-info: #60a5fa;--vtk-color-info-bg: #0c1a2e;--vtk-color-info-border: rgba(96, 165, 250, .2);--vtk-color-loading: #a78bfa;--vtk-color-loading-bg: #1a0a2e;--vtk-color-loading-border: rgba(167, 139, 250, .2);--vtk-btn-hover-bg: rgba(255, 255, 255, .08)}}.vtk-container__list[data-v-4affbb62]{display:contents}.vtk-container--stack .vtk-container__list[data-v-4affbb62]{display:block;position:relative}.vtk-container--stack .vtk-toast-wrap[data-v-4affbb62]{display:block}
@@ -0,0 +1,14 @@
1
+ import type { ToastItem, ToastOptions } from './core/types';
2
+ import type { ToastApi } from './composables/useToast';
3
+ /** Create a minimal ToastItem stub for unit tests. */
4
+ export declare function createMockToast(overrides?: Partial<ToastItem> & {
5
+ options?: Partial<ToastOptions>;
6
+ }): ToastItem;
7
+ /**
8
+ * Create a spy-friendly mock of the ToastApi.
9
+ * All methods are no-ops that return empty strings unless overridden.
10
+ *
11
+ * @example
12
+ * vi.mock('vue-toast-kit', () => ({ useToast: () => mockUseToast() }))
13
+ */
14
+ export declare function mockUseToast(overrides?: Partial<ToastApi>): ToastApi;
@@ -0,0 +1,2 @@
1
+ "use strict";var J=Object.defineProperty;var q=(i,t,s)=>t in i?J(i,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):i[t]=s;var d=(i,t,s)=>q(i,typeof t!="symbol"?t+"":t,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("vue"),y={critical:3,high:2,normal:1,low:0},G={type:"info",priority:"normal",duration:4e3,closable:!0,pauseOnHover:!0,pauseOnFocusLoss:!0,swipeToDismiss:!0,persist:!1},N=Symbol("vue-toast-kit-context");class R{constructor(t,s,o){d(this,"groups",new Map);d(this,"expandedGroups",new Set);d(this,"getItems");d(this,"hideItem");d(this,"showItem");this.getItems=t,this.hideItem=s,this.showItem=o}add(t,s){if(!this.groups.has(s)){this.groups.set(s,[t]);return}const o=this.groups.get(s);o.push(t);const[n]=o,r=this.getItems([n])[0];r&&(r.groupCount.value=o.length),this.expandedGroups.has(s)||this.hideItem(t)}remove(t,s){const o=this.groups.get(s);if(!o)return;const n=o.indexOf(t);if(n===-1)return;if(o.splice(n,1),o.length===0){this.groups.delete(s),this.expandedGroups.delete(s);return}const[r]=o,a=this.getItems([r])[0];if(a&&(a.groupCount.value=o.length),n===0&&o.length>0&&(this.showItem(o[0]),!this.expandedGroups.has(s)))for(let l=1;l<o.length;l++)this.hideItem(o[l])}toggleExpand(t){const s=this.groups.get(t);if(s)if(this.expandedGroups.has(t)){this.expandedGroups.delete(t);for(let o=1;o<s.length;o++)this.hideItem(s[o])}else{this.expandedGroups.add(t);for(const o of s)this.showItem(o)}}isExpanded(t){return this.expandedGroups.has(t)}getGroupIds(t){return this.groups.get(t)??[]}hasGroup(t){return this.groups.has(t)}clear(){this.groups.clear(),this.expandedGroups.clear()}}const M=class M{constructor(t,s,o){d(this,"timerId",null);d(this,"tickId",null);d(this,"elapsed",0);d(this,"startTime",0);d(this,"_remaining",1);d(this,"_isPaused",!1);d(this,"duration");d(this,"onExpire");d(this,"onTick");this.duration=t,this.onExpire=s,this.onTick=o}get remaining(){return this._remaining}get isPaused(){return this._isPaused}start(){this.elapsed=0,this._remaining=1,this.startTime=Date.now(),this.scheduleExpiry(this.duration),this.onTick&&this.startTick()}pause(){this._isPaused||(this._isPaused=!0,this.elapsed+=Date.now()-this.startTime,this.clearExpiry(),this.clearTick())}resume(){if(!this._isPaused)return;this._isPaused=!1;const t=this.duration-this.elapsed;this.startTime=Date.now(),this.scheduleExpiry(t),this.onTick&&this.startTick()}destroy(){this.clearExpiry(),this.clearTick()}scheduleExpiry(t){this.timerId=setTimeout(()=>{var s;this.clearTick(),this._remaining=0,(s=this.onTick)==null||s.call(this,0),this.timerId=null,this.onExpire()},t)}clearExpiry(){this.timerId!==null&&(clearTimeout(this.timerId),this.timerId=null)}startTick(){this.tickId=setInterval(()=>{var s;const t=this.elapsed+(Date.now()-this.startTime);this._remaining=Math.max(0,1-t/this.duration),(s=this.onTick)==null||s.call(this,this._remaining)},M.TICK_INTERVAL)}clearTick(){this.tickId!==null&&(clearInterval(this.tickId),this.tickId=null)}};d(M,"TICK_INTERVAL",50);let w=M,Q=0;function Z(){return`vtk-${Date.now()}-${++Q}`}const b="vtk-persist";class z{constructor(t=5,s={}){d(this,"active",e.shallowReactive([]));d(this,"pending",e.shallowReactive([]));d(this,"maxVisible");d(this,"hiddenItems",e.reactive(new Set));d(this,"timers",new Map);d(this,"groupManager");d(this,"rateLimit");d(this,"rateLimitWindowMs");d(this,"recentAddTimes",[]);d(this,"persistStorage");d(this,"addListeners",new Set);d(this,"dismissListeners",new Set);d(this,"updateListeners",new Set);this.maxVisible=t,this.rateLimit=s.rateLimit??0,this.rateLimitWindowMs=s.rateLimitWindowMs??1e3,this.persistStorage=s.persistStorage??!1,this.groupManager=new R(o=>[...this.active,...this.pending].filter(n=>o.includes(n.id)),o=>this.hiddenItems.add(o),o=>this.hiddenItems.delete(o)),this.persistStorage&&this.restoreFromStorage()}onAdd(t){return this.addListeners.add(t),()=>this.addListeners.delete(t)}onDismiss(t){return this.dismissListeners.add(t),()=>this.dismissListeners.delete(t)}onUpdate(t){return this.updateListeners.add(t),()=>this.updateListeners.delete(t)}emit(t,...s){t.forEach(o=>o(...s))}isRateLimited(){if(!this.rateLimit)return!1;const t=Date.now();return this.recentAddTimes=this.recentAddTimes.filter(s=>t-s<this.rateLimitWindowMs),this.recentAddTimes.length>=this.rateLimit?!0:(this.recentAddTimes.push(t),!1)}restoreFromStorage(){if(!(typeof localStorage>"u"))try{const t=localStorage.getItem(b);if(!t)return;const s=JSON.parse(t);for(const o of s)this.add(o.message,{...o.options,id:o.id})}catch{localStorage.removeItem(b)}}saveToStorage(t){if(!(typeof localStorage>"u"))try{const s=localStorage.getItem(b),o=s?JSON.parse(s):[];o.find(n=>n.id===t.id)||(o.push({id:t.id,message:t.message,options:t.options}),localStorage.setItem(b,JSON.stringify(o)))}catch{}}removeFromStorage(t){if(!(typeof localStorage>"u"))try{const s=localStorage.getItem(b);if(!s)return;const n=JSON.parse(s).filter(r=>r.id!==t);n.length?localStorage.setItem(b,JSON.stringify(n)):localStorage.removeItem(b)}catch{}}get visibleActive(){return this.active.filter(t=>!this.hiddenItems.has(t.id))}isHidden(t){return this.hiddenItems.has(t)}add(t,s={}){if(this.isRateLimited())return"";const o=s.id??Z(),n=this.active.find(l=>l.id===o);if(n)return this.mergeOptions(n,s),o;const r=this.createItem(o,t,s);if(this.visibleActive.length<this.maxVisible)return this.active.push(r),this.startTimer(r),s.groupKey&&this.groupManager.add(o,s.groupKey),this.persistStorage&&r.options.persist&&this.saveToStorage(r),this.emit(this.addListeners,r),o;const a=s.priority??"normal";if(y[a]>y.normal){const l=this.findLowestPriorityIndex();if(l!==-1){const f=this.active[l];if(y[a]>y[f.options.priority])return this.stopTimer(f.id),this.active.splice(l,1),this.pending.unshift(f),this.active.push(r),this.startTimer(r),s.groupKey&&this.groupManager.add(o,s.groupKey),this.persistStorage&&r.options.persist&&this.saveToStorage(r),this.emit(this.addListeners,r),o}}return this.pending.push(r),this.sortPending(),s.groupKey&&this.groupManager.add(o,s.groupKey),this.persistStorage&&r.options.persist&&this.saveToStorage(r),this.emit(this.addListeners,r),o}remove(t){this.stopTimer(t);const s=this.active.findIndex(n=>n.id===t);if(s!==-1){const n=this.active[s];if(this.active.splice(s,1),this.hiddenItems.delete(t),n.options.groupKey&&this.groupManager.remove(t,n.options.groupKey),this.persistStorage&&this.removeFromStorage(t),this.pending.length>0){const r=this.pending.shift();this.active.push(r),this.startTimer(r)}return}const o=this.pending.findIndex(n=>n.id===t);if(o!==-1){const n=this.pending[o];this.pending.splice(o,1),this.hiddenItems.delete(t),n.options.groupKey&&this.groupManager.remove(t,n.options.groupKey),this.persistStorage&&this.removeFromStorage(t)}}update(t,s){const o=[...this.active,...this.pending].find(n=>n.id===t);o&&(this.mergeOptions(o,s),this.emit(this.updateListeners,t,s))}dismiss(t){var o,n;if(t===void 0){[...this.active,...this.pending].map(a=>a.id).forEach(a=>this.remove(a));return}const s=[...this.active,...this.pending].find(r=>r.id===t);s&&((n=(o=s.options).onClose)==null||n.call(o),this.remove(t),this.emit(this.dismissListeners,t))}dismissAll(t){[...this.active,...this.pending].filter(o=>!t||o.options.position===t).forEach(o=>{var n,r;(r=(n=o.options).onClose)==null||r.call(n),this.remove(o.id),this.emit(this.dismissListeners,o.id)})}isActive(t){return this.active.some(s=>s.id===t)}pauseAll(){this.active.forEach(t=>t.pause())}resumeAll(){this.active.forEach(t=>t.resume())}setMaxVisible(t){for(this.maxVisible=t;this.visibleActive.length<t&&this.pending.length>0;){const s=this.pending.shift();this.active.push(s),this.startTimer(s)}}toggleGroupExpand(t){this.groupManager.toggleExpand(t)}isGroupExpanded(t){return this.groupManager.isExpanded(t)}destroy(){this.timers.forEach(t=>t.destroy()),this.timers.clear(),this.groupManager.clear(),this.active.splice(0),this.pending.splice(0),this.hiddenItems.clear(),this.addListeners.clear(),this.dismissListeners.clear(),this.updateListeners.clear()}createItem(t,s,o){const n=e.ref(1),r=e.ref(!1),a=e.ref(1),l=e.ref(!1),f={...G,...o,type:o.type??"info",priority:o.priority??"normal",duration:o.duration??4e3,closable:o.closable??!0,pauseOnHover:o.pauseOnHover??!0,pauseOnFocusLoss:o.pauseOnFocusLoss??!0,swipeToDismiss:o.swipeToDismiss??!0,persist:o.persist??!1};return{id:t,message:s,options:f,createdAt:Date.now(),remaining:n,isPaused:r,groupCount:a,isGrouped:l,pause:()=>{var v;r.value=!0,(v=this.timers.get(t))==null||v.pause()},resume:()=>{var v;r.value=!1,(v=this.timers.get(t))==null||v.resume()},dismiss:()=>this.dismiss(t),update:v=>this.update(t,v)}}startTimer(t){var n;const s=((n=t.options.undo)==null?void 0:n.duration)??t.options.duration;if(!s)return;const o=new w(s,()=>{var r,a;(a=(r=t.options).onAutoClose)==null||a.call(r),this.remove(t.id)},r=>{t.remaining.value=r});this.timers.set(t.id,o),o.start()}stopTimer(t){var s;(s=this.timers.get(t))==null||s.destroy(),this.timers.delete(t)}mergeOptions(t,s){Object.assign(t.options,s),"message"in s&&(t.message=s.message)}findLowestPriorityIndex(){let t=-1,s=999;return this.active.forEach((o,n)=>{const r=y[o.options.priority];r<s&&(s=r,t=n)}),t}sortPending(){this.pending.sort((t,s)=>{const o=y[t.options.priority],n=y[s.options.priority];return n!==o?n-o:t.createdAt-s.createdAt})}}const W=typeof window>"u";class _{constructor(){d(this,"buffer",[]);d(this,"flushed",!1);d(this,"flushCallbacks",[])}push(t,s){this.flushed||this.buffer.push({message:t,options:s})}onFlush(t){this.flushCallbacks.push(t)}flush(){if(this.flushed)return;this.flushed=!0;const t=[...this.buffer];this.buffer=[];for(const s of this.flushCallbacks)s(t);this.flushCallbacks=[]}isFlushed(){return this.flushed}get size(){return this.buffer.length}}const L=new _;function H(i){return{queue:i,addToast(t,s={}){if(W){const o=s.id??`vtk-ssr-${Date.now()}`;return L.push(t,{...s,id:o}),o}return i.add(t,s)},dismiss(t){i.dismiss(t)},update(t,s){i.update(t,s)},isActive(t){return i.isActive(t)}}}let V=null;function C(i){if(!V){const t=new z((i==null?void 0:i.maxVisible)??5,{rateLimit:i==null?void 0:i.rateLimit,rateLimitWindowMs:i==null?void 0:i.rateLimitWindowMs,persistStorage:i==null?void 0:i.persistStorage});V=H(t)}return V}function tt(i){const t=new z((i==null?void 0:i.maxVisible)??5,{rateLimit:i==null?void 0:i.rateLimit,rateLimitWindowMs:i==null?void 0:i.rateLimitWindowMs,persistStorage:i==null?void 0:i.persistStorage});return H(t)}function $(){const i=e.inject(N,null);return i||C()}function et(i,t){const s=C(t);return i.provide(N,s),s}function F(i,t,s){var a;const o=i;(a=o.timers.get(t))==null||a.destroy(),o.timers.delete(t);const n=i.active.find(l=>l.id===t);if(!n||!s)return;const r=new w(s,()=>{var l,f;(f=(l=n.options).onAutoClose)==null||f.call(l),i.remove(t)},l=>{n.remaining.value=l});o.timers.set(t,r),r.start()}function B(i){const t=i.queue;function s(o,n){return i.addToast(o,{type:"info",...n})}return s.success=(o,n)=>i.addToast(o,{type:"success",...n}),s.error=(o,n)=>i.addToast(o,{type:"error",priority:"high",...n}),s.warning=(o,n)=>i.addToast(o,{type:"warning",...n}),s.info=(o,n)=>i.addToast(o,{type:"info",...n}),s.loading=(o,n)=>i.addToast(o,{type:"loading",duration:0,closable:!1,...n}),s.custom=(o,n)=>i.addToast("",{type:"custom",component:o,duration:0,...n}),s.dismiss=o=>i.dismiss(o),s.update=(o,n)=>{const r=t.active.find(a=>a.id===o);r&&n.message!==void 0&&(r.message=n.message),i.update(o,n)},s.updateMessage=(o,n)=>{const r=t.active.find(a=>a.id===o);r&&(r.message=n)},s.isActive=o=>i.isActive(o),s.promise=async(o,n,r)=>{const a=s.loading(n.loading,r);try{const l=await o,f=typeof n.success=="function"?n.success(l):n.success,p=t.active.find(v=>v.id===a);return p&&(p.message=f,p.options.type="success",p.options.closable=!0,p.options.duration=3e3,F(t,a,3e3)),l}catch(l){const f=typeof n.error=="function"?n.error(l):n.error,p=t.active.find(v=>v.id===a);throw p&&(p.message=f,p.options.type="error",p.options.closable=!0,p.options.duration=5e3,F(t,a,5e3)),l}},s.undo=(o,n)=>i.addToast(o,{type:"info",duration:n.undo.duration??5e3,closable:!1,...n}),s.dismissAll=o=>t.dismissAll(o),s.pauseAll=()=>t.pauseAll(),s.resumeAll=()=>t.resumeAll(),s}function st(i){if(i)return B(i);try{const t=$();return B(t)}catch{return B(C())}}const ot=B(C());function it(i){const t=i??$(),s=t.queue,o=e.computed(()=>s.active.filter(l=>!s.isHidden(l.id))),n=e.computed(()=>[...s.pending]),r=e.computed(()=>o.value.length);function a(l){return t.isActive(l)}return{active:o,pending:n,count:r,has:a}}const nt={key:1},rt={key:2,class:"vtk-spinner"},at={key:0,viewBox:"0 0 20 20",fill:"currentColor"},lt={key:1,viewBox:"0 0 20 20",fill:"currentColor"},ct={key:2,viewBox:"0 0 20 20",fill:"currentColor"},dt={key:3,viewBox:"0 0 20 20",fill:"currentColor"},X=e.defineComponent({__name:"ToastIcon",props:{type:{},icon:{type:[String,Boolean]}},setup(i){const t=i,s=e.computed(()=>t.icon&&typeof t.icon=="object"),o=e.computed(()=>t.icon&&typeof t.icon=="string"),n=e.computed(()=>t.icon!==!1&&!t.icon);return(r,a)=>(e.openBlock(),e.createElementBlock("span",{class:e.normalizeClass(["vtk-icon",`vtk-icon--${i.type}`]),"aria-hidden":"true"},[s.value?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.icon),{key:0})):o.value?(e.openBlock(),e.createElementBlock("span",nt,e.toDisplayString(i.icon),1)):i.type==="loading"?(e.openBlock(),e.createElementBlock("span",rt)):n.value?(e.openBlock(),e.createElementBlock(e.Fragment,{key:3},[i.type==="success"?(e.openBlock(),e.createElementBlock("svg",at,[...a[0]||(a[0]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z","clip-rule":"evenodd"},null,-1)])])):i.type==="error"?(e.openBlock(),e.createElementBlock("svg",lt,[...a[1]||(a[1]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z","clip-rule":"evenodd"},null,-1)])])):i.type==="warning"?(e.openBlock(),e.createElementBlock("svg",ct,[...a[2]||(a[2]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M8.485 2.495c.673-1.167 2.357-1.167 3.03 0l6.28 10.875c.673 1.167-.17 2.625-1.516 2.625H3.72c-1.347 0-2.189-1.458-1.515-2.625L8.485 2.495zM10 5a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 0110 5zm0 9a1 1 0 100-2 1 1 0 000 2z","clip-rule":"evenodd"},null,-1)])])):i.type==="info"?(e.openBlock(),e.createElementBlock("svg",dt,[...a[3]||(a[3]=[e.createElementVNode("path",{"fill-rule":"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z","clip-rule":"evenodd"},null,-1)])])):e.createCommentVNode("",!0)],64)):e.createCommentVNode("",!0)],2))}}),ut={class:"vtk-progress","aria-hidden":"true"},K=e.defineComponent({__name:"ToastProgressBar",props:{remaining:{}},setup(i){const t=i,s=e.computed(()=>t.remaining);return(o,n)=>(e.openBlock(),e.createElementBlock("div",ut,[e.createElementVNode("div",{class:"vtk-progress__bar",style:e.normalizeStyle({transform:`scaleX(${s.value})`})},null,4)]))}}),ht={class:"vtk-actions"},Y=e.defineComponent({__name:"ToastActions",props:{toast:{},onDismiss:{type:Function}},setup(i){const t=i;function s(){var o;(o=t.toast.options.undo)==null||o.onUndo(),t.onDismiss(t.toast.id)}return(o,n)=>(e.openBlock(),e.createElementBlock("div",ht,[i.toast.options.action?(e.openBlock(),e.createElementBlock("button",{key:0,class:"vtk-btn vtk-btn--action",type:"button",onClick:n[0]||(n[0]=r=>i.toast.options.action.onClick())},e.toDisplayString(i.toast.options.action.label),1)):e.createCommentVNode("",!0),i.toast.options.undo?(e.openBlock(),e.createElementBlock("button",{key:1,class:"vtk-btn vtk-btn--undo",type:"button",onClick:s},e.toDisplayString(i.toast.options.undo.label??"Undo"),1)):e.createCommentVNode("",!0)]))}}),mt=["role","aria-live","tabindex"],ft={class:"vtk-content"},pt={class:"vtk-message"},gt=["aria-label"],j=e.defineComponent({__name:"Toast",props:{toast:{},onDismiss:{type:Function},onGroupToggle:{type:Function}},setup(i){const t=i,s=e.ref(null);let o=null;e.onMounted(()=>{o=document.activeElement});function n(u){t.onDismiss(u),o&&typeof o.focus=="function"&&o.focus()}const r=e.ref(0),a=e.ref(!1);let l=0;function f(u){t.toast.options.swipeToDismiss&&(l=u.touches[0].clientX,a.value=!0)}function p(u){a.value&&(r.value=u.touches[0].clientX-l)}function v(){var S;if(!a.value)return;a.value=!1;const u=(((S=s.value)==null?void 0:S.offsetWidth)??280)*.4;Math.abs(r.value)>u?t.onDismiss(t.toast.id):r.value=0}function A(){t.toast.options.pauseOnHover&&t.toast.pause()}function x(){t.toast.options.pauseOnHover&&t.toast.resume()}function E(){t.toast.options.pauseOnFocusLoss&&(document.hidden?t.toast.pause():t.toast.resume())}e.onMounted(()=>{document.addEventListener("visibilitychange",E)}),e.onUnmounted(()=>{document.removeEventListener("visibilitychange",E)});const O=e.computed(()=>{const u=t.toast.options.type;return u==="error"||u==="warning"||t.toast.options.priority==="critical"?"alert":"status"}),P=e.computed(()=>t.toast.options.ariaLive?t.toast.options.ariaLive:t.toast.options.priority==="critical"?"assertive":"polite"),c=e.computed(()=>{if(!r.value)return{};const u=Math.max(0,1-Math.abs(r.value)/200);return{transform:`translateX(${r.value}px)`,opacity:u,transition:a.value?"none":void 0}}),m=e.computed(()=>!!t.toast.options.undo),h=e.computed(()=>!!t.toast.options.action),g=e.computed(()=>t.toast.options.closable),T=e.computed(()=>t.toast.options.duration>0&&!t.toast.isPaused.value),k=e.computed(()=>t.toast.groupCount.value>1);function I(){var u;t.toast.options.groupKey&&((u=t.onGroupToggle)==null||u.call(t,t.toast.options.groupKey))}function D(u){u.key==="Escape"&&g.value&&(u.stopPropagation(),n(t.toast.id))}return(u,S)=>(e.openBlock(),e.createElementBlock("div",{ref_key:"el",ref:s,class:e.normalizeClass(["vtk-toast",`vtk-toast--${i.toast.options.type}`,i.toast.options.theme&&typeof i.toast.options.theme=="string"?`vtk-theme-${i.toast.options.theme}`:""]),role:O.value,"aria-live":P.value,"aria-atomic":!0,tabindex:g.value||h.value||m.value?0:void 0,style:e.normalizeStyle(c.value),onMouseenter:A,onMouseleave:x,onTouchstartPassive:f,onTouchmovePassive:p,onTouchend:v,onKeydown:D},[i.toast.options.component?(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.toast.options.component),e.mergeProps({key:0},i.toast.options.componentProps,{toast:i.toast,dismiss:()=>i.onDismiss(i.toast.id)}),null,16,["toast","dismiss"])):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.renderSlot(u.$slots,"toast-icon",{toast:i.toast},()=>[i.toast.options.icon!==!1?(e.openBlock(),e.createBlock(X,{key:0,type:i.toast.options.type,icon:i.toast.options.icon},null,8,["type","icon"])):e.createCommentVNode("",!0)]),e.renderSlot(u.$slots,"toast-content",{toast:i.toast},()=>[e.createElementVNode("div",ft,[e.createElementVNode("div",pt,[typeof i.toast.message!="string"?(e.openBlock(),e.createBlock(e.resolveDynamicComponent("span"),{key:0},{default:e.withCtx(()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(i.toast.message)))]),_:1})):(e.openBlock(),e.createElementBlock(e.Fragment,{key:1},[e.createTextVNode(e.toDisplayString(i.toast.message),1)],64))]),e.renderSlot(u.$slots,"toast-action",{toast:i.toast},()=>[h.value||m.value?(e.openBlock(),e.createBlock(Y,{key:0,toast:i.toast,"on-dismiss":i.onDismiss},null,8,["toast","on-dismiss"])):e.createCommentVNode("",!0)])])]),k.value?(e.openBlock(),e.createElementBlock("span",{key:0,class:"vtk-group-count",role:"button","aria-label":`Show all (${i.toast.groupCount.value})`,onClick:I}," +"+e.toDisplayString(i.toast.groupCount.value-1),9,gt)):e.createCommentVNode("",!0),e.renderSlot(u.$slots,"toast-close",{toast:i.toast,dismiss:n},()=>[g.value?(e.openBlock(),e.createElementBlock("button",{key:0,class:"vtk-btn vtk-btn--close",type:"button","aria-label":"Close",onClick:S[0]||(S[0]=St=>n(i.toast.id))},[...S[1]||(S[1]=[e.createElementVNode("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"currentColor"},[e.createElementVNode("path",{d:"M1.4 1.4a1 1 0 011.42 0L7 5.59l4.18-4.19a1 1 0 111.42 1.42L8.41 7l4.19 4.18a1 1 0 01-1.42 1.42L7 8.41l-4.18 4.19A1 1 0 011.4 12.6L5.59 7 1.4 2.82a1 1 0 010-1.42z"})],-1)])])):e.createCommentVNode("",!0)])],64)),e.renderSlot(u.$slots,"toast-undo",{toast:i.toast,remaining:i.toast.remaining.value},()=>[T.value||m.value?(e.openBlock(),e.createBlock(K,{key:0,remaining:i.toast.remaining.value},null,8,["remaining"])):e.createCommentVNode("",!0)])],46,mt))}}),vt=["role","aria-label"],kt=e.defineComponent({__name:"ToastContainer",props:{position:{default:"bottom-right"},maxVisible:{default:5},gap:{default:8},offsetX:{default:16},offsetY:{default:16},zIndex:{default:9999},expand:{type:Boolean,default:!1},teleportTo:{default:"body"},context:{},theme:{},stackMode:{type:Boolean,default:!1}},setup(i){const t=["top-left","top-center","top-right","bottom-left","bottom-center","bottom-right"],s=i,o=s.context??$(),n=o.queue;e.watch(()=>s.maxVisible,c=>n.setMaxVisible(c),{immediate:!0});const r=e.ref(!1),a=e.computed(()=>n.active.filter(c=>!n.isHidden(c.id)));function l(c){return a.value.filter(m=>(m.options.position??s.position)===c).sort((m,h)=>y[h.options.priority]-y[m.options.priority])}function f(c,m,h){return h.startsWith("bottom")?m-1-c:c}function p(c,m,h){if(!s.stackMode||r.value)return{};const g=f(c,m,h);if(g===0)return{"z-index":"10"};if(g>2)return{display:"none"};const T=h.startsWith("bottom"),k=Math.max(.88,1-g*.06),I=g*8,D=Math.max(.5,1-g*.2);return{position:"absolute",width:"100%",[T?"bottom":"top"]:"0",transform:`translateY(${T?I:-I}px) scale(${k})`,opacity:String(D),"pointer-events":"none","z-index":String(10-g),transition:"transform 300ms ease, opacity 300ms ease"}}function v(c){const m=l(c);return["vtk-container",`vtk-container--${c}`,s.theme&&typeof s.theme=="string"?`vtk-theme-${s.theme}`:"",s.stackMode&&m.length>1?"vtk-container--stack":"",s.stackMode&&r.value?"vtk-container--stack-expanded":""]}const A=e.computed(()=>{const c={"--vtk-z-index":String(s.zIndex),"--vtk-gap":`${s.gap}px`,"--vtk-container-offset-x":`${s.offsetX}px`,"--vtk-container-offset-y":`${s.offsetY}px`};if(s.theme&&typeof s.theme=="object"){const m={colorBg:"--vtk-color-bg",colorText:"--vtk-color-text",colorBorder:"--vtk-color-border",colorSuccess:"--vtk-color-success",colorError:"--vtk-color-error",colorWarning:"--vtk-color-warning",colorInfo:"--vtk-color-info",colorLoading:"--vtk-color-loading",fontFamily:"--vtk-font-family",fontSize:"--vtk-font-size",fontWeight:"--vtk-font-weight",lineHeight:"--vtk-line-height",borderRadius:"--vtk-border-radius",borderWidth:"--vtk-border-width",shadow:"--vtk-shadow",paddingX:"--vtk-padding-x",paddingY:"--vtk-padding-y",iconSize:"--vtk-icon-size",progressHeight:"--vtk-progress-height",maxWidth:"--vtk-max-width",minWidth:"--vtk-min-width",transitionDuration:"--vtk-transition-duration",transitionEasing:"--vtk-transition-easing",zIndex:"--vtk-z-index"};for(const[h,g]of Object.entries(m)){const T=s.theme[h];T&&(c[g]=T)}}return c});function x(c){o.dismiss(c)}function E(c){n.toggleGroupExpand(c)}function O(){r.value=!0,n.pauseAll()}function P(){r.value=!1,n.resumeAll()}return e.onMounted(()=>{setTimeout(()=>{L.onFlush(c=>{for(const m of c)o.addToast(m.message,m.options)}),L.flush()},100)}),(c,m)=>(e.openBlock(),e.createBlock(e.Teleport,{to:i.teleportTo},[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(t,h=>e.createElementVNode("div",{key:h,class:e.normalizeClass(v(h)),style:e.normalizeStyle(A.value),role:l(h).length?"region":void 0,"aria-label":l(h).length?"Notifications":void 0,onMouseenter:O,onMouseleave:P},[e.createVNode(e.TransitionGroup,{name:`vtk-slide-${h}`,tag:"div",class:"vtk-container__list"},{default:e.withCtx(()=>[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(l(h),(g,T)=>(e.openBlock(),e.createElementBlock("div",{key:g.id,class:"vtk-toast-wrap",style:e.normalizeStyle(p(T,l(h).length,h))},[c.$slots.toast?e.renderSlot(c.$slots,"toast",{key:0,toast:g,dismiss:x},void 0,!0):(e.openBlock(),e.createBlock(j,{key:1,toast:g,"on-dismiss":x,"on-group-toggle":E},e.createSlots({_:2},[c.$slots["toast-icon"]?{name:"toast-icon",fn:e.withCtx(k=>[e.renderSlot(c.$slots,"toast-icon",e.mergeProps({ref_for:!0},k),void 0,!0)]),key:"0"}:void 0,c.$slots["toast-content"]?{name:"toast-content",fn:e.withCtx(k=>[e.renderSlot(c.$slots,"toast-content",e.mergeProps({ref_for:!0},k),void 0,!0)]),key:"1"}:void 0,c.$slots["toast-action"]?{name:"toast-action",fn:e.withCtx(k=>[e.renderSlot(c.$slots,"toast-action",e.mergeProps({ref_for:!0},k),void 0,!0)]),key:"2"}:void 0,c.$slots["toast-close"]?{name:"toast-close",fn:e.withCtx(k=>[e.renderSlot(c.$slots,"toast-close",e.mergeProps({ref_for:!0},k),void 0,!0)]),key:"3"}:void 0,c.$slots["toast-undo"]?{name:"toast-undo",fn:e.withCtx(k=>[e.renderSlot(c.$slots,"toast-undo",e.mergeProps({ref_for:!0},k),void 0,!0)]),key:"4"}:void 0]),1032,["toast"]))],4))),128))]),_:2},1032,["name"])],46,vt)),64))],8,["to"]))}}),yt=(i,t)=>{const s=i.__vccOpts||i;for(const[o,n]of t)s[o]=n;return s},U=yt(kt,[["__scopeId","data-v-4affbb62"]]),Tt={install(i,t){et(i,t??{}),(t==null?void 0:t.registerComponent)!==!1&&i.component("ToastContainer",U)}};exports.DEFAULT_OPTIONS=G;exports.GroupManager=R;exports.PRIORITY_ORDER=y;exports.TOAST_CONTEXT_KEY=N;exports.Toast=j;exports.ToastActions=Y;exports.ToastContainer=U;exports.ToastIcon=X;exports.ToastProgressBar=K;exports.ToastQueue=z;exports.UndoTimer=w;exports.VueToastPlugin=Tt;exports.createToastContext=tt;exports.getOrCreateGlobalContext=C;exports.globalBuffer=L;exports.isServer=W;exports.toast=ot;exports.useToast=st;exports.useToastContext=$;exports.useToastState=it;
2
+ //# sourceMappingURL=vue-toast-kit.cjs.map