@lobehub/ui 4.19.1 → 4.20.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 (177) hide show
  1. package/es/Accordion/Accordion.d.mts +2 -2
  2. package/es/Accordion/Accordion.mjs +2 -2
  3. package/es/Accordion/Accordion.mjs.map +1 -1
  4. package/es/Accordion/AccordionItem.d.mts +2 -2
  5. package/es/Accordion/AccordionItem.mjs +2 -2
  6. package/es/Accordion/AccordionItem.mjs.map +1 -1
  7. package/es/ActionIcon/ActionIcon.d.mts +2 -2
  8. package/es/Alert/Alert.d.mts +2 -2
  9. package/es/AutoComplete/Select.d.mts +2 -2
  10. package/es/Avatar/AvatarGroup/index.d.mts +2 -2
  11. package/es/Burger/Burger.d.mts +2 -2
  12. package/es/Checkbox/Checkbox.mjs +2 -2
  13. package/es/Checkbox/Checkbox.mjs.map +1 -1
  14. package/es/Checkbox/CheckboxGroup.mjs +2 -2
  15. package/es/Checkbox/CheckboxGroup.mjs.map +1 -1
  16. package/es/CodeDiff/CodeDiff.d.mts +2 -2
  17. package/es/CodeDiff/PatchDiff.d.mts +2 -2
  18. package/es/CodeEditor/CodeEditor.d.mts +2 -2
  19. package/es/CodeEditor/CodeEditor.mjs +2 -2
  20. package/es/CodeEditor/CodeEditor.mjs.map +1 -1
  21. package/es/Collapse/Collapse.d.mts +2 -2
  22. package/es/ColorSwatches/ColorSwatches.mjs +2 -2
  23. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  24. package/es/ConfigProvider/index.d.mts +2 -2
  25. package/es/ContextMenu/ContextMenuHost.d.mts +2 -2
  26. package/es/CopyButton/CopyButton.d.mts +2 -2
  27. package/es/DatePicker/DatePicker.d.mts +2 -2
  28. package/es/DraggablePanel/DraggablePanel.mjs +2 -2
  29. package/es/DraggablePanel/DraggablePanel.mjs.map +1 -1
  30. package/es/DraggablePanel/components/DraggablePanelBody.d.mts +2 -2
  31. package/es/DraggablePanel/components/DraggablePanelContainer.d.mts +2 -2
  32. package/es/DraggablePanel/components/DraggablePanelFooter.d.mts +2 -2
  33. package/es/DraggablePanel/components/DraggablePanelHeader.d.mts +2 -2
  34. package/es/DraggablePanel/components/DraggablePanelHeader.mjs +2 -2
  35. package/es/DraggablePanel/components/DraggablePanelHeader.mjs.map +1 -1
  36. package/es/DraggableSideNav/DraggableSideNav.d.mts +2 -2
  37. package/es/DraggableSideNav/DraggableSideNav.mjs +2 -2
  38. package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
  39. package/es/Drawer/Drawer.d.mts +2 -2
  40. package/es/Dropdown/Dropdown.d.mts +2 -2
  41. package/es/DropdownMenu/DropdownMenu.d.mts +2 -2
  42. package/es/DropdownMenu/atoms.d.mts +15 -15
  43. package/es/EditableText/EditableText.d.mts +2 -2
  44. package/es/EditableText/EditableText.mjs +2 -2
  45. package/es/EditableText/EditableText.mjs.map +1 -1
  46. package/es/EmojiPicker/EmojiPicker.d.mts +2 -2
  47. package/es/EmojiPicker/EmojiPicker.mjs +3 -3
  48. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  49. package/es/Flex/FlexBasic.d.mts +2 -2
  50. package/es/FontLoader/index.d.mts +2 -2
  51. package/es/Footer/Footer.d.mts +2 -2
  52. package/es/Form/components/FormGroup.d.mts +2 -2
  53. package/es/Form/components/FormItem.d.mts +2 -2
  54. package/es/Form/components/FormSubmitFooter.d.mts +2 -2
  55. package/es/FormModal/FormModal.d.mts +2 -2
  56. package/es/GuideCard/GuideCard.d.mts +2 -2
  57. package/es/Header/Header.d.mts +2 -2
  58. package/es/Highlighter/Highlighter.d.mts +2 -2
  59. package/es/Highlighter/SyntaxHighlighter/index.d.mts +2 -2
  60. package/es/Hotkey/Hotkey.d.mts +2 -2
  61. package/es/HotkeyInput/HotkeyInput.d.mts +2 -2
  62. package/es/HotkeyInput/HotkeyInput.mjs +2 -2
  63. package/es/HotkeyInput/HotkeyInput.mjs.map +1 -1
  64. package/es/Icon/Icon.d.mts +2 -2
  65. package/es/Icon/components/IconProvider.d.mts +3 -3
  66. package/es/Image/PreviewGroup.d.mts +2 -2
  67. package/es/ImageSelect/ImageSelect.d.mts +2 -2
  68. package/es/ImageSelect/ImageSelect.mjs +2 -2
  69. package/es/ImageSelect/ImageSelect.mjs.map +1 -1
  70. package/es/Input/Input.d.mts +2 -2
  71. package/es/Input/InputNumber.d.mts +2 -2
  72. package/es/Input/InputOPT.d.mts +2 -2
  73. package/es/Input/InputPassword.d.mts +2 -2
  74. package/es/Input/TextArea.d.mts +2 -2
  75. package/es/Layout/components/LayoutFooter.d.mts +2 -2
  76. package/es/Layout/components/LayoutHeader.d.mts +2 -2
  77. package/es/Layout/components/LayoutMain.d.mts +2 -2
  78. package/es/Layout/components/LayoutSidebar.d.mts +2 -2
  79. package/es/Layout/components/LayoutSidebarInner.d.mts +2 -2
  80. package/es/Layout/components/LayoutToc.d.mts +2 -2
  81. package/es/List/ListItem/index.d.mts +2 -2
  82. package/es/Markdown/Markdown.d.mts +2 -2
  83. package/es/Markdown/Typography.d.mts +2 -2
  84. package/es/Markdown/components/SearchResultCards/index.d.mts +2 -2
  85. package/es/MaskShadow/MaskShadow.d.mts +2 -2
  86. package/es/Menu/Menu.d.mts +2 -2
  87. package/es/Mermaid/Mermaid.d.mts +2 -2
  88. package/es/Mermaid/SyntaxMermaid/index.d.mts +2 -2
  89. package/es/Modal/Modal.d.mts +2 -2
  90. package/es/Modal/ModalProvider.d.mts +2 -2
  91. package/es/Modal/imperative.d.mts +2 -2
  92. package/es/MotionProvider/index.d.mts +2 -2
  93. package/es/Popover/ArrowIcon.d.mts +2 -2
  94. package/es/Popover/atoms.d.mts +9 -9
  95. package/es/Popover/context.d.mts +2 -2
  96. package/es/SearchBar/SearchBar.d.mts +2 -2
  97. package/es/SearchBar/SearchBar.mjs +2 -2
  98. package/es/SearchBar/SearchBar.mjs.map +1 -1
  99. package/es/Segmented/Segmented.d.mts +2 -2
  100. package/es/Select/Select.d.mts +2 -2
  101. package/es/SideNav/SideNav.d.mts +2 -2
  102. package/es/SliderWithInput/SliderWithInput.d.mts +2 -2
  103. package/es/SortableList/components/DragHandle.d.mts +2 -2
  104. package/es/SortableList/components/SortableItem.d.mts +2 -2
  105. package/es/ThemeProvider/ThemeProvider.d.mts +2 -2
  106. package/es/Toast/Toast.mjs +107 -0
  107. package/es/Toast/Toast.mjs.map +1 -0
  108. package/es/Toast/context.mjs +14 -0
  109. package/es/Toast/context.mjs.map +1 -0
  110. package/es/Toast/imperative.d.mts +45 -0
  111. package/es/Toast/imperative.mjs +243 -0
  112. package/es/Toast/imperative.mjs.map +1 -0
  113. package/es/Toast/index.d.mts +3 -0
  114. package/es/Toast/index.d.ts +1 -0
  115. package/es/Toast/index.js +1 -0
  116. package/es/Toast/index.mjs +3 -0
  117. package/es/Toast/style.mjs +293 -0
  118. package/es/Toast/style.mjs.map +1 -0
  119. package/es/Toast/type.d.mts +118 -0
  120. package/es/Toc/Toc.d.mts +2 -2
  121. package/es/Toc/TocMobile.mjs +2 -2
  122. package/es/Toc/TocMobile.mjs.map +1 -1
  123. package/es/Video/index.d.mts +2 -2
  124. package/es/awesome/AuroraBackground/AuroraBackground.d.mts +2 -2
  125. package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -2
  126. package/es/awesome/Features/Features.d.mts +2 -2
  127. package/es/awesome/Giscus/Giscus.d.mts +2 -2
  128. package/es/awesome/GridBackground/GridBackground.d.mts +2 -2
  129. package/es/awesome/GridBackground/GridShowcase.d.mts +2 -2
  130. package/es/awesome/Hero/Hero.d.mts +2 -2
  131. package/es/awesome/Spline/Spine.d.mts +2 -2
  132. package/es/awesome/Spotlight/Spotlight.d.mts +2 -2
  133. package/es/awesome/SpotlightCard/SpotlightCard.d.mts +2 -2
  134. package/es/awesome/TypewriterEffect/TypewriterEffect.d.mts +2 -2
  135. package/es/brand/LobeChat/index.d.mts +2 -2
  136. package/es/brand/LobeHub/index.d.mts +2 -2
  137. package/es/brand/LogoThree/LogoSpline.d.mts +2 -2
  138. package/es/brand/LogoThree/index.d.mts +2 -2
  139. package/es/chat/BackBottom/BackBottom.d.mts +2 -2
  140. package/es/chat/ChatInputArea/components/ChatInputAreaInner.d.mts +2 -2
  141. package/es/chat/ChatItem/ChatItem.d.mts +2 -2
  142. package/es/chat/ChatList/ChatList.d.mts +2 -2
  143. package/es/chat/EditableMessage/EditableMessage.d.mts +2 -2
  144. package/es/chat/EditableMessage/EditableMessage.mjs +3 -3
  145. package/es/chat/EditableMessage/EditableMessage.mjs.map +1 -1
  146. package/es/chat/EditableMessageList/EditableMessageList.d.mts +2 -2
  147. package/es/chat/MessageInput/MessageInput.d.mts +2 -2
  148. package/es/chat/MessageModal/MessageModal.d.mts +2 -2
  149. package/es/chat/MessageModal/MessageModal.mjs +3 -3
  150. package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
  151. package/es/color/ColorScales/index.d.mts +2 -2
  152. package/es/color/CssVar/index.d.mts +2 -2
  153. package/es/i18n/context.d.mts +2 -2
  154. package/es/icons/lucideExtra/BotPromptIcon.d.mts +2 -2
  155. package/es/icons/lucideExtra/CreateBotIcon.d.mts +3 -3
  156. package/es/icons/lucideExtra/DiscordIcon.d.mts +3 -3
  157. package/es/icons/lucideExtra/GlobeOffIcon.d.mts +2 -2
  158. package/es/icons/lucideExtra/GroupBotIcon.d.mts +2 -2
  159. package/es/icons/lucideExtra/GroupBotSquareIcon.d.mts +3 -3
  160. package/es/icons/lucideExtra/LeftClickIcon.d.mts +3 -3
  161. package/es/icons/lucideExtra/LeftDoubleClickIcon.d.mts +3 -3
  162. package/es/icons/lucideExtra/McpIcon.d.mts +3 -3
  163. package/es/icons/lucideExtra/ProviderIcon.d.mts +3 -3
  164. package/es/icons/lucideExtra/RightClickIcon.d.mts +3 -3
  165. package/es/icons/lucideExtra/RightDoubleClickIcon.d.mts +3 -3
  166. package/es/icons/lucideExtra/ShapesUploadIcon.d.mts +2 -2
  167. package/es/icons/lucideExtra/TreeDownRightIcon.d.mts +3 -3
  168. package/es/icons/lucideExtra/TreeUpDownRightIcon.d.mts +3 -3
  169. package/es/index.d.mts +4 -1
  170. package/es/index.mjs +2 -1
  171. package/es/mdx/Mdx/index.d.mts +2 -2
  172. package/es/mobile/ChatHeader/ChatHeaderTitle.d.mts +2 -2
  173. package/es/mobile/TabBar/TabBar.d.mts +2 -2
  174. package/es/mobile/TabBar/TabBar.mjs +2 -2
  175. package/es/mobile/TabBar/TabBar.mjs.map +1 -1
  176. package/es/storybook/StoryBook/index.d.mts +2 -2
  177. package/package.json +1 -1
