asterui 0.12.19 → 0.12.20

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 (204) hide show
  1. package/dist/components/Code.d.ts +2 -0
  2. package/dist/components/CopyButton.d.ts +34 -0
  3. package/dist/index.d.ts +2 -0
  4. package/dist/index.js +205 -203
  5. package/dist/index.js.map +1 -1
  6. package/dist/index10.js +91 -121
  7. package/dist/index10.js.map +1 -1
  8. package/dist/index100.js +5 -13
  9. package/dist/index100.js.map +1 -1
  10. package/dist/index101.js +11 -43
  11. package/dist/index101.js.map +1 -1
  12. package/dist/index102.js +44 -11
  13. package/dist/index102.js.map +1 -1
  14. package/dist/index103.js +10 -12
  15. package/dist/index103.js.map +1 -1
  16. package/dist/index104.js +14 -7
  17. package/dist/index104.js.map +1 -1
  18. package/dist/index105.js +7 -12
  19. package/dist/index105.js.map +1 -1
  20. package/dist/index106.js +11 -29
  21. package/dist/index106.js.map +1 -1
  22. package/dist/index107.js +29 -16
  23. package/dist/index107.js.map +1 -1
  24. package/dist/index108.js +21 -0
  25. package/dist/index108.js.map +1 -0
  26. package/dist/index11.js +123 -30
  27. package/dist/index11.js.map +1 -1
  28. package/dist/index12.js +28 -263
  29. package/dist/index12.js.map +1 -1
  30. package/dist/index13.js +257 -105
  31. package/dist/index13.js.map +1 -1
  32. package/dist/index14.js +108 -153
  33. package/dist/index14.js.map +1 -1
  34. package/dist/index15.js +154 -146
  35. package/dist/index15.js.map +1 -1
  36. package/dist/index16.js +150 -5
  37. package/dist/index16.js.map +1 -1
  38. package/dist/index17.js +5 -71
  39. package/dist/index17.js.map +1 -1
  40. package/dist/index18.js +70 -24
  41. package/dist/index18.js.map +1 -1
  42. package/dist/index19.js +23 -194
  43. package/dist/index19.js.map +1 -1
  44. package/dist/index20.js +188 -106
  45. package/dist/index20.js.map +1 -1
  46. package/dist/index21.js +107 -177
  47. package/dist/index21.js.map +1 -1
  48. package/dist/index22.js +181 -107
  49. package/dist/index22.js.map +1 -1
  50. package/dist/index23.js +110 -19
  51. package/dist/index23.js.map +1 -1
  52. package/dist/index24.js +17 -41
  53. package/dist/index24.js.map +1 -1
  54. package/dist/index25.js +43 -32
  55. package/dist/index25.js.map +1 -1
  56. package/dist/index26.js +30 -170
  57. package/dist/index26.js.map +1 -1
  58. package/dist/index27.js +171 -40
  59. package/dist/index27.js.map +1 -1
  60. package/dist/index28.js +41 -17
  61. package/dist/index28.js.map +1 -1
  62. package/dist/index29.js +17 -33
  63. package/dist/index29.js.map +1 -1
  64. package/dist/index30.js +33 -52
  65. package/dist/index30.js.map +1 -1
  66. package/dist/index31.js +50 -61
  67. package/dist/index31.js.map +1 -1
  68. package/dist/index32.js +60 -181
  69. package/dist/index32.js.map +1 -1
  70. package/dist/index33.js +184 -18
  71. package/dist/index33.js.map +1 -1
  72. package/dist/index34.js +15 -271
  73. package/dist/index34.js.map +1 -1
  74. package/dist/index35.js +270 -1083
  75. package/dist/index35.js.map +1 -1
  76. package/dist/index36.js +1086 -16
  77. package/dist/index36.js.map +1 -1
  78. package/dist/index37.js +17 -17
  79. package/dist/index37.js.map +1 -1
  80. package/dist/index38.js +15 -120
  81. package/dist/index38.js.map +1 -1
  82. package/dist/index39.js +119 -37
  83. package/dist/index39.js.map +1 -1
  84. package/dist/index40.js +40 -398
  85. package/dist/index40.js.map +1 -1
  86. package/dist/index41.js +390 -89
  87. package/dist/index41.js.map +1 -1
  88. package/dist/index42.js +91 -253
  89. package/dist/index42.js.map +1 -1
  90. package/dist/index43.js +249 -145
  91. package/dist/index43.js.map +1 -1
  92. package/dist/index44.js +155 -15
  93. package/dist/index44.js.map +1 -1
  94. package/dist/index45.js +15 -17
  95. package/dist/index45.js.map +1 -1
  96. package/dist/index46.js +16 -136
  97. package/dist/index46.js.map +1 -1
  98. package/dist/index47.js +134 -10
  99. package/dist/index47.js.map +1 -1
  100. package/dist/index48.js +13 -35
  101. package/dist/index48.js.map +1 -1
  102. package/dist/index49.js +35 -34
  103. package/dist/index49.js.map +1 -1
  104. package/dist/index50.js +34 -81
  105. package/dist/index50.js.map +1 -1
  106. package/dist/index51.js +71 -166
  107. package/dist/index51.js.map +1 -1
  108. package/dist/index52.js +167 -144
  109. package/dist/index52.js.map +1 -1
  110. package/dist/index53.js +152 -11
  111. package/dist/index53.js.map +1 -1
  112. package/dist/index54.js +10 -20
  113. package/dist/index54.js.map +1 -1
  114. package/dist/index55.js +55 -12
  115. package/dist/index55.js.map +1 -1
  116. package/dist/index56.js +14 -7
  117. package/dist/index56.js.map +1 -1
  118. package/dist/index57.js +6 -333
  119. package/dist/index57.js.map +1 -1
  120. package/dist/index58.js +334 -47
  121. package/dist/index58.js.map +1 -1
  122. package/dist/index59.js +47 -122
  123. package/dist/index59.js.map +1 -1
  124. package/dist/index60.js +120 -108
  125. package/dist/index60.js.map +1 -1
  126. package/dist/index61.js +107 -167
  127. package/dist/index61.js.map +1 -1
  128. package/dist/index62.js +167 -29
  129. package/dist/index62.js.map +1 -1
  130. package/dist/index63.js +30 -120
  131. package/dist/index63.js.map +1 -1
  132. package/dist/index64.js +116 -80
  133. package/dist/index64.js.map +1 -1
  134. package/dist/index65.js +85 -19
  135. package/dist/index65.js.map +1 -1
  136. package/dist/index66.js +19 -73
  137. package/dist/index66.js.map +1 -1
  138. package/dist/index67.js +71 -54
  139. package/dist/index67.js.map +1 -1
  140. package/dist/index68.js +56 -44
  141. package/dist/index68.js.map +1 -1
  142. package/dist/index69.js +42 -49
  143. package/dist/index69.js.map +1 -1
  144. package/dist/index70.js +50 -121
  145. package/dist/index70.js.map +1 -1
  146. package/dist/index71.js +118 -102
  147. package/dist/index71.js.map +1 -1
  148. package/dist/index72.js +105 -72
  149. package/dist/index72.js.map +1 -1
  150. package/dist/index73.js +73 -67
  151. package/dist/index73.js.map +1 -1
  152. package/dist/index74.js +66 -19
  153. package/dist/index74.js.map +1 -1
  154. package/dist/index75.js +18 -55
  155. package/dist/index75.js.map +1 -1
  156. package/dist/index76.js +55 -251
  157. package/dist/index76.js.map +1 -1
  158. package/dist/index77.js +254 -22
  159. package/dist/index77.js.map +1 -1
  160. package/dist/index78.js +22 -31
  161. package/dist/index78.js.map +1 -1
  162. package/dist/index79.js +30 -93
  163. package/dist/index79.js.map +1 -1
  164. package/dist/index80.js +89 -324
  165. package/dist/index80.js.map +1 -1
  166. package/dist/index81.js +322 -73
  167. package/dist/index81.js.map +1 -1
  168. package/dist/index82.js +79 -39
  169. package/dist/index82.js.map +1 -1
  170. package/dist/index83.js +40 -23
  171. package/dist/index83.js.map +1 -1
  172. package/dist/index84.js +21 -93
  173. package/dist/index84.js.map +1 -1
  174. package/dist/index85.js +87 -148
  175. package/dist/index85.js.map +1 -1
  176. package/dist/index86.js +147 -152
  177. package/dist/index86.js.map +1 -1
  178. package/dist/index87.js +159 -63
  179. package/dist/index87.js.map +1 -1
  180. package/dist/index88.js +65 -35
  181. package/dist/index88.js.map +1 -1
  182. package/dist/index89.js +35 -234
  183. package/dist/index89.js.map +1 -1
  184. package/dist/index90.js +231 -31
  185. package/dist/index90.js.map +1 -1
  186. package/dist/index91.js +34 -210
  187. package/dist/index91.js.map +1 -1
  188. package/dist/index92.js +195 -198
  189. package/dist/index92.js.map +1 -1
  190. package/dist/index93.js +159 -241
  191. package/dist/index93.js.map +1 -1
  192. package/dist/index94.js +283 -166
  193. package/dist/index94.js.map +1 -1
  194. package/dist/index95.js +173 -253
  195. package/dist/index95.js.map +1 -1
  196. package/dist/index96.js +253 -121
  197. package/dist/index96.js.map +1 -1
  198. package/dist/index97.js +126 -14
  199. package/dist/index97.js.map +1 -1
  200. package/dist/index98.js +12 -31
  201. package/dist/index98.js.map +1 -1
  202. package/dist/index99.js +32 -5
  203. package/dist/index99.js.map +1 -1
  204. package/package.json +1 -1
