@uides/stepwise 2.2.1 → 2.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +11 -2
- package/generators/extractStepwisePossibleValues.d.mts +1 -0
- package/index.js +1 -1
- package/package.json +1 -1
- package/schemas/action.d.ts +48 -168
- package/schemas/action.js +34 -47
- package/schemas/field/afm/index.d.ts +158 -6
- package/schemas/field/afm/index.js +6 -9
- package/schemas/field/amka/index.d.ts +152 -8
- package/schemas/field/amka/index.js +3 -7
- package/schemas/field/attachment/index.d.ts +184 -16
- package/schemas/field/attachment/index.js +9 -22
- package/schemas/field/captcha/index.d.ts +156 -2
- package/schemas/field/captcha/index.js +6 -9
- package/schemas/field/choice/index.d.ts +188 -15
- package/schemas/field/choice/index.js +4 -9
- package/schemas/field/common.d.ts +92 -40
- package/schemas/field/common.js +78 -11
- package/schemas/field/date/index.d.ts +152 -38
- package/schemas/field/date/index.js +6 -33
- package/schemas/field/doc_subtitle/index.d.ts +158 -5
- package/schemas/field/doc_subtitle/index.js +5 -6
- package/schemas/field/doc_title/index.d.ts +154 -8
- package/schemas/field/doc_title/index.js +5 -12
- package/schemas/field/dynamically-filled-text/index.d.ts +170 -33
- package/schemas/field/dynamically-filled-text/index.js +6 -23
- package/schemas/field/email/index.d.ts +152 -8
- package/schemas/field/email/index.js +5 -9
- package/schemas/field/fillable-string/index.d.ts +156 -12
- package/schemas/field/fillable-string/index.js +4 -10
- package/schemas/field/five-block-date/index.d.ts +156 -2
- package/schemas/field/five-block-date/index.js +5 -4
- package/schemas/field/hidden/index.d.ts +161 -14
- package/schemas/field/hidden/index.js +7 -15
- package/schemas/field/hierarchical-selector/index.d.ts +176 -37
- package/schemas/field/hierarchical-selector/index.js +5 -21
- package/schemas/field/iban/index.d.ts +168 -6
- package/schemas/field/iban/index.js +3 -3
- package/schemas/field/image/index.d.ts +168 -16
- package/schemas/field/image/index.js +7 -23
- package/schemas/field/index.d.ts +2 -7
- package/schemas/field/index.js +8 -15
- package/schemas/field/int/index.d.ts +152 -8
- package/schemas/field/int/index.js +5 -9
- package/schemas/field/intl_mobile_phone/index.d.ts +156 -3
- package/schemas/field/intl_mobile_phone/index.js +5 -5
- package/schemas/field/lab-results/index.d.ts +156 -3
- package/schemas/field/lab-results/index.js +6 -6
- package/schemas/field/mobile_phone/index.d.ts +158 -5
- package/schemas/field/mobile_phone/index.js +5 -6
- package/schemas/field/multiple-choice/index.d.ts +180 -12
- package/schemas/field/multiple-choice/index.js +3 -8
- package/schemas/field/password/index.d.ts +156 -2
- package/schemas/field/password/index.js +5 -5
- package/schemas/field/pdf-image/index.d.ts +152 -14
- package/schemas/field/pdf-image/index.js +6 -18
- package/schemas/field/postal_code/index.d.ts +156 -4
- package/schemas/field/postal_code/index.js +6 -8
- package/schemas/field/preference-multiple-choice/index.d.ts +211 -17
- package/schemas/field/preference-multiple-choice/index.js +5 -9
- package/schemas/field/qrcode/index.d.ts +168 -19
- package/schemas/field/qrcode/index.js +6 -18
- package/schemas/field/quote/index.d.ts +170 -11
- package/schemas/field/quote/index.js +4 -12
- package/schemas/field/radio-choice/index.d.ts +172 -9
- package/schemas/field/radio-choice/index.js +4 -10
- package/schemas/field/rate/index.d.ts +150 -8
- package/schemas/field/rate/index.js +4 -7
- package/schemas/field/recipient/index.d.ts +158 -5
- package/schemas/field/recipient/index.js +5 -9
- package/schemas/field/redirect/index.d.ts +156 -6
- package/schemas/field/redirect/index.js +6 -9
- package/schemas/field/refcode/index.d.ts +168 -16
- package/schemas/field/refcode/index.js +6 -20
- package/schemas/field/string/index.d.ts +226 -65
- package/schemas/field/string/index.js +5 -54
- package/schemas/field/text/index.d.ts +170 -33
- package/schemas/field/text/index.js +5 -30
- package/schemas/field/three-block-date/index.d.ts +176 -12
- package/schemas/field/three-block-date/index.js +4 -10
- package/schemas/field/url/index.d.ts +204 -0
- package/schemas/field/url/index.js +16 -0
- package/schemas/fieldset/component-params.d.ts +9 -41
- package/schemas/fieldset/component-params.js +5 -29
- package/schemas/fieldset/display-components.d.ts +16 -244
- package/schemas/fieldset/display-components.js +6 -19
- package/schemas/fieldset/enums.d.ts +0 -22
- package/schemas/fieldset/enums.js +1 -15
- package/schemas/fieldset/index.d.ts +9 -93
- package/schemas/index.d.ts +1 -1
- package/schemas/index.js +1 -1
- package/schemas/step.d.ts +7 -0
- package/schemas/step.js +2 -1
- package/schemas/{template/template.d.ts → template.d.ts} +47 -23
- package/schemas/template.js +26 -0
- package/src/generators/actions-possible-values/document-anon-create.json +19 -0
- package/src/generators/actions-possible-values/document-backstep.json +19 -0
- package/src/generators/actions-possible-values/document-create-new.json +43 -0
- package/src/generators/actions-possible-values/document-create.json +20 -0
- package/src/generators/actions-possible-values/document-dismiss.json +36 -0
- package/src/generators/actions-possible-values/document-download-pdf.json +69 -0
- package/src/generators/actions-possible-values/document-email.json +42 -0
- package/src/generators/actions-possible-values/document-resend-otp.json +30 -0
- package/src/generators/actions-possible-values/document-revoke.json +46 -0
- package/src/generators/actions-possible-values/document-share.json +29 -0
- package/src/generators/actions-possible-values/document-sms.json +38 -0
- package/src/generators/actions-possible-values/document-temporary-save.json +28 -0
- package/src/generators/actions-possible-values/document-update.json +111 -0
- package/src/generators/actions-possible-values/entity-forward.json +31 -0
- package/src/generators/actions-possible-values/entity-reply.json +31 -0
- package/src/generators/actions-possible-values/entity-send-message.json +34 -0
- package/src/generators/actions-possible-values/hidden.json +22 -0
- package/src/generators/actions-possible-values/link.json +43 -0
- package/src/generators/extractStepwisePossibleValues.mjs +139 -0
- package/src/generators/fields-possible-values/afm.json +94 -0
- package/src/generators/fields-possible-values/amka.json +26 -0
- package/src/generators/fields-possible-values/attachment.json +89 -0
- package/src/generators/fields-possible-values/captcha.json +16 -0
- package/src/generators/fields-possible-values/choice.json +432 -0
- package/src/generators/fields-possible-values/date.json +57 -0
- package/src/generators/fields-possible-values/doc_subtitle.json +26 -0
- package/src/generators/fields-possible-values/doc_title.json +63 -0
- package/src/generators/fields-possible-values/dynamically-filled-text.json +47 -0
- package/src/generators/fields-possible-values/email.json +65 -0
- package/src/generators/fields-possible-values/fillable-string.json +47 -0
- package/src/generators/fields-possible-values/five-block-date.json +23 -0
- package/src/generators/fields-possible-values/hidden.json +140 -0
- package/src/generators/fields-possible-values/hierarchical-selector.json +84 -0
- package/src/generators/fields-possible-values/iban.json +35 -0
- package/src/generators/fields-possible-values/image.json +37 -0
- package/src/generators/fields-possible-values/int.json +52 -0
- package/src/generators/fields-possible-values/intl_mobile_phone.json +32 -0
- package/src/generators/fields-possible-values/lab-results.json +19 -0
- package/src/generators/fields-possible-values/mobile_phone.json +45 -0
- package/src/generators/fields-possible-values/multiple-choice.json +128 -0
- package/src/generators/fields-possible-values/password.json +20 -0
- package/src/generators/fields-possible-values/pdf-image.json +70 -0
- package/src/generators/fields-possible-values/postal_code.json +32 -0
- package/src/generators/fields-possible-values/preference-multiple-choice.json +53 -0
- package/src/generators/fields-possible-values/qrcode.json +75 -0
- package/src/generators/fields-possible-values/quote.json +71 -0
- package/src/generators/fields-possible-values/radio-choice.json +209 -0
- package/src/generators/fields-possible-values/rate.json +26 -0
- package/src/generators/fields-possible-values/recipient.json +46 -0
- package/src/generators/fields-possible-values/redirect.json +22 -0
- package/src/generators/fields-possible-values/refcode.json +89 -0
- package/src/generators/fields-possible-values/string.json +778 -0
- package/src/generators/fields-possible-values/text.json +105 -0
- package/src/generators/fields-possible-values/three-block-date.json +83 -0
- package/src/generators/fields-possible-values/url.json +23 -0
- package/src/generators/fieldsets-possible-values/form.json +311 -0
- package/src/generators/fieldsets-possible-values/hidden.json +107 -0
- package/src/generators/fieldsets-possible-values/unknown.json +69 -0
- package/src/generators/fieldsets-possible-values/values-list.json +364 -0
- package/src/schemas/action.ts +44 -58
- package/src/schemas/field/afm/index.ts +8 -6
- package/src/schemas/field/amka/index.ts +7 -9
- package/src/schemas/field/attachment/index.ts +9 -23
- package/src/schemas/field/captcha/index.ts +8 -3
- package/src/schemas/field/choice/index.ts +7 -5
- package/src/schemas/field/common.spec.ts +0 -3
- package/src/schemas/field/common.ts +115 -53
- package/src/schemas/field/date/index.ts +8 -24
- package/src/schemas/field/doc_subtitle/index.ts +7 -4
- package/src/schemas/field/doc_title/index.ts +7 -14
- package/src/schemas/field/dynamically-filled-text/index.ts +7 -15
- package/src/schemas/field/email/index.ts +7 -9
- package/src/schemas/field/fillable-string/index.ts +7 -11
- package/src/schemas/field/five-block-date/index.ts +7 -2
- package/src/schemas/field/hidden/index.ts +15 -40
- package/src/schemas/field/hierarchical-selector/index.ts +8 -18
- package/src/schemas/field/iban/index.ts +7 -3
- package/src/schemas/field/image/index.ts +8 -10
- package/src/schemas/field/index.ts +8 -33
- package/src/schemas/field/int/index.ts +7 -9
- package/src/schemas/field/intl_mobile_phone/index.ts +7 -3
- package/src/schemas/field/lab-results/index.ts +7 -3
- package/src/schemas/field/mobile_phone/index.ts +7 -4
- package/src/schemas/field/multiple-choice/index.ts +7 -5
- package/src/schemas/field/password/index.ts +8 -3
- package/src/schemas/field/pdf-image/index.ts +8 -12
- package/src/schemas/field/postal_code/index.ts +8 -5
- package/src/schemas/field/preference-multiple-choice/index.ts +8 -7
- package/src/schemas/field/qrcode/index.ts +7 -10
- package/src/schemas/field/quote/index.ts +8 -8
- package/src/schemas/field/radio-choice/index.ts +7 -5
- package/src/schemas/field/rate/index.ts +7 -8
- package/src/schemas/field/recipient/index.ts +7 -4
- package/src/schemas/field/redirect/index.ts +7 -6
- package/src/schemas/field/refcode/index.ts +7 -21
- package/src/schemas/field/string/index.ts +7 -42
- package/src/schemas/field/text/index.ts +8 -16
- package/src/schemas/field/three-block-date/index.ts +7 -6
- package/src/schemas/field/url/index.ts +24 -0
- package/src/schemas/fieldset/component-params.ts +4 -20
- package/src/schemas/fieldset/display-components.ts +5 -36
- package/src/schemas/fieldset/enums.ts +0 -38
- package/src/schemas/step.ts +1 -0
- package/src/schemas/{template/template-base.ts → template.ts} +30 -6
- package/src/utils/index.ts +69 -2
- package/utils/index.js +28 -2
- package/schemas/field/consent-content/index.d.ts +0 -68
- package/schemas/field/consent-content/index.js +0 -19
- package/schemas/field/image-crop/index.d.ts +0 -59
- package/schemas/field/image-crop/index.js +0 -19
- package/schemas/field/landline_phone/index.d.ts +0 -48
- package/schemas/field/landline_phone/index.js +0 -14
- package/schemas/field/link/index.d.ts +0 -50
- package/schemas/field/link/index.js +0 -16
- package/schemas/field/phone/index.d.ts +0 -48
- package/schemas/field/phone/index.js +0 -14
- package/schemas/field/url-param/index.d.ts +0 -57
- package/schemas/field/url-param/index.js +0 -14
- package/schemas/template/index.d.ts +0 -2
- package/schemas/template/index.js +0 -2
- package/schemas/template/template-base.d.ts +0 -53
- package/schemas/template/template-base.js +0 -15
- package/schemas/template/template-source.d.ts +0 -50
- package/schemas/template/template-source.js +0 -14
- package/schemas/template/template.js +0 -22
- package/src/schemas/field/consent-content/index.ts +0 -28
- package/src/schemas/field/image-crop/index.ts +0 -25
- package/src/schemas/field/landline_phone/index.ts +0 -18
- package/src/schemas/field/link/index.ts +0 -20
- package/src/schemas/field/phone/index.ts +0 -18
- package/src/schemas/field/url-param/index.ts +0 -23
- package/src/schemas/template/index.ts +0 -2
- package/src/schemas/template/template-source.ts +0 -88
- package/src/schemas/template/template.ts +0 -49
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const AfmDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('afm'),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
7
12
|
})
|
|
8
13
|
);
|
|
9
14
|
|
|
10
|
-
const AfmSchema =
|
|
11
|
-
'user-input-mode': v.picklist(['noinput', 'optional', 'required'
|
|
12
|
-
attribute: v.nullish(v.string()),
|
|
13
|
-
datatype: v.nullish(v.literal('afm')),
|
|
15
|
+
const AfmSchema = createFieldSchema({
|
|
16
|
+
'user-input-mode': v.picklist(['noinput', 'optional', 'required']),
|
|
14
17
|
display: AfmDisplaySchema,
|
|
15
18
|
'default-value': v.nullish(v.string()),
|
|
16
|
-
sources: v.nullish(v.string()),
|
|
17
19
|
});
|
|
18
20
|
export type AfmType = v.InferOutput<typeof AfmSchema>;
|
|
19
21
|
export type AfmSchemaType = v.GenericSchema<AfmType>;
|
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const AmkaDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('amka'),
|
|
7
|
-
'component-params': v.nullish(
|
|
8
|
-
v.strictObject({
|
|
9
|
-
textColor: v.nullish(v.string()),
|
|
10
|
-
})
|
|
11
|
-
),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
12
12
|
})
|
|
13
13
|
);
|
|
14
14
|
|
|
15
|
-
const AmkaSchema =
|
|
15
|
+
const AmkaSchema = createFieldSchema({
|
|
16
16
|
'user-input-mode': v.picklist(['noinput', 'optional', 'required']),
|
|
17
|
-
attribute: v.nullish(v.string()),
|
|
18
17
|
display: AmkaDisplaySchema,
|
|
19
|
-
datatype: v.nullish(v.literal('amka')),
|
|
20
18
|
'default-value': v.nullish(v.string()),
|
|
21
19
|
});
|
|
22
20
|
|
|
@@ -1,40 +1,26 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
});
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
8
7
|
|
|
9
8
|
const AttachmentDisplaySchema = createFieldDisplay(
|
|
10
9
|
v.strictObject({
|
|
11
10
|
component: v.literal('attachment'),
|
|
12
11
|
'component-params': v.nullish(
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
createComponentParams({
|
|
13
|
+
filetype: v.nullish(v.picklist(['pdf', 'pdf-for-mark'])),
|
|
14
|
+
'file-max-size': v.nullish(v.number()),
|
|
15
15
|
multiplicity: v.nullish(v.number()),
|
|
16
16
|
})
|
|
17
17
|
),
|
|
18
|
-
}),
|
|
19
|
-
v.strictObject({
|
|
20
|
-
component: v.literal('attachment'),
|
|
21
|
-
'component-params': v.nullish(
|
|
22
|
-
// TODO: Make pdf component-params also inherit default component-params
|
|
23
|
-
v.strictObject({
|
|
24
|
-
...CommonAttachmentComponentParamsSchema.entries,
|
|
25
|
-
coordinates: v.nullish(v.array(v.nullable(v.number()))),
|
|
26
|
-
})
|
|
27
|
-
),
|
|
28
18
|
})
|
|
29
19
|
);
|
|
30
20
|
|
|
31
|
-
const AttachmentSchema =
|
|
21
|
+
const AttachmentSchema = createFieldSchema({
|
|
32
22
|
'user-input-mode': v.picklist(['noinput', 'optional', 'required', 'display']),
|
|
33
|
-
datatype: v.nullish(v.literal('attachment')),
|
|
34
|
-
attribute: v.nullish(v.string()),
|
|
35
23
|
display: AttachmentDisplaySchema,
|
|
36
|
-
sources: v.nullish(v.string()),
|
|
37
|
-
'value-constructor': v.nullish(v.string()),
|
|
38
24
|
'validation-download-attachment-fn': v.nullish(v.string()),
|
|
39
25
|
});
|
|
40
26
|
|
|
@@ -1,14 +1,19 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const CaptchaDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('captcha'),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
7
12
|
})
|
|
8
13
|
);
|
|
9
14
|
|
|
10
|
-
const CaptchaSchema =
|
|
11
|
-
'user-input-mode': v.
|
|
15
|
+
const CaptchaSchema = createFieldSchema({
|
|
16
|
+
'user-input-mode': v.literal('required'),
|
|
12
17
|
display: CaptchaDisplaySchema,
|
|
13
18
|
});
|
|
14
19
|
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const ChoiceDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
@@ -7,7 +11,7 @@ const ChoiceDisplaySchema = createFieldDisplay(
|
|
|
7
11
|
choices: v.nullish(v.union([v.string(), v.record(v.string(), v.string())])),
|
|
8
12
|
'choices-order': v.nullish(v.string()),
|
|
9
13
|
'component-params': v.nullish(
|
|
10
|
-
|
|
14
|
+
createComponentParams({
|
|
11
15
|
autocomplete: v.nullish(v.boolean()),
|
|
12
16
|
'legacy-mode': v.nullish(v.boolean()),
|
|
13
17
|
'format-title': v.nullish(v.boolean()),
|
|
@@ -16,13 +20,11 @@ const ChoiceDisplaySchema = createFieldDisplay(
|
|
|
16
20
|
})
|
|
17
21
|
);
|
|
18
22
|
|
|
19
|
-
const ChoiceSchema =
|
|
23
|
+
const ChoiceSchema = createFieldSchema({
|
|
20
24
|
'user-input-mode': v.picklist(['noinput', 'optional', 'required']),
|
|
21
25
|
display: ChoiceDisplaySchema,
|
|
22
26
|
'default-value': v.nullish(v.string()),
|
|
23
27
|
'choices-source-fn': v.nullish(v.string()),
|
|
24
|
-
attribute: v.nullish(v.string()),
|
|
25
|
-
datatype: v.nullish(v.picklist(['choice', 'string'])),
|
|
26
28
|
});
|
|
27
29
|
|
|
28
30
|
export type ChoiceType = v.InferOutput<typeof ChoiceSchema>;
|
|
@@ -1,16 +1,13 @@
|
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-unused-vars */
|
|
2
1
|
import * as v from 'valibot';
|
|
3
|
-
import {
|
|
4
|
-
DisplayLang,
|
|
5
|
-
DisplayModeSchema,
|
|
6
|
-
DisplayLangSchema as BaseDisplayLangSchema,
|
|
7
|
-
} from '@uides/stepwise/schemas/common';
|
|
2
|
+
import { DisplayLang } from '@uides/stepwise/schemas/common';
|
|
8
3
|
import { resolveDisplay } from '@uides/stepwise/schemas/resolve';
|
|
9
4
|
import { isFailureDataset } from '@uides/stepwise/utils';
|
|
10
5
|
|
|
6
|
+
const KNOWN_DISPLAY_MODES = ['default', 'web', 'pdf'] as const;
|
|
7
|
+
|
|
11
8
|
// TODO: Make default lang mandatory?
|
|
12
9
|
const FieldDisplayLangSchema = v.pipe(
|
|
13
|
-
v.record(
|
|
10
|
+
v.record(v.string(), v.any()),
|
|
14
11
|
v.check((val) => {
|
|
15
12
|
if (!val) return false;
|
|
16
13
|
if (Object.keys(val).length === 0) return false;
|
|
@@ -20,20 +17,39 @@ const FieldDisplayLangSchema = v.pipe(
|
|
|
20
17
|
|
|
21
18
|
// TODO: Make default mode mandatory?
|
|
22
19
|
export const DisplayModeAndLangSchema = v.pipe(
|
|
23
|
-
v.record(
|
|
24
|
-
v.
|
|
25
|
-
if (
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
20
|
+
v.record(v.string(), v.any()),
|
|
21
|
+
v.rawCheck<Record<string, unknown>>(({ dataset, addIssue }) => {
|
|
22
|
+
if (isFailureDataset(dataset)) return;
|
|
23
|
+
const val = dataset.value;
|
|
24
|
+
if (!val || Object.keys(val).length === 0) {
|
|
25
|
+
addIssue({ message: 'At least one display mode must be defined.' });
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
for (const [key, value] of Object.entries(val)) {
|
|
29
|
+
if (!(KNOWN_DISPLAY_MODES as readonly string[]).includes(key)) continue;
|
|
30
|
+
const result = v.safeParse(FieldDisplayLangSchema, value);
|
|
31
|
+
if (result.issues) {
|
|
32
|
+
result.issues.forEach((issue) => {
|
|
33
|
+
addIssue({
|
|
34
|
+
message: issue.message,
|
|
35
|
+
path: issue.path,
|
|
36
|
+
input: issue.input,
|
|
37
|
+
expected: issue.expected ?? undefined,
|
|
38
|
+
received: issue.received,
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
})
|
|
29
44
|
);
|
|
30
45
|
|
|
46
|
+
const VALIDATED_DISPLAY_MODES = ['default', 'web'] as const;
|
|
47
|
+
|
|
31
48
|
type AnyGenericSchema = v.GenericSchema<unknown, unknown>;
|
|
32
49
|
|
|
33
50
|
export interface DisplayType<
|
|
34
51
|
DefaultDisplaySchema extends AnyGenericSchema,
|
|
35
52
|
WebDisplaySchema extends AnyGenericSchema = AnyGenericSchema,
|
|
36
|
-
PdfDisplaySchema extends AnyGenericSchema = AnyGenericSchema,
|
|
37
53
|
> {
|
|
38
54
|
default?: Partial<
|
|
39
55
|
Record<
|
|
@@ -47,17 +63,11 @@ export interface DisplayType<
|
|
|
47
63
|
v.InferOutput<WebDisplaySchema> | (unknown & Record<never, never>)
|
|
48
64
|
>
|
|
49
65
|
>;
|
|
50
|
-
pdf?: Partial<
|
|
51
|
-
Record<
|
|
52
|
-
DisplayLang,
|
|
53
|
-
v.InferOutput<PdfDisplaySchema> | (unknown & Record<never, never>)
|
|
54
|
-
>
|
|
55
|
-
>;
|
|
56
66
|
}
|
|
57
67
|
|
|
58
68
|
// TODO: Is type too big?
|
|
59
69
|
/**
|
|
60
|
-
* Creates a field display schema with specified default
|
|
70
|
+
* Creates a field display schema with specified default display properties.
|
|
61
71
|
*
|
|
62
72
|
* Defaults are:
|
|
63
73
|
* - title
|
|
@@ -70,19 +80,10 @@ export interface DisplayType<
|
|
|
70
80
|
* - md
|
|
71
81
|
* - example
|
|
72
82
|
*/
|
|
73
|
-
export function createFieldDisplay<
|
|
74
|
-
D extends v.ObjectEntries,
|
|
75
|
-
P extends v.ObjectEntries = never,
|
|
76
|
-
>(
|
|
83
|
+
export function createFieldDisplay<D extends v.ObjectEntries>(
|
|
77
84
|
DefaultDisplay:
|
|
78
85
|
| v.StrictObjectSchema<D, undefined>
|
|
79
|
-
| v.LooseObjectSchema<D, undefined
|
|
80
|
-
// TODO: Add PDF validation
|
|
81
|
-
|
|
82
|
-
// @ts-expect-error value not used
|
|
83
|
-
PdfDisplay?:
|
|
84
|
-
| v.StrictObjectSchema<P, undefined>
|
|
85
|
-
| v.LooseObjectSchema<P, undefined>
|
|
86
|
+
| v.LooseObjectSchema<D, undefined>
|
|
86
87
|
) {
|
|
87
88
|
// Base schema for display modes
|
|
88
89
|
// Use loose or strict object based on DefaultDisplay schema type
|
|
@@ -99,34 +100,16 @@ export function createFieldDisplay<
|
|
|
99
100
|
v.record(v.string(), defaultDisplayContent)
|
|
100
101
|
);
|
|
101
102
|
|
|
102
|
-
// const pdfDisplayContent = v.strictObject({
|
|
103
|
-
// ...FieldDisplayModeBaseSchema.entries,
|
|
104
|
-
// ...v.partial(DefaultDisplay).entries,
|
|
105
|
-
// ...PdfDisplay?.entries,
|
|
106
|
-
// });
|
|
107
|
-
// const pdfDisplaySchema = v.record(
|
|
108
|
-
// v.string(),
|
|
109
|
-
// v.record(v.string(), pdfDisplayContent)
|
|
110
|
-
// );
|
|
111
|
-
|
|
112
103
|
const DisplaySchema = v.pipe(
|
|
113
104
|
v.record(v.string(), v.any()),
|
|
114
105
|
v.rawCheck<
|
|
115
|
-
DisplayType<
|
|
116
|
-
typeof defaultDisplayContent,
|
|
117
|
-
typeof defaultDisplayContent,
|
|
118
|
-
typeof defaultDisplayContent
|
|
119
|
-
>
|
|
106
|
+
DisplayType<typeof defaultDisplayContent, typeof defaultDisplayContent>
|
|
120
107
|
>(({ addIssue, dataset }) => {
|
|
121
108
|
if (isFailureDataset(dataset)) return;
|
|
122
109
|
const display = dataset.value;
|
|
123
110
|
|
|
124
|
-
|
|
125
|
-
if (
|
|
126
|
-
!(displayMode in display && display[displayMode]) ||
|
|
127
|
-
displayMode === 'pdf' // TODO: Add PDF validation
|
|
128
|
-
)
|
|
129
|
-
return;
|
|
111
|
+
VALIDATED_DISPLAY_MODES.forEach((displayMode) => {
|
|
112
|
+
if (!(displayMode in display && display[displayMode])) return;
|
|
130
113
|
Object.keys(display[displayMode]).forEach((displayLang) => {
|
|
131
114
|
const resolvedDisplay = resolveDisplay(
|
|
132
115
|
displayMode,
|
|
@@ -178,3 +161,82 @@ const FieldDisplayModeBaseSchema = v.strictObject({
|
|
|
178
161
|
})
|
|
179
162
|
),
|
|
180
163
|
});
|
|
164
|
+
|
|
165
|
+
export const COMMON_FIELD_ATTRS = {
|
|
166
|
+
attribute: v.nullish(v.any()),
|
|
167
|
+
sources: v.nullish(v.any()),
|
|
168
|
+
'value-constructor': v.nullish(v.any()),
|
|
169
|
+
datatype: v.nullish(v.any()),
|
|
170
|
+
'is-display-field': v.nullish(v.any()),
|
|
171
|
+
'default-on-empty': v.nullish(v.any()),
|
|
172
|
+
} as const;
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Creates a field schema with common attributes pre-applied.
|
|
176
|
+
*
|
|
177
|
+
* Common attributes are backend-related concerns that the UI does not use, mostly related to PDF.
|
|
178
|
+
* Per-field entries override common ones.
|
|
179
|
+
*
|
|
180
|
+
* @param entries - Field-specific entries.
|
|
181
|
+
* @param mode - `'strict'` (default) or `'loose'` object schema.
|
|
182
|
+
*/
|
|
183
|
+
export function createFieldSchema<E extends v.ObjectEntries>(
|
|
184
|
+
entries: E,
|
|
185
|
+
mode: 'strict' | 'loose' = 'strict'
|
|
186
|
+
) {
|
|
187
|
+
// const factory = mode === 'loose' ? v.looseObject : v.strictObject;
|
|
188
|
+
if (mode === 'strict') {
|
|
189
|
+
return v.strictObject({
|
|
190
|
+
...COMMON_FIELD_ATTRS,
|
|
191
|
+
...entries,
|
|
192
|
+
});
|
|
193
|
+
} else {
|
|
194
|
+
return v.looseObject({
|
|
195
|
+
...COMMON_FIELD_ATTRS,
|
|
196
|
+
...entries,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
export const COMMON_COMPONENT_PARAMS_ATTRS = {
|
|
202
|
+
coordinates: v.nullish(v.any()),
|
|
203
|
+
'later-pages': v.nullish(v.any()),
|
|
204
|
+
fontSize: v.nullish(v.any()),
|
|
205
|
+
fontName: v.nullish(v.any()),
|
|
206
|
+
leading: v.nullish(v.any()),
|
|
207
|
+
textColor: v.nullish(v.any()),
|
|
208
|
+
backColor: v.nullish(v.any()),
|
|
209
|
+
bold: v.nullish(v.any()),
|
|
210
|
+
format: v.nullish(v.any()),
|
|
211
|
+
emph: v.nullish(v.any()),
|
|
212
|
+
ignore_emph: v.nullish(v.any()),
|
|
213
|
+
cell_valign: v.nullish(v.any()),
|
|
214
|
+
position: v.nullish(v.any()),
|
|
215
|
+
attachment_retrieval: v.nullish(v.any()),
|
|
216
|
+
} as const;
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Creates a `component-params` schema with common attributes pre-applied.
|
|
220
|
+
*
|
|
221
|
+
* Common attributes are backend-related concerns that the UI does not use, mostly related to PDF.
|
|
222
|
+
* Per-field entries override common ones.
|
|
223
|
+
*
|
|
224
|
+
* @param entries - Field-specific entries.
|
|
225
|
+
* @param mode - `'strict'` (default) or `'loose'` object schema.
|
|
226
|
+
*/
|
|
227
|
+
export function createComponentParams<E extends v.ObjectEntries>(
|
|
228
|
+
entries: E,
|
|
229
|
+
mode: 'strict' | 'loose' = 'strict'
|
|
230
|
+
) {
|
|
231
|
+
if (mode === 'strict') {
|
|
232
|
+
return v.strictObject({
|
|
233
|
+
...COMMON_COMPONENT_PARAMS_ATTRS,
|
|
234
|
+
...entries,
|
|
235
|
+
});
|
|
236
|
+
} else {
|
|
237
|
+
return v.looseObject({
|
|
238
|
+
...COMMON_COMPONENT_PARAMS_ATTRS,
|
|
239
|
+
...entries,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
@@ -1,37 +1,21 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const DateDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('date'),
|
|
7
|
-
'component-params': v.nullish(
|
|
8
|
-
v.strictObject({
|
|
9
|
-
'format-title': v.nullish(v.boolean()),
|
|
10
|
-
cell_valign: v.nullish(v.picklist(['BOTTOM', 'MIDDLE', 'TOP'])),
|
|
11
|
-
bold: v.nullish(v.boolean()),
|
|
12
|
-
position: v.nullish(v.picklist(['left', 'right', 'center', 'justify'])),
|
|
13
|
-
textColor: v.nullish(v.string()),
|
|
14
|
-
labels: v.nullish(
|
|
15
|
-
v.strictObject({
|
|
16
|
-
day: v.string(),
|
|
17
|
-
month: v.string(),
|
|
18
|
-
year: v.string(),
|
|
19
|
-
})
|
|
20
|
-
),
|
|
21
|
-
})
|
|
22
|
-
),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
23
12
|
})
|
|
24
13
|
);
|
|
25
14
|
|
|
26
|
-
const DateSchema =
|
|
27
|
-
'user-input-mode': v.picklist(['noinput'
|
|
15
|
+
const DateSchema = createFieldSchema({
|
|
16
|
+
'user-input-mode': v.picklist(['noinput']),
|
|
28
17
|
display: DateDisplaySchema,
|
|
29
|
-
attribute: v.nullish(v.string()),
|
|
30
|
-
sources: v.nullish(v.string()),
|
|
31
|
-
datatype: v.nullish(v.literal('date')),
|
|
32
|
-
'value-constructor': v.nullish(v.string()),
|
|
33
18
|
value: v.nullish(v.string()),
|
|
34
|
-
'is-display-field': v.nullish(v.boolean()),
|
|
35
19
|
});
|
|
36
20
|
|
|
37
21
|
export type DateType = v.InferOutput<typeof DateSchema>;
|
|
@@ -1,18 +1,21 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const DocSubtitleDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('doc_subtitle'),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
7
12
|
})
|
|
8
13
|
);
|
|
9
14
|
|
|
10
|
-
const DocSubtitleSchema =
|
|
15
|
+
const DocSubtitleSchema = createFieldSchema({
|
|
11
16
|
display: DocSubtitleDisplaySchema,
|
|
12
17
|
'user-input-mode': v.literal('noinput'),
|
|
13
18
|
value: v.nullish(v.string()),
|
|
14
|
-
datatype: v.nullish(v.literal('string')),
|
|
15
|
-
attribute: v.nullish(v.string()),
|
|
16
19
|
});
|
|
17
20
|
|
|
18
21
|
export type DocSubtitleType = v.InferOutput<typeof DocSubtitleSchema>;
|
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
})
|
|
8
|
-
);
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
9
7
|
|
|
10
8
|
const DocTitleDisplaySchema = createFieldDisplay(
|
|
11
9
|
v.strictObject({
|
|
12
10
|
component: v.literal('doc_title'),
|
|
13
|
-
'component-params':
|
|
14
|
-
}),
|
|
15
|
-
v.strictObject({
|
|
16
|
-
component: v.literal('doc_title'),
|
|
17
|
-
'component-params': CommonDocTitleParamsSchema,
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
18
12
|
})
|
|
19
13
|
);
|
|
20
14
|
|
|
21
|
-
const DocTitleSchema =
|
|
15
|
+
const DocTitleSchema = createFieldSchema({
|
|
22
16
|
display: DocTitleDisplaySchema,
|
|
23
17
|
'user-input-mode': v.literal('noinput'),
|
|
24
18
|
value: v.nullish(v.string()),
|
|
25
19
|
'default-value': v.nullish(v.string()),
|
|
26
|
-
attribute: v.nullish(v.string()),
|
|
27
20
|
});
|
|
28
21
|
|
|
29
22
|
export type DocTitleType = v.InferOutput<typeof DocTitleSchema>;
|
|
@@ -1,34 +1,26 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const DynamicallyFilledTextDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('dynamically-filled-text'),
|
|
7
11
|
'component-params': v.nullish(
|
|
8
|
-
|
|
12
|
+
createComponentParams({
|
|
9
13
|
fill: v.nullish(v.boolean()),
|
|
10
|
-
position: v.nullish(v.picklist(['center', 'justify', 'left', 'right'])),
|
|
11
|
-
format: v.nullish(v.literal('plaintext')),
|
|
12
|
-
textColor: v.nullish(v.string()),
|
|
13
|
-
emph: v.nullish(v.boolean()),
|
|
14
|
-
bold: v.nullish(v.boolean()),
|
|
15
|
-
cell_valign: v.nullish(v.string()),
|
|
16
|
-
leading: v.nullish(v.number()),
|
|
17
14
|
})
|
|
18
15
|
),
|
|
19
16
|
})
|
|
20
17
|
);
|
|
21
18
|
|
|
22
|
-
const DynamicallyFilledTextSchema =
|
|
19
|
+
const DynamicallyFilledTextSchema = createFieldSchema({
|
|
23
20
|
value: v.nullish(v.string()),
|
|
24
21
|
display: DynamicallyFilledTextDisplaySchema,
|
|
25
22
|
'user-input-mode': v.picklist(['noinput', 'display']),
|
|
26
23
|
'default-value': v.nullish(v.string()),
|
|
27
|
-
sources: v.nullish(v.string()),
|
|
28
|
-
'value-constructor': v.nullish(v.string()),
|
|
29
|
-
attribute: v.nullish(v.string()),
|
|
30
|
-
datatype: v.nullish(v.literal('string')),
|
|
31
|
-
'is-display-field': v.nullish(v.boolean()),
|
|
32
24
|
});
|
|
33
25
|
|
|
34
26
|
export type DynamicallyFilledTextType = v.InferOutput<
|
|
@@ -1,23 +1,21 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const EmailDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('email'),
|
|
7
|
-
'component-params': v.nullish(
|
|
8
|
-
v.strictObject({
|
|
9
|
-
multiplicity: v.nullish(v.number()),
|
|
10
|
-
})
|
|
11
|
-
),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
12
12
|
})
|
|
13
13
|
);
|
|
14
14
|
|
|
15
|
-
const EmailSchema =
|
|
15
|
+
const EmailSchema = createFieldSchema({
|
|
16
16
|
'user-input-mode': v.picklist(['noinput', 'optional', 'required']),
|
|
17
17
|
display: EmailDisplaySchema,
|
|
18
|
-
attribute: v.nullish(v.string()),
|
|
19
18
|
'default-value': v.nullish(v.string()),
|
|
20
|
-
datatype: v.nullish(v.literal('email')),
|
|
21
19
|
});
|
|
22
20
|
|
|
23
21
|
export type EmailType = v.InferOutput<typeof EmailSchema>;
|
|
@@ -1,27 +1,23 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const FillableStringDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('fillable-string'),
|
|
7
|
-
'component-params': v.nullish(
|
|
8
|
-
v.strictObject({
|
|
9
|
-
emph: v.nullish(v.boolean()),
|
|
10
|
-
})
|
|
11
|
-
),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
12
12
|
})
|
|
13
13
|
);
|
|
14
14
|
|
|
15
|
-
const FillableStringSchema =
|
|
15
|
+
const FillableStringSchema = createFieldSchema({
|
|
16
16
|
'user-input-mode': v.picklist(['noinput', 'display', 'optional']),
|
|
17
17
|
display: FillableStringDisplaySchema,
|
|
18
|
-
attribute: v.nullish(v.string()),
|
|
19
18
|
'default-value': v.nullish(v.string()),
|
|
20
|
-
'value-constructor': v.nullish(v.string()),
|
|
21
19
|
value: v.nullish(v.string()),
|
|
22
20
|
safe: v.nullish(v.boolean()),
|
|
23
|
-
sources: v.nullish(v.string()),
|
|
24
|
-
datatype: v.nullish(v.literal('string')),
|
|
25
21
|
});
|
|
26
22
|
|
|
27
23
|
export type FillableStringType = v.InferOutput<typeof FillableStringSchema>;
|
|
@@ -1,13 +1,18 @@
|
|
|
1
1
|
import * as v from 'valibot';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
createComponentParams,
|
|
4
|
+
createFieldDisplay,
|
|
5
|
+
createFieldSchema,
|
|
6
|
+
} from '@uides/stepwise/schemas/field/common';
|
|
3
7
|
|
|
4
8
|
const FiveBlockDateDisplaySchema = createFieldDisplay(
|
|
5
9
|
v.strictObject({
|
|
6
10
|
component: v.literal('five-block-date'),
|
|
11
|
+
'component-params': v.nullish(createComponentParams({})),
|
|
7
12
|
})
|
|
8
13
|
);
|
|
9
14
|
|
|
10
|
-
const FiveBlockDateSchema =
|
|
15
|
+
const FiveBlockDateSchema = createFieldSchema({
|
|
11
16
|
'user-input-mode': v.picklist(['noinput', 'optional', 'required']),
|
|
12
17
|
display: FiveBlockDateDisplaySchema,
|
|
13
18
|
});
|