@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.
@@ -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-300 rounded-lg",
178
- filled: "border-0 bg-neutral-50/60 dark:bg-neutral-700/60 backdrop-blur-sm transition-colors duration-300 rounded-lg"
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-300 flex items-center", children: [
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-300",
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-xl p-3 shadow-lg w-80 transition-colors duration-300", children: tooltip.content }) })
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-300", children: error }),
340
- helperText && !error && /* @__PURE__ */ jsx("p", { className: "text-sm text-neutral-500 dark:text-neutral-400 transition-colors duration-300", children: helperText })
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-lg border border-neutral-200 dark:border-neutral-700 p-1 bg-neutral-100 dark:bg-neutral-800", children: [
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-md text-sm font-medium transition-all duration-200",
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-md text-sm font-medium transition-all duration-200",
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-xl overflow-hidden border-2 transition-all duration-300",
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-200",
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-lg transition-all duration-200",
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-300",
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-300",
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-xl border-2 transition-all duration-300",
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-200",
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-lg flex items-center justify-center flex-shrink-0 transition-colors duration-300",
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-300",
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-lg transition-all duration-200 flex-shrink-0",
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-200 ${disabled ? "cursor-not-allowed" : "cursor-pointer"}`;
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-300",
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-300",
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-300",
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-300",
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-300", children: /* @__PURE__ */ jsx(
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-IJCKCS4A.mjs.map
1004
- //# sourceMappingURL=chunk-IJCKCS4A.mjs.map
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 chunkXAPJWVE6_js = require('./chunk-XAPJWVE6.js');
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 chunkXAPJWVE6_js.AnimatedButton; }
11
+ get: function () { return chunkL5DU65XJ_js.AnimatedButton; }
11
12
  });
12
13
  Object.defineProperty(exports, "Globe", {
13
14
  enumerable: true,
14
- get: function () { return chunkXAPJWVE6_js.Globe; }
15
+ get: function () { return chunkL5DU65XJ_js.Globe; }
15
16
  });
16
17
  Object.defineProperty(exports, "Input", {
17
18
  enumerable: true,
18
- get: function () { return chunkXAPJWVE6_js.Input; }
19
+ get: function () { return chunkL5DU65XJ_js.Input; }
19
20
  });
20
21
  Object.defineProperty(exports, "Moon", {
21
22
  enumerable: true,
22
- get: function () { return chunkXAPJWVE6_js.Moon; }
23
+ get: function () { return chunkL5DU65XJ_js.Moon; }
23
24
  });
24
25
  Object.defineProperty(exports, "Orbit", {
25
26
  enumerable: true,
26
- get: function () { return chunkXAPJWVE6_js.Orbit; }
27
+ get: function () { return chunkL5DU65XJ_js.Orbit; }
27
28
  });
28
29
  Object.defineProperty(exports, "Rocket", {
29
30
  enumerable: true,
30
- get: function () { return chunkXAPJWVE6_js.Rocket; }
31
+ get: function () { return chunkL5DU65XJ_js.Rocket; }
31
32
  });
32
33
  Object.defineProperty(exports, "Sparkles", {
33
34
  enumerable: true,
34
- get: function () { return chunkXAPJWVE6_js.Sparkles; }
35
+ get: function () { return chunkL5DU65XJ_js.Sparkles; }
35
36
  });
36
37
  Object.defineProperty(exports, "Star", {
37
38
  enumerable: true,
38
- get: function () { return chunkXAPJWVE6_js.Star; }
39
+ get: function () { return chunkL5DU65XJ_js.Star; }
39
40
  });
40
41
  Object.defineProperty(exports, "TemplateSelector", {
41
42
  enumerable: true,
42
- get: function () { return chunkXAPJWVE6_js.TemplateSelector; }
43
+ get: function () { return chunkL5DU65XJ_js.TemplateSelector; }
43
44
  });
44
45
  Object.defineProperty(exports, "TextButton", {
45
46
  enumerable: true,
46
- get: function () { return chunkXAPJWVE6_js.TextButton; }
47
+ get: function () { return chunkL5DU65XJ_js.TextButton; }
47
48
  });
48
49
  Object.defineProperty(exports, "Toast", {
49
50
  enumerable: true,
50
- get: function () { return chunkXAPJWVE6_js.Toast; }
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-IJCKCS4A.mjs';
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
@@ -1,6 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  var chunkHQDEEBXV_js = require('./chunk-HQDEEBXV.js');
4
+ require('./chunk-GGM3MDFM.js');
4
5
 
5
6
 
6
7
 
package/dist/hooks.mjs CHANGED
@@ -1,3 +1,4 @@
1
1
  export { useToast } from './chunk-BNOZCJOK.mjs';
2
+ import './chunk-WFBSFUC6.mjs';
2
3
  //# sourceMappingURL=hooks.mjs.map
3
4
  //# sourceMappingURL=hooks.mjs.map