@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.
- package/LICENSE +21 -0
- package/README.md +185 -0
- package/dist/animated-icons.d.mts +54 -0
- package/dist/animated-icons.d.ts +54 -0
- package/dist/animated-icons.js +28 -0
- package/dist/animated-icons.js.map +1 -0
- package/dist/animated-icons.mjs +3 -0
- package/dist/animated-icons.mjs.map +1 -0
- package/dist/chunk-2B2BWI5A.mjs +324 -0
- package/dist/chunk-2B2BWI5A.mjs.map +1 -0
- package/dist/chunk-6YAK6HNR.mjs +471 -0
- package/dist/chunk-6YAK6HNR.mjs.map +1 -0
- package/dist/chunk-7LVVOCBV.mjs +977 -0
- package/dist/chunk-7LVVOCBV.mjs.map +1 -0
- package/dist/chunk-AA25LTS4.js +4 -0
- package/dist/chunk-AA25LTS4.js.map +1 -0
- package/dist/chunk-J6RXKZE5.js +1080 -0
- package/dist/chunk-J6RXKZE5.js.map +1 -0
- package/dist/chunk-R5HAFV6M.js +350 -0
- package/dist/chunk-R5HAFV6M.js.map +1 -0
- package/dist/chunk-Y6G4VKJ3.mjs +3 -0
- package/dist/chunk-Y6G4VKJ3.mjs.map +1 -0
- package/dist/chunk-ZD6CMWPW.js +476 -0
- package/dist/chunk-ZD6CMWPW.js.map +1 -0
- package/dist/enhanced.d.mts +81 -0
- package/dist/enhanced.d.ts +81 -0
- package/dist/enhanced.js +24 -0
- package/dist/enhanced.js.map +1 -0
- package/dist/enhanced.mjs +3 -0
- package/dist/enhanced.mjs.map +1 -0
- package/dist/hooks.d.mts +2 -0
- package/dist/hooks.d.ts +2 -0
- package/dist/hooks.js +6 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hooks.mjs +3 -0
- package/dist/hooks.mjs.map +1 -0
- package/dist/index.d.mts +25 -0
- package/dist/index.d.ts +25 -0
- package/dist/index.js +351 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +6 -0
- package/dist/index.mjs.map +1 -0
- package/dist/primitives.d.mts +168 -0
- package/dist/primitives.d.ts +168 -0
- package/dist/primitives.js +308 -0
- package/dist/primitives.js.map +1 -0
- package/dist/primitives.mjs +3 -0
- package/dist/primitives.mjs.map +1 -0
- package/dist/tailwind.d.mts +104 -0
- package/dist/tailwind.d.ts +104 -0
- package/dist/tailwind.js +75 -0
- package/dist/tailwind.js.map +1 -0
- package/dist/tailwind.mjs +73 -0
- package/dist/tailwind.mjs.map +1 -0
- package/package.json +103 -0
- 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"]}
|