@pos-360/horizon 0.4.0 → 0.5.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/animated-icons.js +1 -0
- package/dist/animated-icons.mjs +1 -0
- package/dist/{chunk-HJPQ6TOR.mjs → chunk-BSRLO5SU.mjs} +34 -34
- package/dist/chunk-BSRLO5SU.mjs.map +1 -0
- package/dist/{chunk-S2A3IDOX.js → chunk-E3TQU2GX.js} +34 -34
- package/dist/chunk-E3TQU2GX.js.map +1 -0
- package/dist/chunk-GGM3MDFM.js +32 -0
- package/dist/chunk-GGM3MDFM.js.map +1 -0
- package/dist/{chunk-XAPJWVE6.js → chunk-L5DU65XJ.js} +30 -30
- package/dist/chunk-L5DU65XJ.js.map +1 -0
- package/dist/{chunk-IJCKCS4A.mjs → chunk-SVBDAFK4.mjs} +30 -30
- package/dist/chunk-SVBDAFK4.mjs.map +1 -0
- package/dist/chunk-WFBSFUC6.mjs +29 -0
- package/dist/chunk-WFBSFUC6.mjs.map +1 -0
- package/dist/enhanced.js +13 -12
- package/dist/enhanced.mjs +2 -1
- package/dist/hooks.js +1 -0
- package/dist/hooks.mjs +1 -0
- package/dist/index.js +107 -106
- package/dist/index.mjs +3 -2
- package/dist/primitives.js +95 -94
- package/dist/primitives.mjs +2 -1
- package/dist/tailwind.d.mts +44 -14
- package/dist/tailwind.d.ts +44 -14
- package/dist/tailwind.js +218 -1
- package/dist/tailwind.js.map +1 -1
- package/dist/tailwind.mjs +218 -1
- package/dist/tailwind.mjs.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-HJPQ6TOR.mjs.map +0 -1
- package/dist/chunk-IJCKCS4A.mjs.map +0 -1
- package/dist/chunk-S2A3IDOX.js.map +0 -1
- package/dist/chunk-XAPJWVE6.js.map +0 -1
|
@@ -174,8 +174,8 @@ var Input = forwardRef(
|
|
|
174
174
|
lg: 20
|
|
175
175
|
};
|
|
176
176
|
const variantStyles2 = {
|
|
177
|
-
default: "border bg-white/60 dark:bg-neutral-800/60 backdrop-blur-sm transition-colors duration-
|
|
178
|
-
filled: "border-0 bg-neutral-50/60 dark:bg-neutral-700/60 backdrop-blur-sm transition-colors duration-
|
|
177
|
+
default: "border bg-white/60 dark:bg-neutral-800/60 backdrop-blur-sm transition-colors duration-hz-slow ease-hz-default rounded-hz-md",
|
|
178
|
+
filled: "border-0 bg-neutral-50/60 dark:bg-neutral-700/60 backdrop-blur-sm transition-colors duration-hz-slow ease-hz-default rounded-hz-md"
|
|
179
179
|
};
|
|
180
180
|
const stateStyles = error ? "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" : "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";
|
|
181
181
|
const disabledStyles = disabled ? "bg-neutral-100/60 dark:bg-neutral-700/60 text-neutral-500 dark:text-neutral-400 cursor-not-allowed" : "text-neutral-900 dark:text-neutral-100";
|
|
@@ -207,14 +207,14 @@ var Input = forwardRef(
|
|
|
207
207
|
const canIncrement = !disabled && (max === void 0 || (parseFloat(inputValue) || 0) < max);
|
|
208
208
|
return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
|
|
209
209
|
label && /* @__PURE__ */ jsxs("div", { className: "relative mb-2", children: [
|
|
210
|
-
/* @__PURE__ */ jsxs("label", { className: "text-sm font-medium text-neutral-700 dark:text-neutral-300 transition-colors duration-
|
|
210
|
+
/* @__PURE__ */ jsxs("label", { className: "text-sm font-medium text-neutral-700 dark:text-neutral-300 transition-colors duration-hz-slow ease-hz-default flex items-center", children: [
|
|
211
211
|
/* @__PURE__ */ jsx("span", { className: "text-xs sm:text-sm", children: label }),
|
|
212
212
|
required && /* @__PURE__ */ jsx("span", { className: "text-rose-500 ml-1", children: "*" }),
|
|
213
213
|
tooltip && /* @__PURE__ */ jsx(
|
|
214
214
|
"button",
|
|
215
215
|
{
|
|
216
216
|
type: "button",
|
|
217
|
-
className: "ml-2 text-neutral-400 dark:text-neutral-500 hover:text-neutral-600 dark:hover:text-neutral-300 transition-colors duration-
|
|
217
|
+
className: "ml-2 text-neutral-400 dark:text-neutral-500 hover:text-neutral-600 dark:hover:text-neutral-300 transition-colors duration-hz-slow ease-hz-default",
|
|
218
218
|
onMouseEnter: () => setShowTooltip(true),
|
|
219
219
|
onMouseLeave: () => setShowTooltip(false),
|
|
220
220
|
onFocus: () => setShowTooltip(true),
|
|
@@ -223,13 +223,13 @@ var Input = forwardRef(
|
|
|
223
223
|
}
|
|
224
224
|
)
|
|
225
225
|
] }),
|
|
226
|
-
tooltip && showTooltip && /* @__PURE__ */ jsx("div", { className: "absolute z-[9999] pointer-events-none left-0 bottom-full mt-2", children: /* @__PURE__ */ jsx("div", { className: "bg-neutral-900/80 dark:bg-neutral-100/80 backdrop-blur-md text-white dark:text-neutral-900 text-sm rounded-
|
|
226
|
+
tooltip && showTooltip && /* @__PURE__ */ jsx("div", { className: "absolute z-[9999] pointer-events-none left-0 bottom-full mt-2", children: /* @__PURE__ */ jsx("div", { className: "bg-neutral-900/80 dark:bg-neutral-100/80 backdrop-blur-md text-white dark:text-neutral-900 text-sm rounded-hz-lg p-3 shadow-lg w-80 transition-colors duration-hz-slow ease-hz-default", children: tooltip.content }) })
|
|
227
227
|
] }),
|
|
228
228
|
/* @__PURE__ */ jsxs("div", { className: "relative", children: [
|
|
229
229
|
hasLeadingContent && /* @__PURE__ */ jsx(
|
|
230
230
|
"div",
|
|
231
231
|
{
|
|
232
|
-
className: `absolute inset-y-0 left-0 pl-3 flex items-center ${onLeadingClick ? "cursor-pointer" : "pointer-events-none"}`,
|
|
232
|
+
className: `absolute inset-y-0 left-0 pl-3 flex items-center z-10 ${onLeadingClick ? "cursor-pointer" : "pointer-events-none"}`,
|
|
233
233
|
onClick: onLeadingClick,
|
|
234
234
|
children: leadingDecorator ? /* @__PURE__ */ jsx("span", { className: "text-neutral-400", children: leadingDecorator }) : /* @__PURE__ */ jsx("span", { className: "text-neutral-400", children: leadingIcon })
|
|
235
235
|
}
|
|
@@ -336,8 +336,8 @@ var Input = forwardRef(
|
|
|
336
336
|
)
|
|
337
337
|
] }),
|
|
338
338
|
(error || helperText) && /* @__PURE__ */ jsxs("div", { className: "mt-2", children: [
|
|
339
|
-
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-rose-600 dark:text-rose-400 transition-colors duration-
|
|
340
|
-
helperText && !error && /* @__PURE__ */ jsx("p", { className: "text-sm text-neutral-500 dark:text-neutral-400 transition-colors duration-
|
|
339
|
+
error && /* @__PURE__ */ jsx("p", { className: "text-sm text-rose-600 dark:text-rose-400 transition-colors duration-hz-slow ease-hz-default", children: error }),
|
|
340
|
+
helperText && !error && /* @__PURE__ */ jsx("p", { className: "text-sm text-neutral-500 dark:text-neutral-400 transition-colors duration-hz-slow ease-hz-default", children: helperText })
|
|
341
341
|
] })
|
|
342
342
|
] });
|
|
343
343
|
}
|
|
@@ -464,14 +464,14 @@ var TemplateSelector = ({
|
|
|
464
464
|
4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"
|
|
465
465
|
};
|
|
466
466
|
return /* @__PURE__ */ jsxs("div", { className: cn("w-full", className), children: [
|
|
467
|
-
showViewToggle && /* @__PURE__ */ jsx("div", { className: "flex justify-end mb-4", children: /* @__PURE__ */ jsxs("div", { className: "inline-flex rounded-
|
|
467
|
+
showViewToggle && /* @__PURE__ */ jsx("div", { className: "flex justify-end mb-4", children: /* @__PURE__ */ jsxs("div", { className: "inline-flex rounded-hz-md border border-neutral-200 dark:border-neutral-700 p-1 bg-neutral-100 dark:bg-neutral-800", children: [
|
|
468
468
|
/* @__PURE__ */ jsx(
|
|
469
469
|
"button",
|
|
470
470
|
{
|
|
471
471
|
type: "button",
|
|
472
472
|
onClick: () => setView("card"),
|
|
473
473
|
className: cn(
|
|
474
|
-
"p-2 rounded-
|
|
474
|
+
"p-2 rounded-hz-sm text-sm font-medium transition-all duration-hz-normal ease-hz-default",
|
|
475
475
|
view === "card" ? `bg-white dark:bg-neutral-700 shadow-sm ${colors.toggleActive}` : "text-neutral-500 dark:text-neutral-400 hover:text-neutral-700 dark:hover:text-neutral-300"
|
|
476
476
|
),
|
|
477
477
|
"aria-label": "Card view",
|
|
@@ -484,7 +484,7 @@ var TemplateSelector = ({
|
|
|
484
484
|
type: "button",
|
|
485
485
|
onClick: () => setView("list"),
|
|
486
486
|
className: cn(
|
|
487
|
-
"p-2 rounded-
|
|
487
|
+
"p-2 rounded-hz-sm text-sm font-medium transition-all duration-hz-normal ease-hz-default",
|
|
488
488
|
view === "list" ? `bg-white dark:bg-neutral-700 shadow-sm ${colors.toggleActive}` : "text-neutral-500 dark:text-neutral-400 hover:text-neutral-700 dark:hover:text-neutral-300"
|
|
489
489
|
),
|
|
490
490
|
"aria-label": "List view",
|
|
@@ -592,7 +592,7 @@ var TemplateCard = ({
|
|
|
592
592
|
transition: { type: "spring", stiffness: 400, damping: 25 },
|
|
593
593
|
onClick: () => onSelect(template.id),
|
|
594
594
|
className: cn(
|
|
595
|
-
"group relative cursor-pointer rounded-
|
|
595
|
+
"group relative cursor-pointer rounded-hz-lg overflow-hidden border-2 transition-all duration-hz-slow ease-hz-default",
|
|
596
596
|
"bg-white dark:bg-neutral-800",
|
|
597
597
|
isSelected ? `${colors.selectedBorder} ${colors.selectedGlow}` : "border-neutral-200 dark:border-neutral-700 hover:border-neutral-300 dark:hover:border-neutral-600 hover:shadow-md",
|
|
598
598
|
className
|
|
@@ -602,7 +602,7 @@ var TemplateCard = ({
|
|
|
602
602
|
"div",
|
|
603
603
|
{
|
|
604
604
|
className: cn(
|
|
605
|
-
"absolute top-3 left-3 z-10 w-5 h-5 rounded-full border-2 flex items-center justify-center transition-all duration-
|
|
605
|
+
"absolute top-3 left-3 z-10 w-5 h-5 rounded-hz-full border-2 flex items-center justify-center transition-all duration-hz-normal ease-hz-default",
|
|
606
606
|
isSelected ? colors.checkBg : "bg-white dark:bg-neutral-800 border-neutral-300 dark:border-neutral-600"
|
|
607
607
|
),
|
|
608
608
|
children: isSelected && /* @__PURE__ */ jsx(Check, { size: 12, className: "text-white", strokeWidth: 3 })
|
|
@@ -614,7 +614,7 @@ var TemplateCard = ({
|
|
|
614
614
|
type: "button",
|
|
615
615
|
onClick: (e) => onPreviewClick(e, template.previewUrl),
|
|
616
616
|
className: cn(
|
|
617
|
-
"absolute top-3 right-3 z-10 p-1.5 rounded-
|
|
617
|
+
"absolute top-3 right-3 z-10 p-1.5 rounded-hz-md transition-all duration-hz-normal ease-hz-default",
|
|
618
618
|
"bg-white dark:bg-neutral-700",
|
|
619
619
|
"border border-neutral-200 dark:border-neutral-600",
|
|
620
620
|
"text-neutral-500 dark:text-neutral-400",
|
|
@@ -631,7 +631,7 @@ var TemplateCard = ({
|
|
|
631
631
|
initial: { scale: 0.9, opacity: 0.5 },
|
|
632
632
|
animate: { scale: 1, opacity: 1 },
|
|
633
633
|
className: cn(
|
|
634
|
-
"p-6 rounded-full transition-all duration-
|
|
634
|
+
"p-6 rounded-hz-full transition-all duration-hz-slow ease-hz-default",
|
|
635
635
|
isSelected ? colors.selected : `bg-neutral-100 dark:bg-neutral-700/50 ${colors.hoverBg}`
|
|
636
636
|
),
|
|
637
637
|
children: /* @__PURE__ */ jsx(
|
|
@@ -640,7 +640,7 @@ var TemplateCard = ({
|
|
|
640
640
|
size: 48,
|
|
641
641
|
strokeWidth: 1.5,
|
|
642
642
|
className: cn(
|
|
643
|
-
"transition-colors duration-
|
|
643
|
+
"transition-colors duration-hz-slow ease-hz-default",
|
|
644
644
|
isSelected ? colors.iconSelected : `text-neutral-400 dark:text-neutral-500 ${colors.iconHover}`
|
|
645
645
|
)
|
|
646
646
|
}
|
|
@@ -730,7 +730,7 @@ var TemplateListItem = ({
|
|
|
730
730
|
transition: { type: "spring", stiffness: 400, damping: 25 },
|
|
731
731
|
onClick: () => onSelect(template.id),
|
|
732
732
|
className: cn(
|
|
733
|
-
"group flex items-center gap-4 p-3 cursor-pointer rounded-
|
|
733
|
+
"group flex items-center gap-4 p-3 cursor-pointer rounded-hz-lg border-2 transition-all duration-hz-slow ease-hz-default",
|
|
734
734
|
"bg-white dark:bg-neutral-800",
|
|
735
735
|
isSelected ? `${colors.selectedBorder} shadow-md ${colors.selectedGlow}` : "border-neutral-200 dark:border-neutral-700 hover:border-neutral-300 dark:hover:border-neutral-600"
|
|
736
736
|
),
|
|
@@ -739,7 +739,7 @@ var TemplateListItem = ({
|
|
|
739
739
|
"div",
|
|
740
740
|
{
|
|
741
741
|
className: cn(
|
|
742
|
-
"w-5 h-5 rounded-full border-2 flex items-center justify-center flex-shrink-0 transition-all duration-
|
|
742
|
+
"w-5 h-5 rounded-hz-full border-2 flex items-center justify-center flex-shrink-0 transition-all duration-hz-normal ease-hz-default",
|
|
743
743
|
isSelected ? colors.checkBg : "bg-white dark:bg-neutral-800 border-neutral-300 dark:border-neutral-600"
|
|
744
744
|
),
|
|
745
745
|
children: isSelected && /* @__PURE__ */ jsx(Check, { size: 12, className: "text-white", strokeWidth: 3 })
|
|
@@ -749,7 +749,7 @@ var TemplateListItem = ({
|
|
|
749
749
|
"div",
|
|
750
750
|
{
|
|
751
751
|
className: cn(
|
|
752
|
-
"w-12 h-12 rounded-
|
|
752
|
+
"w-12 h-12 rounded-hz-md flex items-center justify-center flex-shrink-0 transition-colors duration-hz-slow ease-hz-default",
|
|
753
753
|
isSelected ? colors.selected : `bg-neutral-100 dark:bg-neutral-700/50 ${colors.hoverBg}`
|
|
754
754
|
),
|
|
755
755
|
children: /* @__PURE__ */ jsx(
|
|
@@ -758,7 +758,7 @@ var TemplateListItem = ({
|
|
|
758
758
|
size: 24,
|
|
759
759
|
strokeWidth: 1.5,
|
|
760
760
|
className: cn(
|
|
761
|
-
"transition-colors duration-
|
|
761
|
+
"transition-colors duration-hz-slow ease-hz-default",
|
|
762
762
|
isSelected ? colors.iconSelected : `text-neutral-400 dark:text-neutral-500 ${colors.iconHover}`
|
|
763
763
|
)
|
|
764
764
|
}
|
|
@@ -801,7 +801,7 @@ var TemplateListItem = ({
|
|
|
801
801
|
type: "button",
|
|
802
802
|
onClick: (e) => onPreviewClick(e, template.previewUrl),
|
|
803
803
|
className: cn(
|
|
804
|
-
"p-2 rounded-
|
|
804
|
+
"p-2 rounded-hz-md transition-all duration-hz-normal ease-hz-default flex-shrink-0",
|
|
805
805
|
"text-neutral-400 dark:text-neutral-500",
|
|
806
806
|
"opacity-0 group-hover:opacity-100",
|
|
807
807
|
colors.hoverBgDark,
|
|
@@ -828,7 +828,7 @@ var TextButton = ({
|
|
|
828
828
|
type = "button",
|
|
829
829
|
...buttonProps
|
|
830
830
|
}) => {
|
|
831
|
-
const baseStyles = `group inline-flex justify-center items-center gap-2 font-medium uppercase tracking-wide transition-all duration-
|
|
831
|
+
const baseStyles = `group inline-flex justify-center items-center gap-2 font-medium uppercase tracking-wide transition-all duration-hz-normal ease-hz-default ${disabled ? "cursor-not-allowed" : "cursor-pointer"}`;
|
|
832
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",
|
|
@@ -949,14 +949,14 @@ var Toast = ({
|
|
|
949
949
|
"div",
|
|
950
950
|
{
|
|
951
951
|
className: cn(
|
|
952
|
-
"fixed top-4 right-4 z-50 max-w-sm w-[calc(100vw-2rem)] sm:w-auto transition-all duration-
|
|
952
|
+
"fixed top-4 right-4 z-50 max-w-sm w-[calc(100vw-2rem)] sm:w-auto transition-all duration-hz-slow ease-hz-default",
|
|
953
953
|
isDismissing ? "translate-x-full opacity-0" : "translate-x-0 opacity-100"
|
|
954
954
|
),
|
|
955
955
|
children: /* @__PURE__ */ jsxs(
|
|
956
956
|
"div",
|
|
957
957
|
{
|
|
958
958
|
className: cn(
|
|
959
|
-
"p-3 sm:p-4 shadow-lg border transition-all duration-
|
|
959
|
+
"p-3 sm:p-4 shadow-hz-lg border rounded-hz-md transition-all duration-hz-normal ease-hz-default",
|
|
960
960
|
styles.container
|
|
961
961
|
),
|
|
962
962
|
children: [
|
|
@@ -970,7 +970,7 @@ var Toast = ({
|
|
|
970
970
|
"button",
|
|
971
971
|
{
|
|
972
972
|
onClick: handleDismiss,
|
|
973
|
-
className: "text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-
|
|
973
|
+
className: "text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-hz-normal ease-hz-default",
|
|
974
974
|
"aria-label": "Dismiss",
|
|
975
975
|
children: /* @__PURE__ */ jsx(X, { className: "w-4 h-4" })
|
|
976
976
|
}
|
|
@@ -979,16 +979,16 @@ var Toast = ({
|
|
|
979
979
|
"button",
|
|
980
980
|
{
|
|
981
981
|
onClick: handleToggleExpand,
|
|
982
|
-
className: "text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-
|
|
982
|
+
className: "text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-hz-normal ease-hz-default",
|
|
983
983
|
"aria-label": isExpanded ? "Collapse" : "Expand",
|
|
984
984
|
children: isExpanded ? /* @__PURE__ */ jsx(ChevronUp, { className: "w-4 h-4" }) : /* @__PURE__ */ jsx(ChevronDown, { className: "w-4 h-4" })
|
|
985
985
|
}
|
|
986
986
|
)
|
|
987
987
|
] }),
|
|
988
|
-
/* @__PURE__ */ jsx("div", { className: "mt-3 w-full bg-neutral-200 dark:bg-neutral-600 h-1 transition-all duration-
|
|
988
|
+
/* @__PURE__ */ jsx("div", { className: "mt-3 w-full bg-neutral-200 dark:bg-neutral-600 h-1 rounded-hz-full overflow-hidden transition-all duration-hz-normal", children: /* @__PURE__ */ jsx(
|
|
989
989
|
"div",
|
|
990
990
|
{
|
|
991
|
-
className: cn("h-full transition-all duration-100 ease-linear", styles.progress),
|
|
991
|
+
className: cn("h-full rounded-hz-full transition-all duration-100 ease-linear", styles.progress),
|
|
992
992
|
style: { width: `${progressWidth}%` }
|
|
993
993
|
}
|
|
994
994
|
) })
|
|
@@ -1000,5 +1000,5 @@ var Toast = ({
|
|
|
1000
1000
|
};
|
|
1001
1001
|
|
|
1002
1002
|
export { AnimatedButton, Input, TemplateSelector, TextButton, Toast };
|
|
1003
|
-
//# sourceMappingURL=chunk-
|
|
1004
|
-
//# sourceMappingURL=chunk-
|
|
1003
|
+
//# sourceMappingURL=chunk-SVBDAFK4.mjs.map
|
|
1004
|
+
//# sourceMappingURL=chunk-SVBDAFK4.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-SVBDAFK4.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-hz-slow ease-hz-default rounded-hz-md\",\n filled:\n \"border-0 bg-neutral-50/60 dark:bg-neutral-700/60 backdrop-blur-sm transition-colors duration-hz-slow ease-hz-default rounded-hz-md\",\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-hz-slow ease-hz-default 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-hz-slow ease-hz-default\"\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-hz-lg p-3 shadow-lg w-80 transition-colors duration-hz-slow ease-hz-default\">\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 z-10 ${\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-hz-slow ease-hz-default\">\n {error}\n </p>\n )}\n {helperText && !error && (\n <p className=\"text-sm text-neutral-500 dark:text-neutral-400 transition-colors duration-hz-slow ease-hz-default\">\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-hz-md 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-hz-sm text-sm font-medium transition-all duration-hz-normal ease-hz-default\",\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-hz-sm text-sm font-medium transition-all duration-hz-normal ease-hz-default\",\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-hz-lg overflow-hidden border-2 transition-all duration-hz-slow ease-hz-default\",\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-hz-full border-2 flex items-center justify-center transition-all duration-hz-normal ease-hz-default\",\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-hz-md transition-all duration-hz-normal ease-hz-default\",\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-hz-full transition-all duration-hz-slow ease-hz-default\",\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-hz-slow ease-hz-default\",\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-hz-lg border-2 transition-all duration-hz-slow ease-hz-default\",\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-hz-full border-2 flex items-center justify-center flex-shrink-0 transition-all duration-hz-normal ease-hz-default\",\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-hz-md flex items-center justify-center flex-shrink-0 transition-colors duration-hz-slow ease-hz-default\",\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-hz-slow ease-hz-default\",\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-hz-md transition-all duration-hz-normal ease-hz-default 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-hz-normal ease-hz-default ${\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-hz-slow ease-hz-default\",\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-hz-lg border rounded-hz-md transition-all duration-hz-normal ease-hz-default\",\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-hz-normal ease-hz-default\"\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-hz-normal ease-hz-default\"\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 rounded-hz-full overflow-hidden transition-all duration-hz-normal\">\n <div\n className={cn(\"h-full rounded-hz-full transition-all duration-100 ease-linear\", styles.progress)}\n style={{ width: `${progressWidth}%` }}\n />\n </div>\n </div>\n </div>\n );\n};\n"]}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __commonJS = (cb, mod) => function __require() {
|
|
8
|
+
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
19
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
20
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
21
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
22
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
23
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
24
|
+
mod
|
|
25
|
+
));
|
|
26
|
+
|
|
27
|
+
export { __commonJS, __toESM };
|
|
28
|
+
//# sourceMappingURL=chunk-WFBSFUC6.mjs.map
|
|
29
|
+
//# sourceMappingURL=chunk-WFBSFUC6.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-WFBSFUC6.mjs"}
|
package/dist/enhanced.js
CHANGED
|
@@ -1,53 +1,54 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkL5DU65XJ_js = require('./chunk-L5DU65XJ.js');
|
|
4
4
|
require('./chunk-TMZLQK74.js');
|
|
5
|
+
require('./chunk-GGM3MDFM.js');
|
|
5
6
|
|
|
6
7
|
|
|
7
8
|
|
|
8
9
|
Object.defineProperty(exports, "AnimatedButton", {
|
|
9
10
|
enumerable: true,
|
|
10
|
-
get: function () { return
|
|
11
|
+
get: function () { return chunkL5DU65XJ_js.AnimatedButton; }
|
|
11
12
|
});
|
|
12
13
|
Object.defineProperty(exports, "Globe", {
|
|
13
14
|
enumerable: true,
|
|
14
|
-
get: function () { return
|
|
15
|
+
get: function () { return chunkL5DU65XJ_js.Globe; }
|
|
15
16
|
});
|
|
16
17
|
Object.defineProperty(exports, "Input", {
|
|
17
18
|
enumerable: true,
|
|
18
|
-
get: function () { return
|
|
19
|
+
get: function () { return chunkL5DU65XJ_js.Input; }
|
|
19
20
|
});
|
|
20
21
|
Object.defineProperty(exports, "Moon", {
|
|
21
22
|
enumerable: true,
|
|
22
|
-
get: function () { return
|
|
23
|
+
get: function () { return chunkL5DU65XJ_js.Moon; }
|
|
23
24
|
});
|
|
24
25
|
Object.defineProperty(exports, "Orbit", {
|
|
25
26
|
enumerable: true,
|
|
26
|
-
get: function () { return
|
|
27
|
+
get: function () { return chunkL5DU65XJ_js.Orbit; }
|
|
27
28
|
});
|
|
28
29
|
Object.defineProperty(exports, "Rocket", {
|
|
29
30
|
enumerable: true,
|
|
30
|
-
get: function () { return
|
|
31
|
+
get: function () { return chunkL5DU65XJ_js.Rocket; }
|
|
31
32
|
});
|
|
32
33
|
Object.defineProperty(exports, "Sparkles", {
|
|
33
34
|
enumerable: true,
|
|
34
|
-
get: function () { return
|
|
35
|
+
get: function () { return chunkL5DU65XJ_js.Sparkles; }
|
|
35
36
|
});
|
|
36
37
|
Object.defineProperty(exports, "Star", {
|
|
37
38
|
enumerable: true,
|
|
38
|
-
get: function () { return
|
|
39
|
+
get: function () { return chunkL5DU65XJ_js.Star; }
|
|
39
40
|
});
|
|
40
41
|
Object.defineProperty(exports, "TemplateSelector", {
|
|
41
42
|
enumerable: true,
|
|
42
|
-
get: function () { return
|
|
43
|
+
get: function () { return chunkL5DU65XJ_js.TemplateSelector; }
|
|
43
44
|
});
|
|
44
45
|
Object.defineProperty(exports, "TextButton", {
|
|
45
46
|
enumerable: true,
|
|
46
|
-
get: function () { return
|
|
47
|
+
get: function () { return chunkL5DU65XJ_js.TextButton; }
|
|
47
48
|
});
|
|
48
49
|
Object.defineProperty(exports, "Toast", {
|
|
49
50
|
enumerable: true,
|
|
50
|
-
get: function () { return
|
|
51
|
+
get: function () { return chunkL5DU65XJ_js.Toast; }
|
|
51
52
|
});
|
|
52
53
|
//# sourceMappingURL=enhanced.js.map
|
|
53
54
|
//# sourceMappingURL=enhanced.js.map
|
package/dist/enhanced.mjs
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
export { AnimatedButton, Globe, Input, Moon, Orbit, Rocket, Sparkles, Star, TemplateSelector, TextButton, Toast } from './chunk-
|
|
1
|
+
export { AnimatedButton, Globe, Input, Moon, Orbit, Rocket, Sparkles, Star, TemplateSelector, TextButton, Toast } from './chunk-SVBDAFK4.mjs';
|
|
2
2
|
import './chunk-TDRL2RCT.mjs';
|
|
3
|
+
import './chunk-WFBSFUC6.mjs';
|
|
3
4
|
//# sourceMappingURL=enhanced.mjs.map
|
|
4
5
|
//# sourceMappingURL=enhanced.mjs.map
|
package/dist/hooks.js
CHANGED
package/dist/hooks.mjs
CHANGED