acai-ui-library 0.1.15 → 0.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/sonner.cjs +60 -14
- package/dist/components/sonner.cjs.map +1 -1
- package/dist/components/sonner.d.cts +16 -4
- package/dist/components/sonner.d.ts +16 -4
- package/dist/components/sonner.js +57 -14
- package/dist/components/sonner.js.map +1 -1
- package/dist/index.cjs +60 -14
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +57 -14
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -20,36 +20,82 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
20
20
|
// src/components/sonner.tsx
|
|
21
21
|
var sonner_exports = {};
|
|
22
22
|
__export(sonner_exports, {
|
|
23
|
+
ERROR_TOAST_MS: () => ERROR_TOAST_MS,
|
|
24
|
+
TOAST_BOTTOM_OFFSET: () => TOAST_BOTTOM_OFFSET,
|
|
25
|
+
TOAST_DURATION_MS: () => TOAST_DURATION_MS,
|
|
23
26
|
Toaster: () => Toaster,
|
|
24
|
-
toast: () =>
|
|
27
|
+
toast: () => toast
|
|
25
28
|
});
|
|
26
29
|
module.exports = __toCommonJS(sonner_exports);
|
|
27
30
|
var import_next_themes = require("next-themes");
|
|
28
31
|
var import_sonner = require("sonner");
|
|
29
32
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
30
|
-
var
|
|
31
|
-
|
|
33
|
+
var TOAST_DURATION_MS = 4e3;
|
|
34
|
+
var ERROR_TOAST_MS = 7e3;
|
|
35
|
+
var TOKENS = {
|
|
36
|
+
"--normal-bg": "var(--hc-color-popover, #fff)",
|
|
37
|
+
"--normal-border": "var(--hc-color-border, rgba(0,0,0,0.12))",
|
|
38
|
+
"--normal-text": "var(--hc-color-popover-fg, #1a1a1e)",
|
|
39
|
+
fontFamily: "inherit"
|
|
40
|
+
};
|
|
41
|
+
var ACCENT = "!border-l-4";
|
|
42
|
+
var CLASS_NAMES = {
|
|
43
|
+
toast: "toast !font-[inherit] !rounded-lg !shadow-lg",
|
|
44
|
+
title: "!font-medium",
|
|
45
|
+
description: "!text-[var(--hc-color-muted-fg,#595961)]",
|
|
46
|
+
actionButton: "!bg-[var(--hc-color-primary,#5542ca)] !text-[var(--hc-color-primary-fg,#fff)]",
|
|
47
|
+
cancelButton: "!bg-[var(--hc-color-muted,#f1f1f1)] !text-[var(--hc-color-popover-fg,#1a1a1e)]",
|
|
48
|
+
closeButton: "!bg-[var(--hc-color-popover,#fff)] !text-[var(--hc-color-muted-fg,#595961)] !border-[var(--hc-color-border,rgba(0,0,0,0.12))]",
|
|
49
|
+
success: `${ACCENT} !border-l-[var(--hc-color-success,#16a34a)] [&_[data-icon]]:!text-[var(--hc-color-success,#16a34a)]`,
|
|
50
|
+
error: `${ACCENT} !border-l-[var(--hc-color-destructive,#dc2626)] [&_[data-icon]]:!text-[var(--hc-color-destructive,#dc2626)]`,
|
|
51
|
+
warning: `${ACCENT} !border-l-[var(--hc-color-warning,#d97706)] [&_[data-icon]]:!text-[var(--hc-color-warning,#d97706)]`,
|
|
52
|
+
info: `${ACCENT} !border-l-[var(--hc-color-primary,#5542ca)] [&_[data-icon]]:!text-[var(--hc-color-primary,#5542ca)]`,
|
|
53
|
+
loading: `${ACCENT} !border-l-[var(--hc-color-muted-fg,#595961)] [&_[data-icon]]:!text-[var(--hc-color-muted-fg,#595961)]`
|
|
54
|
+
};
|
|
55
|
+
var TOAST_BOTTOM_OFFSET = "calc(16px + env(safe-area-inset-bottom, 0px))";
|
|
56
|
+
var Toaster = ({ style, toastOptions, ...props }) => {
|
|
57
|
+
const { resolvedTheme, forcedTheme } = (0, import_next_themes.useTheme)();
|
|
32
58
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
33
59
|
import_sonner.Toaster,
|
|
34
60
|
{
|
|
35
|
-
theme,
|
|
61
|
+
theme: (forcedTheme ?? resolvedTheme) === "dark" ? "dark" : "light",
|
|
36
62
|
className: "toaster group",
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
},
|
|
63
|
+
position: "bottom-center",
|
|
64
|
+
offset: { bottom: TOAST_BOTTOM_OFFSET },
|
|
65
|
+
mobileOffset: { bottom: TOAST_BOTTOM_OFFSET },
|
|
66
|
+
visibleToasts: 3,
|
|
67
|
+
duration: TOAST_DURATION_MS,
|
|
68
|
+
closeButton: true,
|
|
69
|
+
style: { ...TOKENS, ...style },
|
|
70
|
+
toastOptions: { ...toastOptions, classNames: { ...CLASS_NAMES, ...toastOptions?.classNames } },
|
|
47
71
|
...props
|
|
48
72
|
}
|
|
49
73
|
);
|
|
50
74
|
};
|
|
75
|
+
function withDefaults(kind, message, data) {
|
|
76
|
+
return {
|
|
77
|
+
...typeof message === "string" && data?.id === void 0 ? { id: `${kind}:${message}` } : {},
|
|
78
|
+
...kind === "error" && data?.duration === void 0 ? { duration: ERROR_TOAST_MS } : {},
|
|
79
|
+
...data
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
var typed = (kind) => (message, data) => import_sonner.toast[kind](message, withDefaults(kind, message, data));
|
|
83
|
+
var toast = Object.assign(
|
|
84
|
+
(message, data) => (0, import_sonner.toast)(message, data),
|
|
85
|
+
import_sonner.toast,
|
|
86
|
+
{
|
|
87
|
+
success: typed("success"),
|
|
88
|
+
info: typed("info"),
|
|
89
|
+
warning: typed("warning"),
|
|
90
|
+
error: typed("error"),
|
|
91
|
+
message: typed("message")
|
|
92
|
+
}
|
|
93
|
+
);
|
|
51
94
|
// Annotate the CommonJS export names for ESM import in node:
|
|
52
95
|
0 && (module.exports = {
|
|
96
|
+
ERROR_TOAST_MS,
|
|
97
|
+
TOAST_BOTTOM_OFFSET,
|
|
98
|
+
TOAST_DURATION_MS,
|
|
53
99
|
Toaster,
|
|
54
100
|
toast
|
|
55
101
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/sonner.tsx"],"sourcesContent":["import { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, toast
|
|
1
|
+
{"version":3,"sources":["../../src/components/sonner.tsx"],"sourcesContent":["import type { CSSProperties } from \"react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, toast as sonnerToast, type ExternalToast } from \"sonner\"\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>\n\nexport const TOAST_DURATION_MS = 4000\n/** Errors stay up longer: they usually need reading, and often a retry. */\nexport const ERROR_TOAST_MS = 7000\n\n/*\n * Colours come from the app's --hc-color-* tokens (acai-ui-library/styles), set as\n * sonner's own CSS variables, so light and dark follow the theme. Fallbacks keep it\n * readable if an app has not loaded the tokens.\n */\nconst TOKENS = {\n \"--normal-bg\": \"var(--hc-color-popover, #fff)\",\n \"--normal-border\": \"var(--hc-color-border, rgba(0,0,0,0.12))\",\n \"--normal-text\": \"var(--hc-color-popover-fg, #1a1a1e)\",\n fontFamily: \"inherit\",\n} as CSSProperties\n\nconst ACCENT = \"!border-l-4\"\n\n/** Per type: a coloured left accent and icon colour; the text stays popover-fg on popover. */\nconst CLASS_NAMES: NonNullable<NonNullable<ToasterProps[\"toastOptions\"]>[\"classNames\"]> = {\n toast: \"toast !font-[inherit] !rounded-lg !shadow-lg\",\n title: \"!font-medium\",\n description: \"!text-[var(--hc-color-muted-fg,#595961)]\",\n actionButton: \"!bg-[var(--hc-color-primary,#5542ca)] !text-[var(--hc-color-primary-fg,#fff)]\",\n cancelButton: \"!bg-[var(--hc-color-muted,#f1f1f1)] !text-[var(--hc-color-popover-fg,#1a1a1e)]\",\n closeButton:\n \"!bg-[var(--hc-color-popover,#fff)] !text-[var(--hc-color-muted-fg,#595961)] !border-[var(--hc-color-border,rgba(0,0,0,0.12))]\",\n success: `${ACCENT} !border-l-[var(--hc-color-success,#16a34a)] [&_[data-icon]]:!text-[var(--hc-color-success,#16a34a)]`,\n error: `${ACCENT} !border-l-[var(--hc-color-destructive,#dc2626)] [&_[data-icon]]:!text-[var(--hc-color-destructive,#dc2626)]`,\n warning: `${ACCENT} !border-l-[var(--hc-color-warning,#d97706)] [&_[data-icon]]:!text-[var(--hc-color-warning,#d97706)]`,\n info: `${ACCENT} !border-l-[var(--hc-color-primary,#5542ca)] [&_[data-icon]]:!text-[var(--hc-color-primary,#5542ca)]`,\n loading: `${ACCENT} !border-l-[var(--hc-color-muted-fg,#595961)] [&_[data-icon]]:!text-[var(--hc-color-muted-fg,#595961)]`,\n}\n\n/** 16px above the bottom edge plus the safe area, clear of mobile bottom tab bars. */\nexport const TOAST_BOTTOM_OFFSET = \"calc(16px + env(safe-area-inset-bottom, 0px))\"\n\n/**\n * The one Toaster for an app: render it once in the root layout, with no props.\n * Bottom-center, three visible, 4 s (errors 7 s), close button, theme-following colours,\n * the app's own font.\n */\nconst Toaster = ({ style, toastOptions, ...props }: ToasterProps) => {\n const { resolvedTheme, forcedTheme } = useTheme()\n\n return (\n <Sonner\n theme={(forcedTheme ?? resolvedTheme) === \"dark\" ? \"dark\" : \"light\"}\n className=\"toaster group\"\n position=\"bottom-center\"\n offset={{ bottom: TOAST_BOTTOM_OFFSET }}\n mobileOffset={{ bottom: TOAST_BOTTOM_OFFSET }}\n visibleToasts={3}\n duration={TOAST_DURATION_MS}\n closeButton\n style={{ ...TOKENS, ...style }}\n toastOptions={{ ...toastOptions, classNames: { ...CLASS_NAMES, ...toastOptions?.classNames } }}\n {...props}\n />\n )\n}\n\ntype Typed = \"success\" | \"info\" | \"warning\" | \"error\" | \"message\"\n\n/*\n * Errors default to 7 s. A string message gets its own text as the toast id unless the\n * caller passes one, so the same message fired twice (a double click, a retried mutation)\n * updates the toast already showing instead of stacking a copy.\n */\nfunction withDefaults(kind: Typed, message: unknown, data?: ExternalToast): ExternalToast {\n return {\n ...(typeof message === \"string\" && data?.id === undefined ? { id: `${kind}:${message}` } : {}),\n ...(kind === \"error\" && data?.duration === undefined ? { duration: ERROR_TOAST_MS } : {}),\n ...data,\n }\n}\n\nconst typed =\n (kind: Typed): (typeof sonnerToast)[Typed] =>\n (message, data) =>\n sonnerToast[kind](message, withDefaults(kind, message, data))\n\n/** sonner's `toast`, same API (promise, loading, custom, dismiss, action), with the defaults above. */\nconst toast: typeof sonnerToast = Object.assign(\n (message: Parameters<typeof sonnerToast>[0], data?: ExternalToast) => sonnerToast(message, data),\n sonnerToast,\n {\n success: typed(\"success\"),\n info: typed(\"info\"),\n warning: typed(\"warning\"),\n error: typed(\"error\"),\n message: typed(\"message\"),\n },\n)\n\nexport { Toaster, toast }\nexport type { ToasterProps, ExternalToast }\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,yBAAyB;AACzB,oBAA4E;AAkDxE;AA9CG,IAAM,oBAAoB;AAE1B,IAAM,iBAAiB;AAO9B,IAAM,SAAS;AAAA,EACb,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,YAAY;AACd;AAEA,IAAM,SAAS;AAGf,IAAM,cAAoF;AAAA,EACxF,OAAO;AAAA,EACP,OAAO;AAAA,EACP,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aACE;AAAA,EACF,SAAS,GAAG,MAAM;AAAA,EAClB,OAAO,GAAG,MAAM;AAAA,EAChB,SAAS,GAAG,MAAM;AAAA,EAClB,MAAM,GAAG,MAAM;AAAA,EACf,SAAS,GAAG,MAAM;AACpB;AAGO,IAAM,sBAAsB;AAOnC,IAAM,UAAU,CAAC,EAAE,OAAO,cAAc,GAAG,MAAM,MAAoB;AACnE,QAAM,EAAE,eAAe,YAAY,QAAI,6BAAS;AAEhD,SACE;AAAA,IAAC,cAAAA;AAAA,IAAA;AAAA,MACC,QAAQ,eAAe,mBAAmB,SAAS,SAAS;AAAA,MAC5D,WAAU;AAAA,MACV,UAAS;AAAA,MACT,QAAQ,EAAE,QAAQ,oBAAoB;AAAA,MACtC,cAAc,EAAE,QAAQ,oBAAoB;AAAA,MAC5C,eAAe;AAAA,MACf,UAAU;AAAA,MACV,aAAW;AAAA,MACX,OAAO,EAAE,GAAG,QAAQ,GAAG,MAAM;AAAA,MAC7B,cAAc,EAAE,GAAG,cAAc,YAAY,EAAE,GAAG,aAAa,GAAG,cAAc,WAAW,EAAE;AAAA,MAC5F,GAAG;AAAA;AAAA,EACN;AAEJ;AASA,SAAS,aAAa,MAAa,SAAkB,MAAqC;AACxF,SAAO;AAAA,IACL,GAAI,OAAO,YAAY,YAAY,MAAM,OAAO,SAAY,EAAE,IAAI,GAAG,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC;AAAA,IAC5F,GAAI,SAAS,WAAW,MAAM,aAAa,SAAY,EAAE,UAAU,eAAe,IAAI,CAAC;AAAA,IACvF,GAAG;AAAA,EACL;AACF;AAEA,IAAM,QACJ,CAAC,SACD,CAAC,SAAS,SACR,cAAAC,MAAY,IAAI,EAAE,SAAS,aAAa,MAAM,SAAS,IAAI,CAAC;AAGhE,IAAM,QAA4B,OAAO;AAAA,EACvC,CAAC,SAA4C,aAAyB,cAAAA,OAAY,SAAS,IAAI;AAAA,EAC/F,cAAAA;AAAA,EACA;AAAA,IACE,SAAS,MAAM,SAAS;AAAA,IACxB,MAAM,MAAM,MAAM;AAAA,IAClB,SAAS,MAAM,SAAS;AAAA,IACxB,OAAO,MAAM,OAAO;AAAA,IACpB,SAAS,MAAM,SAAS;AAAA,EAC1B;AACF;","names":["Sonner","sonnerToast"]}
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { Toaster as Toaster$1 } from 'sonner';
|
|
3
|
-
export {
|
|
2
|
+
import { Toaster as Toaster$1, toast as toast$1 } from 'sonner';
|
|
3
|
+
export { ExternalToast } from 'sonner';
|
|
4
4
|
|
|
5
5
|
type ToasterProps = React.ComponentProps<typeof Toaster$1>;
|
|
6
|
-
declare const
|
|
6
|
+
declare const TOAST_DURATION_MS = 4000;
|
|
7
|
+
/** Errors stay up longer: they usually need reading, and often a retry. */
|
|
8
|
+
declare const ERROR_TOAST_MS = 7000;
|
|
9
|
+
/** 16px above the bottom edge plus the safe area, clear of mobile bottom tab bars. */
|
|
10
|
+
declare const TOAST_BOTTOM_OFFSET = "calc(16px + env(safe-area-inset-bottom, 0px))";
|
|
11
|
+
/**
|
|
12
|
+
* The one Toaster for an app: render it once in the root layout, with no props.
|
|
13
|
+
* Bottom-center, three visible, 4 s (errors 7 s), close button, theme-following colours,
|
|
14
|
+
* the app's own font.
|
|
15
|
+
*/
|
|
16
|
+
declare const Toaster: ({ style, toastOptions, ...props }: ToasterProps) => react_jsx_runtime.JSX.Element;
|
|
17
|
+
/** sonner's `toast`, same API (promise, loading, custom, dismiss, action), with the defaults above. */
|
|
18
|
+
declare const toast: typeof toast$1;
|
|
7
19
|
|
|
8
|
-
export { Toaster };
|
|
20
|
+
export { ERROR_TOAST_MS, TOAST_BOTTOM_OFFSET, TOAST_DURATION_MS, Toaster, type ToasterProps, toast };
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { Toaster as Toaster$1 } from 'sonner';
|
|
3
|
-
export {
|
|
2
|
+
import { Toaster as Toaster$1, toast as toast$1 } from 'sonner';
|
|
3
|
+
export { ExternalToast } from 'sonner';
|
|
4
4
|
|
|
5
5
|
type ToasterProps = React.ComponentProps<typeof Toaster$1>;
|
|
6
|
-
declare const
|
|
6
|
+
declare const TOAST_DURATION_MS = 4000;
|
|
7
|
+
/** Errors stay up longer: they usually need reading, and often a retry. */
|
|
8
|
+
declare const ERROR_TOAST_MS = 7000;
|
|
9
|
+
/** 16px above the bottom edge plus the safe area, clear of mobile bottom tab bars. */
|
|
10
|
+
declare const TOAST_BOTTOM_OFFSET = "calc(16px + env(safe-area-inset-bottom, 0px))";
|
|
11
|
+
/**
|
|
12
|
+
* The one Toaster for an app: render it once in the root layout, with no props.
|
|
13
|
+
* Bottom-center, three visible, 4 s (errors 7 s), close button, theme-following colours,
|
|
14
|
+
* the app's own font.
|
|
15
|
+
*/
|
|
16
|
+
declare const Toaster: ({ style, toastOptions, ...props }: ToasterProps) => react_jsx_runtime.JSX.Element;
|
|
17
|
+
/** sonner's `toast`, same API (promise, loading, custom, dismiss, action), with the defaults above. */
|
|
18
|
+
declare const toast: typeof toast$1;
|
|
7
19
|
|
|
8
|
-
export { Toaster };
|
|
20
|
+
export { ERROR_TOAST_MS, TOAST_BOTTOM_OFFSET, TOAST_DURATION_MS, Toaster, type ToasterProps, toast };
|
|
@@ -1,29 +1,72 @@
|
|
|
1
1
|
// src/components/sonner.tsx
|
|
2
2
|
import { useTheme } from "next-themes";
|
|
3
|
-
import { Toaster as Sonner, toast } from "sonner";
|
|
3
|
+
import { Toaster as Sonner, toast as sonnerToast } from "sonner";
|
|
4
4
|
import { jsx } from "react/jsx-runtime";
|
|
5
|
-
var
|
|
6
|
-
|
|
5
|
+
var TOAST_DURATION_MS = 4e3;
|
|
6
|
+
var ERROR_TOAST_MS = 7e3;
|
|
7
|
+
var TOKENS = {
|
|
8
|
+
"--normal-bg": "var(--hc-color-popover, #fff)",
|
|
9
|
+
"--normal-border": "var(--hc-color-border, rgba(0,0,0,0.12))",
|
|
10
|
+
"--normal-text": "var(--hc-color-popover-fg, #1a1a1e)",
|
|
11
|
+
fontFamily: "inherit"
|
|
12
|
+
};
|
|
13
|
+
var ACCENT = "!border-l-4";
|
|
14
|
+
var CLASS_NAMES = {
|
|
15
|
+
toast: "toast !font-[inherit] !rounded-lg !shadow-lg",
|
|
16
|
+
title: "!font-medium",
|
|
17
|
+
description: "!text-[var(--hc-color-muted-fg,#595961)]",
|
|
18
|
+
actionButton: "!bg-[var(--hc-color-primary,#5542ca)] !text-[var(--hc-color-primary-fg,#fff)]",
|
|
19
|
+
cancelButton: "!bg-[var(--hc-color-muted,#f1f1f1)] !text-[var(--hc-color-popover-fg,#1a1a1e)]",
|
|
20
|
+
closeButton: "!bg-[var(--hc-color-popover,#fff)] !text-[var(--hc-color-muted-fg,#595961)] !border-[var(--hc-color-border,rgba(0,0,0,0.12))]",
|
|
21
|
+
success: `${ACCENT} !border-l-[var(--hc-color-success,#16a34a)] [&_[data-icon]]:!text-[var(--hc-color-success,#16a34a)]`,
|
|
22
|
+
error: `${ACCENT} !border-l-[var(--hc-color-destructive,#dc2626)] [&_[data-icon]]:!text-[var(--hc-color-destructive,#dc2626)]`,
|
|
23
|
+
warning: `${ACCENT} !border-l-[var(--hc-color-warning,#d97706)] [&_[data-icon]]:!text-[var(--hc-color-warning,#d97706)]`,
|
|
24
|
+
info: `${ACCENT} !border-l-[var(--hc-color-primary,#5542ca)] [&_[data-icon]]:!text-[var(--hc-color-primary,#5542ca)]`,
|
|
25
|
+
loading: `${ACCENT} !border-l-[var(--hc-color-muted-fg,#595961)] [&_[data-icon]]:!text-[var(--hc-color-muted-fg,#595961)]`
|
|
26
|
+
};
|
|
27
|
+
var TOAST_BOTTOM_OFFSET = "calc(16px + env(safe-area-inset-bottom, 0px))";
|
|
28
|
+
var Toaster = ({ style, toastOptions, ...props }) => {
|
|
29
|
+
const { resolvedTheme, forcedTheme } = useTheme();
|
|
7
30
|
return /* @__PURE__ */ jsx(
|
|
8
31
|
Sonner,
|
|
9
32
|
{
|
|
10
|
-
theme,
|
|
33
|
+
theme: (forcedTheme ?? resolvedTheme) === "dark" ? "dark" : "light",
|
|
11
34
|
className: "toaster group",
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
21
|
-
},
|
|
35
|
+
position: "bottom-center",
|
|
36
|
+
offset: { bottom: TOAST_BOTTOM_OFFSET },
|
|
37
|
+
mobileOffset: { bottom: TOAST_BOTTOM_OFFSET },
|
|
38
|
+
visibleToasts: 3,
|
|
39
|
+
duration: TOAST_DURATION_MS,
|
|
40
|
+
closeButton: true,
|
|
41
|
+
style: { ...TOKENS, ...style },
|
|
42
|
+
toastOptions: { ...toastOptions, classNames: { ...CLASS_NAMES, ...toastOptions?.classNames } },
|
|
22
43
|
...props
|
|
23
44
|
}
|
|
24
45
|
);
|
|
25
46
|
};
|
|
47
|
+
function withDefaults(kind, message, data) {
|
|
48
|
+
return {
|
|
49
|
+
...typeof message === "string" && data?.id === void 0 ? { id: `${kind}:${message}` } : {},
|
|
50
|
+
...kind === "error" && data?.duration === void 0 ? { duration: ERROR_TOAST_MS } : {},
|
|
51
|
+
...data
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
var typed = (kind) => (message, data) => sonnerToast[kind](message, withDefaults(kind, message, data));
|
|
55
|
+
var toast = Object.assign(
|
|
56
|
+
(message, data) => sonnerToast(message, data),
|
|
57
|
+
sonnerToast,
|
|
58
|
+
{
|
|
59
|
+
success: typed("success"),
|
|
60
|
+
info: typed("info"),
|
|
61
|
+
warning: typed("warning"),
|
|
62
|
+
error: typed("error"),
|
|
63
|
+
message: typed("message")
|
|
64
|
+
}
|
|
65
|
+
);
|
|
26
66
|
export {
|
|
67
|
+
ERROR_TOAST_MS,
|
|
68
|
+
TOAST_BOTTOM_OFFSET,
|
|
69
|
+
TOAST_DURATION_MS,
|
|
27
70
|
Toaster,
|
|
28
71
|
toast
|
|
29
72
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/components/sonner.tsx"],"sourcesContent":["import { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, toast
|
|
1
|
+
{"version":3,"sources":["../../src/components/sonner.tsx"],"sourcesContent":["import type { CSSProperties } from \"react\"\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner, toast as sonnerToast, type ExternalToast } from \"sonner\"\n\ntype ToasterProps = React.ComponentProps<typeof Sonner>\n\nexport const TOAST_DURATION_MS = 4000\n/** Errors stay up longer: they usually need reading, and often a retry. */\nexport const ERROR_TOAST_MS = 7000\n\n/*\n * Colours come from the app's --hc-color-* tokens (acai-ui-library/styles), set as\n * sonner's own CSS variables, so light and dark follow the theme. Fallbacks keep it\n * readable if an app has not loaded the tokens.\n */\nconst TOKENS = {\n \"--normal-bg\": \"var(--hc-color-popover, #fff)\",\n \"--normal-border\": \"var(--hc-color-border, rgba(0,0,0,0.12))\",\n \"--normal-text\": \"var(--hc-color-popover-fg, #1a1a1e)\",\n fontFamily: \"inherit\",\n} as CSSProperties\n\nconst ACCENT = \"!border-l-4\"\n\n/** Per type: a coloured left accent and icon colour; the text stays popover-fg on popover. */\nconst CLASS_NAMES: NonNullable<NonNullable<ToasterProps[\"toastOptions\"]>[\"classNames\"]> = {\n toast: \"toast !font-[inherit] !rounded-lg !shadow-lg\",\n title: \"!font-medium\",\n description: \"!text-[var(--hc-color-muted-fg,#595961)]\",\n actionButton: \"!bg-[var(--hc-color-primary,#5542ca)] !text-[var(--hc-color-primary-fg,#fff)]\",\n cancelButton: \"!bg-[var(--hc-color-muted,#f1f1f1)] !text-[var(--hc-color-popover-fg,#1a1a1e)]\",\n closeButton:\n \"!bg-[var(--hc-color-popover,#fff)] !text-[var(--hc-color-muted-fg,#595961)] !border-[var(--hc-color-border,rgba(0,0,0,0.12))]\",\n success: `${ACCENT} !border-l-[var(--hc-color-success,#16a34a)] [&_[data-icon]]:!text-[var(--hc-color-success,#16a34a)]`,\n error: `${ACCENT} !border-l-[var(--hc-color-destructive,#dc2626)] [&_[data-icon]]:!text-[var(--hc-color-destructive,#dc2626)]`,\n warning: `${ACCENT} !border-l-[var(--hc-color-warning,#d97706)] [&_[data-icon]]:!text-[var(--hc-color-warning,#d97706)]`,\n info: `${ACCENT} !border-l-[var(--hc-color-primary,#5542ca)] [&_[data-icon]]:!text-[var(--hc-color-primary,#5542ca)]`,\n loading: `${ACCENT} !border-l-[var(--hc-color-muted-fg,#595961)] [&_[data-icon]]:!text-[var(--hc-color-muted-fg,#595961)]`,\n}\n\n/** 16px above the bottom edge plus the safe area, clear of mobile bottom tab bars. */\nexport const TOAST_BOTTOM_OFFSET = \"calc(16px + env(safe-area-inset-bottom, 0px))\"\n\n/**\n * The one Toaster for an app: render it once in the root layout, with no props.\n * Bottom-center, three visible, 4 s (errors 7 s), close button, theme-following colours,\n * the app's own font.\n */\nconst Toaster = ({ style, toastOptions, ...props }: ToasterProps) => {\n const { resolvedTheme, forcedTheme } = useTheme()\n\n return (\n <Sonner\n theme={(forcedTheme ?? resolvedTheme) === \"dark\" ? \"dark\" : \"light\"}\n className=\"toaster group\"\n position=\"bottom-center\"\n offset={{ bottom: TOAST_BOTTOM_OFFSET }}\n mobileOffset={{ bottom: TOAST_BOTTOM_OFFSET }}\n visibleToasts={3}\n duration={TOAST_DURATION_MS}\n closeButton\n style={{ ...TOKENS, ...style }}\n toastOptions={{ ...toastOptions, classNames: { ...CLASS_NAMES, ...toastOptions?.classNames } }}\n {...props}\n />\n )\n}\n\ntype Typed = \"success\" | \"info\" | \"warning\" | \"error\" | \"message\"\n\n/*\n * Errors default to 7 s. A string message gets its own text as the toast id unless the\n * caller passes one, so the same message fired twice (a double click, a retried mutation)\n * updates the toast already showing instead of stacking a copy.\n */\nfunction withDefaults(kind: Typed, message: unknown, data?: ExternalToast): ExternalToast {\n return {\n ...(typeof message === \"string\" && data?.id === undefined ? { id: `${kind}:${message}` } : {}),\n ...(kind === \"error\" && data?.duration === undefined ? { duration: ERROR_TOAST_MS } : {}),\n ...data,\n }\n}\n\nconst typed =\n (kind: Typed): (typeof sonnerToast)[Typed] =>\n (message, data) =>\n sonnerToast[kind](message, withDefaults(kind, message, data))\n\n/** sonner's `toast`, same API (promise, loading, custom, dismiss, action), with the defaults above. */\nconst toast: typeof sonnerToast = Object.assign(\n (message: Parameters<typeof sonnerToast>[0], data?: ExternalToast) => sonnerToast(message, data),\n sonnerToast,\n {\n success: typed(\"success\"),\n info: typed(\"info\"),\n warning: typed(\"warning\"),\n error: typed(\"error\"),\n message: typed(\"message\"),\n },\n)\n\nexport { Toaster, toast }\nexport type { ToasterProps, ExternalToast }\n"],"mappings":";AACA,SAAS,gBAAgB;AACzB,SAAS,WAAW,QAAQ,SAAS,mBAAuC;AAkDxE;AA9CG,IAAM,oBAAoB;AAE1B,IAAM,iBAAiB;AAO9B,IAAM,SAAS;AAAA,EACb,eAAe;AAAA,EACf,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,YAAY;AACd;AAEA,IAAM,SAAS;AAGf,IAAM,cAAoF;AAAA,EACxF,OAAO;AAAA,EACP,OAAO;AAAA,EACP,aAAa;AAAA,EACb,cAAc;AAAA,EACd,cAAc;AAAA,EACd,aACE;AAAA,EACF,SAAS,GAAG,MAAM;AAAA,EAClB,OAAO,GAAG,MAAM;AAAA,EAChB,SAAS,GAAG,MAAM;AAAA,EAClB,MAAM,GAAG,MAAM;AAAA,EACf,SAAS,GAAG,MAAM;AACpB;AAGO,IAAM,sBAAsB;AAOnC,IAAM,UAAU,CAAC,EAAE,OAAO,cAAc,GAAG,MAAM,MAAoB;AACnE,QAAM,EAAE,eAAe,YAAY,IAAI,SAAS;AAEhD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,QAAQ,eAAe,mBAAmB,SAAS,SAAS;AAAA,MAC5D,WAAU;AAAA,MACV,UAAS;AAAA,MACT,QAAQ,EAAE,QAAQ,oBAAoB;AAAA,MACtC,cAAc,EAAE,QAAQ,oBAAoB;AAAA,MAC5C,eAAe;AAAA,MACf,UAAU;AAAA,MACV,aAAW;AAAA,MACX,OAAO,EAAE,GAAG,QAAQ,GAAG,MAAM;AAAA,MAC7B,cAAc,EAAE,GAAG,cAAc,YAAY,EAAE,GAAG,aAAa,GAAG,cAAc,WAAW,EAAE;AAAA,MAC5F,GAAG;AAAA;AAAA,EACN;AAEJ;AASA,SAAS,aAAa,MAAa,SAAkB,MAAqC;AACxF,SAAO;AAAA,IACL,GAAI,OAAO,YAAY,YAAY,MAAM,OAAO,SAAY,EAAE,IAAI,GAAG,IAAI,IAAI,OAAO,GAAG,IAAI,CAAC;AAAA,IAC5F,GAAI,SAAS,WAAW,MAAM,aAAa,SAAY,EAAE,UAAU,eAAe,IAAI,CAAC;AAAA,IACvF,GAAG;AAAA,EACL;AACF;AAEA,IAAM,QACJ,CAAC,SACD,CAAC,SAAS,SACR,YAAY,IAAI,EAAE,SAAS,aAAa,MAAM,SAAS,IAAI,CAAC;AAGhE,IAAM,QAA4B,OAAO;AAAA,EACvC,CAAC,SAA4C,SAAyB,YAAY,SAAS,IAAI;AAAA,EAC/F;AAAA,EACA;AAAA,IACE,SAAS,MAAM,SAAS;AAAA,IACxB,MAAM,MAAM,MAAM;AAAA,IAClB,SAAS,MAAM,SAAS;AAAA,IACxB,OAAO,MAAM,OAAO;AAAA,IACpB,SAAS,MAAM,SAAS;AAAA,EAC1B;AACF;","names":[]}
|
package/dist/index.cjs
CHANGED
|
@@ -156,6 +156,7 @@ __export(src_exports, {
|
|
|
156
156
|
DropdownMenuSubContent: () => DropdownMenuSubContent,
|
|
157
157
|
DropdownMenuSubTrigger: () => DropdownMenuSubTrigger,
|
|
158
158
|
DropdownMenuTrigger: () => DropdownMenuTrigger,
|
|
159
|
+
ERROR_TOAST_MS: () => ERROR_TOAST_MS,
|
|
159
160
|
EmptyState: () => EmptyState,
|
|
160
161
|
EmptyStateActions: () => EmptyStateActions,
|
|
161
162
|
FileInput: () => FileInput,
|
|
@@ -281,6 +282,8 @@ __export(src_exports, {
|
|
|
281
282
|
StepperItem: () => StepperItem,
|
|
282
283
|
SuccessIcon: () => SuccessIcon,
|
|
283
284
|
Switch: () => Switch,
|
|
285
|
+
TOAST_BOTTOM_OFFSET: () => TOAST_BOTTOM_OFFSET,
|
|
286
|
+
TOAST_DURATION_MS: () => TOAST_DURATION_MS,
|
|
284
287
|
Table: () => Table,
|
|
285
288
|
TableBody: () => TableBody,
|
|
286
289
|
TableCaption: () => TableCaption,
|
|
@@ -318,7 +321,7 @@ __export(src_exports, {
|
|
|
318
321
|
readImpersonation: () => readImpersonation,
|
|
319
322
|
spinnerVariants: () => spinnerVariants,
|
|
320
323
|
switchVariants: () => switchVariants,
|
|
321
|
-
toast: () =>
|
|
324
|
+
toast: () => toast,
|
|
322
325
|
toggleVariants: () => toggleVariants,
|
|
323
326
|
useFormField: () => useFormField,
|
|
324
327
|
useImpersonation: () => useImpersonation,
|
|
@@ -4629,27 +4632,67 @@ function IconInfoLineIcon({ size = 16, width, height, fill, title, ...props }) {
|
|
|
4629
4632
|
var import_next_themes = require("next-themes");
|
|
4630
4633
|
var import_sonner = require("sonner");
|
|
4631
4634
|
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
4632
|
-
var
|
|
4633
|
-
|
|
4635
|
+
var TOAST_DURATION_MS = 4e3;
|
|
4636
|
+
var ERROR_TOAST_MS = 7e3;
|
|
4637
|
+
var TOKENS = {
|
|
4638
|
+
"--normal-bg": "var(--hc-color-popover, #fff)",
|
|
4639
|
+
"--normal-border": "var(--hc-color-border, rgba(0,0,0,0.12))",
|
|
4640
|
+
"--normal-text": "var(--hc-color-popover-fg, #1a1a1e)",
|
|
4641
|
+
fontFamily: "inherit"
|
|
4642
|
+
};
|
|
4643
|
+
var ACCENT = "!border-l-4";
|
|
4644
|
+
var CLASS_NAMES = {
|
|
4645
|
+
toast: "toast !font-[inherit] !rounded-lg !shadow-lg",
|
|
4646
|
+
title: "!font-medium",
|
|
4647
|
+
description: "!text-[var(--hc-color-muted-fg,#595961)]",
|
|
4648
|
+
actionButton: "!bg-[var(--hc-color-primary,#5542ca)] !text-[var(--hc-color-primary-fg,#fff)]",
|
|
4649
|
+
cancelButton: "!bg-[var(--hc-color-muted,#f1f1f1)] !text-[var(--hc-color-popover-fg,#1a1a1e)]",
|
|
4650
|
+
closeButton: "!bg-[var(--hc-color-popover,#fff)] !text-[var(--hc-color-muted-fg,#595961)] !border-[var(--hc-color-border,rgba(0,0,0,0.12))]",
|
|
4651
|
+
success: `${ACCENT} !border-l-[var(--hc-color-success,#16a34a)] [&_[data-icon]]:!text-[var(--hc-color-success,#16a34a)]`,
|
|
4652
|
+
error: `${ACCENT} !border-l-[var(--hc-color-destructive,#dc2626)] [&_[data-icon]]:!text-[var(--hc-color-destructive,#dc2626)]`,
|
|
4653
|
+
warning: `${ACCENT} !border-l-[var(--hc-color-warning,#d97706)] [&_[data-icon]]:!text-[var(--hc-color-warning,#d97706)]`,
|
|
4654
|
+
info: `${ACCENT} !border-l-[var(--hc-color-primary,#5542ca)] [&_[data-icon]]:!text-[var(--hc-color-primary,#5542ca)]`,
|
|
4655
|
+
loading: `${ACCENT} !border-l-[var(--hc-color-muted-fg,#595961)] [&_[data-icon]]:!text-[var(--hc-color-muted-fg,#595961)]`
|
|
4656
|
+
};
|
|
4657
|
+
var TOAST_BOTTOM_OFFSET = "calc(16px + env(safe-area-inset-bottom, 0px))";
|
|
4658
|
+
var Toaster = ({ style, toastOptions, ...props }) => {
|
|
4659
|
+
const { resolvedTheme, forcedTheme } = (0, import_next_themes.useTheme)();
|
|
4634
4660
|
return /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4635
4661
|
import_sonner.Toaster,
|
|
4636
4662
|
{
|
|
4637
|
-
theme,
|
|
4663
|
+
theme: (forcedTheme ?? resolvedTheme) === "dark" ? "dark" : "light",
|
|
4638
4664
|
className: "toaster group",
|
|
4639
|
-
|
|
4640
|
-
|
|
4641
|
-
|
|
4642
|
-
|
|
4643
|
-
|
|
4644
|
-
|
|
4645
|
-
|
|
4646
|
-
|
|
4647
|
-
}
|
|
4648
|
-
},
|
|
4665
|
+
position: "bottom-center",
|
|
4666
|
+
offset: { bottom: TOAST_BOTTOM_OFFSET },
|
|
4667
|
+
mobileOffset: { bottom: TOAST_BOTTOM_OFFSET },
|
|
4668
|
+
visibleToasts: 3,
|
|
4669
|
+
duration: TOAST_DURATION_MS,
|
|
4670
|
+
closeButton: true,
|
|
4671
|
+
style: { ...TOKENS, ...style },
|
|
4672
|
+
toastOptions: { ...toastOptions, classNames: { ...CLASS_NAMES, ...toastOptions?.classNames } },
|
|
4649
4673
|
...props
|
|
4650
4674
|
}
|
|
4651
4675
|
);
|
|
4652
4676
|
};
|
|
4677
|
+
function withDefaults(kind, message, data) {
|
|
4678
|
+
return {
|
|
4679
|
+
...typeof message === "string" && data?.id === void 0 ? { id: `${kind}:${message}` } : {},
|
|
4680
|
+
...kind === "error" && data?.duration === void 0 ? { duration: ERROR_TOAST_MS } : {},
|
|
4681
|
+
...data
|
|
4682
|
+
};
|
|
4683
|
+
}
|
|
4684
|
+
var typed = (kind) => (message, data) => import_sonner.toast[kind](message, withDefaults(kind, message, data));
|
|
4685
|
+
var toast = Object.assign(
|
|
4686
|
+
(message, data) => (0, import_sonner.toast)(message, data),
|
|
4687
|
+
import_sonner.toast,
|
|
4688
|
+
{
|
|
4689
|
+
success: typed("success"),
|
|
4690
|
+
info: typed("info"),
|
|
4691
|
+
warning: typed("warning"),
|
|
4692
|
+
error: typed("error"),
|
|
4693
|
+
message: typed("message")
|
|
4694
|
+
}
|
|
4695
|
+
);
|
|
4653
4696
|
|
|
4654
4697
|
// src/components/typography.tsx
|
|
4655
4698
|
var React50 = __toESM(require("react"), 1);
|
|
@@ -5097,6 +5140,7 @@ function useImpersonation(token) {
|
|
|
5097
5140
|
DropdownMenuSubContent,
|
|
5098
5141
|
DropdownMenuSubTrigger,
|
|
5099
5142
|
DropdownMenuTrigger,
|
|
5143
|
+
ERROR_TOAST_MS,
|
|
5100
5144
|
EmptyState,
|
|
5101
5145
|
EmptyStateActions,
|
|
5102
5146
|
FileInput,
|
|
@@ -5222,6 +5266,8 @@ function useImpersonation(token) {
|
|
|
5222
5266
|
StepperItem,
|
|
5223
5267
|
SuccessIcon,
|
|
5224
5268
|
Switch,
|
|
5269
|
+
TOAST_BOTTOM_OFFSET,
|
|
5270
|
+
TOAST_DURATION_MS,
|
|
5225
5271
|
Table,
|
|
5226
5272
|
TableBody,
|
|
5227
5273
|
TableCaption,
|