package/dist/index43.js CHANGED
@@ -1,158 +1,262 @@
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 p, jsxs as $ } from "react/jsx-runtime";
2
+ import { forwardRef as vt, useRef as It, useCallback as B, useState as O, useEffect as Q } from "react";
3
+ function X(e, r, s) {
4
+ let c = "", l = 0;
5
+ for (let d = 0; d < r.length && l <= e.length; d++) {
6
+ const b = r[d];
7
+ b === "#" || b === "A" || b === "*" ? l < e.length ? (c += e[l], l++) : c += s : c += b;
8
+ }
9
+ return c;
10
+ }
11
+ function Y(e, r, s) {
12
+ let c = "";
13
+ for (let l = 0; l < e.length && l < r.length; l++) {
14
+ const d = r[l];
15
+ (d === "#" || d === "A" || d === "*") && e[l] !== s && (c += e[l]);
16
+ }
17
+ return c;
18
+ }
19
+ function Ct(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 lt(e, r) {
23
+ for (let s = r; s < e.length; s++)
24
+ if (e[s] === "#" || e[s] === "A" || e[s] === "*")
25
+ return s;
26
+ return e.length;
27
+ }
28
+ const Nt = ({ onClick: e, className: r }) => /* @__PURE__ */ p(
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__ */ p("svg", { className: "w-4 h-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", "aria-hidden": "true", children: /* @__PURE__ */ p("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) })
37
+ }
38
+ ), At = vt(
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 = !1,
19
- ...D
20
- }, V) => {
21
- const [j, m] = A(I ?? null), b = K(null);
22
- W(V, () => b.current);
23
- const t = o !== void 0 ? o : j, B = (e) => {
24
- if (e === null) return "";
25
- let n = e;
26
- return s !== void 0 && (n = Number(e.toFixed(s))), f ? f(n) : String(n);
27
- }, M = (e) => {
28
- if (!e) return null;
29
- const n = h ? h(e) : parseFloat(e);
30
- return isNaN(n) ? null : n;
31
- }, x = (e) => {
32
- let n = Math.max(a, Math.min(u, e));
33
- return s !== void 0 && (n = Number(n.toFixed(s))), n;
34
- }, i = (e) => {
35
- if (e === null) {
36
- o === void 0 && m(null), p?.(null);
37
- return;
38
- }
39
- const n = x(e);
40
- o === void 0 && m(n), p?.(n);
41
- }, y = () => {
42
- if (l) return;
43
- i((t ?? 0) + d);
44
- }, g = () => {
45
- if (l) return;
46
- i((t ?? 0) - d);
47
- }, L = (e) => {
48
- const n = M(e.target.value);
49
- n !== null ? i(n) : e.target.value === "" && i(null);
50
- }, $ = (e) => {
51
- l || (e.key === "ArrowUp" ? (e.preventDefault(), y()) : e.key === "ArrowDown" && (e.preventDefault(), g()));
52
- }, F = () => {
53
- t !== null && (t < a || t > u) && i(x(t));
54
- }, R = [
40
+ type: e = "text",
41
+ size: r,
42
+ color: s,
43
+ status: c,
44
+ ghost: l = !1,
45
+ bordered: d = !0,
46
+ className: b = "",
47
+ mask: t,
48
+ maskPlaceholder: f = "_",
49
+ allowClear: C,
50
+ onClear: q,
51
+ prefix: E,
52
+ suffix: N,
53
+ addonBefore: z,
54
+ addonAfter: F,
55
+ floatingLabel: M,
56
+ errorId: K,
57
+ unstyled: ot = !1,
58
+ value: i,
59
+ defaultValue: A,
60
+ onChange: u,
61
+ onKeyDown: R,
62
+ disabled: L,
63
+ required: _,
64
+ ...P
65
+ }, ct) => {
66
+ const m = {
67
+ xs: "input-xs",
68
+ sm: "input-sm",
69
+ md: "input-md",
70
+ lg: "input-lg",
71
+ xl: "input-xl"
72
+ }, k = c ? {
73
+ error: "input-error",
74
+ warning: "input-warning"
75
+ }[c] : s ? {
76
+ neutral: "input-neutral",
77
+ primary: "input-primary",
78
+ secondary: "input-secondary",
79
+ accent: "input-accent",
80
+ info: "input-info",
81
+ success: "input-success",
82
+ warning: "input-warning",
83
+ error: "input-error"
84
+ }[s] : "", tt = z || F, ut = tt || ot ? ["grow", "bg-transparent", "border-0", "outline-none", "focus:outline-none", b].filter(Boolean).join(" ") : [
55
85
  "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": t ?? void 0,
79
- className: R,
80
- value: B(t),
81
- onChange: L,
82
- onKeyDown: $,
83
- onBlur: F,
84
- disabled: l,
85
- ...D
86
+ !d && "border-0",
87
+ l && "input-ghost",
88
+ r && m[r],
89
+ k,
90
+ b
91
+ ].filter(Boolean).join(" "), at = It(null), h = ct || at, pt = B(() => t ? Y(i ?? A ?? "", t, f) : "", [t, i, A, f]), [T, W] = O(pt), [S, D] = O(null);
92
+ Q(() => {
93
+ t && i !== void 0 && W(Y(i, t, f));
94
+ }, [t, i, f]), Q(() => {
95
+ S !== null && h.current && (h.current.setSelectionRange(S, S), D(null));
96
+ }, [S, h]);
97
+ const nt = B(
98
+ (n) => {
99
+ if (!t) {
100
+ u?.(n);
101
+ return;
86
102
  }
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 || t !== null && t >= 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
- )
103
+ const a = n.target, V = a.value, v = Y(V, t, f);
104
+ let w = "", y = 0;
105
+ for (let g = 0; g < t.length && y < v.length; g++) {
106
+ const x = t[g];
107
+ (x === "#" || x === "A" || x === "*") && (Ct(v[y], x) && (w += v[y]), y++);
108
+ }
109
+ W(w);
110
+ const Z = X(w, t, f);
111
+ let o = lt(t, 0), I = 0;
112
+ for (let g = 0; g < t.length; g++) {
113
+ const x = t[g];
114
+ (x === "#" || x === "A" || x === "*") && I < w.length && (I++, o = g + 1);
115
+ }
116
+ o = lt(t, o), o > t.length && (o = t.length), D(o);
117
+ const yt = {
118
+ ...n,
119
+ target: { ...a, value: Z },
120
+ currentTarget: { ...a, value: Z }
121
+ };
122
+ u?.(yt);
123
+ },
124
+ [t, f, u]
125
+ ), et = B(
126
+ (n) => {
127
+ if (!t) {
128
+ R?.(n);
129
+ return;
130
+ }
131
+ if (n.key === "Backspace") {
132
+ n.preventDefault();
133
+ const a = T.slice(0, -1);
134
+ W(a);
135
+ let V = 0, v = 0;
136
+ for (let o = 0; o < t.length; o++) {
137
+ const I = t[o];
138
+ if (I === "#" || I === "A" || I === "*")
139
+ if (v < a.length)
140
+ v++, V = o + 1;
141
+ else {
142
+ V = o;
143
+ break;
115
144
  }
116
- )
117
145
  }
118
- ),
119
- /* @__PURE__ */ r(
120
- "button",
146
+ D(V);
147
+ const w = X(a, t, f), y = n.currentTarget, Z = {
148
+ target: { ...y, value: w },
149
+ currentTarget: { ...y, value: w }
150
+ };
151
+ u?.(Z);
152
+ }
153
+ R?.(n);
154
+ },
155
+ [t, f, T, u, R]
156
+ ), [G, H] = O(i ?? A ?? "");
157
+ Q(() => {
158
+ i !== void 0 && H(i);
159
+ }, [i]);
160
+ const rt = B((n) => {
161
+ H(n.target.value), u?.(n);
162
+ }, [u]), ft = B(() => {
163
+ if (H(""), W(""), q?.(), u && h.current) {
164
+ const n = {
165
+ target: { ...h.current, value: "" },
166
+ currentTarget: { ...h.current, value: "" }
167
+ };
168
+ u(n);
169
+ }
170
+ }, [q, u, h]), J = C && (t ? T : G) && !L, dt = typeof C == "object" && C.clearIcon ? C.clearIcon : null, j = {};
171
+ c === "error" && (j["aria-invalid"] = !0), K && (j["aria-describedby"] = K), _ && (j["aria-required"] = !0);
172
+ const U = E || N || C, ht = {
173
+ xs: "input-xs",
174
+ sm: "input-sm",
175
+ md: "input-md",
176
+ lg: "input-lg",
177
+ xl: "input-xl"
178
+ }, it = t ? X(T, t, f) : void 0, st = (n) => /* @__PURE__ */ p(
179
+ "input",
180
+ {
181
+ ref: h,
182
+ type: t ? "text" : e,
183
+ className: [
184
+ ut,
185
+ U && "w-full",
186
+ E && "pl-10",
187
+ (N || J) && "pr-10",
188
+ n
189
+ ].filter(Boolean).join(" "),
190
+ value: it ?? (i !== void 0 ? i : U ? G : i),
191
+ defaultValue: i === void 0 && !t ? A : void 0,
192
+ onChange: t ? nt : U ? rt : u,
193
+ onKeyDown: t ? et : R,
194
+ disabled: L,
195
+ required: _,
196
+ ...j,
197
+ ...P
198
+ }
199
+ ), gt = (n) => U ? /* @__PURE__ */ $("div", { className: `relative flex items-center ${n || ""}`, children: [
200
+ E && /* @__PURE__ */ p("span", { className: "absolute left-3 flex items-center text-base-content/70 pointer-events-none z-10", children: E }),
201
+ st(),
202
+ (N || J) && /* @__PURE__ */ $("span", { className: "absolute right-3 flex items-center gap-1 z-10", children: [
203
+ J && (dt || /* @__PURE__ */ p(Nt, { onClick: ft })),
204
+ N && /* @__PURE__ */ p("span", { className: "text-base-content/70", children: N })
205
+ ] })
206
+ ] }) : st(n), xt = (n) => {
207
+ if (!M) return n;
208
+ const a = [
209
+ "floating-label",
210
+ r && ht[r]
211
+ ].filter(Boolean).join(" ");
212
+ return /* @__PURE__ */ $("label", { className: a, children: [
213
+ n,
214
+ /* @__PURE__ */ p("span", { children: M })
215
+ ] });
216
+ }, bt = (n) => {
217
+ if (!tt) return n;
218
+ const a = [
219
+ "input",
220
+ "input-bordered",
221
+ "flex",
222
+ "items-center",
223
+ "gap-2",
224
+ r && m[r],
225
+ k
226
+ ].filter(Boolean).join(" ");
227
+ return /* @__PURE__ */ $("label", { className: a, children: [
228
+ z && /* @__PURE__ */ p("span", { className: "text-base-content/70", children: z }),
229
+ n,
230
+ F && /* @__PURE__ */ p("span", { className: "text-base-content/70", children: F })
231
+ ] });
232
+ }, wt = gt(
233
+ M ? "input input-bordered w-full" : void 0
234
+ );
235
+ return bt(xt(
236
+ M ? (
237
+ // For floating label, use raw input (label wrapper provides styling)
238
+ /* @__PURE__ */ p(
239
+ "input",
121
240
  {
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 || t !== null && t <= 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
- )
241
+ ref: h,
242
+ type: t ? "text" : e,
243
+ className: "input input-bordered w-full",
244
+ value: it ?? (i !== void 0 ? i : G),
245
+ defaultValue: i === void 0 && !t ? A : void 0,
246
+ onChange: t ? nt : rt,
247
+ onKeyDown: t ? et : R,
248
+ disabled: L,
249
+ required: _,
250
+ ...j,
251
+ ...P
147
252
  }
148
253
  )
149
- ] })
150
- ] });
254
+ ) : wt
255
+ ));
151
256
  }
