@digigov/form 2.0.0-rc.23 → 2.0.0-rc.24

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 (30) hide show
  1. package/Field/types.d.ts +1 -0
  2. package/cjs/Field/types.js.map +1 -1
  3. package/cjs/inputs/Input/__stories__/LandlineNumber/index.js +1 -0
  4. package/cjs/inputs/Input/__stories__/LandlineNumber.js.map +2 -2
  5. package/cjs/inputs/Input/__stories__/MobilePhone/index.js +1 -0
  6. package/cjs/inputs/Input/__stories__/MobilePhone.js.map +2 -2
  7. package/cjs/inputs/Input/__stories__/PhoneNumber/index.js +1 -0
  8. package/cjs/inputs/Input/__stories__/PhoneNumber.js.map +2 -2
  9. package/cjs/inputs/Input/__stories__/PostalCode/index.js +1 -0
  10. package/cjs/inputs/Input/__stories__/PostalCode.js.map +2 -2
  11. package/cjs/validators/index.js +13 -4
  12. package/cjs/validators/index.js.map +2 -2
  13. package/index.js +1 -1
  14. package/inputs/Input/__stories__/LandlineNumber/index.js +1 -0
  15. package/inputs/Input/__stories__/LandlineNumber.js.map +2 -2
  16. package/inputs/Input/__stories__/MobilePhone/index.js +1 -0
  17. package/inputs/Input/__stories__/MobilePhone.js.map +2 -2
  18. package/inputs/Input/__stories__/PhoneNumber/index.js +1 -0
  19. package/inputs/Input/__stories__/PhoneNumber.js.map +2 -2
  20. package/inputs/Input/__stories__/PostalCode/index.js +1 -0
  21. package/inputs/Input/__stories__/PostalCode.js.map +2 -2
  22. package/package.json +4 -4
  23. package/src/Field/types.tsx +1 -0
  24. package/src/inputs/Input/__stories__/LandlineNumber.tsx +2 -1
  25. package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -0
  26. package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -0
  27. package/src/inputs/Input/__stories__/PostalCode.tsx +1 -0
  28. package/src/validators/index.ts +27 -5
  29. package/validators/index.js +13 -4
  30. package/validators/index.js.map +2 -2
