@bigbinary/neeto-atoms 1.0.92 → 1.0.94

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 (30) hide show
  1. package/dist/{Toastr-DP7naHnr.js → Toastr-Cka6pudu.js} +116 -58
  2. package/dist/Toastr-Cka6pudu.js.map +1 -0
  3. package/dist/{TranslationProvider-BvRvUsPS.js → TranslationProvider-CtJI6HJ4.js} +5 -1
  4. package/dist/{TranslationProvider-BvRvUsPS.js.map → TranslationProvider-CtJI6HJ4.js.map} +1 -1
  5. package/dist/cjs/{Toastr-CgRy7bg-.js → Toastr-E0yLh_MW.js} +115 -57
  6. package/dist/cjs/Toastr-E0yLh_MW.js.map +1 -0
  7. package/dist/cjs/{TranslationProvider-Dh5_Fzzk.js → TranslationProvider-BgCNBYs8.js} +5 -1
  8. package/dist/cjs/{TranslationProvider-Dh5_Fzzk.js.map → TranslationProvider-BgCNBYs8.js.map} +1 -1
  9. package/dist/cjs/components/Toastr.js +3 -2
  10. package/dist/cjs/components/Toastr.js.map +1 -1
  11. package/dist/cjs/components/TranslationProvider.js +1 -1
  12. package/dist/cjs/components/index.js +2 -2
  13. package/dist/cjs/index.js +2 -2
  14. package/dist/cjs/primitives/Sidebar.js +11 -1
  15. package/dist/cjs/primitives/Sidebar.js.map +1 -1
  16. package/dist/components/Toastr/Toastr.d.ts +2 -0
  17. package/dist/components/Toastr/ToastrBody.d.ts +4 -2
  18. package/dist/components/Toastr/utils.d.ts +2 -1
  19. package/dist/components/Toastr.js +3 -2
  20. package/dist/components/Toastr.js.map +1 -1
  21. package/dist/components/TranslationProvider.js +1 -1
  22. package/dist/components/index.js +2 -2
  23. package/dist/index.js +2 -2
  24. package/dist/primitives/Sidebar.d.ts +1 -1
  25. package/dist/primitives/Sidebar.js +11 -1
  26. package/dist/primitives/Sidebar.js.map +1 -1
  27. package/dist/translations/index.d.ts +4 -0
  28. package/package.json +1 -1
  29. package/dist/Toastr-DP7naHnr.js.map +0 -1
  30. package/dist/cjs/Toastr-CgRy7bg-.js.map +0 -1
@@ -1,11 +1,86 @@
1
- import { jsxs, jsx } from 'react/jsx-runtime';
1
+ import { jsxs, jsx, Fragment } from 'react/jsx-runtime';
2
2
  import { O as OctagonX, C as CircleCheck, t as toast } from './index-CDo_esrR.js';
3
+ import { isValidElement, useState, useRef, useEffect } from 'react';
4
+ import { useTranslation } from 'react-i18next';
3
5
  import { c as cn } from './utils-BJnb9o5c.js';
6
+ import i18n from 'i18next';
4
7
  import { T as TriangleAlert } from './triangle-alert-C434HydH.js';
5
8
  import { I as Info } from './info-BlwkmMZr.js';
6
9
  import { X } from './x-_o2T3n6D.js';
7
- import i18n from 'i18next';
8
- import { isValidElement } from 'react';
10
+
11
+ const activeToasts = /* @__PURE__ */ new Set();
12
+ function toastKey(type, message, buttonLabel) {
13
+ if (typeof message !== "string") return null;
14
+ return `${type}::${message}::${buttonLabel ?? ""}`;
15
+ }
16
+ function getContentDir() {
17
+ if (typeof document === "undefined") return "ltr";
18
+ return document.documentElement.getAttribute("dir") ?? document.body.getAttribute("dir") ?? "ltr";
19
+ }
20
+ function resolveMessage(message) {
21
+ if (typeof message === "string") return message;
22
+ if (isValidElement(message)) return message;
23
+ if (Array.isArray(message)) return message;
24
+ if (message && typeof message === "object") {
25
+ const obj = message;
26
+ if (obj.customMessage) return obj.customMessage;
27
+ if (obj.notice) return obj.notice;
28
+ if (obj.noticeCode) return i18n.t(obj.noticeCode);
29
+ }
30
+ return String(message);
31
+ }
32
+ function resolveErrorMessage(errorObject) {
33
+ if (typeof errorObject === "string") return errorObject;
34
+ if (errorObject && typeof errorObject === "object") {
35
+ const axiosLike = errorObject;
36
+ if (axiosLike.response?.data) {
37
+ const data = axiosLike.response.data;
38
+ if (data.customMessage) return String(data.customMessage);
39
+ if (data.error) return String(data.error);
40
+ if (Array.isArray(data.errors)) return data.errors.join("\n");
41
+ if (data.noticeCode) return String(data.noticeCode);
42
+ }
43
+ if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;
44
+ if (errorObject instanceof Error) return errorObject.message;
45
+ return resolveMessage(errorObject);
46
+ }
47
+ return "Something went wrong.";
48
+ }
49
+ async function copyToClipboard(text) {
50
+ try {
51
+ await navigator.clipboard.writeText(text);
52
+ return true;
53
+ } catch {
54
+ try {
55
+ const textArea = document.createElement("textarea");
56
+ textArea.value = text;
57
+ textArea.style.position = "fixed";
58
+ textArea.style.opacity = "0";
59
+ document.body.appendChild(textArea);
60
+ textArea.focus();
61
+ textArea.select();
62
+ const isCopied = document.execCommand("copy");
63
+ textArea.remove();
64
+ return isCopied;
65
+ } catch {
66
+ return false;
67
+ }
68
+ }
69
+ }
70
+ function parseConfig(args) {
71
+ if (args.length === 0) return {};
72
+ const first = args[0];
73
+ if (typeof first === "object" && first !== null && !Array.isArray(first)) {
74
+ return first;
75
+ }
76
+ const [buttonLabel, onClick, customConfig, showIcon] = args;
77
+ return {
78
+ ...buttonLabel ? { buttonLabel } : {},
79
+ ...onClick ? { onClick } : {},
80
+ ...showIcon !== void 0 ? { showIcon } : {},
81
+ ...customConfig ?? {}
82
+ };
83
+ }
9
84
 
