asterui 0.12.48 → 0.12.50
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Alert.js +18 -18
- package/dist/components/Alert.js.map +1 -1
- package/dist/components/Anchor.js +53 -53
- package/dist/components/Anchor.js.map +1 -1
- package/dist/components/Autocomplete.js +115 -114
- package/dist/components/Autocomplete.js.map +1 -1
- package/dist/components/Avatar.js +33 -32
- package/dist/components/Avatar.js.map +1 -1
- package/dist/components/Badge.js +99 -99
- package/dist/components/Badge.js.map +1 -1
- package/dist/components/Breadcrumb.js +12 -11
- package/dist/components/Breadcrumb.js.map +1 -1
- package/dist/components/Browser.js +10 -10
- package/dist/components/Browser.js.map +1 -1
- package/dist/components/Button.js +80 -79
- package/dist/components/Button.js.map +1 -1
- package/dist/components/Card.d.ts +2 -0
- package/dist/components/Card.js +111 -110
- package/dist/components/Card.js.map +1 -1
- package/dist/components/Carousel.js +59 -59
- package/dist/components/Carousel.js.map +1 -1
- package/dist/components/Cascader.js +175 -174
- package/dist/components/Cascader.js.map +1 -1
- package/dist/components/Chat.js +27 -27
- package/dist/components/Chat.js.map +1 -1
- package/dist/components/Checkbox.js +98 -97
- package/dist/components/Checkbox.js.map +1 -1
- package/dist/components/Code.js +11 -11
- package/dist/components/Code.js.map +1 -1
- package/dist/components/Collapse.js +46 -46
- package/dist/components/Collapse.js.map +1 -1
- package/dist/components/ColorPicker.d.ts +1 -1
- package/dist/components/ColorPicker.js +93 -91
- package/dist/components/ColorPicker.js.map +1 -1
- package/dist/components/Command.d.ts +65 -0
- package/dist/components/Command.js +422 -0
- package/dist/components/Command.js.map +1 -0
- package/dist/components/ConfigProvider.d.ts +1 -1
- package/dist/components/ConfigProvider.js +9 -9
- package/dist/components/ConfigProvider.js.map +1 -1
- package/dist/components/ContextMenu.js +33 -33
- package/dist/components/ContextMenu.js.map +1 -1
- package/dist/components/CopyButton.js +74 -73
- package/dist/components/CopyButton.js.map +1 -1
- package/dist/components/Countdown.js +60 -59
- package/dist/components/Countdown.js.map +1 -1
- package/dist/components/DatePicker.d.ts +1 -1
- package/dist/components/DatePicker.js +54 -53
- package/dist/components/DatePicker.js.map +1 -1
- package/dist/components/Diff.js +10 -10
- package/dist/components/Diff.js.map +1 -1
- package/dist/components/Divider.js +21 -20
- package/dist/components/Divider.js.map +1 -1
- package/dist/components/Dock.js +28 -27
- package/dist/components/Dock.js.map +1 -1
- package/dist/components/Drawer.js +43 -43
- package/dist/components/Drawer.js.map +1 -1
- package/dist/components/Dropdown.js +127 -127
- package/dist/components/Dropdown.js.map +1 -1
- package/dist/components/Empty.js +16 -15
- package/dist/components/Empty.js.map +1 -1
- package/dist/components/Fieldset.js +11 -10
- package/dist/components/Fieldset.js.map +1 -1
- package/dist/components/FileInput.js +30 -29
- package/dist/components/FileInput.js.map +1 -1
- package/dist/components/Filter.d.ts +1 -1
- package/dist/components/Filter.js +32 -30
- package/dist/components/Filter.js.map +1 -1
- package/dist/components/FloatButton.js +83 -83
- package/dist/components/FloatButton.js.map +1 -1
- package/dist/components/Footer.js +14 -13
- package/dist/components/Footer.js.map +1 -1
- package/dist/components/Form.js +133 -132
- package/dist/components/Form.js.map +1 -1
- package/dist/components/Hero.js +12 -11
- package/dist/components/Hero.js.map +1 -1
- package/dist/components/HoverGallery.js +7 -7
- package/dist/components/HoverGallery.js.map +1 -1
- package/dist/components/Image.js +40 -40
- package/dist/components/Image.js.map +1 -1
- package/dist/components/Input.js +171 -169
- package/dist/components/Input.js.map +1 -1
- package/dist/components/InputNumber.js +84 -83
- package/dist/components/InputNumber.js.map +1 -1
- package/dist/components/Join.js +11 -10
- package/dist/components/Join.js.map +1 -1
- package/dist/components/Kbd.js +15 -15
- package/dist/components/Kbd.js.map +1 -1
- package/dist/components/Layout.js +66 -66
- package/dist/components/Layout.js.map +1 -1
- package/dist/components/List.d.ts +1 -1
- package/dist/components/List.js +75 -72
- package/dist/components/List.js.map +1 -1
- package/dist/components/Loading.d.ts +1 -1
- package/dist/components/Loading.js +31 -29
- package/dist/components/Loading.js.map +1 -1
- package/dist/components/Mask.js +31 -31
- package/dist/components/Mask.js.map +1 -1
- package/dist/components/Mention.js +61 -61
- package/dist/components/Mention.js.map +1 -1
- package/dist/components/Menu.js +84 -84
- package/dist/components/Menu.js.map +1 -1
- package/dist/components/Message.js +30 -29
- package/dist/components/Message.js.map +1 -1
- package/dist/components/Modal.js +117 -116
- package/dist/components/Modal.js.map +1 -1
- package/dist/components/MonthCalendar.d.ts +31 -0
- package/dist/components/MonthCalendar.js +205 -0
- package/dist/components/MonthCalendar.js.map +1 -0
- package/dist/components/Navbar.js +25 -25
- package/dist/components/Navbar.js.map +1 -1
- package/dist/components/Notification.js +56 -55
- package/dist/components/Notification.js.map +1 -1
- package/dist/components/OTPInput.js +69 -68
- package/dist/components/OTPInput.js.map +1 -1
- package/dist/components/Pagination.d.ts +1 -1
- package/dist/components/Pagination.js +60 -58
- package/dist/components/Pagination.js.map +1 -1
- package/dist/components/Phone.js +10 -10
- package/dist/components/Phone.js.map +1 -1
- package/dist/components/Popconfirm.js +60 -60
- package/dist/components/Popconfirm.js.map +1 -1
- package/dist/components/Progress.js +17 -17
- package/dist/components/Progress.js.map +1 -1
- package/dist/components/QRCode.js +23 -23
- package/dist/components/QRCode.js.map +1 -1
- package/dist/components/RadialProgress.js +17 -17
- package/dist/components/RadialProgress.js.map +1 -1
- package/dist/components/Radio.js +41 -40
- package/dist/components/Radio.js.map +1 -1
- package/dist/components/Range.d.ts +1 -1
- package/dist/components/Range.js +39 -37
- package/dist/components/Range.js.map +1 -1
- package/dist/components/Rating.js +79 -78
- package/dist/components/Rating.js.map +1 -1
- package/dist/components/ResponsiveDrawer.js +27 -27
- package/dist/components/ResponsiveDrawer.js.map +1 -1
- package/dist/components/RichTextEditor.d.ts +32 -0
- package/dist/components/RichTextEditor.js +335 -0
- package/dist/components/RichTextEditor.js.map +1 -0
- package/dist/components/Segmented.d.ts +1 -1
- package/dist/components/Segmented.js +48 -46
- package/dist/components/Segmented.js.map +1 -1
- package/dist/components/Select.js +55 -54
- package/dist/components/Select.js.map +1 -1
- package/dist/components/Skeleton.js +9 -9
- package/dist/components/Skeleton.js.map +1 -1
- package/dist/components/Splitter.js +93 -93
- package/dist/components/Splitter.js.map +1 -1
- package/dist/components/Stat.js +17 -16
- package/dist/components/Stat.js.map +1 -1
- package/dist/components/Status.js +29 -29
- package/dist/components/Status.js.map +1 -1
- package/dist/components/Steps.js +61 -61
- package/dist/components/Steps.js.map +1 -1
- package/dist/components/Table.js +256 -256
- package/dist/components/Table.js.map +1 -1
- package/dist/components/Tabs.js +65 -65
- package/dist/components/Tabs.js.map +1 -1
- package/dist/components/Tag.js +147 -147
- package/dist/components/Tag.js.map +1 -1
- package/dist/components/TextRotate.js +6 -6
- package/dist/components/TextRotate.js.map +1 -1
- package/dist/components/Textarea.js +35 -34
- package/dist/components/Textarea.js.map +1 -1
- package/dist/components/ThemeController.d.ts +1 -1
- package/dist/components/ThemeController.js +71 -68
- package/dist/components/ThemeController.js.map +1 -1
- package/dist/components/TimePicker.d.ts +1 -1
- package/dist/components/TimePicker.js +133 -129
- package/dist/components/TimePicker.js.map +1 -1
- package/dist/components/Timeline.js +79 -79
- package/dist/components/Timeline.js.map +1 -1
- package/dist/components/Toggle.js +33 -32
- package/dist/components/Toggle.js.map +1 -1
- package/dist/components/Tooltip.js +25 -25
- package/dist/components/Tooltip.js.map +1 -1
- package/dist/components/Tour.js +126 -126
- package/dist/components/Tour.js.map +1 -1
- package/dist/components/Transfer.js +93 -92
- package/dist/components/Transfer.js.map +1 -1
- package/dist/components/Tree.js +200 -200
- package/dist/components/Tree.js.map +1 -1
- package/dist/components/TreeSelect.js +255 -254
- package/dist/components/TreeSelect.js.map +1 -1
- package/dist/components/Typography.js +71 -70
- package/dist/components/Typography.js.map +1 -1
- package/dist/components/Upload.js +81 -81
- package/dist/components/Upload.js.map +1 -1
- package/dist/components/WeekCalendar.d.ts +35 -0
- package/dist/components/WeekCalendar.js +204 -0
- package/dist/components/WeekCalendar.js.map +1 -0
- package/dist/components/Window.js +7 -7
- package/dist/components/Window.js.map +1 -1
- package/dist/editor.d.ts +1 -0
- package/dist/editor.js +5 -0
- package/dist/editor.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +221 -215
- package/dist/index.js.map +1 -1
- package/package.json +30 -1
package/dist/components/Form.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { jsx as t, jsxs as
|
|
1
|
+
import { jsx as t, jsxs as w } from "react/jsx-runtime";
|
|
2
2
|
import { createContext as he, useId as ee, useEffect as te, useRef as se, isValidElement as re, cloneElement as ge, useContext as pe } from "react";
|
|
3
3
|
import { useForm as ne, useFieldArray as ve, useWatch as xe, Controller as ye } from "react-hook-form";
|
|
4
|
-
|
|
4
|
+
import { useConfig as be } from "./ConfigProvider.js";
|
|
5
|
+
const Ne = "input", $e = "input-xs", ke = "input-sm", Fe = "input-md", Ve = "input-lg", we = "input-xl", Le = "floating-label", Ce = "loading", Ie = "loading-spinner", Ee = "loading-xs", Ae = "tooltip", je = "tooltip-top", X = he(void 0), _ = {
|
|
5
6
|
email: {
|
|
6
7
|
value: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}$/i,
|
|
7
8
|
message: "Please enter a valid email address"
|
|
@@ -15,99 +16,99 @@ const J = he(void 0), _ = {
|
|
|
15
16
|
message: "Please enter a valid number"
|
|
16
17
|
}
|
|
17
18
|
};
|
|
18
|
-
function
|
|
19
|
-
const s = pe(
|
|
19
|
+
function J() {
|
|
20
|
+
const s = pe(X);
|
|
20
21
|
if (!s)
|
|
21
22
|
throw new Error("Form compound components must be used within Form");
|
|
22
23
|
return s;
|
|
23
24
|
}
|
|
24
|
-
function
|
|
25
|
+
function ze({
|
|
25
26
|
form: s,
|
|
26
27
|
onFinish: n,
|
|
27
28
|
onFinishFailed: r,
|
|
28
29
|
initialValues: i,
|
|
29
|
-
layout:
|
|
30
|
+
layout: v = "vertical",
|
|
30
31
|
labelWidth: h = 60,
|
|
31
|
-
size:
|
|
32
|
-
disabled:
|
|
32
|
+
size: N,
|
|
33
|
+
disabled: c = !1,
|
|
33
34
|
children: g,
|
|
34
|
-
className:
|
|
35
|
-
noValidate:
|
|
36
|
-
...
|
|
35
|
+
className: u = "",
|
|
36
|
+
noValidate: x = !0,
|
|
37
|
+
...y
|
|
37
38
|
}) {
|
|
38
|
-
const d = ne({
|
|
39
|
+
const { componentSize: d } = be(), $ = N ?? d ?? "md", j = ne({
|
|
39
40
|
defaultValues: i
|
|
40
|
-
}),
|
|
41
|
-
if (
|
|
42
|
-
n && n(
|
|
41
|
+
}), b = s || j, R = async (k) => {
|
|
42
|
+
if (k.preventDefault(), await b.trigger())
|
|
43
|
+
n && n(b.getValues());
|
|
43
44
|
else if (r) {
|
|
44
|
-
const
|
|
45
|
-
for (const
|
|
46
|
-
const
|
|
47
|
-
|
|
45
|
+
const F = b.formState.errors, z = [], S = (B, T = "") => {
|
|
46
|
+
for (const E in B) {
|
|
47
|
+
const A = T ? `${T}.${E}` : E, l = B[E];
|
|
48
|
+
l?.message ? z.push({ name: A, errors: [l.message] }) : typeof l == "object" && l !== null && S(l, A);
|
|
48
49
|
}
|
|
49
50
|
};
|
|
50
|
-
|
|
51
|
+
S(F), r({ values: b.getValues(), errorFields: z });
|
|
51
52
|
}
|
|
52
|
-
},
|
|
53
|
-
|
|
53
|
+
}, I = (k) => {
|
|
54
|
+
k.preventDefault(), b.reset(i);
|
|
54
55
|
};
|
|
55
|
-
return /* @__PURE__ */ t(
|
|
56
|
+
return /* @__PURE__ */ t(X.Provider, { value: { form: b, layout: v, labelWidth: h, size: $, disabled: c }, children: /* @__PURE__ */ t("form", { onSubmit: R, onReset: I, className: u, noValidate: x, ...y, children: g }) });
|
|
56
57
|
}
|
|
57
|
-
function
|
|
58
|
+
function Se({
|
|
58
59
|
name: s,
|
|
59
60
|
label: n,
|
|
60
61
|
floatingLabel: r,
|
|
61
62
|
help: i,
|
|
62
|
-
required:
|
|
63
|
+
required: v = !1,
|
|
63
64
|
rules: h,
|
|
64
|
-
valuePropName:
|
|
65
|
-
inline:
|
|
65
|
+
valuePropName: N = "value",
|
|
66
|
+
inline: c = !1,
|
|
66
67
|
className: g = "",
|
|
67
|
-
children:
|
|
68
|
-
tooltip:
|
|
69
|
-
extra:
|
|
68
|
+
children: u,
|
|
69
|
+
tooltip: x,
|
|
70
|
+
extra: y,
|
|
70
71
|
hasFeedback: d = !1,
|
|
71
|
-
dependencies:
|
|
72
|
-
validateTrigger:
|
|
73
|
-
initialValue:
|
|
74
|
-
hidden:
|
|
75
|
-
addonBefore:
|
|
76
|
-
addonAfter:
|
|
72
|
+
dependencies: $,
|
|
73
|
+
validateTrigger: j = "onChange",
|
|
74
|
+
initialValue: b,
|
|
75
|
+
hidden: R = !1,
|
|
76
|
+
addonBefore: I,
|
|
77
|
+
addonAfter: k
|
|
77
78
|
}) {
|
|
78
|
-
const { form:
|
|
79
|
+
const { form: m, size: F, listName: z, layout: S, labelWidth: B, disabled: T } = J(), E = ee(), A = ee();
|
|
79
80
|
if (!s)
|
|
80
|
-
return /* @__PURE__ */ t("div", { className: `${
|
|
81
|
-
let
|
|
82
|
-
Array.isArray(s) ?
|
|
83
|
-
|
|
81
|
+
return /* @__PURE__ */ t("div", { className: `${c ? "w-auto" : "w-full"} ${g}`, style: R ? { display: "none" } : void 0, children: u });
|
|
82
|
+
let l;
|
|
83
|
+
Array.isArray(s) ? l = (z ? [z, ...s] : s).join(".") : l = s, te(() => {
|
|
84
|
+
b !== void 0 && m.getValues(l) === void 0 && m.setValue(l, b);
|
|
84
85
|
}, []);
|
|
85
|
-
const
|
|
86
|
-
control:
|
|
87
|
-
name:
|
|
88
|
-
disabled:
|
|
89
|
-
}),
|
|
90
|
-
|
|
86
|
+
const q = xe({
|
|
87
|
+
control: m.control,
|
|
88
|
+
name: $,
|
|
89
|
+
disabled: !$ || $.length === 0
|
|
90
|
+
}), K = se(m);
|
|
91
|
+
K.current = m;
|
|
91
92
|
const W = se(void 0);
|
|
92
93
|
te(() => {
|
|
93
|
-
if (
|
|
94
|
+
if (!$ || $.length === 0) return;
|
|
94
95
|
if (W.current === void 0) {
|
|
95
|
-
W.current = JSON.stringify(
|
|
96
|
+
W.current = JSON.stringify(q);
|
|
96
97
|
return;
|
|
97
98
|
}
|
|
98
|
-
const e = JSON.stringify(
|
|
99
|
-
W.current !== e && (W.current = e,
|
|
100
|
-
}, [
|
|
101
|
-
const
|
|
99
|
+
const e = JSON.stringify(q);
|
|
100
|
+
W.current !== e && (W.current = e, K.current.trigger(l));
|
|
101
|
+
}, [q, $, l]);
|
|
102
|
+
const M = ((e) => {
|
|
102
103
|
const o = e.split(".");
|
|
103
|
-
let a =
|
|
104
|
-
for (const
|
|
104
|
+
let a = m.formState.errors;
|
|
105
|
+
for (const P of o) {
|
|
105
106
|
if (!a) break;
|
|
106
|
-
a = a[
|
|
107
|
+
a = a[P];
|
|
107
108
|
}
|
|
108
109
|
return a;
|
|
109
|
-
})(
|
|
110
|
-
|
|
110
|
+
})(l), L = M?.message, oe = h ? Array.isArray(h) ? h : [h] : [], C = {}, D = [], Z = [];
|
|
111
|
+
v && (C.required = "This field is required");
|
|
111
112
|
for (const e of oe) {
|
|
112
113
|
if (e.required && (C.required = typeof e.required == "string" ? e.required : e.message || "This field is required"), e.type && _[e.type] && D.push({
|
|
113
114
|
pattern: _[e.type].value,
|
|
@@ -138,110 +139,110 @@ function Ne({
|
|
|
138
139
|
}
|
|
139
140
|
return !0;
|
|
140
141
|
});
|
|
141
|
-
const
|
|
142
|
+
const H = Array.isArray(j) ? j : [j], U = H.includes("onChange"), ae = H.includes("onBlur"), ie = ({ hasError: e, isValidating: o }) => o ? /* @__PURE__ */ t("span", { className: `${Ce} ${Ie} ${Ee} 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" }) }), le = () => /* @__PURE__ */ t("div", { className: `${Ae} ${je} ml-1`, "data-tip": x, 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" }) }) });
|
|
142
143
|
return /* @__PURE__ */ t(
|
|
143
144
|
ye,
|
|
144
145
|
{
|
|
145
|
-
name:
|
|
146
|
-
control:
|
|
146
|
+
name: l,
|
|
147
|
+
control: m.control,
|
|
147
148
|
rules: C,
|
|
148
149
|
render: ({ field: e, fieldState: o }) => {
|
|
149
|
-
const { value: a, onChange:
|
|
150
|
-
id:
|
|
150
|
+
const { value: a, onChange: P, onBlur: ce, ref: ue } = e, de = o.isTouched && m.formState.isValidating, p = {
|
|
151
|
+
id: E,
|
|
151
152
|
ref: ue,
|
|
152
|
-
"aria-invalid":
|
|
153
|
-
"aria-describedby":
|
|
153
|
+
"aria-invalid": M ? !0 : void 0,
|
|
154
|
+
"aria-describedby": M ? A : void 0
|
|
154
155
|
};
|
|
155
|
-
|
|
156
|
-
ce(), ae &&
|
|
157
|
-
},
|
|
158
|
-
|
|
159
|
-
}) : (
|
|
160
|
-
f && f.target !== void 0 ?
|
|
161
|
-
}),
|
|
162
|
-
const
|
|
163
|
-
xs:
|
|
164
|
-
sm:
|
|
165
|
-
md:
|
|
166
|
-
lg:
|
|
167
|
-
xl:
|
|
168
|
-
},
|
|
169
|
-
const f = /* @__PURE__ */
|
|
170
|
-
|
|
171
|
-
d && o.isTouched && /* @__PURE__ */ t("span", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none", children: /* @__PURE__ */ t(ie, { hasError: !!
|
|
156
|
+
p.onBlur = () => {
|
|
157
|
+
ce(), ae && m.trigger(l);
|
|
158
|
+
}, N === "checked" ? (p.checked = a, p.onChange = (f) => {
|
|
159
|
+
P(f.target.checked), U && m.trigger(l);
|
|
160
|
+
}) : (p.value = a || "", p.onChange = (f) => {
|
|
161
|
+
f && f.target !== void 0 ? P(f.target.value) : P(f), U && m.trigger(l);
|
|
162
|
+
}), F && re(u) && (u.props.size || (p.size = F)), M && (p.color = "error", p["aria-invalid"] = !0), T && (p.disabled = !0), (I || k) && (p.unstyled = !0);
|
|
163
|
+
const Y = re(u) ? ge(u, p) : u, V = S === "horizontal", G = S === "inline", Q = {
|
|
164
|
+
xs: $e,
|
|
165
|
+
sm: ke,
|
|
166
|
+
md: Fe,
|
|
167
|
+
lg: Ve,
|
|
168
|
+
xl: we
|
|
169
|
+
}, me = () => {
|
|
170
|
+
const f = /* @__PURE__ */ w("div", { className: `${V ? "flex-1" : ""} ${d ? "relative" : ""}`, children: [
|
|
171
|
+
Y,
|
|
172
|
+
d && o.isTouched && /* @__PURE__ */ t("span", { className: "absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none", children: /* @__PURE__ */ t(ie, { hasError: !!M, isValidating: de }) })
|
|
172
173
|
] });
|
|
173
174
|
if (r) {
|
|
174
175
|
const O = [
|
|
175
|
-
|
|
176
|
-
|
|
176
|
+
Le,
|
|
177
|
+
F && Q[F]
|
|
177
178
|
].filter(Boolean).join(" ");
|
|
178
|
-
return /* @__PURE__ */
|
|
179
|
-
|
|
180
|
-
/* @__PURE__ */
|
|
179
|
+
return /* @__PURE__ */ w("label", { className: O, children: [
|
|
180
|
+
Y,
|
|
181
|
+
/* @__PURE__ */ w("span", { children: [
|
|
181
182
|
r,
|
|
182
|
-
|
|
183
|
+
v && /* @__PURE__ */ t("span", { className: "text-error ml-1", children: "*" })
|
|
183
184
|
] })
|
|
184
185
|
] });
|
|
185
186
|
}
|
|
186
187
|
return f;
|
|
187
188
|
}, fe = (f) => {
|
|
188
|
-
if (!
|
|
189
|
+
if (!I && !k) return f;
|
|
189
190
|
const O = [
|
|
190
|
-
|
|
191
|
+
Ne,
|
|
191
192
|
"flex",
|
|
192
193
|
"items-center",
|
|
193
194
|
"gap-2",
|
|
194
|
-
|
|
195
|
+
F && Q[F]
|
|
195
196
|
].filter(Boolean).join(" ");
|
|
196
|
-
return /* @__PURE__ */
|
|
197
|
-
|
|
197
|
+
return /* @__PURE__ */ w("label", { className: O, children: [
|
|
198
|
+
I && /* @__PURE__ */ t("span", { className: "text-base-content/70", children: I }),
|
|
198
199
|
f,
|
|
199
|
-
|
|
200
|
+
k && /* @__PURE__ */ t("span", { className: "text-base-content/70", children: k })
|
|
200
201
|
] });
|
|
201
202
|
};
|
|
202
|
-
return /* @__PURE__ */
|
|
203
|
-
/* @__PURE__ */
|
|
203
|
+
return /* @__PURE__ */ w("div", { className: `${c ? "w-auto" : "w-full"} ${V ? "mb-4" : ""} ${G ? "inline-flex mr-4" : ""} ${g}`, style: R ? { display: "none" } : void 0, children: [
|
|
204
|
+
/* @__PURE__ */ w("div", { className: V ? "flex items-center gap-4" : "", children: [
|
|
204
205
|
n && !r && /* @__PURE__ */ t(
|
|
205
206
|
"label",
|
|
206
207
|
{
|
|
207
|
-
htmlFor:
|
|
208
|
-
className: `block text-sm font-medium ${
|
|
209
|
-
style:
|
|
210
|
-
children: /* @__PURE__ */
|
|
208
|
+
htmlFor: E,
|
|
209
|
+
className: `block text-sm font-medium ${V ? "flex-shrink-0 text-right" : ""} ${!V && !G ? "mb-1" : ""}`,
|
|
210
|
+
style: V ? { width: B } : void 0,
|
|
211
|
+
children: /* @__PURE__ */ w("span", { className: "flex items-center", children: [
|
|
211
212
|
n,
|
|
212
|
-
|
|
213
|
-
|
|
213
|
+
v && /* @__PURE__ */ t("span", { className: "text-error ml-1", children: "*" }),
|
|
214
|
+
x && /* @__PURE__ */ t(le, {})
|
|
214
215
|
] })
|
|
215
216
|
}
|
|
216
217
|
),
|
|
217
|
-
fe(
|
|
218
|
+
fe(me())
|
|
218
219
|
] }),
|
|
219
|
-
!
|
|
220
|
-
|
|
221
|
-
|
|
220
|
+
!V && !c && /* @__PURE__ */ t("p", { id: A, className: `validator-hint ${L ? "!visible text-error" : ""} min-h-[1.25rem]`, role: L ? "alert" : void 0, children: L || i && /* @__PURE__ */ t("span", { className: "text-base-content/70", children: i }) || " " }),
|
|
221
|
+
V && (L || i) && /* @__PURE__ */ t("p", { id: A, className: `validator-hint ${L ? "!visible text-error" : ""} min-h-[1.25rem]`, role: L ? "alert" : void 0, children: L || i && /* @__PURE__ */ t("span", { className: "text-base-content/70", children: i }) }),
|
|
222
|
+
y && /* @__PURE__ */ t("div", { className: "text-sm text-base-content/60 mt-1", children: y })
|
|
222
223
|
] });
|
|
223
224
|
}
|
|
224
225
|
}
|
|
225
226
|
);
|
|
226
227
|
}
|
|
227
|
-
function
|
|
228
|
+
function Me({
|
|
228
229
|
name: s,
|
|
229
230
|
children: n
|
|
230
231
|
}) {
|
|
231
|
-
const { form: r, layout: i, size:
|
|
232
|
+
const { form: r, layout: i, size: v, disabled: h } = J(), { fields: N, append: c, remove: g, move: u } = ve({
|
|
232
233
|
control: r.control,
|
|
233
234
|
name: s
|
|
234
|
-
}),
|
|
235
|
-
...
|
|
235
|
+
}), x = N.map((y, d) => ({
|
|
236
|
+
...y,
|
|
236
237
|
name: d
|
|
237
238
|
}));
|
|
238
|
-
return /* @__PURE__ */ t(
|
|
239
|
-
add:
|
|
239
|
+
return /* @__PURE__ */ t(X.Provider, { value: { form: r, layout: i, size: v, listName: s, disabled: h }, children: n(x, {
|
|
240
|
+
add: c,
|
|
240
241
|
remove: g,
|
|
241
|
-
move:
|
|
242
|
+
move: u
|
|
242
243
|
}) });
|
|
243
244
|
}
|
|
244
|
-
function
|
|
245
|
+
function Pe() {
|
|
245
246
|
const s = ne(), n = s;
|
|
246
247
|
return n.setFieldValue = s.setValue, n.getFieldValue = (r) => s.getValues(r), n.getFieldsValue = s.getValues, n.setFieldsValue = (r) => {
|
|
247
248
|
Object.keys(r).forEach((i) => {
|
|
@@ -249,28 +250,28 @@ function $e() {
|
|
|
249
250
|
});
|
|
250
251
|
}, n.validateFields = s.trigger, n.resetFields = s.reset, n.isFieldTouched = (r) => !!s.formState.touchedFields[r], n.getFieldError = (r) => s.formState.errors[r]?.message, n;
|
|
251
252
|
}
|
|
252
|
-
function
|
|
253
|
-
const { form: r } =
|
|
254
|
-
const
|
|
255
|
-
for (const
|
|
256
|
-
const
|
|
257
|
-
d?.message ?
|
|
253
|
+
function Re({ fields: s, className: n = "" }) {
|
|
254
|
+
const { form: r } = J(), { errors: i } = r.formState, v = (c, g = "") => {
|
|
255
|
+
const u = [];
|
|
256
|
+
for (const x in c) {
|
|
257
|
+
const y = g ? `${g}.${x}` : x, d = c[x];
|
|
258
|
+
d?.message ? u.push({ field: y, message: d.message }) : typeof d == "object" && d !== null && u.push(...v(d, y));
|
|
258
259
|
}
|
|
259
|
-
return
|
|
260
|
-
}, h =
|
|
261
|
-
return
|
|
260
|
+
return u;
|
|
261
|
+
}, h = v(i), N = s ? h.filter((c) => s.includes(c.field)) : h;
|
|
262
|
+
return N.length === 0 ? null : /* @__PURE__ */ t("ul", { className: `text-error text-sm space-y-1 ${n}`, role: "alert", children: N.map((c, g) => /* @__PURE__ */ w("li", { className: "flex items-start gap-2", children: [
|
|
262
263
|
/* @__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" }) }),
|
|
263
|
-
/* @__PURE__ */ t("span", { children:
|
|
264
|
-
] }, `${
|
|
264
|
+
/* @__PURE__ */ t("span", { children: c.message })
|
|
265
|
+
] }, `${c.field}-${g}`)) });
|
|
265
266
|
}
|
|
266
|
-
const
|
|
267
|
-
Item:
|
|
268
|
-
List:
|
|
269
|
-
ErrorList:
|
|
270
|
-
useForm:
|
|
267
|
+
const Oe = Object.assign(ze, {
|
|
268
|
+
Item: Se,
|
|
269
|
+
List: Me,
|
|
270
|
+
ErrorList: Re,
|
|
271
|
+
useForm: Pe
|
|
271
272
|
});
|
|
272
273
|
export {
|
|
273
|
-
|
|
274
|
-
|
|
274
|
+
Oe as Form,
|
|
275
|
+
Pe as useFormInstance
|
|
275
276
|
};
|
|
276
277
|
//# sourceMappingURL=Form.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Form.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 /** Floating label text (alternative to label, uses DaisyUI floating-label) */\n floatingLabel?: 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 /** 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}\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 floatingLabel,\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 addonBefore,\n addonAfter,\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={`${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 // When wrapped with addons, the child input should be unstyled (the wrapper has the styling)\n const hasAddons = addonBefore || addonAfter\n if (hasAddons) {\n childProps.unstyled = 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 // Size class for floating label\n const floatingSizeClasses: Record<string, string> = {\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 input element with optional floating label wrapper\n const renderInputElement = () => {\n const inputWithFeedback = (\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 )\n\n // Floating label variant\n if (floatingLabel) {\n const floatingClasses = [\n 'floating-label',\n size && floatingSizeClasses[size],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={floatingClasses}>\n {enhancedChild}\n <span>{floatingLabel}{required && <span className=\"text-error ml-1\">*</span>}</span>\n </label>\n )\n }\n\n return inputWithFeedback\n }\n\n // Wrap with external addons if specified using DaisyUI input wrapper pattern\n const renderWithAddons = (input: React.ReactNode) => {\n if (!addonBefore && !addonAfter) return input\n\n const addonClasses = [\n 'input',\n 'flex',\n 'items-center',\n 'gap-2',\n size && floatingSizeClasses[size],\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 return (\n <div className={`${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 && !floatingLabel && (\n <label\n htmlFor={inputId}\n className={`block text-sm font-medium ${isHorizontal ? 'flex-shrink-0 text-right' : ''} ${!isHorizontal && !isInline ? 'mb-1' : ''}`}\n style={isHorizontal ? { width: labelWidth } : undefined}\n >\n <span className=\"flex items-center\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n {tooltip && <TooltipIcon />}\n </span>\n </label>\n )}\n {renderWithAddons(renderInputElement())}\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","floatingLabel","help","required","rules","valuePropName","inline","tooltip","extra","hasFeedback","dependencies","validateTrigger","initialValue","hidden","addonBefore","addonAfter","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","floatingSizeClasses","renderInputElement","inputWithFeedback","jsxs","floatingClasses","renderWithAddons","input","addonClasses","FormList","fields","append","remove","move","useFieldArray","fieldsWithName","index","useFormInstance","formInstance","enhancedInstance","values","FormErrorList","allErrors","filteredErrors","Form"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Form.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'\nimport { useConfig } from './ConfigProvider'\n\n// DaisyUI classes\nconst dInput = 'input'\nconst dInputXs = 'input-xs'\nconst dInputSm = 'input-sm'\nconst dInputMd = 'input-md'\nconst dInputLg = 'input-lg'\nconst dInputXl = 'input-xl'\nconst dFloatingLabel = 'floating-label'\nconst dLoading = 'loading'\nconst dLoadingSpinner = 'loading-spinner'\nconst dLoadingXs = 'loading-xs'\nconst dTooltip = 'tooltip'\nconst dTooltipTop = 'tooltip-top'\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 /** Floating label text (alternative to label, uses DaisyUI floating-label) */\n floatingLabel?: 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 /** 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}\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 { componentSize } = useConfig()\n const effectiveSize = size ?? componentSize ?? 'md'\n\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: effectiveSize, 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 floatingLabel,\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 addonBefore,\n addonAfter,\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={`${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={`${dLoading} ${dLoadingSpinner} ${dLoadingXs} 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={`${dTooltip} ${dTooltipTop} 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 // When wrapped with addons, the child input should be unstyled (the wrapper has the styling)\n const hasAddons = addonBefore || addonAfter\n if (hasAddons) {\n childProps.unstyled = 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 // Size class for floating label\n const floatingSizeClasses: Record<string, string> = {\n xs: dInputXs,\n sm: dInputSm,\n md: dInputMd,\n lg: dInputLg,\n xl: dInputXl,\n }\n\n // Build the input element with optional floating label wrapper\n const renderInputElement = () => {\n const inputWithFeedback = (\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 )\n\n // Floating label variant\n if (floatingLabel) {\n const floatingClasses = [\n dFloatingLabel,\n size && floatingSizeClasses[size],\n ].filter(Boolean).join(' ')\n\n return (\n <label className={floatingClasses}>\n {enhancedChild}\n <span>{floatingLabel}{required && <span className=\"text-error ml-1\">*</span>}</span>\n </label>\n )\n }\n\n return inputWithFeedback\n }\n\n // Wrap with external addons if specified using DaisyUI input wrapper pattern\n const renderWithAddons = (input: React.ReactNode) => {\n if (!addonBefore && !addonAfter) return input\n\n const addonClasses = [\n dInput,\n 'flex',\n 'items-center',\n 'gap-2',\n size && floatingSizeClasses[size],\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 return (\n <div className={`${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 && !floatingLabel && (\n <label\n htmlFor={inputId}\n className={`block text-sm font-medium ${isHorizontal ? 'flex-shrink-0 text-right' : ''} ${!isHorizontal && !isInline ? 'mb-1' : ''}`}\n style={isHorizontal ? { width: labelWidth } : undefined}\n >\n <span className=\"flex items-center\">\n {label}\n {required && <span className=\"text-error ml-1\">*</span>}\n {tooltip && <TooltipIcon />}\n </span>\n </label>\n )}\n {renderWithAddons(renderInputElement())}\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":["dInput","dInputXs","dInputSm","dInputMd","dInputLg","dInputXl","dFloatingLabel","dLoading","dLoadingSpinner","dLoadingXs","dTooltip","dTooltipTop","FormContext","createContext","TYPE_VALIDATORS","useFormContext","context","useContext","FormRoot","externalForm","onFinish","onFinishFailed","initialValues","layout","labelWidth","size","disabled","children","className","noValidate","props","componentSize","useConfig","effectiveSize","internalForm","useForm","form","handleSubmit","e","errors","errorFields","flattenErrors","obj","prefix","key","fullKey","value","handleReset","jsx","FormItem","name","label","floatingLabel","help","required","rules","valuePropName","inline","tooltip","extra","hasFeedback","dependencies","validateTrigger","initialValue","hidden","addonBefore","addonAfter","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","floatingSizeClasses","renderInputElement","inputWithFeedback","jsxs","floatingClasses","renderWithAddons","input","addonClasses","FormList","fields","append","remove","move","useFieldArray","fieldsWithName","index","useFormInstance","formInstance","enhancedInstance","values","FormErrorList","allErrors","filteredErrors","Form"],"mappings":"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"}
|
package/dist/components/Hero.js
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
|
|
1
|
+
import { jsxs as c, jsx as e } from "react/jsx-runtime";
|
|
2
|
+
const i = "hero", d = "hero-overlay", f = "hero-content";
|
|
3
|
+
function m({
|
|
3
4
|
children: o,
|
|
4
5
|
overlay: s = !1,
|
|
5
|
-
contentClassName:
|
|
6
|
+
contentClassName: n = "",
|
|
6
7
|
className: r = "",
|
|
7
|
-
...
|
|
8
|
+
...t
|
|
8
9
|
}) {
|
|
9
|
-
const
|
|
10
|
-
return /* @__PURE__ */
|
|
11
|
-
s && /* @__PURE__ */ e("div", { className:
|
|
12
|
-
/* @__PURE__ */ e("div", { className:
|
|
10
|
+
const a = [i, r].filter(Boolean).join(" "), l = [f, n].filter(Boolean).join(" ");
|
|
11
|
+
return /* @__PURE__ */ c("div", { className: a, ...t, children: [
|
|
12
|
+
s && /* @__PURE__ */ e("div", { className: `${d} bg-opacity-60` }),
|
|
13
|
+
/* @__PURE__ */ e("div", { className: l, children: o })
|
|
13
14
|
] });
|
|
14
15
|
}
|
|
15
|
-
|
|
16
|
+
m.displayName = "Hero";
|
|
16
17
|
export {
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
m as Hero,
|
|
19
|
+
m as default
|
|
19
20
|
};
|
|
20
21
|
//# sourceMappingURL=Hero.js.map
|