@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.
@@ -194,8 +194,8 @@ var Input = React.forwardRef(
194
194
  lg: 20
195
195
  };
196
196
  const variantStyles2 = {
197
- default: "border bg-white/60 dark:bg-neutral-800/60 backdrop-blur-sm transition-colors duration-300 rounded-lg",
198
- filled: "border-0 bg-neutral-50/60 dark:bg-neutral-700/60 backdrop-blur-sm transition-colors duration-300 rounded-lg"
197
+ default: "border bg-white/60 dark:bg-neutral-800/60 backdrop-blur-sm transition-colors duration-hz-slow ease-hz-default rounded-hz-md",
198
+ 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"
199
199
  };
200
200
  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";
201
201
  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";
@@ -227,14 +227,14 @@ var Input = React.forwardRef(
227
227
  const canIncrement = !disabled && (max === void 0 || (parseFloat(inputValue) || 0) < max);
228
228
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "w-full", children: [
229
229
  label && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative mb-2", children: [
230
- /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "text-sm font-medium text-neutral-700 dark:text-neutral-300 transition-colors duration-300 flex items-center", children: [
230
+ /* @__PURE__ */ jsxRuntime.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: [
231
231
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs sm:text-sm", children: label }),
232
232
  required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-rose-500 ml-1", children: "*" }),
233
233
  tooltip && /* @__PURE__ */ jsxRuntime.jsx(
234
234
  "button",
235
235
  {
236
236
  type: "button",
237
- className: "ml-2 text-neutral-400 dark:text-neutral-500 hover:text-neutral-600 dark:hover:text-neutral-300 transition-colors duration-300",
237
+ 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",
238
238
  onMouseEnter: () => setShowTooltip(true),
239
239
  onMouseLeave: () => setShowTooltip(false),
240
240
  onFocus: () => setShowTooltip(true),
@@ -243,13 +243,13 @@ var Input = React.forwardRef(
243
243
  }
244
244
  )
245
245
  ] }),
246
- tooltip && showTooltip && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute z-[9999] pointer-events-none left-0 bottom-full mt-2", children: /* @__PURE__ */ jsxRuntime.jsx("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", children: tooltip.content }) })
246
+ tooltip && showTooltip && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "absolute z-[9999] pointer-events-none left-0 bottom-full mt-2", children: /* @__PURE__ */ jsxRuntime.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 }) })
247
247
  ] }),
248
248
  /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative", children: [
249
249
  hasLeadingContent && /* @__PURE__ */ jsxRuntime.jsx(
250
250
  "div",
251
251
  {
252
- className: `absolute inset-y-0 left-0 pl-3 flex items-center ${onLeadingClick ? "cursor-pointer" : "pointer-events-none"}`,
252
+ className: `absolute inset-y-0 left-0 pl-3 flex items-center z-10 ${onLeadingClick ? "cursor-pointer" : "pointer-events-none"}`,
253
253
  onClick: onLeadingClick,
254
254
  children: leadingDecorator ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-neutral-400", children: leadingDecorator }) : /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-neutral-400", children: leadingIcon })
255
255
  }
@@ -356,8 +356,8 @@ var Input = React.forwardRef(
356
356
  )
357
357
  ] }),
358
358
  (error || helperText) && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-2", children: [
359
- error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-rose-600 dark:text-rose-400 transition-colors duration-300", children: error }),
360
- helperText && !error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-neutral-500 dark:text-neutral-400 transition-colors duration-300", children: helperText })
359
+ error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-rose-600 dark:text-rose-400 transition-colors duration-hz-slow ease-hz-default", children: error }),
360
+ helperText && !error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-sm text-neutral-500 dark:text-neutral-400 transition-colors duration-hz-slow ease-hz-default", children: helperText })
361
361
  ] })
362
362
  ] });
363
363
  }
