@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/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 src_exports = {};
33
- __export(src_exports, {
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: () => import_react_hook_form9.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: () => Form2,
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: () => import_react_hook_form9.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: () => import_react_hook_form9.useController,
74
+ useController: () => import_react_hook_form10.useController,
75
75
  useField: () => useField,
76
- useFieldArray: () => import_react_hook_form9.useFieldArray,
77
- useForm: () => import_react_hook_form9.useForm,
76
+ useFieldArray: () => import_react_hook_form10.useFieldArray,
77
+ useForm: () => useForm2,
78
78
  useFormContext: () => useFormContext,
79
- useFormState: () => import_react_hook_form9.useFormState,
80
- useWatch: () => import_react_hook_form9.useWatch
79
+ useFormState: () => import_react_hook_form10.useFormState,
80
+ useWatch: () => import_react_hook_form10.useWatch,
81
+ useZodForm: () => useZodForm
81
82
  });
82
- module.exports = __toCommonJS(src_exports);
83
+ module.exports = __toCommonJS(index_exports);
83
84
 
84
85
  // src/create-form.tsx
85
- var import_react13 = require("react");
86
+ var import_react14 = require("react");
86
87
 
87
88
  // src/default-fields.tsx
88
- var import_react4 = require("@chakra-ui/react");
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, ["name", "label", "help", "hideLabel"]);
142
- const [controlProps] = (0, import_utils.splitProps)(props, [
143
- // 'id',
144
- // 'orientation',
145
- // 'disabled',
146
- // 'invalid',
147
- // 'readOnly',
148
- // 'required',
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
- controlProps,
158
+ rootProps,
156
159
  error,
157
160
  touched
158
161
  };
159
162
  };
160
163
  var BaseField = (props) => {
161
- const { label, help, hideLabel, error } = useBaseField(props);
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, ...props, children: [
164
- label && !hideLabel ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react.Field.Label, { children: label }) : null,
165
- /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(import_react.Box, { width: "full", children: [
166
- props.children,
167
- help && !(error == null ? void 0 : error.message) ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react.Field.HelperText, { children: help }) : null,
168
- (error == null ? void 0 : error.message) && /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(import_react.Field.ErrorText, { children: error == null ? void 0 : error.message })
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, name, label, isRequired, rules } = props;
200
+ const { id, label, required, rules } = props;
196
201
  const inputRules = {
197
- required: isRequired,
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, BaseField: BaseField2 } = import_react3.default.useMemo(
207
+ const { props: extraProps, Component } = import_react3.default.useMemo(
203
208
  () => getBaseField(),
204
209
  [getBaseField]
205
210
  );
206
- const [, inputProps] = (0, import_utils2.splitProps)(
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)(BaseField2, { name, hideLabel, ...props, children: /* @__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
- extraProps: [],
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)(import_input_group.InputGroup, { startElement, endElement, children: /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_react4.Input, { type, size, ...rest, ref }) });
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)(import_react4.Textarea, { ...props, ref }));
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.createListCollection)({
331
- items: options
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)(import_react4.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)) })
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 import_react11 = __toESM(require("react"));
449
- var import_react12 = require("@chakra-ui/react");
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 import_react7 = __toESM(require("react"));
455
- var import_react8 = require("@chakra-ui/react");
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 import_react5 = require("react");
460
- var import_react6 = require("@chakra-ui/react");
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, import_react5.forwardRef)(
464
- ({ children, rowGap = 4, ...props }, ref) => {
465
- const recipe = (0, import_react6.useRecipe)({
466
- key: "formLayout"
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
- import_react6.SimpleGrid,
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
- rowGap
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 React4 = __toESM(require("react"));
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
- React4.useEffect(() => {
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: React4.useCallback(() => {
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 React5 = __toESM(require("react"));
575
+ var React6 = __toESM(require("react"));
560
576
  var mapNestedFields = (name, children) => {
561
- return React5.Children.map(children, (child) => {
562
- if (React5.isValidElement(child) && child.props.name) {
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 React5.cloneElement(child, {
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)(import_react8.chakra.div, { ...rest, css: styles, children }) });
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)(import_react8.Button, { "aria-label": "Remove row", ...useArrayFieldRemoveButton(), ...props, children: props.children || /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_icons.MinusIcon, {}) });
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
- import_react8.Button,
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, import_react7.forwardRef)(
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 = import_react7.default.forwardRef(
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
- import_react7.default.useImperativeHandle(ref, () => context, [ref, context]);
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 React7 = __toESM(require("react"));
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 = React7.useRef(false);
687
- const matchesRef = React7.useRef(false);
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
- React7.useEffect(() => {
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 React8 = __toESM(require("react"));
726
+ var React9 = __toESM(require("react"));
711
727
  var import_jsx_runtime8 = require("react/jsx-runtime");
712
728
  var defaultInputType = "text";
713
- var Field2 = React8.forwardRef(
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 React9 = __toESM(require("react"));
739
+ var React10 = __toESM(require("react"));
724
740
 
725
741
  // src/object-field.tsx
726
- var import_react9 = require("@chakra-ui/react");
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)(import_react9.Field.Label, { as: "legend", ...props });
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)(import_react9.Field.Root, { as: "fieldset", ...fieldProps, ...overrides, children: [
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 = React9.useMemo(() => fieldResolver, [schema, fieldResolver]);
777
- const fields = React9.useMemo(() => resolver == null ? void 0 : resolver.getFields(), [resolver]);
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
- React9.useEffect(() => {
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 import_react10 = require("react");
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, import_react10.forwardRef)(
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, import_react11.forwardRef)(
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
- import_react11.default.useImperativeHandle(formRef, () => methods, [formRef, methods]);
898
- import_react11.default.useEffect(() => {
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
- import_react12.chakra.form,
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, import_react13.forwardRef)(
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, import_react13.useMemo)(
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/display-field.tsx
981
- var import_react14 = require("@chakra-ui/react");
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, import_jsx_runtime14.jsxs)(import_react14.Field.Root, { ...props, children: [
989
- label ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react14.Field.Label, { htmlFor: name, children: label }) : null,
990
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react14.Text, { fontSize: "md", children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(FormValue, { name }) })
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 import_react_hook_form8 = require("react-hook-form");
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, import_react_hook_form8.useWatch)({
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 import_react_hook_form9 = require("react-hook-form");
1016
- var Form2 = createForm();
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