10
85
  const ICONS = {
11
86
  success: CircleCheck,
@@ -19,9 +94,11 @@ const VARIANT_CLASSES = {
19
94
  warning: "bg-warning-solid text-warning-solid-foreground border-warning-solid/30",
20
95
  info: "bg-info-solid text-info-solid-foreground border-info-solid/30"
21
96
  };
97
+ const COPIED_FEEDBACK_DURATION_MS = 2e3;
22
98
  const ToastrBody = ({
23
99
  type,
24
100
  message,
101
+ copyableMessage,
25
102
  showIcon = true,
26
103
  dismissible = true,
27
104
  buttonLabel,
@@ -29,6 +106,21 @@ const ToastrBody = ({
29
106
  onDismiss
30
107
  }) => {
31
108
  const Icon = ICONS[type];
109
+ const { t } = useTranslation();
110
+ const [isCopied, setIsCopied] = useState(false);
111
+ const copiedTimeoutRef = useRef(
112
+ void 0
113
+ );
114
+ useEffect(() => () => clearTimeout(copiedTimeoutRef.current), []);
115
+ const handleCopy = async () => {
116
+ if (!copyableMessage || !await copyToClipboard(copyableMessage)) return;
117
+ setIsCopied(true);
118
+ clearTimeout(copiedTimeoutRef.current);
119
+ copiedTimeoutRef.current = setTimeout(
120
+ () => setIsCopied(false),
121
+ COPIED_FEEDBACK_DURATION_MS
122
+ );
123
+ };
32
124
  return /* @__PURE__ */ jsxs(
33
125
  "div",
34
126
  {
@@ -40,7 +132,22 @@ const ToastrBody = ({
40
132
  ),
41
133
  children: [
42
134
  showIcon && /* @__PURE__ */ jsx(Icon, { "aria-hidden": true, className: "size-4 shrink-0" }),
43
- /* @__PURE__ */ jsx("span", { className: "flex-1", children: message }),
135
+ /* @__PURE__ */ jsxs("span", { className: "flex-1", children: [
136
+ message,
137
+ copyableMessage && /* @__PURE__ */ jsxs(Fragment, { children: [
138
+ " ",
139
+ /* @__PURE__ */ jsx(
140
+ "button",
141
+ {
142
+ type: "button",
143
+ "data-testid": `toastr-${type}-copy-button`,
144
+ className: "text-xs italic underline-offset-2 opacity-80 transition-opacity hover:underline hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
145
+ onClick: handleCopy,
146
+ children: isCopied ? t("neetoatoms.toastr.copied", "Copied!") : t("neetoatoms.toastr.copyMessage", "Copy this error message")
147
+ }
148
+ )
149
+ ] })
150
+ ] }),
44
151
  buttonLabel && /* @__PURE__ */ jsx(
45
152
  "button",
46
153
  {
@@ -67,65 +174,13 @@ const ToastrBody = ({
67
174
  );
68
175
  };
69
176
 
70
- const activeToasts = /* @__PURE__ */ new Set();
71
- function toastKey(type, message, buttonLabel) {
72
- if (typeof message !== "string") return null;
73
- return `${type}::${message}::${buttonLabel ?? ""}`;
74
- }
75
- function getContentDir() {
76
- if (typeof document === "undefined") return "ltr";
77
- return document.documentElement.getAttribute("dir") ?? document.body.getAttribute("dir") ?? "ltr";
78
- }
79
- function resolveMessage(message) {
80
- if (typeof message === "string") return message;
81
- if (isValidElement(message)) return message;
82
- if (Array.isArray(message)) return message;
83
- if (message && typeof message === "object") {
84
- const obj = message;
85
- if (obj.customMessage) return obj.customMessage;
86
- if (obj.notice) return obj.notice;
87
- if (obj.noticeCode) return i18n.t(obj.noticeCode);
88
- }
89
- return String(message);
90
- }
91
- function resolveErrorMessage(errorObject) {
92
- if (typeof errorObject === "string") return errorObject;
93
- if (errorObject && typeof errorObject === "object") {
94
- const axiosLike = errorObject;
95
- if (axiosLike.response?.data) {
96
- const data = axiosLike.response.data;
97
- if (data.customMessage) return String(data.customMessage);
98
- if (data.error) return String(data.error);
99
- if (Array.isArray(data.errors)) return data.errors.join("\n");
100
- if (data.noticeCode) return String(data.noticeCode);
101
- }
102
- if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;
103
- if (errorObject instanceof Error) return errorObject.message;
104
- return resolveMessage(errorObject);
105
- }
106
- return "Something went wrong.";
107
- }
108
- function parseConfig(args) {
109
- if (args.length === 0) return {};
110
- const first = args[0];
111
- if (typeof first === "object" && first !== null && !Array.isArray(first)) {
112
- return first;
113
- }
114
- const [buttonLabel, onClick, customConfig, showIcon] = args;
115
- return {
116
- ...buttonLabel ? { buttonLabel } : {},
117
- ...onClick ? { onClick } : {},
118
- ...showIcon !== void 0 ? { showIcon } : {},
119
- ...customConfig ?? {}
120
- };
121
- }
122
-
123
177
  function showToast(type, message, config) {
124
178
  const {
125
179
  buttonLabel,
126
180
  onClick,
127
181
  showIcon,
128
182
  dismissible = true,
183
+ showCopyButton = true,
129
184
  onDismiss: userOnDismiss,
130
185
  onAutoClose: userOnAutoClose,
131
186
  ...restConfig
@@ -134,6 +189,7 @@ function showToast(type, message, config) {
134
189
  if (key !== null && activeToasts.has(key)) return void 0;
135
190
  if (key !== null) activeToasts.add(key);
136
191
  const options = {
192
+ ...type === "error" && { duration: Infinity },
137
193
  ...restConfig,
138
194
  position: getContentDir() === "rtl" ? "bottom-right" : "bottom-left",
139
195
  dismissible,
@@ -146,11 +202,13 @@ function showToast(type, message, config) {
146
202
  userOnAutoClose?.(t);
147
203
  }
148
204
  };
205
+ const copyableMessage = showCopyButton && type === "error" && typeof message === "string" ? message : void 0;
149
206
  return toast.custom(
150
207
  (id) => /* @__PURE__ */ jsx(
151
208
  ToastrBody,
152
209
  {
153
210
  buttonLabel,
211
+ copyableMessage,
154
212
  dismissible,
155
213
  message,
156
214
  showIcon,
@@ -188,4 +246,4 @@ const Toastr = {
188
246
  };
189
247
 
190
248
  export { Toastr as T };
191
- //# sourceMappingURL=Toastr-DP7naHnr.js.map
249
+ //# sourceMappingURL=Toastr-Cka6pudu.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toastr-Cka6pudu.js","sources":["../src/components/Toastr/utils.ts","../src/components/Toastr/ToastrBody.tsx","../src/components/Toastr/Toastr.tsx"],"sourcesContent":["import i18next from \"i18next\";\nimport { isValidElement, type ReactNode } from \"react\";\n\nimport type { ToastrConfig, ToastrErrorInput, ToastrMessage } from \"./Toastr\";\n\nconst activeToasts = new Set<string>();\n\nfunction toastKey(\n type: string,\n message: ReactNode,\n buttonLabel?: string\n): string | null {\n if (typeof message !== \"string\") return null;\n return `${type}::${message}::${buttonLabel ?? \"\"}`;\n}\n\nfunction getContentDir(): \"ltr\" | \"rtl\" {\n if (typeof document === \"undefined\") return \"ltr\";\n return (\n (document.documentElement.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n (document.body.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n \"ltr\"\n );\n}\n\nfunction resolveMessage(message: ToastrMessage): ReactNode {\n if (typeof message === \"string\") return message;\n if (isValidElement(message)) return message;\n // Arrays of ReactNodes (e.g. [<a/>, \" \", <b/>]) render natively via {message}.\n if (Array.isArray(message)) return message;\n if (message && typeof message === \"object\") {\n const obj = message as {\n noticeCode?: string;\n customMessage?: string;\n notice?: string;\n };\n if (obj.customMessage) return obj.customMessage;\n if (obj.notice) return obj.notice;\n if (obj.noticeCode) return i18next.t(obj.noticeCode);\n }\n return String(message);\n}\n\nfunction resolveErrorMessage(errorObject: ToastrErrorInput): ReactNode {\n if (typeof errorObject === \"string\") return errorObject;\n\n if (errorObject && typeof errorObject === \"object\") {\n // Axios-style error\n const axiosLike = errorObject as {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n };\n\n if (axiosLike.response?.data) {\n const data = axiosLike.response.data;\n if (data.customMessage) return String(data.customMessage);\n if (data.error) return String(data.error);\n if (Array.isArray(data.errors)) return data.errors.join(\"\\n\");\n if (data.noticeCode) return String(data.noticeCode);\n }\n\n if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;\n\n // Native Error\n if (errorObject instanceof Error) return errorObject.message;\n\n // ToastrMessage (string, React element, array, or notice-shape object)\n return resolveMessage(errorObject as ToastrMessage);\n }\n\n return \"Something went wrong.\";\n}\n\nasync function copyToClipboard(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n\n return true;\n } catch {\n // Clipboard API is unavailable in insecure contexts; fall back to execCommand.\n try {\n const textArea = document.createElement(\"textarea\");\n textArea.value = text;\n textArea.style.position = \"fixed\";\n textArea.style.opacity = \"0\";\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n const isCopied = document.execCommand(\"copy\");\n textArea.remove();\n\n return isCopied;\n } catch {\n return false;\n }\n }\n}\n\nfunction parseConfig(args: unknown[]): ToastrConfig {\n if (args.length === 0) return {};\n\n const first = args[0];\n if (typeof first === \"object\" && first !== null && !Array.isArray(first)) {\n return first as ToastrConfig;\n }\n\n // Legacy positional args: buttonLabel, onClick, customConfig, showIcon\n const [buttonLabel, onClick, customConfig, showIcon] = args as [\n string?,\n (() => void)?,\n Record<string, unknown>?,\n boolean?,\n ];\n\n return {\n ...(buttonLabel ? { buttonLabel } : {}),\n ...(onClick ? { onClick } : {}),\n ...(showIcon !== undefined ? { showIcon } : {}),\n ...(customConfig ?? {}),\n };\n}\n\nexport {\n activeToasts,\n copyToClipboard,\n getContentDir,\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n toastKey,\n};\n","import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n CircleCheckIcon,\n InfoIcon,\n OctagonXIcon,\n TriangleAlertIcon,\n XIcon,\n type LucideIcon,\n} from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { copyToClipboard } from \"./utils\";\n\ntype ToastrType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nconst ICONS: Record<ToastrType, LucideIcon> = {\n success: CircleCheckIcon,\n info: InfoIcon,\n warning: TriangleAlertIcon,\n error: OctagonXIcon,\n};\n\nconst VARIANT_CLASSES: Record<ToastrType, string> = {\n success:\n \"bg-success-solid text-success-solid-foreground border-success-solid/30\",\n error: \"bg-error-solid text-error-solid-foreground border-error-solid/30\",\n warning:\n \"bg-warning-solid text-warning-solid-foreground border-warning-solid/30\",\n info: \"bg-info-solid text-info-solid-foreground border-info-solid/30\",\n};\n\nexport interface ToastrBodyProps {\n type: ToastrType;\n message: ReactNode;\n /** Plain-text version of the message; renders a copy-to-clipboard affordance when set. */\n copyableMessage?: string;\n showIcon?: boolean;\n dismissible?: boolean;\n buttonLabel?: string;\n onAction?: () => void;\n onDismiss: () => void;\n}\n\nconst COPIED_FEEDBACK_DURATION_MS = 2000;\n\nconst ToastrBody = ({\n type,\n message,\n copyableMessage,\n showIcon = true,\n dismissible = true,\n buttonLabel,\n onAction,\n onDismiss,\n}: ToastrBodyProps) => {\n const Icon = ICONS[type];\n const { t } = useTranslation();\n const [isCopied, setIsCopied] = useState(false);\n const copiedTimeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined\n );\n\n useEffect(() => () => clearTimeout(copiedTimeoutRef.current), []);\n\n const handleCopy = async () => {\n if (!copyableMessage || !(await copyToClipboard(copyableMessage))) return;\n\n setIsCopied(true);\n clearTimeout(copiedTimeoutRef.current);\n copiedTimeoutRef.current = setTimeout(\n () => setIsCopied(false),\n COPIED_FEEDBACK_DURATION_MS\n );\n };\n\n return (\n <div\n role={type === \"error\" || type === \"warning\" ? \"alert\" : \"status\"}\n data-testid={`toastr-${type}-container`}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md border px-4 py-3 text-sm shadow-lg\",\n VARIANT_CLASSES[type]\n )}\n >\n {showIcon && <Icon aria-hidden className=\"size-4 shrink-0\" />}\n <span className=\"flex-1\">\n {message}\n {copyableMessage && (\n <>\n {\" \"}\n <button\n type=\"button\"\n data-testid={`toastr-${type}-copy-button`}\n className=\"text-xs italic underline-offset-2 opacity-80 transition-opacity hover:underline hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n onClick={handleCopy}\n >\n {isCopied\n ? t(\"neetoatoms.toastr.copied\", \"Copied!\")\n : t(\"neetoatoms.toastr.copyMessage\", \"Copy this error message\")}\n </button>\n </>\n )}\n </span>\n {buttonLabel && (\n <button\n type=\"button\"\n onClick={onAction}\n data-testid={`toastr-${type}-button`}\n className=\"shrink-0 text-sm font-medium underline-offset-2 hover:underline\"\n >\n {buttonLabel}\n </button>\n )}\n {dismissible && (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={onDismiss}\n data-testid=\"toastr-close-button\"\n className=\"shrink-0 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n >\n <XIcon aria-hidden className=\"size-4\" />\n </button>\n )}\n </div>\n );\n};\n\nexport { ToastrBody };\n","import type { ReactNode } from \"react\";\nimport { toast } from \"sonner\";\n\nimport { ToastrBody } from \"./ToastrBody\";\nimport {\n activeToasts,\n getContentDir,\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n toastKey,\n} from \"./utils\";\n\nexport interface ToastrConfig {\n /** Label for an action button inside the toast. */\n buttonLabel?: string;\n /** Callback when the action button is clicked. */\n onClick?: () => void;\n /** Whether to show the type icon in the toast. */\n showIcon?: boolean;\n /** Whether the toast can be dismissed (shows X button + enables swipe). Defaults to true. */\n dismissible?: boolean;\n /** Whether to show the copy-to-clipboard affordance in error toasts. Defaults to true. */\n showCopyButton?: boolean;\n /** Additional sonner toast options (duration, position, etc.). */\n [key: string]: unknown;\n}\n\nexport type ToastrMessage =\n | ReactNode\n | { noticeCode?: string; customMessage?: string; notice?: string };\n\nexport type ToastrErrorInput =\n | string\n | Error\n | {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n }\n | ToastrMessage;\n\ntype SonnerType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nfunction showToast(\n type: SonnerType,\n message: ReactNode,\n config?: ToastrConfig\n): string | number | undefined {\n const {\n buttonLabel,\n onClick,\n showIcon,\n dismissible = true,\n showCopyButton = true,\n onDismiss: userOnDismiss,\n onAutoClose: userOnAutoClose,\n ...restConfig\n } = config ?? {};\n\n const key = toastKey(type, message, buttonLabel);\n\n if (key !== null && activeToasts.has(key)) return undefined;\n if (key !== null) activeToasts.add(key);\n\n // Error toasts stay until dismissed so the message can be read and copied.\n const options: Record<string, unknown> = {\n ...(type === \"error\" && { duration: Infinity }),\n ...restConfig,\n position: getContentDir() === \"rtl\" ? \"bottom-right\" : \"bottom-left\",\n dismissible,\n onDismiss: (t: unknown) => {\n if (key !== null) activeToasts.delete(key);\n (userOnDismiss as ((t: unknown) => void) | undefined)?.(t);\n },\n onAutoClose: (t: unknown) => {\n if (key !== null) activeToasts.delete(key);\n (userOnAutoClose as ((t: unknown) => void) | undefined)?.(t);\n },\n };\n\n const copyableMessage =\n showCopyButton && type === \"error\" && typeof message === \"string\"\n ? message\n : undefined;\n\n return toast.custom(\n id => (\n <ToastrBody\n buttonLabel={buttonLabel}\n copyableMessage={copyableMessage}\n dismissible={dismissible}\n message={message}\n showIcon={showIcon}\n type={type}\n onAction={() => {\n try {\n onClick?.();\n } finally {\n toast.dismiss(id);\n }\n }}\n onDismiss={() => toast.dismiss(id)}\n />\n ),\n options\n );\n}\n\nconst Toastr = {\n success(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"success\", resolveMessage(message), parseConfig(args));\n },\n\n info(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n show(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n warning(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"warning\", resolveMessage(message), parseConfig(args));\n },\n\n error(errorObject: ToastrErrorInput, ...args: unknown[]) {\n const msg = resolveErrorMessage(errorObject);\n return showToast(\"error\", msg, parseConfig(args));\n },\n};\n\nexport { Toastr };\n"],"names":["i18next","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","XIcon"],"mappings":"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"}
@@ -61,6 +61,10 @@ var neetoatoms = {
61
61
  command: {
62
62
  title: "Command Palette",
63
63
  description: "Search for a command to run..."
64
+ },
65
+ toastr: {
66
+ copyMessage: "Copy this error message",
67
+ copied: "Copied!"
64
68
  }
65
69
  };
66
70
  var enTranslations = {
@@ -96,4 +100,4 @@ const TranslationProvider = ({
96
100
  TranslationProvider.displayName = "TranslationProvider";
97
101
 
98
102
  export { TranslationProvider as T, resources as r };
99
- //# sourceMappingURL=TranslationProvider-BvRvUsPS.js.map
103
+ //# sourceMappingURL=TranslationProvider-CtJI6HJ4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TranslationProvider-BvRvUsPS.js","sources":["../src/translations/index.ts","../src/components/TranslationProvider/i18n.ts","../src/components/TranslationProvider/TranslationProvider.tsx"],"sourcesContent":["import enTranslations from \"./en.json\";\n\nexport const resources = {\n en: { translation: enTranslations },\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { resources } from \"src/translations\";\n\nexport const initializeI18n = (language = \"en\") => {\n i18n.use(initReactI18next).init({\n resources,\n lng: language,\n fallbackLng: \"en\",\n interpolation: { escapeValue: false },\n });\n\n return i18n;\n};\n","import { useEffect } from \"react\";\n\nimport { I18nextProvider } from \"react-i18next\";\n\nimport { initializeI18n } from \"./i18n\";\nimport type { TranslationProviderProps } from \"./types\";\n\nconst TranslationProvider = ({\n children,\n language = \"en\",\n}: TranslationProviderProps) => {\n const i18n = initializeI18n(language);\n\n useEffect(() => {\n if (i18n.language !== language) {\n i18n.changeLanguage(language);\n }\n }, [language, i18n]);\n\n return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;\n};\n\nTranslationProvider.displayName = \"TranslationProvider\";\n\nexport { TranslationProvider };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,EAAA,EAAI,EAAE,WAAA,EAAa,cAAA;AACrB;;ACCO,MAAM,cAAA,GAAiB,CAAC,QAAA,GAAW,IAAA,KAAS;AACjD,EAAA,IAAA,CAAK,GAAA,CAAI,gBAAgB,CAAA,CAAE,IAAA,CAAK;AAAA,IAC9B,SAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,WAAA,EAAa,IAAA;AAAA,IACb,aAAA,EAAe,EAAE,WAAA,EAAa,KAAA;AAAM,GACrC,CAAA;AAED,EAAA,OAAO,IAAA;AACT,CAAA;;ACPA,MAAM,sBAAsB,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAgC;AAC9B,EAAA,MAAM,IAAA,GAAO,eAAe,QAAQ,CAAA;AAEpC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,MAAA,IAAA,CAAK,eAAe,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA;AAEnB,EAAA,uBAAO,GAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAa,QAAA,EAAS,CAAA;AAChD;AAEA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;;;;"}
1
+ {"version":3,"file":"TranslationProvider-CtJI6HJ4.js","sources":["../src/translations/index.ts","../src/components/TranslationProvider/i18n.ts","../src/components/TranslationProvider/TranslationProvider.tsx"],"sourcesContent":["import enTranslations from \"./en.json\";\n\nexport const resources = {\n en: { translation: enTranslations },\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { resources } from \"src/translations\";\n\nexport const initializeI18n = (language = \"en\") => {\n i18n.use(initReactI18next).init({\n resources,\n lng: language,\n fallbackLng: \"en\",\n interpolation: { escapeValue: false },\n });\n\n return i18n;\n};\n","import { useEffect } from \"react\";\n\nimport { I18nextProvider } from \"react-i18next\";\n\nimport { initializeI18n } from \"./i18n\";\nimport type { TranslationProviderProps } from \"./types\";\n\nconst TranslationProvider = ({\n children,\n language = \"en\",\n}: TranslationProviderProps) => {\n const i18n = initializeI18n(language);\n\n useEffect(() => {\n if (i18n.language !== language) {\n i18n.changeLanguage(language);\n }\n }, [language, i18n]);\n\n return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;\n};\n\nTranslationProvider.displayName = \"TranslationProvider\";\n\nexport { TranslationProvider };\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,EAAA,EAAI,EAAE,WAAA,EAAa,cAAA;AACrB;;ACCO,MAAM,cAAA,GAAiB,CAAC,QAAA,GAAW,IAAA,KAAS;AACjD,EAAA,IAAA,CAAK,GAAA,CAAI,gBAAgB,CAAA,CAAE,IAAA,CAAK;AAAA,IAC9B,SAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,WAAA,EAAa,IAAA;AAAA,IACb,aAAA,EAAe,EAAE,WAAA,EAAa,KAAA;AAAM,GACrC,CAAA;AAED,EAAA,OAAO,IAAA;AACT,CAAA;;ACPA,MAAM,sBAAsB,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAgC;AAC9B,EAAA,MAAM,IAAA,GAAO,eAAe,QAAQ,CAAA;AAEpC,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,MAAA,IAAA,CAAK,eAAe,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA;AAEnB,EAAA,uBAAO,GAAA,CAAC,eAAA,EAAA,EAAgB,IAAA,EAAa,QAAA,EAAS,CAAA;AAChD;AAEA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;;;;"}
@@ -2,17 +2,92 @@
2
2
 
3
3
  var jsxRuntime = require('react/jsx-runtime');
4
4
  var index = require('./index-CPmGpPzg.js');
5
+ var React = require('react');
6
+ var reactI18next = require('react-i18next');
5
7
  var utils = require('./utils-BhM0B89p.js');
8
+ var i18n = require('i18next');
6
9
  var triangleAlert = require('./triangle-alert-CC-cck8p.js');
7
10
  var info = require('./info-DGfDptn1.js');
8
11
  var x = require('./x-Brw3FJst.js');
9
- var i18n = require('i18next');
10
- var React = require('react');
11
12
 
12
13
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
13
14
 
14
15
  var i18n__default = /*#__PURE__*/_interopDefault(i18n);
15
16
 
17
+ const activeToasts = /* @__PURE__ */ new Set();
18
+ function toastKey(type, message, buttonLabel) {
19
+ if (typeof message !== "string") return null;
20
+ return `${type}::${message}::${buttonLabel ?? ""}`;
21
+ }
22
+ function getContentDir() {
23
+ if (typeof document === "undefined") return "ltr";
24
+ return document.documentElement.getAttribute("dir") ?? document.body.getAttribute("dir") ?? "ltr";
25
+ }
26
+ function resolveMessage(message) {
27
+ if (typeof message === "string") return message;
28
+ if (React.isValidElement(message)) return message;
29
+ if (Array.isArray(message)) return message;
30
+ if (message && typeof message === "object") {
31
+ const obj = message;
32
+ if (obj.customMessage) return obj.customMessage;
33
+ if (obj.notice) return obj.notice;
34
+ if (obj.noticeCode) return i18n__default.default.t(obj.noticeCode);
35
+ }
36
+ return String(message);
37
+ }
38
+ function resolveErrorMessage(errorObject) {
39
+ if (typeof errorObject === "string") return errorObject;
40
+ if (errorObject && typeof errorObject === "object") {
41
+ const axiosLike = errorObject;
42
+ if (axiosLike.response?.data) {
43
+ const data = axiosLike.response.data;
44
+ if (data.customMessage) return String(data.customMessage);
45
+ if (data.error) return String(data.error);
46
+ if (Array.isArray(data.errors)) return data.errors.join("\n");
47
+ if (data.noticeCode) return String(data.noticeCode);
48
+ }
49
+ if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;
50
+ if (errorObject instanceof Error) return errorObject.message;
51
+ return resolveMessage(errorObject);
52
+ }
53
+ return "Something went wrong.";
54
+ }
55
+ async function copyToClipboard(text) {
56
+ try {
57
+ await navigator.clipboard.writeText(text);
58
+ return true;
59
+ } catch {
60
+ try {
61
+ const textArea = document.createElement("textarea");
62
+ textArea.value = text;
63
+ textArea.style.position = "fixed";
64
+ textArea.style.opacity = "0";
65
+ document.body.appendChild(textArea);
66
+ textArea.focus();
67
+ textArea.select();
68
+ const isCopied = document.execCommand("copy");
69
+ textArea.remove();
70
+ return isCopied;
71
+ } catch {
72
+ return false;
73
+ }
74
+ }
75
+ }
76
+ function parseConfig(args) {
77
+ if (args.length === 0) return {};
78
+ const first = args[0];
79
+ if (typeof first === "object" && first !== null && !Array.isArray(first)) {
80
+ return first;
81
+ }
82
+ const [buttonLabel, onClick, customConfig, showIcon] = args;
83
+ return {
84
+ ...buttonLabel ? { buttonLabel } : {},
85
+ ...onClick ? { onClick } : {},
86
+ ...showIcon !== void 0 ? { showIcon } : {},
87
+ ...customConfig ?? {}
88
+ };
89
+ }
90
+
16
91
  const ICONS = {
17
92
  success: index.CircleCheck,
18
93
  info: info.Info,
@@ -25,9 +100,11 @@ const VARIANT_CLASSES = {
25
100
  warning: "bg-warning-solid text-warning-solid-foreground border-warning-solid/30",
26
101
  info: "bg-info-solid text-info-solid-foreground border-info-solid/30"
27
102
  };
103
+ const COPIED_FEEDBACK_DURATION_MS = 2e3;
28
104
  const ToastrBody = ({
29
105
  type,
30
106
  message,
107
+ copyableMessage,
31
108
  showIcon = true,
32
109
  dismissible = true,
33
110
  buttonLabel,
@@ -35,6 +112,21 @@ const ToastrBody = ({
35
112
  onDismiss
36
113
  }) => {
37
114
  const Icon = ICONS[type];
115
+ const { t } = reactI18next.useTranslation();
116
+ const [isCopied, setIsCopied] = React.useState(false);
117
+ const copiedTimeoutRef = React.useRef(
118
+ void 0
119
+ );
120
+ React.useEffect(() => () => clearTimeout(copiedTimeoutRef.current), []);
121
+ const handleCopy = async () => {
122
+ if (!copyableMessage || !await copyToClipboard(copyableMessage)) return;
123
+ setIsCopied(true);
124
+ clearTimeout(copiedTimeoutRef.current);
125
+ copiedTimeoutRef.current = setTimeout(
126
+ () => setIsCopied(false),
127
+ COPIED_FEEDBACK_DURATION_MS
128
+ );
129
+ };
38
130
  return /* @__PURE__ */ jsxRuntime.jsxs(
39
131
  "div",
40
132
  {
@@ -46,7 +138,22 @@ const ToastrBody = ({
46
138
  ),
47
139
  children: [
48
140
  showIcon && /* @__PURE__ */ jsxRuntime.jsx(Icon, { "aria-hidden": true, className: "size-4 shrink-0" }),
49
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children: message }),
141
+ /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex-1", children: [
142
+ message,
143
+ copyableMessage && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
144
+ " ",
145
+ /* @__PURE__ */ jsxRuntime.jsx(
146
+ "button",
147
+ {
148
+ type: "button",
149
+ "data-testid": `toastr-${type}-copy-button`,
150
+ className: "text-xs italic underline-offset-2 opacity-80 transition-opacity hover:underline hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2",
151
+ onClick: handleCopy,
152
+ children: isCopied ? t("neetoatoms.toastr.copied", "Copied!") : t("neetoatoms.toastr.copyMessage", "Copy this error message")
153
+ }
154
+ )
155
+ ] })
156
+ ] }),
50
157
  buttonLabel && /* @__PURE__ */ jsxRuntime.jsx(
51
158
  "button",
52
159
  {
@@ -73,65 +180,13 @@ const ToastrBody = ({
73
180
  );
74
181
  };
75
182
 
76
- const activeToasts = /* @__PURE__ */ new Set();
77
- function toastKey(type, message, buttonLabel) {
78
- if (typeof message !== "string") return null;
79
- return `${type}::${message}::${buttonLabel ?? ""}`;
80
- }
81
- function getContentDir() {
82
- if (typeof document === "undefined") return "ltr";
83
- return document.documentElement.getAttribute("dir") ?? document.body.getAttribute("dir") ?? "ltr";
84
- }
85
- function resolveMessage(message) {
86
- if (typeof message === "string") return message;
87
- if (React.isValidElement(message)) return message;
88
- if (Array.isArray(message)) return message;
89
- if (message && typeof message === "object") {
90
- const obj = message;
91
- if (obj.customMessage) return obj.customMessage;
92
- if (obj.notice) return obj.notice;
93
- if (obj.noticeCode) return i18n__default.default.t(obj.noticeCode);
94
- }
95
- return String(message);
96
- }
97
- function resolveErrorMessage(errorObject) {
98
- if (typeof errorObject === "string") return errorObject;
99
- if (errorObject && typeof errorObject === "object") {
100
- const axiosLike = errorObject;
101
- if (axiosLike.response?.data) {
102
- const data = axiosLike.response.data;
103
- if (data.customMessage) return String(data.customMessage);
104
- if (data.error) return String(data.error);
105
- if (Array.isArray(data.errors)) return data.errors.join("\n");
106
- if (data.noticeCode) return String(data.noticeCode);
107
- }
108
- if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;
109
- if (errorObject instanceof Error) return errorObject.message;
110
- return resolveMessage(errorObject);
111
- }
112
- return "Something went wrong.";
113
- }
114
- function parseConfig(args) {
115
- if (args.length === 0) return {};
116
- const first = args[0];
117
- if (typeof first === "object" && first !== null && !Array.isArray(first)) {
118
- return first;
119
- }
120
- const [buttonLabel, onClick, customConfig, showIcon] = args;
121
- return {
122
- ...buttonLabel ? { buttonLabel } : {},
123
- ...onClick ? { onClick } : {},
124
- ...showIcon !== void 0 ? { showIcon } : {},
125
- ...customConfig ?? {}
126
- };
127
- }
128
-
129
183
  function showToast(type, message, config) {
130
184
  const {
131
185
  buttonLabel,
132
186
  onClick,
133
187
  showIcon,
134
188
  dismissible = true,
189
+ showCopyButton = true,
135
190
  onDismiss: userOnDismiss,
136
191
  onAutoClose: userOnAutoClose,
137
192
  ...restConfig
@@ -140,6 +195,7 @@ function showToast(type, message, config) {
140
195
  if (key !== null && activeToasts.has(key)) return void 0;
141
196
  if (key !== null) activeToasts.add(key);
142
197
  const options = {
198
+ ...type === "error" && { duration: Infinity },
143
199
  ...restConfig,
144
200
  position: getContentDir() === "rtl" ? "bottom-right" : "bottom-left",
145
201
  dismissible,
@@ -152,11 +208,13 @@ function showToast(type, message, config) {
152
208
  userOnAutoClose?.(t);
153
209
  }
154
210
  };
211
+ const copyableMessage = showCopyButton && type === "error" && typeof message === "string" ? message : void 0;
155
212
  return index.toast.custom(
156
213
  (id) => /* @__PURE__ */ jsxRuntime.jsx(
157
214
  ToastrBody,
158
215
  {
159
216
  buttonLabel,
217
+ copyableMessage,
160
218
  dismissible,
161
219
  message,
162
220
  showIcon,
@@ -194,4 +252,4 @@ const Toastr = {
194
252
  };
195
253
 
196
254
  exports.Toastr = Toastr;
197
- //# sourceMappingURL=Toastr-CgRy7bg-.js.map
255
+ //# sourceMappingURL=Toastr-E0yLh_MW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toastr-E0yLh_MW.js","sources":["../../src/components/Toastr/utils.ts","../../src/components/Toastr/ToastrBody.tsx","../../src/components/Toastr/Toastr.tsx"],"sourcesContent":["import i18next from \"i18next\";\nimport { isValidElement, type ReactNode } from \"react\";\n\nimport type { ToastrConfig, ToastrErrorInput, ToastrMessage } from \"./Toastr\";\n\nconst activeToasts = new Set<string>();\n\nfunction toastKey(\n type: string,\n message: ReactNode,\n buttonLabel?: string\n): string | null {\n if (typeof message !== \"string\") return null;\n return `${type}::${message}::${buttonLabel ?? \"\"}`;\n}\n\nfunction getContentDir(): \"ltr\" | \"rtl\" {\n if (typeof document === \"undefined\") return \"ltr\";\n return (\n (document.documentElement.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n (document.body.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n \"ltr\"\n );\n}\n\nfunction resolveMessage(message: ToastrMessage): ReactNode {\n if (typeof message === \"string\") return message;\n if (isValidElement(message)) return message;\n // Arrays of ReactNodes (e.g. [<a/>, \" \", <b/>]) render natively via {message}.\n if (Array.isArray(message)) return message;\n if (message && typeof message === \"object\") {\n const obj = message as {\n noticeCode?: string;\n customMessage?: string;\n notice?: string;\n };\n if (obj.customMessage) return obj.customMessage;\n if (obj.notice) return obj.notice;\n if (obj.noticeCode) return i18next.t(obj.noticeCode);\n }\n return String(message);\n}\n\nfunction resolveErrorMessage(errorObject: ToastrErrorInput): ReactNode {\n if (typeof errorObject === \"string\") return errorObject;\n\n if (errorObject && typeof errorObject === \"object\") {\n // Axios-style error\n const axiosLike = errorObject as {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n };\n\n if (axiosLike.response?.data) {\n const data = axiosLike.response.data;\n if (data.customMessage) return String(data.customMessage);\n if (data.error) return String(data.error);\n if (Array.isArray(data.errors)) return data.errors.join(\"\\n\");\n if (data.noticeCode) return String(data.noticeCode);\n }\n\n if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;\n\n // Native Error\n if (errorObject instanceof Error) return errorObject.message;\n\n // ToastrMessage (string, React element, array, or notice-shape object)\n return resolveMessage(errorObject as ToastrMessage);\n }\n\n return \"Something went wrong.\";\n}\n\nasync function copyToClipboard(text: string): Promise<boolean> {\n try {\n await navigator.clipboard.writeText(text);\n\n return true;\n } catch {\n // Clipboard API is unavailable in insecure contexts; fall back to execCommand.\n try {\n const textArea = document.createElement(\"textarea\");\n textArea.value = text;\n textArea.style.position = \"fixed\";\n textArea.style.opacity = \"0\";\n document.body.appendChild(textArea);\n textArea.focus();\n textArea.select();\n\n const isCopied = document.execCommand(\"copy\");\n textArea.remove();\n\n return isCopied;\n } catch {\n return false;\n }\n }\n}\n\nfunction parseConfig(args: unknown[]): ToastrConfig {\n if (args.length === 0) return {};\n\n const first = args[0];\n if (typeof first === \"object\" && first !== null && !Array.isArray(first)) {\n return first as ToastrConfig;\n }\n\n // Legacy positional args: buttonLabel, onClick, customConfig, showIcon\n const [buttonLabel, onClick, customConfig, showIcon] = args as [\n string?,\n (() => void)?,\n Record<string, unknown>?,\n boolean?,\n ];\n\n return {\n ...(buttonLabel ? { buttonLabel } : {}),\n ...(onClick ? { onClick } : {}),\n ...(showIcon !== undefined ? { showIcon } : {}),\n ...(customConfig ?? {}),\n };\n}\n\nexport {\n activeToasts,\n copyToClipboard,\n getContentDir,\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n toastKey,\n};\n","import { useEffect, useRef, useState, type ReactNode } from \"react\";\nimport {\n CircleCheckIcon,\n InfoIcon,\n OctagonXIcon,\n TriangleAlertIcon,\n XIcon,\n type LucideIcon,\n} from \"lucide-react\";\nimport { useTranslation } from \"react-i18next\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\n\nimport { copyToClipboard } from \"./utils\";\n\ntype ToastrType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nconst ICONS: Record<ToastrType, LucideIcon> = {\n success: CircleCheckIcon,\n info: InfoIcon,\n warning: TriangleAlertIcon,\n error: OctagonXIcon,\n};\n\nconst VARIANT_CLASSES: Record<ToastrType, string> = {\n success:\n \"bg-success-solid text-success-solid-foreground border-success-solid/30\",\n error: \"bg-error-solid text-error-solid-foreground border-error-solid/30\",\n warning:\n \"bg-warning-solid text-warning-solid-foreground border-warning-solid/30\",\n info: \"bg-info-solid text-info-solid-foreground border-info-solid/30\",\n};\n\nexport interface ToastrBodyProps {\n type: ToastrType;\n message: ReactNode;\n /** Plain-text version of the message; renders a copy-to-clipboard affordance when set. */\n copyableMessage?: string;\n showIcon?: boolean;\n dismissible?: boolean;\n buttonLabel?: string;\n onAction?: () => void;\n onDismiss: () => void;\n}\n\nconst COPIED_FEEDBACK_DURATION_MS = 2000;\n\nconst ToastrBody = ({\n type,\n message,\n copyableMessage,\n showIcon = true,\n dismissible = true,\n buttonLabel,\n onAction,\n onDismiss,\n}: ToastrBodyProps) => {\n const Icon = ICONS[type];\n const { t } = useTranslation();\n const [isCopied, setIsCopied] = useState(false);\n const copiedTimeoutRef = useRef<ReturnType<typeof setTimeout> | undefined>(\n undefined\n );\n\n useEffect(() => () => clearTimeout(copiedTimeoutRef.current), []);\n\n const handleCopy = async () => {\n if (!copyableMessage || !(await copyToClipboard(copyableMessage))) return;\n\n setIsCopied(true);\n clearTimeout(copiedTimeoutRef.current);\n copiedTimeoutRef.current = setTimeout(\n () => setIsCopied(false),\n COPIED_FEEDBACK_DURATION_MS\n );\n };\n\n return (\n <div\n role={type === \"error\" || type === \"warning\" ? \"alert\" : \"status\"}\n data-testid={`toastr-${type}-container`}\n className={cn(\n \"flex w-full items-center gap-3 rounded-md border px-4 py-3 text-sm shadow-lg\",\n VARIANT_CLASSES[type]\n )}\n >\n {showIcon && <Icon aria-hidden className=\"size-4 shrink-0\" />}\n <span className=\"flex-1\">\n {message}\n {copyableMessage && (\n <>\n {\" \"}\n <button\n type=\"button\"\n data-testid={`toastr-${type}-copy-button`}\n className=\"text-xs italic underline-offset-2 opacity-80 transition-opacity hover:underline hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n onClick={handleCopy}\n >\n {isCopied\n ? t(\"neetoatoms.toastr.copied\", \"Copied!\")\n : t(\"neetoatoms.toastr.copyMessage\", \"Copy this error message\")}\n </button>\n </>\n )}\n </span>\n {buttonLabel && (\n <button\n type=\"button\"\n onClick={onAction}\n data-testid={`toastr-${type}-button`}\n className=\"shrink-0 text-sm font-medium underline-offset-2 hover:underline\"\n >\n {buttonLabel}\n </button>\n )}\n {dismissible && (\n <button\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={onDismiss}\n data-testid=\"toastr-close-button\"\n className=\"shrink-0 rounded-sm opacity-70 transition-opacity hover:opacity-100 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2\"\n >\n <XIcon aria-hidden className=\"size-4\" />\n </button>\n )}\n </div>\n );\n};\n\nexport { ToastrBody };\n","import type { ReactNode } from \"react\";\nimport { toast } from \"sonner\";\n\nimport { ToastrBody } from \"./ToastrBody\";\nimport {\n activeToasts,\n getContentDir,\n parseConfig,\n resolveErrorMessage,\n resolveMessage,\n toastKey,\n} from \"./utils\";\n\nexport interface ToastrConfig {\n /** Label for an action button inside the toast. */\n buttonLabel?: string;\n /** Callback when the action button is clicked. */\n onClick?: () => void;\n /** Whether to show the type icon in the toast. */\n showIcon?: boolean;\n /** Whether the toast can be dismissed (shows X button + enables swipe). Defaults to true. */\n dismissible?: boolean;\n /** Whether to show the copy-to-clipboard affordance in error toasts. Defaults to true. */\n showCopyButton?: boolean;\n /** Additional sonner toast options (duration, position, etc.). */\n [key: string]: unknown;\n}\n\nexport type ToastrMessage =\n | ReactNode\n | { noticeCode?: string; customMessage?: string; notice?: string };\n\nexport type ToastrErrorInput =\n | string\n | Error\n | {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n }\n | ToastrMessage;\n\ntype SonnerType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nfunction showToast(\n type: SonnerType,\n message: ReactNode,\n config?: ToastrConfig\n): string | number | undefined {\n const {\n buttonLabel,\n onClick,\n showIcon,\n dismissible = true,\n showCopyButton = true,\n onDismiss: userOnDismiss,\n onAutoClose: userOnAutoClose,\n ...restConfig\n } = config ?? {};\n\n const key = toastKey(type, message, buttonLabel);\n\n if (key !== null && activeToasts.has(key)) return undefined;\n if (key !== null) activeToasts.add(key);\n\n // Error toasts stay until dismissed so the message can be read and copied.\n const options: Record<string, unknown> = {\n ...(type === \"error\" && { duration: Infinity }),\n ...restConfig,\n position: getContentDir() === \"rtl\" ? \"bottom-right\" : \"bottom-left\",\n dismissible,\n onDismiss: (t: unknown) => {\n if (key !== null) activeToasts.delete(key);\n (userOnDismiss as ((t: unknown) => void) | undefined)?.(t);\n },\n onAutoClose: (t: unknown) => {\n if (key !== null) activeToasts.delete(key);\n (userOnAutoClose as ((t: unknown) => void) | undefined)?.(t);\n },\n };\n\n const copyableMessage =\n showCopyButton && type === \"error\" && typeof message === \"string\"\n ? message\n : undefined;\n\n return toast.custom(\n id => (\n <ToastrBody\n buttonLabel={buttonLabel}\n copyableMessage={copyableMessage}\n dismissible={dismissible}\n message={message}\n showIcon={showIcon}\n type={type}\n onAction={() => {\n try {\n onClick?.();\n } finally {\n toast.dismiss(id);\n }\n }}\n onDismiss={() => toast.dismiss(id)}\n />\n ),\n options\n );\n}\n\nconst Toastr = {\n success(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"success\", resolveMessage(message), parseConfig(args));\n },\n\n info(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n show(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n warning(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"warning\", resolveMessage(message), parseConfig(args));\n },\n\n error(errorObject: ToastrErrorInput, ...args: unknown[]) {\n const msg = resolveErrorMessage(errorObject);\n return showToast(\"error\", msg, parseConfig(args));\n },\n};\n\nexport { Toastr };\n"],"names":["isValidElement","i18next","CircleCheckIcon","InfoIcon","TriangleAlertIcon","OctagonXIcon","useTranslation","useState","useRef","useEffect","jsxs","cn","jsx","Fragment","XIcon","toast"],"mappings":"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"}
@@ -67,6 +67,10 @@ var neetoatoms = {
67
67
  command: {
68
68
  title: "Command Palette",
69
69
  description: "Search for a command to run..."
70
+ },
71
+ toastr: {
72
+ copyMessage: "Copy this error message",
73
+ copied: "Copied!"
70
74
  }
71
75
  };
72
76
  var enTranslations = {
@@ -103,4 +107,4 @@ TranslationProvider.displayName = "TranslationProvider";
103
107
 
104
108
  exports.TranslationProvider = TranslationProvider;
105
109
  exports.resources = resources;
106
- //# sourceMappingURL=TranslationProvider-Dh5_Fzzk.js.map
110
+ //# sourceMappingURL=TranslationProvider-BgCNBYs8.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TranslationProvider-Dh5_Fzzk.js","sources":["../../src/translations/index.ts","../../src/components/TranslationProvider/i18n.ts","../../src/components/TranslationProvider/TranslationProvider.tsx"],"sourcesContent":["import enTranslations from \"./en.json\";\n\nexport const resources = {\n en: { translation: enTranslations },\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { resources } from \"src/translations\";\n\nexport const initializeI18n = (language = \"en\") => {\n i18n.use(initReactI18next).init({\n resources,\n lng: language,\n fallbackLng: \"en\",\n interpolation: { escapeValue: false },\n });\n\n return i18n;\n};\n","import { useEffect } from \"react\";\n\nimport { I18nextProvider } from \"react-i18next\";\n\nimport { initializeI18n } from \"./i18n\";\nimport type { TranslationProviderProps } from \"./types\";\n\nconst TranslationProvider = ({\n children,\n language = \"en\",\n}: TranslationProviderProps) => {\n const i18n = initializeI18n(language);\n\n useEffect(() => {\n if (i18n.language !== language) {\n i18n.changeLanguage(language);\n }\n }, [language, i18n]);\n\n return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;\n};\n\nTranslationProvider.displayName = \"TranslationProvider\";\n\nexport { TranslationProvider };\n"],"names":["i18n","initReactI18next","useEffect","jsx","I18nextProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,EAAA,EAAI,EAAE,WAAA,EAAa,cAAA;AACrB;;ACCO,MAAM,cAAA,GAAiB,CAAC,QAAA,GAAW,IAAA,KAAS;AACjD,EAAAA,qBAAA,CAAK,GAAA,CAAIC,6BAAgB,CAAA,CAAE,IAAA,CAAK;AAAA,IAC9B,SAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,WAAA,EAAa,IAAA;AAAA,IACb,aAAA,EAAe,EAAE,WAAA,EAAa,KAAA;AAAM,GACrC,CAAA;AAED,EAAA,OAAOD,qBAAA;AACT,CAAA;;ACPA,MAAM,sBAAsB,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAgC;AAC9B,EAAA,MAAM,IAAA,GAAO,eAAe,QAAQ,CAAA;AAEpC,EAAAE,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,MAAA,IAAA,CAAK,eAAe,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA;AAEnB,EAAA,uBAAOC,cAAA,CAACC,4BAAA,EAAA,EAAgB,IAAA,EAAa,QAAA,EAAS,CAAA;AAChD;AAEA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;;;;;"}
1
+ {"version":3,"file":"TranslationProvider-BgCNBYs8.js","sources":["../../src/translations/index.ts","../../src/components/TranslationProvider/i18n.ts","../../src/components/TranslationProvider/TranslationProvider.tsx"],"sourcesContent":["import enTranslations from \"./en.json\";\n\nexport const resources = {\n en: { translation: enTranslations },\n};\n","import i18n from \"i18next\";\nimport { initReactI18next } from \"react-i18next\";\n\nimport { resources } from \"src/translations\";\n\nexport const initializeI18n = (language = \"en\") => {\n i18n.use(initReactI18next).init({\n resources,\n lng: language,\n fallbackLng: \"en\",\n interpolation: { escapeValue: false },\n });\n\n return i18n;\n};\n","import { useEffect } from \"react\";\n\nimport { I18nextProvider } from \"react-i18next\";\n\nimport { initializeI18n } from \"./i18n\";\nimport type { TranslationProviderProps } from \"./types\";\n\nconst TranslationProvider = ({\n children,\n language = \"en\",\n}: TranslationProviderProps) => {\n const i18n = initializeI18n(language);\n\n useEffect(() => {\n if (i18n.language !== language) {\n i18n.changeLanguage(language);\n }\n }, [language, i18n]);\n\n return <I18nextProvider i18n={i18n}>{children}</I18nextProvider>;\n};\n\nTranslationProvider.displayName = \"TranslationProvider\";\n\nexport { TranslationProvider };\n"],"names":["i18n","initReactI18next","useEffect","jsx","I18nextProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEO,MAAM,SAAA,GAAY;AAAA,EACvB,EAAA,EAAI,EAAE,WAAA,EAAa,cAAA;AACrB;;ACCO,MAAM,cAAA,GAAiB,CAAC,QAAA,GAAW,IAAA,KAAS;AACjD,EAAAA,qBAAA,CAAK,GAAA,CAAIC,6BAAgB,CAAA,CAAE,IAAA,CAAK;AAAA,IAC9B,SAAA;AAAA,IACA,GAAA,EAAK,QAAA;AAAA,IACL,WAAA,EAAa,IAAA;AAAA,IACb,aAAA,EAAe,EAAE,WAAA,EAAa,KAAA;AAAM,GACrC,CAAA;AAED,EAAA,OAAOD,qBAAA;AACT,CAAA;;ACPA,MAAM,sBAAsB,CAAC;AAAA,EAC3B,QAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAgC;AAC9B,EAAA,MAAM,IAAA,GAAO,eAAe,QAAQ,CAAA;AAEpC,EAAAE,eAAA,CAAU,MAAM;AACd,IAAA,IAAI,IAAA,CAAK,aAAa,QAAA,EAAU;AAC9B,MAAA,IAAA,CAAK,eAAe,QAAQ,CAAA;AAAA,IAC9B;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,IAAI,CAAC,CAAA;AAEnB,EAAA,uBAAOC,cAAA,CAACC,4BAAA,EAAA,EAAgB,IAAA,EAAa,QAAA,EAAS,CAAA;AAChD;AAEA,mBAAA,CAAoB,WAAA,GAAc,qBAAA;;;;;"}
@@ -1,16 +1,17 @@
1
1
  'use strict';
2
2
 
3
- var Toastr = require('../Toastr-CgRy7bg-.js');
3
+ var Toastr = require('../Toastr-E0yLh_MW.js');
4
4
  require('react/jsx-runtime');
5
5
  require('../index-CPmGpPzg.js');
6
6
  require('../createLucideIcon-D0tRgV6l.js');
7
7
  require('react');
8
8
  require('react-dom');
9
+ require('react-i18next');
9
10
  require('../utils-BhM0B89p.js');
11
+ require('i18next');
10
12
  require('../triangle-alert-CC-cck8p.js');
11
13
  require('../info-DGfDptn1.js');
12
14
  require('../x-Brw3FJst.js');
13
- require('i18next');
14
15
 
15
16
 
16
17