@ttoss/forms 0.32.2 → 0.32.3

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/README.md CHANGED
@@ -226,6 +226,55 @@ All form field components share common props:
226
226
  - `warning`: Warning message displayed below the field
227
227
  - `sx`: Theme-UI styling object
228
228
 
229
+ ### Disabling Form Fields
230
+
231
+ You can disable form fields in two ways:
232
+
233
+ **1. Disable the entire form:**
234
+
235
+ Set `disabled: true` in `useForm` to disable all fields at once:
236
+
237
+ ```tsx
238
+ const formMethods = useForm({
239
+ disabled: true, // Disables all fields
240
+ });
241
+ ```
242
+
243
+ This is particularly useful for preventing user interaction during asynchronous operations:
244
+
245
+ ```tsx
246
+ const [isSubmitting, setIsSubmitting] = useState(false);
247
+
248
+ const formMethods = useForm({
249
+ disabled: isSubmitting, // Disable form during submission
250
+ });
251
+
252
+ const onSubmit = async (data) => {
253
+ setIsSubmitting(true);
254
+ await saveData(data);
255
+ setIsSubmitting(false);
256
+ };
257
+ ```
258
+
259
+ **2. Disable individual fields:**
260
+
261
+ Use the `disabled` prop on specific form field components:
262
+
263
+ ```tsx
264
+ <FormFieldInput name="email" label="Email" disabled />
265
+ ```
266
+
267
+ Field-level `disabled` props override the form-level setting:
268
+
269
+ ```tsx
270
+ const formMethods = useForm({
271
+ disabled: false,
272
+ });
273
+
274
+ // This field will be disabled even though the form is enabled
275
+ <FormFieldInput name="id" label="ID" disabled />;
276
+ ```
277
+
229
278
  ### FormFieldInput
230
279
 
231
280
  Text input field supporting all HTML input types.
@@ -1,7 +1,7 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
2
  import { FieldValues, FieldPath } from 'react-hook-form';
3
3
  import { PatternFormatProps } from 'react-number-format';
4
- import { F as FormFieldProps, a as FormFieldPatternFormatProps } from '../FormFieldPatternFormat-CxkCeniP.js';
4
+ import { F as FormFieldProps, a as FormFieldPatternFormatProps } from '../FormFieldPatternFormat-SKHmLjAO.js';
5
5
  import '@ttoss/ui';
6
6
  import 'react';
7
7
 
@@ -31,7 +31,7 @@ type FormFieldProps<TFieldValues extends FieldValues = FieldValues, TName extend
31
31
  type FormFieldCompleteProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = {
32
32
  render: (props: UseControllerReturn<TFieldValues, TName>) => React.ReactElement;
33
33
  } & FormFieldProps<TFieldValues, TName>;
34
- declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ label, id: idProp, name, defaultValue, disabled, tooltip, inputTooltip, sx, css, render, warning, rules, }: FormFieldCompleteProps<TFieldValues, TName>) => react_jsx_runtime.JSX.Element;
34
+ declare const FormField: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ label, id: idProp, name, defaultValue, disabled: propsDisabled, tooltip, inputTooltip, sx, css, render, warning, rules, }: FormFieldCompleteProps<TFieldValues, TName>) => react_jsx_runtime.JSX.Element;
35
35
 
36
36
  type FormFieldPatternFormatProps<TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>> = FormFieldProps<TFieldValues, TName> & Omit<PatternFormatProps, 'name'>;
37
37
  declare const FormFieldPatternFormat: <TFieldValues extends FieldValues = FieldValues, TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>>({ disabled, ...props }: FormFieldPatternFormatProps<TFieldValues, TName>) => react_jsx_runtime.JSX.Element;
@@ -1,6 +1,6 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import * as React from 'react';
3
- import { FormField, FormFieldCNPJ, FormFieldPatternFormat, __name, isCnpjValid } from "../chunk-X42ZUF2A.js";
3
+ import { FormField, FormFieldCNPJ, FormFieldPatternFormat, __name, isCnpjValid } from "../chunk-A5YD5USY.js";
4
4
 
5
5
  // src/Brazil/FormFieldPhone.tsx
6
6
  import { Input } from "@ttoss/ui";
@@ -50,7 +50,7 @@ var FormFieldPhone = /* @__PURE__ */__name(({
50
50
  format,
51
51
  customInput: Input,
52
52
  placeholder,
53
- disabled
53
+ disabled: disabled ?? field.disabled
54
54
  });
55
55
  }, "render")
56
56
  });
