@saas-ui/forms 3.0.0-alpha.8 → 3.0.0-next.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +85 -62
- package/dist/index.d.mts +117 -26
- package/dist/index.d.ts +117 -26
- package/dist/index.js +176 -113
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +141 -78
- package/dist/index.mjs.map +1 -1
- package/dist/yup/index.d.mts +4 -4
- package/dist/yup/index.d.ts +4 -4
- package/dist/yup/index.js +3 -3
- package/dist/yup/index.js.map +1 -1
- package/dist/yup/index.mjs.map +1 -1
- package/dist/zod/index.d.mts +2 -1
- package/dist/zod/index.d.ts +2 -1
- package/dist/zod/index.js +3 -3
- package/dist/zod/index.js.map +1 -1
- package/dist/zod/index.mjs.map +1 -1
- package/package.json +9 -9
package/dist/index.js
CHANGED
@@ -29,8 +29,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
29
29
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
30
30
|
|
31
31
|
// src/index.ts
|
32
|
-
var
|
33
|
-
__export(
|
32
|
+
var index_exports = {};
|
33
|
+
__export(index_exports, {
|
34
34
|
ArrayField: () => ArrayField,
|
35
35
|
ArrayFieldAddButton: () => ArrayFieldAddButton,
|
36
36
|
ArrayFieldContainer: () => ArrayFieldContainer,
|
@@ -44,12 +44,12 @@ __export(src_exports, {
|
|
44
44
|
AutoFields: () => AutoFields,
|
45
45
|
BaseField: () => BaseField,
|
46
46
|
BaseForm: () => Form,
|
47
|
-
Controller: () =>
|
47
|
+
Controller: () => import_react_hook_form10.Controller,
|
48
48
|
DisplayField: () => DisplayField,
|
49
49
|
DisplayIf: () => DisplayIf,
|
50
50
|
Field: () => Field2,
|
51
51
|
FieldsProvider: () => FieldsProvider,
|
52
|
-
Form: () =>
|
52
|
+
Form: () => Form4,
|
53
53
|
FormLayout: () => FormLayout,
|
54
54
|
FormLegend: () => FormLegend,
|
55
55
|
FormProvider: () => FormProvider,
|
@@ -59,7 +59,7 @@ __export(src_exports, {
|
|
59
59
|
SubmitButton: () => SubmitButton,
|
60
60
|
TextareaField: () => TextareaField,
|
61
61
|
WatchField: () => WatchField,
|
62
|
-
appendErrors: () =>
|
62
|
+
appendErrors: () => import_react_hook_form10.appendErrors,
|
63
63
|
createField: () => createField,
|
64
64
|
createForm: () => createForm,
|
65
65
|
defaultFieldTypes: () => defaultFieldTypes,
|
@@ -71,21 +71,23 @@ __export(src_exports, {
|
|
71
71
|
useArrayFieldRow: () => useArrayFieldRow,
|
72
72
|
useArrayFieldRowContext: () => useArrayFieldRowContext,
|
73
73
|
useBaseField: () => useBaseField,
|
74
|
-
useController: () =>
|
74
|
+
useController: () => import_react_hook_form10.useController,
|
75
75
|
useField: () => useField,
|
76
|
-
useFieldArray: () =>
|
77
|
-
useForm: () =>
|
76
|
+
useFieldArray: () => import_react_hook_form10.useFieldArray,
|
77
|
+
useForm: () => useForm2,
|
78
78
|
useFormContext: () => useFormContext,
|
79
|
-
useFormState: () =>
|
80
|
-
useWatch: () =>
|
79
|
+
useFormState: () => import_react_hook_form10.useFormState,
|
80
|
+
useWatch: () => import_react_hook_form10.useWatch,
|
81
|
+
useZodForm: () => useZodForm
|
81
82
|
});
|
82
|
-
module.exports = __toCommonJS(
|
83
|
+
module.exports = __toCommonJS(index_exports);
|
83
84
|
|
84
85
|
// src/create-form.tsx
|
85
|
-
var
|
86
|
+
var import_react14 = require("react");
|
86
87
|
|
87
88
|
// src/default-fields.tsx
|
88
|
-
var import_react4 = require("
|
89
|
+
var import_react4 = require("react");
|
90
|
+
var import_react5 = require("@chakra-ui/react");
|
89
91
|
var import_checkbox = require("@saas-ui/react/checkbox");
|
90
92
|
var import_input_group = require("@saas-ui/react/input-group");
|
91
93
|
var import_number_input = require("@saas-ui/react/number-input");
|
@@ -138,35 +140,38 @@ var isTouched = (name, formState) => {
|
|
138
140
|
return (0, import_react_hook_form2.get)(formState.touchedFields, name);
|
139
141
|
};
|
140
142
|
var useBaseField = (props) => {
|
141
|
-
const [fieldProps] = (0, import_utils.splitProps)(props, [
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
143
|
+
const [fieldProps, rootProps] = (0, import_utils.splitProps)(props, [
|
144
|
+
"name",
|
145
|
+
"label",
|
146
|
+
"help",
|
147
|
+
"hideLabel",
|
148
|
+
"placeholder",
|
149
|
+
"rules",
|
150
|
+
"type",
|
151
|
+
"children"
|
149
152
|
]);
|
150
153
|
const { formState } = useFormContext();
|
151
154
|
const error = getError(fieldProps.name, formState);
|
152
155
|
const touched = isTouched(fieldProps.name, formState);
|
153
156
|
return {
|
154
157
|
...fieldProps,
|
155
|
-
|
158
|
+
rootProps,
|
156
159
|
error,
|
157
160
|
touched
|
158
161
|
};
|
159
162
|
};
|
160
163
|
var BaseField = (props) => {
|
161
|
-
const {
|
164
|
+
const { rootProps, label, hideLabel, help, error } = useBaseField(props);
|
162
165
|
const isInvalid = !!error;
|
163
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react.Field.Root, { invalid: isInvalid, ...
|
164
|
-
label && !hideLabel ? /* @__PURE__ */ (0, import_jsx_runtime2.
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
166
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react.Field.Root, { invalid: isInvalid, ...rootProps, children: [
|
167
|
+
label && !hideLabel ? /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react.Field.Label, { children: [
|
168
|
+
label,
|
169
|
+
" ",
|
170
|
+
/* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react.Field.RequiredIndicator, {})
|
171
|
+
] }) : null,
|
172
|
+
props.children,
|
173
|
+
help && !(error == null ? void 0 : error.message) ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react.Field.HelperText, { children: help }) : null,
|
174
|
+
(error == null ? void 0 : error.message) && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react.Field.ErrorText, { children: error == null ? void 0 : error.message })
|
170
175
|
] });
|
171
176
|
};
|
172
177
|
BaseField.displayName = "BaseField";
|
@@ -192,37 +197,34 @@ var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
192
197
|
var _createField = (InputComponent, { displayName, hideLabel, getBaseField: getBaseFieldProp }) => {
|
193
198
|
const Field3 = (0, import_react3.forwardRef)((props, ref) => {
|
194
199
|
var _a;
|
195
|
-
const { id,
|
200
|
+
const { id, label, required, rules } = props;
|
196
201
|
const inputRules = {
|
197
|
-
required
|
202
|
+
required,
|
198
203
|
...rules
|
199
204
|
};
|
200
205
|
const fieldContext = useFieldsContext();
|
201
206
|
const getBaseField = (_a = fieldContext == null ? void 0 : fieldContext.getBaseField) != null ? _a : getBaseFieldProp;
|
202
|
-
const { extraProps,
|
207
|
+
const { props: extraProps, Component } = import_react3.default.useMemo(
|
203
208
|
() => getBaseField(),
|
204
209
|
[getBaseField]
|
205
210
|
);
|
206
|
-
const
|
211
|
+
const rootProps = {
|
212
|
+
name: props.name,
|
213
|
+
label: props.label,
|
214
|
+
disabled: props.disabled,
|
215
|
+
invalid: props.invalid,
|
216
|
+
readOnly: props.readOnly,
|
217
|
+
required: props.required
|
218
|
+
};
|
219
|
+
const [baseFieldProps, inputProps] = (0, import_utils2.splitProps)(
|
207
220
|
props,
|
208
|
-
[
|
209
|
-
"children",
|
210
|
-
"name",
|
211
|
-
"label",
|
212
|
-
"required",
|
213
|
-
"disabled",
|
214
|
-
"invalid",
|
215
|
-
"readOnly",
|
216
|
-
"help",
|
217
|
-
"hideLabel"
|
218
|
-
].concat(extraProps)
|
221
|
+
["orientation", "help", "hideLabel"].concat(extraProps)
|
219
222
|
);
|
220
|
-
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
223
|
+
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Component, { ...rootProps, ...baseFieldProps, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
221
224
|
InputComponent,
|
222
225
|
{
|
223
226
|
ref,
|
224
227
|
id,
|
225
|
-
name,
|
226
228
|
label: hideLabel ? label : void 0,
|
227
229
|
...inputProps,
|
228
230
|
rules: inputRules
|
@@ -288,8 +290,8 @@ var createField = (component, options) => {
|
|
288
290
|
displayName: `${(_a = component.displayName) != null ? _a : "Custom"}Field`,
|
289
291
|
hideLabel: options == null ? void 0 : options.hideLabel,
|
290
292
|
getBaseField: () => ({
|
291
|
-
|
292
|
-
BaseField
|
293
|
+
props: [],
|
294
|
+
Component: BaseField
|
293
295
|
})
|
294
296
|
});
|
295
297
|
return Field3;
|
@@ -299,14 +301,22 @@ var createField = (component, options) => {
|
|
299
301
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
300
302
|
var InputField = createField(
|
301
303
|
({ type = "text", startElement, endElement, size, ...rest }, ref) => {
|
302
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
304
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
305
|
+
import_input_group.InputGroup,
|
306
|
+
{
|
307
|
+
startElement,
|
308
|
+
endElement,
|
309
|
+
width: "full",
|
310
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react5.Input, { type, size, ...rest, ref })
|
311
|
+
}
|
312
|
+
);
|
303
313
|
}
|
304
314
|
);
|
305
315
|
var NumberInputField = createField((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_number_input.NumberInput, { ...props, ref }), {
|
306
316
|
isControlled: true
|
307
317
|
});
|
308
318
|
var PasswordInputField = createField(({ type = "password", ...props }, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_password_input.PasswordInput, { ref, ...props }));
|
309
|
-
var TextareaField = createField((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
319
|
+
var TextareaField = createField((props, ref) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react5.Textarea, { ...props, ref }));
|
310
320
|
var SwitchField = createField(
|
311
321
|
({ type, value, ...rest }, ref) => {
|
312
322
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_switch.Switch, { checked: !!value, ...rest, ref });
|
@@ -323,22 +333,28 @@ var SelectField = createField(
|
|
323
333
|
options,
|
324
334
|
placeholder,
|
325
335
|
onChange,
|
326
|
-
onValueChange,
|
327
336
|
onBlur,
|
337
|
+
multiple = false,
|
338
|
+
value: valueProp,
|
328
339
|
...rest
|
329
340
|
} = props;
|
330
|
-
const collection = (0, import_react4.
|
331
|
-
|
332
|
-
|
341
|
+
const collection = (0, import_react4.useMemo)(
|
342
|
+
() => (0, import_react5.createListCollection)({
|
343
|
+
items: options
|
344
|
+
}),
|
345
|
+
[options]
|
346
|
+
);
|
347
|
+
const value = multiple ? [...valueProp != null ? valueProp : []] : valueProp ? [valueProp] : [];
|
333
348
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
334
349
|
import_select.Select.Root,
|
335
350
|
{
|
336
351
|
ref,
|
337
352
|
collection,
|
338
353
|
onValueChange: (details) => {
|
339
|
-
onChange(details.value);
|
354
|
+
onChange(multiple ? details.value : details.value[0]);
|
340
355
|
},
|
341
356
|
onInteractOutside: () => onBlur(),
|
357
|
+
value,
|
342
358
|
...rest,
|
343
359
|
children: [
|
344
360
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_select.Select.Trigger, { ...triggerProps, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_select.Select.ValueText, { placeholder }) }),
|
@@ -370,7 +386,7 @@ var RadioField = createField(
|
|
370
386
|
onChange == null ? void 0 : onChange(value);
|
371
387
|
},
|
372
388
|
...rest,
|
373
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
389
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react5.Stack, { flexDirection, gap, children: options.map((option) => /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_radio.Radio, { value: option.value, children: option.label || option.value }, option.value)) })
|
374
390
|
}
|
375
391
|
);
|
376
392
|
},
|
@@ -445,37 +461,37 @@ var objectFieldResolver = (schema) => {
|
|
445
461
|
};
|
446
462
|
|
447
463
|
// src/form.tsx
|
448
|
-
var
|
449
|
-
var
|
464
|
+
var import_react12 = __toESM(require("react"));
|
465
|
+
var import_react13 = require("@chakra-ui/react");
|
450
466
|
var import_utils9 = require("@saas-ui/core/utils");
|
451
467
|
var import_react_hook_form7 = require("react-hook-form");
|
452
468
|
|
453
469
|
// src/array-field.tsx
|
454
|
-
var
|
455
|
-
var
|
470
|
+
var import_react8 = __toESM(require("react"));
|
471
|
+
var import_react9 = require("@chakra-ui/react");
|
456
472
|
var import_icons = require("@saas-ui/react/icons");
|
457
473
|
|
458
474
|
// src/form-layout.tsx
|
459
|
-
var
|
460
|
-
var
|
475
|
+
var import_react6 = require("react");
|
476
|
+
var import_react7 = require("@chakra-ui/react");
|
461
477
|
var import_utils4 = require("@saas-ui/core/utils");
|
462
478
|
var import_jsx_runtime6 = require("react/jsx-runtime");
|
463
|
-
var FormLayout = (0,
|
464
|
-
({ children,
|
465
|
-
const recipe = (0,
|
466
|
-
key: "
|
479
|
+
var FormLayout = (0, import_react6.forwardRef)(
|
480
|
+
({ children, gap = 4, ...props }, ref) => {
|
481
|
+
const recipe = (0, import_react7.useRecipe)({
|
482
|
+
key: "suiFormLayout"
|
467
483
|
});
|
468
484
|
const [variantProps, gridProps] = recipe.splitVariantProps(props);
|
469
485
|
const styles = recipe(variantProps);
|
470
486
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
471
|
-
|
487
|
+
import_react7.SimpleGrid,
|
472
488
|
{
|
473
489
|
ref,
|
474
490
|
...gridProps,
|
475
491
|
className: (0, import_utils4.cx)("sui-form-layout", props.className),
|
476
492
|
css: [
|
477
493
|
{
|
478
|
-
|
494
|
+
gap
|
479
495
|
},
|
480
496
|
styles,
|
481
497
|
props.css
|
@@ -488,7 +504,7 @@ var FormLayout = (0, import_react5.forwardRef)(
|
|
488
504
|
FormLayout.displayName = "FormLayout";
|
489
505
|
|
490
506
|
// src/use-array-field.tsx
|
491
|
-
var
|
507
|
+
var React5 = __toESM(require("react"));
|
492
508
|
var import_utils5 = require("@saas-ui/core/utils");
|
493
509
|
var import_react_hook_form4 = require("react-hook-form");
|
494
510
|
var [ArrayFieldProvider, useArrayFieldContext] = (0, import_utils5.createContext)({
|
@@ -521,7 +537,7 @@ var useArrayField = ({
|
|
521
537
|
var useArrayFieldRow = ({ index }) => {
|
522
538
|
const { clearErrors } = useFormContext();
|
523
539
|
const { name, remove, fields } = useArrayFieldContext();
|
524
|
-
|
540
|
+
React5.useEffect(() => {
|
525
541
|
clearErrors(name);
|
526
542
|
}, []);
|
527
543
|
return {
|
@@ -529,7 +545,7 @@ var useArrayFieldRow = ({ index }) => {
|
|
529
545
|
isFirst: index === 0,
|
530
546
|
isLast: index === fields.length - 1,
|
531
547
|
name: `${name}.${index}`,
|
532
|
-
remove:
|
548
|
+
remove: React5.useCallback(() => {
|
533
549
|
clearErrors(name);
|
534
550
|
remove(index);
|
535
551
|
}, [index])
|
@@ -556,17 +572,17 @@ var useArrayFieldAddButton = () => {
|
|
556
572
|
};
|
557
573
|
|
558
574
|
// src/utils.ts
|
559
|
-
var
|
575
|
+
var React6 = __toESM(require("react"));
|
560
576
|
var mapNestedFields = (name, children) => {
|
561
|
-
return
|
562
|
-
if (
|
577
|
+
return React6.Children.map(children, (child) => {
|
578
|
+
if (React6.isValidElement(child) && child.props.name) {
|
563
579
|
let childName = child.props.name;
|
564
580
|
if (childName.includes(".")) {
|
565
581
|
childName = childName.replace(/^.*\.(.*)/, "$1");
|
566
582
|
} else if (childName.includes(".$")) {
|
567
583
|
childName = childName.replace(/^.*\.\$(.*)/, "$1");
|
568
584
|
}
|
569
|
-
return
|
585
|
+
return React6.cloneElement(child, {
|
570
586
|
...child.props,
|
571
587
|
name: `${name}.${childName}`
|
572
588
|
});
|
@@ -609,16 +625,16 @@ var ArrayFieldRowContainer = ({
|
|
609
625
|
width: "100%",
|
610
626
|
mb: 4
|
611
627
|
};
|
612
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ArrayFieldRowProvider, { value: context, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
628
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ArrayFieldRowProvider, { value: context, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react9.chakra.div, { ...rest, css: styles, children }) });
|
613
629
|
};
|
614
630
|
ArrayFieldRowContainer.displayName = "ArrayFieldRowContainer";
|
615
631
|
var ArrayFieldRemoveButton = (props) => {
|
616
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
632
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_react9.Button, { "aria-label": "Remove row", ...useArrayFieldRemoveButton(), ...props, children: props.children || /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons.MinusIcon, {}) });
|
617
633
|
};
|
618
634
|
ArrayFieldRemoveButton.displayName = "ArrayFieldRemoveButton";
|
619
635
|
var ArrayFieldAddButton = (props) => {
|
620
636
|
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
621
|
-
|
637
|
+
import_react9.Button,
|
622
638
|
{
|
623
639
|
"aria-label": "Add row",
|
624
640
|
float: "right",
|
@@ -629,7 +645,7 @@ var ArrayFieldAddButton = (props) => {
|
|
629
645
|
);
|
630
646
|
};
|
631
647
|
ArrayFieldAddButton.displayName = "ArrayFieldAddButton";
|
632
|
-
var ArrayField = (0,
|
648
|
+
var ArrayField = (0, import_react8.forwardRef)(
|
633
649
|
(props, ref) => {
|
634
650
|
const { children, ...containerProps } = props;
|
635
651
|
const rowFn = typeof children === "function" ? children : (fields) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_jsx_runtime7.Fragment, { children: fields.map(({ id }, index) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ArrayFieldRow, { index, children }, id)) || null });
|
@@ -647,7 +663,7 @@ var ArrayFieldRows = ({
|
|
647
663
|
return children(fields);
|
648
664
|
};
|
649
665
|
ArrayFieldRows.displayName = "ArrayFieldRows";
|
650
|
-
var ArrayFieldContainer =
|
666
|
+
var ArrayFieldContainer = import_react8.default.forwardRef(
|
651
667
|
({
|
652
668
|
name,
|
653
669
|
defaultValue,
|
@@ -665,14 +681,14 @@ var ArrayFieldContainer = import_react7.default.forwardRef(
|
|
665
681
|
min: min || (overrides == null ? void 0 : overrides.min),
|
666
682
|
max: max || (overrides == null ? void 0 : overrides.max)
|
667
683
|
});
|
668
|
-
|
684
|
+
import_react8.default.useImperativeHandle(ref, () => context, [ref, context]);
|
669
685
|
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(ArrayFieldProvider, { value: context, children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(BaseField, { name, ...fieldProps, ...overrides, children }) });
|
670
686
|
}
|
671
687
|
);
|
672
688
|
ArrayFieldContainer.displayName = "ArrayFieldContainer";
|
673
689
|
|
674
690
|
// src/display-if.tsx
|
675
|
-
var
|
691
|
+
var React8 = __toESM(require("react"));
|
676
692
|
var import_react_hook_form5 = require("react-hook-form");
|
677
693
|
var DisplayIf = ({
|
678
694
|
children,
|
@@ -683,8 +699,8 @@ var DisplayIf = ({
|
|
683
699
|
condition = (value) => !!value,
|
684
700
|
onToggle
|
685
701
|
}) => {
|
686
|
-
const initializedRef =
|
687
|
-
const matchesRef =
|
702
|
+
const initializedRef = React8.useRef(false);
|
703
|
+
const matchesRef = React8.useRef(false);
|
688
704
|
const value = (0, import_react_hook_form5.useWatch)({
|
689
705
|
name,
|
690
706
|
defaultValue,
|
@@ -693,7 +709,7 @@ var DisplayIf = ({
|
|
693
709
|
});
|
694
710
|
const context = useFormContext();
|
695
711
|
const matches = condition(value, context);
|
696
|
-
|
712
|
+
React8.useEffect(() => {
|
697
713
|
if (!initializedRef.current) {
|
698
714
|
initializedRef.current = true;
|
699
715
|
return;
|
@@ -707,10 +723,10 @@ var DisplayIf = ({
|
|
707
723
|
DisplayIf.displayName = "DisplayIf";
|
708
724
|
|
709
725
|
// src/field.tsx
|
710
|
-
var
|
726
|
+
var React9 = __toESM(require("react"));
|
711
727
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
712
728
|
var defaultInputType = "text";
|
713
|
-
var Field2 =
|
729
|
+
var Field2 = React9.forwardRef(
|
714
730
|
(props, ref) => {
|
715
731
|
const { type = defaultInputType, name } = props;
|
716
732
|
const overrides = useFieldProps(name);
|
@@ -720,14 +736,14 @@ var Field2 = React8.forwardRef(
|
|
720
736
|
);
|
721
737
|
|
722
738
|
// src/fields.tsx
|
723
|
-
var
|
739
|
+
var React10 = __toESM(require("react"));
|
724
740
|
|
725
741
|
// src/object-field.tsx
|
726
|
-
var
|
742
|
+
var import_react10 = require("@chakra-ui/react");
|
727
743
|
var import_utils7 = require("@saas-ui/core/utils");
|
728
744
|
var import_jsx_runtime9 = require("react/jsx-runtime");
|
729
745
|
var FormLegend = (props) => {
|
730
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
746
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(import_react10.Field.Label, { as: "legend", ...props });
|
731
747
|
};
|
732
748
|
var ObjectField = (props) => {
|
733
749
|
const {
|
@@ -741,7 +757,7 @@ var ObjectField = (props) => {
|
|
741
757
|
} = props;
|
742
758
|
const { hideLabel, columns, gap, ...overrides } = useFieldProps(name);
|
743
759
|
const hidden = hideLabelProp || hideLabel;
|
744
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(
|
760
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_react10.Field.Root, { as: "fieldset", ...fieldProps, ...overrides, children: [
|
745
761
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(FormLegend, { "data-hidden": (0, import_utils7.dataAttr)(hidden), children: label }),
|
746
762
|
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(FormLayout, { columns: columnsProp || columns, gridGap: gapProp || gap, children: mapNestedFields(name, children) })
|
747
763
|
] });
|
@@ -773,10 +789,10 @@ var AutoFields = ({
|
|
773
789
|
const context = useFormContext();
|
774
790
|
const schema = schemaProp || context.schema;
|
775
791
|
const fieldResolver = fieldResolverProp || context.fieldResolver;
|
776
|
-
const resolver =
|
777
|
-
const fields =
|
792
|
+
const resolver = React10.useMemo(() => fieldResolver, [schema, fieldResolver]);
|
793
|
+
const fields = React10.useMemo(() => resolver == null ? void 0 : resolver.getFields(), [resolver]);
|
778
794
|
const form = useFormContext();
|
779
|
-
|
795
|
+
React10.useEffect(() => {
|
780
796
|
var _a;
|
781
797
|
if (focusFirstField && ((_a = fields == null ? void 0 : fields[0]) == null ? void 0 : _a.name)) {
|
782
798
|
form.setFocus(fields[0].name);
|
@@ -807,11 +823,11 @@ var AutoFields = ({
|
|
807
823
|
AutoFields.displayName = "Fields";
|
808
824
|
|
809
825
|
// src/submit-button.tsx
|
810
|
-
var
|
826
|
+
var import_react11 = require("react");
|
811
827
|
var import_button = require("@saas-ui/react/button");
|
812
828
|
var import_react_hook_form6 = require("react-hook-form");
|
813
829
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
814
|
-
var SubmitButton = (0,
|
830
|
+
var SubmitButton = (0, import_react11.forwardRef)(
|
815
831
|
(props, ref) => {
|
816
832
|
const {
|
817
833
|
variant = "glass",
|
@@ -853,7 +869,7 @@ SubmitButton.displayName = "SubmitButton";
|
|
853
869
|
|
854
870
|
// src/form.tsx
|
855
871
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
856
|
-
var Form = (0,
|
872
|
+
var Form = (0, import_react12.forwardRef)(
|
857
873
|
(props, ref) => {
|
858
874
|
const {
|
859
875
|
mode = "all",
|
@@ -894,8 +910,8 @@ var Form = (0, import_react11.forwardRef)(
|
|
894
910
|
};
|
895
911
|
const methods = (0, import_react_hook_form7.useForm)(form);
|
896
912
|
const { handleSubmit } = methods;
|
897
|
-
|
898
|
-
|
913
|
+
import_react12.default.useImperativeHandle(formRef, () => methods, [formRef, methods]);
|
914
|
+
import_react12.default.useEffect(() => {
|
899
915
|
let subscription;
|
900
916
|
if (onChange) {
|
901
917
|
subscription = methods.watch(onChange);
|
@@ -917,7 +933,7 @@ var Form = (0, import_react11.forwardRef)(
|
|
917
933
|
fieldResolver,
|
918
934
|
fields,
|
919
935
|
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
920
|
-
|
936
|
+
import_react13.chakra.form,
|
921
937
|
{
|
922
938
|
ref,
|
923
939
|
onSubmit: handleSubmit(onSubmit, onError),
|
@@ -946,7 +962,7 @@ function createForm({
|
|
946
962
|
fields,
|
947
963
|
getBaseField
|
948
964
|
} = {}) {
|
949
|
-
const DefaultForm = (0,
|
965
|
+
const DefaultForm = (0, import_react14.forwardRef)(
|
950
966
|
(props, ref) => {
|
951
967
|
const {
|
952
968
|
schema,
|
@@ -954,7 +970,7 @@ function createForm({
|
|
954
970
|
fieldResolver: fieldResolverProp,
|
955
971
|
...rest
|
956
972
|
} = props;
|
957
|
-
const fieldsContext = (0,
|
973
|
+
const fieldsContext = (0, import_react14.useMemo)(
|
958
974
|
() => ({
|
959
975
|
fields: { ...defaultFieldTypes, ...fields },
|
960
976
|
getBaseField
|
@@ -977,17 +993,63 @@ function createForm({
|
|
977
993
|
return DefaultForm;
|
978
994
|
}
|
979
995
|
|
980
|
-
// src/
|
981
|
-
var
|
996
|
+
// src/use-form.tsx
|
997
|
+
var import_react15 = require("react");
|
998
|
+
var import_react16 = require("@chakra-ui/react");
|
999
|
+
var import_zod = require("@hookform/resolvers/zod");
|
1000
|
+
var import_utils10 = require("@saas-ui/core/utils");
|
1001
|
+
var import_react_hook_form8 = require("react-hook-form");
|
982
1002
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
1003
|
+
function useForm2(props = {}) {
|
1004
|
+
const form = (0, import_react_hook_form8.useForm)(props);
|
1005
|
+
const FormComponent = (0, import_react15.forwardRef)(
|
1006
|
+
function FormComponent2(props2, ref) {
|
1007
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Form2, { ...props2, form, ref });
|
1008
|
+
}
|
1009
|
+
);
|
1010
|
+
return {
|
1011
|
+
...form,
|
1012
|
+
Form: FormComponent,
|
1013
|
+
Field: Field2,
|
1014
|
+
DisplayIf,
|
1015
|
+
ArrayField,
|
1016
|
+
ObjectField
|
1017
|
+
};
|
1018
|
+
}
|
1019
|
+
var Form2 = (0, import_react15.forwardRef)(
|
1020
|
+
function Form3(props, ref) {
|
1021
|
+
const { children, form, onSubmit, onError, ...rest } = props;
|
1022
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(FormProvider, { ...form, children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
1023
|
+
import_react16.chakra.form,
|
1024
|
+
{
|
1025
|
+
ref,
|
1026
|
+
onSubmit: form.handleSubmit(onSubmit, onError),
|
1027
|
+
...rest,
|
1028
|
+
className: (0, import_utils10.cx)("sui-form", props.className),
|
1029
|
+
children: props.children
|
1030
|
+
}
|
1031
|
+
) });
|
1032
|
+
}
|
1033
|
+
);
|
1034
|
+
function useZodForm(props) {
|
1035
|
+
const { schema, ...rest } = props;
|
1036
|
+
return useForm2({
|
1037
|
+
resolver: (0, import_zod.zodResolver)(schema),
|
1038
|
+
...rest
|
1039
|
+
});
|
1040
|
+
}
|
1041
|
+
|
1042
|
+
// src/display-field.tsx
|
1043
|
+
var import_react17 = require("@chakra-ui/react");
|
1044
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
983
1045
|
var DisplayField = ({
|
984
1046
|
name,
|
985
1047
|
label,
|
986
1048
|
...props
|
987
1049
|
}) => {
|
988
|
-
return /* @__PURE__ */ (0,
|
989
|
-
label ? /* @__PURE__ */ (0,
|
990
|
-
/* @__PURE__ */ (0,
|
1050
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_react17.Field.Root, { ...props, children: [
|
1051
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react17.Field.Label, { htmlFor: name, children: label }) : null,
|
1052
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react17.Text, { fontSize: "md", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(FormValue, { name }) })
|
991
1053
|
] });
|
992
1054
|
};
|
993
1055
|
DisplayField.displayName = "DisplayField";
|
@@ -998,11 +1060,11 @@ var FormValue = ({ name }) => {
|
|
998
1060
|
FormValue.displayName = "FormValue";
|
999
1061
|
|
1000
1062
|
// src/watch-field.tsx
|
1001
|
-
var
|
1063
|
+
var import_react_hook_form9 = require("react-hook-form");
|
1002
1064
|
var WatchField = (props) => {
|
1003
1065
|
const { name, defaultValue, isDisabled, isExact } = props;
|
1004
1066
|
const form = useFormContext();
|
1005
|
-
const field = (0,
|
1067
|
+
const field = (0, import_react_hook_form9.useWatch)({
|
1006
1068
|
name,
|
1007
1069
|
defaultValue,
|
1008
1070
|
disabled: isDisabled,
|
@@ -1012,8 +1074,8 @@ var WatchField = (props) => {
|
|
1012
1074
|
};
|
1013
1075
|
|
1014
1076
|
// src/index.ts
|
1015
|
-
var
|
1016
|
-
var
|
1077
|
+
var import_react_hook_form10 = require("react-hook-form");
|
1078
|
+
var Form4 = createForm();
|
1017
1079
|
// Annotate the CommonJS export names for ESM import in node:
|
1018
1080
|
0 && (module.exports = {
|
1019
1081
|
ArrayField,
|
@@ -1062,6 +1124,7 @@ var Form2 = createForm();
|
|
1062
1124
|
useForm,
|
1063
1125
|
useFormContext,
|
1064
1126
|
useFormState,
|
1065
|
-
useWatch
|
1127
|
+
useWatch,
|
1128
|
+
useZodForm
|
1066
1129
|
});
|
1067
1130
|
//# sourceMappingURL=index.js.map
|