@pos-360/horizon 0.1.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.
Files changed (56) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +185 -0
  3. package/dist/animated-icons.d.mts +54 -0
  4. package/dist/animated-icons.d.ts +54 -0
  5. package/dist/animated-icons.js +28 -0
  6. package/dist/animated-icons.js.map +1 -0
  7. package/dist/animated-icons.mjs +3 -0
  8. package/dist/animated-icons.mjs.map +1 -0
  9. package/dist/chunk-2B2BWI5A.mjs +324 -0
  10. package/dist/chunk-2B2BWI5A.mjs.map +1 -0
  11. package/dist/chunk-6YAK6HNR.mjs +471 -0
  12. package/dist/chunk-6YAK6HNR.mjs.map +1 -0
  13. package/dist/chunk-7LVVOCBV.mjs +977 -0
  14. package/dist/chunk-7LVVOCBV.mjs.map +1 -0
  15. package/dist/chunk-AA25LTS4.js +4 -0
  16. package/dist/chunk-AA25LTS4.js.map +1 -0
  17. package/dist/chunk-J6RXKZE5.js +1080 -0
  18. package/dist/chunk-J6RXKZE5.js.map +1 -0
  19. package/dist/chunk-R5HAFV6M.js +350 -0
  20. package/dist/chunk-R5HAFV6M.js.map +1 -0
  21. package/dist/chunk-Y6G4VKJ3.mjs +3 -0
  22. package/dist/chunk-Y6G4VKJ3.mjs.map +1 -0
  23. package/dist/chunk-ZD6CMWPW.js +476 -0
  24. package/dist/chunk-ZD6CMWPW.js.map +1 -0
  25. package/dist/enhanced.d.mts +81 -0
  26. package/dist/enhanced.d.ts +81 -0
  27. package/dist/enhanced.js +24 -0
  28. package/dist/enhanced.js.map +1 -0
  29. package/dist/enhanced.mjs +3 -0
  30. package/dist/enhanced.mjs.map +1 -0
  31. package/dist/hooks.d.mts +2 -0
  32. package/dist/hooks.d.ts +2 -0
  33. package/dist/hooks.js +6 -0
  34. package/dist/hooks.js.map +1 -0
  35. package/dist/hooks.mjs +3 -0
  36. package/dist/hooks.mjs.map +1 -0
  37. package/dist/index.d.mts +25 -0
  38. package/dist/index.d.ts +25 -0
  39. package/dist/index.js +351 -0
  40. package/dist/index.js.map +1 -0
  41. package/dist/index.mjs +6 -0
  42. package/dist/index.mjs.map +1 -0
  43. package/dist/primitives.d.mts +168 -0
  44. package/dist/primitives.d.ts +168 -0
  45. package/dist/primitives.js +308 -0
  46. package/dist/primitives.js.map +1 -0
  47. package/dist/primitives.mjs +3 -0
  48. package/dist/primitives.mjs.map +1 -0
  49. package/dist/tailwind.d.mts +104 -0
  50. package/dist/tailwind.d.ts +104 -0
  51. package/dist/tailwind.js +75 -0
  52. package/dist/tailwind.js.map +1 -0
  53. package/dist/tailwind.mjs +73 -0
  54. package/dist/tailwind.mjs.map +1 -0
  55. package/package.json +103 -0
  56. package/tailwind.config.js +105 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/animated-icons/arrow-right-icon.tsx","../src/components/animated-icons/plus-icon.tsx","../src/components/animated-icons/check-icon.tsx","../src/components/animated-icons/send-icon.tsx","../src/components/animated-icons/trash-icon.tsx"],"names":["React2","useAnimation","jsxs","motion","jsx","React3","React4","React5"],"mappings":"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","file":"chunk-2B2BWI5A.mjs","sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { motion, useAnimation } from \"framer-motion\";\n\nexport interface ArrowRightIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\nexport interface ArrowRightIconProps {\n size?: number;\n className?: string;\n}\n\nconst ArrowRightIcon = React.forwardRef<ArrowRightIconHandle, ArrowRightIconProps>(\n ({ size = 24, className }, ref) => {\n const controls = useAnimation();\n const isControlledRef = React.useRef(false);\n\n React.useImperativeHandle(ref, () => ({\n startAnimation: () => {\n isControlledRef.current = true;\n controls.start({\n x: [0, 4, 0],\n transition: { duration: 0.4, ease: \"easeInOut\" },\n });\n },\n stopAnimation: () => {\n isControlledRef.current = false;\n controls.stop();\n controls.set({ x: 0 });\n },\n }));\n\n const handleHoverStart = () => {\n if (!isControlledRef.current) {\n controls.start({\n x: [0, 4, 0],\n transition: { duration: 0.4, ease: \"easeInOut\" },\n });\n }\n };\n\n return (\n <motion.svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n onHoverStart={handleHoverStart}\n animate={controls}\n >\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </motion.svg>\n );\n }\n);\n\nArrowRightIcon.displayName = \"ArrowRightIcon\";\n\nexport { ArrowRightIcon };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { motion, useAnimation } from \"framer-motion\";\n\nexport interface PlusIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\nexport interface PlusIconProps {\n size?: number;\n className?: string;\n}\n\nconst PlusIcon = React.forwardRef<PlusIconHandle, PlusIconProps>(\n ({ size = 24, className }, ref) => {\n const controls = useAnimation();\n const isControlledRef = React.useRef(false);\n\n React.useImperativeHandle(ref, () => ({\n startAnimation: () => {\n isControlledRef.current = true;\n controls.start({\n rotate: [0, 90],\n scale: [1, 1.1, 1],\n transition: { duration: 0.3, ease: \"easeInOut\" },\n });\n },\n stopAnimation: () => {\n isControlledRef.current = false;\n controls.stop();\n controls.set({ rotate: 0, scale: 1 });\n },\n }));\n\n const handleHoverStart = () => {\n if (!isControlledRef.current) {\n controls.start({\n rotate: [0, 90],\n scale: [1, 1.1, 1],\n transition: { duration: 0.3, ease: \"easeInOut\" },\n });\n }\n };\n\n const handleHoverEnd = () => {\n if (!isControlledRef.current) {\n controls.start({\n rotate: 0,\n scale: 1,\n transition: { duration: 0.2 },\n });\n }\n };\n\n return (\n <motion.svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n onHoverStart={handleHoverStart}\n onHoverEnd={handleHoverEnd}\n animate={controls}\n >\n <path d=\"M12 5v14\" />\n <path d=\"M5 12h14\" />\n </motion.svg>\n );\n }\n);\n\nPlusIcon.displayName = \"PlusIcon\";\n\nexport { PlusIcon };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { motion, useAnimation } from \"framer-motion\";\n\nexport interface CheckIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\nexport interface CheckIconProps {\n size?: number;\n className?: string;\n}\n\nconst CheckIcon = React.forwardRef<CheckIconHandle, CheckIconProps>(\n ({ size = 24, className }, ref) => {\n const controls = useAnimation();\n const isControlledRef = React.useRef(false);\n\n React.useImperativeHandle(ref, () => ({\n startAnimation: () => {\n isControlledRef.current = true;\n controls.start({\n pathLength: [0, 1],\n transition: { duration: 0.4, ease: \"easeOut\" },\n });\n },\n stopAnimation: () => {\n isControlledRef.current = false;\n controls.stop();\n controls.set({ pathLength: 1 });\n },\n }));\n\n const handleHoverStart = () => {\n if (!isControlledRef.current) {\n controls.start({\n scale: [1, 1.2, 1],\n transition: { duration: 0.3, ease: \"easeInOut\" },\n });\n }\n };\n\n return (\n <motion.svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n onHoverStart={handleHoverStart}\n animate={controls}\n >\n <motion.path d=\"M20 6 9 17l-5-5\" animate={controls} />\n </motion.svg>\n );\n }\n);\n\nCheckIcon.displayName = \"CheckIcon\";\n\nexport { CheckIcon };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { motion, useAnimation } from \"framer-motion\";\n\nexport interface SendIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\nexport interface SendIconProps {\n size?: number;\n className?: string;\n}\n\nconst SendIcon = React.forwardRef<SendIconHandle, SendIconProps>(\n ({ size = 24, className }, ref) => {\n const controls = useAnimation();\n const isControlledRef = React.useRef(false);\n\n React.useImperativeHandle(ref, () => ({\n startAnimation: () => {\n isControlledRef.current = true;\n controls.start({\n x: [0, 8, -2, 0],\n y: [0, -8, 2, 0],\n transition: { duration: 0.5, ease: \"easeInOut\" },\n });\n },\n stopAnimation: () => {\n isControlledRef.current = false;\n controls.stop();\n controls.set({ x: 0, y: 0 });\n },\n }));\n\n const handleHoverStart = () => {\n if (!isControlledRef.current) {\n controls.start({\n x: [0, 4, 0],\n y: [0, -4, 0],\n transition: { duration: 0.4, ease: \"easeInOut\" },\n });\n }\n };\n\n return (\n <motion.svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n onHoverStart={handleHoverStart}\n animate={controls}\n >\n <path d=\"m22 2-7 20-4-9-9-4Z\" />\n <path d=\"M22 2 11 13\" />\n </motion.svg>\n );\n }\n);\n\nSendIcon.displayName = \"SendIcon\";\n\nexport { SendIcon };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { motion, useAnimation, type Variants } from \"framer-motion\";\n\nexport interface TrashIconHandle {\n startAnimation: () => void;\n stopAnimation: () => void;\n}\n\nexport interface TrashIconProps {\n size?: number;\n duration?: number;\n className?: string;\n}\n\nconst TrashIcon = React.forwardRef<TrashIconHandle, TrashIconProps>(\n ({ size = 24, duration = 1, className }, ref) => {\n const controls = useAnimation();\n const isControlledRef = React.useRef(false);\n\n React.useImperativeHandle(ref, () => {\n isControlledRef.current = true;\n return {\n startAnimation: () => controls.start(\"animate\"),\n stopAnimation: () => controls.start(\"normal\"),\n };\n });\n\n const handleMouseEnter = () => {\n if (!isControlledRef.current) {\n controls.start(\"animate\");\n }\n };\n\n const handleMouseLeave = () => {\n if (!isControlledRef.current) {\n controls.start(\"normal\");\n }\n };\n\n const lidBounce: Variants = {\n normal: { y: 0, rotate: 0 },\n animate: {\n rotate: [0, -10, 6, -3, 0],\n y: [0, -2, 0.5, 0],\n transition: {\n duration: 0.9 * duration,\n ease: \"easeInOut\",\n delay: 0.05,\n },\n },\n };\n\n const barSnap: Variants = {\n normal: { scaleX: 1, opacity: 1 },\n animate: {\n scaleX: [0.85, 1.08, 1],\n opacity: [0.9, 1, 1],\n transition: { duration: 0.45 * duration, ease: \"easeOut\", delay: 0.1 },\n },\n };\n\n const binSettle: Variants = {\n normal: { y: 0, scaleY: 1 },\n animate: {\n scaleY: [1, 0.97, 1],\n transition: { duration: 0.5 * duration, ease: \"easeOut\", delay: 0.2 },\n },\n };\n\n return (\n <motion.div\n className={className}\n style={{ display: \"inline-flex\", alignItems: \"center\", justifyContent: \"center\" }}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n <motion.svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n >\n {/* Bin body */}\n <motion.path\n d=\"M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6\"\n variants={binSettle}\n initial=\"normal\"\n animate={controls}\n style={{ transformOrigin: \"50% 100%\" }}\n />\n {/* Lid bar */}\n <motion.path\n d=\"M3 6h18\"\n variants={barSnap}\n initial=\"normal\"\n animate={controls}\n />\n {/* Lid handle */}\n <motion.path\n d=\"M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2\"\n variants={lidBounce}\n initial=\"normal\"\n animate={controls}\n style={{ transformOrigin: \"12px 6px\" }}\n />\n </motion.svg>\n </motion.div>\n );\n }\n);\n\nTrashIcon.displayName = \"TrashIcon\";\n\nexport { TrashIcon };\n"]}