@@ -1,7 +1,7 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import * as React from 'react';
3
- import { Form, useForm, yupResolver } from "../chunk-WZLEU3SB.js";
4
- import { __name } from "../chunk-X42ZUF2A.js";
3
+ import { Form, useForm, yupResolver } from "../chunk-HUZSVTQD.js";
4
+ import { __name } from "../chunk-A5YD5USY.js";
5
5
 
6
6
  // src/MultistepForm/MultistepForm.tsx
7
7
  import { Flex as Flex6 } from "@ttoss/ui";
@@ -54,7 +54,7 @@ var FormField = /* @__PURE__ */__name(({
54
54
  id: idProp,
55
55
  name,
56
56
  defaultValue,
57
- disabled,
57
+ disabled: propsDisabled,
58
58
  tooltip,
59
59
  inputTooltip,
60
60
  sx,
@@ -73,6 +73,7 @@ var FormField = /* @__PURE__ */__name(({
73
73
  errors
74
74
  }
75
75
  } = useFormContext2();
76
+ const disabled = propsDisabled ?? controllerReturn.field.disabled;
76
77
  const hasError = !!errors[name];
77
78
  const uniqueId = React2.useId();
78
79
  const id = idProp || `form-field-${name}-${uniqueId}`;
@@ -138,8 +139,17 @@ var FormField = /* @__PURE__ */__name(({
138
139
  return element.type === component;
139
140
  });
140
141
  }, "isCheckboxOrSwitch");
142
+ const controllerReturnWithDisabled = React2.useMemo(() => {
143
+ return {
144
+ ...controllerReturn,
145
+ field: {
146
+ ...controllerReturn.field,
147
+ disabled
148
+ }
149
+ };
150
+ }, [controllerReturn, disabled]);
141
151
  const memoizedRender = React2.useMemo(() => {
142
- return React2.Children.map(render(controllerReturn), child => {
152
+ return React2.Children.map(render(controllerReturnWithDisabled), child => {
143
153
  if (! /* @__PURE__ */React2.isValidElement(child)) {
144
154
  return null;
145
155
  }
@@ -192,7 +202,7 @@ var FormField = /* @__PURE__ */__name(({
192
202
  tooltip
193
203
  }, label), /* @__PURE__ */React2.createElement(child.type, elementProps), tooltipElement);
194
204
  });
195
- }, [render, controllerReturn, label, disabled, id, tooltip, warning, inputTooltip, showInputTooltip, tooltipId, handleInputClick, handleInputFocus, handleInputBlur, tooltipElement]);
205
+ }, [render, controllerReturnWithDisabled, label, disabled, id, tooltip, warning, inputTooltip, showInputTooltip, tooltipId, handleInputClick, handleInputFocus, handleInputBlur, tooltipElement]);
196
206
  return /* @__PURE__ */React2.createElement(Flex, {
197
207
  sx: {
198
208
  flexDirection: "column",
@@ -260,7 +270,7 @@ var FormFieldPatternFormat = /* @__PURE__ */__name(({
260
270
  field.onChange(values.value);
261
271
  }, "onValueChange"),
262
272
  customInput: Input,
263
- disabled,
273
+ disabled: disabled ?? field.disabled,
264
274
  "aria-invalid": fieldState.error ? "true" : void 0
265
275
  });
266
276
  }, "render")
@@ -352,7 +362,7 @@ var FormFieldCNPJ = /* @__PURE__ */__name(({
352
362
  format: "##.###.###/####-##",
353
363
  customInput: Input2,
354
364
  placeholder,
355
- disabled
365
+ disabled: disabled ?? field.disabled
356
366
  });
357
367
  }, "render")
358
368
  });
@@ -1,6 +1,6 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
2
  import * as React from 'react';
3
- import { FormErrorMessage, FormField, FormFieldPatternFormat, __name, isCnpjValid } from "./chunk-X42ZUF2A.js";
3
+ import { FormErrorMessage, FormField, FormFieldPatternFormat, __name, isCnpjValid } from "./chunk-A5YD5USY.js";
4
4
 
5
5
  // src/Form.tsx
6
6
  import { Box } from "@ttoss/ui";
@@ -60,7 +60,7 @@ var FormFieldCheckbox = /* @__PURE__ */__name(({
60
60
  return /* @__PURE__ */React.createElement(Checkbox, {
61
61
  ...checkboxProps,
62
62
  ...field,
63
- disabled,
63
+ disabled: disabled ?? field.disabled,
64
64
  "aria-invalid": !!fieldState.error
65
65
  });
66
66
  }, "render")
@@ -124,7 +124,7 @@ var FormFieldNumericFormat = /* @__PURE__ */__name(({
124
124
  field.onChange(values.floatValue);
125
125
  }, "onValueChange"),
126
126
  customInput: Input,
127
- disabled
127
+ disabled: disabled ?? field.disabled
128
128
  });
