asterui 0.12.14 → 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 (159) hide show
  1. package/README.md +1 -1
  2. package/dist/components/Autocomplete.d.ts +22 -2
  3. package/dist/components/Button.d.ts +10 -5
  4. package/dist/components/Form.d.ts +11 -1
  5. package/dist/components/HoverGallery.d.ts +10 -0
  6. package/dist/components/Rating.d.ts +12 -4
  7. package/dist/index.d.ts +2 -0
  8. package/dist/index.js +156 -154
  9. package/dist/index.js.map +1 -1
  10. package/dist/index100.js +11 -43
  11. package/dist/index100.js.map +1 -1
  12. package/dist/index101.js +44 -11
  13. package/dist/index101.js.map +1 -1
  14. package/dist/index102.js +10 -12
  15. package/dist/index102.js.map +1 -1
  16. package/dist/index103.js +14 -7
  17. package/dist/index103.js.map +1 -1
  18. package/dist/index104.js +7 -12
  19. package/dist/index104.js.map +1 -1
  20. package/dist/index105.js +11 -29
  21. package/dist/index105.js.map +1 -1
  22. package/dist/index106.js +29 -16
  23. package/dist/index106.js.map +1 -1
  24. package/dist/index107.js +21 -0
  25. package/dist/index107.js.map +1 -0
  26. package/dist/index21.js +1 -1
  27. package/dist/index34.js +133 -119
  28. package/dist/index34.js.map +1 -1
  29. package/dist/index37.js +15 -120
  30. package/dist/index37.js.map +1 -1
  31. package/dist/index38.js +119 -37
  32. package/dist/index38.js.map +1 -1
  33. package/dist/index39.js +40 -398
  34. package/dist/index39.js.map +1 -1
  35. package/dist/index40.js +390 -89
  36. package/dist/index40.js.map +1 -1
  37. package/dist/index41.js +90 -215
  38. package/dist/index41.js.map +1 -1
  39. package/dist/index42.js +211 -135
  40. package/dist/index42.js.map +1 -1
  41. package/dist/index43.js +155 -15
  42. package/dist/index43.js.map +1 -1
  43. package/dist/index44.js +15 -17
  44. package/dist/index44.js.map +1 -1
  45. package/dist/index45.js +17 -21
  46. package/dist/index45.js.map +1 -1
  47. package/dist/index46.js +18 -134
  48. package/dist/index46.js.map +1 -1
  49. package/dist/index47.js +134 -10
  50. package/dist/index47.js.map +1 -1
  51. package/dist/index48.js +13 -35
  52. package/dist/index48.js.map +1 -1
  53. package/dist/index49.js +35 -34
  54. package/dist/index49.js.map +1 -1
  55. package/dist/index5.js +161 -80
  56. package/dist/index5.js.map +1 -1
  57. package/dist/index50.js +34 -81
  58. package/dist/index50.js.map +1 -1
  59. package/dist/index51.js +71 -166
  60. package/dist/index51.js.map +1 -1
  61. package/dist/index52.js +167 -144
  62. package/dist/index52.js.map +1 -1
  63. package/dist/index53.js +152 -11
  64. package/dist/index53.js.map +1 -1
  65. package/dist/index54.js +10 -20
  66. package/dist/index54.js.map +1 -1
  67. package/dist/index55.js +22 -14
  68. package/dist/index55.js.map +1 -1
  69. package/dist/index56.js +14 -7
  70. package/dist/index56.js.map +1 -1
  71. package/dist/index57.js +6 -333
  72. package/dist/index57.js.map +1 -1
  73. package/dist/index58.js +334 -47
  74. package/dist/index58.js.map +1 -1
  75. package/dist/index59.js +47 -122
  76. package/dist/index59.js.map +1 -1
  77. package/dist/index60.js +120 -108
  78. package/dist/index60.js.map +1 -1
  79. package/dist/index61.js +107 -167
  80. package/dist/index61.js.map +1 -1
  81. package/dist/index62.js +167 -29
  82. package/dist/index62.js.map +1 -1
  83. package/dist/index63.js +30 -120
  84. package/dist/index63.js.map +1 -1
  85. package/dist/index64.js +116 -80
  86. package/dist/index64.js.map +1 -1
  87. package/dist/index65.js +85 -19
  88. package/dist/index65.js.map +1 -1
  89. package/dist/index66.js +19 -73
  90. package/dist/index66.js.map +1 -1
  91. package/dist/index67.js +71 -54
  92. package/dist/index67.js.map +1 -1
  93. package/dist/index68.js +56 -44
  94. package/dist/index68.js.map +1 -1
  95. package/dist/index69.js +42 -49
  96. package/dist/index69.js.map +1 -1
  97. package/dist/index70.js +52 -62
  98. package/dist/index70.js.map +1 -1
  99. package/dist/index71.js +118 -102
  100. package/dist/index71.js.map +1 -1
  101. package/dist/index72.js +107 -41
  102. package/dist/index72.js.map +1 -1
  103. package/dist/index73.js +41 -68
  104. package/dist/index73.js.map +1 -1
  105. package/dist/index74.js +66 -19
  106. package/dist/index74.js.map +1 -1
  107. package/dist/index75.js +18 -55
  108. package/dist/index75.js.map +1 -1
  109. package/dist/index76.js +55 -251
  110. package/dist/index76.js.map +1 -1
  111. package/dist/index77.js +254 -22
  112. package/dist/index77.js.map +1 -1
  113. package/dist/index78.js +22 -31
  114. package/dist/index78.js.map +1 -1
  115. package/dist/index79.js +30 -93
  116. package/dist/index79.js.map +1 -1
  117. package/dist/index80.js +89 -324
  118. package/dist/index80.js.map +1 -1
  119. package/dist/index81.js +322 -73
  120. package/dist/index81.js.map +1 -1
  121. package/dist/index82.js +79 -39
  122. package/dist/index82.js.map +1 -1
  123. package/dist/index83.js +40 -23
  124. package/dist/index83.js.map +1 -1
  125. package/dist/index84.js +21 -93
  126. package/dist/index84.js.map +1 -1
  127. package/dist/index85.js +87 -148
  128. package/dist/index85.js.map +1 -1
  129. package/dist/index86.js +147 -152
  130. package/dist/index86.js.map +1 -1
  131. package/dist/index87.js +159 -63
  132. package/dist/index87.js.map +1 -1
  133. package/dist/index88.js +65 -35
  134. package/dist/index88.js.map +1 -1
  135. package/dist/index89.js +35 -234
  136. package/dist/index89.js.map +1 -1
  137. package/dist/index9.js +55 -53
  138. package/dist/index9.js.map +1 -1
  139. package/dist/index90.js +231 -31
  140. package/dist/index90.js.map +1 -1
  141. package/dist/index91.js +34 -210
  142. package/dist/index91.js.map +1 -1
  143. package/dist/index92.js +195 -198
  144. package/dist/index92.js.map +1 -1
  145. package/dist/index93.js +159 -241
  146. package/dist/index93.js.map +1 -1
  147. package/dist/index94.js +283 -166
  148. package/dist/index94.js.map +1 -1
  149. package/dist/index95.js +173 -253
  150. package/dist/index95.js.map +1 -1
  151. package/dist/index96.js +258 -14
  152. package/dist/index96.js.map +1 -1
  153. package/dist/index97.js +12 -31
  154. package/dist/index97.js.map +1 -1
  155. package/dist/index98.js +32 -5
  156. package/dist/index98.js.map +1 -1
  157. package/dist/index99.js +5 -13
  158. package/dist/index99.js.map +1 -1
  159. package/package.json +1 -1
package/dist/index34.js CHANGED
@@ -1,7 +1,7 @@
1
- import { jsx as t, jsxs as L } from "react/jsx-runtime";
2
- import { createContext as ae, useId as J, useEffect as H, useRef as K, isValidElement as U, cloneElement as ie, useContext as le } from "react";
3
- import { useForm as Y, useFieldArray as ce, useWatch as ue, Controller as me } from "react-hook-form";
4
- const P = ae(void 0), M = {
1
+ import { jsx as t, jsxs as j } from "react/jsx-runtime";
2
+ import { createContext as ie, useId as H, useEffect as U, useRef as Y, isValidElement as G, cloneElement as le, useContext as ce } from "react";
3
+ import { useForm as Q, useFieldArray as ue, useWatch as de, Controller as me } from "react-hook-form";
4
+ const T = ie(void 0), W = {
5
5
  email: {
6
6
  value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
7
7
  message: "Please enter a valid email address"
@@ -15,209 +15,223 @@ const P = ae(void 0), M = {
15
15
  message: "Please enter a valid number"
16
16
  }
17
17
  };
18
- function z() {
19
- const r = le(P);
18
+ function Z() {
19
+ const r = ce(T);
20
20
  if (!r)
21
21
  throw new Error("Form compound components must be used within Form");
22
22
  return r;
23
23
  }
24
- function de({
24
+ function fe({
25
25
  form: r,
26
26
  onFinish: o,
27
- initialValues: s,
28
- layout: u = "vertical",
29
- labelWidth: m = 60,
30
- size: y,
31
- children: h,
32
- className: l = "",
33
- noValidate: i = !0,
34
- ...g
27
+ onFinishFailed: s,
28
+ initialValues: u,
29
+ layout: f = "vertical",
30
+ labelWidth: k = 60,
31
+ size: h,
32
+ disabled: d = !1,
33
+ children: l,
34
+ className: g = "",
35
+ noValidate: p = !0,
36
+ ...y
35
37
  }) {
36
- const p = Y({
37
- defaultValues: s
38
- }), v = r || p, c = ($) => {
39
- $.preventDefault(), o && v.handleSubmit(o)($);
38
+ const i = Q({
39
+ defaultValues: u
40
+ }), v = r || i, I = async (c) => {
41
+ if (c.preventDefault(), await v.trigger())
42
+ o && o(v.getValues());
43
+ else if (s) {
44
+ const P = v.formState.errors, E = [], z = (R, L = "") => {
45
+ for (const $ in R) {
46
+ const m = L ? `${L}.${$}` : $, b = R[$];
47
+ b?.message ? E.push({ name: m, errors: [b.message] }) : typeof b == "object" && b !== null && z(b, m);
48
+ }
49
+ };
50
+ z(P), s({ values: v.getValues(), errorFields: E });
51
+ }
52
+ }, M = (c) => {
53
+ c.preventDefault(), v.reset(u);
40
54
  };
41
- return /* @__PURE__ */ t(P.Provider, { value: { form: v, layout: u, labelWidth: m, size: y }, children: /* @__PURE__ */ t("form", { onSubmit: c, className: l, noValidate: i, ...g, children: h }) });
55
+ return /* @__PURE__ */ t(T.Provider, { value: { form: v, layout: f, labelWidth: k, size: h, disabled: d }, children: /* @__PURE__ */ t("form", { onSubmit: I, onReset: M, className: g, noValidate: p, ...y, children: l }) });
42
56
  }
43
- function fe({
57
+ function he({
44
58
  name: r,
45
59
  label: o,
46
60
  help: s,
47
61
  required: u = !1,
48
- rules: m,
49
- valuePropName: y = "value",
62
+ rules: f,
63
+ valuePropName: k = "value",
50
64
  inline: h = !1,
51
- className: l = "",
52
- children: i,
65
+ className: d = "",
66
+ children: l,
53
67
  tooltip: g,
54
68
  extra: p,
55
- hasFeedback: v = !1,
56
- dependencies: c,
57
- validateTrigger: $ = "onChange",
58
- initialValue: B,
59
- hidden: S = !1
69
+ hasFeedback: y = !1,
70
+ dependencies: i,
71
+ validateTrigger: v = "onChange",
72
+ initialValue: I,
73
+ hidden: M = !1
60
74
  }) {
61
- const { form: d, size: R, listName: q, layout: W, labelWidth: G } = z(), T = J(), C = J();
75
+ const { form: c, size: q, listName: P, layout: E, labelWidth: z, disabled: R } = Z(), L = H(), $ = H();
62
76
  if (!r)
63
- return /* @__PURE__ */ t("div", { className: `form-control ${h ? "w-auto" : "w-full"} ${l}`, style: S ? { display: "none" } : void 0, children: i });
64
- let f;
65
- Array.isArray(r) ? f = (q ? [q, ...r] : r).join(".") : f = r, H(() => {
66
- B !== void 0 && d.getValues(f) === void 0 && d.setValue(f, B);
77
+ return /* @__PURE__ */ t("div", { className: `form-control ${h ? "w-auto" : "w-full"} ${d}`, style: M ? { display: "none" } : void 0, children: l });
78
+ let m;
79
+ Array.isArray(r) ? m = (P ? [P, ...r] : r).join(".") : m = r, U(() => {
80
+ I !== void 0 && c.getValues(m) === void 0 && c.setValue(m, I);
67
81
  }, []);
68
- const j = ue({
69
- control: d.control,
70
- name: c,
71
- disabled: !c || c.length === 0
72
- }), Z = K(d);
73
- Z.current = d;
74
- const E = K(void 0);
75
- H(() => {
76
- if (!c || c.length === 0) return;
77
- if (E.current === void 0) {
78
- E.current = JSON.stringify(j);
82
+ const b = de({
83
+ control: c.control,
84
+ name: i,
85
+ disabled: !i || i.length === 0
86
+ }), O = Y(c);
87
+ O.current = c;
88
+ const B = Y(void 0);
89
+ U(() => {
90
+ if (!i || i.length === 0) return;
91
+ if (B.current === void 0) {
92
+ B.current = JSON.stringify(b);
79
93
  return;
80
94
  }
81
- const e = JSON.stringify(j);
82
- E.current !== e && (E.current = e, Z.current.trigger(f));
83
- }, [j, c, f]);
84
- const w = ((e) => {
95
+ const e = JSON.stringify(b);
96
+ B.current !== e && (B.current = e, O.current.trigger(m));
97
+ }, [b, i, m]);
98
+ const A = ((e) => {
85
99
  const n = e.split(".");
86
- let a = d.formState.errors;
87
- for (const V of n) {
100
+ let a = c.formState.errors;
101
+ for (const C of n) {
88
102
  if (!a) break;
89
- a = a[V];
103
+ a = a[C];
90
104
  }
91
105
  return a;
92
- })(f), N = w?.message, Q = m ? Array.isArray(m) ? m : [m] : [], k = {}, A = [], I = [];
93
- u && (k.required = "This field is required");
94
- for (const e of Q) {
95
- if (e.required && (k.required = typeof e.required == "string" ? e.required : e.message || "This field is required"), e.type && M[e.type] && A.push({
96
- pattern: M[e.type].value,
97
- message: e.message || M[e.type].message
106
+ })(m), V = A?.message, X = f ? Array.isArray(f) ? f : [f] : [], w = {}, S = [], D = [];
107
+ u && (w.required = "This field is required");
108
+ for (const e of X) {
109
+ if (e.required && (w.required = typeof e.required == "string" ? e.required : e.message || "This field is required"), e.type && W[e.type] && S.push({
110
+ pattern: W[e.type].value,
111
+ message: e.message || W[e.type].message
98
112
  }), e.min !== void 0) {
99
113
  const n = typeof e.min == "object" ? e.min.value : e.min, a = typeof e.min == "object" ? e.min.message : e.message || `Minimum length is ${n} characters`;
100
- k.minLength = { value: n, message: a };
114
+ w.minLength = { value: n, message: a };
101
115
  }
102
116
  if (e.max !== void 0) {
103
117
  const n = typeof e.max == "object" ? e.max.value : e.max, a = typeof e.max == "object" ? e.max.message : e.message || `Maximum length is ${n} characters`;
104
- k.maxLength = { value: n, message: a };
118
+ w.maxLength = { value: n, message: a };
105
119
  }
106
120
  if (e.pattern) {
107
121
  const n = e.pattern instanceof RegExp ? e.pattern : e.pattern.value, a = e.pattern instanceof RegExp ? e.message || "Invalid format" : e.pattern.message;
108
- A.push({ pattern: n, message: a });
122
+ S.push({ pattern: n, message: a });
109
123
  }
110
- e.validate && I.push(e.validate);
124
+ e.validate && D.push(e.validate);
111
125
  }
112
- (A.length > 0 || I.length > 0) && (k.validate = async (e) => {
113
- if (!e && !k.required) return !0;
114
- for (const { pattern: n, message: a } of A)
126
+ (S.length > 0 || D.length > 0) && (w.validate = async (e) => {
127
+ if (!e && !w.required) return !0;
128
+ for (const { pattern: n, message: a } of S)
115
129
  if (e && !n.test(e))
116
130
  return a;
117
- for (const n of I) {
131
+ for (const n of D) {
118
132
  const a = await n(e);
119
133
  if (a !== !0)
120
134
  return a;
121
135
  }
122
136
  return !0;
123
137
  });
124
- const D = Array.isArray($) ? $ : [$], O = D.includes("onChange"), X = D.includes("onBlur"), ee = ({ hasError: e, isValidating: n }) => n ? /* @__PURE__ */ t("span", { className: "loading loading-spinner loading-xs text-base-content/50" }) : e ? /* @__PURE__ */ t("svg", { className: "w-4 h-4 text-error", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) : /* @__PURE__ */ t("svg", { className: "w-4 h-4 text-success", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }), te = () => /* @__PURE__ */ t("div", { className: "tooltip tooltip-top ml-1", "data-tip": g, children: /* @__PURE__ */ t("svg", { className: "w-4 h-4 text-base-content/50 cursor-help", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }) });
138
+ const _ = Array.isArray(v) ? v : [v], J = _.includes("onChange"), ee = _.includes("onBlur"), te = ({ hasError: e, isValidating: n }) => n ? /* @__PURE__ */ t("span", { className: "loading loading-spinner loading-xs text-base-content/50" }) : e ? /* @__PURE__ */ t("svg", { className: "w-4 h-4 text-error", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M6 18L18 6M6 6l12 12" }) }) : /* @__PURE__ */ t("svg", { className: "w-4 h-4 text-success", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 13l4 4L19 7" }) }), re = () => /* @__PURE__ */ t("div", { className: "tooltip tooltip-top ml-1", "data-tip": g, children: /* @__PURE__ */ t("svg", { className: "w-4 h-4 text-base-content/50 cursor-help", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }) });
125
139
  return /* @__PURE__ */ t(
126
140
  me,
127
141
  {
128
- name: f,
129
- control: d.control,
130
- rules: k,
142
+ name: m,
143
+ control: c.control,
144
+ rules: w,
131
145
  render: ({ field: e, fieldState: n }) => {
132
- const { value: a, onChange: V, onBlur: re, ref: se } = e, oe = n.isTouched && d.formState.isValidating, x = {
133
- id: T,
134
- ref: se,
135
- "aria-invalid": w ? !0 : void 0,
136
- "aria-describedby": w ? C : void 0
146
+ const { value: a, onChange: C, onBlur: se, ref: oe } = e, ne = n.isTouched && c.formState.isValidating, x = {
147
+ id: L,
148
+ ref: oe,
149
+ "aria-invalid": A ? !0 : void 0,
150
+ "aria-describedby": A ? $ : void 0
137
151
  };
138
152
  x.onBlur = () => {
139
- re(), X && d.trigger(f);
140
- }, y === "checked" ? (x.checked = a, x.onChange = (F) => {
141
- V(F.target.checked), O && d.trigger(f);
153
+ se(), ee && c.trigger(m);
154
+ }, k === "checked" ? (x.checked = a, x.onChange = (F) => {
155
+ C(F.target.checked), J && c.trigger(m);
142
156
  }) : (x.value = a || "", x.onChange = (F) => {
143
- F && F.target !== void 0 ? V(F.target.value) : V(F), O && d.trigger(f);
144
- }), R && U(i) && (i.props.size || (x.size = R)), w && (x.color = "error", x["aria-invalid"] = !0);
145
- const ne = U(i) ? ie(i, x) : i, b = W === "horizontal", _ = W === "inline";
146
- return /* @__PURE__ */ L("div", { className: `form-control ${h ? "w-auto" : "w-full"} ${b ? "mb-4" : ""} ${_ ? "inline-flex mr-4" : ""} ${l}`, style: S ? { display: "none" } : void 0, children: [
147
- /* @__PURE__ */ L("div", { className: b ? "flex items-center gap-4" : "", children: [
157
+ F && F.target !== void 0 ? C(F.target.value) : C(F), J && c.trigger(m);
158
+ }), q && G(l) && (l.props.size || (x.size = q)), A && (x.color = "error", x["aria-invalid"] = !0), R && (x.disabled = !0);
159
+ const ae = G(l) ? le(l, x) : l, N = E === "horizontal", K = E === "inline";
160
+ return /* @__PURE__ */ j("div", { className: `form-control ${h ? "w-auto" : "w-full"} ${N ? "mb-4" : ""} ${K ? "inline-flex mr-4" : ""} ${d}`, style: M ? { display: "none" } : void 0, children: [
161
+ /* @__PURE__ */ j("div", { className: N ? "flex items-center gap-4" : "", children: [
148
162
  o && /* @__PURE__ */ t(
149
163
  "label",
150
164
  {
151
- htmlFor: T,
152
- className: `label ${b ? "flex-shrink-0 justify-end py-0" : ""} ${!b && !_ ? "pb-1" : ""}`,
153
- style: b ? { width: G } : void 0,
154
- children: /* @__PURE__ */ L("span", { className: "label-text flex items-center", children: [
165
+ htmlFor: L,
166
+ className: `label ${N ? "flex-shrink-0 justify-end py-0" : ""} ${!N && !K ? "pb-1" : ""}`,
167
+ style: N ? { width: z } : void 0,
168
+ children: /* @__PURE__ */ j("span", { className: "label-text flex items-center", children: [
155
169
  o,
156
170
  u && /* @__PURE__ */ t("span", { className: "text-error ml-1", children: "*" }),
157
- g && /* @__PURE__ */ t(te, {})
171
+ g && /* @__PURE__ */ t(re, {})
158
172
  ] })
159
173
  }
160
174
  ),
161
- /* @__PURE__ */ L("div", { className: `${b ? "flex-1" : ""} ${v ? "relative" : ""}`, children: [
162
- ne,
163
- v && n.isTouched && /* @__PURE__ */ t("span", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none", children: /* @__PURE__ */ t(ee, { hasError: !!w, isValidating: oe }) })
175
+ /* @__PURE__ */ j("div", { className: `${N ? "flex-1" : ""} ${y ? "relative" : ""}`, children: [
176
+ ae,
177
+ y && n.isTouched && /* @__PURE__ */ t("span", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none", children: /* @__PURE__ */ t(te, { hasError: !!A, isValidating: ne }) })
164
178
  ] })
165
179
  ] }),
166
- !b && !h && /* @__PURE__ */ t("p", { id: C, className: `validator-hint ${N ? "!visible text-error" : ""} min-h-[1.25rem]`, role: N ? "alert" : void 0, children: N || s && /* @__PURE__ */ t("span", { className: "text-base-content/70", children: s }) || " " }),
167
- b && (N || s) && /* @__PURE__ */ t("p", { id: C, className: `validator-hint ${N ? "!visible text-error" : ""} min-h-[1.25rem]`, role: N ? "alert" : void 0, children: N || s && /* @__PURE__ */ t("span", { className: "text-base-content/70", children: s }) }),
180
+ !N && !h && /* @__PURE__ */ t("p", { id: $, className: `validator-hint ${V ? "!visible text-error" : ""} min-h-[1.25rem]`, role: V ? "alert" : void 0, children: V || s && /* @__PURE__ */ t("span", { className: "text-base-content/70", children: s }) || " " }),
181
+ N && (V || s) && /* @__PURE__ */ t("p", { id: $, className: `validator-hint ${V ? "!visible text-error" : ""} min-h-[1.25rem]`, role: V ? "alert" : void 0, children: V || s && /* @__PURE__ */ t("span", { className: "text-base-content/70", children: s }) }),
168
182
  p && /* @__PURE__ */ t("div", { className: "text-sm text-base-content/60 mt-1", children: p })
169
183
  ] });
170
184
  }
171
185
  }
172
186
  );
173
187
  }
174
- function he({
188
+ function ge({
175
189
  name: r,
176
190
  children: o
177
191
  }) {
178
- const { form: s, layout: u, size: m } = z(), { fields: y, append: h, remove: l, move: i } = ce({
192
+ const { form: s, layout: u, size: f, disabled: k } = Z(), { fields: h, append: d, remove: l, move: g } = ue({
179
193
  control: s.control,
180
194
  name: r
181
- }), g = y.map((p, v) => ({
182
- ...p,
183
- name: v
195
+ }), p = h.map((y, i) => ({
196
+ ...y,
197
+ name: i
184
198
  }));
185
- return /* @__PURE__ */ t(P.Provider, { value: { form: s, layout: u, size: m, listName: r }, children: o(g, {
186
- add: h,
199
+ return /* @__PURE__ */ t(T.Provider, { value: { form: s, layout: u, size: f, listName: r, disabled: k }, children: o(p, {
200
+ add: d,
187
201
  remove: l,
188
- move: i
202
+ move: g
189
203
  }) });
190
204
  }
191
- function ge() {
192
- const r = Y(), o = r;
205
+ function pe() {
206
+ const r = Q(), o = r;
193
207
  return o.setFieldValue = r.setValue, o.getFieldValue = (s) => r.getValues(s), o.getFieldsValue = r.getValues, o.setFieldsValue = (s) => {
194
208
  Object.keys(s).forEach((u) => {
195
209
  r.setValue(u, s[u]);
196
210
  });
197
211
  }, o.validateFields = r.trigger, o.resetFields = r.reset, o.isFieldTouched = (s) => !!r.formState.touchedFields[s], o.getFieldError = (s) => r.formState.errors[s]?.message, o;
198
212
  }
199
- function pe({ fields: r, className: o = "" }) {
200
- const { form: s } = z(), { errors: u } = s.formState, m = (l, i = "") => {
213
+ function ve({ fields: r, className: o = "" }) {
214
+ const { form: s } = Z(), { errors: u } = s.formState, f = (d, l = "") => {
201
215
  const g = [];
202
- for (const p in l) {
203
- const v = i ? `${i}.${p}` : p, c = l[p];
204
- c?.message ? g.push({ field: v, message: c.message }) : typeof c == "object" && c !== null && g.push(...m(c, v));
216
+ for (const p in d) {
217
+ const y = l ? `${l}.${p}` : p, i = d[p];
218
+ i?.message ? g.push({ field: y, message: i.message }) : typeof i == "object" && i !== null && g.push(...f(i, y));
205
219
  }
206
220
  return g;
207
- }, y = m(u), h = r ? y.filter((l) => r.includes(l.field)) : y;
208
- return h.length === 0 ? null : /* @__PURE__ */ t("ul", { className: `text-error text-sm space-y-1 ${o}`, role: "alert", children: h.map((l, i) => /* @__PURE__ */ L("li", { className: "flex items-start gap-2", children: [
221
+ }, k = f(u), h = r ? k.filter((d) => r.includes(d.field)) : k;
222
+ return h.length === 0 ? null : /* @__PURE__ */ t("ul", { className: `text-error text-sm space-y-1 ${o}`, role: "alert", children: h.map((d, l) => /* @__PURE__ */ j("li", { className: "flex items-start gap-2", children: [
209
223
  /* @__PURE__ */ t("svg", { className: "w-4 h-4 mt-0.5 flex-shrink-0", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: /* @__PURE__ */ t("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" }) }),
210
- /* @__PURE__ */ t("span", { children: l.message })
211
- ] }, `${l.field}-${i}`)) });
224
+ /* @__PURE__ */ t("span", { children: d.message })
225
+ ] }, `${d.field}-${l}`)) });
212
226
  }
213
- const Ne = Object.assign(de, {
214
- Item: fe,
215
- List: he,
216
- ErrorList: pe,
217
- useForm: ge
227
+ const Ne = Object.assign(fe, {
228
+ Item: he,
229
+ List: ge,
230
+ ErrorList: ve,
231
+ useForm: pe
218
232
  });
219
233
  export {
220
234
  Ne as Form,
221
- ge as useFormInstance
235
+ pe as useFormInstance
222
236
  };
223
237
  //# sourceMappingURL=index34.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index34.js","sources":["../src/components/Form.tsx"],"sourcesContent":["import React, { createContext, useContext, cloneElement, isValidElement, useId, useEffect, useRef } from 'react'\nimport { useForm, UseFormReturn, FieldValues, SubmitHandler, UseFormProps, Controller, useFieldArray, FieldArrayPath, FieldArray, useWatch } from 'react-hook-form'\n\ninterface FormContextValue {\n form: UseFormReturn<any>\n layout?: 'vertical' | 'horizontal' | 'inline'\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n labelWidth?: number\n listName?: string\n}\n\nconst FormContext = createContext<FormContextValue | undefined>(undefined)\n\n// Built-in type validators\nconst TYPE_VALIDATORS = {\n email: {\n value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i,\n message: 'Please enter a valid email address',\n },\n url: {\n value: /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$/,\n message: 'Please enter a valid URL',\n },\n number: {\n value: /^-?\\d+(\\.\\d+)?$/,\n message: 'Please enter a valid number',\n },\n}\n\nexport interface FormProps<TFieldValues extends FieldValues = FieldValues>\n extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit'> {\n form?: UseFormReturn<TFieldValues>\n onFinish?: SubmitHandler<TFieldValues>\n initialValues?: UseFormProps<TFieldValues>['defaultValues']\n layout?: 'vertical' | 'horizontal' | 'inline'\n /** Label width in pixels for horizontal layout (default: 80) */\n labelWidth?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n children: React.ReactNode\n}\n\nexport interface FormRule {\n required?: boolean | string\n type?: 'email' | 'url' | 'number'\n min?: number | { value: number; message: string }\n max?: number | { value: number; message: string }\n pattern?: RegExp | { value: RegExp; message: string }\n message?: string\n validate?: (value: any) => boolean | string | Promise<boolean | string>\n}\n\nexport type ValidateTrigger = 'onChange' | 'onBlur' | 'onSubmit' | ('onChange' | 'onBlur' | 'onSubmit')[]\n\nexport interface FormItemProps {\n name?: string | string[]\n label?: string\n help?: string\n required?: boolean\n rules?: FormRule | FormRule[]\n valuePropName?: string\n inline?: boolean\n className?: string\n children: React.ReactElement\n /** Tooltip text to show next to label */\n tooltip?: string\n /** Additional content below the form control */\n extra?: React.ReactNode\n /** Show validation feedback icon */\n hasFeedback?: boolean\n /** Field names that this field depends on for validation */\n dependencies?: string[]\n /** When to trigger validation */\n validateTrigger?: ValidateTrigger\n /** Initial value for this field (overrides Form's initialValues) */\n initialValue?: any\n /** Hide this field (still validates and submits) */\n hidden?: boolean\n}\n\nexport interface FormListProps<TFieldValues extends FieldValues = FieldValues> {\n name: FieldArrayPath<TFieldValues>\n children: (\n fields: FieldArray<TFieldValues>[],\n operations: {\n add: (value?: any) => void\n remove: (index: number) => void\n move: (from: number, to: number) => void\n }\n ) => React.ReactNode\n}\n\nfunction useFormContext() {\n const context = useContext(FormContext)\n if (!context) {\n throw new Error('Form compound components must be used within Form')\n }\n return context\n}\n\nfunction FormRoot<TFieldValues extends FieldValues = FieldValues>({\n form: externalForm,\n onFinish,\n initialValues,\n layout = 'vertical',\n labelWidth = 60,\n size,\n children,\n className = '',\n noValidate = true,\n ...props\n}: FormProps<TFieldValues>) {\n const internalForm = useForm<TFieldValues>({\n defaultValues: initialValues,\n })\n\n const form = externalForm || internalForm\n\n const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n if (onFinish) {\n form.handleSubmit(onFinish)(e)\n }\n }\n\n return (\n <FormContext.Provider value={{ form, layout, labelWidth, size }}>\n <form onSubmit={handleSubmit} className={className} noValidate={noValidate} {...props}>\n {children}\n </form>\n </FormContext.Provider>\n )\n}\n\nfunction FormItem({\n name,\n label,\n help,\n required = false,\n rules,\n valuePropName = 'value',\n inline = false,\n className = '',\n children,\n tooltip,\n extra,\n hasFeedback = false,\n dependencies,\n validateTrigger = 'onChange',\n initialValue,\n hidden = false,\n}: FormItemProps) {\n const { form, size, listName, layout, labelWidth } = useFormContext()\n const inputId = useId()\n const errorId = useId()\n\n if (!name) {\n // Render without form control if no name provided\n return <div className={`form-control ${inline ? 'w-auto' : 'w-full'} ${className}`} style={hidden ? { display: 'none' } : undefined}>{children}</div>\n }\n\n // Handle nested field names (for Form.List)\n let fieldName: string\n if (Array.isArray(name)) {\n // If we're inside a Form.List, prepend the list name\n const fullPath = listName ? [listName, ...name] : name\n fieldName = fullPath.join('.')\n } else {\n fieldName = name\n }\n\n // Set initial value if provided\n useEffect(() => {\n if (initialValue !== undefined) {\n const currentValue = form.getValues(fieldName as any)\n if (currentValue === undefined) {\n form.setValue(fieldName as any, initialValue)\n }\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Watch dependencies and re-validate when they change\n const watchedDeps = useWatch({\n control: form.control,\n name: dependencies as any,\n disabled: !dependencies || dependencies.length === 0,\n })\n\n // Use refs to avoid infinite loops\n const formRef = useRef(form)\n formRef.current = form\n const prevDepsRef = useRef<string | undefined>(undefined)\n\n useEffect(() => {\n // Skip if no dependencies\n if (!dependencies || dependencies.length === 0) return\n\n // Skip initial render\n if (prevDepsRef.current === undefined) {\n prevDepsRef.current = JSON.stringify(watchedDeps)\n return\n }\n\n // Only trigger if dependency values actually changed\n const currentDeps = JSON.stringify(watchedDeps)\n if (prevDepsRef.current !== currentDeps) {\n prevDepsRef.current = currentDeps\n formRef.current.trigger(fieldName as any)\n }\n }, [watchedDeps, dependencies, fieldName])\n\n // Get error by traversing the error object path\n const getErrorByPath = (path: string) => {\n const keys = path.split('.')\n let error: any = form.formState.errors\n for (const key of keys) {\n if (!error) break\n error = error[key]\n }\n return error\n }\n\n const error = getErrorByPath(fieldName)\n const errorMessage = error?.message as string | undefined\n\n // Normalize rules to array\n const rulesArray: FormRule[] = rules\n ? Array.isArray(rules) ? rules : [rules]\n : []\n\n // Build validation rules\n const validationRules: any = {}\n const patternValidators: Array<{ pattern: RegExp; message: string }> = []\n const customValidators: Array<(value: any) => boolean | string | Promise<boolean | string>> = []\n\n // Handle top-level required prop\n if (required) {\n validationRules.required = 'This field is required'\n }\n\n // Process each rule\n for (const rule of rulesArray) {\n // Required\n if (rule.required) {\n validationRules.required = typeof rule.required === 'string'\n ? rule.required\n : rule.message || 'This field is required'\n }\n\n // Type validator\n if (rule.type && TYPE_VALIDATORS[rule.type]) {\n patternValidators.push({\n pattern: TYPE_VALIDATORS[rule.type].value,\n message: rule.message || TYPE_VALIDATORS[rule.type].message,\n })\n }\n\n // Min length\n if (rule.min !== undefined) {\n const minValue = typeof rule.min === 'object' ? rule.min.value : rule.min\n const minMessage = typeof rule.min === 'object'\n ? rule.min.message\n : rule.message || `Minimum length is ${minValue} characters`\n validationRules.minLength = { value: minValue, message: minMessage }\n }\n\n // Max length\n if (rule.max !== undefined) {\n const maxValue = typeof rule.max === 'object' ? rule.max.value : rule.max\n const maxMessage = typeof rule.max === 'object'\n ? rule.max.message\n : rule.message || `Maximum length is ${maxValue} characters`\n validationRules.maxLength = { value: maxValue, message: maxMessage }\n }\n\n // Pattern - collect all patterns\n if (rule.pattern) {\n const patternValue = rule.pattern instanceof RegExp ? rule.pattern : rule.pattern.value\n const patternMessage = rule.pattern instanceof RegExp\n ? rule.message || 'Invalid format'\n : rule.pattern.message\n patternValidators.push({ pattern: patternValue, message: patternMessage })\n }\n\n // Custom validator\n if (rule.validate) {\n customValidators.push(rule.validate)\n }\n }\n\n // Combine all pattern and custom validators into a single validate function\n if (patternValidators.length > 0 || customValidators.length > 0) {\n validationRules.validate = async (value: any) => {\n // Skip validation if empty (required rule handles that)\n if (!value && !validationRules.required) return true\n\n // Check all patterns\n for (const { pattern, message } of patternValidators) {\n if (value && !pattern.test(value)) {\n return message\n }\n }\n\n // Run all custom validators\n for (const validator of customValidators) {\n const result = await validator(value)\n if (result !== true) {\n return result\n }\n }\n\n return true\n }\n }\n\n // Normalize validateTrigger to array\n const triggers = Array.isArray(validateTrigger) ? validateTrigger : [validateTrigger]\n const shouldValidateOnChange = triggers.includes('onChange')\n const shouldValidateOnBlur = triggers.includes('onBlur')\n\n // Feedback icons\n const FeedbackIcon = ({ hasError, isValidating }: { hasError: boolean; isValidating: boolean }) => {\n if (isValidating) {\n return (\n <span className=\"loading loading-spinner loading-xs text-base-content/50\" />\n )\n }\n if (hasError) {\n return (\n <svg className=\"w-4 h-4 text-error\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n )\n }\n return (\n <svg className=\"w-4 h-4 text-success\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n }\n\n // Tooltip icon\n const TooltipIcon = () => (\n <div className=\"tooltip tooltip-top ml-1\" data-tip={tooltip}>\n <svg className=\"w-4 h-4 text-base-content/50 cursor-help\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n </div>\n )\n\n return (\n <Controller\n name={fieldName}\n control={form.control}\n rules={validationRules}\n render={({ field, fieldState }) => {\n const { value, onChange, onBlur, ref } = field\n const isValidating = fieldState.isTouched && form.formState.isValidating\n\n // Clone the child element and inject form control props\n const childProps: any = {\n id: inputId,\n ref,\n 'aria-invalid': error ? true : undefined,\n 'aria-describedby': error ? errorId : undefined,\n }\n\n // Handle onBlur based on validateTrigger\n childProps.onBlur = () => {\n onBlur()\n if (shouldValidateOnBlur) {\n form.trigger(fieldName as any)\n }\n }\n\n // Handle different value prop names (e.g., 'checked' for checkboxes)\n if (valuePropName === 'checked') {\n childProps.checked = value\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.checked)\n if (shouldValidateOnChange) {\n form.trigger(fieldName as any)\n }\n }\n } else {\n childProps.value = value || ''\n childProps.onChange = (eventOrValue: any) => {\n // Handle components that pass value directly (e.g., Range, Rating)\n // vs components that pass event object (e.g., Input, Select)\n if (eventOrValue && eventOrValue.target !== undefined) {\n onChange(eventOrValue.target.value)\n } else {\n onChange(eventOrValue)\n }\n if (shouldValidateOnChange) {\n form.trigger(fieldName as any)\n }\n }\n }\n\n // Apply size if specified at form level\n if (size && isValidElement(children)) {\n const existingProps = children.props as any\n if (!existingProps.size) {\n childProps.size = size\n }\n }\n\n // Apply error styling and accessibility\n if (error) {\n childProps.color = 'error'\n childProps['aria-invalid'] = true\n }\n\n const enhancedChild = isValidElement(children)\n ? cloneElement(children as React.ReactElement<any>, childProps)\n : children\n\n const isHorizontal = layout === 'horizontal'\n const isInline = layout === 'inline'\n\n return (\n <div className={`form-control ${inline ? 'w-auto' : 'w-full'} ${isHorizontal ? 'mb-4' : ''} ${isInline ? 'inline-flex mr-4' : ''} ${className}`} style={hidden ? { display: 'none' } : undefined}>\n <div className={isHorizontal ? 'flex items-center gap-4' : ''}>\n {label && (\n <label\n htmlFor={inputId}\n className={`label ${isHorizontal ? 'flex-shrink-0 justify-end py-0' : ''} ${!isHorizontal && !isInline ? 'pb-1' : ''}`}\n style={isHorizontal ? { width: labelWidth } : undefined}\n >\n <span className=\"label-text flex items-center\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n {tooltip && <TooltipIcon />}\n </span>\n </label>\n )}\n <div className={`${isHorizontal ? 'flex-1' : ''} ${hasFeedback ? 'relative' : ''}`}>\n {enhancedChild}\n {hasFeedback && fieldState.isTouched && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none\">\n <FeedbackIcon hasError={!!error} isValidating={isValidating} />\n </span>\n )}\n </div>\n </div>\n {!isHorizontal && !inline && (\n <p id={errorId} className={`validator-hint ${errorMessage ? '!visible text-error' : ''} min-h-[1.25rem]`} role={errorMessage ? 'alert' : undefined}>\n {errorMessage || (help && <span className=\"text-base-content/70\">{help}</span>) || '\\u00A0'}\n </p>\n )}\n {isHorizontal && (errorMessage || help) && (\n <p id={errorId} className={`validator-hint ${errorMessage ? '!visible text-error' : ''} min-h-[1.25rem]`} role={errorMessage ? 'alert' : undefined}>\n {errorMessage || (help && <span className=\"text-base-content/70\">{help}</span>)}\n </p>\n )}\n {extra && (\n <div className=\"text-sm text-base-content/60 mt-1\">{extra}</div>\n )}\n </div>\n )\n }}\n />\n )\n}\n\nfunction FormList<TFieldValues extends FieldValues = FieldValues>({\n name,\n children,\n}: FormListProps<TFieldValues>) {\n const { form, layout, size } = useFormContext()\n\n const { fields, append, remove, move } = useFieldArray({\n control: form.control,\n name,\n })\n\n // Add name (index) to each field for proper path construction\n const fieldsWithName = fields.map((field, index) => ({\n ...field,\n name: index,\n }))\n\n return (\n <FormContext.Provider value={{ form, layout, size, listName: name as string }}>\n {children(fieldsWithName as any, {\n add: append,\n remove,\n move,\n })}\n </FormContext.Provider>\n )\n}\n\n// Enhanced hook to expose full form API\nexport function useFormInstance<TFieldValues extends FieldValues = FieldValues>() {\n const formInstance = useForm<TFieldValues>()\n\n // Add convenience methods to the instance\n const enhancedInstance = formInstance as typeof formInstance & {\n setFieldValue: typeof formInstance.setValue\n getFieldValue: (name: any) => any\n getFieldsValue: typeof formInstance.getValues\n setFieldsValue: (values: any) => void\n validateFields: typeof formInstance.trigger\n resetFields: typeof formInstance.reset\n isFieldTouched: (name: string) => boolean\n getFieldError: (name: string) => string | undefined\n }\n\n // Add the alias methods\n enhancedInstance.setFieldValue = formInstance.setValue\n enhancedInstance.getFieldValue = (name: any) => formInstance.getValues(name)\n enhancedInstance.getFieldsValue = formInstance.getValues\n enhancedInstance.setFieldsValue = (values: any) => {\n Object.keys(values).forEach((key) => {\n formInstance.setValue(key as any, values[key])\n })\n }\n enhancedInstance.validateFields = formInstance.trigger\n enhancedInstance.resetFields = formInstance.reset\n enhancedInstance.isFieldTouched = (name: string) => {\n const touched = formInstance.formState.touchedFields as any\n return !!touched[name]\n }\n enhancedInstance.getFieldError = (name: string) => {\n const errors = formInstance.formState.errors as any\n return errors[name]?.message as string | undefined\n }\n\n return enhancedInstance\n}\n\nexport interface FormErrorListProps {\n /** Specific field names to show errors for (shows all errors if not specified) */\n fields?: string[]\n /** Custom className */\n className?: string\n}\n\nfunction FormErrorList({ fields, className = '' }: FormErrorListProps) {\n const { form } = useFormContext()\n const { errors } = form.formState\n\n // Flatten nested errors into a list\n const flattenErrors = (obj: any, prefix = ''): Array<{ field: string; message: string }> => {\n const result: Array<{ field: string; message: string }> = []\n\n for (const key in obj) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value?.message) {\n result.push({ field: fullKey, message: value.message as string })\n } else if (typeof value === 'object' && value !== null) {\n result.push(...flattenErrors(value, fullKey))\n }\n }\n\n return result\n }\n\n const allErrors = flattenErrors(errors)\n const filteredErrors = fields\n ? allErrors.filter(e => fields.includes(e.field))\n : allErrors\n\n if (filteredErrors.length === 0) {\n return null\n }\n\n return (\n <ul className={`text-error text-sm space-y-1 ${className}`} role=\"alert\">\n {filteredErrors.map((error, index) => (\n <li key={`${error.field}-${index}`} className=\"flex items-start gap-2\">\n <svg className=\"w-4 h-4 mt-0.5 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <span>{error.message}</span>\n </li>\n ))}\n </ul>\n )\n}\n\nexport const Form = Object.assign(FormRoot, {\n Item: FormItem,\n List: FormList,\n ErrorList: FormErrorList,\n useForm: useFormInstance,\n})\n\nexport type { UseFormReturn as FormInstance }\n"],"names":["FormContext","createContext","TYPE_VALIDATORS","useFormContext","context","useContext","FormRoot","externalForm","onFinish","initialValues","layout","labelWidth","size","children","className","noValidate","props","internalForm","useForm","form","handleSubmit","e","jsx","FormItem","name","label","help","required","rules","valuePropName","inline","tooltip","extra","hasFeedback","dependencies","validateTrigger","initialValue","hidden","listName","inputId","useId","errorId","fieldName","useEffect","watchedDeps","useWatch","formRef","useRef","prevDepsRef","currentDeps","error","path","keys","key","errorMessage","rulesArray","validationRules","patternValidators","customValidators","rule","minValue","minMessage","maxValue","maxMessage","patternValue","patternMessage","value","pattern","message","validator","result","triggers","shouldValidateOnChange","shouldValidateOnBlur","FeedbackIcon","hasError","isValidating","TooltipIcon","Controller","field","fieldState","onChange","onBlur","ref","childProps","eventOrValue","isValidElement","enhancedChild","cloneElement","isHorizontal","isInline","jsxs","FormList","fields","append","remove","move","useFieldArray","fieldsWithName","index","useFormInstance","formInstance","enhancedInstance","values","FormErrorList","errors","flattenErrors","obj","prefix","fullKey","allErrors","filteredErrors","Form"],"mappings":"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"}
1
+ {"version":3,"file":"index34.js","sources":["../src/components/Form.tsx"],"sourcesContent":["import React, { createContext, useContext, cloneElement, isValidElement, useId, useEffect, useRef } from 'react'\nimport { useForm, UseFormReturn, FieldValues, SubmitHandler, UseFormProps, Controller, useFieldArray, FieldArrayPath, FieldArray, useWatch } from 'react-hook-form'\n\ninterface FormContextValue {\n form: UseFormReturn<any>\n layout?: 'vertical' | 'horizontal' | 'inline'\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n labelWidth?: number\n listName?: string\n disabled?: boolean\n}\n\nconst FormContext = createContext<FormContextValue | undefined>(undefined)\n\n// Built-in type validators\nconst TYPE_VALIDATORS = {\n email: {\n value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}$/i,\n message: 'Please enter a valid email address',\n },\n url: {\n value: /^https?:\\/\\/(www\\.)?[-a-zA-Z0-9@:%._\\+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_\\+.~#?&//=]*)$/,\n message: 'Please enter a valid URL',\n },\n number: {\n value: /^-?\\d+(\\.\\d+)?$/,\n message: 'Please enter a valid number',\n },\n}\n\nexport interface FormProps<TFieldValues extends FieldValues = FieldValues>\n extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit'> {\n form?: UseFormReturn<TFieldValues>\n onFinish?: SubmitHandler<TFieldValues>\n /** Called when form validation fails */\n onFinishFailed?: (errorInfo: { values: TFieldValues; errorFields: Array<{ name: string; errors: string[] }> }) => void\n initialValues?: UseFormProps<TFieldValues>['defaultValues']\n layout?: 'vertical' | 'horizontal' | 'inline'\n /** Label width in pixels for horizontal layout (default: 80) */\n labelWidth?: number\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl'\n /** Disable all form fields */\n disabled?: boolean\n children: React.ReactNode\n}\n\nexport interface FormRule {\n required?: boolean | string\n type?: 'email' | 'url' | 'number'\n min?: number | { value: number; message: string }\n max?: number | { value: number; message: string }\n pattern?: RegExp | { value: RegExp; message: string }\n message?: string\n validate?: (value: any) => boolean | string | Promise<boolean | string>\n}\n\nexport type ValidateTrigger = 'onChange' | 'onBlur' | 'onSubmit' | ('onChange' | 'onBlur' | 'onSubmit')[]\n\nexport interface FormItemProps {\n name?: string | string[]\n label?: string\n help?: string\n required?: boolean\n rules?: FormRule | FormRule[]\n valuePropName?: string\n inline?: boolean\n className?: string\n children: React.ReactElement\n /** Tooltip text to show next to label */\n tooltip?: string\n /** Additional content below the form control */\n extra?: React.ReactNode\n /** Show validation feedback icon */\n hasFeedback?: boolean\n /** Field names that this field depends on for validation */\n dependencies?: string[]\n /** When to trigger validation */\n validateTrigger?: ValidateTrigger\n /** Initial value for this field (overrides Form's initialValues) */\n initialValue?: any\n /** Hide this field (still validates and submits) */\n hidden?: boolean\n}\n\nexport interface FormListProps<TFieldValues extends FieldValues = FieldValues> {\n name: FieldArrayPath<TFieldValues>\n children: (\n fields: FieldArray<TFieldValues>[],\n operations: {\n add: (value?: any) => void\n remove: (index: number) => void\n move: (from: number, to: number) => void\n }\n ) => React.ReactNode\n}\n\nfunction useFormContext() {\n const context = useContext(FormContext)\n if (!context) {\n throw new Error('Form compound components must be used within Form')\n }\n return context\n}\n\nfunction FormRoot<TFieldValues extends FieldValues = FieldValues>({\n form: externalForm,\n onFinish,\n onFinishFailed,\n initialValues,\n layout = 'vertical',\n labelWidth = 60,\n size,\n disabled = false,\n children,\n className = '',\n noValidate = true,\n ...props\n}: FormProps<TFieldValues>) {\n const internalForm = useForm<TFieldValues>({\n defaultValues: initialValues,\n })\n\n const form = externalForm || internalForm\n\n const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n\n // Trigger validation\n const isValid = await form.trigger()\n\n if (isValid) {\n if (onFinish) {\n onFinish(form.getValues())\n }\n } else {\n if (onFinishFailed) {\n const errors = form.formState.errors\n const errorFields: Array<{ name: string; errors: string[] }> = []\n\n // Flatten errors into errorFields array\n const flattenErrors = (obj: any, prefix = '') => {\n for (const key in obj) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n if (value?.message) {\n errorFields.push({ name: fullKey, errors: [value.message as string] })\n } else if (typeof value === 'object' && value !== null) {\n flattenErrors(value, fullKey)\n }\n }\n }\n flattenErrors(errors)\n\n onFinishFailed({ values: form.getValues(), errorFields })\n }\n }\n }\n\n const handleReset = (e: React.FormEvent<HTMLFormElement>) => {\n e.preventDefault()\n form.reset(initialValues as any)\n }\n\n return (\n <FormContext.Provider value={{ form, layout, labelWidth, size, disabled }}>\n <form onSubmit={handleSubmit} onReset={handleReset} className={className} noValidate={noValidate} {...props}>\n {children}\n </form>\n </FormContext.Provider>\n )\n}\n\nfunction FormItem({\n name,\n label,\n help,\n required = false,\n rules,\n valuePropName = 'value',\n inline = false,\n className = '',\n children,\n tooltip,\n extra,\n hasFeedback = false,\n dependencies,\n validateTrigger = 'onChange',\n initialValue,\n hidden = false,\n}: FormItemProps) {\n const { form, size, listName, layout, labelWidth, disabled: formDisabled } = useFormContext()\n const inputId = useId()\n const errorId = useId()\n\n if (!name) {\n // Render without form control if no name provided\n return <div className={`form-control ${inline ? 'w-auto' : 'w-full'} ${className}`} style={hidden ? { display: 'none' } : undefined}>{children}</div>\n }\n\n // Handle nested field names (for Form.List)\n let fieldName: string\n if (Array.isArray(name)) {\n // If we're inside a Form.List, prepend the list name\n const fullPath = listName ? [listName, ...name] : name\n fieldName = fullPath.join('.')\n } else {\n fieldName = name\n }\n\n // Set initial value if provided\n useEffect(() => {\n if (initialValue !== undefined) {\n const currentValue = form.getValues(fieldName as any)\n if (currentValue === undefined) {\n form.setValue(fieldName as any, initialValue)\n }\n }\n }, []) // eslint-disable-line react-hooks/exhaustive-deps\n\n // Watch dependencies and re-validate when they change\n const watchedDeps = useWatch({\n control: form.control,\n name: dependencies as any,\n disabled: !dependencies || dependencies.length === 0,\n })\n\n // Use refs to avoid infinite loops\n const formRef = useRef(form)\n formRef.current = form\n const prevDepsRef = useRef<string | undefined>(undefined)\n\n useEffect(() => {\n // Skip if no dependencies\n if (!dependencies || dependencies.length === 0) return\n\n // Skip initial render\n if (prevDepsRef.current === undefined) {\n prevDepsRef.current = JSON.stringify(watchedDeps)\n return\n }\n\n // Only trigger if dependency values actually changed\n const currentDeps = JSON.stringify(watchedDeps)\n if (prevDepsRef.current !== currentDeps) {\n prevDepsRef.current = currentDeps\n formRef.current.trigger(fieldName as any)\n }\n }, [watchedDeps, dependencies, fieldName])\n\n // Get error by traversing the error object path\n const getErrorByPath = (path: string) => {\n const keys = path.split('.')\n let error: any = form.formState.errors\n for (const key of keys) {\n if (!error) break\n error = error[key]\n }\n return error\n }\n\n const error = getErrorByPath(fieldName)\n const errorMessage = error?.message as string | undefined\n\n // Normalize rules to array\n const rulesArray: FormRule[] = rules\n ? Array.isArray(rules) ? rules : [rules]\n : []\n\n // Build validation rules\n const validationRules: any = {}\n const patternValidators: Array<{ pattern: RegExp; message: string }> = []\n const customValidators: Array<(value: any) => boolean | string | Promise<boolean | string>> = []\n\n // Handle top-level required prop\n if (required) {\n validationRules.required = 'This field is required'\n }\n\n // Process each rule\n for (const rule of rulesArray) {\n // Required\n if (rule.required) {\n validationRules.required = typeof rule.required === 'string'\n ? rule.required\n : rule.message || 'This field is required'\n }\n\n // Type validator\n if (rule.type && TYPE_VALIDATORS[rule.type]) {\n patternValidators.push({\n pattern: TYPE_VALIDATORS[rule.type].value,\n message: rule.message || TYPE_VALIDATORS[rule.type].message,\n })\n }\n\n // Min length\n if (rule.min !== undefined) {\n const minValue = typeof rule.min === 'object' ? rule.min.value : rule.min\n const minMessage = typeof rule.min === 'object'\n ? rule.min.message\n : rule.message || `Minimum length is ${minValue} characters`\n validationRules.minLength = { value: minValue, message: minMessage }\n }\n\n // Max length\n if (rule.max !== undefined) {\n const maxValue = typeof rule.max === 'object' ? rule.max.value : rule.max\n const maxMessage = typeof rule.max === 'object'\n ? rule.max.message\n : rule.message || `Maximum length is ${maxValue} characters`\n validationRules.maxLength = { value: maxValue, message: maxMessage }\n }\n\n // Pattern - collect all patterns\n if (rule.pattern) {\n const patternValue = rule.pattern instanceof RegExp ? rule.pattern : rule.pattern.value\n const patternMessage = rule.pattern instanceof RegExp\n ? rule.message || 'Invalid format'\n : rule.pattern.message\n patternValidators.push({ pattern: patternValue, message: patternMessage })\n }\n\n // Custom validator\n if (rule.validate) {\n customValidators.push(rule.validate)\n }\n }\n\n // Combine all pattern and custom validators into a single validate function\n if (patternValidators.length > 0 || customValidators.length > 0) {\n validationRules.validate = async (value: any) => {\n // Skip validation if empty (required rule handles that)\n if (!value && !validationRules.required) return true\n\n // Check all patterns\n for (const { pattern, message } of patternValidators) {\n if (value && !pattern.test(value)) {\n return message\n }\n }\n\n // Run all custom validators\n for (const validator of customValidators) {\n const result = await validator(value)\n if (result !== true) {\n return result\n }\n }\n\n return true\n }\n }\n\n // Normalize validateTrigger to array\n const triggers = Array.isArray(validateTrigger) ? validateTrigger : [validateTrigger]\n const shouldValidateOnChange = triggers.includes('onChange')\n const shouldValidateOnBlur = triggers.includes('onBlur')\n\n // Feedback icons\n const FeedbackIcon = ({ hasError, isValidating }: { hasError: boolean; isValidating: boolean }) => {\n if (isValidating) {\n return (\n <span className=\"loading loading-spinner loading-xs text-base-content/50\" />\n )\n }\n if (hasError) {\n return (\n <svg className=\"w-4 h-4 text-error\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n )\n }\n return (\n <svg className=\"w-4 h-4 text-success\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M5 13l4 4L19 7\" />\n </svg>\n )\n }\n\n // Tooltip icon\n const TooltipIcon = () => (\n <div className=\"tooltip tooltip-top ml-1\" data-tip={tooltip}>\n <svg className=\"w-4 h-4 text-base-content/50 cursor-help\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n </div>\n )\n\n return (\n <Controller\n name={fieldName}\n control={form.control}\n rules={validationRules}\n render={({ field, fieldState }) => {\n const { value, onChange, onBlur, ref } = field\n const isValidating = fieldState.isTouched && form.formState.isValidating\n\n // Clone the child element and inject form control props\n const childProps: any = {\n id: inputId,\n ref,\n 'aria-invalid': error ? true : undefined,\n 'aria-describedby': error ? errorId : undefined,\n }\n\n // Handle onBlur based on validateTrigger\n childProps.onBlur = () => {\n onBlur()\n if (shouldValidateOnBlur) {\n form.trigger(fieldName as any)\n }\n }\n\n // Handle different value prop names (e.g., 'checked' for checkboxes)\n if (valuePropName === 'checked') {\n childProps.checked = value\n childProps.onChange = (e: React.ChangeEvent<HTMLInputElement>) => {\n onChange(e.target.checked)\n if (shouldValidateOnChange) {\n form.trigger(fieldName as any)\n }\n }\n } else {\n childProps.value = value || ''\n childProps.onChange = (eventOrValue: any) => {\n // Handle components that pass value directly (e.g., Range, Rating)\n // vs components that pass event object (e.g., Input, Select)\n if (eventOrValue && eventOrValue.target !== undefined) {\n onChange(eventOrValue.target.value)\n } else {\n onChange(eventOrValue)\n }\n if (shouldValidateOnChange) {\n form.trigger(fieldName as any)\n }\n }\n }\n\n // Apply size if specified at form level\n if (size && isValidElement(children)) {\n const existingProps = children.props as any\n if (!existingProps.size) {\n childProps.size = size\n }\n }\n\n // Apply error styling and accessibility\n if (error) {\n childProps.color = 'error'\n childProps['aria-invalid'] = true\n }\n\n // Apply form-level disabled state\n if (formDisabled) {\n childProps.disabled = true\n }\n\n const enhancedChild = isValidElement(children)\n ? cloneElement(children as React.ReactElement<any>, childProps)\n : children\n\n const isHorizontal = layout === 'horizontal'\n const isInline = layout === 'inline'\n\n return (\n <div className={`form-control ${inline ? 'w-auto' : 'w-full'} ${isHorizontal ? 'mb-4' : ''} ${isInline ? 'inline-flex mr-4' : ''} ${className}`} style={hidden ? { display: 'none' } : undefined}>\n <div className={isHorizontal ? 'flex items-center gap-4' : ''}>\n {label && (\n <label\n htmlFor={inputId}\n className={`label ${isHorizontal ? 'flex-shrink-0 justify-end py-0' : ''} ${!isHorizontal && !isInline ? 'pb-1' : ''}`}\n style={isHorizontal ? { width: labelWidth } : undefined}\n >\n <span className=\"label-text flex items-center\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n {tooltip && <TooltipIcon />}\n </span>\n </label>\n )}\n <div className={`${isHorizontal ? 'flex-1' : ''} ${hasFeedback ? 'relative' : ''}`}>\n {enhancedChild}\n {hasFeedback && fieldState.isTouched && (\n <span className=\"absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none\">\n <FeedbackIcon hasError={!!error} isValidating={isValidating} />\n </span>\n )}\n </div>\n </div>\n {!isHorizontal && !inline && (\n <p id={errorId} className={`validator-hint ${errorMessage ? '!visible text-error' : ''} min-h-[1.25rem]`} role={errorMessage ? 'alert' : undefined}>\n {errorMessage || (help && <span className=\"text-base-content/70\">{help}</span>) || '\\u00A0'}\n </p>\n )}\n {isHorizontal && (errorMessage || help) && (\n <p id={errorId} className={`validator-hint ${errorMessage ? '!visible text-error' : ''} min-h-[1.25rem]`} role={errorMessage ? 'alert' : undefined}>\n {errorMessage || (help && <span className=\"text-base-content/70\">{help}</span>)}\n </p>\n )}\n {extra && (\n <div className=\"text-sm text-base-content/60 mt-1\">{extra}</div>\n )}\n </div>\n )\n }}\n />\n )\n}\n\nfunction FormList<TFieldValues extends FieldValues = FieldValues>({\n name,\n children,\n}: FormListProps<TFieldValues>) {\n const { form, layout, size, disabled } = useFormContext()\n\n const { fields, append, remove, move } = useFieldArray({\n control: form.control,\n name,\n })\n\n // Add name (index) to each field for proper path construction\n const fieldsWithName = fields.map((field, index) => ({\n ...field,\n name: index,\n }))\n\n return (\n <FormContext.Provider value={{ form, layout, size, listName: name as string, disabled }}>\n {children(fieldsWithName as any, {\n add: append,\n remove,\n move,\n })}\n </FormContext.Provider>\n )\n}\n\n// Enhanced hook to expose full form API\nexport function useFormInstance<TFieldValues extends FieldValues = FieldValues>() {\n const formInstance = useForm<TFieldValues>()\n\n // Add convenience methods to the instance\n const enhancedInstance = formInstance as typeof formInstance & {\n setFieldValue: typeof formInstance.setValue\n getFieldValue: (name: any) => any\n getFieldsValue: typeof formInstance.getValues\n setFieldsValue: (values: any) => void\n validateFields: typeof formInstance.trigger\n resetFields: typeof formInstance.reset\n isFieldTouched: (name: string) => boolean\n getFieldError: (name: string) => string | undefined\n }\n\n // Add the alias methods\n enhancedInstance.setFieldValue = formInstance.setValue\n enhancedInstance.getFieldValue = (name: any) => formInstance.getValues(name)\n enhancedInstance.getFieldsValue = formInstance.getValues\n enhancedInstance.setFieldsValue = (values: any) => {\n Object.keys(values).forEach((key) => {\n formInstance.setValue(key as any, values[key])\n })\n }\n enhancedInstance.validateFields = formInstance.trigger\n enhancedInstance.resetFields = formInstance.reset\n enhancedInstance.isFieldTouched = (name: string) => {\n const touched = formInstance.formState.touchedFields as any\n return !!touched[name]\n }\n enhancedInstance.getFieldError = (name: string) => {\n const errors = formInstance.formState.errors as any\n return errors[name]?.message as string | undefined\n }\n\n return enhancedInstance\n}\n\nexport interface FormErrorListProps {\n /** Specific field names to show errors for (shows all errors if not specified) */\n fields?: string[]\n /** Custom className */\n className?: string\n}\n\nfunction FormErrorList({ fields, className = '' }: FormErrorListProps) {\n const { form } = useFormContext()\n const { errors } = form.formState\n\n // Flatten nested errors into a list\n const flattenErrors = (obj: any, prefix = ''): Array<{ field: string; message: string }> => {\n const result: Array<{ field: string; message: string }> = []\n\n for (const key in obj) {\n const fullKey = prefix ? `${prefix}.${key}` : key\n const value = obj[key]\n\n if (value?.message) {\n result.push({ field: fullKey, message: value.message as string })\n } else if (typeof value === 'object' && value !== null) {\n result.push(...flattenErrors(value, fullKey))\n }\n }\n\n return result\n }\n\n const allErrors = flattenErrors(errors)\n const filteredErrors = fields\n ? allErrors.filter(e => fields.includes(e.field))\n : allErrors\n\n if (filteredErrors.length === 0) {\n return null\n }\n\n return (\n <ul className={`text-error text-sm space-y-1 ${className}`} role=\"alert\">\n {filteredErrors.map((error, index) => (\n <li key={`${error.field}-${index}`} className=\"flex items-start gap-2\">\n <svg className=\"w-4 h-4 mt-0.5 flex-shrink-0\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n <span>{error.message}</span>\n </li>\n ))}\n </ul>\n )\n}\n\nexport const Form = Object.assign(FormRoot, {\n Item: FormItem,\n List: FormList,\n ErrorList: FormErrorList,\n useForm: useFormInstance,\n})\n\nexport type { UseFormReturn as FormInstance }\n"],"names":["FormContext","createContext","TYPE_VALIDATORS","useFormContext","context","useContext","FormRoot","externalForm","onFinish","onFinishFailed","initialValues","layout","labelWidth","size","disabled","children","className","noValidate","props","internalForm","useForm","form","handleSubmit","e","errors","errorFields","flattenErrors","obj","prefix","key","fullKey","value","handleReset","jsx","FormItem","name","label","help","required","rules","valuePropName","inline","tooltip","extra","hasFeedback","dependencies","validateTrigger","initialValue","hidden","listName","formDisabled","inputId","useId","errorId","fieldName","useEffect","watchedDeps","useWatch","formRef","useRef","prevDepsRef","currentDeps","error","path","keys","errorMessage","rulesArray","validationRules","patternValidators","customValidators","rule","minValue","minMessage","maxValue","maxMessage","patternValue","patternMessage","pattern","message","validator","result","triggers","shouldValidateOnChange","shouldValidateOnBlur","FeedbackIcon","hasError","isValidating","TooltipIcon","Controller","field","fieldState","onChange","onBlur","ref","childProps","eventOrValue","isValidElement","enhancedChild","cloneElement","isHorizontal","isInline","jsxs","FormList","fields","append","remove","move","useFieldArray","fieldsWithName","index","useFormInstance","formInstance","enhancedInstance","values","FormErrorList","allErrors","filteredErrors","Form"],"mappings":"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"}