@ttoss/forms 0.26.0 → 0.26.2

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.
Files changed (35) hide show
  1. package/LICENSE +21 -674
  2. package/package.json +11 -11
  3. package/src/Brazil/FormFieldCEP.tsx +0 -25
  4. package/src/Brazil/FormFieldCNPJ.tsx +0 -93
  5. package/src/Brazil/FormFieldPhone.tsx +0 -41
  6. package/src/Brazil/index.ts +0 -4
  7. package/src/Form.tsx +0 -29
  8. package/src/FormErrorMessage.tsx +0 -60
  9. package/src/FormField.tsx +0 -86
  10. package/src/FormFieldCheckbox.tsx +0 -49
  11. package/src/FormFieldCreditCardNumber.tsx +0 -25
  12. package/src/FormFieldCurrencyInput.tsx +0 -36
  13. package/src/FormFieldInput.tsx +0 -43
  14. package/src/FormFieldNumericFormat.tsx +0 -35
  15. package/src/FormFieldPassword.tsx +0 -43
  16. package/src/FormFieldPatternFormat.tsx +0 -36
  17. package/src/FormFieldRadio.tsx +0 -57
  18. package/src/FormFieldSelect.tsx +0 -47
  19. package/src/FormFieldTextarea.tsx +0 -36
  20. package/src/FormGroup.tsx +0 -136
  21. package/src/MultistepForm/MultistepFlowMessage.tsx +0 -14
  22. package/src/MultistepForm/MultistepFlowMessageImageText.tsx +0 -37
  23. package/src/MultistepForm/MultistepFooter.tsx +0 -18
  24. package/src/MultistepForm/MultistepForm.tsx +0 -117
  25. package/src/MultistepForm/MultistepFormStepper.tsx +0 -70
  26. package/src/MultistepForm/MultistepHeader.tsx +0 -78
  27. package/src/MultistepForm/MultistepNavigation.tsx +0 -38
  28. package/src/MultistepForm/MultistepQuestion.tsx +0 -28
  29. package/src/MultistepForm/index.ts +0 -1
  30. package/src/MultistepForm/types.ts +0 -7
  31. package/src/index.ts +0 -35
  32. package/src/yup/i18n.ts +0 -31
  33. package/src/yup/schema.ts +0 -26
  34. package/src/yup/typings.d.ts +0 -14
  35. package/src/yup/yup.ts +0 -4
package/package.json CHANGED
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "name": "@ttoss/forms",
3
- "version": "0.26.0",
3
+ "version": "0.26.2",
4
+ "license": "MIT",
4
5
  "author": "ttoss",
5
6
  "contributors": [
6
7
  "Pedro Arantes <pedro@arantespp.com> (https://arantespp.com/contact)"
@@ -26,8 +27,7 @@
26
27
  }
27
28
  },
28
29
  "files": [
29
- "dist",
30
- "src"
30
+ "dist"
31
31
  ],
32
32
  "sideEffects": true,
33
33
  "dependencies": {
@@ -39,8 +39,8 @@
39
39
  },
40
40
  "peerDependencies": {
41
41
  "react": ">=16.8.0",
42
- "@ttoss/react-i18n": "^2.0.3",
43
- "@ttoss/ui": "^5.0.7"
42
+ "@ttoss/react-i18n": "^2.0.4",
43
+ "@ttoss/ui": "^5.0.9"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@types/jest": "^29.5.13",
@@ -50,12 +50,12 @@
50
50
  "react-error-boundary": "^4.0.13",
51
51
  "tsup": "^8.3.0",
52
52
  "yup": "^1.4.0",
53
- "@ttoss/config": "^1.34.0",
54
- "@ttoss/i18n-cli": "^0.7.21",
55
- "@ttoss/react-i18n": "^2.0.3",
56
- "@ttoss/react-icons": "^0.4.3",
57
- "@ttoss/test-utils": "^2.1.16",
58
- "@ttoss/ui": "^5.0.7"
53
+ "@ttoss/config": "^1.34.1",
54
+ "@ttoss/i18n-cli": "^0.7.22",
55
+ "@ttoss/react-i18n": "^2.0.4",
56
+ "@ttoss/react-icons": "^0.4.4",
57
+ "@ttoss/test-utils": "^2.1.17",
58
+ "@ttoss/ui": "^5.0.9"
59
59
  },
