@digigov/form 0.13.2 → 1.0.0-079f34f3d
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/Field/FieldBase.js +2 -2
- package/Field/FieldBaseContainer.js +8 -8
- package/Field/FieldConditional.js +2 -2
- package/Field/utils.js +6 -6
- package/FieldArray/__stories__/Default.js +2 -2
- package/FieldArray/__stories__/WithExactLength.js +2 -2
- package/FieldArray/index.js +3 -3
- package/FieldObject/index.d.ts +1 -1
- package/FieldObject/index.js +5 -5
- package/Fieldset/FieldsetWithContext.js +4 -4
- package/Fieldset/index.d.ts +1 -1
- package/Fieldset/index.js +2 -2
- package/Fieldset/types.d.ts +2 -2
- package/FormBuilder/FormBuilder.js +5 -5
- package/FormBuilder/FormBuilder.mdx +29 -44
- package/FormBuilder/__stories__/Default.js +2 -2
- package/MultiplicityField/MultiplicityField.mdx +277 -267
- package/MultiplicityField/__stories__/Default.js +2 -2
- package/MultiplicityField/__stories__/PreviewDisplay.js +9 -9
- package/MultiplicityField/__stories__/WithExactLength.js +2 -2
- package/MultiplicityField/__stories__/WithMaxLength.js +2 -2
- package/MultiplicityField/__stories__/WithMinAndMaxLength.js +2 -2
- package/MultiplicityField/__stories__/WithMinLength.js +2 -2
- package/MultiplicityField/add-objects.js +6 -6
- package/MultiplicityField/index.d.ts +2 -2
- package/MultiplicityField/index.js +7 -7
- package/Questions/Questions.js +2 -2
- package/Questions/Step/ReviewStep.js +8 -8
- package/Questions/Step/Step.js +2 -2
- package/Questions/Step/StepArrayReview.js +11 -11
- package/Questions/Step/StepDescription.js +2 -2
- package/Questions/Step/StepForm.d.ts +1 -1
- package/Questions/Step/StepForm.js +6 -6
- package/Questions/Step/StepTitle.d.ts +2 -2
- package/Questions/Step/StepTitle.js +11 -5
- package/Questions/Step/getAddMoreFields.d.ts +1 -1
- package/Questions/__snapshots__/index.spec.tsx.snap +72 -359
- package/Questions/__stories__/Default.js +7 -7
- package/Questions/index.mdx +45 -48
- package/Questions/index.spec.js +2 -2
- package/create-simple-form.mdx +258 -237
- package/es/Field/FieldBase.js +1 -1
- package/es/Field/FieldBaseContainer.js +6 -6
- package/es/Field/FieldConditional.js +1 -1
- package/es/Field/utils.js +5 -5
- package/es/FieldArray/__stories__/Default.js +1 -1
- package/es/FieldArray/__stories__/WithExactLength.js +1 -1
- package/es/FieldArray/index.js +2 -2
- package/es/FieldObject/index.js +3 -3
- package/es/Fieldset/FieldsetWithContext.js +2 -2
- package/es/Fieldset/index.js +1 -1
- package/es/FormBuilder/FormBuilder.js +3 -3
- package/es/FormBuilder/FormBuilder.mdx +29 -44
- package/es/FormBuilder/__stories__/Default.js +1 -1
- package/es/MultiplicityField/MultiplicityField.mdx +277 -267
- package/es/MultiplicityField/__stories__/Default.js +1 -1
- package/es/MultiplicityField/__stories__/PreviewDisplay.js +8 -8
- package/es/MultiplicityField/__stories__/WithExactLength.js +1 -1
- package/es/MultiplicityField/__stories__/WithMaxLength.js +1 -1
- package/es/MultiplicityField/__stories__/WithMinAndMaxLength.js +1 -1
- package/es/MultiplicityField/__stories__/WithMinLength.js +1 -1
- package/es/MultiplicityField/add-objects.js +3 -3
- package/es/MultiplicityField/index.js +5 -5
- package/es/Questions/Questions.js +1 -1
- package/es/Questions/Step/ReviewStep.js +5 -5
- package/es/Questions/Step/Step.js +1 -1
- package/es/Questions/Step/StepArrayReview.js +7 -7
- package/es/Questions/Step/StepDescription.js +1 -1
- package/es/Questions/Step/StepForm.js +5 -5
- package/es/Questions/Step/StepTitle.js +9 -5
- package/es/Questions/__snapshots__/index.spec.tsx.snap +72 -359
- package/es/Questions/__stories__/Default.js +5 -5
- package/es/Questions/index.mdx +45 -48
- package/es/Questions/index.spec.js +1 -1
- package/es/create-simple-form.mdx +258 -237
- package/es/index.mdx +13 -6
- package/es/inputs/AutoComplete/__stories__/Default.js +3 -3
- package/es/inputs/AutoComplete/index.js +1 -1
- package/es/inputs/Checkboxes/__stories__/Conditional.js +1 -1
- package/es/inputs/Checkboxes/__stories__/Default.js +1 -1
- package/es/inputs/Checkboxes/__stories__/WithDivider.js +2 -2
- package/es/inputs/Checkboxes/index.js +3 -3
- package/es/inputs/DateInput/__stories__/Default.js +1 -1
- package/es/inputs/DateInput/index.js +1 -1
- package/es/inputs/FileInput/__stories__/Default.js +1 -1
- package/es/inputs/FileInput/index.js +6 -6
- package/es/inputs/Input/__stories__/AFM.js +1 -1
- package/es/inputs/Input/__stories__/Boolean.js +1 -1
- package/es/inputs/Input/__stories__/Default.js +1 -1
- package/es/inputs/Input/__stories__/IBAN.js +1 -1
- package/es/inputs/Input/__stories__/Integer.js +1 -1
- package/es/inputs/Input/__stories__/MobilePhone.js +1 -1
- package/es/inputs/Input/__stories__/PhoneNumber.js +1 -1
- package/es/inputs/Input/__stories__/PostalCode.js +1 -1
- package/es/inputs/Input/__stories__/TextWithCharacterLimit.js +1 -1
- package/es/inputs/Input/index.js +1 -1
- package/es/inputs/Label/__stories__/Default.js +1 -1
- package/es/inputs/Label/index.js +3 -3
- package/es/inputs/OtpInput/__stories__/Default.js +1 -1
- package/es/inputs/OtpInput/index.js +5 -5
- package/es/inputs/Radio/__stories__/Conditional.js +1 -1
- package/es/inputs/Radio/__stories__/Default.js +1 -1
- package/es/inputs/Radio/__stories__/WithDivider.js +2 -2
- package/es/inputs/Radio/index.js +4 -4
- package/es/inputs/Select/__stories__/Default.js +1 -1
- package/es/installation.mdx +12 -16
- package/es/utils.js +1 -1
- package/es/validators/index.js +2 -2
- package/esm/Field/FieldBase.js +1 -1
- package/esm/Field/FieldBaseContainer.js +6 -6
- package/esm/Field/FieldConditional.js +1 -1
- package/esm/Field/utils.js +5 -5
- package/esm/FieldArray/__stories__/Default.js +1 -1
- package/esm/FieldArray/__stories__/WithExactLength.js +1 -1
- package/esm/FieldArray/index.js +2 -2
- package/esm/FieldObject/index.js +3 -3
- package/esm/Fieldset/FieldsetWithContext.js +2 -2
- package/esm/Fieldset/index.js +1 -1
- package/esm/FormBuilder/FormBuilder.js +3 -3
- package/esm/FormBuilder/FormBuilder.mdx +29 -44
- package/esm/FormBuilder/__stories__/Default.js +1 -1
- package/esm/MultiplicityField/MultiplicityField.mdx +277 -267
- package/esm/MultiplicityField/__stories__/Default.js +1 -1
- package/esm/MultiplicityField/__stories__/PreviewDisplay.js +8 -8
- package/esm/MultiplicityField/__stories__/WithExactLength.js +1 -1
- package/esm/MultiplicityField/__stories__/WithMaxLength.js +1 -1
- package/esm/MultiplicityField/__stories__/WithMinAndMaxLength.js +1 -1
- package/esm/MultiplicityField/__stories__/WithMinLength.js +1 -1
- package/esm/MultiplicityField/add-objects.js +3 -3
- package/esm/MultiplicityField/index.js +5 -5
- package/esm/Questions/Questions.js +1 -1
- package/esm/Questions/Step/ReviewStep.js +5 -5
- package/esm/Questions/Step/Step.js +1 -1
- package/esm/Questions/Step/StepArrayReview.js +7 -7
- package/esm/Questions/Step/StepDescription.js +1 -1
- package/esm/Questions/Step/StepForm.js +5 -5
- package/esm/Questions/Step/StepTitle.js +9 -5
- package/esm/Questions/__snapshots__/index.spec.tsx.snap +72 -359
- package/esm/Questions/__stories__/Default.js +5 -5
- package/esm/Questions/index.mdx +45 -48
- package/esm/Questions/index.spec.js +1 -1
- package/esm/create-simple-form.mdx +258 -237
- package/esm/index.js +1 -1
- package/esm/index.mdx +13 -6
- package/esm/inputs/AutoComplete/__stories__/Default.js +3 -3
- package/esm/inputs/AutoComplete/index.js +1 -1
- package/esm/inputs/Checkboxes/__stories__/Conditional.js +1 -1
- package/esm/inputs/Checkboxes/__stories__/Default.js +1 -1
- package/esm/inputs/Checkboxes/__stories__/WithDivider.js +2 -2
- package/esm/inputs/Checkboxes/index.js +3 -3
- package/esm/inputs/DateInput/__stories__/Default.js +1 -1
- package/esm/inputs/DateInput/index.js +1 -1
- package/esm/inputs/FileInput/__stories__/Default.js +1 -1
- package/esm/inputs/FileInput/index.js +6 -6
- package/esm/inputs/Input/__stories__/AFM.js +1 -1
- package/esm/inputs/Input/__stories__/Boolean.js +1 -1
- package/esm/inputs/Input/__stories__/Default.js +1 -1
- package/esm/inputs/Input/__stories__/IBAN.js +1 -1
- package/esm/inputs/Input/__stories__/Integer.js +1 -1
- package/esm/inputs/Input/__stories__/MobilePhone.js +1 -1
- package/esm/inputs/Input/__stories__/PhoneNumber.js +1 -1
- package/esm/inputs/Input/__stories__/PostalCode.js +1 -1
- package/esm/inputs/Input/__stories__/TextWithCharacterLimit.js +1 -1
- package/esm/inputs/Input/index.js +1 -1
- package/esm/inputs/Label/__stories__/Default.js +1 -1
- package/esm/inputs/Label/index.js +3 -3
- package/esm/inputs/OtpInput/__stories__/Default.js +1 -1
- package/esm/inputs/OtpInput/index.js +5 -5
- package/esm/inputs/Radio/__stories__/Conditional.js +1 -1
- package/esm/inputs/Radio/__stories__/Default.js +1 -1
- package/esm/inputs/Radio/__stories__/WithDivider.js +2 -2
- package/esm/inputs/Radio/index.js +4 -4
- package/esm/inputs/Select/__stories__/Default.js +1 -1
- package/esm/installation.mdx +12 -16
- package/esm/utils.js +1 -1
- package/esm/validators/index.js +2 -2
- package/index.mdx +13 -6
- package/inputs/AutoComplete/__stories__/Default.js +4 -4
- package/inputs/AutoComplete/index.d.ts +2 -2
- package/inputs/AutoComplete/index.js +2 -2
- package/inputs/Checkboxes/__stories__/Conditional.js +2 -2
- package/inputs/Checkboxes/__stories__/Default.js +2 -2
- package/inputs/Checkboxes/__stories__/WithDivider.js +3 -3
- package/inputs/Checkboxes/index.d.ts +1 -1
- package/inputs/Checkboxes/index.js +4 -4
- package/inputs/DateInput/__stories__/Default.js +2 -2
- package/inputs/DateInput/index.js +2 -2
- package/inputs/FileInput/__stories__/Default.js +2 -2
- package/inputs/FileInput/index.js +6 -6
- package/inputs/Input/__stories__/AFM.js +2 -2
- package/inputs/Input/__stories__/Boolean.js +2 -2
- package/inputs/Input/__stories__/Default.js +2 -2
- package/inputs/Input/__stories__/IBAN.js +2 -2
- package/inputs/Input/__stories__/Integer.js +2 -2
- package/inputs/Input/__stories__/MobilePhone.js +2 -2
- package/inputs/Input/__stories__/PhoneNumber.js +2 -2
- package/inputs/Input/__stories__/PostalCode.js +2 -2
- package/inputs/Input/__stories__/TextWithCharacterLimit.js +2 -2
- package/inputs/Input/index.js +1 -1
- package/inputs/Label/__stories__/Default.js +2 -2
- package/inputs/Label/index.js +4 -4
- package/inputs/OtpInput/__stories__/Default.js +2 -2
- package/inputs/OtpInput/index.js +5 -5
- package/inputs/Radio/__stories__/Conditional.js +2 -2
- package/inputs/Radio/__stories__/Default.js +2 -2
- package/inputs/Radio/__stories__/WithDivider.js +3 -3
- package/inputs/Radio/index.d.ts +1 -1
- package/inputs/Radio/index.js +7 -7
- package/inputs/Select/__stories__/Default.js +2 -2
- package/inputs/Select/index.d.ts +1 -1
- package/installation.mdx +12 -16
- package/package.json +5 -5
- package/src/Field/FieldBase.tsx +1 -1
- package/src/Field/FieldBaseContainer.tsx +7 -7
- package/src/Field/FieldConditional.tsx +1 -1
- package/src/Field/index.tsx +1 -1
- package/src/Field/utils.ts +7 -7
- package/src/FieldArray/FieldArray.stories.js +1 -1
- package/src/FieldArray/__stories__/Default.tsx +1 -1
- package/src/FieldArray/__stories__/WithExactLength.tsx +1 -1
- package/src/FieldArray/index.tsx +3 -3
- package/src/FieldObject/index.tsx +6 -6
- package/src/Fieldset/FieldsetWithContext.tsx +3 -3
- package/src/Fieldset/index.tsx +5 -5
- package/src/Fieldset/types.tsx +3 -3
- package/src/FormBuilder/FormBuilder.mdx +29 -44
- package/src/FormBuilder/FormBuilder.stories.js +1 -1
- package/src/FormBuilder/FormBuilder.tsx +4 -4
- package/src/FormBuilder/__stories__/Default.tsx +1 -1
- package/src/MultiplicityField/MultiplicityField.mdx +277 -267
- package/src/MultiplicityField/MultiplicityField.stories.js +1 -1
- package/src/MultiplicityField/__stories__/Default.tsx +1 -1
- package/src/MultiplicityField/__stories__/PreviewDisplay.tsx +18 -18
- package/src/MultiplicityField/__stories__/WithExactLength.tsx +1 -1
- package/src/MultiplicityField/__stories__/WithMaxLength.tsx +1 -1
- package/src/MultiplicityField/__stories__/WithMinAndMaxLength.tsx +1 -1
- package/src/MultiplicityField/__stories__/WithMinLength.tsx +1 -1
- package/src/MultiplicityField/add-objects.tsx +3 -3
- package/src/MultiplicityField/index.tsx +9 -9
- package/src/Questions/Questions.stories.js +1 -1
- package/src/Questions/Questions.tsx +2 -2
- package/src/Questions/Step/ReviewStep.tsx +6 -6
- package/src/Questions/Step/Step.tsx +1 -1
- package/src/Questions/Step/StepArrayReview.tsx +11 -11
- package/src/Questions/Step/StepDescription.tsx +1 -1
- package/src/Questions/Step/StepForm.tsx +6 -6
- package/src/Questions/Step/StepTitle.tsx +19 -17
- package/src/Questions/Step/getAddMoreFields.tsx +1 -1
- package/src/Questions/__snapshots__/index.spec.tsx.snap +72 -359
- package/src/Questions/__stories__/Default.tsx +8 -8
- package/src/Questions/index.mdx +45 -48
- package/src/Questions/index.spec.tsx +1 -1
- package/src/create-simple-form.mdx +258 -237
- package/src/index.mdx +13 -6
- package/src/inputs/AutoComplete/__stories__/Default.tsx +3 -3
- package/src/inputs/AutoComplete/index.tsx +4 -4
- package/src/inputs/Checkboxes/Checkboxes.stories.js +1 -1
- package/src/inputs/Checkboxes/__stories__/Conditional.tsx +2 -2
- package/src/inputs/Checkboxes/__stories__/Default.tsx +1 -1
- package/src/inputs/Checkboxes/__stories__/WithDivider.tsx +2 -2
- package/src/inputs/Checkboxes/index.tsx +4 -4
- package/src/inputs/DateInput/DateInput.stories.js +1 -1
- package/src/inputs/DateInput/__stories__/Default.tsx +1 -1
- package/src/inputs/DateInput/index.tsx +2 -2
- package/src/inputs/FileInput/FileInput.stories.js +1 -1
- package/src/inputs/FileInput/__stories__/Default.tsx +1 -1
- package/src/inputs/FileInput/index.tsx +6 -6
- package/src/inputs/Input/__stories__/AFM.tsx +1 -1
- package/src/inputs/Input/__stories__/Boolean.tsx +1 -1
- package/src/inputs/Input/__stories__/Default.tsx +1 -1
- package/src/inputs/Input/__stories__/IBAN.tsx +1 -1
- package/src/inputs/Input/__stories__/Integer.tsx +1 -1
- package/src/inputs/Input/__stories__/MobilePhone.tsx +1 -1
- package/src/inputs/Input/__stories__/PhoneNumber.tsx +1 -1
- package/src/inputs/Input/__stories__/PostalCode.tsx +1 -1
- package/src/inputs/Input/__stories__/TextWithCharacterLimit.tsx +1 -1
- package/src/inputs/Input/index.tsx +3 -3
- package/src/inputs/Label/Label.stories.js +1 -1
- package/src/inputs/Label/__stories__/Default.tsx +1 -1
- package/src/inputs/Label/index.tsx +4 -4
- package/src/inputs/OtpInput/__stories__/Default.tsx +1 -1
- package/src/inputs/OtpInput/index.tsx +14 -10
- package/src/inputs/Radio/Radio.stories.js +1 -2
- package/src/inputs/Radio/__stories__/Conditional.tsx +3 -3
- package/src/inputs/Radio/__stories__/Default.tsx +1 -1
- package/src/inputs/Radio/__stories__/WithDivider.tsx +2 -2
- package/src/inputs/Radio/index.tsx +6 -6
- package/src/inputs/Select/Select.stories.js +1 -1
- package/src/inputs/Select/__stories__/Default.tsx +1 -1
- package/src/inputs/Select/index.tsx +2 -2
- package/src/installation.mdx +12 -16
- package/src/types.tsx +4 -2
- package/src/utils.ts +1 -1
- package/src/validators/index.ts +10 -10
- package/src/validators/utils/file.ts +1 -1
- package/src/validators/utils/phone.ts +1 -1
- package/src/validators/utils/postal_code.ts +1 -1
- package/types.d.ts +4 -2
- package/validators/index.d.ts +3 -3
- package/validators/index.js +4 -4
- package/validators/utils/file.d.ts +1 -1
- package/validators/utils/phone.d.ts +1 -1
- package/validators/utils/postal_code.d.ts +1 -1
package/esm/index.mdx
CHANGED
|
@@ -4,12 +4,19 @@ title: Digigov Form
|
|
|
4
4
|
sidebar_label: Introduction to Digigov Form
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import LeadText from
|
|
7
|
+
import LeadText from '@site/src/components/LeadText';
|
|
8
8
|
|
|
9
|
-
<LeadText>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
<LeadText>
|
|
10
|
+
Digigov Form is an off-the-shelf solution for managing web forms using
|
|
11
|
+
Reactjs. It supports flexible and multi-step forms and easy-to-use validation.
|
|
12
|
+
This page will guide you through everything you need to create accessible and
|
|
13
|
+
dynamic forms that can handle all sorts of user inputs.
|
|
14
|
+
</LeadText>
|
|
15
|
+
|
|
16
|
+
<img
|
|
17
|
+
src="/img/form.svg"
|
|
18
|
+
style={{ margin: '3rem 0', maxWidth: '450px', width: '60%' }}
|
|
19
|
+
/>
|
|
13
20
|
|
|
14
21
|
## Before we start
|
|
15
22
|
|
|
@@ -22,7 +29,7 @@ Finally, we also offer an easy way to spread your forms across multiple pages or
|
|
|
22
29
|
steps and still be able to gather data in a single serialized object that you
|
|
23
30
|
will be able to save via an JSON API.
|
|
24
31
|
|
|
25
|
-
## Overview
|
|
32
|
+
## Overview
|
|
26
33
|
|
|
27
34
|
The `@digigov/form` NPM package contains React components and validators. The
|
|
28
35
|
library uses basic, semantically correct HTML5 input fields.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import React, { Suspense } from 'react';
|
|
2
|
-
import FormBuilder from '@digigov/form/FormBuilder';
|
|
3
2
|
import { Field } from '@digigov/form/Field';
|
|
4
|
-
import
|
|
5
|
-
import { results } from '@digigov/ui/
|
|
3
|
+
import FormBuilder from '@digigov/form/FormBuilder';
|
|
4
|
+
import { results } from '@digigov/ui/form/AutoComplete/utils';
|
|
5
|
+
import Button from '@digigov/ui/form/Button';
|
|
6
6
|
var fields = [{
|
|
7
7
|
key: 'autocomplete',
|
|
8
8
|
label: {
|
|
@@ -2,8 +2,8 @@ import _extends from "@babel/runtime/helpers/extends";
|
|
|
2
2
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
3
3
|
var _excluded = ["name", "extra", "onChange", "value"];
|
|
4
4
|
import React, { useCallback } from 'react';
|
|
5
|
-
import UIAutoComplete from '@digigov/ui/admin/AutoComplete';
|
|
6
5
|
import { Hint } from '@digigov/react-core';
|
|
6
|
+
import UIAutoComplete from '@digigov/ui/form/AutoComplete';
|
|
7
7
|
export var AutoComplete = function AutoComplete(_ref) {
|
|
8
8
|
var name = _ref.name,
|
|
9
9
|
options = _ref.extra.options,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import FormBuilder, { Field } from '@digigov/form';
|
|
3
|
-
import { Button } from '@digigov/ui/
|
|
3
|
+
import { Button } from '@digigov/ui/form/Button';
|
|
4
4
|
|
|
5
5
|
var _ref = /*#__PURE__*/React.createElement(Button, {
|
|
6
6
|
type: "submit"
|
|
@@ -35,7 +35,7 @@ export var WithDivider = function WithDivider() {
|
|
|
35
35
|
primary: 'Αισθάνομαι κούραση'
|
|
36
36
|
},
|
|
37
37
|
value: 'fatigue',
|
|
38
|
-
|
|
38
|
+
dividerText: 'ή'
|
|
39
39
|
}]
|
|
40
40
|
}
|
|
41
41
|
}), _ref);
|
|
@@ -4,12 +4,12 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
|
|
|
4
4
|
var _excluded = ["name", "onChange", "value", "extra", "disabled"],
|
|
5
5
|
_excluded2 = ["label", "value", "show", "disabled", "selected"];
|
|
6
6
|
import React, { useState } from 'react';
|
|
7
|
-
import {
|
|
7
|
+
import { Field } from '@digigov/form';
|
|
8
|
+
import { CheckboxConditional } from '@digigov/react-core';
|
|
8
9
|
import CoreCheckboxes from '@digigov/react-core/Checkbox';
|
|
9
10
|
import CheckboxItem from '@digigov/react-core/CheckboxItem';
|
|
10
11
|
import Hint from '@digigov/react-core/Hint';
|
|
11
|
-
import {
|
|
12
|
-
import { CheckboxConditional } from '@digigov/react-core';
|
|
12
|
+
import { useTranslation } from '@digigov/ui/i18n';
|
|
13
13
|
export var Checkboxes = function Checkboxes(_ref) {
|
|
14
14
|
var name = _ref.name,
|
|
15
15
|
onChange = _ref.onChange,
|
|
@@ -5,9 +5,9 @@ var _excluded = ["label"],
|
|
|
5
5
|
import React, { useMemo, useState } from 'react';
|
|
6
6
|
import dayjs from 'dayjs';
|
|
7
7
|
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
8
|
-
import { useTranslation } from '@digigov/ui/app/i18n';
|
|
9
8
|
import DateInputContainer from '@digigov/react-core/DateInputContainer';
|
|
10
9
|
import CoreDateInputItem from '@digigov/react-core/DateInputItem';
|
|
10
|
+
import { useTranslation } from '@digigov/ui/i18n';
|
|
11
11
|
dayjs.extend(customParseFormat);
|
|
12
12
|
|
|
13
13
|
function useDate(value, onChange) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import FormBuilder, { Field } from '@digigov/form';
|
|
3
|
-
import { Button } from '@digigov/ui/
|
|
3
|
+
import { Button } from '@digigov/ui/form/Button';
|
|
4
4
|
|
|
5
5
|
var _ref = /*#__PURE__*/React.createElement(Button, null, "\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1");
|
|
6
6
|
|
|
@@ -4,12 +4,12 @@ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
|
4
4
|
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
|
|
5
5
|
var _excluded = ["name", "extra", "disabled", "reset", "onChange"];
|
|
6
6
|
import React, { useState } from 'react';
|
|
7
|
-
import { useTranslation } from '@digigov/ui/app/i18n';
|
|
8
|
-
import Paragraph from '@digigov/ui/typography/Paragraph';
|
|
9
|
-
import CoreHint from '@digigov/react-core/Hint';
|
|
10
|
-
import Button from '@digigov/ui/core/Button';
|
|
11
|
-
import FileUploadContainer from '@digigov/react-core/FileUploadContainer';
|
|
12
7
|
import FileUpload from '@digigov/react-core/FileUpload';
|
|
8
|
+
import FileUploadContainer from '@digigov/react-core/FileUploadContainer';
|
|
9
|
+
import CoreHint from '@digigov/react-core/Hint';
|
|
10
|
+
import Button from '@digigov/ui/form/Button';
|
|
11
|
+
import { useTranslation } from '@digigov/ui/i18n';
|
|
12
|
+
import Paragraph from '@digigov/ui/typography/Paragraph';
|
|
13
13
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
14
14
|
export var FileInput = /*#__PURE__*/React.forwardRef(function FileInput(_ref, ref) {
|
|
15
15
|
var name = _ref.name,
|
|
@@ -41,7 +41,7 @@ export var FileInput = /*#__PURE__*/React.forwardRef(function FileInput(_ref, re
|
|
|
41
41
|
};
|
|
42
42
|
|
|
43
43
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(FileUploadContainer, {
|
|
44
|
-
|
|
44
|
+
hasFiles: files && files.length > 0
|
|
45
45
|
}, files !== null && files !== void 0 && files.length ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Paragraph, null, /*#__PURE__*/React.createElement("b", null, t('upload.file'), ":"), " ", "".concat(files.join(', ')))) : /*#__PURE__*/React.createElement(CoreHint, null, t('upload.no_file')), /*#__PURE__*/React.createElement(FileUpload, _extends({
|
|
46
46
|
ref: ref,
|
|
47
47
|
hasFiles: !!(files !== null && files !== void 0 && files.length),
|
|
@@ -6,7 +6,7 @@ import TextInput from '@digigov/react-core/TextInput';
|
|
|
6
6
|
import TextArea from '@digigov/react-core/TextArea';
|
|
7
7
|
import { Hint } from '@digigov/react-core';
|
|
8
8
|
import { useWatch } from 'react-hook-form';
|
|
9
|
-
import { useTranslation } from '@digigov/ui/
|
|
9
|
+
import { useTranslation } from '@digigov/ui/i18n';
|
|
10
10
|
var TYPES_MAP = {
|
|
11
11
|
string: 'text',
|
|
12
12
|
"int": 'text',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import LabelTitle from '@digigov/react-core/LabelTitle';
|
|
3
2
|
import Hint from '@digigov/react-core/Hint';
|
|
4
|
-
import
|
|
3
|
+
import LabelTitle from '@digigov/react-core/LabelTitle';
|
|
4
|
+
import { useTranslation } from '@digigov/ui/i18n';
|
|
5
5
|
export var Label = function Label(_ref) {
|
|
6
6
|
var className = _ref.className,
|
|
7
7
|
label = _ref.label,
|
|
@@ -16,7 +16,7 @@ export var Label = function Label(_ref) {
|
|
|
16
16
|
|
|
17
17
|
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(LabelTitle, {
|
|
18
18
|
className: className,
|
|
19
|
-
size: "
|
|
19
|
+
size: "sm"
|
|
20
20
|
}, label && label.primary && t(label.primary) || value), label && label.secondary && /*#__PURE__*/React.createElement(Hint, null, t(label.secondary)));
|
|
21
21
|
};
|
|
22
22
|
Label.defaultProps = {
|
|
@@ -4,7 +4,7 @@ import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
|
|
4
4
|
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
|
|
5
5
|
var _excluded = ["name", "maxLength"];
|
|
6
6
|
import React, { useState, useCallback } from 'react';
|
|
7
|
-
import
|
|
7
|
+
import SingleCharacterInputs, { SingleCharacterInput } from '@digigov/ui/form/SingleCharacterInputs';
|
|
8
8
|
export var RE_DIGIT = new RegExp(/^\d+$/);
|
|
9
9
|
export var REMOVE_SPACES = new RegExp(/\s+/g);
|
|
10
10
|
|
|
@@ -113,10 +113,10 @@ function useOtp(onChange, maxLength) {
|
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
|
|
116
|
-
var
|
|
116
|
+
var SingleCharacterInputPart = function SingleCharacterInputPart(_ref) {
|
|
117
117
|
var props = _extends({}, _ref);
|
|
118
118
|
|
|
119
|
-
return /*#__PURE__*/React.createElement(
|
|
119
|
+
return /*#__PURE__*/React.createElement(SingleCharacterInput, props);
|
|
120
120
|
};
|
|
121
121
|
|
|
122
122
|
export var OtpInput = function OtpInput(_ref2) {
|
|
@@ -126,8 +126,8 @@ export var OtpInput = function OtpInput(_ref2) {
|
|
|
126
126
|
props = _objectWithoutProperties(_ref2, _excluded);
|
|
127
127
|
|
|
128
128
|
var otp = useOtp(props.onChange, maxLength);
|
|
129
|
-
return /*#__PURE__*/React.createElement(
|
|
130
|
-
return /*#__PURE__*/React.createElement(
|
|
129
|
+
return /*#__PURE__*/React.createElement(SingleCharacterInputs, null, otp.otpValues.map(function (digit, idx) {
|
|
130
|
+
return /*#__PURE__*/React.createElement(SingleCharacterInputPart, {
|
|
131
131
|
name: "".concat(name, "-").concat(idx),
|
|
132
132
|
type: "text",
|
|
133
133
|
key: idx,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import FormBuilder, { Field } from '@digigov/form';
|
|
3
|
-
import { Button } from '@digigov/ui/
|
|
3
|
+
import { Button } from '@digigov/ui/form/Button';
|
|
4
4
|
|
|
5
5
|
var _ref = /*#__PURE__*/React.createElement(Button, {
|
|
6
6
|
type: "submit"
|
|
@@ -40,7 +40,7 @@ export var WithDivider = function WithDivider() {
|
|
|
40
40
|
primary: 'Ηνωμένες Πολιτείες της Αμερικής'
|
|
41
41
|
},
|
|
42
42
|
value: 'usa',
|
|
43
|
-
|
|
43
|
+
dividerText: 'ή'
|
|
44
44
|
}]
|
|
45
45
|
}
|
|
46
46
|
}), _ref);
|
|
@@ -3,13 +3,13 @@ import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProper
|
|
|
3
3
|
var _excluded = ["name", "control", "register", "extra", "disabled"],
|
|
4
4
|
_excluded2 = ["label", "value", "show", "disabled", "selected"];
|
|
5
5
|
import React from 'react';
|
|
6
|
-
import RadioContainer from '@digigov/react-core/RadioContainer';
|
|
7
|
-
import RadioItem from '@digigov/react-core/RadioItem';
|
|
8
|
-
import { useTranslation } from '@digigov/ui/app/i18n';
|
|
9
6
|
import { useWatch } from 'react-hook-form';
|
|
10
|
-
import Hint from '@digigov/react-core/Hint';
|
|
11
7
|
import { Field } from '@digigov/form';
|
|
12
8
|
import { RadioConditional } from '@digigov/react-core';
|
|
9
|
+
import Hint from '@digigov/react-core/Hint';
|
|
10
|
+
import RadioContainer from '@digigov/react-core/RadioContainer';
|
|
11
|
+
import RadioItem from '@digigov/react-core/RadioItem';
|
|
12
|
+
import { useTranslation } from '@digigov/ui/i18n';
|
|
13
13
|
export var RadioButtonsGroup = function RadioButtonsGroup(_ref) {
|
|
14
14
|
var name = _ref.name,
|
|
15
15
|
control = _ref.control,
|
package/esm/installation.mdx
CHANGED
|
@@ -7,39 +7,35 @@ sidebar_label: Installation
|
|
|
7
7
|
import Tabs from '@theme/Tabs';
|
|
8
8
|
import TabItem from '@theme/TabItem';
|
|
9
9
|
import CodeBlock from '@theme/CodeBlock';
|
|
10
|
-
import LeadText from
|
|
10
|
+
import LeadText from '@site/src/components/LeadText';
|
|
11
11
|
|
|
12
12
|
<LeadText>
|
|
13
|
-
This page will help you install Digigov Form depending on the framework that
|
|
14
|
-
use and the application architecture.
|
|
13
|
+
This page will help you install Digigov Form depending on the framework that
|
|
14
|
+
you use and the application architecture.
|
|
15
15
|
</LeadText>
|
|
16
16
|
|
|
17
17
|
We assume that your stack uses some of the following tools.
|
|
18
18
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
19
|
+
- React v16 or later
|
|
20
|
+
- Nextjs or create-react-app to run your code
|
|
21
|
+
- Digigov CSS, as a CSS import or as Tailwind plugin
|
|
22
22
|
|
|
23
23
|
## Using create-digigov-app
|
|
24
24
|
|
|
25
25
|
We highly recommend using `create-digigov-app`. Our scaffolder was created to save development teams time and effort. This way
|
|
26
26
|
everything you need is already configured.
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
If you choose to use our scaffolder tool, make sure you follow this
|
|
29
29
|
[guide](/docs/building-apps) first, if you haven't already done so.
|
|
30
30
|
|
|
31
31
|
Then you just install the `@digigov/form` package from NPM.
|
|
32
32
|
|
|
33
33
|
<Tabs>
|
|
34
34
|
<TabItem value="npm" label="NPM" default>
|
|
35
|
-
<CodeBlock>
|
|
36
|
-
npm install @digigov/form --save
|
|
37
|
-
</CodeBlock>
|
|
35
|
+
<CodeBlock>npm install @digigov/form --save</CodeBlock>
|
|
38
36
|
</TabItem>
|
|
39
37
|
<TabItem value="yarn" label="Yarn">
|
|
40
|
-
<CodeBlock>
|
|
41
|
-
yarn add @digigov/form
|
|
42
|
-
</CodeBlock>
|
|
38
|
+
<CodeBlock>yarn add @digigov/form</CodeBlock>
|
|
43
39
|
</TabItem>
|
|
44
40
|
</Tabs>
|
|
45
41
|
|
|
@@ -48,9 +44,9 @@ Then you just install the `@digigov/form` package from NPM.
|
|
|
48
44
|
This method is not recommended and you should proceed at your own risk. For
|
|
49
45
|
Digigov Form to work properly, it is essential to do some configuration.
|
|
50
46
|
|
|
51
|
-
|
|
47
|
+
- A working React application, ideally [Nextjs](https://nextjs.org/) or [Create
|
|
52
48
|
React App](https://create-react-app.dev/)
|
|
53
|
-
|
|
49
|
+
- You should already have [installed and configured Digigov
|
|
54
50
|
CSS](https://guide.services.gov.gr/docs/installation)
|
|
55
51
|
|
|
56
52
|
If you meet these prerequisites, now it is time to install the dependencies.
|
|
@@ -69,4 +65,4 @@ and install `@digigov/form` and it's dependencies.
|
|
|
69
65
|
yarn add @digigov/form @digigov/ui @digigov/react-core
|
|
70
66
|
</CodeBlock>
|
|
71
67
|
</TabItem>
|
|
72
|
-
</Tabs>
|
|
68
|
+
</Tabs>
|
package/esm/utils.js
CHANGED
|
@@ -6,11 +6,11 @@ function _regeneratorRuntime() { "use strict"; /*! regenerator-runtime -- Copyri
|
|
|
6
6
|
|
|
7
7
|
import { validateFieldsNatively } from '@hookform/resolvers';
|
|
8
8
|
import { appendErrors } from 'react-hook-form';
|
|
9
|
+
|
|
9
10
|
/**
|
|
10
11
|
* Why `path!` ? because it could be `undefined` in some case
|
|
11
12
|
* https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string
|
|
12
13
|
*/
|
|
13
|
-
|
|
14
14
|
var parseErrorSchema = function parseErrorSchema(error, validateAllFieldCriteria) {
|
|
15
15
|
return (error.inner || []).reduce(function (previous, error) {
|
|
16
16
|
var _error$path;
|
package/esm/validators/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import _typeof from "@babel/runtime/helpers/typeof";
|
|
2
|
-
import * as yup from 'yup';
|
|
3
2
|
import { useMemo } from 'react';
|
|
4
3
|
import dayjs from 'dayjs';
|
|
5
4
|
import customParseFormat from 'dayjs/plugin/customParseFormat';
|
|
5
|
+
import * as yup from 'yup';
|
|
6
6
|
import { getYupObjectShape, AFM_VALIDATOR, FILE_MAX_SIZE_VALIDATOR, IBAN_VALIDATOR, OTP_VALIDATOR, MOBILE_PHONE_VALIDATOR, PHONE_NUMBER_VALIDATOR, TEXT_LIMIT_VALIDATOR, POSTALCODE_VALIDATOR, UUID4_VALIDATOR } from '@digigov/form/validators/utils';
|
|
7
|
-
import { NUMBER_VALIDATOR } from '@digigov/form/validators/utils/number';
|
|
8
7
|
import { INT_VALIDATOR } from '@digigov/form/validators/utils/int';
|
|
8
|
+
import { NUMBER_VALIDATOR } from '@digigov/form/validators/utils/number';
|
|
9
9
|
dayjs.extend(customParseFormat);
|
|
10
10
|
var VALID_DATE_FORMATS = ['DD/MM/YYYY'];
|
|
11
11
|
var DATE_CACHE = {};
|
package/index.mdx
CHANGED
|
@@ -4,12 +4,19 @@ title: Digigov Form
|
|
|
4
4
|
sidebar_label: Introduction to Digigov Form
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
import LeadText from
|
|
7
|
+
import LeadText from '@site/src/components/LeadText';
|
|
8
8
|
|
|
9
|
-
<LeadText>
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
<LeadText>
|
|
10
|
+
Digigov Form is an off-the-shelf solution for managing web forms using
|
|
11
|
+
Reactjs. It supports flexible and multi-step forms and easy-to-use validation.
|
|
12
|
+
This page will guide you through everything you need to create accessible and
|
|
13
|
+
dynamic forms that can handle all sorts of user inputs.
|
|
14
|
+
</LeadText>
|
|
15
|
+
|
|
16
|
+
<img
|
|
17
|
+
src="/img/form.svg"
|
|
18
|
+
style={{ margin: '3rem 0', maxWidth: '450px', width: '60%' }}
|
|
19
|
+
/>
|
|
13
20
|
|
|
14
21
|
## Before we start
|
|
15
22
|
|
|
@@ -22,7 +29,7 @@ Finally, we also offer an easy way to spread your forms across multiple pages or
|
|
|
22
29
|
steps and still be able to gather data in a single serialized object that you
|
|
23
30
|
will be able to save via an JSON API.
|
|
24
31
|
|
|
25
|
-
## Overview
|
|
32
|
+
## Overview
|
|
26
33
|
|
|
27
34
|
The `@digigov/form` NPM package contains React components and validators. The
|
|
28
35
|
library uses basic, semantically correct HTML5 input fields.
|
|
@@ -11,13 +11,13 @@ exports.Default = void 0;
|
|
|
11
11
|
|
|
12
12
|
var _react = _interopRequireWildcard(require("react"));
|
|
13
13
|
|
|
14
|
-
var _FormBuilder = _interopRequireDefault(require("@digigov/form/FormBuilder"));
|
|
15
|
-
|
|
16
14
|
var _Field = require("@digigov/form/Field");
|
|
17
15
|
|
|
18
|
-
var
|
|
16
|
+
var _FormBuilder = _interopRequireDefault(require("@digigov/form/FormBuilder"));
|
|
17
|
+
|
|
18
|
+
var _utils = require("@digigov/ui/form/AutoComplete/utils");
|
|
19
19
|
|
|
20
|
-
var
|
|
20
|
+
var _Button = _interopRequireDefault(require("@digigov/ui/form/Button"));
|
|
21
21
|
|
|
22
22
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
23
23
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { AutoCompleteProps as UIAutoCompleteProps } from '@digigov/ui/admin/AutoComplete';
|
|
3
|
-
import { FieldOptionProps } from '@digigov/form/inputs/Label';
|
|
4
2
|
import { ControlledFieldProps } from '@digigov/form/Field/types';
|
|
3
|
+
import { FieldOptionProps } from '@digigov/form/inputs/Label';
|
|
4
|
+
import { AutoCompleteProps as UIAutoCompleteProps } from '@digigov/ui/form/AutoComplete';
|
|
5
5
|
export interface AutoCompleteExtra extends Omit<UIAutoCompleteProps, 'source' | 'id' | 'templates' | 'defaultValue' | 'onConfirm' | 'dropdownArrow'> {
|
|
6
6
|
options: Array<FieldOptionProps>;
|
|
7
7
|
}
|
|
@@ -15,10 +15,10 @@ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/h
|
|
|
15
15
|
|
|
16
16
|
var _react = _interopRequireWildcard(require("react"));
|
|
17
17
|
|
|
18
|
-
var _AutoComplete = _interopRequireDefault(require("@digigov/ui/admin/AutoComplete"));
|
|
19
|
-
|
|
20
18
|
var _reactCore = require("@digigov/react-core");
|
|
21
19
|
|
|
20
|
+
var _AutoComplete = _interopRequireDefault(require("@digigov/ui/form/AutoComplete"));
|
|
21
|
+
|
|
22
22
|
var _excluded = ["name", "extra", "onChange", "value"];
|
|
23
23
|
|
|
24
24
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
@@ -13,7 +13,7 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
13
13
|
|
|
14
14
|
var _form = _interopRequireWildcard(require("@digigov/form"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _Button = require("@digigov/ui/form/Button");
|
|
17
17
|
|
|
18
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
19
|
|
|
@@ -99,7 +99,7 @@ var _ref = /*#__PURE__*/_react["default"].createElement(_form.Field, {
|
|
|
99
99
|
name: "auth_form"
|
|
100
100
|
});
|
|
101
101
|
|
|
102
|
-
var _ref2 = /*#__PURE__*/_react["default"].createElement(
|
|
102
|
+
var _ref2 = /*#__PURE__*/_react["default"].createElement(_Button.Button, {
|
|
103
103
|
type: "submit"
|
|
104
104
|
}, "\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1");
|
|
105
105
|
|
|
@@ -13,13 +13,13 @@ var _react = _interopRequireDefault(require("react"));
|
|
|
13
13
|
|
|
14
14
|
var _form = _interopRequireWildcard(require("@digigov/form"));
|
|
15
15
|
|
|
16
|
-
var
|
|
16
|
+
var _Button = require("@digigov/ui/form/Button");
|
|
17
17
|
|
|
18
18
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
19
19
|
|
|
20
20
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
21
21
|
|
|
22
|
-
var _ref = /*#__PURE__*/_react["default"].createElement(
|
|
22
|
+
var _ref = /*#__PURE__*/_react["default"].createElement(_Button.Button, {
|
|
23
23
|
type: "submit"
|
|
24
24
|
}, "\u03A3\u03C5\u03BD\u03AD\u03C7\u03B5\u03B9\u03B1");
|
|
25
25
|
|