@10x-media/form-builder 0.1.0-beta.2 → 0.1.0-beta.4
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 +60 -0
- package/README.md +4 -4
- 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 +50 -0
- package/dist/actions/body/serializeBody.js +78 -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 +40 -15
- package/dist/actions/builtin/confirmation.js.map +1 -1
- package/dist/actions/builtin/emailTeam.js +19 -12
- package/dist/actions/builtin/emailTeam.js.map +1 -1
- package/dist/actions/builtin/index.d.ts +13 -1
- package/dist/actions/builtin/index.js +18 -7
- package/dist/actions/builtin/index.js.map +1 -1
- package/dist/actions/builtin/signedWebhook.js +6 -2
- 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 +10 -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/aggregation/resolveResultsRequest.d.ts +22 -6
- package/dist/aggregation/resolveResultsRequest.js +18 -7
- package/dist/aggregation/resolveResultsRequest.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 +102 -59
- 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 +234 -0
- package/dist/client/flowAuthoring.js +35 -0
- package/dist/client/flowAuthoring.js.map +1 -0
- package/dist/client/synthesizeClientField.js +6 -2
- package/dist/client/synthesizeClientField.js.map +1 -1
- package/dist/client/toStaticLabel.js +13 -0
- package/dist/client/toStaticLabel.js.map +1 -0
- package/dist/collections/formSubmissions.js +49 -9
- package/dist/collections/formSubmissions.js.map +1 -1
- package/dist/collections/forms.js +251 -88
- package/dist/collections/forms.js.map +1 -1
- package/dist/conditions/conditionType.js +9 -2
- package/dist/conditions/conditionType.js.map +1 -1
- package/dist/conditions/normalizeConditions.js +2 -1
- package/dist/conditions/normalizeConditions.js.map +1 -1
- package/dist/consent/builtin/index.d.ts +11 -1
- package/dist/consent/builtin/index.js +15 -5
- package/dist/consent/builtin/index.js.map +1 -1
- package/dist/consent/builtin/static.js +7 -3
- package/dist/consent/builtin/static.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 +15 -6
- package/dist/exports/react.js +10 -2
- package/dist/exports/rsc.d.ts +6 -1
- package/dist/exports/rsc.js +6 -1
- package/dist/exports/types.d.ts +4 -4
- package/dist/fields/buildFieldBlocks.js +20 -15
- 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/consent.js +8 -4
- package/dist/fields/builtin/consent.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 +87 -7
- package/dist/fields/builtin/file.js.map +1 -1
- package/dist/fields/builtin/index.d.ts +24 -0
- package/dist/fields/builtin/index.js +29 -8
- package/dist/fields/builtin/index.js.map +1 -1
- package/dist/fields/builtin/message.js +26 -0
- package/dist/fields/builtin/message.js.map +1 -0
- package/dist/fields/builtin/repeater.js +7 -3
- package/dist/fields/builtin/repeater.js.map +1 -1
- package/dist/fields/builtin/select.js +7 -3
- package/dist/fields/builtin/select.js.map +1 -1
- package/dist/fields/fieldNamesOfType.js +25 -0
- package/dist/fields/fieldNamesOfType.js.map +1 -0
- package/dist/fields/localizedIf.d.ts +13 -0
- package/dist/fields/localizedIf.js +12 -0
- package/dist/fields/localizedIf.js.map +1 -0
- package/dist/fields/sharedConfig.js +82 -57
- package/dist/fields/sharedConfig.js.map +1 -1
- package/dist/fields/types.d.ts +7 -2
- package/dist/flow/normalizeFlow.js +7 -1
- package/dist/flow/normalizeFlow.js.map +1 -1
- package/dist/flow/stepLabel.js +15 -0
- package/dist/flow/stepLabel.js.map +1 -0
- package/dist/form/pollState.d.ts +22 -0
- package/dist/form/pollState.js +17 -0
- package/dist/form/pollState.js.map +1 -0
- package/dist/form/toFormDocument.d.ts +60 -0
- package/dist/form/toFormDocument.js +39 -0
- package/dist/form/toFormDocument.js.map +1 -0
- package/dist/form/types.d.ts +48 -0
- package/dist/index.d.ts +81 -13
- package/dist/index.js +36 -15
- package/dist/index.js.map +1 -1
- package/dist/plugin/registerCollections.js +17 -37
- package/dist/plugin/registerCollections.js.map +1 -1
- package/dist/plugin/uploadsCollection.d.ts +11 -0
- package/dist/plugin/uploadsCollection.js +44 -0
- package/dist/plugin/uploadsCollection.js.map +1 -0
- package/dist/poll/applyPollOptions.js +17 -0
- package/dist/poll/applyPollOptions.js.map +1 -0
- package/dist/poll/buildPollOptionSourceFields.js +53 -0
- package/dist/poll/buildPollOptionSourceFields.js.map +1 -0
- package/dist/poll/definePollOptionSource.d.ts +35 -0
- package/dist/poll/definePollOptionSource.js +6 -0
- package/dist/poll/definePollOptionSource.js.map +1 -0
- package/dist/poll/registry.d.ts +16 -0
- package/dist/poll/registry.js +16 -0
- package/dist/poll/registry.js.map +1 -0
- package/dist/poll/resolvePollOptions.d.ts +28 -0
- package/dist/poll/resolvePollOptions.js +64 -0
- package/dist/poll/resolvePollOptions.js.map +1 -0
- package/dist/poll/resolvePollOutcome.d.ts +21 -0
- package/dist/poll/resolvePollOutcome.js +36 -0
- package/dist/poll/resolvePollOutcome.js.map +1 -0
- package/dist/prefill/valuesFromSearchParams.js +1 -1
- package/dist/prefill/valuesFromSearchParams.js.map +1 -1
- package/dist/presentations/types.d.ts +3 -2
- package/dist/react/Form.d.ts +13 -31
- package/dist/react/Form.js +98 -85
- package/dist/react/Form.js.map +1 -1
- package/dist/react/FormContext.d.ts +35 -1
- package/dist/react/FormContext.js.map +1 -1
- package/dist/react/FormControls.d.ts +55 -0
- package/dist/react/FormControls.js +56 -0
- package/dist/react/FormControls.js.map +1 -0
- package/dist/react/FormResults.d.ts +6 -3
- package/dist/react/FormResults.js +37 -29
- package/dist/react/FormResults.js.map +1 -1
- package/dist/react/FormSteps.d.ts +17 -0
- package/dist/react/FormSteps.js +35 -0
- package/dist/react/FormSteps.js.map +1 -0
- package/dist/react/Poll.d.ts +17 -6
- package/dist/react/Poll.js +66 -18
- package/dist/react/Poll.js.map +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/fetchResults.d.ts +1 -1
- package/dist/react/fetchResults.js +1 -1
- package/dist/react/fetchResults.js.map +1 -1
- 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 +25 -8
- package/dist/react/renderers/file.js.map +1 -1
- package/dist/react/renderers/index.js +4 -0
- package/dist/react/renderers/index.js.map +1 -1
- package/dist/react/renderers/message.js +35 -0
- package/dist/react/renderers/message.js.map +1 -0
- 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/react/state.d.ts +25 -1
- package/dist/react/state.js +14 -1
- package/dist/react/state.js.map +1 -1
- package/dist/react/uploadFile.d.ts +2 -2
- package/dist/react/uploadFile.js +1 -1
- package/dist/react/uploadFile.js.map +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/submissions/runSubmission.js +70 -33
- package/dist/submissions/runSubmission.js.map +1 -1
- package/dist/submissions/validateSubmission.js +41 -7
- package/dist/submissions/validateSubmission.js.map +1 -1
- package/dist/submissions/votedCookie.d.ts +13 -0
- package/dist/submissions/votedCookie.js +27 -0
- package/dist/submissions/votedCookie.js.map +1 -0
- package/dist/translations/de.js +219 -0
- package/dist/translations/de.js.map +1 -0
- package/dist/translations/en.js +71 -10
- package/dist/translations/en.js.map +1 -1
- package/dist/translations/index.d.ts +2 -1
- package/dist/translations/index.js +6 -2
- package/dist/translations/index.js.map +1 -1
- package/dist/translations/keys.d.ts +69 -8
- package/dist/translations/keys.js +70 -9
- 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/uploads/types.d.ts +1 -2
- 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/dist/validation/validateUrl.js +22 -0
- package/dist/validation/validateUrl.js.map +1 -0
- package/package.json +4 -2
- package/styles/form-builder.css +10 -190
- package/dist/collections/uploads.d.ts +0 -30
- package/dist/collections/uploads.js +0 -55
- package/dist/collections/uploads.js.map +0 -1
- package/dist/presentations/registry.d.ts +0 -15
- package/dist/presentations/registry.js +0 -15
- package/dist/presentations/registry.js.map +0 -1
- package/dist/react/toFormDocument.d.ts +0 -24
- package/dist/react/toFormDocument.js +0 -22
- package/dist/react/toFormDocument.js.map +0 -1
|
@@ -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,15 +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",
|
|
83
|
-
|
|
96
|
+
validationCalcExpressionInvalid: "formBuilder:validation.calcExpressionInvalid",
|
|
84
97
|
presentationPage: "formBuilder:presentation.page",
|
|
85
98
|
presentationModal: "formBuilder:presentation.modal",
|
|
86
99
|
presentationDrawer: "formBuilder:presentation.drawer",
|
|
@@ -91,9 +104,14 @@ const keys = {
|
|
|
91
104
|
actionConfigTo: "formBuilder:action.config.to",
|
|
92
105
|
actionConfigSubject: "formBuilder:action.config.subject",
|
|
93
106
|
actionConfigBody: "formBuilder:action.config.body",
|
|
107
|
+
actionConfigBodyDescription: "formBuilder:action.config.bodyDescription",
|
|
94
108
|
actionConfigToField: "formBuilder:action.config.toField",
|
|
109
|
+
actionConfigToFieldDescription: "formBuilder:action.config.toFieldDescription",
|
|
95
110
|
actionConfigUrl: "formBuilder:action.config.url",
|
|
111
|
+
actionConfigUrlDescription: "formBuilder:action.config.urlDescription",
|
|
96
112
|
actionConfigSecret: "formBuilder:action.config.secret",
|
|
113
|
+
actionConfigSecretDescription: "formBuilder:action.config.secretDescription",
|
|
114
|
+
validationUrlInvalid: "formBuilder:validation.urlInvalid",
|
|
97
115
|
configActions: "formBuilder:config.actions",
|
|
98
116
|
consentSourceStatic: "formBuilder:consentSource.static",
|
|
99
117
|
consentSourcePageReference: "formBuilder:consentSource.pageReference",
|
|
@@ -109,19 +127,39 @@ const keys = {
|
|
|
109
127
|
consentConfigSource: "formBuilder:consent.config.source",
|
|
110
128
|
consentConfigSourceConfig: "formBuilder:consent.config.sourceConfig",
|
|
111
129
|
consentConfigOptional: "formBuilder:consent.config.optional",
|
|
112
|
-
resultsTitle: "formBuilder:results.title",
|
|
113
130
|
resultsResponses: "formBuilder:results.responses",
|
|
114
131
|
resultsNoResponses: "formBuilder:results.noResponses",
|
|
115
132
|
resultsTruncated: "formBuilder:results.truncated",
|
|
116
|
-
|
|
117
|
-
|
|
133
|
+
pollGroup: "formBuilder:poll.group",
|
|
134
|
+
pollEnabled: "formBuilder:poll.enabled",
|
|
135
|
+
pollResultsField: "formBuilder:poll.resultsField",
|
|
136
|
+
pollResultsFieldDescription: "formBuilder:poll.resultsFieldDescription",
|
|
137
|
+
pollResultsVisibility: "formBuilder:poll.resultsVisibility",
|
|
138
|
+
pollVisibilityAfterVote: "formBuilder:poll.visibility.afterVote",
|
|
139
|
+
pollVisibilityAfterClose: "formBuilder:poll.visibility.afterClose",
|
|
140
|
+
pollClosesAt: "formBuilder:poll.closesAt",
|
|
141
|
+
pollClosed: "formBuilder:poll.closed",
|
|
142
|
+
pollResultsAfterClose: "formBuilder:poll.resultsAfterClose",
|
|
143
|
+
pollOptionSource: "formBuilder:poll.optionSource",
|
|
144
|
+
pollOptionSourceDescription: "formBuilder:poll.optionSourceDescription",
|
|
145
|
+
pollSourceConfig: "formBuilder:poll.sourceConfig",
|
|
146
|
+
pollOutcome: "formBuilder:poll.outcome",
|
|
147
|
+
pollWinningValue: "formBuilder:poll.winningValue",
|
|
148
|
+
pollResolvedAt: "formBuilder:poll.resolvedAt",
|
|
149
|
+
pollOptionsUnavailable: "formBuilder:poll.optionsUnavailable",
|
|
150
|
+
pollFinalResult: "formBuilder:poll.finalResult",
|
|
151
|
+
resultsWinner: "formBuilder:results.winner",
|
|
118
152
|
validationFileMissing: "formBuilder:validation.file.missing",
|
|
119
153
|
validationFileMimeType: "formBuilder:validation.file.mimeType",
|
|
120
154
|
validationFileTooLarge: "formBuilder:validation.file.tooLarge",
|
|
121
155
|
fieldTypeFile: "formBuilder:fieldType.file",
|
|
122
|
-
fileConfigRelationTo: "formBuilder:file.config.relationTo",
|
|
123
156
|
fileConfigMimeTypes: "formBuilder:file.config.mimeTypes",
|
|
124
157
|
fileConfigMaxSize: "formBuilder:file.config.maxSize",
|
|
158
|
+
fileConfigMaxSizeDescription: "formBuilder:file.config.maxSizeDescription",
|
|
159
|
+
fileTooLarge: "formBuilder:file.tooLarge",
|
|
160
|
+
fileUploadMisconfigured: "formBuilder:file.uploadMisconfigured",
|
|
161
|
+
fileHintAccepted: "formBuilder:file.hint.accepted",
|
|
162
|
+
fileHintMaxSize: "formBuilder:file.hint.maxSize",
|
|
125
163
|
spamRateLimited: "formBuilder:spam.rateLimited",
|
|
126
164
|
spamRejected: "formBuilder:spam.rejected",
|
|
127
165
|
spamCaptchaFailed: "formBuilder:spam.captchaFailed",
|
|
@@ -149,7 +187,30 @@ const keys = {
|
|
|
149
187
|
submissionMetaReceivedAt: "formBuilder:submission.meta.receivedAt",
|
|
150
188
|
submissionMetaIp: "formBuilder:submission.meta.ip",
|
|
151
189
|
submissionMetaUserAgent: "formBuilder:submission.meta.userAgent",
|
|
152
|
-
submissionMetaCaptcha: "formBuilder:submission.meta.captcha"
|
|
190
|
+
submissionMetaCaptcha: "formBuilder:submission.meta.captcha",
|
|
191
|
+
flowDescription: "formBuilder:flow.description",
|
|
192
|
+
flowStepFallbackTitle: "formBuilder:flow.stepFallbackTitle",
|
|
193
|
+
flowFieldInStep: "formBuilder:flow.fieldInStep",
|
|
194
|
+
flowUnassigned: "formBuilder:flow.unassigned",
|
|
195
|
+
flowAssignToStep: "formBuilder:flow.assignToStep",
|
|
196
|
+
flowNextTerminal: "formBuilder:flow.nextTerminal",
|
|
197
|
+
fieldTypeMessage: "formBuilder:fieldType.message",
|
|
198
|
+
configContent: "formBuilder:config.content",
|
|
199
|
+
tabResponse: "formBuilder:tab.response",
|
|
200
|
+
responseType: "formBuilder:response.type",
|
|
201
|
+
responseTypeMessage: "formBuilder:response.type.message",
|
|
202
|
+
responseTypeRedirect: "formBuilder:response.type.redirect",
|
|
203
|
+
responseMessage: "formBuilder:response.message",
|
|
204
|
+
responseRedirect: "formBuilder:response.redirect",
|
|
205
|
+
responseUrl: "formBuilder:response.url",
|
|
206
|
+
responseSubmitLabel: "formBuilder:response.submitLabel",
|
|
207
|
+
tabDisplay: "formBuilder:tab.display",
|
|
208
|
+
displayShowTitle: "formBuilder:display.showTitle",
|
|
209
|
+
displayTitle: "formBuilder:display.title",
|
|
210
|
+
displayIntro: "formBuilder:display.intro",
|
|
211
|
+
formBack: "formBuilder:form.back",
|
|
212
|
+
formNext: "formBuilder:form.next",
|
|
213
|
+
formSubmit: "formBuilder:form.submit"
|
|
153
214
|
};
|
|
154
215
|
//#endregion
|
|
155
216
|
export { keys };
|
|
@@ -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\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\tpollGroup: 'formBuilder:poll.group',\n\tpollEnabled: 'formBuilder:poll.enabled',\n\tpollResultsField: 'formBuilder:poll.resultsField',\n\tpollResultsFieldDescription: 'formBuilder:poll.resultsFieldDescription',\n\tpollResultsVisibility: 'formBuilder:poll.resultsVisibility',\n\tpollVisibilityAfterVote: 'formBuilder:poll.visibility.afterVote',\n\tpollVisibilityAfterClose: 'formBuilder:poll.visibility.afterClose',\n\tpollClosesAt: 'formBuilder:poll.closesAt',\n\tpollClosed: 'formBuilder:poll.closed',\n\tpollResultsAfterClose: 'formBuilder:poll.resultsAfterClose',\n\tpollOptionSource: 'formBuilder:poll.optionSource',\n\tpollOptionSourceDescription: 'formBuilder:poll.optionSourceDescription',\n\tpollSourceConfig: 'formBuilder:poll.sourceConfig',\n\tpollOutcome: 'formBuilder:poll.outcome',\n\tpollWinningValue: 'formBuilder:poll.winningValue',\n\tpollResolvedAt: 'formBuilder:poll.resolvedAt',\n\tpollOptionsUnavailable: 'formBuilder:poll.optionsUnavailable',\n\tpollFinalResult: 'formBuilder:poll.finalResult',\n\tresultsWinner: 'formBuilder:results.winner',\n\tvalidationFileMissing: 'formBuilder:validation.file.missing',\n\tvalidationFileMimeType: 'formBuilder:validation.file.mimeType',\n\tvalidationFileTooLarge: 'formBuilder:validation.file.tooLarge',\n\tfieldTypeFile: 'formBuilder:fieldType.file',\n\tfileConfigMimeTypes: 'formBuilder:file.config.mimeTypes',\n\tfileConfigMaxSize: 'formBuilder:file.config.maxSize',\n\tfileConfigMaxSizeDescription: 'formBuilder:file.config.maxSizeDescription',\n\tfileTooLarge: 'formBuilder:file.tooLarge',\n\tfileUploadMisconfigured: 'formBuilder:file.uploadMisconfigured',\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\tflowDescription: 'formBuilder:flow.description',\n\tflowStepFallbackTitle: 'formBuilder:flow.stepFallbackTitle',\n\tflowFieldInStep: 'formBuilder:flow.fieldInStep',\n\tflowUnassigned: 'formBuilder:flow.unassigned',\n\tflowAssignToStep: 'formBuilder:flow.assignToStep',\n\tflowNextTerminal: 'formBuilder:flow.nextTerminal',\n\tfieldTypeMessage: 'formBuilder:fieldType.message',\n\tconfigContent: 'formBuilder:config.content',\n\ttabResponse: 'formBuilder:tab.response',\n\tresponseType: 'formBuilder:response.type',\n\tresponseTypeMessage: 'formBuilder:response.type.message',\n\tresponseTypeRedirect: 'formBuilder:response.type.redirect',\n\tresponseMessage: 'formBuilder:response.message',\n\tresponseRedirect: 'formBuilder:response.redirect',\n\tresponseUrl: 'formBuilder:response.url',\n\tresponseSubmitLabel: 'formBuilder:response.submitLabel',\n\ttabDisplay: 'formBuilder:tab.display',\n\tdisplayShowTitle: 'formBuilder:display.showTitle',\n\tdisplayTitle: 'formBuilder:display.title',\n\tdisplayIntro: 'formBuilder:display.intro',\n\tformBack: 'formBuilder:form.back',\n\tformNext: 'formBuilder:form.next',\n\tformSubmit: 'formBuilder:form.submit',\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,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,WAAW;CACX,aAAa;CACb,kBAAkB;CAClB,6BAA6B;CAC7B,uBAAuB;CACvB,yBAAyB;CACzB,0BAA0B;CAC1B,cAAc;CACd,YAAY;CACZ,uBAAuB;CACvB,kBAAkB;CAClB,6BAA6B;CAC7B,kBAAkB;CAClB,aAAa;CACb,kBAAkB;CAClB,gBAAgB;CAChB,wBAAwB;CACxB,iBAAiB;CACjB,eAAe;CACf,uBAAuB;CACvB,wBAAwB;CACxB,wBAAwB;CACxB,eAAe;CACf,qBAAqB;CACrB,mBAAmB;CACnB,8BAA8B;CAC9B,cAAc;CACd,yBAAyB;CACzB,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;CACvB,iBAAiB;CACjB,uBAAuB;CACvB,iBAAiB;CACjB,gBAAgB;CAChB,kBAAkB;CAClB,kBAAkB;CAClB,kBAAkB;CAClB,eAAe;CACf,aAAa;CACb,cAAc;CACd,qBAAqB;CACrB,sBAAsB;CACtB,iBAAiB;CACjB,kBAAkB;CAClB,aAAa;CACb,qBAAqB;CACrB,YAAY;CACZ,kBAAkB;CAClB,cAAc;CACd,cAAc;CACd,UAAU;CACV,UAAU;CACV,YAAY;AACb"}
|
|
@@ -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"}
|
package/dist/uploads/types.d.ts
CHANGED
|
@@ -9,8 +9,7 @@ type FileRef = {
|
|
|
9
9
|
};
|
|
10
10
|
/** Per-field file constraints, authored in the field config. */
|
|
11
11
|
type FileFieldConfig = {
|
|
12
|
-
/**
|
|
13
|
-
mimeTypes?: string[]; /** Maximum file size in bytes. Absent allows any size (subject to the collection limit). */
|
|
12
|
+
/** Allowed MIME types (exact match or a `type/*` wildcard). Empty/absent allows any. */mimeTypes?: string[]; /** Maximum file size in bytes. Absent allows any size (subject to the collection limit). */
|
|
14
13
|
maxSize?: number;
|
|
15
14
|
};
|
|
16
15
|
/** Why a file reference was rejected at the server trust boundary. */
|
|
@@ -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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { keys } from "../translations/keys.js";
|
|
2
|
+
import { asTranslate } from "../translations/server.js";
|
|
3
|
+
//#region src/validation/validateUrl.ts
|
|
4
|
+
/**
|
|
5
|
+
* Payload field validator for URL config fields (signed-webhook `url`, response redirect `url`):
|
|
6
|
+
* unset is fine (the consumer enforces presence where it matters), otherwise the value must parse
|
|
7
|
+
* as an absolute http(s) URL.
|
|
8
|
+
*/
|
|
9
|
+
const validateUrl = (value, { req }) => {
|
|
10
|
+
if (typeof value !== "string" || value.length === 0) return true;
|
|
11
|
+
let parsed;
|
|
12
|
+
try {
|
|
13
|
+
parsed = new URL(value);
|
|
14
|
+
} catch {
|
|
15
|
+
return asTranslate(req.t)(keys.validationUrlInvalid);
|
|
16
|
+
}
|
|
17
|
+
return parsed.protocol === "http:" || parsed.protocol === "https:" ? true : asTranslate(req.t)(keys.validationUrlInvalid);
|
|
18
|
+
};
|
|
19
|
+
//#endregion
|
|
20
|
+
export { validateUrl };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=validateUrl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateUrl.js","names":[],"sources":["../../src/validation/validateUrl.ts"],"sourcesContent":["import type { PayloadRequest } from 'payload'\nimport { keys } from '../translations/keys'\nimport { asTranslate } from '../translations/server'\n\n/**\n * Payload field validator for URL config fields (signed-webhook `url`, response redirect `url`):\n * unset is fine (the consumer enforces presence where it matters), otherwise the value must parse\n * as an absolute http(s) URL.\n */\nexport const validateUrl = (\n\tvalue: unknown,\n\t{ req }: { data?: unknown; req: PayloadRequest }\n): string | true => {\n\tif (typeof value !== 'string' || value.length === 0) {\n\t\treturn true\n\t}\n\tlet parsed: URL\n\ttry {\n\t\tparsed = new URL(value)\n\t} catch {\n\t\treturn asTranslate(req.t)(keys.validationUrlInvalid)\n\t}\n\treturn parsed.protocol === 'http:' || parsed.protocol === 'https:'\n\t\t? true\n\t\t: asTranslate(req.t)(keys.validationUrlInvalid)\n}\n"],"mappings":";;;;;;;;AASA,MAAa,eACZ,OACA,EAAE,UACiB;CACnB,IAAI,OAAO,UAAU,YAAY,MAAM,WAAW,GACjD,OAAO;CAER,IAAI;CACJ,IAAI;EACH,SAAS,IAAI,IAAI,KAAK;CACvB,QAAQ;EACP,OAAO,YAAY,IAAI,CAAC,EAAE,KAAK,oBAAoB;CACpD;CACA,OAAO,OAAO,aAAa,WAAW,OAAO,aAAa,WACvD,OACA,YAAY,IAAI,CAAC,EAAE,KAAK,oBAAoB;AAChD"}
|
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.4",
|
|
4
4
|
"description": "End-to-end forms platform for Payload: author, validate, render, collect, aggregate, and act.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -74,6 +74,7 @@
|
|
|
74
74
|
"@axe-core/playwright": "^4.11.3",
|
|
75
75
|
"@payloadcms/db-mongodb": "3.85.0",
|
|
76
76
|
"@payloadcms/db-postgres": "3.85.0",
|
|
77
|
+
"@payloadcms/richtext-lexical": "3.85.0",
|
|
77
78
|
"@payloadcms/ui": "3.85.0",
|
|
78
79
|
"@playwright/test": "1.60.0",
|
|
79
80
|
"@testing-library/jest-dom": "^6.6.3",
|
|
@@ -83,6 +84,7 @@
|
|
|
83
84
|
"@types/react-dom": "19.2.3",
|
|
84
85
|
"axe-core": "^4.12.1",
|
|
85
86
|
"jsdom": "^25.0.1",
|
|
87
|
+
"msw": "^2.14.6",
|
|
86
88
|
"payload": "3.85.0",
|
|
87
89
|
"playwright": "1.60.0",
|
|
88
90
|
"react": "19.2.6",
|
|
@@ -92,8 +94,8 @@
|
|
|
92
94
|
"typescript": "5.9.3",
|
|
93
95
|
"vitest": "4.1.7",
|
|
94
96
|
"@10x-media/payload-test-harness": "0.0.0",
|
|
95
|
-
"@10x-media/tsdown-config": "0.0.0",
|
|
96
97
|
"@10x-media/vitest-config": "0.0.0",
|
|
98
|
+
"@10x-media/tsdown-config": "0.0.0",
|
|
97
99
|
"@10x-media/tsconfig": "0.0.0"
|
|
98
100
|
},
|
|
99
101
|
"publishConfig": {
|