60
60
  "publishConfig": {
61
61
  "access": "public",
@@ -1,25 +0,0 @@
1
- import {
2
- FormFieldPatternFormat,
3
- FormFieldPatternFormatProps,
4
- } from '../FormFieldPatternFormat';
5
-
6
- export type FormFieldCEPProps = {
7
- label: string;
8
- name: string;
9
- } & Partial<FormFieldPatternFormatProps>;
10
-
11
- export const FormFieldCEP = ({
12
- label,
13
- name,
14
- ...formFieldPatternFormatProps
15
- }: FormFieldCEPProps) => {
16
- return (
17
- <FormFieldPatternFormat
18
- name={name}
19
- label={label}
20
- format="#####-###"
21
- placeholder="12345-678"
22
- {...formFieldPatternFormatProps}
23
- />
24
- );
25
- };
@@ -1,93 +0,0 @@
1
- import { FormField } from '..';
2
- import { Input } from '@ttoss/ui';
3
- import { PatternFormat, PatternFormatProps } from 'react-number-format';
4
-
5
- export type FormFieldCNPJProps = {
6
- label: string;
7
- name: string;
8
- } & Partial<PatternFormatProps>;
9
-
10
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
11
- export const isCnpjValid = (cnpj: any) => {
12
- if (cnpj?.length != 14) {
13
- return false;
14
- }
15
-
16
- if (
17
- cnpj == '00000000000000' ||
18
- cnpj == '11111111111111' ||
19
- cnpj == '22222222222222' ||
20
- cnpj == '33333333333333' ||
21
- cnpj == '44444444444444' ||
22
- cnpj == '55555555555555' ||
23
- cnpj == '66666666666666' ||
24
- cnpj == '77777777777777' ||
25
- cnpj == '88888888888888' ||
26
- cnpj == '99999999999999'
27
- ) {
28
- return false;
29
- }
30
-
31
- // Valida DVs
32
- let size = cnpj.length - 2;
33
- let numbers = cnpj.substring(0, size);
34
- const digits = cnpj.substring(size);
35
- let soma = 0;
36
- let pos = size - 7;
37
- for (let i = size; i >= 1; i--) {
38
- soma += numbers.charAt(size - i) * pos--;
39
- if (pos < 2) {
40
- pos = 9;
41
- }
42
- }
43
- let result = soma % 11 < 2 ? 0 : 11 - (soma % 11);
44
- if (result != digits.charAt(0)) {
45
- return false;
46
- }
47
-
48
- size = size + 1;
49
- numbers = cnpj.substring(0, size);
50
- soma = 0;
51
- pos = size - 7;
52
- for (let i = size; i >= 1; i--) {
53
- soma += numbers.charAt(size - i) * pos--;
54
- if (pos < 2) {
55
- pos = 9;
56
- }
57
- }
58
- result = soma % 11 < 2 ? 0 : 11 - (soma % 11);
59
- if (result != digits.charAt(1)) {
60
- return false;
61
- }
62
-
63
- return true;
64
- };
65
-
66
- export const FormFieldCNPJ = ({
67
- label,
68
- name,
69
- ...patternFormatProps
70
- }: FormFieldCNPJProps) => {
71
- return (
72
- <FormField
73
- name={name}
74
- label={label}
75
- render={({ field }) => {
76
- return (
77
- <PatternFormat
78
- name={field.name}
79
- value={field.value}
80
- onBlur={field.onBlur}
81
- onValueChange={(values) => {
82
- field.onChange(values.value);
83
- }}
84
- format={'##.###.###/####-##'}
85
- customInput={Input}
86
- placeholder="12.345.678/0000-00"
87
- {...patternFormatProps}
88
- />
89
- );
90
- }}
91
- />
92
- );
93
- };
@@ -1,41 +0,0 @@
1
- import { FormField } from '../FormField';
2
- import { Input } from '@ttoss/ui';
3
-
4
- import { PatternFormat, PatternFormatProps } from 'react-number-format';
5
-
6
- export type FormFieldPhoneProps = {
7
- label: string;
8
- name: string;
9
- } & Partial<PatternFormatProps>;
10
-
11
- export const FormFieldPhone = ({
12
- label,
13
- name,
14
- ...patternFormatProps
15
- }: FormFieldPhoneProps) => {
16
- return (
17
- <FormField
18
- name={name}
19
- label={label}
20
- render={({ field }) => {
21
- const format =
22
- field.value?.length > 10 ? '(##) #####-####' : '(##) ####-#####';
23
-
24
- return (
25
- <PatternFormat
26
- name={field.name}
27
- value={field.value}
28
- onBlur={field.onBlur}
29
- onValueChange={(values) => {
30
- field.onChange(values.value);
31
- }}
32
- format={format}
33
- customInput={Input}
34
- placeholder="(11) 91234-1234"
35
- {...patternFormatProps}
36
- />
37
- );
38
- }}
39
- />
40
- );
41
- };
@@ -1,4 +0,0 @@
1
- export { FormFieldCNPJ } from './FormFieldCNPJ';
2
- export { FormFieldPhone } from './FormFieldPhone';
3
- export { FormFieldCEP } from './FormFieldCEP';
4
- export { isCnpjValid } from './FormFieldCNPJ';
package/src/Form.tsx DELETED
@@ -1,29 +0,0 @@
1
- import * as React from 'react';
2
- import { Box, BoxProps } from '@ttoss/ui';
3
- import { FieldValues, FormProvider, FormProviderProps } from 'react-hook-form';
4
-
5
- export const Form = <TFieldValues extends FieldValues = FieldValues>({
6
- children,
7
- onSubmit,
8
- sx,
9
- ...formMethods
10
- }: {
11
- children?: React.ReactNode;
12
- onSubmit?: (data: TFieldValues) => Promise<void> | void;
13
- sx?: BoxProps['sx'];
14
- } & FormProviderProps<TFieldValues>) => {
15
- return (
16
- <FormProvider {...formMethods}>
17
- <Box
18
- as="form"
19
- variant="forms.form"
20
- onSubmit={formMethods.handleSubmit((data) => {
21
- return onSubmit?.(data);
22
- })}
23
- sx={sx}
24
- >
25
- {children}
26
- </Box>
27
- </FormProvider>
28
- );
29
- };
@@ -1,60 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
- import { ErrorMessage } from '@hookform/error-message';
3
- import {
4
- FieldError,
5
- FieldName,
6
- FieldValues,
7
- useFormContext,
8
- } from 'react-hook-form';
9
- import { FormattedMessage, MessageDescriptor } from '@ttoss/react-i18n';
10
- import { HelpText } from '@ttoss/ui';
11
-
12
- type ModifiedDescriptor = MessageDescriptor & { values?: any };
13
-
14
- const isMessageDescriptor = (
15
- possibleMessageDescriptor: unknown
16
- ): possibleMessageDescriptor is ModifiedDescriptor => {
17
- return (
18
- possibleMessageDescriptor !== undefined &&
19
- (possibleMessageDescriptor as ModifiedDescriptor).defaultMessage !==
20
- undefined
21
- );
22
- };
23
-
24
- export const FormErrorMessage = <
25
- TFieldValues extends FieldValues = FieldValues,
26
- >({
27
- name,
28
- disabled,
29
- }: {
30
- name: FieldName<TFieldValues>;
31
- disabled?: boolean;
32
- }) => {
33
- const {
34
- formState: { errors },
35
- } = useFormContext<TFieldValues>();
36
-
37
- return (
38
- <ErrorMessage
39
- name={name as any}
40
- errors={errors}
41
- render={({ message }: { message: FieldError | string }) => {
42
- return (
43
- <HelpText negative disabled={disabled}>
44
- {(() => {
45
- if (typeof message === 'string') {
46
- return message;
47
- }
48
-
49
- if (isMessageDescriptor(message)) {
50
- return <FormattedMessage {...message} />;
51
- }
52
-
53
- return JSON.stringify(message);
54
- })()}
55
- </HelpText>
56
- );
57
- }}
58
- />
59
- );
60
- };
package/src/FormField.tsx DELETED
@@ -1,86 +0,0 @@
1
- import * as React from 'react';
2
- import {
3
- FieldPath,
4
- FieldPathValue,
5
- FieldValues,
6
- UseControllerReturn,
7
- useController,
8
- } from 'react-hook-form';
9
- import { Flex, Label, type SxProp } from '@ttoss/ui';
10
- import { FormErrorMessage } from './FormErrorMessage';
11
-
12
- export type FormFieldProps<
13
- TFieldValues extends FieldValues = FieldValues,
14
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
15
- > = {
16
- label?: string;
17
- id?: string;
18
- name: TName;
19
- defaultValue?: FieldPathValue<TFieldValues, TName>;
20
- disabled?: boolean;
21
- tooltip?: boolean;
22
- onTooltipClick?: () => void;
23
- } & SxProp;
24
-
25
- type FormFieldCompleteProps<
26
- TFieldValues extends FieldValues = FieldValues,
27
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
28
- > = {
29
- render: (
30
- props: UseControllerReturn<TFieldValues, TName>
31
- ) => React.ReactElement;
32
- } & FormFieldProps<TFieldValues, TName>;
33
-
34
- export const FormField = <
35
- TFieldValues extends FieldValues = FieldValues,
36
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
37
- >({
38
- label,
39
- id: idProp,
40
- name,
41
- defaultValue,
42
- disabled,
43
- tooltip,
44
- onTooltipClick,
45
- sx,
46
- css,
47
- render,
48
- }: FormFieldCompleteProps<TFieldValues, TName>) => {
49
- const controllerReturn = useController<TFieldValues, TName>({
50
- name,
51
- defaultValue,
52
- });
53
-
54
- const id = idProp || `form-field-${name}`;
55
-
56
- const memoizedRender = React.useMemo(() => {
57
- return React.Children.map(render(controllerReturn), (child) => {
58
- return (
59
- <>
60
- {label && (
61
- <Label
62
- aria-disabled={disabled}
63
- htmlFor={id}
64
- tooltip={tooltip}
65
- onTooltipClick={onTooltipClick}
66
- >
67
- {label}
68
- </Label>
69
- )}
70
-
71
- {React.createElement(child.type, { id, ...child.props })}
72
- </>
73
- );
74
- });
75
- }, [controllerReturn, disabled, onTooltipClick, tooltip, id, label, render]);
76
-
77
- return (
78
- <Flex
79
- sx={{ flexDirection: 'column', width: '100%', gap: 'md', ...sx }}
80
- css={css}
81
- >
82
- {memoizedRender}
83
- <FormErrorMessage name={name} />
84
- </Flex>
85
- );
86
- };
@@ -1,49 +0,0 @@
1
- import { Checkbox, type CheckboxProps, Flex, Label } from '@ttoss/ui';
2
- import { FieldPath, FieldValues, useController } from 'react-hook-form';
3
- import { FormErrorMessage } from './FormErrorMessage';
4
-
5
- export const FormFieldCheckbox = <
6
- TFieldValues extends FieldValues = FieldValues,
7
- >({
8
- label,
9
- name,
10
- sx,
11
- ...checkboxProps
12
- }: {
13
- label?: string;
14
- name: FieldPath<TFieldValues>;
15
- } & CheckboxProps) => {
16
- const {
17
- field: { onChange, onBlur, value, ref },
18
- formState: { errors },
19
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
20
- } = useController<any>({
21
- name,
22
- defaultValue: false,
23
- });
24
-
25
- const id = `form-field-checkbox-${name}`;
26
-
27
- const error = !!errors[name]?.message;
28
-
29
- return (
30
- <Flex sx={{ flexDirection: 'column', width: '100%', ...sx }}>
31
- <Flex sx={{ alignItems: 'center' }}>
32
- <Label aria-disabled={checkboxProps.disabled} htmlFor={id}>
33
- <Checkbox
34
- id={id}
35
- ref={ref}
36
- checked={value}
37
- onChange={onChange}
38
- onBlur={onBlur}
39
- name={name}
40
- aria-invalid={error ? 'true' : 'false'}
41
- {...checkboxProps}
42
- />
43
- {label}
44
- </Label>
45
- </Flex>
46
- <FormErrorMessage name={name} />
47
- </Flex>
48
- );
49
- };
@@ -1,25 +0,0 @@
1
- import {
2
- FormFieldPatternFormat,
3
- FormFieldPatternFormatProps,
4
- } from './FormFieldPatternFormat';
5
-
6
- export type FormFieldCreditCardNumberProps = {
7
- label: string;
8
- name: string;
9
- } & Partial<FormFieldPatternFormatProps>;
10
-
11
- export const FormFieldCreditCardNumber = ({
12
- label,
13
- name,
14
- ...formFieldPatternFormatProps
15
- }: FormFieldCreditCardNumberProps) => {
16
- return (
17
- <FormFieldPatternFormat
18
- name={name}
19
- label={label}
20
- format="#### #### #### ####"
21
- placeholder="1234 1234 1234 1234"
22
- {...formFieldPatternFormatProps}
23
- />
24
- );
25
- };
@@ -1,36 +0,0 @@
1
- import {
2
- FormFieldNumericFormat,
3
- FormFieldNumericFormatProps,
4
- } from './FormFieldNumericFormat';
5
-
6
- export type FormFieldCurrencyInputProps = {
7
- label?: string;
8
- name: string;
9
- prefix: string;
10
- decimalSeparator: string;
11
- thousandSeparator: string;
12
- } & FormFieldNumericFormatProps;
13
-
14
- export const FormFieldCurrencyInput = ({
15
- label,
16
- name,
17
- prefix,
18
- decimalSeparator,
19
- thousandSeparator,
20
- ...formFieldNumericFormatProps
21
- }: FormFieldCurrencyInputProps) => {
22
- return (
23
- <FormFieldNumericFormat
24
- name={name}
25
- label={label}
26
- fixedDecimalScale
27
- decimalScale={2}
28
- prefix={prefix}
29
- decimalSeparator={decimalSeparator}
30
- thousandSeparator={thousandSeparator}
31
- placeholder={`${prefix} 0${decimalSeparator}00`}
32
- allowNegative={false}
33
- {...formFieldNumericFormatProps}
34
- />
35
- );
36
- };
@@ -1,43 +0,0 @@
1
- import { FieldPath, FieldPathValue, FieldValues } from 'react-hook-form';
2
- import { FormField, type FormFieldProps } from './FormField';
3
- import { Input, type InputProps } from '@ttoss/ui';
4
-
5
- export type FormFieldInputProps<TName> = {
6
- label?: string;
7
- name: TName;
8
- } & InputProps &
9
- FormFieldProps;
10
-
11
- export const FormFieldInput = <
12
- TFieldValues extends FieldValues = FieldValues,
13
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
14
- >({
15
- label,
16
- name,
17
- tooltip,
18
- onTooltipClick,
19
- sx,
20
- defaultValue = '',
21
- ...inputProps
22
- }: FormFieldInputProps<TName>) => {
23
- return (
24
- <FormField
25
- name={name}
26
- label={label}
27
- disabled={inputProps.disabled}
28
- tooltip={tooltip}
29
- onTooltipClick={onTooltipClick}
30
- sx={sx}
31
- defaultValue={defaultValue as FieldPathValue<TFieldValues, TName>}
32
- render={({ field, fieldState }) => {
33
- return (
34
- <Input
35
- {...inputProps}
36
- {...field}
37
- aria-invalid={fieldState.error ? 'true' : undefined}
38
- />
39
- );
40
- }}
41
- />
42
- );
43
- };
@@ -1,35 +0,0 @@
1
- import { FormField } from './FormField';
2
- import { Input } from '@ttoss/ui';
3
- import { NumericFormat, NumericFormatProps } from 'react-number-format';
4
-
5
- export type FormFieldNumericFormatProps = {
6
- label?: string;
7
- name: string;
8
- } & NumericFormatProps;
9
-
10
- export const FormFieldNumericFormat = ({
11
- label,
12
- name,
13
- ...numericFormatProps
14
- }: FormFieldNumericFormatProps) => {
15
- return (
16
- <FormField
17
- label={label}
18
- name={name}
19
- render={({ field }) => {
20
- return (
21
- <NumericFormat
22
- name={field.name}
23
- value={field.value}
24
- onBlur={field.onBlur}
25
- onValueChange={(values) => {
26
- field.onChange(values.floatValue);
27
- }}
28
- customInput={Input}
29
- {...numericFormatProps}
30
- />
31
- );
32
- }}
33
- />
34
- );
35
- };
@@ -1,43 +0,0 @@
1
- import { FieldPath, FieldPathValue, FieldValues } from 'react-hook-form';
2
- import { FormField, type FormFieldProps } from './FormField';
3
- import { InputPassword, type InputPasswordProps } from '@ttoss/ui';
4
-
5
- export type FormFieldPasswordProps<TName> = {
6
- label?: string;
7
- name: TName;
8
- } & InputPasswordProps &
9
- FormFieldProps;
10
-
11
- export const FormFieldPassword = <
12
- TFieldValues extends FieldValues = FieldValues,
13
- TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
14
- >({
15
- label,
16
- name,
17
- tooltip,
18
- onTooltipClick,
19
- sx,
20
- defaultValue = '',
21
- ...inputProps
22
- }: FormFieldPasswordProps<TName>) => {
23
- return (
24
- <FormField
25
- name={name}
26
- label={label}
27
- disabled={inputProps.disabled}
28
- tooltip={tooltip}
29
- onTooltipClick={onTooltipClick}
30
- sx={sx}
31
- defaultValue={defaultValue as FieldPathValue<TFieldValues, TName>}
32
- render={({ field, fieldState }) => {
33
- return (
34
- <InputPassword
35
- {...inputProps}
36
- {...field}
37
- aria-invalid={fieldState.error ? 'true' : undefined}
38
- />
39
- );
40
- }}
41
- />
42
- );
43
- };
@@ -1,36 +0,0 @@
1
- import { FormField } from './FormField';
2
- import { Input } from '@ttoss/ui';
3
- import { PatternFormat, PatternFormatProps } from 'react-number-format';
4
-
5
- export type FormFieldPatternFormatProps = {
6
- label?: string;
7
- name: string;
8
- } & PatternFormatProps;
9
-
10
- export const FormFieldPatternFormat = ({
11
- label,
12
- name,
13
- ...patternFormatProps
14
- }: FormFieldPatternFormatProps) => {
15
- return (
16
- <FormField
17
- name={name}
18
- label={label}
19
- render={({ field, fieldState }) => {
20
- return (
21
- <PatternFormat
22
- name={field.name}
23
- value={field.value}
24
- onBlur={field.onBlur}
25
- onValueChange={(values) => {
26
- field.onChange(values.value);
27
- }}
28
- customInput={Input}
29
- aria-invalid={Boolean(fieldState.error).valueOf()}
30
- {...patternFormatProps}
31
- />
32
- );
33
- }}
34
- />
35
- );
36
- };