asterui 0.12.15 → 0.12.16

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 (149) hide show
  1. package/README.md +1 -1
  2. package/dist/components/HoverGallery.d.ts +10 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +156 -154
  5. package/dist/index.js.map +1 -1
  6. package/dist/index100.js +11 -43
  7. package/dist/index100.js.map +1 -1
  8. package/dist/index101.js +44 -11
  9. package/dist/index101.js.map +1 -1
  10. package/dist/index102.js +10 -12
  11. package/dist/index102.js.map +1 -1
  12. package/dist/index103.js +14 -7
  13. package/dist/index103.js.map +1 -1
  14. package/dist/index104.js +7 -12
  15. package/dist/index104.js.map +1 -1
  16. package/dist/index105.js +11 -29
  17. package/dist/index105.js.map +1 -1
  18. package/dist/index106.js +29 -16
  19. package/dist/index106.js.map +1 -1
  20. package/dist/index107.js +21 -0
  21. package/dist/index107.js.map +1 -0
  22. package/dist/index21.js +1 -1
  23. package/dist/index37.js +15 -120
  24. package/dist/index37.js.map +1 -1
  25. package/dist/index38.js +119 -37
  26. package/dist/index38.js.map +1 -1
  27. package/dist/index39.js +40 -398
  28. package/dist/index39.js.map +1 -1
  29. package/dist/index40.js +390 -89
  30. package/dist/index40.js.map +1 -1
  31. package/dist/index41.js +90 -215
  32. package/dist/index41.js.map +1 -1
  33. package/dist/index42.js +211 -144
  34. package/dist/index42.js.map +1 -1
  35. package/dist/index43.js +155 -15
  36. package/dist/index43.js.map +1 -1
  37. package/dist/index44.js +15 -17
  38. package/dist/index44.js.map +1 -1
  39. package/dist/index45.js +17 -21
  40. package/dist/index45.js.map +1 -1
  41. package/dist/index46.js +18 -134
  42. package/dist/index46.js.map +1 -1
  43. package/dist/index47.js +134 -10
  44. package/dist/index47.js.map +1 -1
  45. package/dist/index48.js +13 -35
  46. package/dist/index48.js.map +1 -1
  47. package/dist/index49.js +35 -34
  48. package/dist/index49.js.map +1 -1
  49. package/dist/index50.js +34 -81
  50. package/dist/index50.js.map +1 -1
  51. package/dist/index51.js +71 -166
  52. package/dist/index51.js.map +1 -1
  53. package/dist/index52.js +167 -144
  54. package/dist/index52.js.map +1 -1
  55. package/dist/index53.js +152 -11
  56. package/dist/index53.js.map +1 -1
  57. package/dist/index54.js +10 -20
  58. package/dist/index54.js.map +1 -1
  59. package/dist/index55.js +22 -14
  60. package/dist/index55.js.map +1 -1
  61. package/dist/index56.js +14 -7
  62. package/dist/index56.js.map +1 -1
  63. package/dist/index57.js +6 -333
  64. package/dist/index57.js.map +1 -1
  65. package/dist/index58.js +334 -47
  66. package/dist/index58.js.map +1 -1
  67. package/dist/index59.js +47 -122
  68. package/dist/index59.js.map +1 -1
  69. package/dist/index60.js +120 -108
  70. package/dist/index60.js.map +1 -1
  71. package/dist/index61.js +107 -167
  72. package/dist/index61.js.map +1 -1
  73. package/dist/index62.js +167 -29
  74. package/dist/index62.js.map +1 -1
  75. package/dist/index63.js +30 -120
  76. package/dist/index63.js.map +1 -1
  77. package/dist/index64.js +116 -80
  78. package/dist/index64.js.map +1 -1
  79. package/dist/index65.js +85 -19
  80. package/dist/index65.js.map +1 -1
  81. package/dist/index66.js +19 -73
  82. package/dist/index66.js.map +1 -1
  83. package/dist/index67.js +71 -54
  84. package/dist/index67.js.map +1 -1
  85. package/dist/index68.js +56 -44
  86. package/dist/index68.js.map +1 -1
  87. package/dist/index69.js +42 -49
  88. package/dist/index69.js.map +1 -1
  89. package/dist/index70.js +50 -121
  90. package/dist/index70.js.map +1 -1
  91. package/dist/index71.js +118 -102
  92. package/dist/index71.js.map +1 -1
  93. package/dist/index72.js +107 -41
  94. package/dist/index72.js.map +1 -1
  95. package/dist/index73.js +41 -68
  96. package/dist/index73.js.map +1 -1
  97. package/dist/index74.js +66 -19
  98. package/dist/index74.js.map +1 -1
  99. package/dist/index75.js +18 -55
  100. package/dist/index75.js.map +1 -1
  101. package/dist/index76.js +55 -251
  102. package/dist/index76.js.map +1 -1
  103. package/dist/index77.js +254 -22
  104. package/dist/index77.js.map +1 -1
  105. package/dist/index78.js +22 -31
  106. package/dist/index78.js.map +1 -1
  107. package/dist/index79.js +30 -93
  108. package/dist/index79.js.map +1 -1
  109. package/dist/index80.js +89 -324
  110. package/dist/index80.js.map +1 -1
  111. package/dist/index81.js +322 -73
  112. package/dist/index81.js.map +1 -1
  113. package/dist/index82.js +79 -39
  114. package/dist/index82.js.map +1 -1
  115. package/dist/index83.js +40 -23
  116. package/dist/index83.js.map +1 -1
  117. package/dist/index84.js +21 -93
  118. package/dist/index84.js.map +1 -1
  119. package/dist/index85.js +87 -148
  120. package/dist/index85.js.map +1 -1
  121. package/dist/index86.js +147 -152
  122. package/dist/index86.js.map +1 -1
  123. package/dist/index87.js +159 -63
  124. package/dist/index87.js.map +1 -1
  125. package/dist/index88.js +65 -35
  126. package/dist/index88.js.map +1 -1
  127. package/dist/index89.js +35 -234
  128. package/dist/index89.js.map +1 -1
  129. package/dist/index90.js +231 -31
  130. package/dist/index90.js.map +1 -1
  131. package/dist/index91.js +34 -210
  132. package/dist/index91.js.map +1 -1
  133. package/dist/index92.js +195 -198
  134. package/dist/index92.js.map +1 -1
  135. package/dist/index93.js +159 -241
  136. package/dist/index93.js.map +1 -1
  137. package/dist/index94.js +283 -166
  138. package/dist/index94.js.map +1 -1
  139. package/dist/index95.js +173 -253
  140. package/dist/index95.js.map +1 -1
  141. package/dist/index96.js +258 -14
  142. package/dist/index96.js.map +1 -1
  143. package/dist/index97.js +12 -31
  144. package/dist/index97.js.map +1 -1
  145. package/dist/index98.js +32 -5
  146. package/dist/index98.js.map +1 -1
  147. package/dist/index99.js +5 -13
  148. package/dist/index99.js.map +1 -1
  149. package/package.json +1 -1