@@ -484,14 +484,14 @@ var TemplateSelector = ({
484
484
  4: "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4"
485
485
  };
486
486
  return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkTMZLQK74_js.cn("w-full", className), children: [
487
- showViewToggle && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end mb-4", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "inline-flex rounded-lg border border-neutral-200 dark:border-neutral-700 p-1 bg-neutral-100 dark:bg-neutral-800", children: [
487
+ showViewToggle && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end mb-4", children: /* @__PURE__ */ jsxRuntime.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: [
488
488
  /* @__PURE__ */ jsxRuntime.jsx(
489
489
  "button",
490
490
  {
491
491
  type: "button",
492
492
  onClick: () => setView("card"),
493
493
  className: chunkTMZLQK74_js.cn(
494
- "p-2 rounded-md text-sm font-medium transition-all duration-200",
494
+ "p-2 rounded-hz-sm text-sm font-medium transition-all duration-hz-normal ease-hz-default",
495
495
  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"
496
496
  ),
497
497
  "aria-label": "Card view",
@@ -504,7 +504,7 @@ var TemplateSelector = ({
504
504
  type: "button",
505
505
  onClick: () => setView("list"),
506
506
  className: chunkTMZLQK74_js.cn(
507
- "p-2 rounded-md text-sm font-medium transition-all duration-200",
507
+ "p-2 rounded-hz-sm text-sm font-medium transition-all duration-hz-normal ease-hz-default",
508
508
  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"
509
509
  ),
510
510
  "aria-label": "List view",
@@ -612,7 +612,7 @@ var TemplateCard = ({
612
612
  transition: { type: "spring", stiffness: 400, damping: 25 },
613
613
  onClick: () => onSelect(template.id),
614
614
  className: chunkTMZLQK74_js.cn(
615
- "group relative cursor-pointer rounded-xl overflow-hidden border-2 transition-all duration-300",
615
+ "group relative cursor-pointer rounded-hz-lg overflow-hidden border-2 transition-all duration-hz-slow ease-hz-default",
616
616
  "bg-white dark:bg-neutral-800",
617
617
  isSelected ? `${colors.selectedBorder} ${colors.selectedGlow}` : "border-neutral-200 dark:border-neutral-700 hover:border-neutral-300 dark:hover:border-neutral-600 hover:shadow-md",
618
618
  className
@@ -622,7 +622,7 @@ var TemplateCard = ({
622
622
  "div",
623
623
  {
624
624
  className: chunkTMZLQK74_js.cn(
625
- "absolute top-3 left-3 z-10 w-5 h-5 rounded-full border-2 flex items-center justify-center transition-all duration-200",
625
+ "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",
626
626
  isSelected ? colors.checkBg : "bg-white dark:bg-neutral-800 border-neutral-300 dark:border-neutral-600"
627
627
  ),
628
628
  children: isSelected && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { size: 12, className: "text-white", strokeWidth: 3 })
@@ -634,7 +634,7 @@ var TemplateCard = ({
634
634
  type: "button",
635
635
  onClick: (e) => onPreviewClick(e, template.previewUrl),
636
636
  className: chunkTMZLQK74_js.cn(
637
- "absolute top-3 right-3 z-10 p-1.5 rounded-lg transition-all duration-200",
637
+ "absolute top-3 right-3 z-10 p-1.5 rounded-hz-md transition-all duration-hz-normal ease-hz-default",
638
638
  "bg-white dark:bg-neutral-700",
639
639
  "border border-neutral-200 dark:border-neutral-600",
640
640
  "text-neutral-500 dark:text-neutral-400",
@@ -651,7 +651,7 @@ var TemplateCard = ({
651
651
  initial: { scale: 0.9, opacity: 0.5 },
652
652
  animate: { scale: 1, opacity: 1 },
653
653
  className: chunkTMZLQK74_js.cn(
654
- "p-6 rounded-full transition-all duration-300",
654
+ "p-6 rounded-hz-full transition-all duration-hz-slow ease-hz-default",
655
655
  isSelected ? colors.selected : `bg-neutral-100 dark:bg-neutral-700/50 ${colors.hoverBg}`
656
656
  ),
657
657
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -660,7 +660,7 @@ var TemplateCard = ({
660
660
  size: 48,
661
661
  strokeWidth: 1.5,
662
662
  className: chunkTMZLQK74_js.cn(
663
- "transition-colors duration-300",
663
+ "transition-colors duration-hz-slow ease-hz-default",
664
664
  isSelected ? colors.iconSelected : `text-neutral-400 dark:text-neutral-500 ${colors.iconHover}`
665
665
  )
666
666
  }
@@ -750,7 +750,7 @@ var TemplateListItem = ({
750
750
  transition: { type: "spring", stiffness: 400, damping: 25 },
751
751
  onClick: () => onSelect(template.id),
752
752
  className: chunkTMZLQK74_js.cn(
753
- "group flex items-center gap-4 p-3 cursor-pointer rounded-xl border-2 transition-all duration-300",
753
+ "group flex items-center gap-4 p-3 cursor-pointer rounded-hz-lg border-2 transition-all duration-hz-slow ease-hz-default",
754
754
  "bg-white dark:bg-neutral-800",
755
755
  isSelected ? `${colors.selectedBorder} shadow-md ${colors.selectedGlow}` : "border-neutral-200 dark:border-neutral-700 hover:border-neutral-300 dark:hover:border-neutral-600"
756
756
  ),
@@ -759,7 +759,7 @@ var TemplateListItem = ({
759
759
  "div",
760
760
  {
761
761
  className: chunkTMZLQK74_js.cn(
762
- "w-5 h-5 rounded-full border-2 flex items-center justify-center flex-shrink-0 transition-all duration-200",
762
+ "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",
763
763
  isSelected ? colors.checkBg : "bg-white dark:bg-neutral-800 border-neutral-300 dark:border-neutral-600"
764
764
  ),
765
765
  children: isSelected && /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Check, { size: 12, className: "text-white", strokeWidth: 3 })
@@ -769,7 +769,7 @@ var TemplateListItem = ({
769
769
  "div",
770
770
  {
771
771
  className: chunkTMZLQK74_js.cn(
772
- "w-12 h-12 rounded-lg flex items-center justify-center flex-shrink-0 transition-colors duration-300",
772
+ "w-12 h-12 rounded-hz-md flex items-center justify-center flex-shrink-0 transition-colors duration-hz-slow ease-hz-default",
773
773
  isSelected ? colors.selected : `bg-neutral-100 dark:bg-neutral-700/50 ${colors.hoverBg}`
774
774
  ),
775
775
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -778,7 +778,7 @@ var TemplateListItem = ({
778
778
  size: 24,
779
779
  strokeWidth: 1.5,
780
780
  className: chunkTMZLQK74_js.cn(
781
- "transition-colors duration-300",
781
+ "transition-colors duration-hz-slow ease-hz-default",
782
782
  isSelected ? colors.iconSelected : `text-neutral-400 dark:text-neutral-500 ${colors.iconHover}`
783
783
  )
784
784
  }
@@ -821,7 +821,7 @@ var TemplateListItem = ({
821
821
  type: "button",
822
822
  onClick: (e) => onPreviewClick(e, template.previewUrl),
823
823
  className: chunkTMZLQK74_js.cn(
824
- "p-2 rounded-lg transition-all duration-200 flex-shrink-0",
824
+ "p-2 rounded-hz-md transition-all duration-hz-normal ease-hz-default flex-shrink-0",
825
825
  "text-neutral-400 dark:text-neutral-500",
826
826
  "opacity-0 group-hover:opacity-100",
827
827
  colors.hoverBgDark,
@@ -848,7 +848,7 @@ var TextButton = ({
848
848
  type = "button",
849
849
  ...buttonProps
850
850
  }) => {
851
- 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"}`;
851
+ 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"}`;
852
852
  const variantStyles2 = {
853
853
  primary: "text-blue-600 hover:text-blue-700 focus:ring-blue-500",
854
854
  secondary: "text-neutral-600 hover:text-neutral-700 focus:ring-neutral-500",
@@ -969,14 +969,14 @@ var Toast = ({
969
969
  "div",
970
970
  {
971
971
  className: chunkTMZLQK74_js.cn(
972
- "fixed top-4 right-4 z-50 max-w-sm w-[calc(100vw-2rem)] sm:w-auto transition-all duration-300",
972
+ "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",
973
973
  isDismissing ? "translate-x-full opacity-0" : "translate-x-0 opacity-100"
974
974
  ),
975
975
  children: /* @__PURE__ */ jsxRuntime.jsxs(
976
976
  "div",
977
977
  {
978
978
  className: chunkTMZLQK74_js.cn(
979
- "p-3 sm:p-4 shadow-lg border transition-all duration-300",
979
+ "p-3 sm:p-4 shadow-hz-lg border rounded-hz-md transition-all duration-hz-normal ease-hz-default",
980
980
  styles.container
981
981
  ),
982
982
  children: [
@@ -990,7 +990,7 @@ var Toast = ({
990
990
  "button",
991
991
  {
992
992
  onClick: handleDismiss,
993
- className: "text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-300",
993
+ 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",
994
994
  "aria-label": "Dismiss",
995
995
  children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, { className: "w-4 h-4" })
996
996
  }
@@ -999,16 +999,16 @@ var Toast = ({
999
999
  "button",
1000
1000
  {
1001
1001
  onClick: handleToggleExpand,
1002
- className: "text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-300",
1002
+ 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",
1003
1003
  "aria-label": isExpanded ? "Collapse" : "Expand",
1004
1004
  children: isExpanded ? /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronUp, { className: "w-4 h-4" }) : /* @__PURE__ */ jsxRuntime.jsx(lucideReact.ChevronDown, { className: "w-4 h-4" })
1005
1005
  }
1006
1006
  )
1007
1007
  ] }),
1008
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-3 w-full bg-neutral-200 dark:bg-neutral-600 h-1 transition-all duration-300", children: /* @__PURE__ */ jsxRuntime.jsx(
1008
+ /* @__PURE__ */ jsxRuntime.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__ */ jsxRuntime.jsx(
1009
1009
  "div",
1010
1010
  {
1011
- className: chunkTMZLQK74_js.cn("h-full transition-all duration-100 ease-linear", styles.progress),
1011
+ className: chunkTMZLQK74_js.cn("h-full rounded-hz-full transition-all duration-100 ease-linear", styles.progress),
1012
1012
  style: { width: `${progressWidth}%` }
1013
1013
  }
1014
1014
  ) })
@@ -1048,5 +1048,5 @@ exports.Input = Input;
1048
1048
  exports.TemplateSelector = TemplateSelector;
1049
1049
  exports.TextButton = TextButton;
1050
1050
  exports.Toast = Toast;
1051
- //# sourceMappingURL=chunk-XAPJWVE6.js.map
1052
- //# sourceMappingURL=chunk-XAPJWVE6.js.map
1051
+ //# sourceMappingURL=chunk-L5DU65XJ.js.map
1052
+ //# sourceMappingURL=chunk-L5DU65XJ.js.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":["jsx","motion","forwardRef","useState","useEffect","variantStyles","jsxs","Info","ChevronDown","ChevronUp","Sparkles","Orbit","Globe","Star","Rocket","Moon","React","cn","LayoutGrid","List","AnimatePresence","Check","ExternalLink","AlertTriangle","X"],"mappings":"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","file":"chunk-L5DU65XJ.js","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"]}