@pos-360/horizon 0.3.0 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chunk-BNOZCJOK.mjs +53 -0
- package/dist/chunk-BNOZCJOK.mjs.map +1 -0
- package/dist/chunk-HQDEEBXV.js +55 -0
- package/dist/chunk-HQDEEBXV.js.map +1 -0
- package/dist/{chunk-TQPMV72P.mjs → chunk-IJCKCS4A.mjs} +83 -26
- package/dist/chunk-IJCKCS4A.mjs.map +1 -0
- package/dist/{chunk-BWR6DSQJ.js → chunk-XAPJWVE6.js} +82 -25
- package/dist/chunk-XAPJWVE6.js.map +1 -0
- package/dist/enhanced.d.mts +3 -11
- package/dist/enhanced.d.ts +3 -11
- package/dist/enhanced.js +12 -12
- package/dist/enhanced.mjs +1 -1
- package/dist/hooks.d.mts +30 -1
- package/dist/hooks.d.ts +30 -1
- package/dist/hooks.js +7 -1
- package/dist/hooks.mjs +1 -1
- package/dist/index.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +17 -13
- package/dist/index.mjs +2 -2
- package/dist/toast-cr-vEOyB.d.mts +18 -0
- package/dist/toast-cr-vEOyB.d.ts +18 -0
- package/package.json +1 -1
- package/dist/chunk-AA25LTS4.js +0 -4
- package/dist/chunk-AA25LTS4.js.map +0 -1
- package/dist/chunk-BWR6DSQJ.js.map +0 -1
- package/dist/chunk-TQPMV72P.mjs.map +0 -1
- package/dist/chunk-Y6G4VKJ3.mjs +0 -3
- package/dist/chunk-Y6G4VKJ3.mjs.map +0 -1
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { useState, useCallback } from 'react';
|
|
2
|
+
|
|
3
|
+
function useToast() {
|
|
4
|
+
const [toast, setToast] = useState(null);
|
|
5
|
+
const [isVisible, setIsVisible] = useState(false);
|
|
6
|
+
const showToast = useCallback((toastData) => {
|
|
7
|
+
setToast(toastData);
|
|
8
|
+
setIsVisible(true);
|
|
9
|
+
}, []);
|
|
10
|
+
const showSuccess = useCallback(
|
|
11
|
+
(message, options) => {
|
|
12
|
+
showToast({ message, variant: "success", ...options });
|
|
13
|
+
},
|
|
14
|
+
[showToast]
|
|
15
|
+
);
|
|
16
|
+
const showError = useCallback(
|
|
17
|
+
(message, options) => {
|
|
18
|
+
showToast({ message, variant: "danger", ...options });
|
|
19
|
+
},
|
|
20
|
+
[showToast]
|
|
21
|
+
);
|
|
22
|
+
const showWarning = useCallback(
|
|
23
|
+
(message, options) => {
|
|
24
|
+
showToast({ message, variant: "caution", ...options });
|
|
25
|
+
},
|
|
26
|
+
[showToast]
|
|
27
|
+
);
|
|
28
|
+
const showInfo = useCallback(
|
|
29
|
+
(message, options) => {
|
|
30
|
+
showToast({ message, variant: "neutral", ...options });
|
|
31
|
+
},
|
|
32
|
+
[showToast]
|
|
33
|
+
);
|
|
34
|
+
const hideToast = useCallback(() => {
|
|
35
|
+
setIsVisible(false);
|
|
36
|
+
setTimeout(() => {
|
|
37
|
+
setToast(null);
|
|
38
|
+
}, 300);
|
|
39
|
+
}, []);
|
|
40
|
+
return {
|
|
41
|
+
toast: toast ? { ...toast, isVisible, onDismiss: hideToast } : null,
|
|
42
|
+
showToast,
|
|
43
|
+
showSuccess,
|
|
44
|
+
showError,
|
|
45
|
+
showWarning,
|
|
46
|
+
showInfo,
|
|
47
|
+
hideToast
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { useToast };
|
|
52
|
+
//# sourceMappingURL=chunk-BNOZCJOK.mjs.map
|
|
53
|
+
//# sourceMappingURL=chunk-BNOZCJOK.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-toast.ts"],"names":[],"mappings":";;AAYO,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,SAA2B,IAAI,CAAA;AACzD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,SAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,CAAC,SAAA,KAAyB;AACtD,IAAA,QAAA,CAAS,SAAS,CAAA;AAClB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAc,WAAA;AAAA,IAClB,CAAC,SAAiB,OAAA,KAAqD;AACrE,MAAA,SAAA,CAAU,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,SAAA,GAAY,WAAA;AAAA,IAChB,CAAC,SAAiB,OAAA,KAAqD;AACrE,MAAA,SAAA,CAAU,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,GAAG,SAAS,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,WAAA,GAAc,WAAA;AAAA,IAClB,CAAC,SAAiB,OAAA,KAAqD;AACrE,MAAA,SAAA,CAAU,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,QAAA,GAAW,WAAA;AAAA,IACf,CAAC,SAAiB,OAAA,KAAqD;AACrE,MAAA,SAAA,CAAU,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,SAAA,GAAY,YAAY,MAAM;AAClC,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,GAAG,GAAG,CAAA;AAAA,EACR,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAQ,EAAE,GAAG,OAAO,SAAA,EAAW,SAAA,EAAW,WAAU,GAAI,IAAA;AAAA,IAC/D,SAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF","file":"chunk-BNOZCJOK.mjs","sourcesContent":["import { useState, useCallback } from \"react\";\nimport type { ToastVariant, ToastAction } from \"@/components/enhanced/toast/toast\";\n\nexport interface ToastData {\n message: string;\n variant?: ToastVariant;\n duration?: number;\n icon?: React.ReactNode | boolean;\n action?: ToastAction;\n expandedContent?: React.ReactNode;\n}\n\nexport function useToast() {\n const [toast, setToast] = useState<ToastData | null>(null);\n const [isVisible, setIsVisible] = useState(false);\n\n const showToast = useCallback((toastData: ToastData) => {\n setToast(toastData);\n setIsVisible(true);\n }, []);\n\n const showSuccess = useCallback(\n (message: string, options?: Omit<ToastData, \"message\" | \"variant\">) => {\n showToast({ message, variant: \"success\", ...options });\n },\n [showToast]\n );\n\n const showError = useCallback(\n (message: string, options?: Omit<ToastData, \"message\" | \"variant\">) => {\n showToast({ message, variant: \"danger\", ...options });\n },\n [showToast]\n );\n\n const showWarning = useCallback(\n (message: string, options?: Omit<ToastData, \"message\" | \"variant\">) => {\n showToast({ message, variant: \"caution\", ...options });\n },\n [showToast]\n );\n\n const showInfo = useCallback(\n (message: string, options?: Omit<ToastData, \"message\" | \"variant\">) => {\n showToast({ message, variant: \"neutral\", ...options });\n },\n [showToast]\n );\n\n const hideToast = useCallback(() => {\n setIsVisible(false);\n setTimeout(() => {\n setToast(null);\n }, 300);\n }, []);\n\n return {\n toast: toast ? { ...toast, isVisible, onDismiss: hideToast } : null,\n showToast,\n showSuccess,\n showError,\n showWarning,\n showInfo,\n hideToast,\n };\n}\n"]}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('react');
|
|
4
|
+
|
|
5
|
+
function useToast() {
|
|
6
|
+
const [toast, setToast] = react.useState(null);
|
|
7
|
+
const [isVisible, setIsVisible] = react.useState(false);
|
|
8
|
+
const showToast = react.useCallback((toastData) => {
|
|
9
|
+
setToast(toastData);
|
|
10
|
+
setIsVisible(true);
|
|
11
|
+
}, []);
|
|
12
|
+
const showSuccess = react.useCallback(
|
|
13
|
+
(message, options) => {
|
|
14
|
+
showToast({ message, variant: "success", ...options });
|
|
15
|
+
},
|
|
16
|
+
[showToast]
|
|
17
|
+
);
|
|
18
|
+
const showError = react.useCallback(
|
|
19
|
+
(message, options) => {
|
|
20
|
+
showToast({ message, variant: "danger", ...options });
|
|
21
|
+
},
|
|
22
|
+
[showToast]
|
|
23
|
+
);
|
|
24
|
+
const showWarning = react.useCallback(
|
|
25
|
+
(message, options) => {
|
|
26
|
+
showToast({ message, variant: "caution", ...options });
|
|
27
|
+
},
|
|
28
|
+
[showToast]
|
|
29
|
+
);
|
|
30
|
+
const showInfo = react.useCallback(
|
|
31
|
+
(message, options) => {
|
|
32
|
+
showToast({ message, variant: "neutral", ...options });
|
|
33
|
+
},
|
|
34
|
+
[showToast]
|
|
35
|
+
);
|
|
36
|
+
const hideToast = react.useCallback(() => {
|
|
37
|
+
setIsVisible(false);
|
|
38
|
+
setTimeout(() => {
|
|
39
|
+
setToast(null);
|
|
40
|
+
}, 300);
|
|
41
|
+
}, []);
|
|
42
|
+
return {
|
|
43
|
+
toast: toast ? { ...toast, isVisible, onDismiss: hideToast } : null,
|
|
44
|
+
showToast,
|
|
45
|
+
showSuccess,
|
|
46
|
+
showError,
|
|
47
|
+
showWarning,
|
|
48
|
+
showInfo,
|
|
49
|
+
hideToast
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
exports.useToast = useToast;
|
|
54
|
+
//# sourceMappingURL=chunk-HQDEEBXV.js.map
|
|
55
|
+
//# sourceMappingURL=chunk-HQDEEBXV.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/use-toast.ts"],"names":["useState","useCallback"],"mappings":";;;;AAYO,SAAS,QAAA,GAAW;AACzB,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAIA,eAA2B,IAAI,CAAA;AACzD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,eAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,SAAA,GAAYC,iBAAA,CAAY,CAAC,SAAA,KAAyB;AACtD,IAAA,QAAA,CAAS,SAAS,CAAA;AAClB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,EACnB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAcA,iBAAA;AAAA,IAClB,CAAC,SAAiB,OAAA,KAAqD;AACrE,MAAA,SAAA,CAAU,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,SAAA,GAAYA,iBAAA;AAAA,IAChB,CAAC,SAAiB,OAAA,KAAqD;AACrE,MAAA,SAAA,CAAU,EAAE,OAAA,EAAS,OAAA,EAAS,QAAA,EAAU,GAAG,SAAS,CAAA;AAAA,IACtD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,WAAA,GAAcA,iBAAA;AAAA,IAClB,CAAC,SAAiB,OAAA,KAAqD;AACrE,MAAA,SAAA,CAAU,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,QAAA,GAAWA,iBAAA;AAAA,IACf,CAAC,SAAiB,OAAA,KAAqD;AACrE,MAAA,SAAA,CAAU,EAAE,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,GAAG,SAAS,CAAA;AAAA,IACvD,CAAA;AAAA,IACA,CAAC,SAAS;AAAA,GACZ;AAEA,EAAA,MAAM,SAAA,GAAYA,kBAAY,MAAM;AAClC,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf,GAAG,GAAG,CAAA;AAAA,EACR,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,KAAA,EAAO,QAAQ,EAAE,GAAG,OAAO,SAAA,EAAW,SAAA,EAAW,WAAU,GAAI,IAAA;AAAA,IAC/D,SAAA;AAAA,IACA,WAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF","file":"chunk-HQDEEBXV.js","sourcesContent":["import { useState, useCallback } from \"react\";\nimport type { ToastVariant, ToastAction } from \"@/components/enhanced/toast/toast\";\n\nexport interface ToastData {\n message: string;\n variant?: ToastVariant;\n duration?: number;\n icon?: React.ReactNode | boolean;\n action?: ToastAction;\n expandedContent?: React.ReactNode;\n}\n\nexport function useToast() {\n const [toast, setToast] = useState<ToastData | null>(null);\n const [isVisible, setIsVisible] = useState(false);\n\n const showToast = useCallback((toastData: ToastData) => {\n setToast(toastData);\n setIsVisible(true);\n }, []);\n\n const showSuccess = useCallback(\n (message: string, options?: Omit<ToastData, \"message\" | \"variant\">) => {\n showToast({ message, variant: \"success\", ...options });\n },\n [showToast]\n );\n\n const showError = useCallback(\n (message: string, options?: Omit<ToastData, \"message\" | \"variant\">) => {\n showToast({ message, variant: \"danger\", ...options });\n },\n [showToast]\n );\n\n const showWarning = useCallback(\n (message: string, options?: Omit<ToastData, \"message\" | \"variant\">) => {\n showToast({ message, variant: \"caution\", ...options });\n },\n [showToast]\n );\n\n const showInfo = useCallback(\n (message: string, options?: Omit<ToastData, \"message\" | \"variant\">) => {\n showToast({ message, variant: \"neutral\", ...options });\n },\n [showToast]\n );\n\n const hideToast = useCallback(() => {\n setIsVisible(false);\n setTimeout(() => {\n setToast(null);\n }, 300);\n }, []);\n\n return {\n toast: toast ? { ...toast, isVisible, onDismiss: hideToast } : null,\n showToast,\n showSuccess,\n showError,\n showWarning,\n showInfo,\n hideToast,\n };\n}\n"]}
|
|
@@ -3,7 +3,7 @@ import { motion, AnimatePresence } from 'framer-motion';
|
|
|
3
3
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
4
4
|
import * as React from 'react';
|
|
5
5
|
import { forwardRef, useState, useEffect } from 'react';
|
|
6
|
-
import { Info, ChevronDown, ChevronUp, LayoutGrid, List, Check, ExternalLink,
|
|
6
|
+
import { Info, ChevronDown, ChevronUp, LayoutGrid, List, Check, ExternalLink, X, Moon, Rocket, Star, Globe, Orbit, Sparkles, AlertTriangle } from 'lucide-react';
|
|
7
7
|
export { Globe, Moon, Orbit, Rocket, Sparkles, Star } from 'lucide-react';
|
|
8
8
|
|
|
9
9
|
var AnimatedButton = ({
|
|
@@ -173,7 +173,7 @@ var Input = forwardRef(
|
|
|
173
173
|
md: 16,
|
|
174
174
|
lg: 20
|
|
175
175
|
};
|
|
176
|
-
const
|
|
176
|
+
const variantStyles2 = {
|
|
177
177
|
default: "border bg-white/60 dark:bg-neutral-800/60 backdrop-blur-sm transition-colors duration-300 rounded-lg",
|
|
178
178
|
filled: "border-0 bg-neutral-50/60 dark:bg-neutral-700/60 backdrop-blur-sm transition-colors duration-300 rounded-lg"
|
|
179
179
|
};
|
|
@@ -185,7 +185,7 @@ var Input = forwardRef(
|
|
|
185
185
|
const inputClasses = `
|
|
186
186
|
${baseInputStyles}
|
|
187
187
|
${sizeStyles[size]}
|
|
188
|
-
${
|
|
188
|
+
${variantStyles2[variant]}
|
|
189
189
|
${stateStyles}
|
|
190
190
|
${disabledStyles}
|
|
191
191
|
${hasLeadingContent || isMobileType ? "pl-10" : ""}
|
|
@@ -195,7 +195,7 @@ var Input = forwardRef(
|
|
|
195
195
|
const selectClasses = `
|
|
196
196
|
${baseInputStyles}
|
|
197
197
|
${sizeStyles[size]}
|
|
198
|
-
${
|
|
198
|
+
${variantStyles2[variant]}
|
|
199
199
|
${stateStyles}
|
|
200
200
|
${disabledStyles}
|
|
201
201
|
${hasLeadingContent ? "pl-10" : ""}
|
|
@@ -829,7 +829,7 @@ var TextButton = ({
|
|
|
829
829
|
...buttonProps
|
|
830
830
|
}) => {
|
|
831
831
|
const baseStyles = `group inline-flex justify-center items-center gap-2 font-medium uppercase tracking-wide transition-all duration-200 ${disabled ? "cursor-not-allowed" : "cursor-pointer"}`;
|
|
832
|
-
const
|
|
832
|
+
const variantStyles2 = {
|
|
833
833
|
primary: "text-blue-600 hover:text-blue-700 focus:ring-blue-500",
|
|
834
834
|
secondary: "text-neutral-600 hover:text-neutral-700 focus:ring-neutral-500",
|
|
835
835
|
danger: "text-rose-600 hover:text-rose-700 focus:ring-rose-500",
|
|
@@ -846,7 +846,7 @@ var TextButton = ({
|
|
|
846
846
|
"button",
|
|
847
847
|
{
|
|
848
848
|
type,
|
|
849
|
-
className: `${baseStyles} ${
|
|
849
|
+
className: `${baseStyles} ${variantStyles2[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`,
|
|
850
850
|
onClick,
|
|
851
851
|
disabled,
|
|
852
852
|
...buttonProps,
|
|
@@ -858,15 +858,48 @@ var TextButton = ({
|
|
|
858
858
|
}
|
|
859
859
|
);
|
|
860
860
|
};
|
|
861
|
+
var variantStyles = {
|
|
862
|
+
neutral: {
|
|
863
|
+
container: "bg-neutral-50 dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700 text-neutral-800 dark:text-neutral-200",
|
|
864
|
+
icon: "text-neutral-600 dark:text-neutral-400",
|
|
865
|
+
progress: "bg-neutral-500 dark:bg-neutral-400"
|
|
866
|
+
},
|
|
867
|
+
danger: {
|
|
868
|
+
container: "bg-rose-50 dark:bg-rose-900/70 border-rose-200 dark:border-rose-700 text-rose-800 dark:text-rose-200",
|
|
869
|
+
icon: "text-rose-600 dark:text-rose-400",
|
|
870
|
+
progress: "bg-rose-500 dark:bg-rose-400"
|
|
871
|
+
},
|
|
872
|
+
caution: {
|
|
873
|
+
container: "bg-amber-50 dark:bg-amber-900/70 border-amber-200 dark:border-amber-700 text-amber-800 dark:text-amber-200",
|
|
874
|
+
icon: "text-amber-600 dark:text-amber-400",
|
|
875
|
+
progress: "bg-amber-500 dark:bg-amber-400"
|
|
876
|
+
},
|
|
877
|
+
success: {
|
|
878
|
+
container: "bg-green-50 dark:bg-green-900/70 border-green-200 dark:border-green-700 text-green-800 dark:text-green-200",
|
|
879
|
+
icon: "text-green-600 dark:text-green-400",
|
|
880
|
+
progress: "bg-green-500 dark:bg-green-400"
|
|
881
|
+
}
|
|
882
|
+
};
|
|
883
|
+
var defaultIcons = {
|
|
884
|
+
neutral: /* @__PURE__ */ jsx(Info, { className: "w-5 h-5" }),
|
|
885
|
+
danger: /* @__PURE__ */ jsx(AlertTriangle, { className: "w-5 h-5" }),
|
|
886
|
+
caution: /* @__PURE__ */ jsx(AlertTriangle, { className: "w-5 h-5" }),
|
|
887
|
+
success: /* @__PURE__ */ jsx(Check, { className: "w-5 h-5" })
|
|
888
|
+
};
|
|
861
889
|
var Toast = ({
|
|
862
890
|
message,
|
|
863
|
-
|
|
891
|
+
variant = "neutral",
|
|
864
892
|
duration = 5e3,
|
|
865
893
|
onDismiss,
|
|
866
|
-
isVisible
|
|
894
|
+
isVisible,
|
|
895
|
+
icon = true,
|
|
896
|
+
action = "dismissable",
|
|
897
|
+
expandedContent
|
|
867
898
|
}) => {
|
|
868
899
|
const [isDismissing, setIsDismissing] = useState(false);
|
|
900
|
+
const [isExpanded, setIsExpanded] = useState(false);
|
|
869
901
|
const [progressWidth, setProgressWidth] = useState(100);
|
|
902
|
+
const styles = variantStyles[variant];
|
|
870
903
|
useEffect(() => {
|
|
871
904
|
if (isVisible && !isDismissing) {
|
|
872
905
|
const timer = setTimeout(() => {
|
|
@@ -881,6 +914,7 @@ var Toast = ({
|
|
|
881
914
|
useEffect(() => {
|
|
882
915
|
if (isVisible) {
|
|
883
916
|
setIsDismissing(false);
|
|
917
|
+
setIsExpanded(false);
|
|
884
918
|
setProgressWidth(0);
|
|
885
919
|
}
|
|
886
920
|
}, [isVisible]);
|
|
@@ -896,42 +930,65 @@ var Toast = ({
|
|
|
896
930
|
}
|
|
897
931
|
}, [isVisible, isDismissing, duration]);
|
|
898
932
|
if (!isVisible) return null;
|
|
933
|
+
const handleDismiss = () => {
|
|
934
|
+
setIsDismissing(true);
|
|
935
|
+
setTimeout(() => {
|
|
936
|
+
onDismiss?.();
|
|
937
|
+
}, 300);
|
|
938
|
+
};
|
|
939
|
+
const handleToggleExpand = () => {
|
|
940
|
+
setIsExpanded((prev) => !prev);
|
|
941
|
+
};
|
|
942
|
+
const renderIcon = () => {
|
|
943
|
+
if (icon === false) return null;
|
|
944
|
+
if (icon === true) return defaultIcons[variant];
|
|
945
|
+
return icon;
|
|
946
|
+
};
|
|
947
|
+
const iconElement = renderIcon();
|
|
899
948
|
return /* @__PURE__ */ jsx(
|
|
900
949
|
"div",
|
|
901
950
|
{
|
|
902
|
-
className:
|
|
951
|
+
className: cn(
|
|
952
|
+
"fixed top-4 right-4 z-50 max-w-sm w-[calc(100vw-2rem)] sm:w-auto transition-all duration-300",
|
|
953
|
+
isDismissing ? "translate-x-full opacity-0" : "translate-x-0 opacity-100"
|
|
954
|
+
),
|
|
903
955
|
children: /* @__PURE__ */ jsxs(
|
|
904
956
|
"div",
|
|
905
957
|
{
|
|
906
|
-
className:
|
|
958
|
+
className: cn(
|
|
959
|
+
"p-3 sm:p-4 shadow-lg border transition-all duration-300",
|
|
960
|
+
styles.container
|
|
961
|
+
),
|
|
907
962
|
children: [
|
|
908
963
|
/* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
|
|
909
|
-
/* @__PURE__ */ jsx(
|
|
910
|
-
|
|
964
|
+
iconElement && /* @__PURE__ */ jsx("div", { className: cn("w-5 h-5 mt-0.5 flex-shrink-0", styles.icon), children: iconElement }),
|
|
965
|
+
/* @__PURE__ */ jsxs("div", { className: "flex-1", children: [
|
|
966
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm", children: message }),
|
|
967
|
+
action === "collapsible" && isExpanded && expandedContent && /* @__PURE__ */ jsx("div", { className: "mt-2 text-sm opacity-90", children: expandedContent })
|
|
968
|
+
] }),
|
|
969
|
+
action === "dismissable" && /* @__PURE__ */ jsx(
|
|
970
|
+
"button",
|
|
911
971
|
{
|
|
912
|
-
|
|
913
|
-
|
|
972
|
+
onClick: handleDismiss,
|
|
973
|
+
className: "text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-300",
|
|
974
|
+
"aria-label": "Dismiss",
|
|
975
|
+
children: /* @__PURE__ */ jsx(X, { className: "w-4 h-4" })
|
|
914
976
|
}
|
|
915
977
|
),
|
|
916
|
-
|
|
917
|
-
/* @__PURE__ */ jsx(
|
|
978
|
+
action === "collapsible" && /* @__PURE__ */ jsx(
|
|
918
979
|
"button",
|
|
919
980
|
{
|
|
920
|
-
onClick:
|
|
921
|
-
setIsDismissing(true);
|
|
922
|
-
setTimeout(() => {
|
|
923
|
-
onDismiss?.();
|
|
924
|
-
}, 300);
|
|
925
|
-
},
|
|
981
|
+
onClick: handleToggleExpand,
|
|
926
982
|
className: "text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-300",
|
|
927
|
-
|
|
983
|
+
"aria-label": isExpanded ? "Collapse" : "Expand",
|
|
984
|
+
children: isExpanded ? /* @__PURE__ */ jsx(ChevronUp, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx(ChevronDown, { className: "w-4 h-4" })
|
|
928
985
|
}
|
|
929
986
|
)
|
|
930
987
|
] }),
|
|
931
988
|
/* @__PURE__ */ jsx("div", { className: "mt-3 w-full bg-neutral-200 dark:bg-neutral-600 h-1 transition-all duration-300", children: /* @__PURE__ */ jsx(
|
|
932
989
|
"div",
|
|
933
990
|
{
|
|
934
|
-
className:
|
|
991
|
+
className: cn("h-full transition-all duration-100 ease-linear", styles.progress),
|
|
935
992
|
style: { width: `${progressWidth}%` }
|
|
936
993
|
}
|
|
937
994
|
) })
|
|
@@ -943,5 +1000,5 @@ var Toast = ({
|
|
|
943
1000
|
};
|
|
944
1001
|
|
|
945
1002
|
export { AnimatedButton, Input, TemplateSelector, TextButton, Toast };
|
|
946
|
-
//# sourceMappingURL=chunk-
|
|
947
|
-
//# sourceMappingURL=chunk-
|
|
1003
|
+
//# sourceMappingURL=chunk-IJCKCS4A.mjs.map
|
|
1004
|
+
//# sourceMappingURL=chunk-IJCKCS4A.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/enhanced/animated-button/animated-button.tsx","../src/components/enhanced/input/input.tsx","../src/components/enhanced/template-selector/template-selector.tsx","../src/components/enhanced/text-button/text-button.tsx","../src/components/enhanced/toast/toast.tsx"],"names":["variantStyles","jsx","useState","jsxs","motion","Info","Check","useEffect","ChevronUp","ChevronDown"],"mappings":"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","file":"chunk-IJCKCS4A.mjs","sourcesContent":["\"use client\";\n\nimport { motion } from \"framer-motion\";\n\nexport interface AnimatedButtonProps {\n label: string;\n variant?: \"primary\" | \"outlined\";\n buttonContainerClassName?: string;\n buttonTextClassName?: string;\n onClick?: () => void;\n}\n\nexport const AnimatedButton = ({\n label,\n variant = \"primary\",\n buttonContainerClassName,\n buttonTextClassName,\n onClick,\n}: AnimatedButtonProps) => {\n const handleOnClick = () => {\n onClick?.();\n };\n\n const baseButtonClass = \"text-xs tracking-wider font-medium\";\n\n const variantButtonClass = `${\n variant === \"outlined\" ? \"border border-1 bg-white\" : \"bg-[#0F62FE]\"\n }`;\n\n return (\n <motion.button\n whileHover={{\n scale: variant === \"primary\" ? 1.025 : 1,\n boxShadow:\n variant === \"primary\"\n ? \"0 0 4px rgba(15, 96, 254, 0.4), 0 0 16px rgba(15, 96, 254, 0.2)\"\n : \"\",\n }}\n whileTap={{ scale: variant === \"primary\" ? 0.98 : 1 }}\n onClick={handleOnClick}\n className={`w-fit p-2 px-4 ${variantButtonClass} ${buttonContainerClassName}`}\n >\n <span className={`${baseButtonClass} ${buttonTextClassName}`}>\n {label.toUpperCase()}\n </span>\n </motion.button>\n );\n};\n","\"use client\";\n\nimport { ReactNode, forwardRef, useState, useEffect } from \"react\";\nimport { ChevronUp, ChevronDown, Info } from \"lucide-react\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface InputProps {\n label?: string;\n placeholder?: string;\n value?: string | number;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onNumberChange?: (value: number) => void;\n onSelectChange?: (value: string) => void;\n onFocus?: (e: React.FocusEvent<HTMLInputElement | HTMLSelectElement>) => void;\n onBlur?: (e: React.FocusEvent<HTMLInputElement | HTMLSelectElement>) => void;\n type?: \"text\" | \"email\" | \"password\" | \"number\" | \"search\" | \"select\" | \"mobile\";\n disabled?: boolean;\n required?: boolean;\n error?: string;\n helperText?: string;\n autoComplete?: string;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n leadingDecorator?: ReactNode;\n trailingDecorator?: ReactNode;\n onLeadingClick?: () => void;\n onTrailingClick?: () => void;\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"default\" | \"filled\";\n className?: string;\n min?: number;\n max?: number;\n step?: number;\n precision?: number;\n allowNegative?: boolean;\n showControls?: boolean;\n options?: SelectOption[];\n readOnly?: boolean;\n tabIndex?: number;\n tooltip?: {\n content: ReactNode;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n };\n}\n\nexport const Input = forwardRef<HTMLInputElement | HTMLSelectElement, InputProps>(\n (\n {\n label,\n placeholder,\n value,\n onChange,\n onNumberChange,\n onSelectChange,\n onFocus,\n onBlur,\n type = \"text\",\n disabled = false,\n required = false,\n error,\n helperText,\n leadingIcon,\n trailingIcon,\n leadingDecorator,\n trailingDecorator,\n onLeadingClick,\n onTrailingClick,\n size = \"md\",\n variant = \"default\",\n className = \"\",\n min,\n max,\n step = 1,\n precision = 0,\n allowNegative = true,\n showControls = false,\n options = [],\n autoComplete,\n readOnly = false,\n tabIndex = 0,\n tooltip,\n ...props\n },\n ref\n ) => {\n const [showTooltip, setShowTooltip] = useState(false);\n\n const isNumberType = type === \"number\";\n const isSelectType = type === \"select\";\n const isMobileType = type === \"mobile\";\n\n const [inputValue, setInputValue] = useState<string>(\n value !== undefined ? value.toString() : \"\"\n );\n\n useEffect(() => {\n if (value !== undefined) {\n setInputValue(value.toString());\n }\n }, [value]);\n\n const formatNumber = (num: number): number => {\n if (precision > 0) {\n return parseFloat(num.toFixed(precision));\n }\n return Math.round(num);\n };\n\n const isValidNumber = (str: string): boolean => {\n if (str === \"\" || str === \"-\") return true;\n const num = parseFloat(str);\n if (isNaN(num)) return false;\n if (!allowNegative && num < 0) return false;\n if (min !== undefined && num < min) return false;\n if (max !== undefined && num > max) return false;\n return true;\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (isMobileType) {\n const digits = (e.target.value || \"\").replace(/\\D/g, \"\").slice(0, 10);\n onChange?.({\n target: { value: digits },\n } as React.ChangeEvent<HTMLInputElement>);\n return;\n }\n\n if (isNumberType && onNumberChange) {\n const newValue = e.target.value;\n\n if (newValue === \"\" || (allowNegative && newValue === \"-\")) {\n setInputValue(newValue);\n return;\n }\n\n if (isValidNumber(newValue)) {\n setInputValue(newValue);\n const numValue = parseFloat(newValue);\n if (!isNaN(numValue)) {\n onNumberChange(formatNumber(numValue));\n }\n }\n } else {\n onChange?.(e);\n }\n };\n\n const handleSelectChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n onSelectChange?.(e.target.value);\n };\n\n const handleIncrement = () => {\n if (disabled || !isNumberType) return;\n\n const currentNum = parseFloat(inputValue) || 0;\n const newValue = currentNum + step;\n const constrainedValue =\n max !== undefined ? Math.min(newValue, max) : newValue;\n const finalValue = formatNumber(constrainedValue);\n\n setInputValue(finalValue.toString());\n onNumberChange?.(finalValue);\n };\n\n const handleDecrement = () => {\n if (disabled || !isNumberType) return;\n\n const currentNum = parseFloat(inputValue) || 0;\n const newValue = currentNum - step;\n const constrainedValue =\n min !== undefined ? Math.max(newValue, min) : newValue;\n const finalValue = formatNumber(constrainedValue);\n\n setInputValue(finalValue.toString());\n onNumberChange?.(finalValue);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (isNumberType && onNumberChange) {\n if (inputValue !== \"\" && inputValue !== \"-\") {\n const numValue = parseFloat(inputValue);\n if (!isNaN(numValue)) {\n const cleanValue = formatNumber(numValue);\n setInputValue(cleanValue.toString());\n onNumberChange(cleanValue);\n }\n } else if (inputValue === \"\" || inputValue === \"-\") {\n setInputValue(\"\");\n }\n }\n\n onBlur?.(e);\n };\n\n const baseInputStyles =\n \"w-full transition-colors focus:outline-none min-h-[52px]\";\n\n const sizeStyles = {\n sm: \"px-3 py-2 text-sm\",\n md: \"px-4 py-3 text-base\",\n lg: \"px-5 py-4 text-lg\",\n };\n\n const controlSizeStyles = {\n sm: \"w-6 h-5\",\n md: \"w-8 h-6\",\n lg: \"w-10 h-8\",\n };\n\n const iconSizeStyles = {\n sm: 12,\n md: 16,\n lg: 20,\n };\n\n const variantStyles = {\n default:\n \"border bg-white/60 dark:bg-neutral-800/60 backdrop-blur-sm transition-colors duration-300 rounded-lg\",\n filled:\n \"border-0 bg-neutral-50/60 dark:bg-neutral-700/60 backdrop-blur-sm transition-colors duration-300 rounded-lg\",\n };\n\n const stateStyles = error\n ? \"border-rose-500/50 dark:border-rose-400/50 focus:border-rose-600/70 dark:focus:border-rose-500/70 focus:ring-1 focus:ring-rose-500/50 dark:focus:ring-rose-400/50\"\n : \"border-neutral-300/50 dark:border-neutral-600/50 focus:border-blue-500/70 dark:focus:border-blue-400/70 focus:ring-1 focus:ring-blue-500/50 dark:focus:ring-blue-400/50\";\n\n const disabledStyles = disabled\n ? \"bg-neutral-100/60 dark:bg-neutral-700/60 text-neutral-500 dark:text-neutral-400 cursor-not-allowed\"\n : \"text-neutral-900 dark:text-neutral-100\";\n\n const hasControls = isNumberType && showControls;\n const hasLeadingContent = leadingIcon || leadingDecorator;\n const hasTrailingContent = trailingIcon || trailingDecorator || hasControls;\n\n const inputClasses = `\n ${baseInputStyles}\n ${sizeStyles[size]}\n ${variantStyles[variant]}\n ${stateStyles}\n ${disabledStyles}\n ${hasLeadingContent || isMobileType ? \"pl-10\" : \"\"}\n ${hasTrailingContent ? (hasControls ? \"pr-20\" : \"pr-10\") : \"\"}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, \" \");\n\n const selectClasses = `\n ${baseInputStyles}\n ${sizeStyles[size]}\n ${variantStyles[variant]}\n ${stateStyles}\n ${disabledStyles}\n ${hasLeadingContent ? \"pl-10\" : \"\"}\n ${hasTrailingContent ? \"pr-10\" : \"\"}\n ${className}\n appearance-none cursor-pointer\n `\n .trim()\n .replace(/\\s+/g, \" \");\n\n const canDecrement =\n !disabled && (min === undefined || (parseFloat(inputValue) || 0) > min);\n const canIncrement =\n !disabled && (max === undefined || (parseFloat(inputValue) || 0) < max);\n\n return (\n <div className=\"w-full\">\n {label && (\n <div className=\"relative mb-2\">\n <label className=\"text-sm font-medium text-neutral-700 dark:text-neutral-300 transition-colors duration-300 flex items-center\">\n <span className=\"text-xs sm:text-sm\">{label}</span>\n {required && <span className=\"text-rose-500 ml-1\">*</span>}\n {tooltip && (\n <button\n type=\"button\"\n className=\"ml-2 text-neutral-400 dark:text-neutral-500 hover:text-neutral-600 dark:hover:text-neutral-300 transition-colors duration-300\"\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n onFocus={() => setShowTooltip(true)}\n onBlur={() => setShowTooltip(false)}\n >\n <Info className=\"w-4 h-4\" />\n </button>\n )}\n </label>\n\n {tooltip && showTooltip && (\n <div className=\"absolute z-[9999] pointer-events-none left-0 bottom-full mt-2\">\n <div className=\"bg-neutral-900/80 dark:bg-neutral-100/80 backdrop-blur-md text-white dark:text-neutral-900 text-sm rounded-xl p-3 shadow-lg w-80 transition-colors duration-300\">\n {tooltip.content}\n </div>\n </div>\n )}\n </div>\n )}\n\n <div className=\"relative\">\n {hasLeadingContent && (\n <div\n className={`absolute inset-y-0 left-0 pl-3 flex items-center ${\n onLeadingClick ? \"cursor-pointer\" : \"pointer-events-none\"\n }`}\n onClick={onLeadingClick}\n >\n {leadingDecorator ? (\n <span className=\"text-neutral-400\">{leadingDecorator}</span>\n ) : (\n <span className=\"text-neutral-400\">{leadingIcon}</span>\n )}\n </div>\n )}\n\n {isMobileType && (\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center z-10 pointer-events-none border-r pr-3 border-neutral-300/50 dark:border-neutral-600/50\">\n <span className=\"text-neutral-500 dark:text-neutral-300\">+1</span>\n </div>\n )}\n\n {isSelectType ? (\n <select\n ref={ref as React.Ref<HTMLSelectElement>}\n value={value}\n onChange={handleSelectChange}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={disabled}\n required={required}\n className={selectClasses}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n ) : (\n <input\n ref={ref as React.Ref<HTMLInputElement>}\n type={isMobileType ? \"tel\" : isNumberType ? \"text\" : type}\n inputMode={\n isMobileType ? \"numeric\" : isNumberType ? \"numeric\" : undefined\n }\n value={isNumberType && onNumberChange ? inputValue : value}\n onChange={handleInputChange}\n onFocus={onFocus}\n onBlur={isNumberType && onNumberChange ? handleBlur : onBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n autoComplete={isMobileType ? autoComplete ?? \"tel\" : autoComplete}\n className={inputClasses}\n readOnly={readOnly}\n tabIndex={tabIndex}\n {...props}\n />\n )}\n\n {hasControls && (\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-1\">\n <div className=\"flex\">\n <button\n type=\"button\"\n onClick={handleDecrement}\n disabled={!canDecrement}\n className={`\n ${controlSizeStyles[size]}\n flex items-center justify-center\n text-neutral-500 hover:text-neutral-700 hover:bg-neutral-100\n disabled:text-neutral-300 disabled:cursor-not-allowed\n transition-colors\n border-r border-neutral-300\n `}\n >\n <ChevronDown size={iconSizeStyles[size]} />\n </button>\n <button\n type=\"button\"\n onClick={handleIncrement}\n disabled={!canIncrement}\n className={`\n ${controlSizeStyles[size]}\n flex items-center justify-center\n text-neutral-500 hover:text-neutral-700 hover:bg-neutral-100\n disabled:text-neutral-300 disabled:cursor-not-allowed\n transition-colors\n `}\n >\n <ChevronUp size={iconSizeStyles[size]} />\n </button>\n </div>\n </div>\n )}\n\n {isSelectType && !trailingIcon && !trailingDecorator && (\n <div className=\"absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none\">\n <ChevronDown\n size={iconSizeStyles[size]}\n className=\"text-neutral-400\"\n />\n </div>\n )}\n\n {(trailingIcon || trailingDecorator) && !hasControls && (\n <div\n className={`absolute top-1/2 -translate-y-1/3 right-0 pr-3 flex items-center ${\n onTrailingClick ? \"cursor-pointer\" : \"\"\n }`}\n onClick={onTrailingClick}\n onMouseEnter={tooltip ? () => setShowTooltip(true) : undefined}\n onMouseLeave={tooltip ? () => setShowTooltip(false) : undefined}\n onFocus={tooltip ? () => setShowTooltip(true) : undefined}\n onBlur={tooltip ? () => setShowTooltip(false) : undefined}\n >\n {trailingDecorator ? (\n <span className=\"text-neutral-400\">{trailingDecorator}</span>\n ) : (\n <span className=\"text-neutral-400\">{trailingIcon}</span>\n )}\n </div>\n )}\n </div>\n\n {(error || helperText) && (\n <div className=\"mt-2\">\n {error && (\n <p className=\"text-sm text-rose-600 dark:text-rose-400 transition-colors duration-300\">\n {error}\n </p>\n )}\n {helperText && !error && (\n <p className=\"text-sm text-neutral-500 dark:text-neutral-400 transition-colors duration-300\">\n {helperText}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useState } from \"react\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport {\n ExternalLink,\n LayoutGrid,\n List,\n Check,\n Sparkles,\n Orbit,\n Globe,\n Star,\n Rocket,\n Moon,\n type LucideIcon,\n} from \"lucide-react\";\nimport { cn } from \"@/utils\";\n\nexport type AccentColor = \"blue\" | \"violet\" | \"emerald\" | \"rose\" | \"amber\";\n\nexport interface Template {\n id: string;\n title: string;\n name?: string;\n icon?: LucideIcon;\n previewUrl: string;\n}\n\nexport interface TemplateSelectorProps {\n templates: Template[];\n value?: string;\n onChange?: (templateId: string) => void;\n onNameChange?: (templateId: string, newName: string) => void;\n defaultView?: \"card\" | \"list\";\n showViewToggle?: boolean;\n editable?: boolean;\n className?: string;\n cardClassName?: string;\n columns?: 2 | 3 | 4;\n accentColor?: AccentColor;\n}\n\n// Accent color class mappings\nconst accentColors: Record<AccentColor, {\n selected: string;\n selectedBorder: string;\n selectedGlow: string;\n hoverBg: string;\n hoverBgDark: string;\n iconSelected: string;\n iconHover: string;\n checkBg: string;\n inputBorder: string;\n inputRing: string;\n textHover: string;\n toggleActive: string;\n}> = {\n blue: {\n selected: \"bg-blue-100/80 dark:bg-blue-900/30\",\n selectedBorder: \"border-blue-500 dark:border-blue-400\",\n selectedGlow: \"shadow-lg shadow-blue-500/20 dark:shadow-blue-400/20\",\n hoverBg: \"group-hover:bg-blue-50/60 dark:group-hover:bg-blue-900/20\",\n hoverBgDark: \"hover:bg-blue-50 dark:hover:bg-blue-900/30\",\n iconSelected: \"text-blue-600 dark:text-blue-400\",\n iconHover: \"group-hover:text-blue-500 dark:group-hover:text-blue-400\",\n checkBg: \"bg-blue-500 border-blue-500 dark:bg-blue-400 dark:border-blue-400\",\n inputBorder: \"border-blue-500 dark:border-blue-400\",\n inputRing: \"focus:ring-blue-500/20\",\n textHover: \"hover:text-blue-600 dark:hover:text-blue-400\",\n toggleActive: \"text-blue-600 dark:text-blue-400\",\n },\n violet: {\n selected: \"bg-violet-100/80 dark:bg-violet-900/30\",\n selectedBorder: \"border-violet-500 dark:border-violet-400\",\n selectedGlow: \"shadow-lg shadow-violet-500/20 dark:shadow-violet-400/20\",\n hoverBg: \"group-hover:bg-violet-50/60 dark:group-hover:bg-violet-900/20\",\n hoverBgDark: \"hover:bg-violet-50 dark:hover:bg-violet-900/30\",\n iconSelected: \"text-violet-600 dark:text-violet-400\",\n iconHover: \"group-hover:text-violet-500 dark:group-hover:text-violet-400\",\n checkBg: \"bg-violet-500 border-violet-500 dark:bg-violet-400 dark:border-violet-400\",\n inputBorder: \"border-violet-500 dark:border-violet-400\",\n inputRing: \"focus:ring-violet-500/20\",\n textHover: \"hover:text-violet-600 dark:hover:text-violet-400\",\n toggleActive: \"text-violet-600 dark:text-violet-400\",\n },\n emerald: {\n selected: \"bg-emerald-100/80 dark:bg-emerald-900/30\",\n selectedBorder: \"border-emerald-500 dark:border-emerald-400\",\n selectedGlow: \"shadow-lg shadow-emerald-500/20 dark:shadow-emerald-400/20\",\n hoverBg: \"group-hover:bg-emerald-50/60 dark:group-hover:bg-emerald-900/20\",\n hoverBgDark: \"hover:bg-emerald-50 dark:hover:bg-emerald-900/30\",\n iconSelected: \"text-emerald-600 dark:text-emerald-400\",\n iconHover: \"group-hover:text-emerald-500 dark:group-hover:text-emerald-400\",\n checkBg: \"bg-emerald-500 border-emerald-500 dark:bg-emerald-400 dark:border-emerald-400\",\n inputBorder: \"border-emerald-500 dark:border-emerald-400\",\n inputRing: \"focus:ring-emerald-500/20\",\n textHover: \"hover:text-emerald-600 dark:hover:text-emerald-400\",\n toggleActive: \"text-emerald-600 dark:text-emerald-400\",\n },\n rose: {\n selected: \"bg-rose-100/80 dark:bg-rose-900/30\",\n selectedBorder: \"border-rose-500 dark:border-rose-400\",\n selectedGlow: \"shadow-lg shadow-rose-500/20 dark:shadow-rose-400/20\",\n hoverBg: \"group-hover:bg-rose-50/60 dark:group-hover:bg-rose-900/20\",\n hoverBgDark: \"hover:bg-rose-50 dark:hover:bg-rose-900/30\",\n iconSelected: \"text-rose-600 dark:text-rose-400\",\n iconHover: \"group-hover:text-rose-500 dark:group-hover:text-rose-400\",\n checkBg: \"bg-rose-500 border-rose-500 dark:bg-rose-400 dark:border-rose-400\",\n inputBorder: \"border-rose-500 dark:border-rose-400\",\n inputRing: \"focus:ring-rose-500/20\",\n textHover: \"hover:text-rose-600 dark:hover:text-rose-400\",\n toggleActive: \"text-rose-600 dark:text-rose-400\",\n },\n amber: {\n selected: \"bg-amber-100/80 dark:bg-amber-900/30\",\n selectedBorder: \"border-amber-500 dark:border-amber-400\",\n selectedGlow: \"shadow-lg shadow-amber-500/20 dark:shadow-amber-400/20\",\n hoverBg: \"group-hover:bg-amber-50/60 dark:group-hover:bg-amber-900/20\",\n hoverBgDark: \"hover:bg-amber-50 dark:hover:bg-amber-900/30\",\n iconSelected: \"text-amber-600 dark:text-amber-400\",\n iconHover: \"group-hover:text-amber-500 dark:group-hover:text-amber-400\",\n checkBg: \"bg-amber-500 border-amber-500 dark:bg-amber-400 dark:border-amber-400\",\n inputBorder: \"border-amber-500 dark:border-amber-400\",\n inputRing: \"focus:ring-amber-500/20\",\n textHover: \"hover:text-amber-600 dark:hover:text-amber-400\",\n toggleActive: \"text-amber-600 dark:text-amber-400\",\n },\n};\n\n// Default icon mapping for space-themed templates\nconst defaultIconMap: Record<string, LucideIcon> = {\n nebula: Sparkles,\n andromeda: Orbit,\n cosmos: Globe,\n stellar: Star,\n voyager: Rocket,\n eclipse: Moon,\n};\n\nconst getTemplateIcon = (template: Template): LucideIcon => {\n if (template.icon) return template.icon;\n const key = template.title.toLowerCase();\n return defaultIconMap[key] || Star;\n};\n\nexport const TemplateSelector = ({\n templates,\n value,\n onChange,\n onNameChange,\n defaultView = \"card\",\n showViewToggle = true,\n editable = false,\n className,\n cardClassName,\n columns = 3,\n accentColor = \"blue\",\n}: TemplateSelectorProps) => {\n const colors = accentColors[accentColor];\n const [view, setView] = useState<\"card\" | \"list\">(defaultView);\n const [selectedId, setSelectedId] = useState<string | undefined>(value);\n\n React.useEffect(() => {\n setSelectedId(value);\n }, [value]);\n\n const handleSelect = (templateId: string) => {\n setSelectedId(templateId);\n onChange?.(templateId);\n };\n\n const handlePreviewClick = (e: React.MouseEvent, previewUrl: string) => {\n e.stopPropagation();\n window.open(previewUrl, \"_blank\", \"noopener,noreferrer\");\n };\n\n const handleNameChange = (templateId: string, newName: string) => {\n onNameChange?.(templateId, newName);\n };\n\n const columnClasses = {\n 2: \"grid-cols-1 sm:grid-cols-2\",\n 3: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3\",\n 4: \"grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4\",\n };\n\n return (\n <div className={cn(\"w-full\", className)}>\n {showViewToggle && (\n <div className=\"flex justify-end mb-4\">\n <div className=\"inline-flex rounded-lg border border-neutral-200 dark:border-neutral-700 p-1 bg-neutral-100 dark:bg-neutral-800\">\n <button\n type=\"button\"\n onClick={() => setView(\"card\")}\n className={cn(\n \"p-2 rounded-md text-sm font-medium transition-all duration-200\",\n view === \"card\"\n ? `bg-white dark:bg-neutral-700 shadow-sm ${colors.toggleActive}`\n : \"text-neutral-500 dark:text-neutral-400 hover:text-neutral-700 dark:hover:text-neutral-300\"\n )}\n aria-label=\"Card view\"\n >\n <LayoutGrid size={16} />\n </button>\n <button\n type=\"button\"\n onClick={() => setView(\"list\")}\n className={cn(\n \"p-2 rounded-md text-sm font-medium transition-all duration-200\",\n view === \"list\"\n ? `bg-white dark:bg-neutral-700 shadow-sm ${colors.toggleActive}`\n : \"text-neutral-500 dark:text-neutral-400 hover:text-neutral-700 dark:hover:text-neutral-300\"\n )}\n aria-label=\"List view\"\n >\n <List size={16} />\n </button>\n </div>\n </div>\n )}\n\n <AnimatePresence mode=\"wait\">\n {view === \"card\" ? (\n <motion.div\n key=\"card-view\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.2 }}\n className={cn(\"grid gap-4\", columnClasses[columns])}\n >\n {templates.map((template) => (\n <TemplateCard\n key={template.id}\n template={template}\n isSelected={selectedId === template.id}\n onSelect={handleSelect}\n onPreviewClick={handlePreviewClick}\n onNameChange={handleNameChange}\n editable={editable}\n className={cardClassName}\n colors={colors}\n />\n ))}\n </motion.div>\n ) : (\n <motion.div\n key=\"list-view\"\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.2 }}\n className=\"flex flex-col gap-2\"\n >\n {templates.map((template) => (\n <TemplateListItem\n key={template.id}\n template={template}\n isSelected={selectedId === template.id}\n onSelect={handleSelect}\n onPreviewClick={handlePreviewClick}\n onNameChange={handleNameChange}\n editable={editable}\n colors={colors}\n />\n ))}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n );\n};\n\ninterface TemplateItemProps {\n template: Template;\n isSelected: boolean;\n onSelect: (id: string) => void;\n onPreviewClick: (e: React.MouseEvent, url: string) => void;\n onNameChange: (id: string, name: string) => void;\n editable: boolean;\n className?: string;\n colors: typeof accentColors[AccentColor];\n}\n\nconst TemplateCard = ({\n template,\n isSelected,\n onSelect,\n onPreviewClick,\n onNameChange,\n editable,\n className,\n colors,\n}: TemplateItemProps) => {\n const [isEditing, setIsEditing] = useState(false);\n const [editValue, setEditValue] = useState(template.name || template.title);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const displayName = template.name || template.title;\n const IconComponent = getTemplateIcon(template);\n\n const handleDoubleClick = (e: React.MouseEvent) => {\n if (editable) {\n e.stopPropagation();\n setIsEditing(true);\n setEditValue(displayName);\n }\n };\n\n const handleBlur = () => {\n setIsEditing(false);\n if (editValue.trim() && editValue !== displayName) {\n onNameChange(template.id, editValue.trim());\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n handleBlur();\n } else if (e.key === \"Escape\") {\n setIsEditing(false);\n setEditValue(displayName);\n }\n };\n\n React.useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n return (\n <motion.div\n whileHover={{ y: -4, scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 25 }}\n onClick={() => onSelect(template.id)}\n className={cn(\n \"group relative cursor-pointer rounded-xl overflow-hidden border-2 transition-all duration-300\",\n \"bg-white dark:bg-neutral-800\",\n isSelected\n ? `${colors.selectedBorder} ${colors.selectedGlow}`\n : \"border-neutral-200 dark:border-neutral-700 hover:border-neutral-300 dark:hover:border-neutral-600 hover:shadow-md\",\n className\n )}\n >\n {/* Selection indicator */}\n <div\n className={cn(\n \"absolute top-3 left-3 z-10 w-5 h-5 rounded-full border-2 flex items-center justify-center transition-all duration-200\",\n isSelected\n ? colors.checkBg\n : \"bg-white dark:bg-neutral-800 border-neutral-300 dark:border-neutral-600\"\n )}\n >\n {isSelected && <Check size={12} className=\"text-white\" strokeWidth={3} />}\n </div>\n\n {/* Preview link button */}\n <button\n type=\"button\"\n onClick={(e) => onPreviewClick(e, template.previewUrl)}\n className={cn(\n \"absolute top-3 right-3 z-10 p-1.5 rounded-lg transition-all duration-200\",\n \"bg-white dark:bg-neutral-700\",\n \"border border-neutral-200 dark:border-neutral-600\",\n \"text-neutral-500 dark:text-neutral-400\",\n \"opacity-0 group-hover:opacity-100\",\n \"hover:bg-blue-50 dark:hover:bg-blue-900/30 hover:text-blue-600 dark:hover:text-blue-400 hover:border-blue-300 dark:hover:border-blue-600\"\n )}\n aria-label={`Preview ${displayName}`}\n >\n <ExternalLink size={14} />\n </button>\n\n {/* Icon preview with subtle tinted background */}\n <div className=\"aspect-[4/3] overflow-hidden bg-neutral-50 dark:bg-neutral-800/80 flex items-center justify-center\">\n <motion.div\n initial={{ scale: 0.9, opacity: 0.5 }}\n animate={{ scale: 1, opacity: 1 }}\n className={cn(\n \"p-6 rounded-full transition-all duration-300\",\n isSelected\n ? colors.selected\n : `bg-neutral-100 dark:bg-neutral-700/50 ${colors.hoverBg}`\n )}\n >\n <IconComponent\n size={48}\n strokeWidth={1.5}\n className={cn(\n \"transition-colors duration-300\",\n isSelected\n ? colors.iconSelected\n : `text-neutral-400 dark:text-neutral-500 ${colors.iconHover}`\n )}\n />\n </motion.div>\n </div>\n\n {/* Title */}\n <div className=\"p-3 border-t border-neutral-100 dark:border-neutral-700\">\n {isEditing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"w-full px-2 py-1 text-sm font-medium rounded\",\n \"bg-neutral-100 dark:bg-neutral-700\",\n `border ${colors.inputBorder}`,\n \"text-neutral-900 dark:text-neutral-100\",\n `focus:outline-none focus:ring-2 ${colors.inputRing}`\n )}\n />\n ) : (\n <h3\n onDoubleClick={handleDoubleClick}\n className={cn(\n \"text-sm font-medium text-neutral-900 dark:text-neutral-100 truncate\",\n editable && `cursor-text ${colors.textHover}`\n )}\n title={editable ? \"Double-click to rename\" : displayName}\n >\n {displayName}\n </h3>\n )}\n </div>\n </motion.div>\n );\n};\n\nconst TemplateListItem = ({\n template,\n isSelected,\n onSelect,\n onPreviewClick,\n onNameChange,\n editable,\n colors,\n}: TemplateItemProps) => {\n const [isEditing, setIsEditing] = useState(false);\n const [editValue, setEditValue] = useState(template.name || template.title);\n const inputRef = React.useRef<HTMLInputElement>(null);\n\n const displayName = template.name || template.title;\n const IconComponent = getTemplateIcon(template);\n\n const handleDoubleClick = (e: React.MouseEvent) => {\n if (editable) {\n e.stopPropagation();\n setIsEditing(true);\n setEditValue(displayName);\n }\n };\n\n const handleBlur = () => {\n setIsEditing(false);\n if (editValue.trim() && editValue !== displayName) {\n onNameChange(template.id, editValue.trim());\n }\n };\n\n const handleKeyDown = (e: React.KeyboardEvent) => {\n if (e.key === \"Enter\") {\n handleBlur();\n } else if (e.key === \"Escape\") {\n setIsEditing(false);\n setEditValue(displayName);\n }\n };\n\n React.useEffect(() => {\n if (isEditing && inputRef.current) {\n inputRef.current.focus();\n inputRef.current.select();\n }\n }, [isEditing]);\n\n return (\n <motion.div\n whileHover={{ x: 4, scale: 1.01 }}\n whileTap={{ scale: 0.995 }}\n transition={{ type: \"spring\", stiffness: 400, damping: 25 }}\n onClick={() => onSelect(template.id)}\n className={cn(\n \"group flex items-center gap-4 p-3 cursor-pointer rounded-xl border-2 transition-all duration-300\",\n \"bg-white dark:bg-neutral-800\",\n isSelected\n ? `${colors.selectedBorder} shadow-md ${colors.selectedGlow}`\n : \"border-neutral-200 dark:border-neutral-700 hover:border-neutral-300 dark:hover:border-neutral-600\"\n )}\n >\n {/* Selection indicator */}\n <div\n className={cn(\n \"w-5 h-5 rounded-full border-2 flex items-center justify-center flex-shrink-0 transition-all duration-200\",\n isSelected\n ? colors.checkBg\n : \"bg-white dark:bg-neutral-800 border-neutral-300 dark:border-neutral-600\"\n )}\n >\n {isSelected && <Check size={12} className=\"text-white\" strokeWidth={3} />}\n </div>\n\n {/* Icon thumbnail with subtle tint */}\n <div\n className={cn(\n \"w-12 h-12 rounded-lg flex items-center justify-center flex-shrink-0 transition-colors duration-300\",\n isSelected\n ? colors.selected\n : `bg-neutral-100 dark:bg-neutral-700/50 ${colors.hoverBg}`\n )}\n >\n <IconComponent\n size={24}\n strokeWidth={1.5}\n className={cn(\n \"transition-colors duration-300\",\n isSelected\n ? colors.iconSelected\n : `text-neutral-400 dark:text-neutral-500 ${colors.iconHover}`\n )}\n />\n </div>\n\n {/* Title */}\n <div className=\"flex-1 min-w-0\">\n {isEditing ? (\n <input\n ref={inputRef}\n type=\"text\"\n value={editValue}\n onChange={(e) => setEditValue(e.target.value)}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onClick={(e) => e.stopPropagation()}\n className={cn(\n \"w-full px-2 py-1 text-sm font-medium rounded\",\n \"bg-neutral-100 dark:bg-neutral-700\",\n `border ${colors.inputBorder}`,\n \"text-neutral-900 dark:text-neutral-100\",\n `focus:outline-none focus:ring-2 ${colors.inputRing}`\n )}\n />\n ) : (\n <h3\n onDoubleClick={handleDoubleClick}\n className={cn(\n \"text-sm font-medium text-neutral-900 dark:text-neutral-100 truncate\",\n editable && `cursor-text ${colors.textHover}`\n )}\n title={editable ? \"Double-click to rename\" : displayName}\n >\n {displayName}\n </h3>\n )}\n </div>\n\n {/* Preview link button */}\n <button\n type=\"button\"\n onClick={(e) => onPreviewClick(e, template.previewUrl)}\n className={cn(\n \"p-2 rounded-lg transition-all duration-200 flex-shrink-0\",\n \"text-neutral-400 dark:text-neutral-500\",\n \"opacity-0 group-hover:opacity-100\",\n colors.hoverBgDark,\n colors.textHover\n )}\n aria-label={`Preview ${displayName}`}\n >\n <ExternalLink size={16} />\n </button>\n </motion.div>\n );\n};\n\nTemplateSelector.displayName = \"TemplateSelector\";\n\n// Re-export icons for consumers who want to use custom icons\nexport { Sparkles, Orbit, Globe, Star, Rocket, Moon };\n","import { ReactNode, ButtonHTMLAttributes } from \"react\";\n\nexport interface TextButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n onClick?: () => void;\n disabled?: boolean;\n leadingDecorator?: ReactNode;\n trailingDecorator?: ReactNode;\n variant?: \"primary\" | \"secondary\" | \"danger\" | \"success\" | \"disabled\";\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n type?: \"button\" | \"submit\" | \"reset\";\n}\n\nexport const TextButton = ({\n children,\n onClick,\n disabled = false,\n leadingDecorator,\n trailingDecorator,\n variant = \"primary\",\n size = \"md\",\n className = \"\",\n type = \"button\",\n ...buttonProps\n}: TextButtonProps) => {\n const baseStyles = `group inline-flex justify-center items-center gap-2 font-medium uppercase tracking-wide transition-all duration-200 ${\n disabled ? \"cursor-not-allowed\" : \"cursor-pointer\"\n }`;\n\n const variantStyles = {\n primary: \"text-blue-600 hover:text-blue-700 focus:ring-blue-500\",\n secondary: \"text-neutral-600 hover:text-neutral-700 focus:ring-neutral-500\",\n danger: \"text-rose-600 hover:text-rose-700 focus:ring-rose-500\",\n success: \"text-green-600 hover:text-green-700 focus:ring-green-500\",\n disabled: \"text-neutral-400 cursor-not-allowed\",\n };\n\n const sizeStyles = {\n sm: \"text-xs px-2 py-1\",\n md: \"text-sm px-3 py-2\",\n lg: \"text-base px-4 py-3\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n type={type}\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n onClick={onClick}\n disabled={disabled}\n {...buttonProps}\n >\n {leadingDecorator && (\n <span className=\"animate-in slide-in-from-left-1 duration-200\">\n {leadingDecorator}\n </span>\n )}\n\n <span>{children}</span>\n\n {trailingDecorator && (\n <span className=\"animate-in slide-in-from-right-1 duration-200 group-hover:translate-x-1\">\n {trailingDecorator}\n </span>\n )}\n </button>\n );\n};\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { Check, X, AlertTriangle, Info, ChevronDown, ChevronUp } from \"lucide-react\";\nimport { cn } from \"@/utils\";\n\nexport type ToastVariant = \"neutral\" | \"danger\" | \"caution\" | \"success\";\nexport type ToastAction = \"dismissable\" | \"collapsible\" | \"none\";\n\nexport interface ToastProps {\n message: string;\n variant?: ToastVariant;\n duration?: number;\n onDismiss?: () => void;\n isVisible: boolean;\n icon?: React.ReactNode | boolean;\n action?: ToastAction;\n /** Additional content shown when expanded (only for collapsible toasts) */\n expandedContent?: React.ReactNode;\n}\n\nconst variantStyles: Record<ToastVariant, { container: string; icon: string; progress: string }> = {\n neutral: {\n container: \"bg-neutral-50 dark:bg-neutral-800 border-neutral-200 dark:border-neutral-700 text-neutral-800 dark:text-neutral-200\",\n icon: \"text-neutral-600 dark:text-neutral-400\",\n progress: \"bg-neutral-500 dark:bg-neutral-400\",\n },\n danger: {\n container: \"bg-rose-50 dark:bg-rose-900/70 border-rose-200 dark:border-rose-700 text-rose-800 dark:text-rose-200\",\n icon: \"text-rose-600 dark:text-rose-400\",\n progress: \"bg-rose-500 dark:bg-rose-400\",\n },\n caution: {\n container: \"bg-amber-50 dark:bg-amber-900/70 border-amber-200 dark:border-amber-700 text-amber-800 dark:text-amber-200\",\n icon: \"text-amber-600 dark:text-amber-400\",\n progress: \"bg-amber-500 dark:bg-amber-400\",\n },\n success: {\n container: \"bg-green-50 dark:bg-green-900/70 border-green-200 dark:border-green-700 text-green-800 dark:text-green-200\",\n icon: \"text-green-600 dark:text-green-400\",\n progress: \"bg-green-500 dark:bg-green-400\",\n },\n};\n\nconst defaultIcons: Record<ToastVariant, React.ReactNode> = {\n neutral: <Info className=\"w-5 h-5\" />,\n danger: <AlertTriangle className=\"w-5 h-5\" />,\n caution: <AlertTriangle className=\"w-5 h-5\" />,\n success: <Check className=\"w-5 h-5\" />,\n};\n\nexport const Toast: React.FC<ToastProps> = ({\n message,\n variant = \"neutral\",\n duration = 5000,\n onDismiss,\n isVisible,\n icon = true,\n action = \"dismissable\",\n expandedContent,\n}) => {\n const [isDismissing, setIsDismissing] = useState(false);\n const [isExpanded, setIsExpanded] = useState(false);\n const [progressWidth, setProgressWidth] = useState(100);\n\n const styles = variantStyles[variant];\n\n // Auto-dismiss after specified duration\n useEffect(() => {\n if (isVisible && !isDismissing) {\n const timer = setTimeout(() => {\n setIsDismissing(true);\n setTimeout(() => {\n onDismiss?.();\n }, 300);\n }, duration);\n return () => clearTimeout(timer);\n }\n }, [isVisible, isDismissing, duration, onDismiss]);\n\n // Reset state when toast becomes visible\n useEffect(() => {\n if (isVisible) {\n setIsDismissing(false);\n setIsExpanded(false);\n setProgressWidth(0);\n }\n }, [isVisible]);\n\n // Animate progress bar\n useEffect(() => {\n if (isVisible && !isDismissing) {\n const progressTimer = setInterval(() => {\n setProgressWidth((prev) => {\n if (prev >= 100) return 100;\n return prev + 100 / (duration / 100);\n });\n }, 100);\n\n return () => clearInterval(progressTimer);\n }\n }, [isVisible, isDismissing, duration]);\n\n if (!isVisible) return null;\n\n const handleDismiss = () => {\n setIsDismissing(true);\n setTimeout(() => {\n onDismiss?.();\n }, 300);\n };\n\n const handleToggleExpand = () => {\n setIsExpanded((prev) => !prev);\n };\n\n // Determine which icon to render\n const renderIcon = () => {\n if (icon === false) return null;\n if (icon === true) return defaultIcons[variant];\n return icon;\n };\n\n const iconElement = renderIcon();\n\n return (\n <div\n className={cn(\n \"fixed top-4 right-4 z-50 max-w-sm w-[calc(100vw-2rem)] sm:w-auto transition-all duration-300\",\n isDismissing ? \"translate-x-full opacity-0\" : \"translate-x-0 opacity-100\"\n )}\n >\n <div\n className={cn(\n \"p-3 sm:p-4 shadow-lg border transition-all duration-300\",\n styles.container\n )}\n >\n <div className=\"flex items-start gap-3\">\n {iconElement && (\n <div className={cn(\"w-5 h-5 mt-0.5 flex-shrink-0\", styles.icon)}>\n {iconElement}\n </div>\n )}\n <div className=\"flex-1\">\n <p className=\"text-sm\">{message}</p>\n {action === \"collapsible\" && isExpanded && expandedContent && (\n <div className=\"mt-2 text-sm opacity-90\">\n {expandedContent}\n </div>\n )}\n </div>\n {action === \"dismissable\" && (\n <button\n onClick={handleDismiss}\n className=\"text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-300\"\n aria-label=\"Dismiss\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n )}\n {action === \"collapsible\" && (\n <button\n onClick={handleToggleExpand}\n className=\"text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-300\"\n aria-label={isExpanded ? \"Collapse\" : \"Expand\"}\n >\n {isExpanded ? (\n <ChevronUp className=\"w-4 h-4\" />\n ) : (\n <ChevronDown className=\"w-4 h-4\" />\n )}\n </button>\n )}\n </div>\n\n {/* Progress Bar Timer */}\n <div className=\"mt-3 w-full bg-neutral-200 dark:bg-neutral-600 h-1 transition-all duration-300\">\n <div\n className={cn(\"h-full transition-all duration-100 ease-linear\", styles.progress)}\n style={{ width: `${progressWidth}%` }}\n />\n </div>\n </div>\n </div>\n );\n};\n"]}
|