package/Field/types.d.ts CHANGED
@@ -10,6 +10,7 @@ export interface FieldSpec {
10
10
  key: string;
11
11
  type?: 'int' | 'string' | 'text' | 'boolean' | 'email' | 'uuid4' | 'choice:multiple' | 'choice:single' | 'mobile_phone' | 'date' | 'otp' | 'afm' | 'iban' | 'file' | 'image' | 'postal_code' | 'phone_number' | 'array' | 'object';
12
12
  component?: any;
13
+ autoComplete?: string;
13
14
  maxLength?: number;
14
15
  condition?: Record<string, FieldCondition>;
15
16
  controlled?: boolean;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/Field/types.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport { ErrorOption, UseFormReturn, UseFormProps } from 'react-hook-form';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\nimport { GridProps } from '@digigov/ui/layouts/Grid';\n\nexport type FieldLabelProps = {\n primary?: string;\n secondary?: string;\n};\n\nexport interface FieldSpec {\n key: string; // !TODO rename key to name;\n type?:\n | 'int'\n | 'string'\n | 'text'\n | 'boolean'\n | 'email'\n | 'uuid4'\n | 'choice:multiple'\n | 'choice:single'\n | 'mobile_phone'\n | 'date'\n | 'otp'\n | 'afm'\n | 'iban'\n | 'file'\n | 'image'\n | 'postal_code'\n | 'phone_number'\n | 'array'\n | 'object';\n component?: any;\n maxLength?: number;\n condition?: Record<string, FieldCondition>;\n controlled?: boolean;\n label?: FieldLabelProps;\n extra?: {\n [key: string]: any;\n };\n editable?: boolean;\n required?: boolean;\n enabled?: boolean;\n disabled?: boolean;\n layout?: Record<\n string,\n | GridProps['xs']\n | GridProps['sm']\n | GridProps['md']\n | GridProps['lg']\n | GridProps['xl']\n >;\n validators?: ValidatorSchema[];\n wrapper?: 'label' | 'fieldset';\n maxWidth?: string;\n maxHeight?: string;\n width?: string;\n}\n\nexport interface FieldCondition {\n is: string | string[] | number | number[] | boolean | boolean[];\n then?: Partial<FieldSpec>;\n else?: Partial<FieldSpec>;\n}\nexport interface ChildFieldMemoProps extends FieldConditionalProps {\n dependencies: FormData;\n}\nexport type FormData = UseFormProps['defaultValues'];\n\nexport interface FieldWithCondition extends Omit<CalculatedField, 'condition'> {\n condition: Record<string, FieldCondition>;\n}\n\nexport interface FieldConditionalProps {\n field: FieldWithCondition;\n control: UseFormReturn['control'];\n register: UseFormReturn['register'];\n reset: UseFormReturn['reset'];\n error?: ErrorOption;\n Field: React.FC<FieldProps>;\n}\n\nexport type FieldComponentItem = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: any;\n controlled?: boolean;\n wrapper?: FieldSpec['wrapper'];\n};\n\nexport interface FieldContainerProps {\n name?: FieldSpec['key'];\n layout?: FieldSpec['layout'];\n label?: FieldSpec['label'];\n error?: ErrorOption | Record<string, any>;\n children?: React.ReactNode;\n wrapper?: FieldSpec['wrapper'];\n}\n\nexport type FieldComponentRegistry = Record<string, FieldComponentItem>;\n\nexport type OmittedFieldSpec = Omit<FieldSpec, 'component'>;\n\nexport type UnknownValue = never | never[];\n\nexport interface ControlledFieldProps {\n type?: string;\n value: UnknownValue;\n onChange: (v: UnknownValue) => void;\n defaultValue?: UnknownValue;\n onBlur?: (e: Event) => void;\n extra?: never;\n error?: boolean;\n name?: string;\n disabled?: boolean;\n Field: React.FC<FieldProps>;\n}\n\nexport interface UncontrolledFieldProps {\n name: string;\n register: FieldBaseProps['register'];\n control?: FieldBaseProps['control'];\n error?: boolean;\n extra?: Record<string, never>;\n type?: string;\n disabled?: boolean;\n Field: React.FC<FieldProps>;\n}\n\nexport interface CalculatedField extends OmittedFieldSpec {\n name: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: any;\n defaultValue?: never;\n error?: ErrorOption;\n wrapper?: FieldComponentItem['wrapper'];\n multiplicity?: boolean;\n}\n\nexport interface FieldBaseProps extends CalculatedField {\n control: UseFormReturn['control'];\n register: UseFormReturn['register'];\n reset: UseFormReturn['reset'];\n Field: React.FC<FieldProps>;\n}\n\nexport interface FieldProps extends FieldSpec {\n name: string;\n children?: React.ReactNode;\n}\n\nexport interface UseFieldProps {\n field: FieldSpec;\n control: FieldBaseProps['control'];\n register: FieldBaseProps['register'];\n reset: FieldBaseProps['reset'];\n watch: UseFormReturn['watch'];\n formState: UseFormReturn['formState'];\n getFieldState: UseFormReturn['getFieldState'];\n setValue: UseFormReturn['setValue'];\n getValues: UseFormReturn['getValues'];\n unregister: UseFormReturn['unregister'];\n trigger: UseFormReturn['trigger'];\n clearErrors: UseFormReturn['clearErrors'];\n error?: ErrorOption;\n componentRegistry?: FieldComponentRegistry;\n}\n"],
4
+ "sourcesContent": ["import React from 'react';\nimport { ErrorOption, UseFormReturn, UseFormProps } from 'react-hook-form';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\nimport { GridProps } from '@digigov/ui/layouts/Grid';\n\nexport type FieldLabelProps = {\n primary?: string;\n secondary?: string;\n};\n\nexport interface FieldSpec {\n key: string; // !TODO rename key to name;\n type?:\n | 'int'\n | 'string'\n | 'text'\n | 'boolean'\n | 'email'\n | 'uuid4'\n | 'choice:multiple'\n | 'choice:single'\n | 'mobile_phone'\n | 'date'\n | 'otp'\n | 'afm'\n | 'iban'\n | 'file'\n | 'image'\n | 'postal_code'\n | 'phone_number'\n | 'array'\n | 'object';\n component?: any;\n autoComplete?: string;\n maxLength?: number;\n condition?: Record<string, FieldCondition>;\n controlled?: boolean;\n label?: FieldLabelProps;\n extra?: {\n [key: string]: any;\n };\n editable?: boolean;\n required?: boolean;\n enabled?: boolean;\n disabled?: boolean;\n layout?: Record<\n string,\n | GridProps['xs']\n | GridProps['sm']\n | GridProps['md']\n | GridProps['lg']\n | GridProps['xl']\n >;\n validators?: ValidatorSchema[];\n wrapper?: 'label' | 'fieldset';\n maxWidth?: string;\n maxHeight?: string;\n width?: string;\n}\n\nexport interface FieldCondition {\n is: string | string[] | number | number[] | boolean | boolean[];\n then?: Partial<FieldSpec>;\n else?: Partial<FieldSpec>;\n}\nexport interface ChildFieldMemoProps extends FieldConditionalProps {\n dependencies: FormData;\n}\nexport type FormData = UseFormProps['defaultValues'];\n\nexport interface FieldWithCondition extends Omit<CalculatedField, 'condition'> {\n condition: Record<string, FieldCondition>;\n}\n\nexport interface FieldConditionalProps {\n field: FieldWithCondition;\n control: UseFormReturn['control'];\n register: UseFormReturn['register'];\n reset: UseFormReturn['reset'];\n error?: ErrorOption;\n Field: React.FC<FieldProps>;\n}\n\nexport type FieldComponentItem = {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: any;\n controlled?: boolean;\n wrapper?: FieldSpec['wrapper'];\n};\n\nexport interface FieldContainerProps {\n name?: FieldSpec['key'];\n layout?: FieldSpec['layout'];\n label?: FieldSpec['label'];\n error?: ErrorOption | Record<string, any>;\n children?: React.ReactNode;\n wrapper?: FieldSpec['wrapper'];\n}\n\nexport type FieldComponentRegistry = Record<string, FieldComponentItem>;\n\nexport type OmittedFieldSpec = Omit<FieldSpec, 'component'>;\n\nexport type UnknownValue = never | never[];\n\nexport interface ControlledFieldProps {\n type?: string;\n value: UnknownValue;\n onChange: (v: UnknownValue) => void;\n defaultValue?: UnknownValue;\n onBlur?: (e: Event) => void;\n extra?: never;\n error?: boolean;\n name?: string;\n disabled?: boolean;\n Field: React.FC<FieldProps>;\n}\n\nexport interface UncontrolledFieldProps {\n name: string;\n register: FieldBaseProps['register'];\n control?: FieldBaseProps['control'];\n error?: boolean;\n extra?: Record<string, never>;\n type?: string;\n disabled?: boolean;\n Field: React.FC<FieldProps>;\n}\n\nexport interface CalculatedField extends OmittedFieldSpec {\n name: string;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n component: any;\n defaultValue?: never;\n error?: ErrorOption;\n wrapper?: FieldComponentItem['wrapper'];\n multiplicity?: boolean;\n}\n\nexport interface FieldBaseProps extends CalculatedField {\n control: UseFormReturn['control'];\n register: UseFormReturn['register'];\n reset: UseFormReturn['reset'];\n Field: React.FC<FieldProps>;\n}\n\nexport interface FieldProps extends FieldSpec {\n name: string;\n children?: React.ReactNode;\n}\n\nexport interface UseFieldProps {\n field: FieldSpec;\n control: FieldBaseProps['control'];\n register: FieldBaseProps['register'];\n reset: FieldBaseProps['reset'];\n watch: UseFormReturn['watch'];\n formState: UseFormReturn['formState'];\n getFieldState: UseFormReturn['getFieldState'];\n setValue: UseFormReturn['setValue'];\n getValues: UseFormReturn['getValues'];\n unregister: UseFormReturn['unregister'];\n trigger: UseFormReturn['trigger'];\n clearErrors: UseFormReturn['clearErrors'];\n error?: ErrorOption;\n componentRegistry?: FieldComponentRegistry;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -47,6 +47,7 @@ const LandlineNumber = () => /* @__PURE__ */ import_react.default.createElement(
47
47
  key: "phone-number",
48
48
  name: "phone-number",
49
49
  type: "phone_number",
50
+ autoComplete: "tel",
50
51
  label: {
51
52
  primary: "\u03A3\u03C4\u03B1\u03B8\u03B5\u03C1\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF"
52
53
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/inputs/Input/__stories__/LandlineNumber.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const LandlineNumber = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"phone-number\"\n name=\"phone-number\"\n type=\"phone_number\"\n label={{\n primary: '\u03A3\u03C4\u03B1\u03B8\u03B5\u03C1\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n phoneType:'landline',\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default LandlineNumber;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAmC;AACnC,oBAAuB;AAEhB,MAAM,iBAAiB,MAC5B,6BAAAA,QAAA;AAAA,EAAC,YAAAC;AAAA,EAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA,6BAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,QAChB,WAAU;AAAA,MACZ;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,6BAAAA,QAAA,cAAC,wBAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,yBAAQ;",
4
+ "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const LandlineNumber = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"phone-number\"\n name=\"phone-number\"\n type=\"phone_number\"\n autoComplete='tel'\n label={{\n primary: '\u03A3\u03C4\u03B1\u03B8\u03B5\u03C1\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n phoneType: 'landline',\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default LandlineNumber;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAmC;AACnC,oBAAuB;AAEhB,MAAM,iBAAiB,MAC5B,6BAAAA,QAAA;AAAA,EAAC,YAAAC;AAAA,EAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA,6BAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAa;AAAA,MACb,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,QAChB,WAAW;AAAA,MACb;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,6BAAAA,QAAA,cAAC,wBAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,yBAAQ;",
6
6
  "names": ["React", "FormBuilder"]
7
7
  }
@@ -47,6 +47,7 @@ const MobilePhone = () => /* @__PURE__ */ import_react.default.createElement(
47
47
  key: "mobile-phone",
48
48
  name: "mobile-phone",
49
49
  type: "mobile_phone",
50
+ autoComplete: "tel",
50
51
  label: {
51
52
  primary: "\u039A\u03B9\u03BD\u03B7\u03C4\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF"
52
53
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/inputs/Input/__stories__/MobilePhone.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const MobilePhone = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"mobile-phone\"\n name=\"mobile-phone\"\n type=\"mobile_phone\"\n label={{\n primary: '\u039A\u03B9\u03BD\u03B7\u03C4\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n phoneType: 'mobile',\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default MobilePhone;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAmC;AACnC,oBAAuB;AAEhB,MAAM,cAAc,MACzB,6BAAAA,QAAA;AAAA,EAAC,YAAAC;AAAA,EAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA,6BAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,QAChB,WAAW;AAAA,MACb;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,6BAAAA,QAAA,cAAC,wBAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,sBAAQ;",
4
+ "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const MobilePhone = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"mobile-phone\"\n name=\"mobile-phone\"\n type=\"mobile_phone\"\n autoComplete='tel'\n label={{\n primary: '\u039A\u03B9\u03BD\u03B7\u03C4\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n phoneType: 'mobile',\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default MobilePhone;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAmC;AACnC,oBAAuB;AAEhB,MAAM,cAAc,MACzB,6BAAAA,QAAA;AAAA,EAAC,YAAAC;AAAA,EAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA,6BAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAa;AAAA,MACb,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,QAChB,WAAW;AAAA,MACb;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,6BAAAA,QAAA,cAAC,wBAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,sBAAQ;",
6
6
  "names": ["React", "FormBuilder"]
7
7
  }
@@ -47,6 +47,7 @@ const PhoneNumber = () => /* @__PURE__ */ import_react.default.createElement(
47
47
  key: "phone-number",
48
48
  name: "phone-number",
49
49
  type: "phone_number",
50
+ autoComplete: "tel",
50
51
  label: {
51
52
  primary: "T\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF"
52
53
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/inputs/Input/__stories__/PhoneNumber.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const PhoneNumber = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"phone-number\"\n name=\"phone-number\"\n type=\"phone_number\"\n label={{\n primary: 'T\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default PhoneNumber;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAmC;AACnC,oBAAuB;AAEhB,MAAM,cAAc,MACzB,6BAAAA,QAAA;AAAA,EAAC,YAAAC;AAAA,EAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA,6BAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,MAClB;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,6BAAAA,QAAA,cAAC,wBAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,sBAAQ;",
4
+ "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const PhoneNumber = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"phone-number\"\n name=\"phone-number\"\n type=\"phone_number\"\n autoComplete='tel'\n label={{\n primary: 'T\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default PhoneNumber;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAmC;AACnC,oBAAuB;AAEhB,MAAM,cAAc,MACzB,6BAAAA,QAAA;AAAA,EAAC,YAAAC;AAAA,EAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA,6BAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAa;AAAA,MACb,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,MAClB;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,6BAAAA,QAAA,cAAC,wBAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,sBAAQ;",
6
6
  "names": ["React", "FormBuilder"]
7
7
  }
@@ -47,6 +47,7 @@ const PostalCode = () => /* @__PURE__ */ import_react.default.createElement(
47
47
  key: "postal-code",
48
48
  name: "postal-code",
49
49
  type: "postal_code",
50
+ autoComplete: "postal-code",
50
51
  label: {
51
52
  primary: "\u03A4\u03B1\u03C7\u03C5\u03B4\u03C1\u03BF\u03BC\u03B9\u03BA\u03CC\u03C2 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2"
52
53
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/inputs/Input/__stories__/PostalCode.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const PostalCode = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"postal-code\"\n name=\"postal-code\"\n type=\"postal_code\"\n label={{\n primary: '\u03A4\u03B1\u03C7\u03C5\u03B4\u03C1\u03BF\u03BC\u03B9\u03BA\u03CC\u03C2 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2',\n }}\n required\n extra={{ countries: ['GR'] }}\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default PostalCode;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAmC;AACnC,oBAAuB;AAEhB,MAAM,aAAa,MACxB,6BAAAA,QAAA;AAAA,EAAC,YAAAC;AAAA,EAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA,6BAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,UAAQ;AAAA,MACR,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE;AAAA;AAAA,EAC7B;AAAA,EACA,6BAAAA,QAAA,cAAC,wBAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,qBAAQ;",
4
+ "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const PostalCode = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"postal-code\"\n name=\"postal-code\"\n type=\"postal_code\"\n autoComplete='postal-code'\n label={{\n primary: '\u03A4\u03B1\u03C7\u03C5\u03B4\u03C1\u03BF\u03BC\u03B9\u03BA\u03CC\u03C2 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2',\n }}\n required\n extra={{ countries: ['GR'] }}\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default PostalCode;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAmC;AACnC,oBAAuB;AAEhB,MAAM,aAAa,MACxB,6BAAAA,QAAA;AAAA,EAAC,YAAAC;AAAA,EAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA,6BAAAD,QAAA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAa;AAAA,MACb,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,UAAQ;AAAA,MACR,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE;AAAA;AAAA,EAC7B;AAAA,EACA,6BAAAA,QAAA,cAAC,wBAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,qBAAQ;",
6
6
  "names": ["React", "FormBuilder"]
7
7
  }
@@ -47,7 +47,14 @@ const getYUPTypeMap = () => {
47
47
  }).nullable().test((0, import_utils.FILE_MAX_SIZE_VALIDATOR)(field));
48
48
  },
49
49
  string: yup.string,
50
- boolean: yup.boolean,
50
+ boolean: () => {
51
+ return yup.boolean().nullable().transform((value) => {
52
+ if (value === "" || typeof value === "string") return null;
53
+ if (typeof value === "boolean") return value;
54
+ if (value === 0 || value === 1) return Boolean(value);
55
+ return value;
56
+ });
57
+ },
51
58
  object: (field) => {
52
59
  return (0, import_utils.getYupObjectShape)(field.extra.fields, yupTypeMap);
53
60
  },
@@ -110,14 +117,16 @@ const getYUPTypeMap = () => {
110
117
  "choice:multiple": () => yup.array().of(yup.string()).nullable(),
111
118
  "choice:single": () => yup.string().nullable(),
112
119
  date: (field) => {
120
+ let schema = yup.string().nullable();
113
121
  if (field?.extra?.min) {
114
- return yup.string().test((0, import_utils.LATER_THAN_VALIDATOR)(field));
122
+ schema = schema.test((0, import_utils.LATER_THAN_VALIDATOR)(field));
115
123
  }
116
124
  if (field?.extra?.max) {
117
- return yup.string().test((0, import_utils.EARLIER_THAN_VALIDATOR)(field));
125
+ schema = schema.test((0, import_utils.EARLIER_THAN_VALIDATOR)(field));
118
126
  } else {
119
- return yup.string().test(import_utils.DATE_VALIDATOR);
127
+ schema = schema.test(import_utils.DATE_VALIDATOR);
120
128
  }
129
+ return schema;
121
130
  }
122
131
  };
123
132
  return yupTypeMap;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/validators/index.ts"],
4
- "sourcesContent": ["import { MutableRefObject, useMemo } from 'react';\nimport * as yup from 'yup';\nimport { AnyObjectSchema, StringSchema } from 'yup';\nimport { RequiredArraySchema } from 'yup/lib/array';\nimport Lazy from 'yup/lib/Lazy';\nimport { MixedSchema } from 'yup/lib/mixed';\nimport { TypeOfShape, AssertsShape } from 'yup/lib/object';\nimport { AnyObject } from 'yup/lib/types';\nimport { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\nimport {\n getYupObjectShape,\n AFM_VALIDATOR,\n FILE_MAX_SIZE_VALIDATOR,\n IBAN_VALIDATOR,\n OTP_VALIDATOR,\n MOBILE_PHONE_VALIDATOR,\n PHONE_NUMBER_VALIDATOR,\n TEXT_LIMIT_VALIDATOR,\n POSTALCODE_VALIDATOR,\n UUID4_VALIDATOR,\n IMAGE_DIMENSION_VALIDATOR,\n DATE_VALIDATOR,\n LATER_THAN_VALIDATOR,\n EARLIER_THAN_VALIDATOR,\n} from '@digigov/form/validators/utils';\nimport { INT_VALIDATOR } from '@digigov/form/validators/utils/int';\nimport { NUMBER_VALIDATOR } from '@digigov/form/validators/utils/number';\n\nexport const getYUPTypeMap = (): Record<string, any> => {\n const yupTypeMap = {\n file: (field): MixedSchema => {\n return yup\n .mixed()\n .transform((value) => {\n if (!value.length) {\n return null;\n }\n return value;\n })\n .nullable()\n .test(FILE_MAX_SIZE_VALIDATOR(field));\n },\n string: yup.string,\n boolean: yup.boolean,\n object: (\n field\n ):\n | yup.ObjectSchema<any, AnyObject, TypeOfShape<any>, AssertsShape<any>>\n | Lazy<any, unknown> => {\n return getYupObjectShape(field.extra.fields, yupTypeMap);\n },\n array: (\n field\n ):\n | yup.ArraySchema<any, AnyObject, any[] | undefined>\n | RequiredArraySchema<any, AnyObject, any[] | undefined> => {\n if (typeof field.extra.of === 'object') {\n // else if the field is an object then it is a scalar type\n // eg. number, string etc.\n let arrayValidator = yup\n .array()\n .of(yupTypeMap[field.extra.of.type](field.extra.of))\n .required(field.required);\n if (field.extra.length)\n arrayValidator = arrayValidator.length(field.extra.length, {\n key: 'form.error.array.length',\n context: {\n length: field.extra.length,\n },\n });\n if (field.extra.min)\n arrayValidator = arrayValidator.min(field.extra.min, {\n key: 'form.error.array.min',\n context: {\n min: field.extra.min,\n },\n });\n if (field.extra.max)\n arrayValidator = arrayValidator.max(field.extra.max, {\n key: 'form.error.array.max',\n context: {\n max: field.extra.max,\n },\n });\n return arrayValidator;\n } else if (typeof field.extra.of === 'string') {\n return yup.array().of(yupTypeMap[field.extra.of]());\n } else {\n // in any other case it will be string\n return yup.array().of(yup.string());\n }\n },\n number: (): MixedSchema =>\n yup\n .mixed()\n .transform((_, val) => (val !== '' ? Number(val) : null))\n .test(NUMBER_VALIDATOR()),\n int: (): MixedSchema =>\n yup\n .mixed()\n .transform((_, val) => (val !== '' ? Number(val) : null))\n .test(NUMBER_VALIDATOR())\n .test(INT_VALIDATOR()),\n email: (): yup.StringSchema => yup.string().email('form.error.email'),\n afm: (): yup.StringSchema => yup.string().test(AFM_VALIDATOR),\n uuid4: (): yup.StringSchema => yup.string().test(UUID4_VALIDATOR),\n iban: (field): yup.StringSchema => yup.string().test(IBAN_VALIDATOR(field)),\n otp: (field): yup.StringSchema => yup.string().test(OTP_VALIDATOR(field)),\n text: (field): yup.StringSchema => {\n if (field?.extra?.limit?.max || !!field?.extra?.limit?.min) {\n return yup.string().test(TEXT_LIMIT_VALIDATOR(field));\n } else {\n return yup.string();\n }\n },\n image: (field): MixedSchema => {\n return yup\n .mixed()\n .transform((value) => {\n if (!value.length || value.length === 0) {\n return null;\n }\n return value;\n })\n .nullable()\n .test(FILE_MAX_SIZE_VALIDATOR(field))\n .test(IMAGE_DIMENSION_VALIDATOR(field));\n },\n postal_code: (field): yup.StringSchema =>\n yup.string().test(POSTALCODE_VALIDATOR(field)),\n mobile_phone: (): yup.StringSchema =>\n yup.string().test(MOBILE_PHONE_VALIDATOR),\n phone_number: (field): yup.StringSchema =>\n yup.string().test(PHONE_NUMBER_VALIDATOR(field)),\n 'choice:multiple': (): yup.ArraySchema<\n yup.StringSchema<string | undefined, AnyObject, string | undefined>,\n AnyObject,\n (string | undefined)[] | null | undefined,\n (string | undefined)[] | null | undefined\n > => yup.array().of(yup.string()).nullable(),\n 'choice:single': (): StringSchema<\n string | null | undefined,\n AnyObject,\n string | null | undefined\n > => yup.string().nullable(),\n date: (field): yup.StringSchema => {\n if (field?.extra?.min) {\n return yup.string().test(LATER_THAN_VALIDATOR(field));\n }\n if (field?.extra?.max) {\n return yup.string().test(EARLIER_THAN_VALIDATOR(field));\n } else {\n return yup.string().test(DATE_VALIDATOR);\n }\n },\n };\n return yupTypeMap;\n};\n\nexport interface MutableRefObjectProps {}\n// Create a yup validation schema from given fields input\nexport function useValidationSchema(\n fields: FieldSpec[] | MutableRefObject<MutableRefObjectProps>,\n validatorRegistry?: Record<string, ValidatorSchema[]>\n): Lazy<any, unknown> | AnyObjectSchema | void {\n return useMemo(() => {\n const yupTypeMap = getYUPTypeMap();\n return getYupObjectShape(fields, yupTypeMap, validatorRegistry);\n }, []);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { MutableRefObject, useMemo } from 'react';\nimport * as yup from 'yup';\nimport { AnyObjectSchema, StringSchema } from 'yup';\nimport { RequiredArraySchema } from 'yup/lib/array';\nimport Lazy from 'yup/lib/Lazy';\nimport { MixedSchema } from 'yup/lib/mixed';\nimport { TypeOfShape, AssertsShape } from 'yup/lib/object';\nimport { AnyObject } from 'yup/lib/types';\nimport { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\nimport {\n getYupObjectShape,\n AFM_VALIDATOR,\n FILE_MAX_SIZE_VALIDATOR,\n IBAN_VALIDATOR,\n OTP_VALIDATOR,\n MOBILE_PHONE_VALIDATOR,\n PHONE_NUMBER_VALIDATOR,\n TEXT_LIMIT_VALIDATOR,\n POSTALCODE_VALIDATOR,\n UUID4_VALIDATOR,\n IMAGE_DIMENSION_VALIDATOR,\n DATE_VALIDATOR,\n LATER_THAN_VALIDATOR,\n EARLIER_THAN_VALIDATOR,\n} from '@digigov/form/validators/utils';\nimport { INT_VALIDATOR } from '@digigov/form/validators/utils/int';\nimport { NUMBER_VALIDATOR } from '@digigov/form/validators/utils/number';\n\nexport const getYUPTypeMap = (): Record<string, any> => {\n const yupTypeMap = {\n file: (field): MixedSchema => {\n return yup\n .mixed()\n .transform((value) => {\n if (!value.length) {\n return null;\n }\n return value;\n })\n .nullable()\n .test(FILE_MAX_SIZE_VALIDATOR(field));\n },\n string: yup.string,\n boolean: (): yup.BooleanSchema<\n boolean | null | undefined,\n AnyObject,\n boolean | null | undefined\n > => {\n return yup\n .boolean()\n .nullable()\n .transform((value) => {\n if (value === '' || typeof value === 'string') return null;\n if (typeof value === 'boolean') return value;\n if (value === 0 || value === 1) return Boolean(value);\n return value;\n });\n },\n object: (\n field\n ):\n | yup.ObjectSchema<any, AnyObject, TypeOfShape<any>, AssertsShape<any>>\n | Lazy<any, unknown> => {\n return getYupObjectShape(field.extra.fields, yupTypeMap);\n },\n array: (\n field\n ):\n | yup.ArraySchema<any, AnyObject, any[] | undefined>\n | RequiredArraySchema<any, AnyObject, any[] | undefined> => {\n if (typeof field.extra.of === 'object') {\n // else if the field is an object then it is a scalar type\n // eg. number, string etc.\n let arrayValidator = yup\n .array()\n .of(yupTypeMap[field.extra.of.type](field.extra.of))\n .required(field.required);\n if (field.extra.length)\n arrayValidator = arrayValidator.length(field.extra.length, {\n key: 'form.error.array.length',\n context: {\n length: field.extra.length,\n },\n });\n if (field.extra.min)\n arrayValidator = arrayValidator.min(field.extra.min, {\n key: 'form.error.array.min',\n context: {\n min: field.extra.min,\n },\n });\n if (field.extra.max)\n arrayValidator = arrayValidator.max(field.extra.max, {\n key: 'form.error.array.max',\n context: {\n max: field.extra.max,\n },\n });\n return arrayValidator;\n } else if (typeof field.extra.of === 'string') {\n return yup.array().of(yupTypeMap[field.extra.of]());\n } else {\n // in any other case it will be string\n return yup.array().of(yup.string());\n }\n },\n number: (): MixedSchema =>\n yup\n .mixed()\n .transform((_, val) => (val !== '' ? Number(val) : null))\n .test(NUMBER_VALIDATOR()),\n int: (): MixedSchema =>\n yup\n .mixed()\n .transform((_, val) => (val !== '' ? Number(val) : null))\n .test(NUMBER_VALIDATOR())\n .test(INT_VALIDATOR()),\n email: (): yup.StringSchema => yup.string().email('form.error.email'),\n afm: (): yup.StringSchema => yup.string().test(AFM_VALIDATOR),\n uuid4: (): yup.StringSchema => yup.string().test(UUID4_VALIDATOR),\n iban: (field): yup.StringSchema => yup.string().test(IBAN_VALIDATOR(field)),\n otp: (field): yup.StringSchema => yup.string().test(OTP_VALIDATOR(field)),\n text: (field): yup.StringSchema => {\n if (field?.extra?.limit?.max || !!field?.extra?.limit?.min) {\n return yup.string().test(TEXT_LIMIT_VALIDATOR(field));\n } else {\n return yup.string();\n }\n },\n image: (field): MixedSchema => {\n return yup\n .mixed()\n .transform((value) => {\n if (!value.length || value.length === 0) {\n return null;\n }\n return value;\n })\n .nullable()\n .test(FILE_MAX_SIZE_VALIDATOR(field))\n .test(IMAGE_DIMENSION_VALIDATOR(field));\n },\n postal_code: (field): yup.StringSchema =>\n yup.string().test(POSTALCODE_VALIDATOR(field)),\n mobile_phone: (): yup.StringSchema =>\n yup.string().test(MOBILE_PHONE_VALIDATOR),\n phone_number: (field): yup.StringSchema =>\n yup.string().test(PHONE_NUMBER_VALIDATOR(field)),\n 'choice:multiple': (): yup.ArraySchema<\n yup.StringSchema<string | undefined, AnyObject, string | undefined>,\n AnyObject,\n (string | undefined)[] | null | undefined,\n (string | undefined)[] | null | undefined\n > => yup.array().of(yup.string()).nullable(),\n 'choice:single': (): StringSchema<\n string | null | undefined,\n AnyObject,\n string | null | undefined\n > => yup.string().nullable(),\n date: (\n field\n ): yup.StringSchema<\n string | null | undefined,\n AnyObject,\n string | null | undefined\n > => {\n let schema = yup.string().nullable();\n if (field?.extra?.min) {\n schema = schema.test(LATER_THAN_VALIDATOR(field));\n }\n if (field?.extra?.max) {\n schema = schema.test(EARLIER_THAN_VALIDATOR(field));\n } else {\n schema = schema.test(DATE_VALIDATOR);\n }\n return schema;\n },\n };\n return yupTypeMap;\n};\n\nexport interface MutableRefObjectProps {}\n// Create a yup validation schema from given fields input\nexport function useValidationSchema(\n fields: FieldSpec[] | MutableRefObject<MutableRefObjectProps>,\n validatorRegistry?: Record<string, ValidatorSchema[]>\n): Lazy<any, unknown> | AnyObjectSchema | void {\n return useMemo(() => {\n const yupTypeMap = getYUPTypeMap();\n return getYupObjectShape(fields, yupTypeMap, validatorRegistry);\n }, []);\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAA0C;AAC1C,UAAqB;AASrB,mBAeO;AACP,iBAA8B;AAC9B,oBAAiC;AAE1B,MAAM,gBAAgB,MAA2B;AACtD,QAAM,aAAa;AAAA,IACjB,MAAM,CAAC,UAAuB;AAC5B,aAAO,IACJ,MAAM,EACN,UAAU,CAAC,UAAU;AACpB,YAAI,CAAC,MAAM,QAAQ;AACjB,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT,CAAC,EACA,SAAS,EACT,SAAK,sCAAwB,KAAK,CAAC;AAAA,IACxC;AAAA,IACA,QAAQ,IAAI;AAAA,IACZ,SAAS,MAIJ;AACH,aAAO,IACJ,QAAQ,EACR,SAAS,EACT,UAAU,CAAC,UAAU;AACpB,YAAI,UAAU,MAAM,OAAO,UAAU,SAAU,QAAO;AACtD,YAAI,OAAO,UAAU,UAAW,QAAO;AACvC,YAAI,UAAU,KAAK,UAAU,EAAG,QAAO,QAAQ,KAAK;AACpD,eAAO;AAAA,MACT,CAAC;AAAA,IACL;AAAA,IACA,QAAQ,CACN,UAGwB;AACxB,iBAAO,gCAAkB,MAAM,MAAM,QAAQ,UAAU;AAAA,IACzD;AAAA,IACA,OAAO,CACL,UAG4D;AAC5D,UAAI,OAAO,MAAM,MAAM,OAAO,UAAU;AAGtC,YAAI,iBAAiB,IAClB,MAAM,EACN,GAAG,WAAW,MAAM,MAAM,GAAG,IAAI,EAAE,MAAM,MAAM,EAAE,CAAC,EAClD,SAAS,MAAM,QAAQ;AAC1B,YAAI,MAAM,MAAM;AACd,2BAAiB,eAAe,OAAO,MAAM,MAAM,QAAQ;AAAA,YACzD,KAAK;AAAA,YACL,SAAS;AAAA,cACP,QAAQ,MAAM,MAAM;AAAA,YACtB;AAAA,UACF,CAAC;AACH,YAAI,MAAM,MAAM;AACd,2BAAiB,eAAe,IAAI,MAAM,MAAM,KAAK;AAAA,YACnD,KAAK;AAAA,YACL,SAAS;AAAA,cACP,KAAK,MAAM,MAAM;AAAA,YACnB;AAAA,UACF,CAAC;AACH,YAAI,MAAM,MAAM;AACd,2BAAiB,eAAe,IAAI,MAAM,MAAM,KAAK;AAAA,YACnD,KAAK;AAAA,YACL,SAAS;AAAA,cACP,KAAK,MAAM,MAAM;AAAA,YACnB;AAAA,UACF,CAAC;AACH,eAAO;AAAA,MACT,WAAW,OAAO,MAAM,MAAM,OAAO,UAAU;AAC7C,eAAO,IAAI,MAAM,EAAE,GAAG,WAAW,MAAM,MAAM,EAAE,EAAE,CAAC;AAAA,MACpD,OAAO;AAEL,eAAO,IAAI,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC;AAAA,MACpC;AAAA,IACF;AAAA,IACA,QAAQ,MACN,IACG,MAAM,EACN,UAAU,CAAC,GAAG,QAAS,QAAQ,KAAK,OAAO,GAAG,IAAI,IAAK,EACvD,SAAK,gCAAiB,CAAC;AAAA,IAC5B,KAAK,MACH,IACG,MAAM,EACN,UAAU,CAAC,GAAG,QAAS,QAAQ,KAAK,OAAO,GAAG,IAAI,IAAK,EACvD,SAAK,gCAAiB,CAAC,EACvB,SAAK,0BAAc,CAAC;AAAA,IACzB,OAAO,MAAwB,IAAI,OAAO,EAAE,MAAM,kBAAkB;AAAA,IACpE,KAAK,MAAwB,IAAI,OAAO,EAAE,KAAK,0BAAa;AAAA,IAC5D,OAAO,MAAwB,IAAI,OAAO,EAAE,KAAK,4BAAe;AAAA,IAChE,MAAM,CAAC,UAA4B,IAAI,OAAO,EAAE,SAAK,6BAAe,KAAK,CAAC;AAAA,IAC1E,KAAK,CAAC,UAA4B,IAAI,OAAO,EAAE,SAAK,4BAAc,KAAK,CAAC;AAAA,IACxE,MAAM,CAAC,UAA4B;AACjC,UAAI,OAAO,OAAO,OAAO,OAAO,CAAC,CAAC,OAAO,OAAO,OAAO,KAAK;AAC1D,eAAO,IAAI,OAAO,EAAE,SAAK,mCAAqB,KAAK,CAAC;AAAA,MACtD,OAAO;AACL,eAAO,IAAI,OAAO;AAAA,MACpB;AAAA,IACF;AAAA,IACA,OAAO,CAAC,UAAuB;AAC7B,aAAO,IACJ,MAAM,EACN,UAAU,CAAC,UAAU;AACpB,YAAI,CAAC,MAAM,UAAU,MAAM,WAAW,GAAG;AACvC,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT,CAAC,EACA,SAAS,EACT,SAAK,sCAAwB,KAAK,CAAC,EACnC,SAAK,wCAA0B,KAAK,CAAC;AAAA,IAC1C;AAAA,IACA,aAAa,CAAC,UACZ,IAAI,OAAO,EAAE,SAAK,mCAAqB,KAAK,CAAC;AAAA,IAC/C,cAAc,MACZ,IAAI,OAAO,EAAE,KAAK,mCAAsB;AAAA,IAC1C,cAAc,CAAC,UACb,IAAI,OAAO,EAAE,SAAK,qCAAuB,KAAK,CAAC;AAAA,IACjD,mBAAmB,MAKd,IAAI,MAAM,EAAE,GAAG,IAAI,OAAO,CAAC,EAAE,SAAS;AAAA,IAC3C,iBAAiB,MAIZ,IAAI,OAAO,EAAE,SAAS;AAAA,IAC3B,MAAM,CACJ,UAKG;AACH,UAAI,SAAS,IAAI,OAAO,EAAE,SAAS;AACnC,UAAI,OAAO,OAAO,KAAK;AACrB,iBAAS,OAAO,SAAK,mCAAqB,KAAK,CAAC;AAAA,MAClD;AACA,UAAI,OAAO,OAAO,KAAK;AACrB,iBAAS,OAAO,SAAK,qCAAuB,KAAK,CAAC;AAAA,MACpD,OAAO;AACL,iBAAS,OAAO,KAAK,2BAAc;AAAA,MACrC;AACA,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;AAIO,SAAS,oBACd,QACA,mBAC6C;AAC7C,aAAO,sBAAQ,MAAM;AACnB,UAAM,aAAa,cAAc;AACjC,eAAO,gCAAkB,QAAQ,YAAY,iBAAiB;AAAA,EAChE,GAAG,CAAC,CAAC;AACP;",
6
6
  "names": []
7
7
  }
package/index.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license Digigov v2.0.0-rc.23
1
+ /** @license Digigov v2.0.0-rc.24
2
2
  *
3
3
  * This source code is licensed under the BSD-2-Clause license found in the
4
4
  * LICENSE file in the root directory of this source tree.
@@ -14,6 +14,7 @@ const LandlineNumber = () => /* @__PURE__ */ React.createElement(
14
14
  key: "phone-number",
15
15
  name: "phone-number",
16
16
  type: "phone_number",
17
+ autoComplete: "tel",
17
18
  label: {
18
19
  primary: "\u03A3\u03C4\u03B1\u03B8\u03B5\u03C1\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF"
19
20
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/inputs/Input/__stories__/LandlineNumber.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const LandlineNumber = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"phone-number\"\n name=\"phone-number\"\n type=\"phone_number\"\n label={{\n primary: '\u03A3\u03C4\u03B1\u03B8\u03B5\u03C1\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n phoneType:'landline',\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default LandlineNumber;\n"],
5
- "mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,eAAe,aAAa;AACnC,SAAS,cAAc;AAEhB,MAAM,iBAAiB,MAC5B;AAAA,EAAC;AAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,QAChB,WAAU;AAAA,MACZ;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,oCAAC,UAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,yBAAQ;",
4
+ "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const LandlineNumber = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"phone-number\"\n name=\"phone-number\"\n type=\"phone_number\"\n autoComplete='tel'\n label={{\n primary: '\u03A3\u03C4\u03B1\u03B8\u03B5\u03C1\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n phoneType: 'landline',\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default LandlineNumber;\n"],
5
+ "mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,eAAe,aAAa;AACnC,SAAS,cAAc;AAEhB,MAAM,iBAAiB,MAC5B;AAAA,EAAC;AAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAa;AAAA,MACb,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,QAChB,WAAW;AAAA,MACb;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,oCAAC,UAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,yBAAQ;",
6
6
  "names": []
7
7
  }
@@ -14,6 +14,7 @@ const MobilePhone = () => /* @__PURE__ */ React.createElement(
14
14
  key: "mobile-phone",
15
15
  name: "mobile-phone",
16
16
  type: "mobile_phone",
17
+ autoComplete: "tel",
17
18
  label: {
18
19
  primary: "\u039A\u03B9\u03BD\u03B7\u03C4\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF"
19
20
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/inputs/Input/__stories__/MobilePhone.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const MobilePhone = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"mobile-phone\"\n name=\"mobile-phone\"\n type=\"mobile_phone\"\n label={{\n primary: '\u039A\u03B9\u03BD\u03B7\u03C4\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n phoneType: 'mobile',\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default MobilePhone;\n"],
5
- "mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,eAAe,aAAa;AACnC,SAAS,cAAc;AAEhB,MAAM,cAAc,MACzB;AAAA,EAAC;AAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,QAChB,WAAW;AAAA,MACb;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,oCAAC,UAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,sBAAQ;",
4
+ "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const MobilePhone = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"mobile-phone\"\n name=\"mobile-phone\"\n type=\"mobile_phone\"\n autoComplete='tel'\n label={{\n primary: '\u039A\u03B9\u03BD\u03B7\u03C4\u03CC \u03C4\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n phoneType: 'mobile',\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default MobilePhone;\n"],
5
+ "mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,eAAe,aAAa;AACnC,SAAS,cAAc;AAEhB,MAAM,cAAc,MACzB;AAAA,EAAC;AAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAa;AAAA,MACb,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,QAChB,WAAW;AAAA,MACb;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,oCAAC,UAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,sBAAQ;",
6
6
  "names": []
7
7
  }
@@ -14,6 +14,7 @@ const PhoneNumber = () => /* @__PURE__ */ React.createElement(
14
14
  key: "phone-number",
15
15
  name: "phone-number",
16
16
  type: "phone_number",
17
+ autoComplete: "tel",
17
18
  label: {
18
19
  primary: "T\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF"
19
20
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/inputs/Input/__stories__/PhoneNumber.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const PhoneNumber = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"phone-number\"\n name=\"phone-number\"\n type=\"phone_number\"\n label={{\n primary: 'T\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default PhoneNumber;\n"],
5
- "mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,eAAe,aAAa;AACnC,SAAS,cAAc;AAEhB,MAAM,cAAc,MACzB;AAAA,EAAC;AAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,MAClB;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,oCAAC,UAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,sBAAQ;",
4
+ "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const PhoneNumber = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"phone-number\"\n name=\"phone-number\"\n type=\"phone_number\"\n autoComplete='tel'\n label={{\n primary: 'T\u03B7\u03BB\u03AD\u03C6\u03C9\u03BD\u03BF',\n }}\n extra={{\n countries: ['gr'],\n }}\n required\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default PhoneNumber;\n"],
5
+ "mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,eAAe,aAAa;AACnC,SAAS,cAAc;AAEhB,MAAM,cAAc,MACzB;AAAA,EAAC;AAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAa;AAAA,MACb,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,OAAO;AAAA,QACL,WAAW,CAAC,IAAI;AAAA,MAClB;AAAA,MACA,UAAQ;AAAA;AAAA,EACV;AAAA,EACA,oCAAC,UAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,sBAAQ;",
6
6
  "names": []
7
7
  }
@@ -14,6 +14,7 @@ const PostalCode = () => /* @__PURE__ */ React.createElement(
14
14
  key: "postal-code",
15
15
  name: "postal-code",
16
16
  type: "postal_code",
17
+ autoComplete: "postal-code",
17
18
  label: {
18
19
  primary: "\u03A4\u03B1\u03C7\u03C5\u03B4\u03C1\u03BF\u03BC\u03B9\u03BA\u03CC\u03C2 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2"
19
20
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/inputs/Input/__stories__/PostalCode.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const PostalCode = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"postal-code\"\n name=\"postal-code\"\n type=\"postal_code\"\n label={{\n primary: '\u03A4\u03B1\u03C7\u03C5\u03B4\u03C1\u03BF\u03BC\u03B9\u03BA\u03CC\u03C2 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2',\n }}\n required\n extra={{ countries: ['GR'] }}\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default PostalCode;\n"],
5
- "mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,eAAe,aAAa;AACnC,SAAS,cAAc;AAEhB,MAAM,aAAa,MACxB;AAAA,EAAC;AAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,UAAQ;AAAA,MACR,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE;AAAA;AAAA,EAC7B;AAAA,EACA,oCAAC,UAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,qBAAQ;",
4
+ "sourcesContent": ["import React from 'react';\nimport FormBuilder, { Field } from '@digigov/form';\nimport { Button } from '@digigov/ui/form/Button';\n\nexport const PostalCode = () => (\n <FormBuilder\n onSubmit={(data) => {\n console.log(data);\n }}\n >\n <Field\n key=\"postal-code\"\n name=\"postal-code\"\n type=\"postal_code\"\n autoComplete='postal-code'\n label={{\n primary: '\u03A4\u03B1\u03C7\u03C5\u03B4\u03C1\u03BF\u03BC\u03B9\u03BA\u03CC\u03C2 \u03BA\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2',\n }}\n required\n extra={{ countries: ['GR'] }}\n />\n <Button type=\"submit\">\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1</Button>\n </FormBuilder>\n);\nexport default PostalCode;\n"],
5
+ "mappings": "AAAA,OAAO,WAAW;AAClB,OAAO,eAAe,aAAa;AACnC,SAAS,cAAc;AAEhB,MAAM,aAAa,MACxB;AAAA,EAAC;AAAA;AAAA,IACC,UAAU,CAAC,SAAS;AAClB,cAAQ,IAAI,IAAI;AAAA,IAClB;AAAA;AAAA,EAEA;AAAA,IAAC;AAAA;AAAA,MACC,KAAI;AAAA,MACJ,MAAK;AAAA,MACL,MAAK;AAAA,MACL,cAAa;AAAA,MACb,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,MACA,UAAQ;AAAA,MACR,OAAO,EAAE,WAAW,CAAC,IAAI,EAAE;AAAA;AAAA,EAC7B;AAAA,EACA,oCAAC,UAAO,MAAK,YAAS,kDAAQ;AAChC;AAEF,IAAO,qBAAQ;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@digigov/form",
3
- "version": "2.0.0-rc.23",
3
+ "version": "2.0.0-rc.24",
4
4
  "description": "@digigov form builder",
5
5
  "author": "GRNET Developers <devs@lists.grnet.gr>",
6
6
  "license": "BSD-2-Clause",
@@ -14,11 +14,11 @@
14
14
  "yup": "0.32.11",
15
15
  "dayjs": "1.10.4",
16
16
  "@hookform/resolvers": "3.9.0",
17
- "@digigov/react-icons": "2.0.0-rc.23"
17
+ "@digigov/react-icons": "2.0.0-rc.24"
18
18
  },
19
19
  "peerDependencies": {
20
- "@digigov/ui": "2.0.0-rc.23",
21
- "@digigov/react-core": "2.0.0-rc.23",
20
+ "@digigov/ui": "2.0.0-rc.24",
21
+ "@digigov/react-core": "2.0.0-rc.24",
22
22
  "clsx": "1.1.1",
23
23
  "react": ">=16.8.0 <19.0.0",
24
24
  "react-dom": ">=16.8.0 <19.0.0"
@@ -31,6 +31,7 @@ export interface FieldSpec {
31
31
  | 'array'
32
32
  | 'object';
33
33
  component?: any;
34
+ autoComplete?: string;
34
35
  maxLength?: number;
35
36
  condition?: Record<string, FieldCondition>;
36
37
  controlled?: boolean;
@@ -12,12 +12,13 @@ export const LandlineNumber = () => (
12
12
  key="phone-number"
13
13
  name="phone-number"
14
14
  type="phone_number"
15
+ autoComplete='tel'
15
16
  label={{
16
17
  primary: 'Σταθερό τηλέφωνο',
17
18
  }}
18
19
  extra={{
19
20
  countries: ['gr'],
20
- phoneType:'landline',
21
+ phoneType: 'landline',
21
22
  }}
22
23
  required
23
24
  />
@@ -12,6 +12,7 @@ export const MobilePhone = () => (
12
12
  key="mobile-phone"
13
13
  name="mobile-phone"
14
14
  type="mobile_phone"
15
+ autoComplete='tel'
15
16
  label={{
16
17
  primary: 'Κινητό τηλέφωνο',
17
18
  }}
@@ -12,6 +12,7 @@ export const PhoneNumber = () => (
12
12
  key="phone-number"
13
13
  name="phone-number"
14
14
  type="phone_number"
15
+ autoComplete='tel'
15
16
  label={{
16
17
  primary: 'Tηλέφωνο',
17
18
  }}
@@ -12,6 +12,7 @@ export const PostalCode = () => (
12
12
  key="postal-code"
13
13
  name="postal-code"
14
14
  type="postal_code"
15
+ autoComplete='postal-code'
15
16
  label={{
16
17
  primary: 'Ταχυδρομικός κωδικός',
17
18
  }}
@@ -42,7 +42,21 @@ export const getYUPTypeMap = (): Record<string, any> => {
42
42
  .test(FILE_MAX_SIZE_VALIDATOR(field));
43
43
  },
44
44
  string: yup.string,
45
- boolean: yup.boolean,
45
+ boolean: (): yup.BooleanSchema<
46
+ boolean | null | undefined,
47
+ AnyObject,
48
+ boolean | null | undefined
49
+ > => {
50
+ return yup
51
+ .boolean()
52
+ .nullable()
53
+ .transform((value) => {
54
+ if (value === '' || typeof value === 'string') return null;
55
+ if (typeof value === 'boolean') return value;
56
+ if (value === 0 || value === 1) return Boolean(value);
57
+ return value;
58
+ });
59
+ },
46
60
  object: (
47
61
  field
48
62
  ):
@@ -144,15 +158,23 @@ export const getYUPTypeMap = (): Record<string, any> => {
144
158
  AnyObject,
145
159
  string | null | undefined
146
160
  > => yup.string().nullable(),
147
- date: (field): yup.StringSchema => {
161
+ date: (
162
+ field
163
+ ): yup.StringSchema<
164
+ string | null | undefined,
165
+ AnyObject,
166
+ string | null | undefined
167
+ > => {
168
+ let schema = yup.string().nullable();
148
169
  if (field?.extra?.min) {
149
- return yup.string().test(LATER_THAN_VALIDATOR(field));
170
+ schema = schema.test(LATER_THAN_VALIDATOR(field));
150
171
  }
151
172
  if (field?.extra?.max) {
152
- return yup.string().test(EARLIER_THAN_VALIDATOR(field));
173
+ schema = schema.test(EARLIER_THAN_VALIDATOR(field));
153
174
  } else {
154
- return yup.string().test(DATE_VALIDATOR);
175
+ schema = schema.test(DATE_VALIDATOR);
155
176
  }
177
+ return schema;
156
178
  },
157
179
  };
158
180
  return yupTypeMap;
@@ -29,7 +29,14 @@ const getYUPTypeMap = () => {
29
29
  }).nullable().test(FILE_MAX_SIZE_VALIDATOR(field));
30
30
  },
31
31
  string: yup.string,
32
- boolean: yup.boolean,
32
+ boolean: () => {
33
+ return yup.boolean().nullable().transform((value) => {
34
+ if (value === "" || typeof value === "string") return null;
35
+ if (typeof value === "boolean") return value;
36
+ if (value === 0 || value === 1) return Boolean(value);
37
+ return value;
38
+ });
39
+ },
33
40
  object: (field) => {
34
41
  return getYupObjectShape(field.extra.fields, yupTypeMap);
35
42
  },
@@ -92,14 +99,16 @@ const getYUPTypeMap = () => {
92
99
  "choice:multiple": () => yup.array().of(yup.string()).nullable(),
93
100
  "choice:single": () => yup.string().nullable(),
94
101
  date: (field) => {
102
+ let schema = yup.string().nullable();
95
103
  if (field?.extra?.min) {
96
- return yup.string().test(LATER_THAN_VALIDATOR(field));
104
+ schema = schema.test(LATER_THAN_VALIDATOR(field));
97
105
  }
98
106
  if (field?.extra?.max) {
99
- return yup.string().test(EARLIER_THAN_VALIDATOR(field));
107
+ schema = schema.test(EARLIER_THAN_VALIDATOR(field));
100
108
  } else {
101
- return yup.string().test(DATE_VALIDATOR);
109
+ schema = schema.test(DATE_VALIDATOR);
102
110
  }
111
+ return schema;
103
112
  }
104
113
  };
105
114
  return yupTypeMap;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/validators/index.ts"],
4
- "sourcesContent": ["import { MutableRefObject, useMemo } from 'react';\nimport * as yup from 'yup';\nimport { AnyObjectSchema, StringSchema } from 'yup';\nimport { RequiredArraySchema } from 'yup/lib/array';\nimport Lazy from 'yup/lib/Lazy';\nimport { MixedSchema } from 'yup/lib/mixed';\nimport { TypeOfShape, AssertsShape } from 'yup/lib/object';\nimport { AnyObject } from 'yup/lib/types';\nimport { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\nimport {\n getYupObjectShape,\n AFM_VALIDATOR,\n FILE_MAX_SIZE_VALIDATOR,\n IBAN_VALIDATOR,\n OTP_VALIDATOR,\n MOBILE_PHONE_VALIDATOR,\n PHONE_NUMBER_VALIDATOR,\n TEXT_LIMIT_VALIDATOR,\n POSTALCODE_VALIDATOR,\n UUID4_VALIDATOR,\n IMAGE_DIMENSION_VALIDATOR,\n DATE_VALIDATOR,\n LATER_THAN_VALIDATOR,\n EARLIER_THAN_VALIDATOR,\n} from '@digigov/form/validators/utils';\nimport { INT_VALIDATOR } from '@digigov/form/validators/utils/int';\nimport { NUMBER_VALIDATOR } from '@digigov/form/validators/utils/number';\n\nexport const getYUPTypeMap = (): Record<string, any> => {\n const yupTypeMap = {\n file: (field): MixedSchema => {\n return yup\n .mixed()\n .transform((value) => {\n if (!value.length) {\n return null;\n }\n return value;\n })\n .nullable()\n .test(FILE_MAX_SIZE_VALIDATOR(field));\n },\n string: yup.string,\n boolean: yup.boolean,\n object: (\n field\n ):\n | yup.ObjectSchema<any, AnyObject, TypeOfShape<any>, AssertsShape<any>>\n | Lazy<any, unknown> => {\n return getYupObjectShape(field.extra.fields, yupTypeMap);\n },\n array: (\n field\n ):\n | yup.ArraySchema<any, AnyObject, any[] | undefined>\n | RequiredArraySchema<any, AnyObject, any[] | undefined> => {\n if (typeof field.extra.of === 'object') {\n // else if the field is an object then it is a scalar type\n // eg. number, string etc.\n let arrayValidator = yup\n .array()\n .of(yupTypeMap[field.extra.of.type](field.extra.of))\n .required(field.required);\n if (field.extra.length)\n arrayValidator = arrayValidator.length(field.extra.length, {\n key: 'form.error.array.length',\n context: {\n length: field.extra.length,\n },\n });\n if (field.extra.min)\n arrayValidator = arrayValidator.min(field.extra.min, {\n key: 'form.error.array.min',\n context: {\n min: field.extra.min,\n },\n });\n if (field.extra.max)\n arrayValidator = arrayValidator.max(field.extra.max, {\n key: 'form.error.array.max',\n context: {\n max: field.extra.max,\n },\n });\n return arrayValidator;\n } else if (typeof field.extra.of === 'string') {\n return yup.array().of(yupTypeMap[field.extra.of]());\n } else {\n // in any other case it will be string\n return yup.array().of(yup.string());\n }\n },\n number: (): MixedSchema =>\n yup\n .mixed()\n .transform((_, val) => (val !== '' ? Number(val) : null))\n .test(NUMBER_VALIDATOR()),\n int: (): MixedSchema =>\n yup\n .mixed()\n .transform((_, val) => (val !== '' ? Number(val) : null))\n .test(NUMBER_VALIDATOR())\n .test(INT_VALIDATOR()),\n email: (): yup.StringSchema => yup.string().email('form.error.email'),\n afm: (): yup.StringSchema => yup.string().test(AFM_VALIDATOR),\n uuid4: (): yup.StringSchema => yup.string().test(UUID4_VALIDATOR),\n iban: (field): yup.StringSchema => yup.string().test(IBAN_VALIDATOR(field)),\n otp: (field): yup.StringSchema => yup.string().test(OTP_VALIDATOR(field)),\n text: (field): yup.StringSchema => {\n if (field?.extra?.limit?.max || !!field?.extra?.limit?.min) {\n return yup.string().test(TEXT_LIMIT_VALIDATOR(field));\n } else {\n return yup.string();\n }\n },\n image: (field): MixedSchema => {\n return yup\n .mixed()\n .transform((value) => {\n if (!value.length || value.length === 0) {\n return null;\n }\n return value;\n })\n .nullable()\n .test(FILE_MAX_SIZE_VALIDATOR(field))\n .test(IMAGE_DIMENSION_VALIDATOR(field));\n },\n postal_code: (field): yup.StringSchema =>\n yup.string().test(POSTALCODE_VALIDATOR(field)),\n mobile_phone: (): yup.StringSchema =>\n yup.string().test(MOBILE_PHONE_VALIDATOR),\n phone_number: (field): yup.StringSchema =>\n yup.string().test(PHONE_NUMBER_VALIDATOR(field)),\n 'choice:multiple': (): yup.ArraySchema<\n yup.StringSchema<string | undefined, AnyObject, string | undefined>,\n AnyObject,\n (string | undefined)[] | null | undefined,\n (string | undefined)[] | null | undefined\n > => yup.array().of(yup.string()).nullable(),\n 'choice:single': (): StringSchema<\n string | null | undefined,\n AnyObject,\n string | null | undefined\n > => yup.string().nullable(),\n date: (field): yup.StringSchema => {\n if (field?.extra?.min) {\n return yup.string().test(LATER_THAN_VALIDATOR(field));\n }\n if (field?.extra?.max) {\n return yup.string().test(EARLIER_THAN_VALIDATOR(field));\n } else {\n return yup.string().test(DATE_VALIDATOR);\n }\n },\n };\n return yupTypeMap;\n};\n\nexport interface MutableRefObjectProps {}\n// Create a yup validation schema from given fields input\nexport function useValidationSchema(\n fields: FieldSpec[] | MutableRefObject<MutableRefObjectProps>,\n validatorRegistry?: Record<string, ValidatorSchema[]>\n): Lazy<any, unknown> | AnyObjectSchema | void {\n return useMemo(() => {\n const yupTypeMap = getYUPTypeMap();\n return getYupObjectShape(fields, yupTypeMap, validatorRegistry);\n }, []);\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { MutableRefObject, useMemo } from 'react';\nimport * as yup from 'yup';\nimport { AnyObjectSchema, StringSchema } from 'yup';\nimport { RequiredArraySchema } from 'yup/lib/array';\nimport Lazy from 'yup/lib/Lazy';\nimport { MixedSchema } from 'yup/lib/mixed';\nimport { TypeOfShape, AssertsShape } from 'yup/lib/object';\nimport { AnyObject } from 'yup/lib/types';\nimport { FieldSpec } from '@digigov/form/types';\nimport { ValidatorSchema } from '@digigov/form/validators/types';\nimport {\n getYupObjectShape,\n AFM_VALIDATOR,\n FILE_MAX_SIZE_VALIDATOR,\n IBAN_VALIDATOR,\n OTP_VALIDATOR,\n MOBILE_PHONE_VALIDATOR,\n PHONE_NUMBER_VALIDATOR,\n TEXT_LIMIT_VALIDATOR,\n POSTALCODE_VALIDATOR,\n UUID4_VALIDATOR,\n IMAGE_DIMENSION_VALIDATOR,\n DATE_VALIDATOR,\n LATER_THAN_VALIDATOR,\n EARLIER_THAN_VALIDATOR,\n} from '@digigov/form/validators/utils';\nimport { INT_VALIDATOR } from '@digigov/form/validators/utils/int';\nimport { NUMBER_VALIDATOR } from '@digigov/form/validators/utils/number';\n\nexport const getYUPTypeMap = (): Record<string, any> => {\n const yupTypeMap = {\n file: (field): MixedSchema => {\n return yup\n .mixed()\n .transform((value) => {\n if (!value.length) {\n return null;\n }\n return value;\n })\n .nullable()\n .test(FILE_MAX_SIZE_VALIDATOR(field));\n },\n string: yup.string,\n boolean: (): yup.BooleanSchema<\n boolean | null | undefined,\n AnyObject,\n boolean | null | undefined\n > => {\n return yup\n .boolean()\n .nullable()\n .transform((value) => {\n if (value === '' || typeof value === 'string') return null;\n if (typeof value === 'boolean') return value;\n if (value === 0 || value === 1) return Boolean(value);\n return value;\n });\n },\n object: (\n field\n ):\n | yup.ObjectSchema<any, AnyObject, TypeOfShape<any>, AssertsShape<any>>\n | Lazy<any, unknown> => {\n return getYupObjectShape(field.extra.fields, yupTypeMap);\n },\n array: (\n field\n ):\n | yup.ArraySchema<any, AnyObject, any[] | undefined>\n | RequiredArraySchema<any, AnyObject, any[] | undefined> => {\n if (typeof field.extra.of === 'object') {\n // else if the field is an object then it is a scalar type\n // eg. number, string etc.\n let arrayValidator = yup\n .array()\n .of(yupTypeMap[field.extra.of.type](field.extra.of))\n .required(field.required);\n if (field.extra.length)\n arrayValidator = arrayValidator.length(field.extra.length, {\n key: 'form.error.array.length',\n context: {\n length: field.extra.length,\n },\n });\n if (field.extra.min)\n arrayValidator = arrayValidator.min(field.extra.min, {\n key: 'form.error.array.min',\n context: {\n min: field.extra.min,\n },\n });\n if (field.extra.max)\n arrayValidator = arrayValidator.max(field.extra.max, {\n key: 'form.error.array.max',\n context: {\n max: field.extra.max,\n },\n });\n return arrayValidator;\n } else if (typeof field.extra.of === 'string') {\n return yup.array().of(yupTypeMap[field.extra.of]());\n } else {\n // in any other case it will be string\n return yup.array().of(yup.string());\n }\n },\n number: (): MixedSchema =>\n yup\n .mixed()\n .transform((_, val) => (val !== '' ? Number(val) : null))\n .test(NUMBER_VALIDATOR()),\n int: (): MixedSchema =>\n yup\n .mixed()\n .transform((_, val) => (val !== '' ? Number(val) : null))\n .test(NUMBER_VALIDATOR())\n .test(INT_VALIDATOR()),\n email: (): yup.StringSchema => yup.string().email('form.error.email'),\n afm: (): yup.StringSchema => yup.string().test(AFM_VALIDATOR),\n uuid4: (): yup.StringSchema => yup.string().test(UUID4_VALIDATOR),\n iban: (field): yup.StringSchema => yup.string().test(IBAN_VALIDATOR(field)),\n otp: (field): yup.StringSchema => yup.string().test(OTP_VALIDATOR(field)),\n text: (field): yup.StringSchema => {\n if (field?.extra?.limit?.max || !!field?.extra?.limit?.min) {\n return yup.string().test(TEXT_LIMIT_VALIDATOR(field));\n } else {\n return yup.string();\n }\n },\n image: (field): MixedSchema => {\n return yup\n .mixed()\n .transform((value) => {\n if (!value.length || value.length === 0) {\n return null;\n }\n return value;\n })\n .nullable()\n .test(FILE_MAX_SIZE_VALIDATOR(field))\n .test(IMAGE_DIMENSION_VALIDATOR(field));\n },\n postal_code: (field): yup.StringSchema =>\n yup.string().test(POSTALCODE_VALIDATOR(field)),\n mobile_phone: (): yup.StringSchema =>\n yup.string().test(MOBILE_PHONE_VALIDATOR),\n phone_number: (field): yup.StringSchema =>\n yup.string().test(PHONE_NUMBER_VALIDATOR(field)),\n 'choice:multiple': (): yup.ArraySchema<\n yup.StringSchema<string | undefined, AnyObject, string | undefined>,\n AnyObject,\n (string | undefined)[] | null | undefined,\n (string | undefined)[] | null | undefined\n > => yup.array().of(yup.string()).nullable(),\n 'choice:single': (): StringSchema<\n string | null | undefined,\n AnyObject,\n string | null | undefined\n > => yup.string().nullable(),\n date: (\n field\n ): yup.StringSchema<\n string | null | undefined,\n AnyObject,\n string | null | undefined\n > => {\n let schema = yup.string().nullable();\n if (field?.extra?.min) {\n schema = schema.test(LATER_THAN_VALIDATOR(field));\n }\n if (field?.extra?.max) {\n schema = schema.test(EARLIER_THAN_VALIDATOR(field));\n } else {\n schema = schema.test(DATE_VALIDATOR);\n }\n return schema;\n },\n };\n return yupTypeMap;\n};\n\nexport interface MutableRefObjectProps {}\n// Create a yup validation schema from given fields input\nexport function useValidationSchema(\n fields: FieldSpec[] | MutableRefObject<MutableRefObjectProps>,\n validatorRegistry?: Record<string, ValidatorSchema[]>\n): Lazy<any, unknown> | AnyObjectSchema | void {\n return useMemo(() => {\n const yupTypeMap = getYUPTypeMap();\n return getYupObjectShape(fields, yupTypeMap, validatorRegistry);\n }, []);\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }