ag-common 0.0.814 → 0.0.839

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.
@@ -1,3 +1,4 @@
1
1
  export * from './DarkMode';
2
2
  export * from './HeadersRaw';
3
3
  export * from './Markdown';
4
+ export * from './shadcn';
@@ -17,3 +17,4 @@ Object.defineProperty(exports, "__esModule", { value: true });
17
17
  __exportStar(require("./DarkMode"), exports);
18
18
  __exportStar(require("./HeadersRaw"), exports);
19
19
  __exportStar(require("./Markdown"), exports);
20
+ __exportStar(require("./shadcn"), exports);
@@ -6,6 +6,7 @@ export * from './card';
6
6
  export * from './checkbox';
7
7
  export * from './dialog';
8
8
  export * from './divider';
9
+ export * from './dropdown-list';
9
10
  export * from './dropdown-menu';
10
11
  export * from './input';
11
12
  export * from './input-selector';
@@ -22,6 +22,7 @@ __exportStar(require("./card"), exports);
22
22
  __exportStar(require("./checkbox"), exports);
23
23
  __exportStar(require("./dialog"), exports);
24
24
  __exportStar(require("./divider"), exports);
25
+ __exportStar(require("./dropdown-list"), exports);
25
26
  __exportStar(require("./dropdown-menu"), exports);
26
27
  __exportStar(require("./input"), exports);
27
28
  __exportStar(require("./input-selector"), exports);
@@ -0,0 +1,13 @@
1
+ import React from 'react';
2
+ interface ToastOptions {
3
+ type?: 'success' | 'error' | 'warning' | 'info';
4
+ duration?: number;
5
+ title?: string;
6
+ }
7
+ export declare const dismissToast: (id: number) => void;
8
+ export declare const toast: (message: string, options?: ToastOptions) => void;
9
+ export declare const addToast: (message: string, options?: {
10
+ appearance?: string;
11
+ }) => void;
12
+ export declare const Toaster: () => React.JSX.Element;
13
+ export {};
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ 'use client';
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.Toaster = exports.addToast = exports.toast = exports.dismissToast = void 0;
8
+ const lucide_react_1 = require("lucide-react");
9
+ const react_1 = __importDefault(require("react"));
10
+ const react_2 = require("react");
11
+ // Global state for toasts
12
+ let toasts = [];
13
+ let listeners = [];
14
+ // Notify all listeners of state changes
15
+ const notifyListeners = () => {
16
+ listeners.forEach((listener) => listener([...toasts]));
17
+ };
18
+ const dismissToast = (id) => {
19
+ toasts = toasts.filter((t) => t.id !== id);
20
+ notifyListeners();
21
+ };
22
+ exports.dismissToast = dismissToast;
23
+ // Toast controller function
24
+ const toast = (message, options = {}) => {
25
+ const id = Date.now();
26
+ const newToast = {
27
+ id,
28
+ message,
29
+ options: Object.assign({ duration: 5000 }, options),
30
+ createdAt: Date.now(),
31
+ };
32
+ toasts = [...toasts, newToast];
33
+ notifyListeners();
34
+ };
35
+ exports.toast = toast;
36
+ // Compatibility function for ag-common addToast API
37
+ const addToast = (message, options = {}) => {
38
+ let type;
39
+ if (options.appearance === 'success') {
40
+ type = 'success';
41
+ }
42
+ else if (options.appearance === 'error') {
43
+ type = 'error';
44
+ }
45
+ else if (options.appearance === 'warning') {
46
+ type = 'warning';
47
+ }
48
+ else {
49
+ type = undefined;
50
+ }
51
+ (0, exports.toast)(message, { type });
52
+ };
53
+ exports.addToast = addToast;
54
+ const ToastIcon = ({ type }) => {
55
+ if (!type)
56
+ return null;
57
+ switch (type) {
58
+ case 'success':
59
+ return react_1.default.createElement(lucide_react_1.CheckCircle, { className: "w-6 h-6 text-green-500" });
60
+ case 'error':
61
+ return react_1.default.createElement(lucide_react_1.XCircle, { className: "w-6 h-6 text-red-500" });
62
+ case 'warning':
63
+ return react_1.default.createElement(lucide_react_1.AlertCircle, { className: "w-6 h-6 text-yellow-500" });
64
+ case 'info':
65
+ return react_1.default.createElement(lucide_react_1.Info, { className: "w-6 h-6 text-blue-500" });
66
+ default:
67
+ return null;
68
+ }
69
+ };
70
+ const ToastItem = ({ toast }) => {
71
+ const [isPaused, setIsPaused] = (0, react_2.useState)(false);
72
+ const remainingTime = (0, react_2.useRef)(toast.options.duration || 0);
73
+ const startTime = (0, react_2.useRef)(0);
74
+ const timerId = (0, react_2.useRef)(null);
75
+ (0, react_2.useEffect)(() => {
76
+ // If duration is infinite or 0, we don't auto-dismiss
77
+ if (!remainingTime.current || remainingTime.current === Infinity)
78
+ return;
79
+ if (!isPaused) {
80
+ startTime.current = Date.now();
81
+ timerId.current = setTimeout(() => {
82
+ (0, exports.dismissToast)(toast.id);
83
+ }, remainingTime.current);
84
+ }
85
+ return () => {
86
+ if (timerId.current)
87
+ clearTimeout(timerId.current);
88
+ };
89
+ }, [isPaused, toast.id]);
90
+ const handleMouseEnter = () => {
91
+ setIsPaused(true);
92
+ if (timerId.current) {
93
+ clearTimeout(timerId.current);
94
+ const elapsed = Date.now() - startTime.current;
95
+ remainingTime.current = Math.max(0, remainingTime.current - elapsed);
96
+ }
97
+ };
98
+ const handleMouseLeave = () => {
99
+ setIsPaused(false);
100
+ };
101
+ const type = toast.options.type || 'info';
102
+ let progressColor = 'bg-blue-100/50';
103
+ let borderColor = 'bg-blue-500';
104
+ if (type === 'success') {
105
+ progressColor = 'bg-green-100/80';
106
+ borderColor = 'bg-green-500';
107
+ }
108
+ if (type === 'error') {
109
+ progressColor = 'bg-red-100/80';
110
+ borderColor = 'bg-red-500';
111
+ }
112
+ if (type === 'warning') {
113
+ progressColor = 'bg-yellow-100/80';
114
+ borderColor = 'bg-yellow-500';
115
+ }
116
+ return (react_1.default.createElement("div", { className: "group flex flex-col relative overflow-hidden bg-white rounded-md shadow-md min-w-[320px] max-w-sm animate-in slide-in-from-right-full pointer-events-auto", onMouseEnter: handleMouseEnter, onMouseLeave: handleMouseLeave },
117
+ toast.options.duration && toast.options.duration > 0 && (react_1.default.createElement("div", { className: `absolute inset-0 z-0 ${progressColor}`, style: {
118
+ animation: `toast-progress ${toast.options.duration}ms linear forwards`,
119
+ animationPlayState: isPaused ? 'paused' : 'running',
120
+ } })),
121
+ react_1.default.createElement("div", { className: "relative z-10 flex w-full" },
122
+ react_1.default.createElement("div", { className: `w-1.5 shrink-0 ${borderColor}` }),
123
+ react_1.default.createElement("div", { className: "flex p-4 w-full items-start gap-3" },
124
+ react_1.default.createElement("div", { className: "mt-0.5 shrink-0" },
125
+ react_1.default.createElement(ToastIcon, { type: type })),
126
+ react_1.default.createElement("div", { className: "flex flex-col flex-1 gap-1" },
127
+ toast.options.title && (react_1.default.createElement("h3", { className: "font-bold text-gray-900 leading-tight" }, toast.options.title)),
128
+ react_1.default.createElement("p", { className: `text-sm text-gray-600 leading-snug ${!toast.options.title ? 'font-medium text-gray-900' : ''}` }, toast.message)),
129
+ react_1.default.createElement("button", { onClick: () => (0, exports.dismissToast)(toast.id), className: "text-gray-400 hover:text-gray-600 transition-colors shrink-0 cursor-pointer" },
130
+ react_1.default.createElement(lucide_react_1.X, { className: "w-4 h-4" }))))));
131
+ };
132
+ const Toaster = () => {
133
+ const [localToasts, setLocalToasts] = (0, react_2.useState)([]);
134
+ (0, react_2.useEffect)(() => {
135
+ const listener = (newToasts) => {
136
+ setLocalToasts(newToasts);
137
+ };
138
+ listeners.push(listener);
139
+ return () => {
140
+ listeners = listeners.filter((l) => l !== listener);
141
+ };
142
+ }, []);
143
+ return (react_1.default.createElement("div", { className: "fixed bottom-4 right-4 flex flex-col justify-end gap-3 font-sans pointer-events-none", "data-type": "toasts", style: { zIndex: 1000 } },
144
+ localToasts.map((toast) => (react_1.default.createElement(ToastItem, { key: toast.id, toast: toast }))),
145
+ react_1.default.createElement("style", { dangerouslySetInnerHTML: {
146
+ __html: `
147
+ @keyframes toast-progress {
148
+ from { width: 100%; }
149
+ to { width: 0%; }
150
+ }
151
+ `,
152
+ } })));
153
+ };
154
+ exports.Toaster = Toaster;
package/package.json CHANGED
@@ -1,20 +1,17 @@
1
1
  {
2
- "version": "0.0.814",
2
+ "version": "0.0.839",
3
3
  "name": "ag-common",
4
4
  "main": "./dist/index.js",
5
5
  "types": "./dist/index.d.ts",
6
6
  "author": "admin@gec.dev",
7
7
  "license": "ISC",
8
- "scripts": {
9
- "preinstall": "npx only-allow pnpm",
10
- "format": "eslint src --fix && eslint stories --fix",
11
- "lint:tsc": "tsc --noEmit",
12
- "lint:eslint": "eslint src",
13
- "lint": "pnpm run /^lint:/",
14
- "build": "rimraf dist && tsc -p tsconfig.build.json",
15
- "start": "cross-env BROWSER=none cross-env storybook dev -p 6006",
16
- "build-storybook": "storybook build -o docs --quiet",
17
- "test": "globstar -- node --import tsx --test \"src/**/*.test.ts\""
8
+ "repository": {
9
+ "type": "git",
10
+ "url": "https://github.com/andreigec/ag-common.git"
11
+ },
12
+ "publishConfig": {
13
+ "access": "public",
14
+ "provenance": false
18
15
  },
19
16
  "dependencies": {
20
17
  "eslint": "^9.37.0",
@@ -85,5 +82,16 @@
85
82
  "dist/**/*",
86
83
  "README.md",
87
84
  "LICENSE.md"
88
- ]
89
- }
85
+ ],
86
+ "scripts": {
87
+ "preinstall": "npx only-allow pnpm",
88
+ "format": "eslint src --fix && eslint stories --fix",
89
+ "lint:tsc": "tsc --noEmit",
90
+ "lint:eslint": "eslint src",
91
+ "lint": "pnpm run /^lint:/",
92
+ "build": "rimraf dist && tsc -p tsconfig.build.json",
93
+ "start": "cross-env BROWSER=none cross-env storybook dev -p 6006",
94
+ "build-storybook": "storybook build -o docs --quiet",
95
+ "test": "globstar -- node --import tsx --test \"src/**/*.test.ts\""
96
+ }
97
+ }
@@ -1,3 +0,0 @@
1
- export * from './toast';
2
- export * from './toaster';
3
- export * from './use-toast';
@@ -1,19 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./toast"), exports);
18
- __exportStar(require("./toaster"), exports);
19
- __exportStar(require("./use-toast"), exports);
@@ -1,46 +0,0 @@
1
- import * as ToastPrimitives from '@radix-ui/react-toast';
2
- import { type VariantProps } from 'class-variance-authority';
3
- import React from 'react';
4
- declare const ToastProvider: React.FC<ToastPrimitives.ToastProviderProps>;
5
- declare const ToastViewport: {
6
- ({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Viewport> & {
7
- ref?: React.Ref<React.ElementRef<typeof ToastPrimitives.Viewport>>;
8
- }): React.JSX.Element;
9
- displayName: string | undefined;
10
- };
11
- declare const toastVariants: (props?: ({
12
- variant?: "default" | "destructive" | null | undefined;
13
- } & import("class-variance-authority/dist/types").ClassProp) | undefined) => string;
14
- declare const Toast: {
15
- ({ className, variant, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Root> & VariantProps<typeof toastVariants> & {
16
- ref?: React.Ref<React.ElementRef<typeof ToastPrimitives.Root>>;
17
- }): React.JSX.Element;
18
- displayName: string | undefined;
19
- };
20
- declare const ToastAction: {
21
- ({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Action> & {
22
- ref?: React.Ref<React.ElementRef<typeof ToastPrimitives.Action>>;
23
- }): React.JSX.Element;
24
- displayName: string | undefined;
25
- };
26
- declare const ToastClose: {
27
- ({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Close> & {
28
- ref?: React.Ref<React.ElementRef<typeof ToastPrimitives.Close>>;
29
- }): React.JSX.Element;
30
- displayName: string | undefined;
31
- };
32
- declare const ToastTitle: {
33
- ({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Title> & {
34
- ref?: React.Ref<React.ElementRef<typeof ToastPrimitives.Title>>;
35
- }): React.JSX.Element;
36
- displayName: string | undefined;
37
- };
38
- declare const ToastDescription: {
39
- ({ className, ...props }: React.ComponentPropsWithoutRef<typeof ToastPrimitives.Description> & {
40
- ref?: React.Ref<React.ElementRef<typeof ToastPrimitives.Description>>;
41
- }): React.JSX.Element;
42
- displayName: string | undefined;
43
- };
44
- type ToastProps = React.ComponentPropsWithoutRef<typeof Toast>;
45
- type ToastActionElement = React.ReactElement<typeof ToastAction>;
46
- export { Toast, ToastAction, type ToastActionElement, ToastClose, ToastDescription, type ToastProps, ToastProvider, ToastTitle, ToastViewport, };
@@ -1,111 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || (function () {
19
- var ownKeys = function(o) {
20
- ownKeys = Object.getOwnPropertyNames || function (o) {
21
- var ar = [];
22
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
- return ar;
24
- };
25
- return ownKeys(o);
26
- };
27
- return function (mod) {
28
- if (mod && mod.__esModule) return mod;
29
- var result = {};
30
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
- __setModuleDefault(result, mod);
32
- return result;
33
- };
34
- })();
35
- var __rest = (this && this.__rest) || function (s, e) {
36
- var t = {};
37
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
38
- t[p] = s[p];
39
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
40
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
41
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
42
- t[p[i]] = s[p[i]];
43
- }
44
- return t;
45
- };
46
- var __importDefault = (this && this.__importDefault) || function (mod) {
47
- return (mod && mod.__esModule) ? mod : { "default": mod };
48
- };
49
- Object.defineProperty(exports, "__esModule", { value: true });
50
- exports.ToastViewport = exports.ToastTitle = exports.ToastProvider = exports.ToastDescription = exports.ToastClose = exports.ToastAction = exports.Toast = void 0;
51
- const ToastPrimitives = __importStar(require("@radix-ui/react-toast"));
52
- const class_variance_authority_1 = require("class-variance-authority");
53
- const lucide_react_1 = require("lucide-react");
54
- const react_1 = __importDefault(require("react"));
55
- const utils_1 = require("../../../helpers/utils");
56
- const ToastProvider = ToastPrimitives.Provider;
57
- exports.ToastProvider = ToastProvider;
58
- const ToastViewport = (_a) => {
59
- var { className } = _a, props = __rest(_a, ["className"]);
60
- const { ref } = props, restProps = __rest(props, ["ref"]);
61
- return (react_1.default.createElement(ToastPrimitives.Viewport, Object.assign({ ref: ref, className: (0, utils_1.cn)('fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]', className) }, restProps)));
62
- };
63
- exports.ToastViewport = ToastViewport;
64
- ToastViewport.displayName = ToastPrimitives.Viewport.displayName;
65
- const toastVariants = (0, class_variance_authority_1.cva)('group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full', {
66
- variants: {
67
- variant: {
68
- default: 'border bg-background text-foreground',
69
- destructive: 'destructive group border-destructive bg-destructive text-destructive-foreground',
70
- },
71
- },
72
- defaultVariants: {
73
- variant: 'default',
74
- },
75
- });
76
- const Toast = (_a) => {
77
- var { className, variant } = _a, props = __rest(_a, ["className", "variant"]);
78
- const { ref } = props, restProps = __rest(props, ["ref"]);
79
- return (react_1.default.createElement(ToastPrimitives.Root, Object.assign({ ref: ref, className: (0, utils_1.cn)(toastVariants({ variant }), className) }, restProps)));
80
- };
81
- exports.Toast = Toast;
82
- Toast.displayName = ToastPrimitives.Root.displayName;
83
- const ToastAction = (_a) => {
84
- var { className } = _a, props = __rest(_a, ["className"]);
85
- const { ref } = props, restProps = __rest(props, ["ref"]);
86
- return (react_1.default.createElement(ToastPrimitives.Action, Object.assign({ ref: ref, className: (0, utils_1.cn)('inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors hover:bg-secondary focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive', className) }, restProps)));
87
- };
88
- exports.ToastAction = ToastAction;
89
- ToastAction.displayName = ToastPrimitives.Action.displayName;
90
- const ToastClose = (_a) => {
91
- var { className } = _a, props = __rest(_a, ["className"]);
92
- const { ref } = props, restProps = __rest(props, ["ref"]);
93
- return (react_1.default.createElement(ToastPrimitives.Close, Object.assign({ ref: ref, className: (0, utils_1.cn)('absolute right-2 top-2 rounded-md p-1 text-foreground/50 opacity-0 transition-opacity hover:text-foreground focus:opacity-100 focus:outline-none focus:ring-2 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600', className), "toast-close": "" }, restProps),
94
- react_1.default.createElement(lucide_react_1.X, { className: "h-4 w-4" })));
95
- };
96
- exports.ToastClose = ToastClose;
97
- ToastClose.displayName = ToastPrimitives.Close.displayName;
98
- const ToastTitle = (_a) => {
99
- var { className } = _a, props = __rest(_a, ["className"]);
100
- const { ref } = props, restProps = __rest(props, ["ref"]);
101
- return (react_1.default.createElement(ToastPrimitives.Title, Object.assign({ ref: ref, className: (0, utils_1.cn)('text-sm font-semibold', className) }, restProps)));
102
- };
103
- exports.ToastTitle = ToastTitle;
104
- ToastTitle.displayName = ToastPrimitives.Title.displayName;
105
- const ToastDescription = (_a) => {
106
- var { className } = _a, props = __rest(_a, ["className"]);
107
- const { ref } = props, restProps = __rest(props, ["ref"]);
108
- return (react_1.default.createElement(ToastPrimitives.Description, Object.assign({ ref: ref, className: (0, utils_1.cn)('text-sm opacity-90', className) }, restProps)));
109
- };
110
- exports.ToastDescription = ToastDescription;
111
- ToastDescription.displayName = ToastPrimitives.Description.displayName;
@@ -1,2 +0,0 @@
1
- import React from 'react';
2
- export declare function Toaster(): React.JSX.Element;
@@ -1,35 +0,0 @@
1
- "use strict";
2
- 'use client';
3
- var __rest = (this && this.__rest) || function (s, e) {
4
- var t = {};
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
6
- t[p] = s[p];
7
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
8
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
9
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
10
- t[p[i]] = s[p[i]];
11
- }
12
- return t;
13
- };
14
- var __importDefault = (this && this.__importDefault) || function (mod) {
15
- return (mod && mod.__esModule) ? mod : { "default": mod };
16
- };
17
- Object.defineProperty(exports, "__esModule", { value: true });
18
- exports.Toaster = Toaster;
19
- const react_1 = __importDefault(require("react"));
20
- const toast_1 = require("./toast");
21
- const use_toast_1 = require("./use-toast");
22
- function Toaster() {
23
- const { toasts } = (0, use_toast_1.useToast)();
24
- return (react_1.default.createElement(toast_1.ToastProvider, null,
25
- toasts.map(function (_a) {
26
- var { id, title, description, action } = _a, props = __rest(_a, ["id", "title", "description", "action"]);
27
- return (react_1.default.createElement(toast_1.Toast, Object.assign({ key: id }, props),
28
- react_1.default.createElement("div", { className: "grid gap-1" },
29
- title && react_1.default.createElement(toast_1.ToastTitle, null, title),
30
- description && (react_1.default.createElement(toast_1.ToastDescription, null, description))),
31
- action,
32
- react_1.default.createElement(toast_1.ToastClose, null)));
33
- }),
34
- react_1.default.createElement(toast_1.ToastViewport, null)));
35
- }
@@ -1,44 +0,0 @@
1
- import * as React from 'react';
2
- import type { ToastActionElement, ToastProps } from './toast';
3
- type ToasterToast = ToastProps & {
4
- id: string;
5
- title?: React.ReactNode;
6
- description?: React.ReactNode;
7
- action?: ToastActionElement;
8
- };
9
- declare const actionTypes: {
10
- readonly ADD_TOAST: "ADD_TOAST";
11
- readonly UPDATE_TOAST: "UPDATE_TOAST";
12
- readonly DISMISS_TOAST: "DISMISS_TOAST";
13
- readonly REMOVE_TOAST: "REMOVE_TOAST";
14
- };
15
- type ActionType = typeof actionTypes;
16
- type Action = {
17
- type: ActionType['ADD_TOAST'];
18
- toast: ToasterToast;
19
- } | {
20
- type: ActionType['UPDATE_TOAST'];
21
- toast: Partial<ToasterToast>;
22
- } | {
23
- type: ActionType['DISMISS_TOAST'];
24
- toastId?: ToasterToast['id'];
25
- } | {
26
- type: ActionType['REMOVE_TOAST'];
27
- toastId?: ToasterToast['id'];
28
- };
29
- interface State {
30
- toasts: ToasterToast[];
31
- }
32
- export declare const reducer: (state: State, action: Action) => State;
33
- type Toast = Omit<ToasterToast, 'id'>;
34
- declare function toast({ ...props }: Toast): {
35
- id: string;
36
- dismiss: () => void;
37
- update: (props: ToasterToast) => void;
38
- };
39
- declare function useToast(): {
40
- toast: typeof toast;
41
- dismiss: (toastId?: string) => void;
42
- toasts: ToasterToast[];
43
- };
44
- export { toast, useToast };
@@ -1,150 +0,0 @@
1
- "use strict";
2
- 'use client';
3
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
- if (k2 === undefined) k2 = k;
5
- var desc = Object.getOwnPropertyDescriptor(m, k);
6
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
- desc = { enumerable: true, get: function() { return m[k]; } };
8
- }
9
- Object.defineProperty(o, k2, desc);
10
- }) : (function(o, m, k, k2) {
11
- if (k2 === undefined) k2 = k;
12
- o[k2] = m[k];
13
- }));
14
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
- Object.defineProperty(o, "default", { enumerable: true, value: v });
16
- }) : function(o, v) {
17
- o["default"] = v;
18
- });
19
- var __importStar = (this && this.__importStar) || (function () {
20
- var ownKeys = function(o) {
21
- ownKeys = Object.getOwnPropertyNames || function (o) {
22
- var ar = [];
23
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
- return ar;
25
- };
26
- return ownKeys(o);
27
- };
28
- return function (mod) {
29
- if (mod && mod.__esModule) return mod;
30
- var result = {};
31
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
- __setModuleDefault(result, mod);
33
- return result;
34
- };
35
- })();
36
- var __rest = (this && this.__rest) || function (s, e) {
37
- var t = {};
38
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
39
- t[p] = s[p];
40
- if (s != null && typeof Object.getOwnPropertySymbols === "function")
41
- for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
42
- if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
43
- t[p[i]] = s[p[i]];
44
- }
45
- return t;
46
- };
47
- Object.defineProperty(exports, "__esModule", { value: true });
48
- exports.reducer = void 0;
49
- exports.toast = toast;
50
- exports.useToast = useToast;
51
- const React = __importStar(require("react"));
52
- const TOAST_LIMIT = 1;
53
- const TOAST_REMOVE_DELAY = 1000000;
54
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
55
- const actionTypes = {
56
- ADD_TOAST: 'ADD_TOAST',
57
- UPDATE_TOAST: 'UPDATE_TOAST',
58
- DISMISS_TOAST: 'DISMISS_TOAST',
59
- REMOVE_TOAST: 'REMOVE_TOAST',
60
- };
61
- let count = 0;
62
- function genId() {
63
- count = (count + 1) % Number.MAX_SAFE_INTEGER;
64
- return count.toString();
65
- }
66
- const toastTimeouts = new Map();
67
- const addToRemoveQueue = (toastId) => {
68
- if (toastTimeouts.has(toastId)) {
69
- return;
70
- }
71
- const timeout = setTimeout(() => {
72
- toastTimeouts.delete(toastId);
73
- dispatch({
74
- type: 'REMOVE_TOAST',
75
- toastId,
76
- });
77
- }, TOAST_REMOVE_DELAY);
78
- toastTimeouts.set(toastId, timeout);
79
- };
80
- const reducer = (state, action) => {
81
- switch (action.type) {
82
- case 'ADD_TOAST':
83
- return Object.assign(Object.assign({}, state), { toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT) });
84
- case 'UPDATE_TOAST':
85
- return Object.assign(Object.assign({}, state), { toasts: state.toasts.map((t) => t.id === action.toast.id ? Object.assign(Object.assign({}, t), action.toast) : t) });
86
- case 'DISMISS_TOAST': {
87
- const { toastId } = action;
88
- // ! Side effects ! - This could be extracted into a dismissToast() action,
89
- // but I'll keep it here for simplicity
90
- if (toastId) {
91
- addToRemoveQueue(toastId);
92
- }
93
- else {
94
- state.toasts.forEach((toast) => {
95
- addToRemoveQueue(toast.id);
96
- });
97
- }
98
- return Object.assign(Object.assign({}, state), { toasts: state.toasts.map((t) => t.id === toastId || toastId === undefined
99
- ? Object.assign(Object.assign({}, t), { open: false }) : t) });
100
- }
101
- case 'REMOVE_TOAST':
102
- if (action.toastId === undefined) {
103
- return Object.assign(Object.assign({}, state), { toasts: [] });
104
- }
105
- return Object.assign(Object.assign({}, state), { toasts: state.toasts.filter((t) => t.id !== action.toastId) });
106
- }
107
- };
108
- exports.reducer = reducer;
109
- const listeners = [];
110
- let memoryState = { toasts: [] };
111
- function dispatch(action) {
112
- memoryState = (0, exports.reducer)(memoryState, action);
113
- listeners.forEach((listener) => {
114
- listener(memoryState);
115
- });
116
- }
117
- function toast(_a) {
118
- var props = __rest(_a, []);
119
- const id = genId();
120
- const update = (props) => dispatch({
121
- type: 'UPDATE_TOAST',
122
- toast: Object.assign(Object.assign({}, props), { id }),
123
- });
124
- const dismiss = () => dispatch({ type: 'DISMISS_TOAST', toastId: id });
125
- dispatch({
126
- type: 'ADD_TOAST',
127
- toast: Object.assign(Object.assign({}, props), { id, open: true, onOpenChange: (open) => {
128
- if (!open)
129
- dismiss();
130
- } }),
131
- });
132
- return {
133
- id,
134
- dismiss,
135
- update,
136
- };
137
- }
138
- function useToast() {
139
- const [state, setState] = React.useState(memoryState);
140
- React.useEffect(() => {
141
- listeners.push(setState);
142
- return () => {
143
- const index = listeners.indexOf(setState);
144
- if (index > -1) {
145
- listeners.splice(index, 1);
146
- }
147
- };
148
- }, [state]);
149
- return Object.assign(Object.assign({}, state), { toast, dismiss: (toastId) => dispatch({ type: 'DISMISS_TOAST', toastId }) });
150
- }