@@ -0,0 +1,471 @@
1
+ import { motion } from 'framer-motion';
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { forwardRef, useState, useEffect } from 'react';
4
+ import { Info, ChevronDown, ChevronUp, Check, AlertTriangle, X } from 'lucide-react';
5
+
6
+ var AnimatedButton = ({
7
+ label,
8
+ variant = "primary",
9
+ buttonContainerClassName,
10
+ buttonTextClassName,
11
+ onClick
12
+ }) => {
13
+ const handleOnClick = () => {
14
+ onClick?.();
15
+ };
16
+ const baseButtonClass = "text-xs tracking-wider font-medium";
17
+ const variantButtonClass = `${variant === "outlined" ? "border border-1 bg-white" : "bg-[#0F62FE]"}`;
18
+ return /* @__PURE__ */ jsx(
19
+ motion.button,
20
+ {
21
+ whileHover: {
22
+ scale: variant === "primary" ? 1.025 : 1,
23
+ boxShadow: variant === "primary" ? "0 0 4px rgba(15, 96, 254, 0.4), 0 0 16px rgba(15, 96, 254, 0.2)" : ""
24
+ },
25
+ whileTap: { scale: variant === "primary" ? 0.98 : 1 },
26
+ onClick: handleOnClick,
27
+ className: `w-fit p-2 px-4 ${variantButtonClass} ${buttonContainerClassName}`,
28
+ children: /* @__PURE__ */ jsx("span", { className: `${baseButtonClass} ${buttonTextClassName}`, children: label.toUpperCase() })
29
+ }
30
+ );
31
+ };
32
+ var Input = forwardRef(
33
+ ({
34
+ label,
35
+ placeholder,
36
+ value,
37
+ onChange,
38
+ onNumberChange,
39
+ onSelectChange,
40
+ onFocus,
41
+ onBlur,
42
+ type = "text",
43
+ disabled = false,
44
+ required = false,
45
+ error,
46
+ helperText,
47
+ leadingIcon,
48
+ trailingIcon,
49
+ leadingDecorator,
50
+ trailingDecorator,
51
+ onLeadingClick,
52
+ onTrailingClick,
53
+ size = "md",
54
+ variant = "default",
55
+ className = "",
56
+ min,
57
+ max,
58
+ step = 1,
59
+ precision = 0,
60
+ allowNegative = true,
61
+ showControls = false,
62
+ options = [],
63
+ autoComplete,
64
+ readOnly = false,
65
+ tabIndex = 0,
66
+ tooltip,
67
+ ...props
68
+ }, ref) => {
69
+ const [showTooltip, setShowTooltip] = useState(false);
70
+ const isNumberType = type === "number";
71
+ const isSelectType = type === "select";
72
+ const isMobileType = type === "mobile";
73
+ const [inputValue, setInputValue] = useState(
74
+ value !== void 0 ? value.toString() : ""
75
+ );
76
+ useEffect(() => {
77
+ if (value !== void 0) {
78
+ setInputValue(value.toString());
79
+ }
80
+ }, [value]);
81
+ const formatNumber = (num) => {
82
+ if (precision > 0) {
83
+ return parseFloat(num.toFixed(precision));
84
+ }
85
+ return Math.round(num);
86
+ };
87
+ const isValidNumber = (str) => {
88
+ if (str === "" || str === "-") return true;
89
+ const num = parseFloat(str);
90
+ if (isNaN(num)) return false;
91
+ if (!allowNegative && num < 0) return false;
92
+ if (min !== void 0 && num < min) return false;
93
+ if (max !== void 0 && num > max) return false;
94
+ return true;
95
+ };
96
+ const handleInputChange = (e) => {
97
+ if (isMobileType) {
98
+ const digits = (e.target.value || "").replace(/\D/g, "").slice(0, 10);
99
+ onChange?.({
100
+ target: { value: digits }
101
+ });
102
+ return;
103
+ }
104
+ if (isNumberType && onNumberChange) {
105
+ const newValue = e.target.value;
106
+ if (newValue === "" || allowNegative && newValue === "-") {
107
+ setInputValue(newValue);
108
+ return;
109
+ }
110
+ if (isValidNumber(newValue)) {
111
+ setInputValue(newValue);
112
+ const numValue = parseFloat(newValue);
113
+ if (!isNaN(numValue)) {
114
+ onNumberChange(formatNumber(numValue));
115
+ }
116
+ }
117
+ } else {
118
+ onChange?.(e);
119
+ }
120
+ };
121
+ const handleSelectChange = (e) => {
122
+ onSelectChange?.(e.target.value);
123
+ };
124
+ const handleIncrement = () => {
125
+ if (disabled || !isNumberType) return;
126
+ const currentNum = parseFloat(inputValue) || 0;
127
+ const newValue = currentNum + step;
128
+ const constrainedValue = max !== void 0 ? Math.min(newValue, max) : newValue;
129
+ const finalValue = formatNumber(constrainedValue);
130
+ setInputValue(finalValue.toString());
131
+ onNumberChange?.(finalValue);
132
+ };
133
+ const handleDecrement = () => {
134
+ if (disabled || !isNumberType) return;
135
+ const currentNum = parseFloat(inputValue) || 0;
136
+ const newValue = currentNum - step;
137
+ const constrainedValue = min !== void 0 ? Math.max(newValue, min) : newValue;
138
+ const finalValue = formatNumber(constrainedValue);
139
+ setInputValue(finalValue.toString());
140
+ onNumberChange?.(finalValue);
141
+ };
142
+ const handleBlur = (e) => {
143
+ if (isNumberType && onNumberChange) {
144
+ if (inputValue !== "" && inputValue !== "-") {
145
+ const numValue = parseFloat(inputValue);
146
+ if (!isNaN(numValue)) {
147
+ const cleanValue = formatNumber(numValue);
148
+ setInputValue(cleanValue.toString());
149
+ onNumberChange(cleanValue);
150
+ }
151
+ } else if (inputValue === "" || inputValue === "-") {
152
+ setInputValue("");
153
+ }
154
+ }
155
+ onBlur?.(e);
156
+ };
157
+ const baseInputStyles = "w-full transition-colors focus:outline-none min-h-[52px]";
158
+ const sizeStyles = {
159
+ sm: "px-3 py-2 text-sm",
160
+ md: "px-4 py-3 text-base",
161
+ lg: "px-5 py-4 text-lg"
162
+ };
163
+ const controlSizeStyles = {
164
+ sm: "w-6 h-5",
165
+ md: "w-8 h-6",
166
+ lg: "w-10 h-8"
167
+ };
168
+ const iconSizeStyles = {
169
+ sm: 12,
170
+ md: 16,
171
+ lg: 20
172
+ };
173
+ const variantStyles = {
174
+ default: "border bg-white/60 dark:bg-neutral-800/60 backdrop-blur-sm transition-colors duration-300 rounded-lg",
175
+ filled: "border-0 bg-neutral-50/60 dark:bg-neutral-700/60 backdrop-blur-sm transition-colors duration-300 rounded-lg"
176
+ };
177
+ 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";
178
+ 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";
179
+ const hasControls = isNumberType && showControls;
180
+ const hasLeadingContent = leadingIcon || leadingDecorator;
181
+ const hasTrailingContent = trailingIcon || trailingDecorator || hasControls;
182
+ const inputClasses = `
183
+ ${baseInputStyles}
184
+ ${sizeStyles[size]}
185
+ ${variantStyles[variant]}
186
+ ${stateStyles}
187
+ ${disabledStyles}
188
+ ${hasLeadingContent || isMobileType ? "pl-10" : ""}
189
+ ${hasTrailingContent ? hasControls ? "pr-20" : "pr-10" : ""}
190
+ ${className}
191
+ `.trim().replace(/\s+/g, " ");
192
+ const selectClasses = `
193
+ ${baseInputStyles}
194
+ ${sizeStyles[size]}
195
+ ${variantStyles[variant]}
196
+ ${stateStyles}
197
+ ${disabledStyles}
198
+ ${hasLeadingContent ? "pl-10" : ""}
199
+ ${hasTrailingContent ? "pr-10" : ""}
200
+ ${className}
201
+ appearance-none cursor-pointer
202
+ `.trim().replace(/\s+/g, " ");
203
+ const canDecrement = !disabled && (min === void 0 || (parseFloat(inputValue) || 0) > min);
204
+ const canIncrement = !disabled && (max === void 0 || (parseFloat(inputValue) || 0) < max);
205
+ return /* @__PURE__ */ jsxs("div", { className: "w-full", children: [
206
+ label && /* @__PURE__ */ jsxs("div", { className: "relative mb-2", children: [
207
+ /* @__PURE__ */ jsxs("label", { className: "text-sm font-medium text-neutral-700 dark:text-neutral-300 transition-colors duration-300 flex items-center", children: [
208
+ /* @__PURE__ */ jsx("span", { className: "text-xs sm:text-sm", children: label }),
209
+ required && /* @__PURE__ */ jsx("span", { className: "text-rose-500 ml-1", children: "*" }),
210
+ tooltip && /* @__PURE__ */ jsx(
211
+ "button",
212
+ {
213
+ type: "button",
214
+ className: "ml-2 text-neutral-400 dark:text-neutral-500 hover:text-neutral-600 dark:hover:text-neutral-300 transition-colors duration-300",
215
+ onMouseEnter: () => setShowTooltip(true),
216
+ onMouseLeave: () => setShowTooltip(false),
217
+ onFocus: () => setShowTooltip(true),
218
+ onBlur: () => setShowTooltip(false),
219
+ children: /* @__PURE__ */ jsx(Info, { className: "w-4 h-4" })
220
+ }
221
+ )
222
+ ] }),
223
+ 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 }) })
224
+ ] }),
225
+ /* @__PURE__ */ jsxs("div", { className: "relative", children: [
226
+ hasLeadingContent && /* @__PURE__ */ jsx(
227
+ "div",
228
+ {
229
+ className: `absolute inset-y-0 left-0 pl-3 flex items-center ${onLeadingClick ? "cursor-pointer" : "pointer-events-none"}`,
230
+ onClick: onLeadingClick,
231
+ children: leadingDecorator ? /* @__PURE__ */ jsx("span", { className: "text-neutral-400", children: leadingDecorator }) : /* @__PURE__ */ jsx("span", { className: "text-neutral-400", children: leadingIcon })
232
+ }
233
+ ),
234
+ isMobileType && /* @__PURE__ */ jsx("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", children: /* @__PURE__ */ jsx("span", { className: "text-neutral-500 dark:text-neutral-300", children: "+1" }) }),
235
+ isSelectType ? /* @__PURE__ */ jsxs(
236
+ "select",
237
+ {
238
+ ref,
239
+ value,
240
+ onChange: handleSelectChange,
241
+ onFocus,
242
+ onBlur,
243
+ disabled,
244
+ required,
245
+ className: selectClasses,
246
+ ...props,
247
+ children: [
248
+ placeholder && /* @__PURE__ */ jsx("option", { value: "", disabled: true, children: placeholder }),
249
+ options.map((option) => /* @__PURE__ */ jsx(
250
+ "option",
251
+ {
252
+ value: option.value,
253
+ disabled: option.disabled,
254
+ children: option.label
255
+ },
256
+ option.value
257
+ ))
258
+ ]
259
+ }
260
+ ) : /* @__PURE__ */ jsx(
261
+ "input",
262
+ {
263
+ ref,
264
+ type: isMobileType ? "tel" : isNumberType ? "text" : type,
265
+ inputMode: isMobileType ? "numeric" : isNumberType ? "numeric" : void 0,
266
+ value: isNumberType && onNumberChange ? inputValue : value,
267
+ onChange: handleInputChange,
268
+ onFocus,
269
+ onBlur: isNumberType && onNumberChange ? handleBlur : onBlur,
270
+ placeholder,
271
+ disabled,
272
+ required,
273
+ autoComplete: isMobileType ? autoComplete ?? "tel" : autoComplete,
274
+ className: inputClasses,
275
+ readOnly,
276
+ tabIndex,
277
+ ...props
278
+ }
279
+ ),
280
+ hasControls && /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 flex items-center pr-1", children: /* @__PURE__ */ jsxs("div", { className: "flex", children: [
281
+ /* @__PURE__ */ jsx(
282
+ "button",
283
+ {
284
+ type: "button",
285
+ onClick: handleDecrement,
286
+ disabled: !canDecrement,
287
+ className: `
288
+ ${controlSizeStyles[size]}
289
+ flex items-center justify-center
290
+ text-neutral-500 hover:text-neutral-700 hover:bg-neutral-100
291
+ disabled:text-neutral-300 disabled:cursor-not-allowed
292
+ transition-colors
293
+ border-r border-neutral-300
294
+ `,
295
+ children: /* @__PURE__ */ jsx(ChevronDown, { size: iconSizeStyles[size] })
296
+ }
297
+ ),
298
+ /* @__PURE__ */ jsx(
299
+ "button",
300
+ {
301
+ type: "button",
302
+ onClick: handleIncrement,
303
+ disabled: !canIncrement,
304
+ className: `
305
+ ${controlSizeStyles[size]}
306
+ flex items-center justify-center
307
+ text-neutral-500 hover:text-neutral-700 hover:bg-neutral-100
308
+ disabled:text-neutral-300 disabled:cursor-not-allowed
309
+ transition-colors
310
+ `,
311
+ children: /* @__PURE__ */ jsx(ChevronUp, { size: iconSizeStyles[size] })
312
+ }
313
+ )
314
+ ] }) }),
315
+ isSelectType && !trailingIcon && !trailingDecorator && /* @__PURE__ */ jsx("div", { className: "absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none", children: /* @__PURE__ */ jsx(
316
+ ChevronDown,
317
+ {
318
+ size: iconSizeStyles[size],
319
+ className: "text-neutral-400"
320
+ }
321
+ ) }),
322
+ (trailingIcon || trailingDecorator) && !hasControls && /* @__PURE__ */ jsx(
323
+ "div",
324
+ {
325
+ className: `absolute top-1/2 -translate-y-1/3 right-0 pr-3 flex items-center ${onTrailingClick ? "cursor-pointer" : ""}`,
326
+ onClick: onTrailingClick,
327
+ onMouseEnter: tooltip ? () => setShowTooltip(true) : void 0,
328
+ onMouseLeave: tooltip ? () => setShowTooltip(false) : void 0,
329
+ onFocus: tooltip ? () => setShowTooltip(true) : void 0,
330
+ onBlur: tooltip ? () => setShowTooltip(false) : void 0,
331
+ children: trailingDecorator ? /* @__PURE__ */ jsx("span", { className: "text-neutral-400", children: trailingDecorator }) : /* @__PURE__ */ jsx("span", { className: "text-neutral-400", children: trailingIcon })
332
+ }
333
+ )
334
+ ] }),
335
+ (error || helperText) && /* @__PURE__ */ jsxs("div", { className: "mt-2", children: [
336
+ error && /* @__PURE__ */ jsx("p", { className: "text-sm text-rose-600 dark:text-rose-400 transition-colors duration-300", children: error }),
337
+ helperText && !error && /* @__PURE__ */ jsx("p", { className: "text-sm text-neutral-500 dark:text-neutral-400 transition-colors duration-300", children: helperText })
338
+ ] })
339
+ ] });
340
+ }
341
+ );
342
+ Input.displayName = "Input";
343
+ var TextButton = ({
344
+ children,
345
+ onClick,
346
+ disabled = false,
347
+ leadingDecorator,
348
+ trailingDecorator,
349
+ variant = "primary",
350
+ size = "md",
351
+ className = "",
352
+ type = "button",
353
+ ...buttonProps
354
+ }) => {
355
+ 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"}`;
356
+ const variantStyles = {
357
+ primary: "text-blue-600 hover:text-blue-700 focus:ring-blue-500",
358
+ secondary: "text-neutral-600 hover:text-neutral-700 focus:ring-neutral-500",
359
+ danger: "text-rose-600 hover:text-rose-700 focus:ring-rose-500",
360
+ success: "text-green-600 hover:text-green-700 focus:ring-green-500",
361
+ disabled: "text-neutral-400 cursor-not-allowed"
362
+ };
363
+ const sizeStyles = {
364
+ sm: "text-xs px-2 py-1",
365
+ md: "text-sm px-3 py-2",
366
+ lg: "text-base px-4 py-3"
367
+ };
368
+ const disabledStyles = disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer";
369
+ return /* @__PURE__ */ jsxs(
370
+ "button",
371
+ {
372
+ type,
373
+ className: `${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`,
374
+ onClick,
375
+ disabled,
376
+ ...buttonProps,
377
+ children: [
378
+ leadingDecorator && /* @__PURE__ */ jsx("span", { className: "animate-in slide-in-from-left-1 duration-200", children: leadingDecorator }),
379
+ /* @__PURE__ */ jsx("span", { children }),
380
+ trailingDecorator && /* @__PURE__ */ jsx("span", { className: "animate-in slide-in-from-right-1 duration-200 group-hover:translate-x-1", children: trailingDecorator })
381
+ ]
382
+ }
383
+ );
384
+ };
385
+ var Toast = ({
386
+ message,
387
+ type,
388
+ duration = 5e3,
389
+ onDismiss,
390
+ isVisible
391
+ }) => {
392
+ const [isDismissing, setIsDismissing] = useState(false);
393
+ const [progressWidth, setProgressWidth] = useState(100);
394
+ useEffect(() => {
395
+ if (isVisible && !isDismissing) {
396
+ const timer = setTimeout(() => {
397
+ setIsDismissing(true);
398
+ setTimeout(() => {
399
+ onDismiss?.();
400
+ }, 300);
401
+ }, duration);
402
+ return () => clearTimeout(timer);
403
+ }
404
+ }, [isVisible, isDismissing, duration, onDismiss]);
405
+ useEffect(() => {
406
+ if (isVisible) {
407
+ setIsDismissing(false);
408
+ setProgressWidth(0);
409
+ }
410
+ }, [isVisible]);
411
+ useEffect(() => {
412
+ if (isVisible && !isDismissing) {
413
+ const progressTimer = setInterval(() => {
414
+ setProgressWidth((prev) => {
415
+ if (prev >= 100) return 100;
416
+ return prev + 100 / (duration / 100);
417
+ });
418
+ }, 100);
419
+ return () => clearInterval(progressTimer);
420
+ }
421
+ }, [isVisible, isDismissing, duration]);
422
+ if (!isVisible) return null;
423
+ return /* @__PURE__ */ jsx(
424
+ "div",
425
+ {
426
+ className: `fixed top-4 right-4 z-50 max-w-sm w-[calc(100vw-2rem)] sm:w-auto transition-all duration-300 ${isDismissing ? "translate-x-full opacity-0" : "translate-x-0 opacity-100"}`,
427
+ children: /* @__PURE__ */ jsxs(
428
+ "div",
429
+ {
430
+ className: `p-3 sm:p-4 shadow-lg border transition-all duration-300 ${type === "success" ? "bg-green-50 dark:bg-green-900/70 border-green-200 dark:border-green-700 text-green-800 dark:text-green-200" : "bg-rose-50 dark:bg-rose-900/70 border-rose-200 dark:border-rose-700 text-rose-800 dark:text-rose-200"}`,
431
+ children: [
432
+ /* @__PURE__ */ jsxs("div", { className: "flex items-start gap-3", children: [
433
+ /* @__PURE__ */ jsx(
434
+ "div",
435
+ {
436
+ className: `w-5 h-5 mt-0.5 flex-shrink-0 ${type === "success" ? "text-green-600 dark:text-green-400" : "text-rose-600 dark:text-rose-400"}`,
437
+ children: type === "success" ? /* @__PURE__ */ jsx(Check, { className: "w-5 h-5" }) : /* @__PURE__ */ jsx(AlertTriangle, { className: "w-5 h-5" })
438
+ }
439
+ ),
440
+ /* @__PURE__ */ jsx("div", { className: "flex-1", children: /* @__PURE__ */ jsx("p", { className: "text-sm", children: message }) }),
441
+ /* @__PURE__ */ jsx(
442
+ "button",
443
+ {
444
+ onClick: () => {
445
+ setIsDismissing(true);
446
+ setTimeout(() => {
447
+ onDismiss?.();
448
+ }, 300);
449
+ },
450
+ className: "text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-300",
451
+ children: /* @__PURE__ */ jsx(X, { className: "w-4 h-4" })
452
+ }
453
+ )
454
+ ] }),
455
+ /* @__PURE__ */ jsx("div", { className: "mt-3 w-full bg-neutral-200 dark:bg-neutral-600 h-1 transition-all duration-300", children: /* @__PURE__ */ jsx(
456
+ "div",
457
+ {
458
+ className: `h-full transition-all duration-100 ease-linear ${type === "success" ? "bg-green-500 dark:bg-green-400" : "bg-rose-500 dark:bg-rose-400"}`,
459
+ style: { width: `${progressWidth}%` }
460
+ }
461
+ ) })
462
+ ]
463
+ }
464
+ )
465
+ }
466
+ );
467
+ };
468
+
469
+ export { AnimatedButton, Input, TextButton, Toast };
470
+ //# sourceMappingURL=chunk-6YAK6HNR.mjs.map
471
+ //# sourceMappingURL=chunk-6YAK6HNR.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/text-button/text-button.tsx","../src/components/enhanced/toast/toast.tsx"],"names":["jsx","jsxs","useState","useEffect"],"mappings":"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","file":"chunk-6YAK6HNR.mjs","sourcesContent":["\"use client\";\n\nimport { motion } from \"framer-motion\";\n\nexport interface AnimatedButtonProps {\n label: string;\n variant?: \"primary\" | \"outlined\";\n buttonContainerClassName?: string;\n buttonTextClassName?: string;\n onClick?: () => void;\n}\n\nexport const AnimatedButton = ({\n label,\n variant = \"primary\",\n buttonContainerClassName,\n buttonTextClassName,\n onClick,\n}: AnimatedButtonProps) => {\n const handleOnClick = () => {\n onClick?.();\n };\n\n const baseButtonClass = \"text-xs tracking-wider font-medium\";\n\n const variantButtonClass = `${\n variant === \"outlined\" ? \"border border-1 bg-white\" : \"bg-[#0F62FE]\"\n }`;\n\n return (\n <motion.button\n whileHover={{\n scale: variant === \"primary\" ? 1.025 : 1,\n boxShadow:\n variant === \"primary\"\n ? \"0 0 4px rgba(15, 96, 254, 0.4), 0 0 16px rgba(15, 96, 254, 0.2)\"\n : \"\",\n }}\n whileTap={{ scale: variant === \"primary\" ? 0.98 : 1 }}\n onClick={handleOnClick}\n className={`w-fit p-2 px-4 ${variantButtonClass} ${buttonContainerClassName}`}\n >\n <span className={`${baseButtonClass} ${buttonTextClassName}`}>\n {label.toUpperCase()}\n </span>\n </motion.button>\n );\n};\n","\"use client\";\n\nimport { ReactNode, forwardRef, useState, useEffect } from \"react\";\nimport { ChevronUp, ChevronDown, Info } from \"lucide-react\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface InputProps {\n label?: string;\n placeholder?: string;\n value?: string | number;\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\n onNumberChange?: (value: number) => void;\n onSelectChange?: (value: string) => void;\n onFocus?: (e: React.FocusEvent<HTMLInputElement | HTMLSelectElement>) => void;\n onBlur?: (e: React.FocusEvent<HTMLInputElement | HTMLSelectElement>) => void;\n type?: \"text\" | \"email\" | \"password\" | \"number\" | \"search\" | \"select\" | \"mobile\";\n disabled?: boolean;\n required?: boolean;\n error?: string;\n helperText?: string;\n autoComplete?: string;\n leadingIcon?: ReactNode;\n trailingIcon?: ReactNode;\n leadingDecorator?: ReactNode;\n trailingDecorator?: ReactNode;\n onLeadingClick?: () => void;\n onTrailingClick?: () => void;\n size?: \"sm\" | \"md\" | \"lg\";\n variant?: \"default\" | \"filled\";\n className?: string;\n min?: number;\n max?: number;\n step?: number;\n precision?: number;\n allowNegative?: boolean;\n showControls?: boolean;\n options?: SelectOption[];\n readOnly?: boolean;\n tabIndex?: number;\n tooltip?: {\n content: ReactNode;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n };\n}\n\nexport const Input = forwardRef<HTMLInputElement | HTMLSelectElement, InputProps>(\n (\n {\n label,\n placeholder,\n value,\n onChange,\n onNumberChange,\n onSelectChange,\n onFocus,\n onBlur,\n type = \"text\",\n disabled = false,\n required = false,\n error,\n helperText,\n leadingIcon,\n trailingIcon,\n leadingDecorator,\n trailingDecorator,\n onLeadingClick,\n onTrailingClick,\n size = \"md\",\n variant = \"default\",\n className = \"\",\n min,\n max,\n step = 1,\n precision = 0,\n allowNegative = true,\n showControls = false,\n options = [],\n autoComplete,\n readOnly = false,\n tabIndex = 0,\n tooltip,\n ...props\n },\n ref\n ) => {\n const [showTooltip, setShowTooltip] = useState(false);\n\n const isNumberType = type === \"number\";\n const isSelectType = type === \"select\";\n const isMobileType = type === \"mobile\";\n\n const [inputValue, setInputValue] = useState<string>(\n value !== undefined ? value.toString() : \"\"\n );\n\n useEffect(() => {\n if (value !== undefined) {\n setInputValue(value.toString());\n }\n }, [value]);\n\n const formatNumber = (num: number): number => {\n if (precision > 0) {\n return parseFloat(num.toFixed(precision));\n }\n return Math.round(num);\n };\n\n const isValidNumber = (str: string): boolean => {\n if (str === \"\" || str === \"-\") return true;\n const num = parseFloat(str);\n if (isNaN(num)) return false;\n if (!allowNegative && num < 0) return false;\n if (min !== undefined && num < min) return false;\n if (max !== undefined && num > max) return false;\n return true;\n };\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n if (isMobileType) {\n const digits = (e.target.value || \"\").replace(/\\D/g, \"\").slice(0, 10);\n onChange?.({\n target: { value: digits },\n } as React.ChangeEvent<HTMLInputElement>);\n return;\n }\n\n if (isNumberType && onNumberChange) {\n const newValue = e.target.value;\n\n if (newValue === \"\" || (allowNegative && newValue === \"-\")) {\n setInputValue(newValue);\n return;\n }\n\n if (isValidNumber(newValue)) {\n setInputValue(newValue);\n const numValue = parseFloat(newValue);\n if (!isNaN(numValue)) {\n onNumberChange(formatNumber(numValue));\n }\n }\n } else {\n onChange?.(e);\n }\n };\n\n const handleSelectChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n onSelectChange?.(e.target.value);\n };\n\n const handleIncrement = () => {\n if (disabled || !isNumberType) return;\n\n const currentNum = parseFloat(inputValue) || 0;\n const newValue = currentNum + step;\n const constrainedValue =\n max !== undefined ? Math.min(newValue, max) : newValue;\n const finalValue = formatNumber(constrainedValue);\n\n setInputValue(finalValue.toString());\n onNumberChange?.(finalValue);\n };\n\n const handleDecrement = () => {\n if (disabled || !isNumberType) return;\n\n const currentNum = parseFloat(inputValue) || 0;\n const newValue = currentNum - step;\n const constrainedValue =\n min !== undefined ? Math.max(newValue, min) : newValue;\n const finalValue = formatNumber(constrainedValue);\n\n setInputValue(finalValue.toString());\n onNumberChange?.(finalValue);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLInputElement>) => {\n if (isNumberType && onNumberChange) {\n if (inputValue !== \"\" && inputValue !== \"-\") {\n const numValue = parseFloat(inputValue);\n if (!isNaN(numValue)) {\n const cleanValue = formatNumber(numValue);\n setInputValue(cleanValue.toString());\n onNumberChange(cleanValue);\n }\n } else if (inputValue === \"\" || inputValue === \"-\") {\n setInputValue(\"\");\n }\n }\n\n onBlur?.(e);\n };\n\n const baseInputStyles =\n \"w-full transition-colors focus:outline-none min-h-[52px]\";\n\n const sizeStyles = {\n sm: \"px-3 py-2 text-sm\",\n md: \"px-4 py-3 text-base\",\n lg: \"px-5 py-4 text-lg\",\n };\n\n const controlSizeStyles = {\n sm: \"w-6 h-5\",\n md: \"w-8 h-6\",\n lg: \"w-10 h-8\",\n };\n\n const iconSizeStyles = {\n sm: 12,\n md: 16,\n lg: 20,\n };\n\n const variantStyles = {\n default:\n \"border bg-white/60 dark:bg-neutral-800/60 backdrop-blur-sm transition-colors duration-300 rounded-lg\",\n filled:\n \"border-0 bg-neutral-50/60 dark:bg-neutral-700/60 backdrop-blur-sm transition-colors duration-300 rounded-lg\",\n };\n\n const stateStyles = error\n ? \"border-rose-500/50 dark:border-rose-400/50 focus:border-rose-600/70 dark:focus:border-rose-500/70 focus:ring-1 focus:ring-rose-500/50 dark:focus:ring-rose-400/50\"\n : \"border-neutral-300/50 dark:border-neutral-600/50 focus:border-blue-500/70 dark:focus:border-blue-400/70 focus:ring-1 focus:ring-blue-500/50 dark:focus:ring-blue-400/50\";\n\n const disabledStyles = disabled\n ? \"bg-neutral-100/60 dark:bg-neutral-700/60 text-neutral-500 dark:text-neutral-400 cursor-not-allowed\"\n : \"text-neutral-900 dark:text-neutral-100\";\n\n const hasControls = isNumberType && showControls;\n const hasLeadingContent = leadingIcon || leadingDecorator;\n const hasTrailingContent = trailingIcon || trailingDecorator || hasControls;\n\n const inputClasses = `\n ${baseInputStyles}\n ${sizeStyles[size]}\n ${variantStyles[variant]}\n ${stateStyles}\n ${disabledStyles}\n ${hasLeadingContent || isMobileType ? \"pl-10\" : \"\"}\n ${hasTrailingContent ? (hasControls ? \"pr-20\" : \"pr-10\") : \"\"}\n ${className}\n `\n .trim()\n .replace(/\\s+/g, \" \");\n\n const selectClasses = `\n ${baseInputStyles}\n ${sizeStyles[size]}\n ${variantStyles[variant]}\n ${stateStyles}\n ${disabledStyles}\n ${hasLeadingContent ? \"pl-10\" : \"\"}\n ${hasTrailingContent ? \"pr-10\" : \"\"}\n ${className}\n appearance-none cursor-pointer\n `\n .trim()\n .replace(/\\s+/g, \" \");\n\n const canDecrement =\n !disabled && (min === undefined || (parseFloat(inputValue) || 0) > min);\n const canIncrement =\n !disabled && (max === undefined || (parseFloat(inputValue) || 0) < max);\n\n return (\n <div className=\"w-full\">\n {label && (\n <div className=\"relative mb-2\">\n <label className=\"text-sm font-medium text-neutral-700 dark:text-neutral-300 transition-colors duration-300 flex items-center\">\n <span className=\"text-xs sm:text-sm\">{label}</span>\n {required && <span className=\"text-rose-500 ml-1\">*</span>}\n {tooltip && (\n <button\n type=\"button\"\n className=\"ml-2 text-neutral-400 dark:text-neutral-500 hover:text-neutral-600 dark:hover:text-neutral-300 transition-colors duration-300\"\n onMouseEnter={() => setShowTooltip(true)}\n onMouseLeave={() => setShowTooltip(false)}\n onFocus={() => setShowTooltip(true)}\n onBlur={() => setShowTooltip(false)}\n >\n <Info className=\"w-4 h-4\" />\n </button>\n )}\n </label>\n\n {tooltip && showTooltip && (\n <div className=\"absolute z-[9999] pointer-events-none left-0 bottom-full mt-2\">\n <div className=\"bg-neutral-900/80 dark:bg-neutral-100/80 backdrop-blur-md text-white dark:text-neutral-900 text-sm rounded-xl p-3 shadow-lg w-80 transition-colors duration-300\">\n {tooltip.content}\n </div>\n </div>\n )}\n </div>\n )}\n\n <div className=\"relative\">\n {hasLeadingContent && (\n <div\n className={`absolute inset-y-0 left-0 pl-3 flex items-center ${\n onLeadingClick ? \"cursor-pointer\" : \"pointer-events-none\"\n }`}\n onClick={onLeadingClick}\n >\n {leadingDecorator ? (\n <span className=\"text-neutral-400\">{leadingDecorator}</span>\n ) : (\n <span className=\"text-neutral-400\">{leadingIcon}</span>\n )}\n </div>\n )}\n\n {isMobileType && (\n <div className=\"absolute inset-y-0 left-0 pl-3 flex items-center z-10 pointer-events-none border-r pr-3 border-neutral-300/50 dark:border-neutral-600/50\">\n <span className=\"text-neutral-500 dark:text-neutral-300\">+1</span>\n </div>\n )}\n\n {isSelectType ? (\n <select\n ref={ref as React.Ref<HTMLSelectElement>}\n value={value}\n onChange={handleSelectChange}\n onFocus={onFocus}\n onBlur={onBlur}\n disabled={disabled}\n required={required}\n className={selectClasses}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {options.map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n ) : (\n <input\n ref={ref as React.Ref<HTMLInputElement>}\n type={isMobileType ? \"tel\" : isNumberType ? \"text\" : type}\n inputMode={\n isMobileType ? \"numeric\" : isNumberType ? \"numeric\" : undefined\n }\n value={isNumberType && onNumberChange ? inputValue : value}\n onChange={handleInputChange}\n onFocus={onFocus}\n onBlur={isNumberType && onNumberChange ? handleBlur : onBlur}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n autoComplete={isMobileType ? autoComplete ?? \"tel\" : autoComplete}\n className={inputClasses}\n readOnly={readOnly}\n tabIndex={tabIndex}\n {...props}\n />\n )}\n\n {hasControls && (\n <div className=\"absolute inset-y-0 right-0 flex items-center pr-1\">\n <div className=\"flex\">\n <button\n type=\"button\"\n onClick={handleDecrement}\n disabled={!canDecrement}\n className={`\n ${controlSizeStyles[size]}\n flex items-center justify-center\n text-neutral-500 hover:text-neutral-700 hover:bg-neutral-100\n disabled:text-neutral-300 disabled:cursor-not-allowed\n transition-colors\n border-r border-neutral-300\n `}\n >\n <ChevronDown size={iconSizeStyles[size]} />\n </button>\n <button\n type=\"button\"\n onClick={handleIncrement}\n disabled={!canIncrement}\n className={`\n ${controlSizeStyles[size]}\n flex items-center justify-center\n text-neutral-500 hover:text-neutral-700 hover:bg-neutral-100\n disabled:text-neutral-300 disabled:cursor-not-allowed\n transition-colors\n `}\n >\n <ChevronUp size={iconSizeStyles[size]} />\n </button>\n </div>\n </div>\n )}\n\n {isSelectType && !trailingIcon && !trailingDecorator && (\n <div className=\"absolute inset-y-0 right-0 pr-3 flex items-center pointer-events-none\">\n <ChevronDown\n size={iconSizeStyles[size]}\n className=\"text-neutral-400\"\n />\n </div>\n )}\n\n {(trailingIcon || trailingDecorator) && !hasControls && (\n <div\n className={`absolute top-1/2 -translate-y-1/3 right-0 pr-3 flex items-center ${\n onTrailingClick ? \"cursor-pointer\" : \"\"\n }`}\n onClick={onTrailingClick}\n onMouseEnter={tooltip ? () => setShowTooltip(true) : undefined}\n onMouseLeave={tooltip ? () => setShowTooltip(false) : undefined}\n onFocus={tooltip ? () => setShowTooltip(true) : undefined}\n onBlur={tooltip ? () => setShowTooltip(false) : undefined}\n >\n {trailingDecorator ? (\n <span className=\"text-neutral-400\">{trailingDecorator}</span>\n ) : (\n <span className=\"text-neutral-400\">{trailingIcon}</span>\n )}\n </div>\n )}\n </div>\n\n {(error || helperText) && (\n <div className=\"mt-2\">\n {error && (\n <p className=\"text-sm text-rose-600 dark:text-rose-400 transition-colors duration-300\">\n {error}\n </p>\n )}\n {helperText && !error && (\n <p className=\"text-sm text-neutral-500 dark:text-neutral-400 transition-colors duration-300\">\n {helperText}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = \"Input\";\n","import { ReactNode, ButtonHTMLAttributes } from \"react\";\n\nexport interface TextButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n children: React.ReactNode;\n onClick?: () => void;\n disabled?: boolean;\n leadingDecorator?: ReactNode;\n trailingDecorator?: ReactNode;\n variant?: \"primary\" | \"secondary\" | \"danger\" | \"success\" | \"disabled\";\n size?: \"sm\" | \"md\" | \"lg\";\n className?: string;\n type?: \"button\" | \"submit\" | \"reset\";\n}\n\nexport const TextButton = ({\n children,\n onClick,\n disabled = false,\n leadingDecorator,\n trailingDecorator,\n variant = \"primary\",\n size = \"md\",\n className = \"\",\n type = \"button\",\n ...buttonProps\n}: TextButtonProps) => {\n const baseStyles = `group inline-flex justify-center items-center gap-2 font-medium uppercase tracking-wide transition-all duration-200 ${\n disabled ? \"cursor-not-allowed\" : \"cursor-pointer\"\n }`;\n\n const variantStyles = {\n primary: \"text-blue-600 hover:text-blue-700 focus:ring-blue-500\",\n secondary: \"text-neutral-600 hover:text-neutral-700 focus:ring-neutral-500\",\n danger: \"text-rose-600 hover:text-rose-700 focus:ring-rose-500\",\n success: \"text-green-600 hover:text-green-700 focus:ring-green-500\",\n disabled: \"text-neutral-400 cursor-not-allowed\",\n };\n\n const sizeStyles = {\n sm: \"text-xs px-2 py-1\",\n md: \"text-sm px-3 py-2\",\n lg: \"text-base px-4 py-3\",\n };\n\n const disabledStyles = disabled\n ? \"opacity-50 cursor-not-allowed\"\n : \"cursor-pointer\";\n\n return (\n <button\n type={type}\n className={`${baseStyles} ${variantStyles[variant]} ${sizeStyles[size]} ${disabledStyles} ${className}`}\n onClick={onClick}\n disabled={disabled}\n {...buttonProps}\n >\n {leadingDecorator && (\n <span className=\"animate-in slide-in-from-left-1 duration-200\">\n {leadingDecorator}\n </span>\n )}\n\n <span>{children}</span>\n\n {trailingDecorator && (\n <span className=\"animate-in slide-in-from-right-1 duration-200 group-hover:translate-x-1\">\n {trailingDecorator}\n </span>\n )}\n </button>\n );\n};\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\nimport { Check, X, AlertTriangle } from \"lucide-react\";\n\nexport interface ToastProps {\n message: string;\n type: \"success\" | \"error\";\n duration?: number;\n onDismiss?: () => void;\n isVisible: boolean;\n}\n\nexport const Toast: React.FC<ToastProps> = ({\n message,\n type,\n duration = 5000,\n onDismiss,\n isVisible,\n}) => {\n const [isDismissing, setIsDismissing] = useState(false);\n const [progressWidth, setProgressWidth] = useState(100);\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); // Wait for slide-out animation\n }, duration);\n return () => clearTimeout(timer);\n }\n }, [isVisible, isDismissing, duration, onDismiss]);\n\n // Reset dismiss state when toast becomes visible\n useEffect(() => {\n if (isVisible) {\n setIsDismissing(false);\n setProgressWidth(0); // Start at 0% to fill up\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); // Increase by 1% every 100ms\n });\n }, 100);\n\n return () => clearInterval(progressTimer);\n }\n }, [isVisible, isDismissing, duration]);\n\n if (!isVisible) return null;\n\n return (\n <div\n className={`fixed top-4 right-4 z-50 max-w-sm w-[calc(100vw-2rem)] sm:w-auto transition-all duration-300 ${\n isDismissing\n ? \"translate-x-full opacity-0\"\n : \"translate-x-0 opacity-100\"\n }`}\n >\n <div\n className={`p-3 sm:p-4 shadow-lg border transition-all duration-300 ${\n type === \"success\"\n ? \"bg-green-50 dark:bg-green-900/70 border-green-200 dark:border-green-700 text-green-800 dark:text-green-200\"\n : \"bg-rose-50 dark:bg-rose-900/70 border-rose-200 dark:border-rose-700 text-rose-800 dark:text-rose-200\"\n }`}\n >\n <div className=\"flex items-start gap-3\">\n <div\n className={`w-5 h-5 mt-0.5 flex-shrink-0 ${\n type === \"success\"\n ? \"text-green-600 dark:text-green-400\"\n : \"text-rose-600 dark:text-rose-400\"\n }`}\n >\n {type === \"success\" ? (\n <Check className=\"w-5 h-5\" />\n ) : (\n <AlertTriangle className=\"w-5 h-5\" />\n )}\n </div>\n <div className=\"flex-1\">\n <p className=\"text-sm\">{message}</p>\n </div>\n <button\n onClick={() => {\n setIsDismissing(true);\n setTimeout(() => {\n onDismiss?.();\n }, 300);\n }}\n className=\"text-neutral-400 hover:text-neutral-600 dark:text-neutral-500 dark:hover:text-neutral-300 transition-colors duration-300\"\n >\n <X className=\"w-4 h-4\" />\n </button>\n </div>\n\n {/* Progress Bar Timer */}\n <div className=\"mt-3 w-full bg-neutral-200 dark:bg-neutral-600 h-1 transition-all duration-300\">\n <div\n className={`h-full transition-all duration-100 ease-linear ${\n type === \"success\"\n ? \"bg-green-500 dark:bg-green-400\"\n : \"bg-rose-500 dark:bg-rose-400\"\n }`}\n style={{ width: `${progressWidth}%` }}\n />\n </div>\n </div>\n </div>\n );\n};\n"]}