@ttoss/forms 0.32.1 → 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 +49 -0
- package/dist/Brazil/index.d.ts +1 -1
- package/dist/{FormFieldPatternFormat-CxkCeniP.d.ts → FormFieldPatternFormat-SKHmLjAO.d.ts} +1 -1
- package/dist/esm/Brazil/index.js +2 -2
- package/dist/esm/MultistepForm/index.js +2 -2
- package/dist/esm/{chunk-X42ZUF2A.js → chunk-A5YD5USY.js} +15 -5
- package/dist/esm/{chunk-WZLEU3SB.js → chunk-HUZSVTQD.js} +15 -15
- package/dist/esm/index.js +2 -2
- package/dist/index.d.ts +2 -2
- package/package.json +9 -9
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.
|
package/dist/Brazil/index.d.ts
CHANGED
|
@@ -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-
|
|
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;
|
package/dist/esm/Brazil/index.js
CHANGED
|
@@ -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-
|
|
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-
|
|
4
|
-
import { __name } from "../chunk-
|
|
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(
|
|
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,
|
|
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-
|
|
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 (!
|
|
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:
|
|
459
|
-
opacity:
|
|
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-
|
|
3
|
-
import { FormErrorMessage, FormField, FormFieldPatternFormat } from "./chunk-
|
|
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-
|
|
8
|
-
export { b as FormField, c as FormFieldPatternFormat } from './FormFieldPatternFormat-
|
|
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.
|
|
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/
|
|
43
|
-
"@ttoss/
|
|
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",
|
|
@@ -50,12 +50,12 @@
|
|
|
50
50
|
"react-error-boundary": "^6.0.0",
|
|
51
51
|
"tsup": "^8.5.1",
|
|
52
52
|
"yup": "^1.7.1",
|
|
53
|
-
"@ttoss/config": "^1.35.
|
|
54
|
-
"@ttoss/i18n-cli": "^0.7.
|
|
55
|
-
"@ttoss/
|
|
56
|
-
"@ttoss/
|
|
57
|
-
"@ttoss/
|
|
58
|
-
"@ttoss/
|
|
53
|
+
"@ttoss/config": "^1.35.11",
|
|
54
|
+
"@ttoss/i18n-cli": "^0.7.37",
|
|
55
|
+
"@ttoss/test-utils": "^3.0.3",
|
|
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",
|