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.
- package/README.md +137 -0
- package/dist/types/Toaster.vue.d.ts +135 -0
- package/dist/types/index.d.ts +11 -0
- package/dist/types/mobile/MobileNextArrow.vue.d.ts +3 -0
- package/dist/types/mobile/MobileToast.vue.d.ts +27 -0
- package/dist/types/mobile/MobileToastIcon.vue.d.ts +7 -0
- package/dist/types/mobile/MobileToaster.vue.d.ts +26 -0
- package/dist/types/sonner/Toast.vue.d.ts +32 -0
- package/dist/types/sonner/Toaster.vue.d.ts +48 -0
- package/dist/types/sonner/assets/CloseIcon.vue.d.ts +3 -0
- package/dist/types/sonner/assets/ErrorIcon.vue.d.ts +3 -0
- package/dist/types/sonner/assets/InfoIcon.vue.d.ts +3 -0
- package/dist/types/sonner/assets/Loader.vue.d.ts +6 -0
- package/dist/types/sonner/assets/SuccessIcon.vue.d.ts +3 -0
- package/dist/types/sonner/assets/WarningIcon.vue.d.ts +3 -0
- package/dist/types/sonner/component.d.ts +1 -0
- package/dist/types/sonner/constant.d.ts +9 -0
- package/dist/types/sonner/hooks.d.ts +11 -0
- package/dist/types/sonner/index.d.ts +8 -0
- package/dist/types/sonner/state.d.ts +56 -0
- package/dist/types/sonner/types.d.ts +174 -0
- package/dist/types/store.d.ts +10 -0
- package/dist/types/toaster-registry.d.ts +3 -0
- package/dist/types/types.d.ts +162 -0
- package/dist/types/utils.d.ts +12 -0
- package/dist/vue-smart-toast.css +2 -0
- package/dist/vue-smart-toast.js +1469 -0
- package/dist/vue-smart-toast.umd.cjs +1 -0
- package/package.json +47 -0
|
@@ -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,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*/
|