@10x-media/form-builder 0.1.0-beta.2 → 0.1.0-beta.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 +18 -0
- package/README.md +2 -2
- package/dist/actions/body/converters.d.ts +20 -0
- package/dist/actions/body/converters.js +57 -0
- package/dist/actions/body/converters.js.map +1 -0
- package/dist/actions/body/escapeHtml.d.ts +6 -0
- package/dist/actions/body/escapeHtml.js +14 -0
- package/dist/actions/body/escapeHtml.js.map +1 -0
- package/dist/actions/body/serializeBody.d.ts +35 -0
- package/dist/actions/body/serializeBody.js +76 -0
- package/dist/actions/body/serializeBody.js.map +1 -0
- package/dist/actions/body/serializeSlate.js +31 -0
- package/dist/actions/body/serializeSlate.js.map +1 -0
- package/dist/actions/body/wildcards.d.ts +10 -0
- package/dist/actions/body/wildcards.js +33 -0
- package/dist/actions/body/wildcards.js.map +1 -0
- package/dist/actions/builtin/confirmation.js +28 -12
- package/dist/actions/builtin/confirmation.js.map +1 -1
- package/dist/actions/builtin/emailTeam.js +7 -9
- package/dist/actions/builtin/emailTeam.js.map +1 -1
- package/dist/actions/builtin/signedWebhook.js +21 -3
- package/dist/actions/builtin/signedWebhook.js.map +1 -1
- package/dist/actions/defineAction.d.ts +2 -1
- package/dist/actions/defineAction.js.map +1 -1
- package/dist/actions/dispatch.js +2 -1
- package/dist/actions/dispatch.js.map +1 -1
- package/dist/actions/runActions.js +8 -1
- package/dist/actions/runActions.js.map +1 -1
- package/dist/actions/task.js +7 -5
- package/dist/actions/task.js.map +1 -1
- package/dist/calc/normalizeCalc.js +5 -17
- package/dist/calc/normalizeCalc.js.map +1 -1
- package/dist/calc/types.d.ts +8 -2
- package/dist/calc/types.js +22 -0
- package/dist/calc/types.js.map +1 -0
- package/dist/client/ByteSizeField.d.ts +21 -0
- package/dist/client/ByteSizeField.js +56 -0
- package/dist/client/ByteSizeField.js.map +1 -0
- package/dist/client/ConditionBuilder.js +2 -1
- package/dist/client/ConditionBuilder.js.map +1 -1
- package/dist/client/FieldNameSelect.d.ts +20 -0
- package/dist/client/FieldNameSelect.js +58 -0
- package/dist/client/FieldNameSelect.js.map +1 -0
- package/dist/client/FlowBuilder.d.ts +0 -1
- package/dist/client/FlowBuilder.js +4 -6
- package/dist/client/FlowBuilder.js.map +1 -1
- package/dist/client/FormConditionField.js +1 -4
- package/dist/client/FormConditionField.js.map +1 -1
- package/dist/client/admin.css +192 -0
- package/dist/client/toStaticLabel.js +13 -0
- package/dist/client/toStaticLabel.js.map +1 -0
- package/dist/collections/formSubmissions.js +5 -3
- package/dist/collections/formSubmissions.js.map +1 -1
- package/dist/collections/forms.js +74 -57
- package/dist/collections/forms.js.map +1 -1
- package/dist/exports/client.d.ts +3 -1
- package/dist/exports/client.js +3 -1
- package/dist/exports/react.d.ts +6 -1
- package/dist/exports/react.js +5 -1
- package/dist/fields/buildFieldBlocks.js +14 -18
- package/dist/fields/buildFieldBlocks.js.map +1 -1
- package/dist/fields/builtin/calculation.js +115 -2
- package/dist/fields/builtin/calculation.js.map +1 -1
- package/dist/fields/builtin/date.js +29 -0
- package/dist/fields/builtin/date.js.map +1 -0
- package/dist/fields/builtin/file.d.ts +15 -0
- package/dist/fields/builtin/file.js +79 -3
- package/dist/fields/builtin/file.js.map +1 -1
- package/dist/fields/builtin/index.d.ts +14 -0
- package/dist/fields/builtin/index.js +11 -2
- package/dist/fields/builtin/index.js.map +1 -1
- package/dist/fields/fieldNamesOfType.js +25 -0
- package/dist/fields/fieldNamesOfType.js.map +1 -0
- package/dist/fields/sharedConfig.js +30 -18
- package/dist/fields/sharedConfig.js.map +1 -1
- package/dist/index.d.ts +19 -2
- package/dist/index.js +14 -4
- package/dist/index.js.map +1 -1
- package/dist/plugin/registerCollections.js +3 -2
- package/dist/plugin/registerCollections.js.map +1 -1
- package/dist/react/Form.js +3 -3
- package/dist/react/Form.js.map +1 -1
- package/dist/react/Poll.js +1 -1
- package/dist/react/captcha/HcaptchaCaptcha.d.ts +28 -0
- package/dist/react/captcha/HcaptchaCaptcha.js +53 -0
- package/dist/react/captcha/HcaptchaCaptcha.js.map +1 -0
- package/dist/react/captcha/RecaptchaCaptcha.d.ts +41 -0
- package/dist/react/captcha/RecaptchaCaptcha.js +93 -0
- package/dist/react/captcha/RecaptchaCaptcha.js.map +1 -0
- package/dist/react/captcha/TurnstileCaptcha.d.ts +28 -0
- package/dist/react/captcha/TurnstileCaptcha.js +53 -0
- package/dist/react/captcha/TurnstileCaptcha.js.map +1 -0
- package/dist/react/captcha/types.d.ts +8 -0
- package/dist/react/captcha/useCaptchaScript.js +45 -0
- package/dist/react/captcha/useCaptchaScript.js.map +1 -0
- package/dist/react/captcha/vendors.js +8 -0
- package/dist/react/captcha/vendors.js.map +1 -0
- package/dist/react/primitives/Input.d.ts +1 -1
- package/dist/react/primitives/Input.js.map +1 -1
- package/dist/react/renderers/calculation.js +1 -1
- package/dist/react/renderers/checkbox.js +1 -1
- package/dist/react/renderers/consent.js +1 -1
- package/dist/react/renderers/date.js +37 -0
- package/dist/react/renderers/date.js.map +1 -0
- package/dist/react/renderers/email.js +1 -1
- package/dist/react/renderers/file.js +20 -7
- package/dist/react/renderers/file.js.map +1 -1
- package/dist/react/renderers/index.js +2 -0
- package/dist/react/renderers/index.js.map +1 -1
- package/dist/react/renderers/number.js +1 -1
- package/dist/react/renderers/repeater.js +1 -1
- package/dist/react/renderers/select.js +1 -1
- package/dist/react/renderers/text.js +1 -1
- package/dist/react/renderers/textarea.js +1 -1
- package/dist/spam/captcha.d.ts +3 -2
- package/dist/spam/captcha.js +3 -2
- package/dist/spam/captcha.js.map +1 -1
- package/dist/spam/clientIp.js +9 -0
- package/dist/spam/clientIp.js.map +1 -0
- package/dist/spam/identify.js +3 -6
- package/dist/spam/identify.js.map +1 -1
- package/dist/spam/providers/hcaptcha.d.ts +17 -0
- package/dist/spam/providers/hcaptcha.js +18 -0
- package/dist/spam/providers/hcaptcha.js.map +1 -0
- package/dist/spam/providers/recaptcha.d.ts +23 -0
- package/dist/spam/providers/recaptcha.js +23 -0
- package/dist/spam/providers/recaptcha.js.map +1 -0
- package/dist/spam/providers/siteverify.js +34 -0
- package/dist/spam/providers/siteverify.js.map +1 -0
- package/dist/spam/providers/turnstile.d.ts +17 -0
- package/dist/spam/providers/turnstile.js +18 -0
- package/dist/spam/providers/turnstile.js.map +1 -0
- package/dist/spam/spamGuard.js +2 -5
- package/dist/spam/spamGuard.js.map +1 -1
- package/dist/spam/types.d.ts +2 -2
- package/dist/translations/en.js +26 -4
- package/dist/translations/en.js.map +1 -1
- package/dist/translations/keys.d.ts +26 -4
- package/dist/translations/keys.js +26 -4
- package/dist/translations/keys.js.map +1 -1
- package/dist/uploads/formatBytes.d.ts +9 -0
- package/dist/uploads/formatBytes.js +25 -0
- package/dist/uploads/formatBytes.js.map +1 -0
- package/dist/uploads/resolveFileRef.js +1 -1
- package/dist/uploads/resolveFileRef.js.map +1 -1
- package/dist/validation/builtin/index.d.ts +14 -0
- package/dist/validation/builtin/index.js +12 -1
- package/dist/validation/builtin/index.js.map +1 -1
- package/dist/validation/builtin/maxDate.js +23 -0
- package/dist/validation/builtin/maxDate.js.map +1 -0
- package/dist/validation/builtin/minDate.js +23 -0
- package/dist/validation/builtin/minDate.js.map +1 -0
- package/dist/validation/builtin/validateDateBound.js +18 -0
- package/dist/validation/builtin/validateDateBound.js.map +1 -0
- package/package.json +3 -2
- package/styles/form-builder.css +0 -190
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* value in every locale (`en.ts`), or it is a type error.
|
|
6
6
|
*/
|
|
7
7
|
declare const keys: {
|
|
8
|
-
readonly pluginName: "formBuilder:pluginName";
|
|
9
8
|
readonly fieldTitle: "formBuilder:fieldTitle";
|
|
10
9
|
readonly fieldTypeText: "formBuilder:fieldType.text";
|
|
11
10
|
readonly fieldTypeTextarea: "formBuilder:fieldType.textarea";
|
|
@@ -13,6 +12,7 @@ declare const keys: {
|
|
|
13
12
|
readonly fieldTypeNumber: "formBuilder:fieldType.number";
|
|
14
13
|
readonly fieldTypeSelect: "formBuilder:fieldType.select";
|
|
15
14
|
readonly fieldTypeCheckbox: "formBuilder:fieldType.checkbox";
|
|
15
|
+
readonly fieldTypeDate: "formBuilder:fieldType.date";
|
|
16
16
|
readonly configOptions: "formBuilder:config.options";
|
|
17
17
|
readonly configOption: "formBuilder:config.option";
|
|
18
18
|
readonly configOptionLabel: "formBuilder:config.optionLabel";
|
|
@@ -20,7 +20,9 @@ declare const keys: {
|
|
|
20
20
|
readonly validationRequired: "formBuilder:validation.required";
|
|
21
21
|
readonly validationEmail: "formBuilder:validation.email";
|
|
22
22
|
readonly validationNumber: "formBuilder:validation.number";
|
|
23
|
+
readonly validationDate: "formBuilder:validation.date";
|
|
23
24
|
readonly validationSelect: "formBuilder:validation.select";
|
|
25
|
+
readonly validationEmailFieldUnknown: "formBuilder:validation.emailFieldUnknown";
|
|
24
26
|
readonly formatYes: "formBuilder:format.yes";
|
|
25
27
|
readonly formatNo: "formBuilder:format.no";
|
|
26
28
|
readonly configName: "formBuilder:config.name";
|
|
@@ -37,6 +39,8 @@ declare const keys: {
|
|
|
37
39
|
readonly ruleMaxLength: "formBuilder:rule.maxLength.label";
|
|
38
40
|
readonly ruleMin: "formBuilder:rule.min.label";
|
|
39
41
|
readonly ruleMax: "formBuilder:rule.max.label";
|
|
42
|
+
readonly ruleMinDate: "formBuilder:rule.minDate.label";
|
|
43
|
+
readonly ruleMaxDate: "formBuilder:rule.maxDate.label";
|
|
40
44
|
readonly rulePattern: "formBuilder:rule.pattern.label";
|
|
41
45
|
readonly ruleEmail: "formBuilder:rule.email.label";
|
|
42
46
|
readonly ruleUrl: "formBuilder:rule.url.label";
|
|
@@ -47,6 +51,8 @@ declare const keys: {
|
|
|
47
51
|
readonly ruleMaxLengthMessage: "formBuilder:rule.maxLength.message";
|
|
48
52
|
readonly ruleMinMessage: "formBuilder:rule.min.message";
|
|
49
53
|
readonly ruleMaxMessage: "formBuilder:rule.max.message";
|
|
54
|
+
readonly ruleMinDateMessage: "formBuilder:rule.minDate.message";
|
|
55
|
+
readonly ruleMaxDateMessage: "formBuilder:rule.maxDate.message";
|
|
50
56
|
readonly rulePatternMessage: "formBuilder:rule.pattern.message";
|
|
51
57
|
readonly ruleEmailMessage: "formBuilder:rule.email.message";
|
|
52
58
|
readonly ruleUrlMessage: "formBuilder:rule.url.message";
|
|
@@ -55,6 +61,8 @@ declare const keys: {
|
|
|
55
61
|
readonly ruleNotAlreadySubmittedMessage: "formBuilder:rule.notAlreadySubmitted.message";
|
|
56
62
|
readonly ruleParamMin: "formBuilder:rule.param.min";
|
|
57
63
|
readonly ruleParamMax: "formBuilder:rule.param.max";
|
|
64
|
+
readonly ruleParamMinDate: "formBuilder:rule.param.minDate";
|
|
65
|
+
readonly ruleParamMaxDate: "formBuilder:rule.param.maxDate";
|
|
58
66
|
readonly ruleParamPattern: "formBuilder:rule.param.pattern";
|
|
59
67
|
readonly ruleParamFlags: "formBuilder:rule.param.flags";
|
|
60
68
|
readonly ruleParamValues: "formBuilder:rule.param.values";
|
|
@@ -72,14 +80,20 @@ declare const keys: {
|
|
|
72
80
|
readonly conditionNoFields: "formBuilder:condition.noFields";
|
|
73
81
|
readonly conditionEmpty: "formBuilder:condition.empty";
|
|
74
82
|
readonly conditionSelectField: "formBuilder:condition.selectField";
|
|
75
|
-
readonly conditionValuePlaceholder: "formBuilder:condition.value";
|
|
76
83
|
readonly conditionTrue: "formBuilder:condition.true";
|
|
77
84
|
readonly conditionFalse: "formBuilder:condition.false";
|
|
78
|
-
readonly configAdvanced: "formBuilder:config.advanced";
|
|
79
85
|
readonly configHidden: "formBuilder:config.hidden";
|
|
86
|
+
readonly tabFields: "formBuilder:tab.fields";
|
|
87
|
+
readonly tabFlow: "formBuilder:tab.flow";
|
|
88
|
+
readonly tabActions: "formBuilder:tab.actions";
|
|
89
|
+
readonly tabField: "formBuilder:tab.field";
|
|
90
|
+
readonly tabValidation: "formBuilder:tab.validation";
|
|
91
|
+
readonly tabAdvanced: "formBuilder:tab.advanced";
|
|
80
92
|
readonly fieldTypeCalculation: "formBuilder:fieldType.calculation";
|
|
81
93
|
readonly configExpression: "formBuilder:config.expression";
|
|
94
|
+
readonly configExpressionDescription: "formBuilder:config.expressionDescription";
|
|
82
95
|
readonly configCalcDisplay: "formBuilder:config.calcDisplay";
|
|
96
|
+
readonly validationCalcExpressionInvalid: "formBuilder:validation.calcExpressionInvalid";
|
|
83
97
|
readonly configDefaultPresentation: "formBuilder:config.defaultPresentation";
|
|
84
98
|
readonly presentationPage: "formBuilder:presentation.page";
|
|
85
99
|
readonly presentationModal: "formBuilder:presentation.modal";
|
|
@@ -91,9 +105,14 @@ declare const keys: {
|
|
|
91
105
|
readonly actionConfigTo: "formBuilder:action.config.to";
|
|
92
106
|
readonly actionConfigSubject: "formBuilder:action.config.subject";
|
|
93
107
|
readonly actionConfigBody: "formBuilder:action.config.body";
|
|
108
|
+
readonly actionConfigBodyDescription: "formBuilder:action.config.bodyDescription";
|
|
94
109
|
readonly actionConfigToField: "formBuilder:action.config.toField";
|
|
110
|
+
readonly actionConfigToFieldDescription: "formBuilder:action.config.toFieldDescription";
|
|
95
111
|
readonly actionConfigUrl: "formBuilder:action.config.url";
|
|
112
|
+
readonly actionConfigUrlDescription: "formBuilder:action.config.urlDescription";
|
|
96
113
|
readonly actionConfigSecret: "formBuilder:action.config.secret";
|
|
114
|
+
readonly actionConfigSecretDescription: "formBuilder:action.config.secretDescription";
|
|
115
|
+
readonly validationUrlInvalid: "formBuilder:validation.urlInvalid";
|
|
97
116
|
readonly configActions: "formBuilder:config.actions";
|
|
98
117
|
readonly consentSourceStatic: "formBuilder:consentSource.static";
|
|
99
118
|
readonly consentSourcePageReference: "formBuilder:consentSource.pageReference";
|
|
@@ -109,7 +128,6 @@ declare const keys: {
|
|
|
109
128
|
readonly consentConfigSource: "formBuilder:consent.config.source";
|
|
110
129
|
readonly consentConfigSourceConfig: "formBuilder:consent.config.sourceConfig";
|
|
111
130
|
readonly consentConfigOptional: "formBuilder:consent.config.optional";
|
|
112
|
-
readonly resultsTitle: "formBuilder:results.title";
|
|
113
131
|
readonly resultsResponses: "formBuilder:results.responses";
|
|
114
132
|
readonly resultsNoResponses: "formBuilder:results.noResponses";
|
|
115
133
|
readonly resultsTruncated: "formBuilder:results.truncated";
|
|
@@ -122,6 +140,10 @@ declare const keys: {
|
|
|
122
140
|
readonly fileConfigRelationTo: "formBuilder:file.config.relationTo";
|
|
123
141
|
readonly fileConfigMimeTypes: "formBuilder:file.config.mimeTypes";
|
|
124
142
|
readonly fileConfigMaxSize: "formBuilder:file.config.maxSize";
|
|
143
|
+
readonly fileConfigMaxSizeDescription: "formBuilder:file.config.maxSizeDescription";
|
|
144
|
+
readonly fileTooLarge: "formBuilder:file.tooLarge";
|
|
145
|
+
readonly fileHintAccepted: "formBuilder:file.hint.accepted";
|
|
146
|
+
readonly fileHintMaxSize: "formBuilder:file.hint.maxSize";
|
|
125
147
|
readonly spamRateLimited: "formBuilder:spam.rateLimited";
|
|
126
148
|
readonly spamRejected: "formBuilder:spam.rejected";
|
|
127
149
|
readonly spamCaptchaFailed: "formBuilder:spam.captchaFailed";
|
|
@@ -5,7 +5,6 @@
|
|
|
5
5
|
* value in every locale (`en.ts`), or it is a type error.
|
|
6
6
|
*/
|
|
7
7
|
const keys = {
|
|
8
|
-
pluginName: "formBuilder:pluginName",
|
|
9
8
|
fieldTitle: "formBuilder:fieldTitle",
|
|
10
9
|
fieldTypeText: "formBuilder:fieldType.text",
|
|
11
10
|
fieldTypeTextarea: "formBuilder:fieldType.textarea",
|
|
@@ -13,6 +12,7 @@ const keys = {
|
|
|
13
12
|
fieldTypeNumber: "formBuilder:fieldType.number",
|
|
14
13
|
fieldTypeSelect: "formBuilder:fieldType.select",
|
|
15
14
|
fieldTypeCheckbox: "formBuilder:fieldType.checkbox",
|
|
15
|
+
fieldTypeDate: "formBuilder:fieldType.date",
|
|
16
16
|
configOptions: "formBuilder:config.options",
|
|
17
17
|
configOption: "formBuilder:config.option",
|
|
18
18
|
configOptionLabel: "formBuilder:config.optionLabel",
|
|
@@ -20,7 +20,9 @@ const keys = {
|
|
|
20
20
|
validationRequired: "formBuilder:validation.required",
|
|
21
21
|
validationEmail: "formBuilder:validation.email",
|
|
22
22
|
validationNumber: "formBuilder:validation.number",
|
|
23
|
+
validationDate: "formBuilder:validation.date",
|
|
23
24
|
validationSelect: "formBuilder:validation.select",
|
|
25
|
+
validationEmailFieldUnknown: "formBuilder:validation.emailFieldUnknown",
|
|
24
26
|
formatYes: "formBuilder:format.yes",
|
|
25
27
|
formatNo: "formBuilder:format.no",
|
|
26
28
|
configName: "formBuilder:config.name",
|
|
@@ -37,6 +39,8 @@ const keys = {
|
|
|
37
39
|
ruleMaxLength: "formBuilder:rule.maxLength.label",
|
|
38
40
|
ruleMin: "formBuilder:rule.min.label",
|
|
39
41
|
ruleMax: "formBuilder:rule.max.label",
|
|
42
|
+
ruleMinDate: "formBuilder:rule.minDate.label",
|
|
43
|
+
ruleMaxDate: "formBuilder:rule.maxDate.label",
|
|
40
44
|
rulePattern: "formBuilder:rule.pattern.label",
|
|
41
45
|
ruleEmail: "formBuilder:rule.email.label",
|
|
42
46
|
ruleUrl: "formBuilder:rule.url.label",
|
|
@@ -47,6 +51,8 @@ const keys = {
|
|
|
47
51
|
ruleMaxLengthMessage: "formBuilder:rule.maxLength.message",
|
|
48
52
|
ruleMinMessage: "formBuilder:rule.min.message",
|
|
49
53
|
ruleMaxMessage: "formBuilder:rule.max.message",
|
|
54
|
+
ruleMinDateMessage: "formBuilder:rule.minDate.message",
|
|
55
|
+
ruleMaxDateMessage: "formBuilder:rule.maxDate.message",
|
|
50
56
|
rulePatternMessage: "formBuilder:rule.pattern.message",
|
|
51
57
|
ruleEmailMessage: "formBuilder:rule.email.message",
|
|
52
58
|
ruleUrlMessage: "formBuilder:rule.url.message",
|
|
@@ -55,6 +61,8 @@ const keys = {
|
|
|
55
61
|
ruleNotAlreadySubmittedMessage: "formBuilder:rule.notAlreadySubmitted.message",
|
|
56
62
|
ruleParamMin: "formBuilder:rule.param.min",
|
|
57
63
|
ruleParamMax: "formBuilder:rule.param.max",
|
|
64
|
+
ruleParamMinDate: "formBuilder:rule.param.minDate",
|
|
65
|
+
ruleParamMaxDate: "formBuilder:rule.param.maxDate",
|
|
58
66
|
ruleParamPattern: "formBuilder:rule.param.pattern",
|
|
59
67
|
ruleParamFlags: "formBuilder:rule.param.flags",
|
|
60
68
|
ruleParamValues: "formBuilder:rule.param.values",
|
|
@@ -72,14 +80,20 @@ const keys = {
|
|
|
72
80
|
conditionNoFields: "formBuilder:condition.noFields",
|
|
73
81
|
conditionEmpty: "formBuilder:condition.empty",
|
|
74
82
|
conditionSelectField: "formBuilder:condition.selectField",
|
|
75
|
-
conditionValuePlaceholder: "formBuilder:condition.value",
|
|
76
83
|
conditionTrue: "formBuilder:condition.true",
|
|
77
84
|
conditionFalse: "formBuilder:condition.false",
|
|
78
|
-
configAdvanced: "formBuilder:config.advanced",
|
|
79
85
|
configHidden: "formBuilder:config.hidden",
|
|
86
|
+
tabFields: "formBuilder:tab.fields",
|
|
87
|
+
tabFlow: "formBuilder:tab.flow",
|
|
88
|
+
tabActions: "formBuilder:tab.actions",
|
|
89
|
+
tabField: "formBuilder:tab.field",
|
|
90
|
+
tabValidation: "formBuilder:tab.validation",
|
|
91
|
+
tabAdvanced: "formBuilder:tab.advanced",
|
|
80
92
|
fieldTypeCalculation: "formBuilder:fieldType.calculation",
|
|
81
93
|
configExpression: "formBuilder:config.expression",
|
|
94
|
+
configExpressionDescription: "formBuilder:config.expressionDescription",
|
|
82
95
|
configCalcDisplay: "formBuilder:config.calcDisplay",
|
|
96
|
+
validationCalcExpressionInvalid: "formBuilder:validation.calcExpressionInvalid",
|
|
83
97
|
configDefaultPresentation: "formBuilder:config.defaultPresentation",
|
|
84
98
|
presentationPage: "formBuilder:presentation.page",
|
|
85
99
|
presentationModal: "formBuilder:presentation.modal",
|
|
@@ -91,9 +105,14 @@ const keys = {
|
|
|
91
105
|
actionConfigTo: "formBuilder:action.config.to",
|
|
92
106
|
actionConfigSubject: "formBuilder:action.config.subject",
|
|
93
107
|
actionConfigBody: "formBuilder:action.config.body",
|
|
108
|
+
actionConfigBodyDescription: "formBuilder:action.config.bodyDescription",
|
|
94
109
|
actionConfigToField: "formBuilder:action.config.toField",
|
|
110
|
+
actionConfigToFieldDescription: "formBuilder:action.config.toFieldDescription",
|
|
95
111
|
actionConfigUrl: "formBuilder:action.config.url",
|
|
112
|
+
actionConfigUrlDescription: "formBuilder:action.config.urlDescription",
|
|
96
113
|
actionConfigSecret: "formBuilder:action.config.secret",
|
|
114
|
+
actionConfigSecretDescription: "formBuilder:action.config.secretDescription",
|
|
115
|
+
validationUrlInvalid: "formBuilder:validation.urlInvalid",
|
|
97
116
|
configActions: "formBuilder:config.actions",
|
|
98
117
|
consentSourceStatic: "formBuilder:consentSource.static",
|
|
99
118
|
consentSourcePageReference: "formBuilder:consentSource.pageReference",
|
|
@@ -109,7 +128,6 @@ const keys = {
|
|
|
109
128
|
consentConfigSource: "formBuilder:consent.config.source",
|
|
110
129
|
consentConfigSourceConfig: "formBuilder:consent.config.sourceConfig",
|
|
111
130
|
consentConfigOptional: "formBuilder:consent.config.optional",
|
|
112
|
-
resultsTitle: "formBuilder:results.title",
|
|
113
131
|
resultsResponses: "formBuilder:results.responses",
|
|
114
132
|
resultsNoResponses: "formBuilder:results.noResponses",
|
|
115
133
|
resultsTruncated: "formBuilder:results.truncated",
|
|
@@ -122,6 +140,10 @@ const keys = {
|
|
|
122
140
|
fileConfigRelationTo: "formBuilder:file.config.relationTo",
|
|
123
141
|
fileConfigMimeTypes: "formBuilder:file.config.mimeTypes",
|
|
124
142
|
fileConfigMaxSize: "formBuilder:file.config.maxSize",
|
|
143
|
+
fileConfigMaxSizeDescription: "formBuilder:file.config.maxSizeDescription",
|
|
144
|
+
fileTooLarge: "formBuilder:file.tooLarge",
|
|
145
|
+
fileHintAccepted: "formBuilder:file.hint.accepted",
|
|
146
|
+
fileHintMaxSize: "formBuilder:file.hint.maxSize",
|
|
125
147
|
spamRateLimited: "formBuilder:spam.rateLimited",
|
|
126
148
|
spamRejected: "formBuilder:spam.rejected",
|
|
127
149
|
spamCaptchaFailed: "formBuilder:spam.captchaFailed",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.js","names":[],"sources":["../../src/translations/keys.ts"],"sourcesContent":["/**\n * Typed translation keys. Lookups must go through these constants, not string\n * literals (enforced by requireI18nKeysTyped.grit). Every key here must have a\n * value in every locale (`en.ts`), or it is a type error.\n */\nexport const keys = {\n\tpluginName: 'formBuilder:pluginName',\n\tfieldTitle: 'formBuilder:fieldTitle',\n\tfieldTypeText: 'formBuilder:fieldType.text',\n\tfieldTypeTextarea: 'formBuilder:fieldType.textarea',\n\tfieldTypeEmail: 'formBuilder:fieldType.email',\n\tfieldTypeNumber: 'formBuilder:fieldType.number',\n\tfieldTypeSelect: 'formBuilder:fieldType.select',\n\tfieldTypeCheckbox: 'formBuilder:fieldType.checkbox',\n\tconfigOptions: 'formBuilder:config.options',\n\tconfigOption: 'formBuilder:config.option',\n\tconfigOptionLabel: 'formBuilder:config.optionLabel',\n\tconfigOptionValue: 'formBuilder:config.optionValue',\n\tvalidationRequired: 'formBuilder:validation.required',\n\tvalidationEmail: 'formBuilder:validation.email',\n\tvalidationNumber: 'formBuilder:validation.number',\n\tvalidationSelect: 'formBuilder:validation.select',\n\tformatYes: 'formBuilder:format.yes',\n\tformatNo: 'formBuilder:format.no',\n\tconfigName: 'formBuilder:config.name',\n\tconfigLabel: 'formBuilder:config.label',\n\tconfigRequired: 'formBuilder:config.required',\n\tconfigWidth: 'formBuilder:config.width',\n\tconfigPlaceholder: 'formBuilder:config.placeholder',\n\tconfigDescription: 'formBuilder:config.description',\n\tconfigVisibleWhen: 'formBuilder:config.visibleWhen',\n\tconfigValidateWhen: 'formBuilder:config.validateWhen',\n\tsubmissionAnswers: 'formBuilder:submission.answers',\n\tsubmissionNoAnswers: 'formBuilder:submission.noAnswers',\n\truleMinLength: 'formBuilder:rule.minLength.label',\n\truleMaxLength: 'formBuilder:rule.maxLength.label',\n\truleMin: 'formBuilder:rule.min.label',\n\truleMax: 'formBuilder:rule.max.label',\n\trulePattern: 'formBuilder:rule.pattern.label',\n\truleEmail: 'formBuilder:rule.email.label',\n\truleUrl: 'formBuilder:rule.url.label',\n\truleOneOf: 'formBuilder:rule.oneOf.label',\n\truleMatchesField: 'formBuilder:rule.matchesField.label',\n\truleNotAlreadySubmitted: 'formBuilder:rule.notAlreadySubmitted.label',\n\truleMinLengthMessage: 'formBuilder:rule.minLength.message',\n\truleMaxLengthMessage: 'formBuilder:rule.maxLength.message',\n\truleMinMessage: 'formBuilder:rule.min.message',\n\truleMaxMessage: 'formBuilder:rule.max.message',\n\trulePatternMessage: 'formBuilder:rule.pattern.message',\n\truleEmailMessage: 'formBuilder:rule.email.message',\n\truleUrlMessage: 'formBuilder:rule.url.message',\n\truleOneOfMessage: 'formBuilder:rule.oneOf.message',\n\truleMatchesFieldMessage: 'formBuilder:rule.matchesField.message',\n\truleNotAlreadySubmittedMessage: 'formBuilder:rule.notAlreadySubmitted.message',\n\truleParamMin: 'formBuilder:rule.param.min',\n\truleParamMax: 'formBuilder:rule.param.max',\n\truleParamPattern: 'formBuilder:rule.param.pattern',\n\truleParamFlags: 'formBuilder:rule.param.flags',\n\truleParamValues: 'formBuilder:rule.param.values',\n\truleParamField: 'formBuilder:rule.param.field',\n\tvalidationsLabel: 'formBuilder:validations.label',\n\tvalidationMessageLabel: 'formBuilder:validations.message',\n\tvalidationSeverityLabel: 'formBuilder:validations.severity',\n\tvalidationSeverityError: 'formBuilder:validations.severity.error',\n\tvalidationSeverityWarning: 'formBuilder:validations.severity.warning',\n\tconditionAddCondition: 'formBuilder:condition.addCondition',\n\tconditionAddOr: 'formBuilder:condition.addOr',\n\tconditionAnd: 'formBuilder:condition.and',\n\tconditionOr: 'formBuilder:condition.or',\n\tconditionRemove: 'formBuilder:condition.remove',\n\tconditionNoFields: 'formBuilder:condition.noFields',\n\tconditionEmpty: 'formBuilder:condition.empty',\n\tconditionSelectField: 'formBuilder:condition.selectField',\n\tconditionValuePlaceholder: 'formBuilder:condition.value',\n\tconditionTrue: 'formBuilder:condition.true',\n\tconditionFalse: 'formBuilder:condition.false',\n\tconfigAdvanced: 'formBuilder:config.advanced',\n\tconfigHidden: 'formBuilder:config.hidden',\n\tfieldTypeCalculation: 'formBuilder:fieldType.calculation',\n\tconfigExpression: 'formBuilder:config.expression',\n\tconfigCalcDisplay: 'formBuilder:config.calcDisplay',\n\tconfigDefaultPresentation: 'formBuilder:config.defaultPresentation',\n\tpresentationPage: 'formBuilder:presentation.page',\n\tpresentationModal: 'formBuilder:presentation.modal',\n\tpresentationDrawer: 'formBuilder:presentation.drawer',\n\tpresentationInline: 'formBuilder:presentation.inline',\n\tactionEmailTeam: 'formBuilder:action.emailTeam',\n\tactionConfirmation: 'formBuilder:action.confirmation',\n\tactionSignedWebhook: 'formBuilder:action.signedWebhook',\n\tactionConfigTo: 'formBuilder:action.config.to',\n\tactionConfigSubject: 'formBuilder:action.config.subject',\n\tactionConfigBody: 'formBuilder:action.config.body',\n\tactionConfigToField: 'formBuilder:action.config.toField',\n\tactionConfigUrl: 'formBuilder:action.config.url',\n\tactionConfigSecret: 'formBuilder:action.config.secret',\n\tconfigActions: 'formBuilder:config.actions',\n\tconsentSourceStatic: 'formBuilder:consentSource.static',\n\tconsentSourcePageReference: 'formBuilder:consentSource.pageReference',\n\tconsentConfigLabel: 'formBuilder:consent.config.label',\n\tconsentConfigUrl: 'formBuilder:consent.config.url',\n\tconsentConfigVersion: 'formBuilder:consent.config.version',\n\tconsentConfigRelationTo: 'formBuilder:consent.config.relationTo',\n\tconsentConfigDocId: 'formBuilder:consent.config.docId',\n\tconsentConfigUrlField: 'formBuilder:consent.config.urlField',\n\tconsentConfigCaptureVersion: 'formBuilder:consent.config.captureVersion',\n\tfieldTypeConsent: 'formBuilder:fieldType.consent',\n\tconsentConfigStatement: 'formBuilder:consent.config.statement',\n\tconsentConfigSource: 'formBuilder:consent.config.source',\n\tconsentConfigSourceConfig: 'formBuilder:consent.config.sourceConfig',\n\tconsentConfigOptional: 'formBuilder:consent.config.optional',\n\tresultsTitle: 'formBuilder:results.title',\n\tresultsResponses: 'formBuilder:results.responses',\n\tresultsNoResponses: 'formBuilder:results.noResponses',\n\tresultsTruncated: 'formBuilder:results.truncated',\n\tconfigShowResults: 'formBuilder:config.showResults',\n\tconfigResultsField: 'formBuilder:config.resultsField',\n\tvalidationFileMissing: 'formBuilder:validation.file.missing',\n\tvalidationFileMimeType: 'formBuilder:validation.file.mimeType',\n\tvalidationFileTooLarge: 'formBuilder:validation.file.tooLarge',\n\tfieldTypeFile: 'formBuilder:fieldType.file',\n\tfileConfigRelationTo: 'formBuilder:file.config.relationTo',\n\tfileConfigMimeTypes: 'formBuilder:file.config.mimeTypes',\n\tfileConfigMaxSize: 'formBuilder:file.config.maxSize',\n\tspamRateLimited: 'formBuilder:spam.rateLimited',\n\tspamRejected: 'formBuilder:spam.rejected',\n\tspamCaptchaFailed: 'formBuilder:spam.captchaFailed',\n\tcollectionFormSingular: 'formBuilder:collection.form.singular',\n\tcollectionFormPlural: 'formBuilder:collection.form.plural',\n\tcollectionSubmissionSingular: 'formBuilder:collection.submission.singular',\n\tcollectionSubmissionPlural: 'formBuilder:collection.submission.plural',\n\tstatusComplete: 'formBuilder:status.complete',\n\tstatusPartial: 'formBuilder:status.partial',\n\tfieldTypeRepeater: 'formBuilder:fieldType.repeater',\n\tconfigMinRows: 'formBuilder:config.minRows',\n\tconfigMaxRows: 'formBuilder:config.maxRows',\n\tconfigAddLabel: 'formBuilder:config.addLabel',\n\tconfigSubFields: 'formBuilder:config.subFields',\n\tvalidationRepeaterMin: 'formBuilder:validation.repeaterMin',\n\tvalidationRepeaterMax: 'formBuilder:validation.repeaterMax',\n\trepeaterAddRow: 'formBuilder:repeater.addRow',\n\trepeaterRemoveRow: 'formBuilder:repeater.removeRow',\n\trepeaterRow: 'formBuilder:repeater.row',\n\trepeaterRowCount: 'formBuilder:repeater.rowCount',\n\tsubmissionConsent: 'formBuilder:submission.consent',\n\tsubmissionDetails: 'formBuilder:submission.details',\n\tsubmissionConsentAgreed: 'formBuilder:submission.consentAgreed',\n\tsubmissionConsentDeclined: 'formBuilder:submission.consentDeclined',\n\tsubmissionMetaReceivedAt: 'formBuilder:submission.meta.receivedAt',\n\tsubmissionMetaIp: 'formBuilder:submission.meta.ip',\n\tsubmissionMetaUserAgent: 'formBuilder:submission.meta.userAgent',\n\tsubmissionMetaCaptcha: 'formBuilder:submission.meta.captcha',\n} as const\n\nexport type TranslationKey = (typeof keys)[keyof typeof keys]\n"],"mappings":";;;;;;AAKA,MAAa,OAAO;CACnB,YAAY;CACZ,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,gBAAgB;CAChB,iBAAiB;CACjB,iBAAiB;CACjB,mBAAmB;CACnB,eAAe;CACf,cAAc;CACd,mBAAmB;CACnB,mBAAmB;CACnB,oBAAoB;CACpB,iBAAiB;CACjB,kBAAkB;CAClB,kBAAkB;CAClB,WAAW;CACX,UAAU;CACV,YAAY;CACZ,aAAa;CACb,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB,qBAAqB;CACrB,eAAe;CACf,eAAe;CACf,SAAS;CACT,SAAS;CACT,aAAa;CACb,WAAW;CACX,SAAS;CACT,WAAW;CACX,kBAAkB;CAClB,yBAAyB;CACzB,sBAAsB;CACtB,sBAAsB;CACtB,gBAAgB;CAChB,gBAAgB;CAChB,oBAAoB;CACpB,kBAAkB;CAClB,gBAAgB;CAChB,kBAAkB;CAClB,yBAAyB;CACzB,gCAAgC;CAChC,cAAc;CACd,cAAc;CACd,kBAAkB;CAClB,gBAAgB;CAChB,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,wBAAwB;CACxB,yBAAyB;CACzB,yBAAyB;CACzB,2BAA2B;CAC3B,uBAAuB;CACvB,gBAAgB;CAChB,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,mBAAmB;CACnB,gBAAgB;CAChB,sBAAsB;CACtB,2BAA2B;CAC3B,eAAe;CACf,gBAAgB;CAChB,gBAAgB;CAChB,cAAc;CACd,sBAAsB;CACtB,kBAAkB;CAClB,mBAAmB;CACnB,2BAA2B;CAC3B,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB,oBAAoB;CACpB,iBAAiB;CACjB,oBAAoB;CACpB,qBAAqB;CACrB,gBAAgB;CAChB,qBAAqB;CACrB,kBAAkB;CAClB,qBAAqB;CACrB,iBAAiB;CACjB,oBAAoB;CACpB,eAAe;CACf,qBAAqB;CACrB,4BAA4B;CAC5B,oBAAoB;CACpB,kBAAkB;CAClB,sBAAsB;CACtB,yBAAyB;CACzB,oBAAoB;CACpB,uBAAuB;CACvB,6BAA6B;CAC7B,kBAAkB;CAClB,wBAAwB;CACxB,qBAAqB;CACrB,2BAA2B;CAC3B,uBAAuB;CACvB,cAAc;CACd,kBAAkB;CAClB,oBAAoB;CACpB,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB,uBAAuB;CACvB,wBAAwB;CACxB,wBAAwB;CACxB,eAAe;CACf,sBAAsB;CACtB,qBAAqB;CACrB,mBAAmB;CACnB,iBAAiB;CACjB,cAAc;CACd,mBAAmB;CACnB,wBAAwB;CACxB,sBAAsB;CACtB,8BAA8B;CAC9B,4BAA4B;CAC5B,gBAAgB;CAChB,eAAe;CACf,mBAAmB;CACnB,eAAe;CACf,eAAe;CACf,gBAAgB;CAChB,iBAAiB;CACjB,uBAAuB;CACvB,uBAAuB;CACvB,gBAAgB;CAChB,mBAAmB;CACnB,aAAa;CACb,kBAAkB;CAClB,mBAAmB;CACnB,mBAAmB;CACnB,yBAAyB;CACzB,2BAA2B;CAC3B,0BAA0B;CAC1B,kBAAkB;CAClB,yBAAyB;CACzB,uBAAuB;AACxB"}
|
|
1
|
+
{"version":3,"file":"keys.js","names":[],"sources":["../../src/translations/keys.ts"],"sourcesContent":["/**\n * Typed translation keys. Lookups must go through these constants, not string\n * literals (enforced by requireI18nKeysTyped.grit). Every key here must have a\n * value in every locale (`en.ts`), or it is a type error.\n */\nexport const keys = {\n\tfieldTitle: 'formBuilder:fieldTitle',\n\tfieldTypeText: 'formBuilder:fieldType.text',\n\tfieldTypeTextarea: 'formBuilder:fieldType.textarea',\n\tfieldTypeEmail: 'formBuilder:fieldType.email',\n\tfieldTypeNumber: 'formBuilder:fieldType.number',\n\tfieldTypeSelect: 'formBuilder:fieldType.select',\n\tfieldTypeCheckbox: 'formBuilder:fieldType.checkbox',\n\tfieldTypeDate: 'formBuilder:fieldType.date',\n\tconfigOptions: 'formBuilder:config.options',\n\tconfigOption: 'formBuilder:config.option',\n\tconfigOptionLabel: 'formBuilder:config.optionLabel',\n\tconfigOptionValue: 'formBuilder:config.optionValue',\n\tvalidationRequired: 'formBuilder:validation.required',\n\tvalidationEmail: 'formBuilder:validation.email',\n\tvalidationNumber: 'formBuilder:validation.number',\n\tvalidationDate: 'formBuilder:validation.date',\n\tvalidationSelect: 'formBuilder:validation.select',\n\tvalidationEmailFieldUnknown: 'formBuilder:validation.emailFieldUnknown',\n\tformatYes: 'formBuilder:format.yes',\n\tformatNo: 'formBuilder:format.no',\n\tconfigName: 'formBuilder:config.name',\n\tconfigLabel: 'formBuilder:config.label',\n\tconfigRequired: 'formBuilder:config.required',\n\tconfigWidth: 'formBuilder:config.width',\n\tconfigPlaceholder: 'formBuilder:config.placeholder',\n\tconfigDescription: 'formBuilder:config.description',\n\tconfigVisibleWhen: 'formBuilder:config.visibleWhen',\n\tconfigValidateWhen: 'formBuilder:config.validateWhen',\n\tsubmissionAnswers: 'formBuilder:submission.answers',\n\tsubmissionNoAnswers: 'formBuilder:submission.noAnswers',\n\truleMinLength: 'formBuilder:rule.minLength.label',\n\truleMaxLength: 'formBuilder:rule.maxLength.label',\n\truleMin: 'formBuilder:rule.min.label',\n\truleMax: 'formBuilder:rule.max.label',\n\truleMinDate: 'formBuilder:rule.minDate.label',\n\truleMaxDate: 'formBuilder:rule.maxDate.label',\n\trulePattern: 'formBuilder:rule.pattern.label',\n\truleEmail: 'formBuilder:rule.email.label',\n\truleUrl: 'formBuilder:rule.url.label',\n\truleOneOf: 'formBuilder:rule.oneOf.label',\n\truleMatchesField: 'formBuilder:rule.matchesField.label',\n\truleNotAlreadySubmitted: 'formBuilder:rule.notAlreadySubmitted.label',\n\truleMinLengthMessage: 'formBuilder:rule.minLength.message',\n\truleMaxLengthMessage: 'formBuilder:rule.maxLength.message',\n\truleMinMessage: 'formBuilder:rule.min.message',\n\truleMaxMessage: 'formBuilder:rule.max.message',\n\truleMinDateMessage: 'formBuilder:rule.minDate.message',\n\truleMaxDateMessage: 'formBuilder:rule.maxDate.message',\n\trulePatternMessage: 'formBuilder:rule.pattern.message',\n\truleEmailMessage: 'formBuilder:rule.email.message',\n\truleUrlMessage: 'formBuilder:rule.url.message',\n\truleOneOfMessage: 'formBuilder:rule.oneOf.message',\n\truleMatchesFieldMessage: 'formBuilder:rule.matchesField.message',\n\truleNotAlreadySubmittedMessage: 'formBuilder:rule.notAlreadySubmitted.message',\n\truleParamMin: 'formBuilder:rule.param.min',\n\truleParamMax: 'formBuilder:rule.param.max',\n\truleParamMinDate: 'formBuilder:rule.param.minDate',\n\truleParamMaxDate: 'formBuilder:rule.param.maxDate',\n\truleParamPattern: 'formBuilder:rule.param.pattern',\n\truleParamFlags: 'formBuilder:rule.param.flags',\n\truleParamValues: 'formBuilder:rule.param.values',\n\truleParamField: 'formBuilder:rule.param.field',\n\tvalidationsLabel: 'formBuilder:validations.label',\n\tvalidationMessageLabel: 'formBuilder:validations.message',\n\tvalidationSeverityLabel: 'formBuilder:validations.severity',\n\tvalidationSeverityError: 'formBuilder:validations.severity.error',\n\tvalidationSeverityWarning: 'formBuilder:validations.severity.warning',\n\tconditionAddCondition: 'formBuilder:condition.addCondition',\n\tconditionAddOr: 'formBuilder:condition.addOr',\n\tconditionAnd: 'formBuilder:condition.and',\n\tconditionOr: 'formBuilder:condition.or',\n\tconditionRemove: 'formBuilder:condition.remove',\n\tconditionNoFields: 'formBuilder:condition.noFields',\n\tconditionEmpty: 'formBuilder:condition.empty',\n\tconditionSelectField: 'formBuilder:condition.selectField',\n\tconditionTrue: 'formBuilder:condition.true',\n\tconditionFalse: 'formBuilder:condition.false',\n\tconfigHidden: 'formBuilder:config.hidden',\n\ttabFields: 'formBuilder:tab.fields',\n\ttabFlow: 'formBuilder:tab.flow',\n\ttabActions: 'formBuilder:tab.actions',\n\ttabField: 'formBuilder:tab.field',\n\ttabValidation: 'formBuilder:tab.validation',\n\ttabAdvanced: 'formBuilder:tab.advanced',\n\tfieldTypeCalculation: 'formBuilder:fieldType.calculation',\n\tconfigExpression: 'formBuilder:config.expression',\n\tconfigExpressionDescription: 'formBuilder:config.expressionDescription',\n\tconfigCalcDisplay: 'formBuilder:config.calcDisplay',\n\tvalidationCalcExpressionInvalid: 'formBuilder:validation.calcExpressionInvalid',\n\tconfigDefaultPresentation: 'formBuilder:config.defaultPresentation',\n\tpresentationPage: 'formBuilder:presentation.page',\n\tpresentationModal: 'formBuilder:presentation.modal',\n\tpresentationDrawer: 'formBuilder:presentation.drawer',\n\tpresentationInline: 'formBuilder:presentation.inline',\n\tactionEmailTeam: 'formBuilder:action.emailTeam',\n\tactionConfirmation: 'formBuilder:action.confirmation',\n\tactionSignedWebhook: 'formBuilder:action.signedWebhook',\n\tactionConfigTo: 'formBuilder:action.config.to',\n\tactionConfigSubject: 'formBuilder:action.config.subject',\n\tactionConfigBody: 'formBuilder:action.config.body',\n\tactionConfigBodyDescription: 'formBuilder:action.config.bodyDescription',\n\tactionConfigToField: 'formBuilder:action.config.toField',\n\tactionConfigToFieldDescription: 'formBuilder:action.config.toFieldDescription',\n\tactionConfigUrl: 'formBuilder:action.config.url',\n\tactionConfigUrlDescription: 'formBuilder:action.config.urlDescription',\n\tactionConfigSecret: 'formBuilder:action.config.secret',\n\tactionConfigSecretDescription: 'formBuilder:action.config.secretDescription',\n\tvalidationUrlInvalid: 'formBuilder:validation.urlInvalid',\n\tconfigActions: 'formBuilder:config.actions',\n\tconsentSourceStatic: 'formBuilder:consentSource.static',\n\tconsentSourcePageReference: 'formBuilder:consentSource.pageReference',\n\tconsentConfigLabel: 'formBuilder:consent.config.label',\n\tconsentConfigUrl: 'formBuilder:consent.config.url',\n\tconsentConfigVersion: 'formBuilder:consent.config.version',\n\tconsentConfigRelationTo: 'formBuilder:consent.config.relationTo',\n\tconsentConfigDocId: 'formBuilder:consent.config.docId',\n\tconsentConfigUrlField: 'formBuilder:consent.config.urlField',\n\tconsentConfigCaptureVersion: 'formBuilder:consent.config.captureVersion',\n\tfieldTypeConsent: 'formBuilder:fieldType.consent',\n\tconsentConfigStatement: 'formBuilder:consent.config.statement',\n\tconsentConfigSource: 'formBuilder:consent.config.source',\n\tconsentConfigSourceConfig: 'formBuilder:consent.config.sourceConfig',\n\tconsentConfigOptional: 'formBuilder:consent.config.optional',\n\tresultsResponses: 'formBuilder:results.responses',\n\tresultsNoResponses: 'formBuilder:results.noResponses',\n\tresultsTruncated: 'formBuilder:results.truncated',\n\tconfigShowResults: 'formBuilder:config.showResults',\n\tconfigResultsField: 'formBuilder:config.resultsField',\n\tvalidationFileMissing: 'formBuilder:validation.file.missing',\n\tvalidationFileMimeType: 'formBuilder:validation.file.mimeType',\n\tvalidationFileTooLarge: 'formBuilder:validation.file.tooLarge',\n\tfieldTypeFile: 'formBuilder:fieldType.file',\n\tfileConfigRelationTo: 'formBuilder:file.config.relationTo',\n\tfileConfigMimeTypes: 'formBuilder:file.config.mimeTypes',\n\tfileConfigMaxSize: 'formBuilder:file.config.maxSize',\n\tfileConfigMaxSizeDescription: 'formBuilder:file.config.maxSizeDescription',\n\tfileTooLarge: 'formBuilder:file.tooLarge',\n\tfileHintAccepted: 'formBuilder:file.hint.accepted',\n\tfileHintMaxSize: 'formBuilder:file.hint.maxSize',\n\tspamRateLimited: 'formBuilder:spam.rateLimited',\n\tspamRejected: 'formBuilder:spam.rejected',\n\tspamCaptchaFailed: 'formBuilder:spam.captchaFailed',\n\tcollectionFormSingular: 'formBuilder:collection.form.singular',\n\tcollectionFormPlural: 'formBuilder:collection.form.plural',\n\tcollectionSubmissionSingular: 'formBuilder:collection.submission.singular',\n\tcollectionSubmissionPlural: 'formBuilder:collection.submission.plural',\n\tstatusComplete: 'formBuilder:status.complete',\n\tstatusPartial: 'formBuilder:status.partial',\n\tfieldTypeRepeater: 'formBuilder:fieldType.repeater',\n\tconfigMinRows: 'formBuilder:config.minRows',\n\tconfigMaxRows: 'formBuilder:config.maxRows',\n\tconfigAddLabel: 'formBuilder:config.addLabel',\n\tconfigSubFields: 'formBuilder:config.subFields',\n\tvalidationRepeaterMin: 'formBuilder:validation.repeaterMin',\n\tvalidationRepeaterMax: 'formBuilder:validation.repeaterMax',\n\trepeaterAddRow: 'formBuilder:repeater.addRow',\n\trepeaterRemoveRow: 'formBuilder:repeater.removeRow',\n\trepeaterRow: 'formBuilder:repeater.row',\n\trepeaterRowCount: 'formBuilder:repeater.rowCount',\n\tsubmissionConsent: 'formBuilder:submission.consent',\n\tsubmissionDetails: 'formBuilder:submission.details',\n\tsubmissionConsentAgreed: 'formBuilder:submission.consentAgreed',\n\tsubmissionConsentDeclined: 'formBuilder:submission.consentDeclined',\n\tsubmissionMetaReceivedAt: 'formBuilder:submission.meta.receivedAt',\n\tsubmissionMetaIp: 'formBuilder:submission.meta.ip',\n\tsubmissionMetaUserAgent: 'formBuilder:submission.meta.userAgent',\n\tsubmissionMetaCaptcha: 'formBuilder:submission.meta.captcha',\n} as const\n\nexport type TranslationKey = (typeof keys)[keyof typeof keys]\n"],"mappings":";;;;;;AAKA,MAAa,OAAO;CACnB,YAAY;CACZ,eAAe;CACf,mBAAmB;CACnB,gBAAgB;CAChB,iBAAiB;CACjB,iBAAiB;CACjB,mBAAmB;CACnB,eAAe;CACf,eAAe;CACf,cAAc;CACd,mBAAmB;CACnB,mBAAmB;CACnB,oBAAoB;CACpB,iBAAiB;CACjB,kBAAkB;CAClB,gBAAgB;CAChB,kBAAkB;CAClB,6BAA6B;CAC7B,WAAW;CACX,UAAU;CACV,YAAY;CACZ,aAAa;CACb,gBAAgB;CAChB,aAAa;CACb,mBAAmB;CACnB,mBAAmB;CACnB,mBAAmB;CACnB,oBAAoB;CACpB,mBAAmB;CACnB,qBAAqB;CACrB,eAAe;CACf,eAAe;CACf,SAAS;CACT,SAAS;CACT,aAAa;CACb,aAAa;CACb,aAAa;CACb,WAAW;CACX,SAAS;CACT,WAAW;CACX,kBAAkB;CAClB,yBAAyB;CACzB,sBAAsB;CACtB,sBAAsB;CACtB,gBAAgB;CAChB,gBAAgB;CAChB,oBAAoB;CACpB,oBAAoB;CACpB,oBAAoB;CACpB,kBAAkB;CAClB,gBAAgB;CAChB,kBAAkB;CAClB,yBAAyB;CACzB,gCAAgC;CAChC,cAAc;CACd,cAAc;CACd,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,gBAAgB;CAChB,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,wBAAwB;CACxB,yBAAyB;CACzB,yBAAyB;CACzB,2BAA2B;CAC3B,uBAAuB;CACvB,gBAAgB;CAChB,cAAc;CACd,aAAa;CACb,iBAAiB;CACjB,mBAAmB;CACnB,gBAAgB;CAChB,sBAAsB;CACtB,eAAe;CACf,gBAAgB;CAChB,cAAc;CACd,WAAW;CACX,SAAS;CACT,YAAY;CACZ,UAAU;CACV,eAAe;CACf,aAAa;CACb,sBAAsB;CACtB,kBAAkB;CAClB,6BAA6B;CAC7B,mBAAmB;CACnB,iCAAiC;CACjC,2BAA2B;CAC3B,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB,oBAAoB;CACpB,iBAAiB;CACjB,oBAAoB;CACpB,qBAAqB;CACrB,gBAAgB;CAChB,qBAAqB;CACrB,kBAAkB;CAClB,6BAA6B;CAC7B,qBAAqB;CACrB,gCAAgC;CAChC,iBAAiB;CACjB,4BAA4B;CAC5B,oBAAoB;CACpB,+BAA+B;CAC/B,sBAAsB;CACtB,eAAe;CACf,qBAAqB;CACrB,4BAA4B;CAC5B,oBAAoB;CACpB,kBAAkB;CAClB,sBAAsB;CACtB,yBAAyB;CACzB,oBAAoB;CACpB,uBAAuB;CACvB,6BAA6B;CAC7B,kBAAkB;CAClB,wBAAwB;CACxB,qBAAqB;CACrB,2BAA2B;CAC3B,uBAAuB;CACvB,kBAAkB;CAClB,oBAAoB;CACpB,kBAAkB;CAClB,mBAAmB;CACnB,oBAAoB;CACpB,uBAAuB;CACvB,wBAAwB;CACxB,wBAAwB;CACxB,eAAe;CACf,sBAAsB;CACtB,qBAAqB;CACrB,mBAAmB;CACnB,8BAA8B;CAC9B,cAAc;CACd,kBAAkB;CAClB,iBAAiB;CACjB,iBAAiB;CACjB,cAAc;CACd,mBAAmB;CACnB,wBAAwB;CACxB,sBAAsB;CACtB,8BAA8B;CAC9B,4BAA4B;CAC5B,gBAAgB;CAChB,eAAe;CACf,mBAAmB;CACnB,eAAe;CACf,eAAe;CACf,gBAAgB;CAChB,iBAAiB;CACjB,uBAAuB;CACvB,uBAAuB;CACvB,gBAAgB;CAChB,mBAAmB;CACnB,aAAa;CACb,kBAAkB;CAClB,mBAAmB;CACnB,mBAAmB;CACnB,yBAAyB;CACzB,2BAA2B;CAC3B,0BAA0B;CAC1B,kBAAkB;CAClB,yBAAyB;CACzB,uBAAuB;AACxB"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
//#region src/uploads/formatBytes.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Format a byte count as a human-readable size (1024-based, B/KB/MB/GB) with at most one decimal.
|
|
4
|
+
* Trailing `.0` is dropped: `2621440` -> `'2.5 MB'`, `1024` -> `'1 KB'`, `500` -> `'500 B'`.
|
|
5
|
+
*/
|
|
6
|
+
declare const formatBytes: (n: number) => string;
|
|
7
|
+
//#endregion
|
|
8
|
+
export { formatBytes };
|
|
9
|
+
//# sourceMappingURL=formatBytes.d.ts.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//#region src/uploads/formatBytes.ts
|
|
2
|
+
const units = [
|
|
3
|
+
"B",
|
|
4
|
+
"KB",
|
|
5
|
+
"MB",
|
|
6
|
+
"GB"
|
|
7
|
+
];
|
|
8
|
+
/**
|
|
9
|
+
* Format a byte count as a human-readable size (1024-based, B/KB/MB/GB) with at most one decimal.
|
|
10
|
+
* Trailing `.0` is dropped: `2621440` -> `'2.5 MB'`, `1024` -> `'1 KB'`, `500` -> `'500 B'`.
|
|
11
|
+
*/
|
|
12
|
+
const formatBytes = (n) => {
|
|
13
|
+
if (!Number.isFinite(n) || n <= 0) return "0 B";
|
|
14
|
+
let value = n;
|
|
15
|
+
let unit = 0;
|
|
16
|
+
while (value >= 1024 && unit < units.length - 1) {
|
|
17
|
+
value /= 1024;
|
|
18
|
+
unit += 1;
|
|
19
|
+
}
|
|
20
|
+
return `${Math.round(value * 10) / 10} ${units[unit]}`;
|
|
21
|
+
};
|
|
22
|
+
//#endregion
|
|
23
|
+
export { formatBytes };
|
|
24
|
+
|
|
25
|
+
//# sourceMappingURL=formatBytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formatBytes.js","names":[],"sources":["../../src/uploads/formatBytes.ts"],"sourcesContent":["const units = ['B', 'KB', 'MB', 'GB'] as const\n\n/**\n * Format a byte count as a human-readable size (1024-based, B/KB/MB/GB) with at most one decimal.\n * Trailing `.0` is dropped: `2621440` -> `'2.5 MB'`, `1024` -> `'1 KB'`, `500` -> `'500 B'`.\n */\nexport const formatBytes = (n: number): string => {\n\tif (!Number.isFinite(n) || n <= 0) {\n\t\treturn '0 B'\n\t}\n\tlet value = n\n\tlet unit = 0\n\twhile (value >= 1024 && unit < units.length - 1) {\n\t\tvalue /= 1024\n\t\tunit += 1\n\t}\n\treturn `${Math.round(value * 10) / 10} ${units[unit]}`\n}\n"],"mappings":";AAAA,MAAM,QAAQ;CAAC;CAAK;CAAM;CAAM;AAAI;;;;;AAMpC,MAAa,eAAe,MAAsB;CACjD,IAAI,CAAC,OAAO,SAAS,CAAC,KAAK,KAAK,GAC/B,OAAO;CAER,IAAI,QAAQ;CACZ,IAAI,OAAO;CACX,OAAO,SAAS,QAAQ,OAAO,MAAM,SAAS,GAAG;EAChD,SAAS;EACT,QAAQ;CACT;CACA,OAAO,GAAG,KAAK,MAAM,QAAQ,EAAE,IAAI,GAAG,GAAG,MAAM;AAChD"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
const mimeAllowed = (mimeType, allow) => {
|
|
3
3
|
if (!allow || allow.length === 0) return true;
|
|
4
4
|
return allow.some((pattern) => {
|
|
5
|
-
if (pattern.endsWith("
|
|
5
|
+
if (pattern.endsWith("*")) return mimeType.startsWith(pattern.slice(0, -1));
|
|
6
6
|
return mimeType === pattern;
|
|
7
7
|
});
|
|
8
8
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveFileRef.js","names":[],"sources":["../../src/uploads/resolveFileRef.ts"],"sourcesContent":["import type { FileFieldConfig, FileRef, FileRefError } from './types'\n\ntype UploadDoc = {\n\tid?: string | number\n\tfilename?: unknown\n\tmimeType?: unknown\n\tfilesize?: unknown\n\turl?: unknown\n}\n\nexport type ResolveFileRefResult = { ok: true; ref: FileRef } | { ok: false; code: FileRefError }\n\nconst mimeAllowed = (mimeType: string, allow: string[] | undefined): boolean => {\n\tif (!allow || allow.length === 0) {\n\t\treturn true\n\t}\n\treturn allow.some((pattern) => {\n\t\tif (pattern.endsWith('
|
|
1
|
+
{"version":3,"file":"resolveFileRef.js","names":[],"sources":["../../src/uploads/resolveFileRef.ts"],"sourcesContent":["import type { FileFieldConfig, FileRef, FileRefError } from './types'\n\ntype UploadDoc = {\n\tid?: string | number\n\tfilename?: unknown\n\tmimeType?: unknown\n\tfilesize?: unknown\n\turl?: unknown\n}\n\nexport type ResolveFileRefResult = { ok: true; ref: FileRef } | { ok: false; code: FileRefError }\n\nconst mimeAllowed = (mimeType: string, allow: string[] | undefined): boolean => {\n\tif (!allow || allow.length === 0) {\n\t\treturn true\n\t}\n\treturn allow.some((pattern) => {\n\t\tif (pattern.endsWith('*')) {\n\t\t\treturn mimeType.startsWith(pattern.slice(0, -1))\n\t\t}\n\t\treturn mimeType === pattern\n\t})\n}\n\n/**\n * Pure server trust-boundary check for an uploaded file: given the loaded upload doc (or null) and the\n * field's constraints, either return an authoritative `FileRef` snapshot or a rejection code. Never trusts\n * client metadata; the caller passes the doc it loaded from the upload collection.\n */\nexport const resolveFileRef = (\n\tdoc: UploadDoc | null | undefined,\n\tconfig: FileFieldConfig\n): ResolveFileRefResult => {\n\tif (doc == null || doc.id == null) {\n\t\treturn { ok: false, code: 'missing' }\n\t}\n\tconst mimeType = typeof doc.mimeType === 'string' ? doc.mimeType : ''\n\tconst filesize = typeof doc.filesize === 'number' ? doc.filesize : 0\n\tif (!mimeAllowed(mimeType, config.mimeTypes)) {\n\t\treturn { ok: false, code: 'mimeType' }\n\t}\n\tif (typeof config.maxSize === 'number' && filesize > config.maxSize) {\n\t\treturn { ok: false, code: 'tooLarge' }\n\t}\n\tconst ref: FileRef = {\n\t\tid: doc.id,\n\t\tfilename: typeof doc.filename === 'string' ? doc.filename : '',\n\t\tmimeType,\n\t\tfilesize,\n\t}\n\tif (typeof doc.url === 'string' && doc.url.length > 0) {\n\t\tref.url = doc.url\n\t}\n\treturn { ok: true, ref }\n}\n"],"mappings":";AAYA,MAAM,eAAe,UAAkB,UAAyC;CAC/E,IAAI,CAAC,SAAS,MAAM,WAAW,GAC9B,OAAO;CAER,OAAO,MAAM,MAAM,YAAY;EAC9B,IAAI,QAAQ,SAAS,GAAG,GACvB,OAAO,SAAS,WAAW,QAAQ,MAAM,GAAG,EAAE,CAAC;EAEhD,OAAO,aAAa;CACrB,CAAC;AACF;;;;;;AAOA,MAAa,kBACZ,KACA,WAC0B;CAC1B,IAAI,OAAO,QAAQ,IAAI,MAAM,MAC5B,OAAO;EAAE,IAAI;EAAO,MAAM;CAAU;CAErC,MAAM,WAAW,OAAO,IAAI,aAAa,WAAW,IAAI,WAAW;CACnE,MAAM,WAAW,OAAO,IAAI,aAAa,WAAW,IAAI,WAAW;CACnE,IAAI,CAAC,YAAY,UAAU,OAAO,SAAS,GAC1C,OAAO;EAAE,IAAI;EAAO,MAAM;CAAW;CAEtC,IAAI,OAAO,OAAO,YAAY,YAAY,WAAW,OAAO,SAC3D,OAAO;EAAE,IAAI;EAAO,MAAM;CAAW;CAEtC,MAAM,MAAe;EACpB,IAAI,IAAI;EACR,UAAU,OAAO,IAAI,aAAa,WAAW,IAAI,WAAW;EAC5D;EACA;CACD;CACA,IAAI,OAAO,IAAI,QAAQ,YAAY,IAAI,IAAI,SAAS,GACnD,IAAI,MAAM,IAAI;CAEf,OAAO;EAAE,IAAI;EAAM;CAAI;AACxB"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AnyValidationRuleDefinition } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/validation/builtin/index.d.ts
|
|
4
|
+
declare const defaultValidationRules: AnyValidationRuleDefinition[];
|
|
5
|
+
/**
|
|
6
|
+
* `defaultValidationRules` indexed by `type`, so a single built-in can be spread and tweaked
|
|
7
|
+
* without hand-rolling a `.find()`, e.g.
|
|
8
|
+
* `rules: { minLength: { ...defaultValidationRulesByType.minLength, message: myMessage } }`. The
|
|
9
|
+
* `rules` plugin option replaces a built-in of the same `type`; `false` removes it, `true` keeps it.
|
|
10
|
+
*/
|
|
11
|
+
declare const defaultValidationRulesByType: Record<string, AnyValidationRuleDefinition>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { defaultValidationRules, defaultValidationRulesByType };
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { emailRule } from "./email.js";
|
|
2
2
|
import { matchesFieldRule } from "./matchesField.js";
|
|
3
3
|
import { maxRule } from "./max.js";
|
|
4
|
+
import { maxDateRule } from "./maxDate.js";
|
|
4
5
|
import { maxLengthRule } from "./maxLength.js";
|
|
5
6
|
import { minRule } from "./min.js";
|
|
7
|
+
import { minDateRule } from "./minDate.js";
|
|
6
8
|
import { minLengthRule } from "./minLength.js";
|
|
7
9
|
import { notAlreadySubmittedRule } from "./notAlreadySubmitted.js";
|
|
8
10
|
import { oneOfRule } from "./oneOf.js";
|
|
@@ -14,6 +16,8 @@ const defaultValidationRules = [
|
|
|
14
16
|
maxLengthRule,
|
|
15
17
|
minRule,
|
|
16
18
|
maxRule,
|
|
19
|
+
minDateRule,
|
|
20
|
+
maxDateRule,
|
|
17
21
|
patternRule,
|
|
18
22
|
emailRule,
|
|
19
23
|
urlRule,
|
|
@@ -21,7 +25,14 @@ const defaultValidationRules = [
|
|
|
21
25
|
matchesFieldRule,
|
|
22
26
|
notAlreadySubmittedRule
|
|
23
27
|
];
|
|
28
|
+
/**
|
|
29
|
+
* `defaultValidationRules` indexed by `type`, so a single built-in can be spread and tweaked
|
|
30
|
+
* without hand-rolling a `.find()`, e.g.
|
|
31
|
+
* `rules: { minLength: { ...defaultValidationRulesByType.minLength, message: myMessage } }`. The
|
|
32
|
+
* `rules` plugin option replaces a built-in of the same `type`; `false` removes it, `true` keeps it.
|
|
33
|
+
*/
|
|
34
|
+
const defaultValidationRulesByType = Object.fromEntries(defaultValidationRules.map((rule) => [rule.type, rule]));
|
|
24
35
|
//#endregion
|
|
25
|
-
export { defaultValidationRules };
|
|
36
|
+
export { defaultValidationRules, defaultValidationRulesByType };
|
|
26
37
|
|
|
27
38
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../../src/validation/builtin/index.ts"],"sourcesContent":["import type { AnyValidationRuleDefinition } from '../types'\nimport { emailRule } from './email'\nimport { matchesFieldRule } from './matchesField'\nimport { maxRule } from './max'\nimport { maxLengthRule } from './maxLength'\nimport { minRule } from './min'\nimport { minLengthRule } from './minLength'\nimport { notAlreadySubmittedRule } from './notAlreadySubmitted'\nimport { oneOfRule } from './oneOf'\nimport { patternRule } from './pattern'\nimport { urlRule } from './url'\n\n// Rules are authored with precise param/value generics; the registry stores them erased (params\n// re-narrow per matched rule at execution). One cast per rule, no `any`.\nexport const defaultValidationRules: AnyValidationRuleDefinition[] = [\n\tminLengthRule as AnyValidationRuleDefinition,\n\tmaxLengthRule as AnyValidationRuleDefinition,\n\tminRule as AnyValidationRuleDefinition,\n\tmaxRule as AnyValidationRuleDefinition,\n\tpatternRule as AnyValidationRuleDefinition,\n\temailRule as AnyValidationRuleDefinition,\n\turlRule as AnyValidationRuleDefinition,\n\toneOfRule as AnyValidationRuleDefinition,\n\tmatchesFieldRule as AnyValidationRuleDefinition,\n\tnotAlreadySubmittedRule as AnyValidationRuleDefinition,\n]\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/validation/builtin/index.ts"],"sourcesContent":["import type { AnyValidationRuleDefinition } from '../types'\nimport { emailRule } from './email'\nimport { matchesFieldRule } from './matchesField'\nimport { maxRule } from './max'\nimport { maxDateRule } from './maxDate'\nimport { maxLengthRule } from './maxLength'\nimport { minRule } from './min'\nimport { minDateRule } from './minDate'\nimport { minLengthRule } from './minLength'\nimport { notAlreadySubmittedRule } from './notAlreadySubmitted'\nimport { oneOfRule } from './oneOf'\nimport { patternRule } from './pattern'\nimport { urlRule } from './url'\n\n// Rules are authored with precise param/value generics; the registry stores them erased (params\n// re-narrow per matched rule at execution). One cast per rule, no `any`.\nexport const defaultValidationRules: AnyValidationRuleDefinition[] = [\n\tminLengthRule as AnyValidationRuleDefinition,\n\tmaxLengthRule as AnyValidationRuleDefinition,\n\tminRule as AnyValidationRuleDefinition,\n\tmaxRule as AnyValidationRuleDefinition,\n\tminDateRule as AnyValidationRuleDefinition,\n\tmaxDateRule as AnyValidationRuleDefinition,\n\tpatternRule as AnyValidationRuleDefinition,\n\temailRule as AnyValidationRuleDefinition,\n\turlRule as AnyValidationRuleDefinition,\n\toneOfRule as AnyValidationRuleDefinition,\n\tmatchesFieldRule as AnyValidationRuleDefinition,\n\tnotAlreadySubmittedRule as AnyValidationRuleDefinition,\n]\n\n/**\n * `defaultValidationRules` indexed by `type`, so a single built-in can be spread and tweaked\n * without hand-rolling a `.find()`, e.g.\n * `rules: { minLength: { ...defaultValidationRulesByType.minLength, message: myMessage } }`. The\n * `rules` plugin option replaces a built-in of the same `type`; `false` removes it, `true` keeps it.\n */\nexport const defaultValidationRulesByType: Record<string, AnyValidationRuleDefinition> =\n\tObject.fromEntries(defaultValidationRules.map((rule) => [rule.type, rule]))\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAa,yBAAwD;CACpE;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACD;;;;;;;AAQA,MAAa,+BACZ,OAAO,YAAY,uBAAuB,KAAK,SAAS,CAAC,KAAK,MAAM,IAAI,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { keys } from "../../translations/keys.js";
|
|
2
|
+
import { labelFor } from "../../translations/server.js";
|
|
3
|
+
import { defineValidationRule } from "../defineValidationRule.js";
|
|
4
|
+
import { validateDateBound } from "./validateDateBound.js";
|
|
5
|
+
//#region src/validation/builtin/maxDate.ts
|
|
6
|
+
const maxDateRule = defineValidationRule({
|
|
7
|
+
type: "maxDate",
|
|
8
|
+
label: keys.ruleMaxDate,
|
|
9
|
+
appliesTo: ["date"],
|
|
10
|
+
params: [{
|
|
11
|
+
name: "max",
|
|
12
|
+
type: "text",
|
|
13
|
+
required: true,
|
|
14
|
+
label: labelFor(keys.ruleParamMaxDate),
|
|
15
|
+
validate: validateDateBound
|
|
16
|
+
}],
|
|
17
|
+
defaultMessage: keys.ruleMaxDateMessage,
|
|
18
|
+
validate: ({ value, params, message }) => value == null || value === "" || value <= params.max ? true : message({ max: params.max })
|
|
19
|
+
});
|
|
20
|
+
//#endregion
|
|
21
|
+
export { maxDateRule };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=maxDate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"maxDate.js","names":[],"sources":["../../../src/validation/builtin/maxDate.ts"],"sourcesContent":["import { keys } from '../../translations/keys'\nimport { labelFor } from '../../translations/server'\nimport { defineValidationRule } from '../defineValidationRule'\nimport { validateDateBound } from './validateDateBound'\n\nexport const maxDateRule = defineValidationRule<{ max: string }, string>({\n\ttype: 'maxDate',\n\tlabel: keys.ruleMaxDate,\n\tappliesTo: ['date'],\n\tparams: [\n\t\t{\n\t\t\tname: 'max',\n\t\t\ttype: 'text',\n\t\t\trequired: true,\n\t\t\tlabel: labelFor(keys.ruleParamMaxDate),\n\t\t\tvalidate: validateDateBound,\n\t\t},\n\t],\n\tdefaultMessage: keys.ruleMaxDateMessage,\n\tvalidate: ({ value, params, message }) =>\n\t\tvalue == null || value === '' || value <= params.max ? true : message({ max: params.max }),\n})\n"],"mappings":";;;;;AAKA,MAAa,cAAc,qBAA8C;CACxE,MAAM;CACN,OAAO,KAAK;CACZ,WAAW,CAAC,MAAM;CAClB,QAAQ,CACP;EACC,MAAM;EACN,MAAM;EACN,UAAU;EACV,OAAO,SAAS,KAAK,gBAAgB;EACrC,UAAU;CACX,CACD;CACA,gBAAgB,KAAK;CACrB,WAAW,EAAE,OAAO,QAAQ,cAC3B,SAAS,QAAQ,UAAU,MAAM,SAAS,OAAO,MAAM,OAAO,QAAQ,EAAE,KAAK,OAAO,IAAI,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { keys } from "../../translations/keys.js";
|
|
2
|
+
import { labelFor } from "../../translations/server.js";
|
|
3
|
+
import { defineValidationRule } from "../defineValidationRule.js";
|
|
4
|
+
import { validateDateBound } from "./validateDateBound.js";
|
|
5
|
+
//#region src/validation/builtin/minDate.ts
|
|
6
|
+
const minDateRule = defineValidationRule({
|
|
7
|
+
type: "minDate",
|
|
8
|
+
label: keys.ruleMinDate,
|
|
9
|
+
appliesTo: ["date"],
|
|
10
|
+
params: [{
|
|
11
|
+
name: "min",
|
|
12
|
+
type: "text",
|
|
13
|
+
required: true,
|
|
14
|
+
label: labelFor(keys.ruleParamMinDate),
|
|
15
|
+
validate: validateDateBound
|
|
16
|
+
}],
|
|
17
|
+
defaultMessage: keys.ruleMinDateMessage,
|
|
18
|
+
validate: ({ value, params, message }) => value == null || value === "" || value >= params.min ? true : message({ min: params.min })
|
|
19
|
+
});
|
|
20
|
+
//#endregion
|
|
21
|
+
export { minDateRule };
|
|
22
|
+
|
|
23
|
+
//# sourceMappingURL=minDate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"minDate.js","names":[],"sources":["../../../src/validation/builtin/minDate.ts"],"sourcesContent":["import { keys } from '../../translations/keys'\nimport { labelFor } from '../../translations/server'\nimport { defineValidationRule } from '../defineValidationRule'\nimport { validateDateBound } from './validateDateBound'\n\nexport const minDateRule = defineValidationRule<{ min: string }, string>({\n\ttype: 'minDate',\n\tlabel: keys.ruleMinDate,\n\tappliesTo: ['date'],\n\tparams: [\n\t\t{\n\t\t\tname: 'min',\n\t\t\ttype: 'text',\n\t\t\trequired: true,\n\t\t\tlabel: labelFor(keys.ruleParamMinDate),\n\t\t\tvalidate: validateDateBound,\n\t\t},\n\t],\n\tdefaultMessage: keys.ruleMinDateMessage,\n\tvalidate: ({ value, params, message }) =>\n\t\tvalue == null || value === '' || value >= params.min ? true : message({ min: params.min }),\n})\n"],"mappings":";;;;;AAKA,MAAa,cAAc,qBAA8C;CACxE,MAAM;CACN,OAAO,KAAK;CACZ,WAAW,CAAC,MAAM;CAClB,QAAQ,CACP;EACC,MAAM;EACN,MAAM;EACN,UAAU;EACV,OAAO,SAAS,KAAK,gBAAgB;EACrC,UAAU;CACX,CACD;CACA,gBAAgB,KAAK;CACrB,WAAW,EAAE,OAAO,QAAQ,cAC3B,SAAS,QAAQ,UAAU,MAAM,SAAS,OAAO,MAAM,OAAO,QAAQ,EAAE,KAAK,OAAO,IAAI,CAAC;AAC3F,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { keys } from "../../translations/keys.js";
|
|
2
|
+
import { asTranslate } from "../../translations/server.js";
|
|
3
|
+
import { isValidCalendarDate } from "../../fields/builtin/date.js";
|
|
4
|
+
//#region src/validation/builtin/validateDateBound.ts
|
|
5
|
+
/**
|
|
6
|
+
* Field-level `validate` for a minDate/maxDate rule's bound param: an unset bound is tolerated
|
|
7
|
+
* (the rule itself already treats a missing bound as pass-through), otherwise it must be a real
|
|
8
|
+
* `YYYY-MM-DD` calendar date so the rule's string comparison against submitted values is meaningful.
|
|
9
|
+
* Exported for unit testing.
|
|
10
|
+
*/
|
|
11
|
+
const validateDateBound = (value, { req }) => {
|
|
12
|
+
if (typeof value !== "string" || value === "") return true;
|
|
13
|
+
return isValidCalendarDate(value) ? true : asTranslate(req.t)(keys.validationDate);
|
|
14
|
+
};
|
|
15
|
+
//#endregion
|
|
16
|
+
export { validateDateBound };
|
|
17
|
+
|
|
18
|
+
//# sourceMappingURL=validateDateBound.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateDateBound.js","names":[],"sources":["../../../src/validation/builtin/validateDateBound.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\nimport { isValidCalendarDate } from '../../fields/builtin/date'\nimport { keys } from '../../translations/keys'\nimport { asTranslate } from '../../translations/server'\n\n/**\n * Field-level `validate` for a minDate/maxDate rule's bound param: an unset bound is tolerated\n * (the rule itself already treats a missing bound as pass-through), otherwise it must be a real\n * `YYYY-MM-DD` calendar date so the rule's string comparison against submitted values is meaningful.\n * Exported for unit testing.\n */\nexport const validateDateBound = (\n\tvalue: unknown,\n\t{ req }: { data?: unknown; req: PayloadRequest }\n): string | true => {\n\tif (typeof value !== 'string' || value === '') {\n\t\treturn true\n\t}\n\treturn isValidCalendarDate(value) ? true : asTranslate(req.t)(keys.validationDate)\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAa,qBACZ,OACA,EAAE,UACiB;CACnB,IAAI,OAAO,UAAU,YAAY,UAAU,IAC1C,OAAO;CAER,OAAO,oBAAoB,KAAK,IAAI,OAAO,YAAY,IAAI,CAAC,EAAE,KAAK,cAAc;AAClF"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@10x-media/form-builder",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.3",
|
|
4
4
|
"description": "End-to-end forms platform for Payload: author, validate, render, collect, aggregate, and act.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -83,6 +83,7 @@
|
|
|
83
83
|
"@types/react-dom": "19.2.3",
|
|
84
84
|
"axe-core": "^4.12.1",
|
|
85
85
|
"jsdom": "^25.0.1",
|
|
86
|
+
"msw": "^2.14.6",
|
|
86
87
|
"payload": "3.85.0",
|
|
87
88
|
"playwright": "1.60.0",
|
|
88
89
|
"react": "19.2.6",
|
|
@@ -92,8 +93,8 @@
|
|
|
92
93
|
"typescript": "5.9.3",
|
|
93
94
|
"vitest": "4.1.7",
|
|
94
95
|
"@10x-media/payload-test-harness": "0.0.0",
|
|
95
|
-
"@10x-media/tsdown-config": "0.0.0",
|
|
96
96
|
"@10x-media/vitest-config": "0.0.0",
|
|
97
|
+
"@10x-media/tsdown-config": "0.0.0",
|
|
97
98
|
"@10x-media/tsconfig": "0.0.0"
|
|
98
99
|
},
|
|
99
100
|
"publishConfig": {
|