129
129
  }, "render")
130
130
  });
@@ -187,7 +187,7 @@ var FormFieldInput = /* @__PURE__ */__name(({
187
187
  return /* @__PURE__ */React.createElement(Input2, {
188
188
  ...inputProps,
189
189
  ...field,
190
- disabled,
190
+ disabled: disabled ?? field.disabled,
191
191
  "aria-invalid": fieldState.error ? "true" : void 0
192
192
  });
193
193
  }, "render")
@@ -232,7 +232,7 @@ var FormFieldPassword = /* @__PURE__ */__name(({
232
232
  return /* @__PURE__ */React.createElement(InputPassword, {
233
233
  ...inputProps,
234
234
  ...field,
235
- disabled,
235
+ disabled: disabled ?? field.disabled,
236
236
  "aria-invalid": fieldState.error ? "true" : void 0
237
237
  });
238
238
  }, "render")
@@ -293,7 +293,7 @@ var FormFieldRadio = /* @__PURE__ */__name(({
293
293
  value: option.value,
294
294
  checked: field.value === option.value,
295
295
  name,
296
- disabled,
296
+ disabled: disabled ?? field.disabled,
297
297
  ...radioProps
298
298
  }), option.label);
299
299
  }));
@@ -368,7 +368,7 @@ var FormFieldRadioCard = /* @__PURE__ */__name(({
368
368
  value: option.value,
369
369
  checked: field.value === option.value,
370
370
  name,
371
- disabled
371
+ disabled: disabled ?? field.disabled
372
372
  }), /* @__PURE__ */React.createElement(Flex2, {
373
373
  sx: {
374
374
  flexDirection: "column",
@@ -385,8 +385,7 @@ var FormFieldRadioCard = /* @__PURE__ */__name(({
385
385
  }, "FormFieldRadioCard");
386
386
 
387
387
  // src/FormFieldRadioCardIcony.tsx
388
- import { Box as Box3, Flex as Flex3, Text as Text2 } from "@ttoss/ui";
389
- import { Tag } from "@ttoss/ui";
388
+ import { Box as Box3, Flex as Flex3, Tag, Text as Text2 } from "@ttoss/ui";
390
389
  import * as React3 from "react";
391
390
  var FormFieldRadioCardIcony = /* @__PURE__ */__name(({
392
391
  disabled,
@@ -422,8 +421,9 @@ var FormFieldRadioCardIcony = /* @__PURE__ */__name(({
422
421
  render: /* @__PURE__ */__name(({
423
422
  field
424
423
  }) => {
424
+ const isDisabled = disabled ?? field.disabled;
425
425
  const handleOptionClick = /* @__PURE__ */__name(optionValue => {
426
- if (!disabled) {
426
+ if (!isDisabled) {
427
427
  field.onChange(optionValue);
428
428
  field.onBlur();
429
429
  }
@@ -455,8 +455,8 @@ var FormFieldRadioCardIcony = /* @__PURE__ */__name(({
455
455
  alignItems: "center",
456
456
  justifyContent: "center",
457
457
  textAlign: "center",
458
- cursor: disabled ? "not-allowed" : "pointer",
459
- opacity: disabled ? 0.5 : 1,
458
+ cursor: isDisabled ? "not-allowed" : "pointer",
459
+ opacity: isDisabled ? 0.5 : 1,
460
460
  transition: "all 0.2s ease-in-out"
461
461
  }
462
462
  }, IconComponent && /* @__PURE__ */React3.createElement(Box3, {
@@ -534,7 +534,7 @@ var FormFieldSelect = /* @__PURE__ */__name(({
534
534
  return /* @__PURE__ */React.createElement(Select, {
535
535
  ...selectProps,
536
536
  ...field,
537
- isDisabled: disabled,
537
+ isDisabled: disabled ?? field.disabled,
538
538
  "aria-invalid": fieldState.error ? "true" : void 0
539
539
  });
540
540
  }, "render")
@@ -579,7 +579,7 @@ var FormFieldSwitch = /* @__PURE__ */__name(({
579
579
  return /* @__PURE__ */React.createElement(Switch, {
580
580
  ...switchProps,
581
581
  ...field,
582
- disabled,
582
+ disabled: disabled ?? field.disabled,
583
583
  "aria-invalid": !!fieldState.error
584
584
  });
585
585
  }, "render")
@@ -624,7 +624,7 @@ var FormFieldTextarea = /* @__PURE__ */__name(({
624
624
  return /* @__PURE__ */React.createElement(Textarea, {
625
625
  ...textareaProps,
626
626
  ...field,
627
- disabled,
627
+ disabled: disabled ?? field.disabled,
628
628
  "aria-invalid": fieldState.error ? "true" : void 0
629
629
  });
630
630
  }, "render")
package/dist/esm/index.js CHANGED
@@ -1,4 +1,4 @@
1
1
  /** Powered by @ttoss/config. https://ttoss.dev/docs/modules/packages/config/ */
2
- import { Controller, Form, FormFieldCheckbox, FormFieldCreditCardNumber, FormFieldCurrencyInput, FormFieldInput, FormFieldNumericFormat, FormFieldPassword, FormFieldRadio, FormFieldRadioCard, FormFieldRadioCardIcony, FormFieldSelect, FormFieldSwitch, FormFieldTextarea, FormGroup, FormProvider, useController, useFieldArray, useForm, useFormContext, useFormGroup, useFormState, useWatch, yup, yupResolver } from "./chunk-WZLEU3SB.js";
3
- import { FormErrorMessage, FormField, FormFieldPatternFormat } from "./chunk-X42ZUF2A.js";
2
+ import { Controller, Form, FormFieldCheckbox, FormFieldCreditCardNumber, FormFieldCurrencyInput, FormFieldInput, FormFieldNumericFormat, FormFieldPassword, FormFieldRadio, FormFieldRadioCard, FormFieldRadioCardIcony, FormFieldSelect, FormFieldSwitch, FormFieldTextarea, FormGroup, FormProvider, useController, useFieldArray, useForm, useFormContext, useFormGroup, useFormState, useWatch, yup, yupResolver } from "./chunk-HUZSVTQD.js";
3
+ import { FormErrorMessage, FormField, FormFieldPatternFormat } from "./chunk-A5YD5USY.js";
4
4
  export { Controller, Form, FormErrorMessage, FormField, FormFieldCheckbox, FormFieldCreditCardNumber, FormFieldCurrencyInput, FormFieldInput, FormFieldNumericFormat, FormFieldPassword, FormFieldPatternFormat, FormFieldRadio, FormFieldRadioCard, FormFieldRadioCardIcony, FormFieldSelect, FormFieldSwitch, FormFieldTextarea, FormGroup, FormProvider, useController, useFieldArray, useForm, useFormContext, useFormGroup, useFormState, useWatch, yup, yupResolver };
package/dist/index.d.ts CHANGED
@@ -4,8 +4,8 @@ import * as React from 'react';
4
4
  import { FieldValues, FormProviderProps, FieldName, FieldPath } from 'react-hook-form';
5
5
  export * from 'react-hook-form';
6
6
  export { Controller, FormProvider, useController, useFieldArray, useForm, useFormContext, useFormState, useWatch } from 'react-hook-form';
7
- import { F as FormFieldProps, a as FormFieldPatternFormatProps } from './FormFieldPatternFormat-CxkCeniP.js';
8
- export { b as FormField, c as FormFieldPatternFormat } from './FormFieldPatternFormat-CxkCeniP.js';
7
+ import { F as FormFieldProps, a as FormFieldPatternFormatProps } from './FormFieldPatternFormat-SKHmLjAO.js';
8
+ export { b as FormField, c as FormFieldPatternFormat } from './FormFieldPatternFormat-SKHmLjAO.js';
9
9
  import { NumericFormatProps } from 'react-number-format';
10
10
  import './typings.d-HZBqJJjn.js';
11
11
  import * as yup from 'yup';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ttoss/forms",
3
- "version": "0.32.2",
3
+ "version": "0.32.3",
4
4
  "license": "MIT",
5
5
  "author": "ttoss",
6
6
  "contributors": [
@@ -39,8 +39,8 @@
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": ">=16.8.0",
42
- "@ttoss/react-i18n": "^2.0.21",
43
- "@ttoss/ui": "^5.10.7"
42
+ "@ttoss/ui": "^5.10.7",
43
+ "@ttoss/react-i18n": "^2.0.21"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/jest": "^30.0.0",
@@ -52,10 +52,10 @@
52
52
  "yup": "^1.7.1",
53
53
  "@ttoss/config": "^1.35.11",
54
54
  "@ttoss/i18n-cli": "^0.7.37",
55
- "@ttoss/react-i18n": "^2.0.21",
56
- "@ttoss/react-icons": "^0.5.2",
57
55
  "@ttoss/test-utils": "^3.0.3",
58
- "@ttoss/ui": "^5.10.7"
56
+ "@ttoss/ui": "^5.10.7",
57
+ "@ttoss/react-icons": "^0.5.2",
58
+ "@ttoss/react-i18n": "^2.0.21"
59
59
  },
60
60
  "publishConfig": {
61
61
  "access": "public",