package/dist/index42.js CHANGED
@@ -1,158 +1,225 @@
1
- import { jsxs as k, jsx as r } from "react/jsx-runtime";
2
- import { forwardRef as S, useState as A, useRef as K, useImperativeHandle as W } from "react";
3
- const H = S(
1
+ import { jsx as y, jsxs as m } from "react/jsx-runtime";
2
+ import { forwardRef as at, useRef as ft, useCallback as z, useState as G, useEffect as H } from "react";
3
+ function S(e, r, c) {
4
+ let l = "", s = 0;
5
+ for (let p = 0; p < r.length && s <= e.length; p++) {
6
+ const b = r[p];
7
+ b === "#" || b === "A" || b === "*" ? s < e.length ? (l += e[s], s++) : l += c : l += b;
8
+ }
9
+ return l;
10
+ }
11
+ function J(e, r, c) {
12
+ let l = "";
13
+ for (let s = 0; s < e.length && s < r.length; s++) {
14
+ const p = r[s];
15
+ (p === "#" || p === "A" || p === "*") && e[s] !== c && (l += e[s]);
16
+ }
17
+ return l;
18
+ }
19
+ function pt(e, r) {
20
+ return r === "#" ? /\d/.test(e) : r === "A" ? /[a-zA-Z]/.test(e) : r === "*" ? /[a-zA-Z0-9]/.test(e) : !1;
21
+ }
22
+ function k(e, r) {
23
+ for (let c = r; c < e.length; c++)
24
+ if (e[c] === "#" || e[c] === "A" || e[c] === "*")
25
+ return c;
26
+ return e.length;
27
+ }
28
+ const dt = ({ onClick: e, className: r }) => /* @__PURE__ */ y(
29
+ "button",
30
+ {
31
+ type: "button",
32
+ onClick: e,
33
+ className: `flex items-center justify-center opacity-50 hover:opacity-100 transition-opacity ${r || ""}`,
34
+ "aria-label": "Clear input",
35
+ tabIndex: -1,
36
+ children: /* @__PURE__ */ y("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ y("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
37
+ }
38
+ ), gt = at(
4
39
  ({
5
- value: o,
6
- defaultValue: I,
7
- min: a = -1 / 0,
8
- max: u = 1 / 0,
9
- step: d = 1,
10
- precision: s,
11
- size: c,
12
- disabled: l = !1,
13
- onChange: p,
14
- formatter: f,
15
- parser: h,
16
- className: w = "",
17
- controls: v = !0,
18
- block: C = !0,
19
- ...D
20
- }, V) => {
21
- const [j, m] = A(I ?? null), b = K(null);
22
- W(V, () => b.current);
23
- const n = o !== void 0 ? o : j, B = (e) => {
24
- if (e === null) return "";
25
- let t = e;
26
- return s !== void 0 && (t = Number(e.toFixed(s))), f ? f(t) : String(t);
27
- }, M = (e) => {
28
- if (!e) return null;
29
- const t = h ? h(e) : parseFloat(e);
30
- return isNaN(t) ? null : t;
31
- }, x = (e) => {
32
- let t = Math.max(a, Math.min(u, e));
33
- return s !== void 0 && (t = Number(t.toFixed(s))), t;
34
- }, i = (e) => {
35
- if (e === null) {
36
- o === void 0 && m(null), p?.(null);
37
- return;
40
+ type: e = "text",
41
+ size: r,
42
+ color: c,
43
+ status: l,
44
+ ghost: s = !1,
45
+ bordered: p = !0,
46
+ className: b = "",
47
+ mask: t,
48
+ maskPlaceholder: u = "_",
49
+ allowClear: R,
50
+ onClear: O,
51
+ prefix: B,
52
+ suffix: A,
53
+ errorId: Q,
54
+ value: i,
55
+ defaultValue: N,
56
+ onChange: a,
57
+ onKeyDown: V,
58
+ disabled: Z,
59
+ required: W,
60
+ ...U
61
+ }, tt) => {
62
+ const et = {
63
+ xs: "input-xs",
64
+ sm: "input-sm",
65
+ md: "input-md",
66
+ lg: "input-lg",
67
+ xl: "input-xl"
68
+ }, nt = l ? {
69
+ error: "input-error",
70
+ warning: "input-warning"
71
+ }[l] : c ? {
72
+ neutral: "input-neutral",
73
+ primary: "input-primary",
74
+ secondary: "input-secondary",
75
+ accent: "input-accent",
76
+ info: "input-info",
77
+ success: "input-success",
78
+ warning: "input-warning",
79
+ error: "input-error"
80
+ }[c] : "", _ = [
81
+ "input",
82
+ !p && "border-0",
83
+ s && "input-ghost",
84
+ r && et[r],
85
+ nt,
86
+ b
87
+ ].filter(Boolean).join(" "), rt = ft(null), d = tt || rt, it = z(() => t ? J(i ?? N ?? "", t, u) : "", [t, i, N, u]), [j, E] = G(it), [T, $] = G(null);
88
+ H(() => {
89
+ t && i !== void 0 && E(J(i, t, u));
90
+ }, [t, i, u]), H(() => {
91
+ T !== null && d.current && (d.current.setSelectionRange(T, T), $(null));
92
+ }, [T, d]);
93
+ const X = z(
94
+ (n) => {
95
+ if (!t) {
96
+ a?.(n);
97
+ return;
98
+ }
99
+ const f = n.target, w = f.value, I = J(w, t, u);
100
+ let x = "", v = 0;
101
+ for (let g = 0; g < t.length && v < I.length; g++) {
102
+ const h = t[g];
103
+ (h === "#" || h === "A" || h === "*") && (pt(I[v], h) && (x += I[v]), v++);
104
+ }
105
+ E(x);
106
+ const L = S(x, t, u);
107
+ let o = k(t, 0), C = 0;
108
+ for (let g = 0; g < t.length; g++) {
109
+ const h = t[g];
110
+ (h === "#" || h === "A" || h === "*") && C < x.length && (C++, o = g + 1);
111
+ }
112
+ o = k(t, o), o > t.length && (o = t.length), $(o);
113
+ const ut = {
114
+ ...n,
115
+ target: { ...f, value: L },
116
+ currentTarget: { ...f, value: L }
117
+ };
118
+ a?.(ut);
119
+ },
120
+ [t, u, a]
121
+ ), Y = z(
122
+ (n) => {
123
+ if (!t) {
124
+ V?.(n);
125
+ return;
126
+ }
127
+ if (n.key === "Backspace") {
128
+ n.preventDefault();
129
+ const f = j.slice(0, -1);
130
+ E(f);
131
+ let w = 0, I = 0;
132
+ for (let o = 0; o < t.length; o++) {
133
+ const C = t[o];
134
+ if (C === "#" || C === "A" || C === "*")
135
+ if (I < f.length)
136
+ I++, w = o + 1;
137
+ else {
138
+ w = o;
139
+ break;
140
+ }
141
+ }
142
+ $(w);
143
+ const x = S(f, t, u), v = n.currentTarget, L = {
144
+ target: { ...v, value: x },
145
+ currentTarget: { ...v, value: x }
146
+ };
147
+ a?.(L);
148
+ }
149
+ V?.(n);
150
+ },
151
+ [t, u, j, a, V]
152
+ ), [q, D] = G(i ?? N ?? "");
153
+ H(() => {
154
+ i !== void 0 && D(i);
155
+ }, [i]);
156
+ const ct = z((n) => {
157
+ D(n.target.value), a?.(n);
158
+ }, [a]), st = z(() => {
159
+ if (D(""), E(""), O?.(), a && d.current) {
160
+ const n = {
161
+ target: { ...d.current, value: "" },
162
+ currentTarget: { ...d.current, value: "" }
163
+ };
164
+ a(n);
38
165
  }
39
- const t = x(e);
40
- o === void 0 && m(t), p?.(t);
41
- }, y = () => {
42
- if (l) return;
43
- i((n ?? 0) + d);
44
- }, g = () => {
45
- if (l) return;
46
- i((n ?? 0) - d);
47
- }, L = (e) => {
48
- const t = M(e.target.value);
49
- t !== null ? i(t) : e.target.value === "" && i(null);
50
- }, $ = (e) => {
51
- l || (e.key === "ArrowUp" ? (e.preventDefault(), y()) : e.key === "ArrowDown" && (e.preventDefault(), g()));
52
- }, F = () => {
53
- n !== null && (n < a || n > u) && i(x(n));
54
- }, R = [
166
+ }, [O, a, d]), F = R && (t ? j : q) && !Z, ot = typeof R == "object" && R.clearIcon ? R.clearIcon : null, M = {};
167
+ l === "error" && (M["aria-invalid"] = !0), Q && (M["aria-describedby"] = Q), W && (M["aria-required"] = !0);
168
+ const K = B || A || R, P = (n, f, w) => /* @__PURE__ */ y(
55
169
  "input",
56
- "input-bordered",
57
- "w-full",
58
- c && {
59
- xs: "input-xs",
60
- sm: "input-sm",
61
- md: "input-md",
62
- lg: "input-lg",
63
- xl: "input-xl"
64
- }[c],
65
- l && "input-disabled",
66
- v && "pr-8"
67
- ].filter(Boolean).join(" "), N = c === "xs" || c === "sm" ? "btn-xs" : "btn-sm";
68
- return /* @__PURE__ */ k("div", { className: `relative ${C ? "w-full" : "inline-block"} group ${w}`, children: [
69
- /* @__PURE__ */ r(
170
+ {
171
+ ref: d,
172
+ type: t ? "text" : e,
173
+ className: n,
174
+ value: f ?? i,
175
+ defaultValue: !f && !i ? N : void 0,
176
+ onChange: w ?? a,
177
+ onKeyDown: t ? Y : V,
178
+ disabled: Z,
179
+ required: W,
180
+ ...M,
181
+ ...U
182
+ }
183
+ );
184
+ if (!t && !K)
185
+ return P(_);
186
+ if (t && !K) {
187
+ const n = S(j, t, u);
188
+ return P(_, n, X);
189
+ }
190
+ const lt = t ? S(j, t, u) : void 0;
191
+ return /* @__PURE__ */ m("div", { className: "relative flex items-center", children: [
192
+ B && /* @__PURE__ */ y("span", { className: "absolute left-3 flex items-center text-base-content/70 pointer-events-none z-10", children: B }),
193
+ /* @__PURE__ */ y(
70
194
  "input",
71
195
  {
72
- ref: b,
73
- type: "text",
74
- inputMode: "decimal",
75
- role: "spinbutton",
76
- "aria-valuemin": a !== -1 / 0 ? a : void 0,
77
- "aria-valuemax": u !== 1 / 0 ? u : void 0,
78
- "aria-valuenow": n ?? void 0,
79
- className: R,
80
- value: B(n),
81
- onChange: L,
82
- onKeyDown: $,
83
- onBlur: F,
84
- disabled: l,
85
- ...D
196
+ ref: d,
197
+ type: t ? "text" : e,
198
+ className: [
199
+ _,
200
+ "w-full",
201
+ B && "pl-10",
202
+ (A || F) && "pr-10"
203
+ ].filter(Boolean).join(" "),
204
+ value: lt ?? (i !== void 0 ? i : q),
205
+ defaultValue: i === void 0 && !t ? N : void 0,
206
+ onChange: t ? X : ct,
207
+ onKeyDown: t ? Y : V,
208
+ disabled: Z,
209
+ required: W,
210
+ ...M,
211
+ ...U
86
212
  }
87
213
  ),
88
- v && /* @__PURE__ */ k("div", { className: "absolute right-1 top-1/2 -translate-y-1/2 flex flex-col gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity", children: [
89
- /* @__PURE__ */ r(
90
- "button",
91
- {
92
- type: "button",
93
- "aria-label": "Increase value",
94
- className: `btn ${N} btn-ghost px-1 min-h-0 h-3.5`,
95
- onClick: y,
96
- disabled: l || n !== null && n >= u,
97
- tabIndex: -1,
98
- children: /* @__PURE__ */ r(
99
- "svg",
100
- {
101
- className: "w-3 h-3",
102
- fill: "none",
103
- viewBox: "0 0 24 24",
104
- stroke: "currentColor",
105
- "aria-hidden": "true",
106
- children: /* @__PURE__ */ r(
107
- "path",
108
- {
109
- strokeLinecap: "round",
110
- strokeLinejoin: "round",
111
- strokeWidth: 2,
112
- d: "M5 15l7-7 7 7"
113
- }
114
- )
115
- }
116
- )
117
- }
118
- ),
119
- /* @__PURE__ */ r(
120
- "button",
121
- {
122
- type: "button",
123
- "aria-label": "Decrease value",
124
- className: `btn ${N} btn-ghost px-1 min-h-0 h-3.5`,
125
- onClick: g,
126
- disabled: l || n !== null && n <= a,
127
- tabIndex: -1,
128
- children: /* @__PURE__ */ r(
129
- "svg",
130
- {
131
- className: "w-3 h-3",
132
- fill: "none",
133
- viewBox: "0 0 24 24",
134
- stroke: "currentColor",
135
- "aria-hidden": "true",
136
- children: /* @__PURE__ */ r(
137
- "path",
138
- {
139
- strokeLinecap: "round",
140
- strokeLinejoin: "round",
141
- strokeWidth: 2,
142
- d: "M19 9l-7 7-7-7"
143
- }
144
- )
145
- }
146
- )
147
- }
148
- )
214
+ (A || F) && /* @__PURE__ */ m("span", { className: "absolute right-3 flex items-center gap-1 z-10", children: [
215
+ F && (ot || /* @__PURE__ */ y(dt, { onClick: st })),
216
+ A && /* @__PURE__ */ y("span", { className: "text-base-content/70", children: A })
149
217
  ] })
150
218
  ] });
151
219
  }
152
220
  );
153
- H.displayName = "InputNumber";
221
+ gt.displayName = "Input";
154
222
  export {
155
- H as InputNumber,
156
- H as default
223
+ gt as Input
157
224
  };
158
225
  //# sourceMappingURL=index42.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index42.js","sources":["../src/components/InputNumber.tsx"],"sourcesContent":["import React, { useState, useRef, forwardRef, useImperativeHandle } from 'react'\n\nexport interface InputNumberProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange' | 'value' | 'defaultValue'> {\n value?: number\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n precision?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n disabled?: boolean\n onChange?: (value: number | null) => void\n formatter?: (value: number | undefined) => string\n parser?: (displayValue: string) => number\n className?: string\n controls?: boolean\n block?: boolean\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n value: controlledValue,\n defaultValue,\n min = -Infinity,\n max = Infinity,\n step = 1,\n precision,\n size,\n disabled = false,\n onChange,\n formatter,\n parser,\n className = '',\n controls = true,\n block = true,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<number | null>(defaultValue ?? null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n useImperativeHandle(ref, () => inputRef.current!)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n\n const formatValue = (num: number | null): string => {\n if (num === null) return ''\n let formatted = num\n if (precision !== undefined) {\n formatted = Number(num.toFixed(precision))\n }\n return formatter ? formatter(formatted) : String(formatted)\n }\n\n const parseValue = (str: string): number | null => {\n if (!str) return null\n const parsed = parser ? parser(str) : parseFloat(str)\n if (isNaN(parsed)) return null\n return parsed\n }\n\n const clampValue = (num: number): number => {\n let clamped = Math.max(min, Math.min(max, num))\n if (precision !== undefined) {\n clamped = Number(clamped.toFixed(precision))\n }\n return clamped\n }\n\n const updateValue = (newValue: number | null) => {\n if (newValue === null) {\n if (controlledValue === undefined) {\n setInternalValue(null)\n }\n onChange?.(null)\n return\n }\n\n const clamped = clampValue(newValue)\n if (controlledValue === undefined) {\n setInternalValue(clamped)\n }\n onChange?.(clamped)\n }\n\n const handleIncrement = () => {\n if (disabled) return\n const currentValue = value ?? 0\n updateValue(currentValue + step)\n }\n\n const handleDecrement = () => {\n if (disabled) return\n const currentValue = value ?? 0\n updateValue(currentValue - step)\n }\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const parsed = parseValue(e.target.value)\n if (parsed !== null) {\n updateValue(parsed)\n } else if (e.target.value === '') {\n updateValue(null)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n handleIncrement()\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n handleDecrement()\n }\n }\n\n const handleBlur = () => {\n // Ensure value is within bounds on blur\n if (value !== null && (value < min || value > max)) {\n updateValue(clampValue(value))\n }\n }\n\n const sizeClasses = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n const inputClasses = [\n 'input',\n 'input-bordered',\n 'w-full',\n size && sizeClasses[size],\n disabled && 'input-disabled',\n controls && 'pr-8',\n ]\n .filter(Boolean)\n .join(' ')\n\n const buttonSize = size === 'xs' || size === 'sm' ? 'btn-xs' : 'btn-sm'\n\n return (\n <div className={`relative ${block ? 'w-full' : 'inline-block'} group ${className}`}>\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n role=\"spinbutton\"\n aria-valuemin={min !== -Infinity ? min : undefined}\n aria-valuemax={max !== Infinity ? max : undefined}\n aria-valuenow={value ?? undefined}\n className={inputClasses}\n value={formatValue(value)}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n disabled={disabled}\n {...props}\n />\n {controls && (\n <div className=\"absolute right-1 top-1/2 -translate-y-1/2 flex flex-col gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n aria-label=\"Increase value\"\n className={`btn ${buttonSize} btn-ghost px-1 min-h-0 h-3.5`}\n onClick={handleIncrement}\n disabled={disabled || (value !== null && value >= max)}\n tabIndex={-1}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n aria-label=\"Decrease value\"\n className={`btn ${buttonSize} btn-ghost px-1 min-h-0 h-3.5`}\n onClick={handleDecrement}\n disabled={disabled || (value !== null && value <= min)}\n tabIndex={-1}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n </div>\n )}\n </div>\n )\n }\n)\n\nInputNumber.displayName = 'InputNumber'\n\nexport default InputNumber\n"],"names":["InputNumber","forwardRef","controlledValue","defaultValue","min","max","step","precision","size","disabled","onChange","formatter","parser","className","controls","block","props","ref","internalValue","setInternalValue","useState","inputRef","useRef","useImperativeHandle","value","formatValue","num","formatted","parseValue","str","parsed","clampValue","clamped","updateValue","newValue","handleIncrement","handleDecrement","handleInputChange","handleKeyDown","handleBlur","inputClasses","buttonSize","jsxs","jsx"],"mappings":"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"}
1
+ {"version":3,"file":"index42.js","sources":["../src/components/Input.tsx"],"sourcesContent":["import React, { forwardRef, useState, useCallback, useRef, useEffect } from 'react'\n\nexport interface InputProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'prefix'> {\n type?: 'text' | 'password' | 'email' | 'number' | 'date' | 'datetime-local' | 'week' | 'month' | 'tel' | 'url' | 'search' | 'time'\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error'\n /** Validation status */\n status?: 'error' | 'warning'\n ghost?: boolean\n bordered?: boolean\n className?: string\n /** Input mask pattern. Use # for digits, A for letters, * for alphanumeric */\n mask?: string\n /** Placeholder character shown in mask (default: _) */\n maskPlaceholder?: string\n /** Show clear button when input has value */\n allowClear?: boolean | { clearIcon?: React.ReactNode }\n /** Callback when clear button is clicked */\n onClear?: () => void\n /** Prefix icon or element */\n prefix?: React.ReactNode\n /** Suffix icon or element */\n suffix?: React.ReactNode\n /** ID for error message element (for aria-describedby) */\n errorId?: string\n}\n\n// Helper to apply mask to raw value\nfunction applyMask(raw: string, mask: string, placeholder: string): string {\n let result = ''\n let rawIndex = 0\n\n for (let i = 0; i < mask.length && rawIndex <= raw.length; i++) {\n const maskChar = mask[i]\n if (maskChar === '#' || maskChar === 'A' || maskChar === '*') {\n if (rawIndex < raw.length) {\n result += raw[rawIndex]\n rawIndex++\n } else {\n result += placeholder\n }\n } else {\n result += maskChar\n }\n }\n\n return result\n}\n\n// Extract raw value from masked input\nfunction extractRaw(value: string, mask: string, placeholder: string): string {\n let raw = ''\n for (let i = 0; i < value.length && i < mask.length; i++) {\n const maskChar = mask[i]\n if ((maskChar === '#' || maskChar === 'A' || maskChar === '*') && value[i] !== placeholder) {\n raw += value[i]\n }\n }\n return raw\n}\n\n// Check if character is valid for mask position\nfunction isValidChar(char: string, maskChar: string): boolean {\n if (maskChar === '#') return /\\d/.test(char)\n if (maskChar === 'A') return /[a-zA-Z]/.test(char)\n if (maskChar === '*') return /[a-zA-Z0-9]/.test(char)\n return false\n}\n\n// Find next input position in mask\nfunction findNextInputPosition(mask: string, fromIndex: number): number {\n for (let i = fromIndex; i < mask.length; i++) {\n if (mask[i] === '#' || mask[i] === 'A' || mask[i] === '*') {\n return i\n }\n }\n return mask.length\n}\n\n// Clear icon component\nconst ClearIcon: React.FC<{ onClick: () => void; className?: string }> = ({ onClick, className }) => (\n <button\n type=\"button\"\n onClick={onClick}\n className={`flex items-center justify-center opacity-50 hover:opacity-100 transition-opacity ${className || ''}`}\n aria-label=\"Clear input\"\n tabIndex={-1}\n >\n <svg className=\"w-4 h-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" aria-hidden=\"true\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n)\n\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n type = 'text',\n size,\n color,\n status,\n ghost = false,\n bordered = true,\n className = '',\n mask,\n maskPlaceholder = '_',\n allowClear,\n onClear,\n prefix,\n suffix,\n errorId,\n value,\n defaultValue,\n onChange,\n onKeyDown,\n disabled,\n required,\n ...props\n },\n ref\n ) => {\n const sizeClasses = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n const colorClasses = {\n neutral: 'input-neutral',\n primary: 'input-primary',\n secondary: 'input-secondary',\n accent: 'input-accent',\n info: 'input-info',\n success: 'input-success',\n warning: 'input-warning',\n error: 'input-error',\n }\n\n const statusClasses = {\n error: 'input-error',\n warning: 'input-warning',\n }\n\n // Status takes precedence over color for validation feedback\n const effectiveColorClass = status ? statusClasses[status] : (color ? colorClasses[color] : '')\n\n const inputClasses = [\n 'input',\n !bordered && 'border-0',\n ghost && 'input-ghost',\n size && sizeClasses[size],\n effectiveColorClass,\n className,\n ]\n .filter(Boolean)\n .join(' ')\n\n // Mask handling\n const innerRef = useRef<HTMLInputElement>(null)\n const inputRef = (ref as React.RefObject<HTMLInputElement>) || innerRef\n\n const getInitialRaw = useCallback(() => {\n if (!mask) return ''\n const initial = (value ?? defaultValue ?? '') as string\n return extractRaw(initial, mask, maskPlaceholder)\n }, [mask, value, defaultValue, maskPlaceholder])\n\n const [rawValue, setRawValue] = useState(getInitialRaw)\n const [cursorPos, setCursorPos] = useState<number | null>(null)\n\n // Sync with controlled value\n useEffect(() => {\n if (mask && value !== undefined) {\n setRawValue(extractRaw(value as string, mask, maskPlaceholder))\n }\n }, [mask, value, maskPlaceholder])\n\n // Set cursor position after render\n useEffect(() => {\n if (cursorPos !== null && inputRef.current) {\n inputRef.current.setSelectionRange(cursorPos, cursorPos)\n setCursorPos(null)\n }\n }, [cursorPos, inputRef])\n\n const handleMaskedChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (!mask) {\n onChange?.(e)\n return\n }\n\n const input = e.target\n const inputValue = input.value\n\n // Extract what the user is trying to type\n const newRaw = extractRaw(inputValue, mask, maskPlaceholder)\n\n // Filter to only valid characters\n let filteredRaw = ''\n let rawIdx = 0\n for (let i = 0; i < mask.length && rawIdx < newRaw.length; i++) {\n const maskChar = mask[i]\n if (maskChar === '#' || maskChar === 'A' || maskChar === '*') {\n if (isValidChar(newRaw[rawIdx], maskChar)) {\n filteredRaw += newRaw[rawIdx]\n }\n rawIdx++\n }\n }\n\n setRawValue(filteredRaw)\n\n // Calculate new cursor position\n const maskedValue = applyMask(filteredRaw, mask, maskPlaceholder)\n let newCursor = findNextInputPosition(mask, 0)\n let charsPlaced = 0\n for (let i = 0; i < mask.length; i++) {\n const maskChar = mask[i]\n if (maskChar === '#' || maskChar === 'A' || maskChar === '*') {\n if (charsPlaced < filteredRaw.length) {\n charsPlaced++\n newCursor = i + 1\n }\n }\n }\n // Skip to next input position if we're on a literal\n newCursor = findNextInputPosition(mask, newCursor)\n if (newCursor > mask.length) newCursor = mask.length\n\n setCursorPos(newCursor)\n\n // Create synthetic event with masked value\n const syntheticEvent = {\n ...e,\n target: { ...input, value: maskedValue },\n currentTarget: { ...input, value: maskedValue },\n } as React.ChangeEvent<HTMLInputElement>\n\n onChange?.(syntheticEvent)\n },\n [mask, maskPlaceholder, onChange]\n )\n\n const handleMaskedKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (!mask) {\n onKeyDown?.(e)\n return\n }\n\n if (e.key === 'Backspace') {\n e.preventDefault()\n const newRaw = rawValue.slice(0, -1)\n setRawValue(newRaw)\n\n // Calculate cursor position\n let newCursor = 0\n let charsPlaced = 0\n for (let i = 0; i < mask.length; i++) {\n const maskChar = mask[i]\n if (maskChar === '#' || maskChar === 'A' || maskChar === '*') {\n if (charsPlaced < newRaw.length) {\n charsPlaced++\n newCursor = i + 1\n } else {\n newCursor = i\n break\n }\n }\n }\n setCursorPos(newCursor)\n\n const maskedValue = applyMask(newRaw, mask, maskPlaceholder)\n const input = e.currentTarget\n const syntheticEvent = {\n target: { ...input, value: maskedValue },\n currentTarget: { ...input, value: maskedValue },\n } as unknown as React.ChangeEvent<HTMLInputElement>\n\n onChange?.(syntheticEvent)\n }\n\n onKeyDown?.(e)\n },\n [mask, maskPlaceholder, rawValue, onChange, onKeyDown]\n )\n\n // Track internal value for allowClear visibility\n const [internalValue, setInternalValue] = useState((value ?? defaultValue ?? '') as string)\n\n // Sync internal value with controlled value\n useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value as string)\n }\n }, [value])\n\n const handleChange = useCallback((e: React.ChangeEvent<HTMLInputElement>) => {\n setInternalValue(e.target.value)\n onChange?.(e)\n }, [onChange])\n\n const handleClear = useCallback(() => {\n setInternalValue('')\n setRawValue('')\n onClear?.()\n // Create synthetic event for onChange\n if (onChange && inputRef.current) {\n const syntheticEvent = {\n target: { ...inputRef.current, value: '' },\n currentTarget: { ...inputRef.current, value: '' },\n } as React.ChangeEvent<HTMLInputElement>\n onChange(syntheticEvent)\n }\n }, [onClear, onChange, inputRef])\n\n // Determine if we should show clear button\n const currentValue = mask ? rawValue : internalValue\n const showClear = allowClear && currentValue && !disabled\n\n // Get custom clear icon if provided\n const clearIcon = typeof allowClear === 'object' && allowClear.clearIcon\n ? allowClear.clearIcon\n : null\n\n // Accessibility attributes\n const ariaProps: Record<string, string | boolean | undefined> = {}\n if (status === 'error') {\n ariaProps['aria-invalid'] = true\n }\n if (errorId) {\n ariaProps['aria-describedby'] = errorId\n }\n if (required) {\n ariaProps['aria-required'] = true\n }\n\n // If we have prefix, suffix, or allowClear, wrap in a container\n const hasAddons = prefix || suffix || allowClear\n\n // Build the input element\n const renderInput = (inputClassName: string, inputValue?: string, inputOnChange?: typeof onChange) => (\n <input\n ref={inputRef}\n type={mask ? 'text' : type}\n className={inputClassName}\n value={inputValue ?? value}\n defaultValue={!inputValue && !value ? defaultValue : undefined}\n onChange={inputOnChange ?? onChange}\n onKeyDown={mask ? handleMaskedKeyDown : onKeyDown}\n disabled={disabled}\n required={required}\n {...ariaProps}\n {...props}\n />\n )\n\n // If no mask and no addons, render simple input\n if (!mask && !hasAddons) {\n return renderInput(inputClasses)\n }\n\n // Render masked input without addons\n if (mask && !hasAddons) {\n const maskedValue = applyMask(rawValue, mask, maskPlaceholder)\n return renderInput(inputClasses, maskedValue, handleMaskedChange)\n }\n\n // Render with addons (prefix/suffix/clear)\n const maskedValue = mask ? applyMask(rawValue, mask, maskPlaceholder) : undefined\n\n return (\n <div className=\"relative flex items-center\">\n {prefix && (\n <span className=\"absolute left-3 flex items-center text-base-content/70 pointer-events-none z-10\">\n {prefix}\n </span>\n )}\n <input\n ref={inputRef}\n type={mask ? 'text' : type}\n className={[\n inputClasses,\n 'w-full',\n prefix && 'pl-10',\n (suffix || showClear) && 'pr-10',\n ].filter(Boolean).join(' ')}\n value={maskedValue ?? (value !== undefined ? value : internalValue)}\n defaultValue={value === undefined && !mask ? defaultValue : undefined}\n onChange={mask ? handleMaskedChange : handleChange}\n onKeyDown={mask ? handleMaskedKeyDown : onKeyDown}\n disabled={disabled}\n required={required}\n {...ariaProps}\n {...props}\n />\n {(suffix || showClear) && (\n <span className=\"absolute right-3 flex items-center gap-1 z-10\">\n {showClear && (\n clearIcon || <ClearIcon onClick={handleClear} />\n )}\n {suffix && (\n <span className=\"text-base-content/70\">\n {suffix}\n </span>\n )}\n </span>\n )}\n </div>\n )\n }\n)\n\nInput.displayName = 'Input'\n"],"names":["applyMask","raw","mask","placeholder","result","rawIndex","i","maskChar","extractRaw","value","isValidChar","char","findNextInputPosition","fromIndex","ClearIcon","onClick","className","jsx","Input","forwardRef","type","size","color","status","ghost","bordered","maskPlaceholder","allowClear","onClear","prefix","suffix","errorId","defaultValue","onChange","onKeyDown","disabled","required","props","ref","sizeClasses","effectiveColorClass","inputClasses","innerRef","useRef","inputRef","getInitialRaw","useCallback","rawValue","setRawValue","useState","cursorPos","setCursorPos","useEffect","handleMaskedChange","e","input","inputValue","newRaw","filteredRaw","rawIdx","maskedValue","newCursor","charsPlaced","syntheticEvent","handleMaskedKeyDown","internalValue","setInternalValue","handleChange","handleClear","showClear","clearIcon","ariaProps","hasAddons","renderInput","inputClassName","inputOnChange","jsxs"],"mappings":";;AA4BA,SAASA,EAAUC,GAAaC,GAAcC,GAA6B;AACzE,MAAIC,IAAS,IACTC,IAAW;AAEf,WAASC,IAAI,GAAGA,IAAIJ,EAAK,UAAUG,KAAYJ,EAAI,QAAQK,KAAK;AAC9D,UAAMC,IAAWL,EAAKI,CAAC;AACvB,IAAIC,MAAa,OAAOA,MAAa,OAAOA,MAAa,MACnDF,IAAWJ,EAAI,UACjBG,KAAUH,EAAII,CAAQ,GACtBA,OAEAD,KAAUD,IAGZC,KAAUG;AAAA,EAEd;AAEA,SAAOH;AACT;AAGA,SAASI,EAAWC,GAAeP,GAAcC,GAA6B;AAC5E,MAAIF,IAAM;AACV,WAASK,IAAI,GAAGA,IAAIG,EAAM,UAAUH,IAAIJ,EAAK,QAAQI,KAAK;AACxD,UAAMC,IAAWL,EAAKI,CAAC;AACvB,KAAKC,MAAa,OAAOA,MAAa,OAAOA,MAAa,QAAQE,EAAMH,CAAC,MAAMH,MAC7EF,KAAOQ,EAAMH,CAAC;AAAA,EAElB;AACA,SAAOL;AACT;AAGA,SAASS,GAAYC,GAAcJ,GAA2B;AAC5D,SAAIA,MAAa,MAAY,KAAK,KAAKI,CAAI,IACvCJ,MAAa,MAAY,WAAW,KAAKI,CAAI,IAC7CJ,MAAa,MAAY,cAAc,KAAKI,CAAI,IAC7C;AACT;AAGA,SAASC,EAAsBV,GAAcW,GAA2B;AACtE,WAASP,IAAIO,GAAWP,IAAIJ,EAAK,QAAQI;AACvC,QAAIJ,EAAKI,CAAC,MAAM,OAAOJ,EAAKI,CAAC,MAAM,OAAOJ,EAAKI,CAAC,MAAM;AACpD,aAAOA;AAGX,SAAOJ,EAAK;AACd;AAGA,MAAMY,KAAmE,CAAC,EAAE,SAAAC,GAAS,WAAAC,QACnF,gBAAAC;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,MAAK;AAAA,IACL,SAAAF;AAAA,IACA,WAAW,oFAAoFC,KAAa,EAAE;AAAA,IAC9G,cAAW;AAAA,IACX,UAAU;AAAA,IAEV,UAAA,gBAAAC,EAAC,SAAI,WAAU,WAAU,MAAK,QAAO,SAAQ,aAAY,QAAO,gBAAe,eAAY,QACzF,UAAA,gBAAAA,EAAC,QAAA,EAAK,eAAc,SAAQ,gBAAe,SAAQ,aAAa,GAAG,GAAE,uBAAA,CAAuB,EAAA,CAC9F;AAAA,EAAA;AACF,GAGWC,KAAQC;AAAA,EACnB,CACE;AAAA,IACE,MAAAC,IAAO;AAAA,IACP,MAAAC;AAAA,IACA,OAAAC;AAAA,IACA,QAAAC;AAAA,IACA,OAAAC,IAAQ;AAAA,IACR,UAAAC,IAAW;AAAA,IACX,WAAAT,IAAY;AAAA,IACZ,MAAAd;AAAA,IACA,iBAAAwB,IAAkB;AAAA,IAClB,YAAAC;AAAA,IACA,SAAAC;AAAA,IACA,QAAAC;AAAA,IACA,QAAAC;AAAA,IACA,SAAAC;AAAA,IACA,OAAAtB;AAAA,IACA,cAAAuB;AAAA,IACA,UAAAC;AAAA,IACA,WAAAC;AAAA,IACA,UAAAC;AAAA,IACA,UAAAC;AAAA,IACA,GAAGC;AAAA,EAAA,GAELC,OACG;AACH,UAAMC,KAAc;AAAA,MAClB,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA,GAoBAC,KAAsBjB,IANN;AAAA,MACpB,OAAO;AAAA,MACP,SAAS;AAAA,IAAA,EAIwCA,CAAM,IAAKD,IAjBzC;AAAA,MACnB,SAAS;AAAA,MACT,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,OAAO;AAAA,IAAA,EAS0EA,CAAK,IAAI,IAEtFmB,IAAe;AAAA,MACnB;AAAA,MACA,CAAChB,KAAY;AAAA,MACbD,KAAS;AAAA,MACTH,KAAQkB,GAAYlB,CAAI;AAAA,MACxBmB;AAAA,MACAxB;AAAA,IAAA,EAEC,OAAO,OAAO,EACd,KAAK,GAAG,GAGL0B,KAAWC,GAAyB,IAAI,GACxCC,IAAYN,MAA6CI,IAEzDG,KAAgBC,EAAY,MAC3B5C,IAEEM,EADUC,KAASuB,KAAgB,IACf9B,GAAMwB,CAAe,IAF9B,IAGjB,CAACxB,GAAMO,GAAOuB,GAAcN,CAAe,CAAC,GAEzC,CAACqB,GAAUC,CAAW,IAAIC,EAASJ,EAAa,GAChD,CAACK,GAAWC,CAAY,IAAIF,EAAwB,IAAI;AAG9D,IAAAG,EAAU,MAAM;AACd,MAAIlD,KAAQO,MAAU,UACpBuC,EAAYxC,EAAWC,GAAiBP,GAAMwB,CAAe,CAAC;AAAA,IAElE,GAAG,CAACxB,GAAMO,GAAOiB,CAAe,CAAC,GAGjC0B,EAAU,MAAM;AACd,MAAIF,MAAc,QAAQN,EAAS,YACjCA,EAAS,QAAQ,kBAAkBM,GAAWA,CAAS,GACvDC,EAAa,IAAI;AAAA,IAErB,GAAG,CAACD,GAAWN,CAAQ,CAAC;AAExB,UAAMS,IAAqBP;AAAA,MACzB,CAACQ,MAA2C;AAC1C,YAAI,CAACpD,GAAM;AACT,UAAA+B,IAAWqB,CAAC;AACZ;AAAA,QACF;AAEA,cAAMC,IAAQD,EAAE,QACVE,IAAaD,EAAM,OAGnBE,IAASjD,EAAWgD,GAAYtD,GAAMwB,CAAe;AAG3D,YAAIgC,IAAc,IACdC,IAAS;AACb,iBAASrD,IAAI,GAAGA,IAAIJ,EAAK,UAAUyD,IAASF,EAAO,QAAQnD,KAAK;AAC9D,gBAAMC,IAAWL,EAAKI,CAAC;AACvB,WAAIC,MAAa,OAAOA,MAAa,OAAOA,MAAa,SACnDG,GAAY+C,EAAOE,CAAM,GAAGpD,CAAQ,MACtCmD,KAAeD,EAAOE,CAAM,IAE9BA;AAAA,QAEJ;AAEA,QAAAX,EAAYU,CAAW;AAGvB,cAAME,IAAc5D,EAAU0D,GAAaxD,GAAMwB,CAAe;AAChE,YAAImC,IAAYjD,EAAsBV,GAAM,CAAC,GACzC4D,IAAc;AAClB,iBAASxD,IAAI,GAAGA,IAAIJ,EAAK,QAAQI,KAAK;AACpC,gBAAMC,IAAWL,EAAKI,CAAC;AACvB,WAAIC,MAAa,OAAOA,MAAa,OAAOA,MAAa,QACnDuD,IAAcJ,EAAY,WAC5BI,KACAD,IAAYvD,IAAI;AAAA,QAGtB;AAEA,QAAAuD,IAAYjD,EAAsBV,GAAM2D,CAAS,GAC7CA,IAAY3D,EAAK,WAAQ2D,IAAY3D,EAAK,SAE9CiD,EAAaU,CAAS;AAGtB,cAAME,KAAiB;AAAA,UACrB,GAAGT;AAAA,UACH,QAAQ,EAAE,GAAGC,GAAO,OAAOK,EAAAA;AAAAA,UAC3B,eAAe,EAAE,GAAGL,GAAO,OAAOK,EAAAA;AAAAA,QAAY;AAGhD,QAAA3B,IAAW8B,EAAc;AAAA,MAC3B;AAAA,MACA,CAAC7D,GAAMwB,GAAiBO,CAAQ;AAAA,IAAA,GAG5B+B,IAAsBlB;AAAA,MAC1B,CAACQ,MAA6C;AAC5C,YAAI,CAACpD,GAAM;AACT,UAAAgC,IAAYoB,CAAC;AACb;AAAA,QACF;AAEA,YAAIA,EAAE,QAAQ,aAAa;AACzB,UAAAA,EAAE,eAAA;AACF,gBAAMG,IAASV,EAAS,MAAM,GAAG,EAAE;AACnC,UAAAC,EAAYS,CAAM;AAGlB,cAAII,IAAY,GACZC,IAAc;AAClB,mBAASxD,IAAI,GAAGA,IAAIJ,EAAK,QAAQI,KAAK;AACpC,kBAAMC,IAAWL,EAAKI,CAAC;AACvB,gBAAIC,MAAa,OAAOA,MAAa,OAAOA,MAAa;AACvD,kBAAIuD,IAAcL,EAAO;AACvB,gBAAAK,KACAD,IAAYvD,IAAI;AAAA,mBACX;AACL,gBAAAuD,IAAYvD;AACZ;AAAA,cACF;AAAA,UAEJ;AACA,UAAA6C,EAAaU,CAAS;AAEtB,gBAAMD,IAAc5D,EAAUyD,GAAQvD,GAAMwB,CAAe,GACrD6B,IAAQD,EAAE,eACVS,IAAiB;AAAA,YACrB,QAAQ,EAAE,GAAGR,GAAO,OAAOK,EAAAA;AAAAA,YAC3B,eAAe,EAAE,GAAGL,GAAO,OAAOK,EAAAA;AAAAA,UAAY;AAGhD,UAAA3B,IAAW8B,CAAc;AAAA,QAC3B;AAEA,QAAA7B,IAAYoB,CAAC;AAAA,MACf;AAAA,MACA,CAACpD,GAAMwB,GAAiBqB,GAAUd,GAAUC,CAAS;AAAA,IAAA,GAIjD,CAAC+B,GAAeC,CAAgB,IAAIjB,EAAUxC,KAASuB,KAAgB,EAAa;AAG1F,IAAAoB,EAAU,MAAM;AACd,MAAI3C,MAAU,UACZyD,EAAiBzD,CAAe;AAAA,IAEpC,GAAG,CAACA,CAAK,CAAC;AAEV,UAAM0D,KAAerB,EAAY,CAACQ,MAA2C;AAC3E,MAAAY,EAAiBZ,EAAE,OAAO,KAAK,GAC/BrB,IAAWqB,CAAC;AAAA,IACd,GAAG,CAACrB,CAAQ,CAAC,GAEPmC,KAActB,EAAY,MAAM;AAKpC,UAJAoB,EAAiB,EAAE,GACnBlB,EAAY,EAAE,GACdpB,IAAA,GAEIK,KAAYW,EAAS,SAAS;AAChC,cAAMmB,IAAiB;AAAA,UACrB,QAAQ,EAAE,GAAGnB,EAAS,SAAS,OAAO,GAAA;AAAA,UACtC,eAAe,EAAE,GAAGA,EAAS,SAAS,OAAO,GAAA;AAAA,QAAG;AAElD,QAAAX,EAAS8B,CAAc;AAAA,MACzB;AAAA,IACF,GAAG,CAACnC,GAASK,GAAUW,CAAQ,CAAC,GAI1ByB,IAAY1C,MADGzB,IAAO6C,IAAWkB,MACS,CAAC9B,GAG3CmC,KAAY,OAAO3C,KAAe,YAAYA,EAAW,YAC3DA,EAAW,YACX,MAGE4C,IAA0D,CAAA;AAChE,IAAIhD,MAAW,YACbgD,EAAU,cAAc,IAAI,KAE1BxC,MACFwC,EAAU,kBAAkB,IAAIxC,IAE9BK,MACFmC,EAAU,eAAe,IAAI;AAI/B,UAAMC,IAAY3C,KAAUC,KAAUH,GAGhC8C,IAAc,CAACC,GAAwBlB,GAAqBmB,MAChE,gBAAA1D;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,KAAK2B;AAAA,QACL,MAAM1C,IAAO,SAASkB;AAAA,QACtB,WAAWsD;AAAA,QACX,OAAOlB,KAAc/C;AAAA,QACrB,cAAc,CAAC+C,KAAc,CAAC/C,IAAQuB,IAAe;AAAA,QACrD,UAAU2C,KAAiB1C;AAAA,QAC3B,WAAW/B,IAAO8D,IAAsB9B;AAAA,QACxC,UAAAC;AAAA,QACA,UAAAC;AAAA,QACC,GAAGmC;AAAA,QACH,GAAGlC;AAAA,MAAA;AAAA,IAAA;AAKR,QAAI,CAACnC,KAAQ,CAACsE;AACZ,aAAOC,EAAYhC,CAAY;AAIjC,QAAIvC,KAAQ,CAACsE,GAAW;AACtB,YAAMZ,IAAc5D,EAAU+C,GAAU7C,GAAMwB,CAAe;AAC7D,aAAO+C,EAAYhC,GAAcmB,GAAaP,CAAkB;AAAA,IAClE;AAGA,UAAMO,KAAc1D,IAAOF,EAAU+C,GAAU7C,GAAMwB,CAAe,IAAI;AAExE,WACE,gBAAAkD,EAAC,OAAA,EAAI,WAAU,8BACZ,UAAA;AAAA,MAAA/C,KACC,gBAAAZ,EAAC,QAAA,EAAK,WAAU,mFACb,UAAAY,GACH;AAAA,MAEF,gBAAAZ;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,KAAK2B;AAAA,UACL,MAAM1C,IAAO,SAASkB;AAAA,UACtB,WAAW;AAAA,YACTqB;AAAA,YACA;AAAA,YACAZ,KAAU;AAAA,aACTC,KAAUuC,MAAc;AAAA,UAAA,EACzB,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,UAC1B,OAAOT,OAAgBnD,MAAU,SAAYA,IAAQwD;AAAA,UACrD,cAAcxD,MAAU,UAAa,CAACP,IAAO8B,IAAe;AAAA,UAC5D,UAAU9B,IAAOmD,IAAqBc;AAAA,UACtC,WAAWjE,IAAO8D,IAAsB9B;AAAA,UACxC,UAAAC;AAAA,UACA,UAAAC;AAAA,UACC,GAAGmC;AAAA,UACH,GAAGlC;AAAA,QAAA;AAAA,MAAA;AAAA,OAEJP,KAAUuC,MACV,gBAAAO,EAAC,QAAA,EAAK,WAAU,iDACb,UAAA;AAAA,QAAAP,MACCC,MAAa,gBAAArD,EAACH,IAAA,EAAU,SAASsD,GAAA,CAAa;AAAA,QAE/CtC,KACC,gBAAAb,EAAC,QAAA,EAAK,WAAU,wBACb,UAAAa,EAAA,CACH;AAAA,MAAA,EAAA,CAEJ;AAAA,IAAA,GAEJ;AAAA,EAEJ;AACF;AAEAZ,GAAM,cAAc;"}
package/dist/index43.js CHANGED
@@ -1,18 +1,158 @@
1
- import { jsx as c } from "react/jsx-runtime";
2
- import n from "react";
3
- function f({ children: o, direction: t = "horizontal", className: s = "", ...r }) {
4
- const a = ["join", t === "vertical" && "join-vertical", s].filter(Boolean).join(" "), l = n.Children.map(o, (e) => {
5
- if (n.isValidElement(e)) {
6
- const i = e.props.className || "", m = i ? `join-item ${i}` : "join-item";
7
- return n.cloneElement(e, {
8
- className: m
9
- });
10
- }
11
- return e;
12
- });
13
- return /* @__PURE__ */ c("div", { className: a, ...r, children: l });
14
- }
1
+ import { jsxs as k, jsx as r } from "react/jsx-runtime";
2
+ import { forwardRef as S, useState as A, useRef as K, useImperativeHandle as W } from "react";
3
+ const H = S(
4
+ ({
5
+ value: o,
6
+ defaultValue: I,
7
+ min: a = -1 / 0,
8
+ max: u = 1 / 0,
9
+ step: d = 1,
10
+ precision: s,
11
+ size: c,
12
+ disabled: l = !1,
13
+ onChange: p,
14
+ formatter: f,
15
+ parser: h,
16
+ className: w = "",
17
+ controls: v = !0,
18
+ block: C = !0,
19
+ ...D
20
+ }, V) => {
21
+ const [j, m] = A(I ?? null), b = K(null);
22
+ W(V, () => b.current);
23
+ const n = o !== void 0 ? o : j, B = (e) => {
24
+ if (e === null) return "";
25
+ let t = e;
26
+ return s !== void 0 && (t = Number(e.toFixed(s))), f ? f(t) : String(t);
27
+ }, M = (e) => {
28
+ if (!e) return null;
29
+ const t = h ? h(e) : parseFloat(e);
30
+ return isNaN(t) ? null : t;
31
+ }, x = (e) => {
32
+ let t = Math.max(a, Math.min(u, e));
33
+ return s !== void 0 && (t = Number(t.toFixed(s))), t;
34
+ }, i = (e) => {
35
+ if (e === null) {
36
+ o === void 0 && m(null), p?.(null);
37
+ return;
38
+ }
39
+ const t = x(e);
40
+ o === void 0 && m(t), p?.(t);
41
+ }, y = () => {
42
+ if (l) return;
43
+ i((n ?? 0) + d);
44
+ }, g = () => {
45
+ if (l) return;
46
+ i((n ?? 0) - d);
47
+ }, L = (e) => {
48
+ const t = M(e.target.value);
49
+ t !== null ? i(t) : e.target.value === "" && i(null);
50
+ }, $ = (e) => {
51
+ l || (e.key === "ArrowUp" ? (e.preventDefault(), y()) : e.key === "ArrowDown" && (e.preventDefault(), g()));
52
+ }, F = () => {
53
+ n !== null && (n < a || n > u) && i(x(n));
54
+ }, R = [
55
+ "input",
56
+ "input-bordered",
57
+ "w-full",
58
+ c && {
59
+ xs: "input-xs",
60
+ sm: "input-sm",
61
+ md: "input-md",
62
+ lg: "input-lg",
63
+ xl: "input-xl"
64
+ }[c],
65
+ l && "input-disabled",
66
+ v && "pr-8"
67
+ ].filter(Boolean).join(" "), N = c === "xs" || c === "sm" ? "btn-xs" : "btn-sm";
68
+ return /* @__PURE__ */ k("div", { className: `relative ${C ? "w-full" : "inline-block"} group ${w}`, children: [
69
+ /* @__PURE__ */ r(
70
+ "input",
71
+ {
72
+ ref: b,
73
+ type: "text",
74
+ inputMode: "decimal",
75
+ role: "spinbutton",
76
+ "aria-valuemin": a !== -1 / 0 ? a : void 0,
77
+ "aria-valuemax": u !== 1 / 0 ? u : void 0,
78
+ "aria-valuenow": n ?? void 0,
79
+ className: R,
80
+ value: B(n),
81
+ onChange: L,
82
+ onKeyDown: $,
83
+ onBlur: F,
84
+ disabled: l,
85
+ ...D
86
+ }
87
+ ),
88
+ v && /* @__PURE__ */ k("div", { className: "absolute right-1 top-1/2 -translate-y-1/2 flex flex-col gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity", children: [
89
+ /* @__PURE__ */ r(
90
+ "button",
91
+ {
92
+ type: "button",
93
+ "aria-label": "Increase value",
94
+ className: `btn ${N} btn-ghost px-1 min-h-0 h-3.5`,
95
+ onClick: y,
96
+ disabled: l || n !== null && n >= u,
97
+ tabIndex: -1,
98
+ children: /* @__PURE__ */ r(
99
+ "svg",
100
+ {
101
+ className: "w-3 h-3",
102
+ fill: "none",
103
+ viewBox: "0 0 24 24",
104
+ stroke: "currentColor",
105
+ "aria-hidden": "true",
106
+ children: /* @__PURE__ */ r(
107
+ "path",
108
+ {
109
+ strokeLinecap: "round",
110
+ strokeLinejoin: "round",
111
+ strokeWidth: 2,
112
+ d: "M5 15l7-7 7 7"
113
+ }
114
+ )
115
+ }
116
+ )
117
+ }
118
+ ),
119
+ /* @__PURE__ */ r(
120
+ "button",
121
+ {
122
+ type: "button",
123
+ "aria-label": "Decrease value",
124
+ className: `btn ${N} btn-ghost px-1 min-h-0 h-3.5`,
125
+ onClick: g,
126
+ disabled: l || n !== null && n <= a,
127
+ tabIndex: -1,
128
+ children: /* @__PURE__ */ r(
129
+ "svg",
130
+ {
131
+ className: "w-3 h-3",
132
+ fill: "none",
133
+ viewBox: "0 0 24 24",
134
+ stroke: "currentColor",
135
+ "aria-hidden": "true",
136
+ children: /* @__PURE__ */ r(
137
+ "path",
138
+ {
139
+ strokeLinecap: "round",
140
+ strokeLinejoin: "round",
141
+ strokeWidth: 2,
142
+ d: "M19 9l-7 7-7-7"
143
+ }
144
+ )
145
+ }
146
+ )
147
+ }
148
+ )
149
+ ] })
150
+ ] });
151
+ }
152
+ );
153
+ H.displayName = "InputNumber";
15
154
  export {
16
- f as Join
155
+ H as InputNumber,
156
+ H as default
17
157
  };
18
158
  //# sourceMappingURL=index43.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index43.js","sources":["../src/components/Join.tsx"],"sourcesContent":["import React from 'react'\n\nexport interface JoinProps extends React.HTMLAttributes<HTMLDivElement> {\n children: React.ReactNode\n direction?: 'horizontal' | 'vertical'\n}\n\nexport function Join({ children, direction = 'horizontal', className = '', ...rest }: JoinProps) {\n const classes = ['join', direction === 'vertical' && 'join-vertical', className].filter(Boolean).join(' ')\n\n // Automatically add join-item class to all children\n const childrenWithJoinItem = React.Children.map(children, (child) => {\n if (React.isValidElement(child)) {\n const existingClassName = (child.props as any).className || ''\n const newClassName = existingClassName ? `join-item ${existingClassName}` : 'join-item'\n\n return React.cloneElement(child as React.ReactElement<any>, {\n className: newClassName,\n })\n }\n return child\n })\n\n return <div className={classes} {...rest}>{childrenWithJoinItem}</div>\n}\n"],"names":["Join","children","direction","className","rest","classes","childrenWithJoinItem","React","child","existingClassName","newClassName"],"mappings":";;AAOO,SAASA,EAAK,EAAE,UAAAC,GAAU,WAAAC,IAAY,cAAc,WAAAC,IAAY,IAAI,GAAGC,KAAmB;AAC/F,QAAMC,IAAU,CAAC,QAAQH,MAAc,cAAc,iBAAiBC,CAAS,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,GAGnGG,IAAuBC,EAAM,SAAS,IAAIN,GAAU,CAACO,MAAU;AACnE,QAAID,EAAM,eAAeC,CAAK,GAAG;AAC/B,YAAMC,IAAqBD,EAAM,MAAc,aAAa,IACtDE,IAAeD,IAAoB,aAAaA,CAAiB,KAAK;AAE5E,aAAOF,EAAM,aAAaC,GAAkC;AAAA,QAC1D,WAAWE;AAAA,MAAA,CACZ;AAAA,IACH;AACA,WAAOF;AAAA,EACT,CAAC;AAED,2BAAQ,OAAA,EAAI,WAAWH,GAAU,GAAGD,GAAO,UAAAE,GAAqB;AAClE;"}
1
+ {"version":3,"file":"index43.js","sources":["../src/components/InputNumber.tsx"],"sourcesContent":["import React, { useState, useRef, forwardRef, useImperativeHandle } from 'react'\n\nexport interface InputNumberProps extends Omit<React.InputHTMLAttributes<HTMLInputElement>, 'size' | 'onChange' | 'value' | 'defaultValue'> {\n value?: number\n defaultValue?: number\n min?: number\n max?: number\n step?: number\n precision?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n disabled?: boolean\n onChange?: (value: number | null) => void\n formatter?: (value: number | undefined) => string\n parser?: (displayValue: string) => number\n className?: string\n controls?: boolean\n block?: boolean\n}\n\nexport const InputNumber = forwardRef<HTMLInputElement, InputNumberProps>(\n (\n {\n value: controlledValue,\n defaultValue,\n min = -Infinity,\n max = Infinity,\n step = 1,\n precision,\n size,\n disabled = false,\n onChange,\n formatter,\n parser,\n className = '',\n controls = true,\n block = true,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<number | null>(defaultValue ?? null)\n const inputRef = useRef<HTMLInputElement>(null)\n\n useImperativeHandle(ref, () => inputRef.current!)\n\n const value = controlledValue !== undefined ? controlledValue : internalValue\n\n const formatValue = (num: number | null): string => {\n if (num === null) return ''\n let formatted = num\n if (precision !== undefined) {\n formatted = Number(num.toFixed(precision))\n }\n return formatter ? formatter(formatted) : String(formatted)\n }\n\n const parseValue = (str: string): number | null => {\n if (!str) return null\n const parsed = parser ? parser(str) : parseFloat(str)\n if (isNaN(parsed)) return null\n return parsed\n }\n\n const clampValue = (num: number): number => {\n let clamped = Math.max(min, Math.min(max, num))\n if (precision !== undefined) {\n clamped = Number(clamped.toFixed(precision))\n }\n return clamped\n }\n\n const updateValue = (newValue: number | null) => {\n if (newValue === null) {\n if (controlledValue === undefined) {\n setInternalValue(null)\n }\n onChange?.(null)\n return\n }\n\n const clamped = clampValue(newValue)\n if (controlledValue === undefined) {\n setInternalValue(clamped)\n }\n onChange?.(clamped)\n }\n\n const handleIncrement = () => {\n if (disabled) return\n const currentValue = value ?? 0\n updateValue(currentValue + step)\n }\n\n const handleDecrement = () => {\n if (disabled) return\n const currentValue = value ?? 0\n updateValue(currentValue - step)\n }\n\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n const parsed = parseValue(e.target.value)\n if (parsed !== null) {\n updateValue(parsed)\n } else if (e.target.value === '') {\n updateValue(null)\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (disabled) return\n\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n handleIncrement()\n } else if (e.key === 'ArrowDown') {\n e.preventDefault()\n handleDecrement()\n }\n }\n\n const handleBlur = () => {\n // Ensure value is within bounds on blur\n if (value !== null && (value < min || value > max)) {\n updateValue(clampValue(value))\n }\n }\n\n const sizeClasses = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n const inputClasses = [\n 'input',\n 'input-bordered',\n 'w-full',\n size && sizeClasses[size],\n disabled && 'input-disabled',\n controls && 'pr-8',\n ]\n .filter(Boolean)\n .join(' ')\n\n const buttonSize = size === 'xs' || size === 'sm' ? 'btn-xs' : 'btn-sm'\n\n return (\n <div className={`relative ${block ? 'w-full' : 'inline-block'} group ${className}`}>\n <input\n ref={inputRef}\n type=\"text\"\n inputMode=\"decimal\"\n role=\"spinbutton\"\n aria-valuemin={min !== -Infinity ? min : undefined}\n aria-valuemax={max !== Infinity ? max : undefined}\n aria-valuenow={value ?? undefined}\n className={inputClasses}\n value={formatValue(value)}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n onBlur={handleBlur}\n disabled={disabled}\n {...props}\n />\n {controls && (\n <div className=\"absolute right-1 top-1/2 -translate-y-1/2 flex flex-col gap-0.5 opacity-0 group-hover:opacity-100 transition-opacity\">\n <button\n type=\"button\"\n aria-label=\"Increase value\"\n className={`btn ${buttonSize} btn-ghost px-1 min-h-0 h-3.5`}\n onClick={handleIncrement}\n disabled={disabled || (value !== null && value >= max)}\n tabIndex={-1}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M5 15l7-7 7 7\"\n />\n </svg>\n </button>\n <button\n type=\"button\"\n aria-label=\"Decrease value\"\n className={`btn ${buttonSize} btn-ghost px-1 min-h-0 h-3.5`}\n onClick={handleDecrement}\n disabled={disabled || (value !== null && value <= min)}\n tabIndex={-1}\n >\n <svg\n className=\"w-3 h-3\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n aria-hidden=\"true\"\n >\n <path\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n strokeWidth={2}\n d=\"M19 9l-7 7-7-7\"\n />\n </svg>\n </button>\n </div>\n )}\n </div>\n )\n }\n)\n\nInputNumber.displayName = 'InputNumber'\n\nexport default InputNumber\n"],"names":["InputNumber","forwardRef","controlledValue","defaultValue","min","max","step","precision","size","disabled","onChange","formatter","parser","className","controls","block","props","ref","internalValue","setInternalValue","useState","inputRef","useRef","useImperativeHandle","value","formatValue","num","formatted","parseValue","str","parsed","clampValue","clamped","updateValue","newValue","handleIncrement","handleDecrement","handleInputChange","handleKeyDown","handleBlur","inputClasses","buttonSize","jsxs","jsx"],"mappings":"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"}