152
257
  );
153
- H.displayName = "InputNumber";
258
+ At.displayName = "Input";
154
259
  export {
155
- H as InputNumber,
156
- H as default
260
+ At as Input
157
261
  };
158
262
  //# sourceMappingURL=index43.js.map
@@ -1 +1 @@
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 = false,\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":"index43.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 (inside input) */\n prefix?: React.ReactNode\n /** Suffix icon or element (inside input) */\n suffix?: React.ReactNode\n /** Text/element before input (outside, using DaisyUI label) */\n addonBefore?: React.ReactNode\n /** Text/element after input (outside, using DaisyUI label) */\n addonAfter?: React.ReactNode\n /** Floating label text (uses DaisyUI floating-label) */\n floatingLabel?: string\n /** ID for error message element (for aria-describedby) */\n errorId?: string\n /** Render as unstyled input (for use inside styled wrappers) */\n unstyled?: boolean\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 addonBefore,\n addonAfter,\n floatingLabel,\n errorId,\n unstyled = false,\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 // When wrapped with external addons OR unstyled prop, the wrapper has the input styling\n // Inner input should be unstyled (grow to fill space)\n const hasExternalAddons = addonBefore || addonAfter\n const shouldBeUnstyled = hasExternalAddons || unstyled\n\n const inputClasses = shouldBeUnstyled\n ? ['grow', 'bg-transparent', 'border-0', 'outline-none', 'focus:outline-none', className].filter(Boolean).join(' ')\n : [\n 'input',\n !bordered && 'border-0',\n ghost && 'input-ghost',\n size && sizeClasses[size],\n effectiveColorClass,\n className,\n ].filter(Boolean).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 hasInternalAddons = prefix || suffix || allowClear\n\n // Size class for floating label\n const floatingSizeClasses = {\n xs: 'input-xs',\n sm: 'input-sm',\n md: 'input-md',\n lg: 'input-lg',\n xl: 'input-xl',\n }\n\n // Build the masked value if needed\n const maskedValue = mask ? applyMask(rawValue, mask, maskPlaceholder) : undefined\n\n // Build the core input element\n const buildInput = (extraClasses?: string) => (\n <input\n ref={inputRef}\n type={mask ? 'text' : type}\n className={[\n inputClasses,\n hasInternalAddons && 'w-full',\n prefix && 'pl-10',\n (suffix || showClear) && 'pr-10',\n extraClasses,\n ].filter(Boolean).join(' ')}\n value={maskedValue ?? (value !== undefined ? value : (hasInternalAddons ? internalValue : value))}\n defaultValue={value === undefined && !mask ? defaultValue : undefined}\n onChange={mask ? handleMaskedChange : (hasInternalAddons ? handleChange : onChange)}\n onKeyDown={mask ? handleMaskedKeyDown : onKeyDown}\n disabled={disabled}\n required={required}\n {...ariaProps}\n {...props}\n />\n )\n\n // Build input with internal addons (prefix icon, suffix icon, clear button)\n const buildInputWithInternalAddons = (extraClasses?: string) => {\n if (!hasInternalAddons) {\n return buildInput(extraClasses)\n }\n\n return (\n <div className={`relative flex items-center ${extraClasses || ''}`}>\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 {buildInput()}\n {(suffix || showClear) && (\n <span className=\"absolute right-3 flex items-center gap-1 z-10\">\n {showClear && (clearIcon || <ClearIcon onClick={handleClear} />)}\n {suffix && <span className=\"text-base-content/70\">{suffix}</span>}\n </span>\n )}\n </div>\n )\n }\n\n // Wrap with floating label if specified\n const wrapWithFloatingLabel = (input: React.ReactNode) => {\n if (!floatingLabel) return input\n\n const floatingClasses = [\n 'floating-label',\n size && floatingSizeClasses[size],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={floatingClasses}>\n {input}\n <span>{floatingLabel}</span>\n </label>\n )\n }\n\n // Wrap with external addons (addonBefore/addonAfter) using DaisyUI input wrapper pattern\n const wrapWithExternalAddons = (input: React.ReactNode) => {\n if (!hasExternalAddons) return input\n\n const addonClasses = [\n 'input',\n 'input-bordered',\n 'flex',\n 'items-center',\n 'gap-2',\n size && sizeClasses[size],\n effectiveColorClass,\n ].filter(Boolean).join(' ')\n\n return (\n <label className={addonClasses}>\n {addonBefore && <span className=\"text-base-content/70\">{addonBefore}</span>}\n {input}\n {addonAfter && <span className=\"text-base-content/70\">{addonAfter}</span>}\n </label>\n )\n }\n\n // Build the final element\n const inputElement = buildInputWithInternalAddons(\n floatingLabel ? 'input input-bordered w-full' : undefined\n )\n\n // Apply wrappers\n return wrapWithExternalAddons(wrapWithFloatingLabel(\n floatingLabel ? (\n // For floating label, use raw input (label wrapper provides styling)\n <input\n ref={inputRef}\n type={mask ? 'text' : type}\n className=\"input input-bordered w-full\"\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 ) : inputElement\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","addonBefore","addonAfter","floatingLabel","errorId","unstyled","defaultValue","onChange","onKeyDown","disabled","required","props","ref","sizeClasses","effectiveColorClass","hasExternalAddons","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","hasInternalAddons","floatingSizeClasses","buildInput","extraClasses","buildInputWithInternalAddons","jsxs","wrapWithFloatingLabel","floatingClasses","wrapWithExternalAddons","addonClasses","inputElement"],"mappings":"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"}