vue-smart-toast 0.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.
@@ -0,0 +1,174 @@
1
+ import type { CSSProperties, Component } from 'vue';
2
+ export type ToastTypes = 'normal' | 'action' | 'success' | 'info' | 'warning' | 'error' | 'loading' | 'default';
3
+ export type PromiseT<Data = any> = Promise<Data> | (() => Promise<Data>);
4
+ export interface PromiseIExtendedResult extends ExternalToast {
5
+ message: string | Component;
6
+ }
7
+ export type PromiseTExtendedResult<Data = any> = PromiseIExtendedResult | ((data: Data) => PromiseIExtendedResult | Promise<PromiseIExtendedResult>);
8
+ export type PromiseTResult<Data = any> = string | Component | ((data: Data) => Component | string | Promise<Component | string>);
9
+ export type PromiseExternalToast = Omit<ExternalToast, 'description'>;
10
+ export type PromiseData<ToastData = any> = PromiseExternalToast & {
11
+ loading?: string | Component;
12
+ success?: PromiseTResult<ToastData> | PromiseTExtendedResult<ToastData>;
13
+ error?: PromiseTResult | PromiseTExtendedResult;
14
+ description?: PromiseTResult;
15
+ finally?: () => void | Promise<void>;
16
+ };
17
+ export interface ToastClasses {
18
+ toast?: string;
19
+ title?: string;
20
+ description?: string;
21
+ loader?: string;
22
+ closeButton?: string;
23
+ cancelButton?: string;
24
+ actionButton?: string;
25
+ success?: string;
26
+ error?: string;
27
+ info?: string;
28
+ warning?: string;
29
+ loading?: string;
30
+ default?: string;
31
+ content?: string;
32
+ icon?: string;
33
+ }
34
+ export interface ToastIcons {
35
+ success?: Component;
36
+ info?: Component;
37
+ warning?: Component;
38
+ error?: Component;
39
+ loading?: Component;
40
+ close?: Component;
41
+ }
42
+ export interface Action {
43
+ label: Component | string;
44
+ onClick: (event: MouseEvent) => void;
45
+ actionButtonStyle?: CSSProperties;
46
+ }
47
+ export interface ToastT<T extends Component = Component> {
48
+ id: number | string;
49
+ toasterId?: string;
50
+ title?: (() => string | Component) | string | Component;
51
+ type?: ToastTypes;
52
+ icon?: Component | false;
53
+ component?: T;
54
+ componentProps?: any;
55
+ richColors?: boolean;
56
+ invert?: boolean;
57
+ closeButton?: boolean;
58
+ dismissible?: boolean;
59
+ description?: (() => string | Component) | string | Component;
60
+ duration?: number;
61
+ delete?: boolean;
62
+ important?: boolean;
63
+ action?: Action | Component;
64
+ cancel?: Action | Component;
65
+ onDismiss?: (toast: ToastT) => void;
66
+ onAutoClose?: (toast: ToastT) => void;
67
+ promise?: PromiseT;
68
+ cancelButtonStyle?: CSSProperties;
69
+ actionButtonStyle?: CSSProperties;
70
+ style?: CSSProperties;
71
+ unstyled?: boolean;
72
+ class?: string;
73
+ classes?: ToastClasses;
74
+ descriptionClass?: string;
75
+ position?: Position;
76
+ closeButtonPosition?: CloseButtonPosition;
77
+ testId?: string;
78
+ }
79
+ export declare function isAction(action: Action | Component): action is Action;
80
+ export type Position = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center';
81
+ export type CloseButtonPosition = Exclude<Position, 'top-center' | 'bottom-center'>;
82
+ export interface HeightT {
83
+ height: number;
84
+ toastId: number | string;
85
+ position: Position;
86
+ }
87
+ export interface ToastOptions {
88
+ class?: string;
89
+ closeButton?: boolean;
90
+ descriptionClass?: string;
91
+ style?: CSSProperties;
92
+ cancelButtonStyle?: CSSProperties;
93
+ actionButtonStyle?: CSSProperties;
94
+ duration?: number;
95
+ unstyled?: boolean;
96
+ classes?: ToastClasses;
97
+ closeButtonAriaLabel?: string;
98
+ toasterId?: string;
99
+ closeButtonPosition?: CloseButtonPosition;
100
+ }
101
+ type Offset = {
102
+ top?: string | number;
103
+ right?: string | number;
104
+ bottom?: string | number;
105
+ left?: string | number;
106
+ } | string | number;
107
+ export interface ToasterProps {
108
+ id?: string;
109
+ invert?: boolean;
110
+ theme?: Theme;
111
+ position?: Position;
112
+ closeButtonPosition?: CloseButtonPosition;
113
+ hotkey?: string[];
114
+ richColors?: boolean;
115
+ expand?: boolean;
116
+ duration?: number;
117
+ gap?: number;
118
+ visibleToasts?: number;
119
+ closeButton?: boolean;
120
+ toastOptions?: ToastOptions;
121
+ class?: string;
122
+ style?: CSSProperties;
123
+ offset?: Offset;
124
+ mobileOffset?: Offset;
125
+ dir?: 'rtl' | 'ltr' | 'auto';
126
+ swipeDirections?: SwipeDirection[];
127
+ icons?: ToastIcons;
128
+ containerAriaLabel?: string;
129
+ }
130
+ export type SwipeDirection = 'top' | 'right' | 'bottom' | 'left';
131
+ export interface ToastProps {
132
+ toast: ToastT;
133
+ toasts: ToastT[];
134
+ index: number;
135
+ swipeDirections?: SwipeDirection[];
136
+ expanded: boolean;
137
+ invert: boolean;
138
+ heights: HeightT[];
139
+ gap?: number;
140
+ position: Position;
141
+ closeButtonPosition?: CloseButtonPosition;
142
+ visibleToasts: number;
143
+ expandByDefault: boolean;
144
+ closeButton: boolean;
145
+ interacting: boolean;
146
+ style?: CSSProperties;
147
+ cancelButtonStyle?: CSSProperties;
148
+ actionButtonStyle?: CSSProperties;
149
+ duration?: number;
150
+ class: string;
151
+ unstyled?: boolean;
152
+ descriptionClass?: string;
153
+ loadingIcon?: Component;
154
+ classes?: ToastClasses;
155
+ icons?: ToastIcons;
156
+ closeButtonAriaLabel?: string;
157
+ defaultRichColors?: boolean;
158
+ }
159
+ export declare const SwipeStateTypes: {
160
+ readonly SwipedOut: "SwipedOut";
161
+ readonly SwipedBack: "SwipedBack";
162
+ readonly NotSwiped: "NotSwiped";
163
+ };
164
+ export type SwipeStateTypes = (typeof SwipeStateTypes)[keyof typeof SwipeStateTypes];
165
+ export type Theme = 'light' | 'dark' | 'system';
166
+ export interface ToastToDismiss {
167
+ id: number | string;
168
+ dismiss: boolean;
169
+ }
170
+ export type ExternalToast<T extends Component = Component> = Omit<ToastT<T>, 'id' | 'type' | 'title' | 'promise' | 'delete'> & {
171
+ id?: number | string;
172
+ toasterId?: string;
173
+ };
174
+ export {};
@@ -0,0 +1,10 @@
1
+ import type { InternalToastType, ToastId, ToastItem, ToastOptions } from './types';
2
+ export declare const toastStore: import("vue").ShallowReactive<ToastItem[]>;
3
+ type StoreToastOptions = Omit<ToastOptions, 'type'> & {
4
+ type?: InternalToastType;
5
+ };
6
+ export declare function upsertToast(options: StoreToastOptions): ToastId;
7
+ export declare function dismissToast(id?: ToastId, automatic?: boolean): void;
8
+ export declare function clearToasts(): void;
9
+ export declare function destroyStore(): void;
10
+ export {};
@@ -0,0 +1,3 @@
1
+ export declare function registerToaster(): () => void;
2
+ export declare function warnIfMissingToaster(): void;
3
+ export declare function resetToasterRegistry(): void;
@@ -0,0 +1,162 @@
1
+ import type { Component, CSSProperties, Plugin } from 'vue';
2
+ import type { CloseButtonPosition, SwipeDirection, ToastClasses } from './sonner/types';
3
+ export type { CloseButtonPosition, SwipeDirection, ToastClasses };
4
+ export type ToastId = string | number;
5
+ export type ToastType = 'default' | 'normal' | 'success' | 'info' | 'warning' | 'error' | 'fail';
6
+ export type InternalToastType = ToastType | 'loading';
7
+ export type DeviceMode = 'auto' | 'pc' | 'mobile';
8
+ export type PcPosition = 'top-left' | 'top-right' | 'top-center' | 'bottom-left' | 'bottom-right' | 'bottom-center';
9
+ export type MobilePosition = 'top' | 'middle' | 'center' | 'bottom';
10
+ export type ToastTheme = 'light' | 'dark' | 'system';
11
+ export type ToastMessage = string | number;
12
+ export interface ToastAction {
13
+ label: string;
14
+ onClick: (event: MouseEvent) => void;
15
+ }
16
+ export interface ToastIcons {
17
+ success?: Component;
18
+ info?: Component;
19
+ warning?: Component;
20
+ error?: Component;
21
+ loading?: Component;
22
+ close?: Component;
23
+ }
24
+ export interface MobileToastClasses {
25
+ toast?: string;
26
+ content?: string;
27
+ text?: string;
28
+ description?: string;
29
+ icon?: string;
30
+ actionIcon?: string;
31
+ success?: string;
32
+ error?: string;
33
+ info?: string;
34
+ warning?: string;
35
+ loading?: string;
36
+ default?: string;
37
+ }
38
+ export interface MobileToastOptions {
39
+ class?: string;
40
+ style?: CSSProperties;
41
+ classes?: MobileToastClasses;
42
+ }
43
+ export interface ToastOptions {
44
+ id?: ToastId;
45
+ type?: ToastType;
46
+ message?: ToastMessage;
47
+ description?: ToastMessage;
48
+ duration?: number;
49
+ device?: DeviceMode;
50
+ position?: PcPosition;
51
+ pcPosition?: PcPosition;
52
+ mobilePosition?: MobilePosition;
53
+ dismissible?: boolean;
54
+ action?: ToastAction;
55
+ cancel?: ToastAction;
56
+ onClick?: () => void;
57
+ onDismiss?: (toast: ToastItem) => void;
58
+ onAutoClose?: (toast: ToastItem) => void;
59
+ icon?: Component | false;
60
+ mobileIcon?: Component | false;
61
+ class?: string;
62
+ style?: CSSProperties;
63
+ descriptionClass?: string;
64
+ cancelButtonStyle?: CSSProperties;
65
+ actionButtonStyle?: CSSProperties;
66
+ unstyled?: boolean;
67
+ classes?: ToastClasses;
68
+ closeButtonAriaLabel?: string;
69
+ closeButtonPosition?: CloseButtonPosition;
70
+ mobileClass?: string;
71
+ mobileStyle?: CSSProperties;
72
+ mobileClasses?: MobileToastClasses;
73
+ important?: boolean;
74
+ richColors?: boolean;
75
+ closeButton?: boolean;
76
+ toasterId?: string;
77
+ }
78
+ export interface ToastItem extends Required<Pick<ToastOptions, 'id'>> {
79
+ type: InternalToastType;
80
+ message: ToastMessage;
81
+ description?: ToastMessage;
82
+ duration: number;
83
+ device: DeviceMode;
84
+ pcPosition: PcPosition;
85
+ mobilePosition: Exclude<MobilePosition, 'center'>;
86
+ dismissible: boolean;
87
+ action?: ToastAction;
88
+ cancel?: ToastAction;
89
+ onClick?: () => void;
90
+ onDismiss?: (toast: ToastItem) => void;
91
+ onAutoClose?: (toast: ToastItem) => void;
92
+ icon?: Component | false;
93
+ mobileIcon?: Component | false;
94
+ class?: string;
95
+ style?: CSSProperties;
96
+ descriptionClass?: string;
97
+ cancelButtonStyle?: CSSProperties;
98
+ actionButtonStyle?: CSSProperties;
99
+ unstyled?: boolean;
100
+ classes?: ToastClasses;
101
+ closeButtonAriaLabel?: string;
102
+ closeButtonPosition?: CloseButtonPosition;
103
+ mobileClass?: string;
104
+ mobileStyle?: CSSProperties;
105
+ mobileClasses?: MobileToastClasses;
106
+ important?: boolean;
107
+ richColors?: boolean;
108
+ closeButton?: boolean;
109
+ toasterId?: string;
110
+ createdAt: number;
111
+ dismissed: boolean;
112
+ }
113
+ export interface PromiseToastOptions<T = unknown> extends Omit<ToastOptions, 'message' | 'type' | 'description'> {
114
+ loading?: ToastMessage;
115
+ success?: ToastMessage | ((payload: T) => ToastMessage);
116
+ error?: ToastMessage | ((error: unknown) => ToastMessage);
117
+ description?: ToastMessage | ((payload: T) => ToastMessage);
118
+ finally?: () => void | Promise<void>;
119
+ }
120
+ export interface ToastApi {
121
+ (message: ToastMessage, options?: ToastOptions): ToastId;
122
+ message: (message: ToastMessage, options?: ToastOptions) => ToastId;
123
+ success: (message: ToastMessage, options?: ToastOptions) => ToastId;
124
+ info: (message: ToastMessage, options?: ToastOptions) => ToastId;
125
+ warning: (message: ToastMessage, options?: ToastOptions) => ToastId;
126
+ error: (message: ToastMessage, options?: ToastOptions) => ToastId;
127
+ fail: (message: ToastMessage, options?: ToastOptions) => ToastId;
128
+ dismiss: (id?: ToastId) => void;
129
+ clear: () => void;
130
+ promise: <T>(promiseOrFn: Promise<T> | (() => Promise<T>), options?: PromiseToastOptions<T>) => ToastId | undefined;
131
+ }
132
+ type Offset = {
133
+ top?: string | number;
134
+ right?: string | number;
135
+ bottom?: string | number;
136
+ left?: string | number;
137
+ } | string | number;
138
+ export interface ToasterProps {
139
+ id?: string;
140
+ invert?: boolean;
141
+ theme?: ToastTheme;
142
+ position?: PcPosition;
143
+ closeButtonPosition?: CloseButtonPosition;
144
+ hotkey?: string[];
145
+ richColors?: boolean;
146
+ expand?: boolean;
147
+ duration?: number;
148
+ gap?: number;
149
+ visibleToasts?: number;
150
+ closeButton?: boolean;
151
+ toastOptions?: Pick<ToastOptions, 'class' | 'style' | 'descriptionClass' | 'cancelButtonStyle' | 'actionButtonStyle' | 'duration' | 'unstyled' | 'classes' | 'closeButtonAriaLabel' | 'toasterId' | 'closeButtonPosition'>;
152
+ mobileToastOptions?: MobileToastOptions;
153
+ class?: string;
154
+ style?: CSSProperties;
155
+ offset?: Offset;
156
+ mobileOffset?: Offset;
157
+ dir?: 'rtl' | 'ltr' | 'auto';
158
+ swipeDirections?: SwipeDirection[];
159
+ icons?: ToastIcons;
160
+ containerAriaLabel?: string;
161
+ }
162
+ export type VueToastPlugin = Plugin;
@@ -0,0 +1,12 @@
1
+ import type { DeviceMode, InternalToastType, MobilePosition, PcPosition, ToastType } from './types';
2
+ export declare const PC_DEFAULT_POSITION: PcPosition;
3
+ export declare const MOBILE_DEFAULT_POSITION: Exclude<MobilePosition, 'center'>;
4
+ export declare const DEFAULT_DURATION = 3000;
5
+ export declare const EXIT_DURATION = 240;
6
+ export declare function isBrowser(): boolean;
7
+ export declare function isMobileViewport(): boolean;
8
+ export declare function resolveDevice(device: DeviceMode | undefined): "pc" | "mobile";
9
+ export declare function normalizeMobilePosition(position: MobilePosition | undefined): Exclude<MobilePosition, 'center'>;
10
+ export declare function normalizeType(type: ToastType | undefined): ToastType;
11
+ export declare function getDefaultDuration(type: InternalToastType): number;
12
+ export declare function toText(value: string | number | undefined): string;
@@ -0,0 +1,2 @@
1
+ :root{--vt-z-index:1000000000}.vue-toast-host-container{z-index:var(--vt-z-index);position:relative}[data-sonner-toast][data-styled=true] [data-content]{flex:1;min-width:0}[data-sonner-toast][data-styled=true] [data-button]{margin-left:8px;margin-right:0}.vt-icon{color:currentColor;flex-shrink:0;justify-content:center;align-items:center;width:18px;height:18px;display:inline-flex}.vt-icon svg{width:18px;height:18px;display:block}.vt-spinner{border:2px solid;border-right-color:#0000;border-radius:999px;width:16px;height:16px;animation:.9s linear infinite vt-spin;display:block}@keyframes vt-spin{to{transform:rotate(360deg)}}.vt-mobile-layer{z-index:var(--vt-z-index);pointer-events:none;font-family:-apple-system,BlinkMacSystemFont,Helvetica Neue,Helvetica,Segoe UI,Arial,Roboto,PingFang SC,miui,Hiragino Sans GB,Microsoft Yahei,sans-serif;position:fixed;inset:0}.van-toast{box-sizing:content-box;color:#fff;white-space:pre-wrap;word-break:break-all;text-align:center;opacity:1;pointer-events:auto;background:#000000b3;border-radius:8px;flex-direction:column;justify-content:center;align-items:center;width:88px;max-width:70%;min-height:88px;padding:16px;font-size:14px;line-height:20px;transition:opacity .24s,transform .24s;display:flex;position:fixed;left:50%;transform:translate(-50%)scale(1)}.van-toast--text{width:fit-content;min-width:96px;min-height:0;padding:8px 12px}.van-toast--middle{top:50%;transform:translate(-50%,-50%)scale(1)}.van-toast--top{top:calc(20% + max(env(safe-area-inset-top), 0px))}.van-toast--bottom{top:auto;bottom:calc(20% + max(env(safe-area-inset-bottom), 0px))}.van-toast[data-removed=true]{opacity:0;pointer-events:none;transform:translate(-50%)scale(.96)}.van-toast--middle[data-removed=true]{transform:translate(-50%,-50%)scale(.96)}.van-toast__icon{color:#fff;flex:none;width:36px;height:36px}.van-toast__loading{color:#fff;width:36px;height:36px}.van-loading__spinner{vertical-align:middle;max-width:100%;max-height:100%;animation:.8s linear infinite van-rotate;display:inline-block;position:relative}.van-loading__spinner--circular{animation-duration:2s}.van-loading__circular{width:100%;height:100%;display:block}.van-loading__circular circle{stroke:currentColor;stroke-width:3px;stroke-linecap:round;animation:1.5s ease-in-out infinite van-circular}@keyframes van-rotate{to{transform:rotate(360deg)}}@keyframes van-circular{0%{stroke-dasharray:1 200;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-40px}to{stroke-dasharray:90 150;stroke-dashoffset:-120px}}.van-toast__text{margin-top:0}.van-toast__content{justify-content:center;align-items:center;gap:8px;max-width:100%;display:inline-flex}.van-toast:not(.van-toast--text) .van-toast__content{margin-top:8px}.van-toast__arrow{color:#fff;flex:none;width:16px;height:16px}.van-toast__description{opacity:.82;margin-top:4px}html[dir=ltr],[data-sonner-toaster][dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0}html[dir=rtl],[data-sonner-toaster][dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto}[data-sonner-toaster]{width:var(--width);--gray1:#fcfcfc;--gray2:#f8f8f8;--gray3:#f3f3f3;--gray4:#ededed;--gray5:#e8e8e8;--gray6:#e2e2e2;--gray7:#dbdbdb;--gray8:#c7c7c7;--gray9:#8f8f8f;--gray10:#858585;--gray11:#6f6f6f;--gray12:#171717;--border-radius:8px;box-sizing:border-box;z-index:999999999;outline:none;margin:0;padding:0;font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;list-style:none;transition:transform .4s;position:fixed}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translate(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);opacity:0;transform:var(--y);touch-action:none;box-sizing:border-box;overflow-wrap:anywhere;outline:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;position:absolute}[data-sonner-toast][data-styled=true]{background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);width:var(--width);align-items:center;gap:6px;padding:16px;font-size:13px;display:flex;box-shadow:0 4px 12px #0000001a}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-y-position=top]{--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap));top:0}[data-sonner-toast][data-y-position=bottom]{--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap));bottom:0}[data-sonner-toast][data-styled=true] [data-description]{color:#3f3f3f;font-weight:400;line-height:1.4}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{color:inherit;font-weight:500;line-height:1.5}[data-sonner-toast][data-styled=true] [data-icon]{width:16px;height:16px;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end);flex-shrink:0;justify-content:flex-start;align-items:center;display:flex;position:relative}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform-origin:50%;animation:.3s forwards sonner-fade-in;transform:scale(.8)}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{flex-direction:column;gap:2px;display:flex}[data-sonner-toast][data-styled=true] [data-button]{height:24px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);cursor:pointer;border:none;border-radius:4px;outline:none;flex-shrink:0;align-items:center;padding-left:8px;padding-right:8px;font-size:12px;font-weight:500;transition:opacity .4s,box-shadow .2s;display:flex}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px #0006}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:#00000014}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:#ffffff4d}[data-sonner-toaster] [data-close-button-position=top-left]{--toast-close-button-left:0;--toast-close-button-right:unset;--toast-close-button-top:0;--toast-close-button-bottom:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster] [data-close-button-position=top-right]{--toast-close-button-left:unset;--toast-close-button-right:0;--toast-close-button-top:0;--toast-close-button-bottom:unset;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster] [data-close-button-position=bottom-left]{--toast-close-button-left:0;--toast-close-button-right:unset;--toast-close-button-top:unset;--toast-close-button-bottom:0;--toast-close-button-transform:translate(-35%, 35%)}[data-sonner-toaster] [data-close-button-position=bottom-right]{--toast-close-button-left:unset;--toast-close-button-right:0;--toast-close-button-top:unset;--toast-close-button-bottom:0;--toast-close-button-transform:translate(35%, 35%)}[data-sonner-toast][data-styled=true] [data-close-button]{left:var(--toast-close-button-left);right:var(--toast-close-button-right);top:var(--toast-close-button-top);bottom:var(--toast-close-button-bottom);width:20px;height:20px;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);cursor:pointer;z-index:1;border-radius:50%;justify-content:center;align-items:center;padding:0;transition:opacity .1s,background .2s,border-color .2s;display:flex;position:absolute}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]:before{content:"";z-index:-1;height:100%;position:absolute;left:-100%;right:-100%}[data-sonner-toast][data-y-position=top][data-swiping=true]:before{bottom:50%;transform:scaleY(3)translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]:before{top:50%;transform:scaleY(3)translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]:before{content:"";position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]:after{content:"";height:calc(var(--gap) + 1px);width:100%;position:absolute;bottom:100%;left:0}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * .05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--toasts-before) * .05 + 1));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]:before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0px)) translateX(var(--swipe-amount-x,0px));transition:none}[data-sonner-toast][data-swiped=true]{-webkit-user-select:none;user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (width<=600px){[data-sonner-toaster]{right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%;position:fixed}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{width:calc(100% - var(--mobile-offset-left) * 2);left:0;right:0}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:calc(var(--mobile-offset-bottom) + max(env(safe-area-inset-bottom), 0px))}[data-sonner-toaster][data-y-position=top]{top:calc(var(--mobile-offset-top) + max(env(safe-area-inset-top), 0px))}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:#ecfdf3;--success-border:#bffcd9;--success-text:#008a2e;--info-bg:#f0f8ff;--info-border:#dde7fd;--info-text:#0973dc;--warning-bg:#fffcf0;--warning-border:#fbeeb1;--warning-text:#dc7609;--error-bg:#fff0f0;--error-border:#ffe0e1;--error-text:#e60000}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:#333;--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:#1f1f1f;--normal-border:#333;--normal-border-hover:#404040;--normal-text:var(--gray1);--success-bg:#001f0f;--success-border:#003d1c;--success-text:#59f3a6;--info-bg:#000d1f;--info-border:#19233e;--info-text:#5896f3;--warning-bg:#1d1f00;--warning-border:#2e2e00;--warning-text:#f3cf58;--error-bg:#2d0607;--error-border:#4d0408;--error-text:#ff9ea1}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);z-index:10;position:absolute;inset:0}.sonner-loading-wrapper[data-visible=false]{transform-origin:50%;animation:.2s forwards sonner-fade-out}.sonner-spinner{height:var(--size);width:var(--size);position:relative;top:50%;left:50%}.sonner-loading-bar{background:var(--gray11);border-radius:6px;width:24%;height:8%;animation:1.2s linear infinite sonner-spin;position:absolute;top:-3.9%;left:-10%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg)translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg)translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg)translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg)translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg)translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg)translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg)translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg)translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg)translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg)translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg)translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg)translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{transform-origin:50%;transition:opacity .2s,transform .2s;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8)translate(-50%,-50%)}
2
+ /*$vite$:1*/