@@ -0,0 +1,243 @@
1
+ 'use client';
2
+
3
+ import { useIsClient } from "../hooks/useIsClient.mjs";
4
+ import { LOBE_THEME_APP_ID } from "../ThemeProvider/constants.mjs";
5
+ import { registerDevSingleton } from "../utils/devSingleton.mjs";
6
+ import { ToastContext } from "./context.mjs";
7
+ import { viewportVariants } from "./style.mjs";
8
+ import Toast_default from "./Toast.mjs";
9
+ import { memo, useEffect, useState } from "react";
10
+ import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
11
+ import { cx } from "antd-style";
12
+ import { createPortal } from "react-dom";
13
+ import { Toast } from "@base-ui/react/toast";
14
+
15
+ //#region src/Toast/imperative.tsx
16
+ const ALL_POSITIONS = [
17
+ "top",
18
+ "top-left",
19
+ "top-right",
20
+ "bottom",
21
+ "bottom-left",
22
+ "bottom-right"
23
+ ];
24
+ let globalState = {
25
+ duration: 5e3,
26
+ limit: 5,
27
+ position: "bottom-right",
28
+ swipeDirection: ["down", "right"]
29
+ };
30
+ const toastManagers = {
31
+ "bottom": Toast.createToastManager(),
32
+ "bottom-left": Toast.createToastManager(),
33
+ "bottom-right": Toast.createToastManager(),
34
+ "top": Toast.createToastManager(),
35
+ "top-left": Toast.createToastManager(),
36
+ "top-right": Toast.createToastManager()
37
+ };
38
+ const activeToastIds = {
39
+ "bottom": /* @__PURE__ */ new Set(),
40
+ "bottom-left": /* @__PURE__ */ new Set(),
41
+ "bottom-right": /* @__PURE__ */ new Set(),
42
+ "top": /* @__PURE__ */ new Set(),
43
+ "top-left": /* @__PURE__ */ new Set(),
44
+ "top-right": /* @__PURE__ */ new Set()
45
+ };
46
+ const getManager = (position) => toastManagers[position];
47
+ const normalizeOptions = (optionsOrMessage, type) => {
48
+ if (typeof optionsOrMessage === "string") return {
49
+ description: optionsOrMessage,
50
+ type
51
+ };
52
+ return {
53
+ ...optionsOrMessage,
54
+ type
55
+ };
56
+ };
57
+ const createToastInstance = (id, position) => ({
58
+ close: () => getManager(position).close(id),
59
+ id,
60
+ update: (options) => {
61
+ getManager(position).update(id, {
62
+ data: options,
63
+ description: options.description,
64
+ title: options.title
65
+ });
66
+ }
67
+ });
68
+ const addToast = (options) => {
69
+ const position = options.placement ?? globalState.position;
70
+ const manager = getManager(position);
71
+ const onRemove = options.onRemove;
72
+ const id = manager.add({
73
+ data: options,
74
+ description: options.description,
75
+ onClose: options.onClose,
76
+ onRemove: () => {
77
+ activeToastIds[position].delete(id);
78
+ onRemove?.();
79
+ },
80
+ timeout: options.duration ?? globalState.duration,
81
+ title: options.title
82
+ });
83
+ activeToastIds[position].add(id);
84
+ return createToastInstance(id, position);
85
+ };
86
+ const dismissToast = (id) => {
87
+ if (id) for (const [position, manager] of Object.entries(toastManagers)) {
88
+ activeToastIds[position].delete(id);
89
+ manager.close(id);
90
+ }
91
+ else for (const [position, manager] of Object.entries(toastManagers)) {
92
+ const ids = Array.from(activeToastIds[position]);
93
+ for (const toastId of ids) manager.close(toastId);
94
+ activeToastIds[position].clear();
95
+ }
96
+ };
97
+ const createSuccessToast = (optionsOrMessage) => {
98
+ return addToast(normalizeOptions(optionsOrMessage, "success"));
99
+ };
100
+ const createErrorToast = (optionsOrMessage) => {
101
+ return addToast(normalizeOptions(optionsOrMessage, "error"));
102
+ };
103
+ const createInfoToast = (optionsOrMessage) => {
104
+ return addToast(normalizeOptions(optionsOrMessage, "info"));
105
+ };
106
+ const createWarningToast = (optionsOrMessage) => {
107
+ return addToast(normalizeOptions(optionsOrMessage, "warning"));
108
+ };
109
+ const createLoadingToast = (optionsOrMessage) => {
110
+ return addToast({
111
+ duration: 0,
112
+ ...normalizeOptions(optionsOrMessage, "loading")
113
+ });
114
+ };
115
+ async function promiseToast(promise, options) {
116
+ const loadingToast = addToast({
117
+ closable: false,
118
+ duration: 0,
119
+ type: "loading",
120
+ ...typeof options.loading === "string" ? { description: options.loading } : options.loading
121
+ });
122
+ try {
123
+ const result = await promise;
124
+ loadingToast.close();
125
+ addToast({
126
+ type: "success",
127
+ ...(() => {
128
+ if (typeof options.success === "string") return { description: options.success };
129
+ if (typeof options.success === "function") return { description: options.success(result) };
130
+ return options.success;
131
+ })()
132
+ });
133
+ return result;
134
+ } catch (error) {
135
+ loadingToast.close();
136
+ addToast({
137
+ type: "error",
138
+ ...(() => {
139
+ if (typeof options.error === "string") return { description: options.error };
140
+ if (typeof options.error === "function") return { description: options.error(error) };
141
+ return options.error;
142
+ })()
143
+ });
144
+ throw error;
145
+ }
146
+ }
147
+ const baseToast = (options) => {
148
+ return addToast({
149
+ type: "default",
150
+ ...options
151
+ });
152
+ };
153
+ const toast = Object.assign(baseToast, {
154
+ dismiss: dismissToast,
155
+ error: createErrorToast,
156
+ info: createInfoToast,
157
+ loading: createLoadingToast,
158
+ promise: promiseToast,
159
+ success: createSuccessToast,
160
+ warning: createWarningToast
161
+ });
162
+ const ToastList = memo(() => {
163
+ const { toasts } = Toast.useToastManager();
164
+ return toasts.map((t) => /* @__PURE__ */ jsx(Toast_default, { toast: t }, t.id));
165
+ });
166
+ ToastList.displayName = "ToastList";
167
+ const TOAST_PORTAL_ATTR = "data-lobe-ui-toast-portal";
168
+ const TOAST_CONTAINER_ATTR = "data-lobe-ui-toast-container";
169
+ const containerMap = /* @__PURE__ */ new WeakMap();
170
+ const getOrCreateContainer = (root) => {
171
+ const resolvedRoot = (() => {
172
+ if (typeof document === "undefined") return root;
173
+ if (typeof ShadowRoot !== "undefined" && root instanceof ShadowRoot) return root;
174
+ if (!(root === document.body)) return root;
175
+ const themeApp = document.querySelector(`#${LOBE_THEME_APP_ID}`);
176
+ if (themeApp) return themeApp;
177
+ const toastContainer = document.querySelector(`[${TOAST_CONTAINER_ATTR}="true"]`);
178
+ if (toastContainer) return toastContainer;
179
+ return root;
180
+ })();
181
+ const cached = containerMap.get(resolvedRoot);
182
+ if (cached && cached.isConnected) return cached;
183
+ const el = document.createElement("div");
184
+ el.setAttribute(TOAST_PORTAL_ATTR, "true");
185
+ resolvedRoot.append(el);
186
+ containerMap.set(resolvedRoot, el);
187
+ return el;
188
+ };
189
+ const resolveRoot = (root) => {
190
+ if (root) return root;
191
+ return document.body;
192
+ };
193
+ const ToastHost = memo(({ root, className, duration = 5e3, limit = 5, position = "bottom-right", swipeDirection = ["down", "right"] }) => {
194
+ const isClient = useIsClient();
195
+ const [container, setContainer] = useState(null);
196
+ useEffect(() => {
197
+ globalState = {
198
+ duration,
199
+ limit,
200
+ position,
201
+ swipeDirection
202
+ };
203
+ }, [
204
+ duration,
205
+ limit,
206
+ position,
207
+ swipeDirection
208
+ ]);
209
+ useEffect(() => {
210
+ if (!isClient) return;
211
+ const resolved = resolveRoot(root);
212
+ if (resolved) {
213
+ setContainer(getOrCreateContainer(resolved));
214
+ console.log("resolved", resolved, container);
215
+ }
216
+ return registerDevSingleton("ToastHost", root ?? document.body);
217
+ }, [isClient, root]);
218
+ if (!isClient || !container) return null;
219
+ return createPortal(/* @__PURE__ */ jsx(Fragment$1, { children: ALL_POSITIONS.map((pos) => /* @__PURE__ */ jsx(ToastContext.Provider, {
220
+ value: {
221
+ position: pos,
222
+ swipeDirection
223
+ },
224
+ children: /* @__PURE__ */ jsx(Toast.Provider, {
225
+ limit,
226
+ timeout: duration,
227
+ toastManager: getManager(pos),
228
+ children: /* @__PURE__ */ jsx(Toast.Portal, {
229
+ container,
230
+ children: /* @__PURE__ */ jsx(Toast.Viewport, {
231
+ className: cx(viewportVariants({ position: pos }), className),
232
+ children: /* @__PURE__ */ jsx(ToastList, {})
233
+ })
234
+ })
235
+ })
236
+ }, pos)) }), container);
237
+ });
238
+ ToastHost.displayName = "ToastHost";
239
+ const useToast = () => toast;
240
+
241
+ //#endregion
242
+ export { TOAST_CONTAINER_ATTR, ToastHost, toast, useToast };
243
+ //# sourceMappingURL=imperative.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"imperative.mjs","names":["ALL_POSITIONS: ToastPosition[]","globalState: ToastState","toastManagers: Record<ToastPosition, ReturnType<typeof BaseToast.createToastManager>>","BaseToast","activeToastIds: Record<ToastPosition, Set<string>>","toast: ToastAPI","ToastItem"],"sources":["../../src/Toast/imperative.tsx"],"sourcesContent":["'use client';\n\nimport { Toast as BaseToast } from '@base-ui/react/toast';\nimport { cx } from 'antd-style';\nimport { memo, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { LOBE_THEME_APP_ID } from '@/ThemeProvider';\nimport { useIsClient } from '@/hooks/useIsClient';\nimport { registerDevSingleton } from '@/utils/devSingleton';\n\nimport ToastItem from './Toast';\nimport { ToastContext } from './context';\nimport { viewportVariants } from './style';\nimport type {\n ToastAPI,\n ToastInstance,\n ToastOptions,\n ToastPosition,\n ToastPromiseOptions,\n ToastType,\n} from './type';\n\n// All possible positions\nconst ALL_POSITIONS: ToastPosition[] = [\n 'top',\n 'top-left',\n 'top-right',\n 'bottom',\n 'bottom-left',\n 'bottom-right',\n];\n\n// Global state management\ninterface ToastState {\n duration: number;\n limit: number;\n position: ToastPosition;\n swipeDirection: ('left' | 'right' | 'up' | 'down') | ('left' | 'right' | 'up' | 'down')[];\n}\n\nlet globalState: ToastState = {\n duration: 5000,\n limit: 5,\n position: 'bottom-right',\n swipeDirection: ['down', 'right'],\n};\n\n// Toast managers for each position\nconst toastManagers: Record<ToastPosition, ReturnType<typeof BaseToast.createToastManager>> = {\n 'bottom': BaseToast.createToastManager(),\n 'bottom-left': BaseToast.createToastManager(),\n 'bottom-right': BaseToast.createToastManager(),\n 'top': BaseToast.createToastManager(),\n 'top-left': BaseToast.createToastManager(),\n 'top-right': BaseToast.createToastManager(),\n};\n\nconst activeToastIds: Record<ToastPosition, Set<string>> = {\n 'bottom': new Set(),\n 'bottom-left': new Set(),\n 'bottom-right': new Set(),\n 'top': new Set(),\n 'top-left': new Set(),\n 'top-right': new Set(),\n};\n\nconst getManager = (position: ToastPosition) => toastManagers[position];\n\nconst normalizeOptions = (\n optionsOrMessage: Omit<ToastOptions, 'type'> | string,\n type: ToastType,\n): ToastOptions => {\n if (typeof optionsOrMessage === 'string') {\n return {\n description: optionsOrMessage,\n type,\n };\n }\n return {\n ...optionsOrMessage,\n type,\n };\n};\n\nconst createToastInstance = (id: string, position: ToastPosition): ToastInstance => ({\n close: () => getManager(position).close(id),\n id,\n update: (options) => {\n getManager(position).update(id, {\n data: options,\n description: options.description,\n title: options.title,\n });\n },\n});\n\nconst addToast = (options: ToastOptions): ToastInstance => {\n const position = options.placement ?? globalState.position;\n const manager = getManager(position);\n const onRemove = options.onRemove;\n const id = manager.add({\n data: options,\n description: options.description,\n onClose: options.onClose,\n onRemove: () => {\n activeToastIds[position].delete(id);\n onRemove?.();\n },\n timeout: options.duration ?? globalState.duration,\n title: options.title,\n });\n activeToastIds[position].add(id);\n return createToastInstance(id, position);\n};\n\nconst dismissToast = (id?: string) => {\n if (id) {\n // Try to close from all managers since we don't know which position the toast is in\n for (const [position, manager] of Object.entries(toastManagers)) {\n activeToastIds[position as ToastPosition].delete(id);\n manager.close(id);\n }\n } else {\n // Clear all toasts\n for (const [position, manager] of Object.entries(toastManagers)) {\n const ids = Array.from(activeToastIds[position as ToastPosition]);\n for (const toastId of ids) {\n manager.close(toastId);\n }\n activeToastIds[position as ToastPosition].clear();\n }\n }\n};\n\nconst createSuccessToast = (\n optionsOrMessage: Omit<ToastOptions, 'type'> | string,\n): ToastInstance => {\n return addToast(normalizeOptions(optionsOrMessage, 'success'));\n};\n\nconst createErrorToast = (optionsOrMessage: Omit<ToastOptions, 'type'> | string): ToastInstance => {\n return addToast(normalizeOptions(optionsOrMessage, 'error'));\n};\n\nconst createInfoToast = (optionsOrMessage: Omit<ToastOptions, 'type'> | string): ToastInstance => {\n return addToast(normalizeOptions(optionsOrMessage, 'info'));\n};\n\nconst createWarningToast = (\n optionsOrMessage: Omit<ToastOptions, 'type'> | string,\n): ToastInstance => {\n return addToast(normalizeOptions(optionsOrMessage, 'warning'));\n};\n\nconst createLoadingToast = (\n optionsOrMessage: Omit<ToastOptions, 'type'> | string,\n): ToastInstance => {\n const options = normalizeOptions(optionsOrMessage, 'loading');\n // Loading toasts don't auto-dismiss by default\n return addToast({ duration: 0, ...options });\n};\n\nasync function promiseToast<T>(promise: Promise<T>, options: ToastPromiseOptions<T>): Promise<T> {\n const loadingOptions =\n typeof options.loading === 'string'\n ? { description: options.loading }\n : (options.loading as ToastOptions);\n\n const loadingToast = addToast({\n closable: false,\n duration: 0,\n type: 'loading',\n ...loadingOptions,\n });\n\n try {\n const result = await promise;\n\n loadingToast.close();\n\n const successOptions = (() => {\n if (typeof options.success === 'string') {\n return { description: options.success };\n }\n if (typeof options.success === 'function') {\n return { description: options.success(result) };\n }\n return options.success as ToastOptions;\n })();\n\n addToast({ type: 'success', ...successOptions });\n\n return result;\n } catch (error) {\n loadingToast.close();\n\n const errorOptions = (() => {\n if (typeof options.error === 'string') {\n return { description: options.error };\n }\n if (typeof options.error === 'function') {\n return { description: options.error(error as Error) };\n }\n return options.error as ToastOptions;\n })();\n\n addToast({ type: 'error', ...errorOptions });\n\n throw error;\n }\n}\n\n// Base toast function\nconst baseToast = (options: ToastOptions): ToastInstance => {\n return addToast({ type: 'default', ...options });\n};\n\n// Toast API\nexport const toast: ToastAPI = Object.assign(baseToast, {\n dismiss: dismissToast,\n error: createErrorToast,\n info: createInfoToast,\n loading: createLoadingToast,\n promise: promiseToast,\n success: createSuccessToast,\n warning: createWarningToast,\n});\n\n// Toast List Component\nconst ToastList = memo(() => {\n const { toasts } = BaseToast.useToastManager();\n return toasts.map((t) => <ToastItem key={t.id} toast={t} />);\n});\n\nToastList.displayName = 'ToastList';\n\n// Toast Host Component\nconst TOAST_PORTAL_ATTR = 'data-lobe-ui-toast-portal';\nexport const TOAST_CONTAINER_ATTR = 'data-lobe-ui-toast-container';\n\nconst containerMap = new WeakMap<object, HTMLElement>();\n\nconst getOrCreateContainer = (root: HTMLElement | ShadowRoot): HTMLElement => {\n const resolvedRoot = (() => {\n if (typeof document === 'undefined') return root;\n if (typeof ShadowRoot !== 'undefined' && root instanceof ShadowRoot) return root;\n\n const isBody = root === document.body;\n if (!isBody) return root;\n\n const themeApp = document.querySelector<HTMLElement>(`#${LOBE_THEME_APP_ID}`);\n if (themeApp) return themeApp;\n\n const toastContainer = document.querySelector<HTMLElement>(`[${TOAST_CONTAINER_ATTR}=\"true\"]`);\n if (toastContainer) return toastContainer;\n\n return root;\n })();\n\n const cached = containerMap.get(resolvedRoot);\n if (cached && cached.isConnected) return cached;\n\n const el = document.createElement('div');\n el.setAttribute(TOAST_PORTAL_ATTR, 'true');\n resolvedRoot.append(el);\n containerMap.set(resolvedRoot, el);\n return el;\n};\n\nconst resolveRoot = (root?: HTMLElement | ShadowRoot | null): HTMLElement | ShadowRoot | null => {\n if (root) return root;\n return document.body;\n};\n\nexport interface ToastHostProps {\n className?: string;\n /**\n * Default duration for toasts\n * @default 5000\n */\n duration?: number;\n /**\n * Maximum number of toasts\n * @default 5\n */\n limit?: number;\n /**\n * Toast position\n * @default 'bottom-right'\n */\n position?: ToastPosition;\n /**\n * Root element for portal\n */\n root?: HTMLElement | ShadowRoot | null;\n /**\n * Swipe direction to dismiss\n * @default ['down', 'right']\n */\n swipeDirection?: ('left' | 'right' | 'up' | 'down') | ('left' | 'right' | 'up' | 'down')[];\n}\n\nexport const ToastHost = memo(\n ({\n root,\n className,\n duration = 5000,\n limit = 5,\n position = 'bottom-right',\n swipeDirection = ['down', 'right'],\n }: ToastHostProps) => {\n const isClient = useIsClient();\n const [container, setContainer] = useState<HTMLElement | null>(null);\n\n useEffect(() => {\n globalState = {\n duration,\n limit,\n position,\n swipeDirection,\n };\n }, [duration, limit, position, swipeDirection]);\n\n useEffect(() => {\n if (!isClient) return;\n\n const resolved = resolveRoot(root);\n if (resolved) {\n setContainer(getOrCreateContainer(resolved));\n console.log('resolved', resolved, container);\n }\n\n const scope = root ?? document.body;\n return registerDevSingleton('ToastHost', scope);\n }, [isClient, root]);\n\n if (!isClient || !container) return null;\n\n return createPortal(\n <>\n {ALL_POSITIONS.map((pos) => (\n <ToastContext.Provider key={pos} value={{ position: pos, swipeDirection }}>\n <BaseToast.Provider limit={limit} timeout={duration} toastManager={getManager(pos)}>\n <BaseToast.Portal container={container}>\n <BaseToast.Viewport className={cx(viewportVariants({ position: pos }), className)}>\n <ToastList />\n </BaseToast.Viewport>\n </BaseToast.Portal>\n </BaseToast.Provider>\n </ToastContext.Provider>\n ))}\n </>,\n container,\n );\n },\n);\n\nToastHost.displayName = 'ToastHost';\n\n// Hook to use toast manager\nexport const useToast = () => toast;\n"],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToastAPI, ToastInstance, ToastOptions, ToastPosition, ToastPromiseOptions, ToastProps, ToastType } from "./type.mjs";
2
+ import { TOAST_CONTAINER_ATTR, ToastHost, ToastHostProps, toast, useToast } from "./imperative.mjs";
3
+ export { TOAST_CONTAINER_ATTR, ToastAPI, ToastHost, type ToastHostProps, ToastInstance, ToastOptions, ToastPosition, ToastPromiseOptions, ToastProps, ToastType, toast, useToast };
@@ -0,0 +1 @@
1
+ export * from './index.d.mts';
@@ -0,0 +1 @@
1
+ export * from './index.mjs';
@@ -0,0 +1,3 @@
1
+ import { TOAST_CONTAINER_ATTR, ToastHost, toast, useToast } from "./imperative.mjs";
2
+
3
+ export { TOAST_CONTAINER_ATTR, ToastHost, toast, useToast };
@@ -0,0 +1,293 @@
1
+ import { createStaticStyles } from "antd-style";
2
+ import { cva } from "class-variance-authority";
3
+
4
+ //#region src/Toast/style.ts
5
+ const styles = createStaticStyles(({ css: css$1, cssVar: cssVar$1 }) => ({
6
+ action: css$1`
7
+ cursor: pointer;
8
+
9
+ display: inline-flex;
10
+ align-items: center;
11
+ justify-content: center;
12
+
13
+ height: 28px;
14
+ margin-block-start: 8px;
15
+ padding-inline: 12px;
16
+ border: none;
17
+ border-radius: ${cssVar$1.borderRadiusSM};
18
+
19
+ font-size: 12px;
20
+ font-weight: 500;
21
+ line-height: 1;
22
+ color: ${cssVar$1.colorTextLightSolid};
23
+
24
+ background: ${cssVar$1.colorPrimary};
25
+
26
+ transition: background 0.2s;
27
+
28
+ &:hover {
29
+ background: ${cssVar$1.colorPrimaryHover};
30
+ }
31
+
32
+ &:active {
33
+ background: ${cssVar$1.colorPrimaryActive};
34
+ }
35
+
36
+ &:focus-visible {
37
+ outline: 2px solid ${cssVar$1.colorPrimaryBorder};
38
+ outline-offset: 1px;
39
+ }
40
+ `,
41
+ close: css$1`
42
+ cursor: pointer;
43
+
44
+ position: absolute;
45
+ inset-block-start: 8px;
46
+ inset-inline-end: 8px;
47
+
48
+ display: flex;
49
+ align-items: center;
50
+ justify-content: center;
51
+
52
+ width: 20px;
53
+ height: 20px;
54
+ padding: 0;
55
+ border: none;
56
+ border-radius: ${cssVar$1.borderRadiusSM};
57
+
58
+ color: ${cssVar$1.colorTextTertiary};
59
+
60
+ background: transparent;
61
+
62
+ transition: all 0.2s;
63
+
64
+ &:hover {
65
+ color: ${cssVar$1.colorText};
66
+ background: ${cssVar$1.colorFillSecondary};
67
+ }
68
+ `,
69
+ content: css$1`
70
+ overflow: hidden;
71
+ transition: opacity 0.2s;
72
+
73
+ &[data-behind] {
74
+ pointer-events: none;
75
+ opacity: 0;
76
+ }
77
+
78
+ &[data-expanded] {
79
+ pointer-events: auto;
80
+ opacity: 1;
81
+ }
82
+ `,
83
+ description: css$1`
84
+ margin: 0;
85
+ font-size: 13px;
86
+ line-height: 1.5;
87
+ color: ${cssVar$1.colorTextSecondary};
88
+ `,
89
+ icon: css$1`
90
+ display: flex;
91
+ flex-shrink: 0;
92
+ align-items: center;
93
+ justify-content: center;
94
+ `,
95
+ root: css$1`
96
+ --toast-gap: 12px;
97
+ --toast-peek: 12px;
98
+ --toast-scale: calc(1 - var(--toast-index) * 0.05);
99
+ --toast-shrink: calc(1 - var(--toast-scale));
100
+ --toast-collapsed-height: var(--toast-frontmost-height, var(--toast-height));
101
+
102
+ cursor: default;
103
+ user-select: none;
104
+
105
+ position: absolute;
106
+ z-index: calc(1000 - var(--toast-index));
107
+ inset-inline: 0;
108
+
109
+ box-sizing: border-box;
110
+ width: 100%;
111
+ height: var(--toast-collapsed-height);
112
+ padding-block: 12px;
113
+ padding-inline: 16px;
114
+ padding-inline-end: 32px;
115
+ border-radius: ${cssVar$1.borderRadiusLG};
116
+
117
+ color: ${cssVar$1.colorText};
118
+
119
+ background: ${cssVar$1.colorBgElevated};
120
+ background-clip: padding-box;
121
+ box-shadow:
122
+ 0 0 15px 0 #00000008,
123
+ 0 2px 30px 0 #00000014,
124
+ 0 0 0 1px ${cssVar$1.colorBorder} inset;
125
+
126
+ transition:
127
+ transform 0.4s cubic-bezier(0.22, 1, 0.36, 1),
128
+ opacity 0.4s,
129
+ height 0.15s;
130
+
131
+ /* Fill gap between stacked toasts to prevent hover flicker */
132
+ &::after {
133
+ content: '';
134
+ position: absolute;
135
+ inset-inline: 0;
136
+ height: calc(var(--toast-gap) + var(--toast-peek) + 8px);
137
+ }
138
+
139
+ &[data-limited] {
140
+ opacity: 0;
141
+ }
142
+
143
+ &[data-swiping] {
144
+ transition: none;
145
+ }
146
+ `,
147
+ rootBottom: css$1`
148
+ inset-block: auto 0;
149
+ transform-origin: bottom center;
150
+ transform: translateX(var(--toast-swipe-movement-x))
151
+ translateY(
152
+ calc(
153
+ var(--toast-swipe-movement-y) - (var(--toast-index) * var(--toast-peek)) -
154
+ (var(--toast-shrink) * var(--toast-collapsed-height))
155
+ )
156
+ )
157
+ scale(var(--toast-scale));
158
+
159
+ &::after {
160
+ inset-block-start: 100%;
161
+ }
162
+
163
+ &[data-expanded] {
164
+ transform: translateX(var(--toast-swipe-movement-x))
165
+ translateY(
166
+ calc(
167
+ var(--toast-swipe-movement-y) + var(--toast-offset-y) * -1 + var(--toast-index) *
168
+ var(--toast-gap) * -1
169
+ )
170
+ )
171
+ scale(1);
172
+ height: var(--toast-height);
173
+ }
174
+
175
+ &[data-starting-style],
176
+ &[data-ending-style] {
177
+ transform: translateY(150%);
178
+ opacity: 0;
179
+ }
180
+ `,
181
+ rootTop: css$1`
182
+ inset-block: 0 auto;
183
+ transform-origin: top center;
184
+ transform: translateX(var(--toast-swipe-movement-x))
185
+ translateY(
186
+ calc(
187
+ var(--toast-swipe-movement-y) + (var(--toast-index) * var(--toast-peek)) +
188
+ (var(--toast-shrink) * var(--toast-collapsed-height))
189
+ )
190
+ )
191
+ scale(var(--toast-scale));
192
+
193
+ &::after {
194
+ inset-block-end: 100%;
195
+ }
196
+
197
+ &[data-expanded] {
198
+ transform: translateX(var(--toast-swipe-movement-x))
199
+ translateY(
200
+ calc(
201
+ var(--toast-swipe-movement-y) + var(--toast-offset-y) + var(--toast-index) *
202
+ var(--toast-gap)
203
+ )
204
+ )
205
+ scale(1);
206
+ height: var(--toast-height);
207
+ }
208
+
209
+ &[data-starting-style],
210
+ &[data-ending-style] {
211
+ transform: translateY(-150%);
212
+ opacity: 0;
213
+ }
214
+ `,
215
+ title: css$1`
216
+ margin: 0;
217
+
218
+ font-size: 14px;
219
+ font-weight: 500;
220
+ line-height: 1.5;
221
+ color: ${cssVar$1.colorText};
222
+ `,
223
+ toastBody: css$1`
224
+ display: flex;
225
+ gap: 12px;
226
+ align-items: flex-start;
227
+ `,
228
+ viewport: css$1`
229
+ position: fixed;
230
+ z-index: 1100;
231
+
232
+ width: 360px;
233
+ max-width: calc(100vw - 32px);
234
+
235
+ outline: 0;
236
+
237
+ @media (width <= 480px) {
238
+ width: calc(100vw - 32px);
239
+ }
240
+ `,
241
+ viewportBottom: css$1`
242
+ inset-block-end: 16px;
243
+ inset-inline-start: 50%;
244
+ transform: translateX(-50%);
245
+ `,
246
+ viewportBottomLeft: css$1`
247
+ inset-block-end: 16px;
248
+ inset-inline-start: 16px;
249
+ `,
250
+ viewportBottomRight: css$1`
251
+ inset-block-end: 16px;
252
+ inset-inline-end: 16px;
253
+ `,
254
+ viewportTop: css$1`
255
+ inset-block-start: 16px;
256
+ inset-inline-start: 50%;
257
+ transform: translateX(-50%);
258
+ `,
259
+ viewportTopLeft: css$1`
260
+ inset-block-start: 16px;
261
+ inset-inline-start: 16px;
262
+ `,
263
+ viewportTopRight: css$1`
264
+ inset-block-start: 16px;
265
+ inset-inline-end: 16px;
266
+ `
267
+ }));
268
+ const viewportVariants = cva(styles.viewport, {
269
+ defaultVariants: { position: "bottom-right" },
270
+ variants: { position: {
271
+ "bottom": styles.viewportBottom,
272
+ "bottom-left": styles.viewportBottomLeft,
273
+ "bottom-right": styles.viewportBottomRight,
274
+ "top": styles.viewportTop,
275
+ "top-left": styles.viewportTopLeft,
276
+ "top-right": styles.viewportTopRight
277
+ } }
278
+ });
279
+ const rootVariants = cva(styles.root, {
280
+ defaultVariants: { position: "bottom-right" },
281
+ variants: { position: {
282
+ "bottom": styles.rootBottom,
283
+ "bottom-left": styles.rootBottom,
284
+ "bottom-right": styles.rootBottom,
285
+ "top": styles.rootTop,
286
+ "top-left": styles.rootTop,
287
+ "top-right": styles.rootTop
288
+ } }
289
+ });
290
+
291
+ //#endregion
292
+ export { rootVariants, styles, viewportVariants };
293
+ //# sourceMappingURL=style.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"style.mjs","names":["cssVar"],"sources":["../../src/Toast/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\nimport { cva } from 'class-variance-authority';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n action: css`\n cursor: pointer;\n\n display: inline-flex;\n align-items: center;\n justify-content: center;\n\n height: 28px;\n margin-block-start: 8px;\n padding-inline: 12px;\n border: none;\n border-radius: ${cssVar.borderRadiusSM};\n\n font-size: 12px;\n font-weight: 500;\n line-height: 1;\n color: ${cssVar.colorTextLightSolid};\n\n background: ${cssVar.colorPrimary};\n\n transition: background 0.2s;\n\n &:hover {\n background: ${cssVar.colorPrimaryHover};\n }\n\n &:active {\n background: ${cssVar.colorPrimaryActive};\n }\n\n &:focus-visible {\n outline: 2px solid ${cssVar.colorPrimaryBorder};\n outline-offset: 1px;\n }\n `,\n\n close: css`\n cursor: pointer;\n\n position: absolute;\n inset-block-start: 8px;\n inset-inline-end: 8px;\n\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 20px;\n height: 20px;\n padding: 0;\n border: none;\n border-radius: ${cssVar.borderRadiusSM};\n\n color: ${cssVar.colorTextTertiary};\n\n background: transparent;\n\n transition: all 0.2s;\n\n &:hover {\n color: ${cssVar.colorText};\n background: ${cssVar.colorFillSecondary};\n }\n `,\n\n content: css`\n overflow: hidden;\n transition: opacity 0.2s;\n\n &[data-behind] {\n pointer-events: none;\n opacity: 0;\n }\n\n &[data-expanded] {\n pointer-events: auto;\n opacity: 1;\n }\n `,\n\n description: css`\n margin: 0;\n font-size: 13px;\n line-height: 1.5;\n color: ${cssVar.colorTextSecondary};\n `,\n\n icon: css`\n display: flex;\n flex-shrink: 0;\n align-items: center;\n justify-content: center;\n `,\n\n root: css`\n --toast-gap: 12px;\n --toast-peek: 12px;\n --toast-scale: calc(1 - var(--toast-index) * 0.05);\n --toast-shrink: calc(1 - var(--toast-scale));\n --toast-collapsed-height: var(--toast-frontmost-height, var(--toast-height));\n\n cursor: default;\n user-select: none;\n\n position: absolute;\n z-index: calc(1000 - var(--toast-index));\n inset-inline: 0;\n\n box-sizing: border-box;\n width: 100%;\n height: var(--toast-collapsed-height);\n padding-block: 12px;\n padding-inline: 16px;\n padding-inline-end: 32px;\n border-radius: ${cssVar.borderRadiusLG};\n\n color: ${cssVar.colorText};\n\n background: ${cssVar.colorBgElevated};\n background-clip: padding-box;\n box-shadow:\n 0 0 15px 0 #00000008,\n 0 2px 30px 0 #00000014,\n 0 0 0 1px ${cssVar.colorBorder} inset;\n\n transition:\n transform 0.4s cubic-bezier(0.22, 1, 0.36, 1),\n opacity 0.4s,\n height 0.15s;\n\n /* Fill gap between stacked toasts to prevent hover flicker */\n &::after {\n content: '';\n position: absolute;\n inset-inline: 0;\n height: calc(var(--toast-gap) + var(--toast-peek) + 8px);\n }\n\n &[data-limited] {\n opacity: 0;\n }\n\n &[data-swiping] {\n transition: none;\n }\n `,\n\n // Bottom positions - stack upward\n rootBottom: css`\n inset-block: auto 0;\n transform-origin: bottom center;\n transform: translateX(var(--toast-swipe-movement-x))\n translateY(\n calc(\n var(--toast-swipe-movement-y) - (var(--toast-index) * var(--toast-peek)) -\n (var(--toast-shrink) * var(--toast-collapsed-height))\n )\n )\n scale(var(--toast-scale));\n\n &::after {\n inset-block-start: 100%;\n }\n\n &[data-expanded] {\n transform: translateX(var(--toast-swipe-movement-x))\n translateY(\n calc(\n var(--toast-swipe-movement-y) + var(--toast-offset-y) * -1 + var(--toast-index) *\n var(--toast-gap) * -1\n )\n )\n scale(1);\n height: var(--toast-height);\n }\n\n &[data-starting-style],\n &[data-ending-style] {\n transform: translateY(150%);\n opacity: 0;\n }\n `,\n\n // Top positions - stack downward\n rootTop: css`\n inset-block: 0 auto;\n transform-origin: top center;\n transform: translateX(var(--toast-swipe-movement-x))\n translateY(\n calc(\n var(--toast-swipe-movement-y) + (var(--toast-index) * var(--toast-peek)) +\n (var(--toast-shrink) * var(--toast-collapsed-height))\n )\n )\n scale(var(--toast-scale));\n\n &::after {\n inset-block-end: 100%;\n }\n\n &[data-expanded] {\n transform: translateX(var(--toast-swipe-movement-x))\n translateY(\n calc(\n var(--toast-swipe-movement-y) + var(--toast-offset-y) + var(--toast-index) *\n var(--toast-gap)\n )\n )\n scale(1);\n height: var(--toast-height);\n }\n\n &[data-starting-style],\n &[data-ending-style] {\n transform: translateY(-150%);\n opacity: 0;\n }\n `,\n\n title: css`\n margin: 0;\n\n font-size: 14px;\n font-weight: 500;\n line-height: 1.5;\n color: ${cssVar.colorText};\n `,\n\n toastBody: css`\n display: flex;\n gap: 12px;\n align-items: flex-start;\n `,\n\n viewport: css`\n position: fixed;\n z-index: 1100;\n\n width: 360px;\n max-width: calc(100vw - 32px);\n\n outline: 0;\n\n @media (width <= 480px) {\n width: calc(100vw - 32px);\n }\n `,\n\n viewportBottom: css`\n inset-block-end: 16px;\n inset-inline-start: 50%;\n transform: translateX(-50%);\n `,\n\n viewportBottomLeft: css`\n inset-block-end: 16px;\n inset-inline-start: 16px;\n `,\n\n viewportBottomRight: css`\n inset-block-end: 16px;\n inset-inline-end: 16px;\n `,\n\n viewportTop: css`\n inset-block-start: 16px;\n inset-inline-start: 50%;\n transform: translateX(-50%);\n `,\n\n viewportTopLeft: css`\n inset-block-start: 16px;\n inset-inline-start: 16px;\n `,\n\n viewportTopRight: css`\n inset-block-start: 16px;\n inset-inline-end: 16px;\n `,\n}));\n\nexport const viewportVariants = cva(styles.viewport, {\n defaultVariants: {\n position: 'bottom-right',\n },\n variants: {\n position: {\n 'bottom': styles.viewportBottom,\n 'bottom-left': styles.viewportBottomLeft,\n 'bottom-right': styles.viewportBottomRight,\n 'top': styles.viewportTop,\n 'top-left': styles.viewportTopLeft,\n 'top-right': styles.viewportTopRight,\n },\n },\n});\n\nexport const rootVariants = cva(styles.root, {\n defaultVariants: {\n position: 'bottom-right',\n },\n variants: {\n position: {\n 'bottom': styles.rootBottom,\n 'bottom-left': styles.rootBottom,\n 'bottom-right': styles.rootBottom,\n 'top': styles.rootTop,\n 'top-left': styles.rootTop,\n 'top-right': styles.rootTop,\n },\n },\n});\n"],"mappings":";;;;AAGA,MAAa,SAAS,oBAAoB,EAAE,YAAK,wBAAc;CAC7D,QAAQ,KAAG;;;;;;;;;;;qBAWQA,SAAO,eAAe;;;;;aAK9BA,SAAO,oBAAoB;;kBAEtBA,SAAO,aAAa;;;;;oBAKlBA,SAAO,kBAAkB;;;;oBAIzBA,SAAO,mBAAmB;;;;2BAInBA,SAAO,mBAAmB;;;;CAKnD,OAAO,KAAG;;;;;;;;;;;;;;;qBAeSA,SAAO,eAAe;;aAE9BA,SAAO,kBAAkB;;;;;;;eAOvBA,SAAO,UAAU;oBACZA,SAAO,mBAAmB;;;CAI5C,SAAS,KAAG;;;;;;;;;;;;;;CAeZ,aAAa,KAAG;;;;aAILA,SAAO,mBAAmB;;CAGrC,MAAM,KAAG;;;;;;CAOT,MAAM,KAAG;;;;;;;;;;;;;;;;;;;;qBAoBUA,SAAO,eAAe;;aAE9BA,SAAO,UAAU;;kBAEZA,SAAO,gBAAgB;;;;;kBAKvBA,SAAO,YAAY;;;;;;;;;;;;;;;;;;;;;;;CAyBnC,YAAY,KAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoCf,SAAS,KAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCZ,OAAO,KAAG;;;;;;aAMCA,SAAO,UAAU;;CAG5B,WAAW,KAAG;;;;;CAMd,UAAU,KAAG;;;;;;;;;;;;;CAcb,gBAAgB,KAAG;;;;;CAMnB,oBAAoB,KAAG;;;;CAKvB,qBAAqB,KAAG;;;;CAKxB,aAAa,KAAG;;;;;CAMhB,iBAAiB,KAAG;;;;CAKpB,kBAAkB,KAAG;;;;CAItB,EAAE;AAEH,MAAa,mBAAmB,IAAI,OAAO,UAAU;CACnD,iBAAiB,EACf,UAAU,gBACX;CACD,UAAU,EACR,UAAU;EACR,UAAU,OAAO;EACjB,eAAe,OAAO;EACtB,gBAAgB,OAAO;EACvB,OAAO,OAAO;EACd,YAAY,OAAO;EACnB,aAAa,OAAO;EACrB,EACF;CACF,CAAC;AAEF,MAAa,eAAe,IAAI,OAAO,MAAM;CAC3C,iBAAiB,EACf,UAAU,gBACX;CACD,UAAU,EACR,UAAU;EACR,UAAU,OAAO;EACjB,eAAe,OAAO;EACtB,gBAAgB,OAAO;EACvB,OAAO,OAAO;EACd,YAAY,OAAO;EACnB,aAAa,OAAO;EACrB,EACF;CACF,CAAC"}