@10x-media/form-builder 0.1.0-beta.0 → 0.1.0-beta.2
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 +68 -0
- package/README.md +45 -1402
- package/dist/actions/buildActionBlocks.js +19 -0
- package/dist/actions/buildActionBlocks.js.map +1 -0
- package/dist/actions/builtin/confirmation.js +49 -0
- package/dist/actions/builtin/confirmation.js.map +1 -0
- package/dist/actions/builtin/emailTeam.js +46 -0
- package/dist/actions/builtin/emailTeam.js.map +1 -0
- package/dist/actions/builtin/index.d.ts +7 -0
- package/dist/actions/builtin/index.js +13 -0
- package/dist/actions/builtin/index.js.map +1 -0
- package/dist/actions/builtin/signedWebhook.js +49 -0
- package/dist/actions/builtin/signedWebhook.js.map +1 -0
- package/dist/actions/defineAction.d.ts +36 -0
- package/dist/actions/defineAction.js +6 -0
- package/dist/actions/defineAction.js.map +1 -0
- package/dist/actions/dispatch.js +48 -0
- package/dist/actions/dispatch.js.map +1 -0
- package/dist/actions/registry.d.ts +16 -0
- package/dist/actions/registry.js +16 -0
- package/dist/actions/registry.js.map +1 -0
- package/dist/actions/runActions.d.ts +9 -0
- package/dist/actions/runActions.js +34 -0
- package/dist/actions/runActions.js.map +1 -0
- package/dist/actions/sign.d.ts +7 -0
- package/dist/actions/sign.js +9 -0
- package/dist/actions/sign.js.map +1 -0
- package/dist/actions/task.js +82 -0
- package/dist/actions/task.js.map +1 -0
- package/dist/aggregation/aggregateResponses.d.ts +31 -0
- package/dist/aggregation/aggregateResponses.js +86 -0
- package/dist/aggregation/aggregateResponses.js.map +1 -0
- package/dist/aggregation/aggregateRows.d.ts +10 -0
- package/dist/aggregation/aggregateRows.js +64 -0
- package/dist/aggregation/aggregateRows.js.map +1 -0
- package/dist/aggregation/resolveResultsRequest.d.ts +32 -0
- package/dist/aggregation/resolveResultsRequest.js +56 -0
- package/dist/aggregation/resolveResultsRequest.js.map +1 -0
- package/dist/aggregation/types.d.ts +39 -0
- package/dist/calc/computeCalcFields.d.ts +15 -0
- package/dist/calc/computeCalcFields.js +27 -0
- package/dist/calc/computeCalcFields.js.map +1 -0
- package/dist/calc/evaluate.d.ts +8 -0
- package/dist/calc/evaluate.js +59 -0
- package/dist/calc/evaluate.js.map +1 -0
- package/dist/calc/normalizeCalc.d.ts +8 -0
- package/dist/calc/normalizeCalc.js +100 -0
- package/dist/calc/normalizeCalc.js.map +1 -0
- package/dist/calc/types.d.ts +28 -0
- package/dist/client/ConditionBuilder.js +121 -0
- package/dist/client/ConditionBuilder.js.map +1 -0
- package/dist/client/ConditionRow.js +150 -0
- package/dist/client/ConditionRow.js.map +1 -0
- package/dist/client/FlowBuilder.d.ts +15 -0
- package/dist/client/FlowBuilder.js +408 -0
- package/dist/client/FlowBuilder.js.map +1 -0
- package/dist/client/FormConditionField.d.ts +21 -0
- package/dist/client/FormConditionField.js +33 -0
- package/dist/client/FormConditionField.js.map +1 -0
- package/dist/client/synthesizeClientField.js +46 -0
- package/dist/client/synthesizeClientField.js.map +1 -0
- package/dist/collections/formSubmissions.js +157 -0
- package/dist/collections/formSubmissions.js.map +1 -0
- package/dist/collections/forms.js +198 -0
- package/dist/collections/forms.js.map +1 -0
- package/dist/collections/uploads.d.ts +30 -0
- package/dist/collections/uploads.js +55 -0
- package/dist/collections/uploads.js.map +1 -0
- package/dist/conditions/conditionType.js +14 -0
- package/dist/conditions/conditionType.js.map +1 -0
- package/dist/conditions/evaluate.d.ts +17 -0
- package/dist/conditions/evaluate.js +94 -0
- package/dist/conditions/evaluate.js.map +1 -0
- package/dist/conditions/fieldTypes.d.ts +9 -0
- package/dist/{fieldTypes-CzhhJXjg.js → conditions/fieldTypes.js} +2 -2
- package/dist/conditions/fieldTypes.js.map +1 -0
- package/dist/conditions/normalizeConditions.js +47 -0
- package/dist/conditions/normalizeConditions.js.map +1 -0
- package/dist/conditions/types.d.ts +8 -0
- package/dist/consent/buildConsentSourceConfig.js +49 -0
- package/dist/consent/buildConsentSourceConfig.js.map +1 -0
- package/dist/consent/builtin/index.d.ts +7 -0
- package/dist/consent/builtin/index.js +11 -0
- package/dist/consent/builtin/index.js.map +1 -0
- package/dist/consent/builtin/pageReference.js +75 -0
- package/dist/consent/builtin/pageReference.js.map +1 -0
- package/dist/consent/builtin/static.js +44 -0
- package/dist/consent/builtin/static.js.map +1 -0
- package/dist/consent/captureConsent.d.ts +28 -0
- package/dist/consent/captureConsent.js +26 -0
- package/dist/consent/captureConsent.js.map +1 -0
- package/dist/consent/defineConsentSource.d.ts +35 -0
- package/dist/consent/defineConsentSource.js +6 -0
- package/dist/consent/defineConsentSource.js.map +1 -0
- package/dist/consent/registry.d.ts +16 -0
- package/dist/consent/registry.js +16 -0
- package/dist/consent/registry.js.map +1 -0
- package/dist/consent/resolveConsentLinks.d.ts +19 -0
- package/dist/consent/resolveConsentLinks.js +26 -0
- package/dist/consent/resolveConsentLinks.js.map +1 -0
- package/dist/consent/resolvePublishedVersionRef.d.ts +17 -0
- package/dist/consent/resolvePublishedVersionRef.js +27 -0
- package/dist/consent/resolvePublishedVersionRef.js.map +1 -0
- package/dist/events/noopSink.js +6 -0
- package/dist/events/noopSink.js.map +1 -0
- package/dist/events/resolveEventSink.js +8 -0
- package/dist/events/resolveEventSink.js.map +1 -0
- package/dist/events/types.d.ts +31 -0
- package/dist/exports/client.d.ts +3 -21
- package/dist/exports/client.js +3 -319
- package/dist/exports/i18n.d.ts +3 -138
- package/dist/exports/i18n.js +2 -2
- package/dist/exports/react.d.ts +45 -550
- package/dist/exports/react.js +39 -1563
- package/dist/exports/rsc.d.ts +2 -16
- package/dist/exports/rsc.js +1 -54
- package/dist/exports/types.d.ts +28 -5
- package/dist/fields/buildFieldBlocks.js +60 -0
- package/dist/fields/buildFieldBlocks.js.map +1 -0
- package/dist/fields/builtin/calculation.js +24 -0
- package/dist/fields/builtin/calculation.js.map +1 -0
- package/dist/fields/builtin/checkbox.js +13 -0
- package/dist/fields/builtin/checkbox.js.map +1 -0
- package/dist/fields/builtin/consent.js +32 -0
- package/dist/fields/builtin/consent.js.map +1 -0
- package/dist/fields/builtin/email.js +18 -0
- package/dist/fields/builtin/email.js.map +1 -0
- package/dist/fields/builtin/file.js +40 -0
- package/dist/fields/builtin/file.js.map +1 -0
- package/dist/fields/builtin/index.js +27 -0
- package/dist/fields/builtin/index.js.map +1 -0
- package/dist/fields/builtin/number.js +17 -0
- package/dist/fields/builtin/number.js.map +1 -0
- package/dist/fields/builtin/repeater.js +44 -0
- package/dist/fields/builtin/repeater.js.map +1 -0
- package/dist/fields/builtin/select.js +44 -0
- package/dist/fields/builtin/select.js.map +1 -0
- package/dist/fields/builtin/text.js +13 -0
- package/dist/fields/builtin/text.js.map +1 -0
- package/dist/fields/builtin/textarea.js +13 -0
- package/dist/fields/builtin/textarea.js.map +1 -0
- package/dist/fields/defineFormField.d.ts +13 -0
- package/dist/fields/defineFormField.js +12 -0
- package/dist/fields/defineFormField.js.map +1 -0
- package/dist/fields/registry.d.ts +10 -0
- package/dist/fields/registry.js +24 -0
- package/dist/fields/registry.js.map +1 -0
- package/dist/fields/sharedConfig.js +89 -0
- package/dist/fields/sharedConfig.js.map +1 -0
- package/dist/fields/types.d.ts +89 -0
- package/dist/flow/engine.d.ts +17 -0
- package/dist/flow/engine.js +24 -0
- package/dist/flow/engine.js.map +1 -0
- package/dist/flow/normalizeFlow.js +35 -0
- package/dist/flow/normalizeFlow.js.map +1 -0
- package/dist/{types-DsJ_6kGJ.d.ts → flow/types.d.ts} +2 -2
- package/dist/index.d.ts +93 -4
- package/dist/index.js +43 -1890
- package/dist/index.js.map +1 -1
- package/dist/plugin/access.js +12 -0
- package/dist/plugin/access.js.map +1 -0
- package/dist/plugin/collectionOverrides.d.ts +22 -0
- package/dist/plugin/registerCollections.js +68 -0
- package/dist/plugin/registerCollections.js.map +1 -0
- package/dist/plugin/registerTranslations.js +19 -0
- package/dist/plugin/registerTranslations.js.map +1 -0
- package/dist/prefill/valuesFromSearchParams.d.ts +18 -0
- package/dist/prefill/valuesFromSearchParams.js +45 -0
- package/dist/prefill/valuesFromSearchParams.js.map +1 -0
- package/dist/presentations/defaults.d.ts +33 -0
- package/dist/presentations/defaults.js +35 -0
- package/dist/presentations/defaults.js.map +1 -0
- package/dist/presentations/registry.d.ts +15 -0
- package/dist/presentations/registry.js +15 -0
- package/dist/presentations/registry.js.map +1 -0
- package/dist/presentations/types.d.ts +18 -0
- package/dist/react/Form.d.ts +110 -0
- package/dist/react/Form.js +499 -0
- package/dist/react/Form.js.map +1 -0
- package/dist/react/FormContext.d.ts +16 -0
- package/dist/react/FormContext.js +14 -0
- package/dist/react/FormContext.js.map +1 -0
- package/dist/react/FormLayout.d.ts +20 -0
- package/dist/react/FormLayout.js +14 -0
- package/dist/react/FormLayout.js.map +1 -0
- package/dist/react/FormResults.d.ts +25 -0
- package/dist/react/FormResults.js +85 -0
- package/dist/react/FormResults.js.map +1 -0
- package/dist/react/Honeypot.d.ts +22 -0
- package/dist/react/Honeypot.js +38 -0
- package/dist/react/Honeypot.js.map +1 -0
- package/dist/react/Poll.d.ts +32 -0
- package/dist/react/Poll.js +77 -0
- package/dist/react/Poll.js.map +1 -0
- package/dist/react/cn.d.ts +6 -0
- package/dist/react/cn.js +8 -0
- package/dist/react/cn.js.map +1 -0
- package/dist/react/contract.d.ts +32 -0
- package/dist/react/contract.js +7 -0
- package/dist/react/contract.js.map +1 -0
- package/dist/react/events.js +14 -0
- package/dist/react/events.js.map +1 -0
- package/dist/react/fetchResults.d.ts +25 -0
- package/dist/react/fetchResults.js +31 -0
- package/dist/react/fetchResults.js.map +1 -0
- package/dist/react/presentation/Backdrop.d.ts +18 -0
- package/dist/react/presentation/Backdrop.js +14 -0
- package/dist/react/presentation/Backdrop.js.map +1 -0
- package/dist/react/presentation/DialogSurface.d.ts +35 -0
- package/dist/react/presentation/DialogSurface.js +56 -0
- package/dist/react/presentation/DialogSurface.js.map +1 -0
- package/dist/react/presentation/presentations.d.ts +7 -0
- package/dist/react/presentation/presentations.js +32 -0
- package/dist/react/presentation/presentations.js.map +1 -0
- package/dist/react/presentation/registry.d.ts +11 -0
- package/dist/react/presentation/registry.js +12 -0
- package/dist/react/presentation/registry.js.map +1 -0
- package/dist/react/presentation/types.d.ts +19 -0
- package/dist/react/presentation/useDismiss.d.ts +19 -0
- package/dist/react/presentation/useDismiss.js +33 -0
- package/dist/react/presentation/useDismiss.js.map +1 -0
- package/dist/react/presentation/useFocusTrap.d.ts +8 -0
- package/dist/react/presentation/useFocusTrap.js +35 -0
- package/dist/react/presentation/useFocusTrap.js.map +1 -0
- package/dist/react/presentation/useScrollLock.d.ts +6 -0
- package/dist/react/presentation/useScrollLock.js +18 -0
- package/dist/react/presentation/useScrollLock.js.map +1 -0
- package/dist/react/primitives/Checkbox.d.ts +26 -0
- package/dist/react/primitives/Checkbox.js +20 -0
- package/dist/react/primitives/Checkbox.js.map +1 -0
- package/dist/react/primitives/FieldShell.d.ts +31 -0
- package/dist/react/primitives/FieldShell.js +51 -0
- package/dist/react/primitives/FieldShell.js.map +1 -0
- package/dist/react/primitives/Input.d.ts +30 -0
- package/dist/react/primitives/Input.js +21 -0
- package/dist/react/primitives/Input.js.map +1 -0
- package/dist/react/primitives/Select.d.ts +34 -0
- package/dist/react/primitives/Select.js +26 -0
- package/dist/react/primitives/Select.js.map +1 -0
- package/dist/react/primitives/Textarea.d.ts +28 -0
- package/dist/react/primitives/Textarea.js +20 -0
- package/dist/react/primitives/Textarea.js.map +1 -0
- package/dist/react/recall.js +20 -0
- package/dist/react/recall.js.map +1 -0
- package/dist/react/registry.d.ts +16 -0
- package/dist/react/registry.js +16 -0
- package/dist/react/registry.js.map +1 -0
- package/dist/react/renderers/calculation.js +30 -0
- package/dist/react/renderers/calculation.js.map +1 -0
- package/dist/react/renderers/checkbox.js +35 -0
- package/dist/react/renderers/checkbox.js.map +1 -0
- package/dist/react/renderers/consent.js +54 -0
- package/dist/react/renderers/consent.js.map +1 -0
- package/dist/react/renderers/email.js +37 -0
- package/dist/react/renderers/email.js.map +1 -0
- package/dist/react/renderers/file.js +92 -0
- package/dist/react/renderers/file.js.map +1 -0
- package/dist/react/renderers/index.d.ts +8 -0
- package/dist/react/renderers/index.js +28 -0
- package/dist/react/renderers/index.js.map +1 -0
- package/dist/react/renderers/number.js +40 -0
- package/dist/react/renderers/number.js.map +1 -0
- package/dist/react/renderers/repeater.js +113 -0
- package/dist/react/renderers/repeater.js.map +1 -0
- package/dist/react/renderers/select.js +38 -0
- package/dist/react/renderers/select.js.map +1 -0
- package/dist/react/renderers/text.js +37 -0
- package/dist/react/renderers/text.js.map +1 -0
- package/dist/react/renderers/textarea.js +36 -0
- package/dist/react/renderers/textarea.js.map +1 -0
- package/dist/react/resolveForm.js +16 -0
- package/dist/react/resolveForm.js.map +1 -0
- package/dist/react/state.d.ts +15 -0
- package/dist/react/state.js +70 -0
- package/dist/react/state.js.map +1 -0
- package/dist/react/submitForm.d.ts +31 -0
- package/dist/react/submitForm.js +58 -0
- package/dist/react/submitForm.js.map +1 -0
- package/dist/react/toFormDocument.d.ts +24 -0
- package/dist/react/toFormDocument.js +22 -0
- package/dist/react/toFormDocument.js.map +1 -0
- package/dist/react/uploadFile.d.ts +23 -0
- package/dist/react/uploadFile.js +39 -0
- package/dist/react/uploadFile.js.map +1 -0
- package/dist/react/useField.d.ts +14 -0
- package/dist/react/useField.js +49 -0
- package/dist/react/useField.js.map +1 -0
- package/dist/react/useFormState.d.ts +8 -0
- package/dist/react/useFormState.js +9 -0
- package/dist/react/useFormState.js.map +1 -0
- package/dist/react/useFormStep.d.ts +8 -0
- package/dist/react/useFormStep.js +9 -0
- package/dist/react/useFormStep.js.map +1 -0
- package/dist/react/validateField.js +30 -0
- package/dist/react/validateField.js.map +1 -0
- package/dist/recall/interpolate.d.ts +10 -0
- package/dist/recall/interpolate.js +16 -0
- package/dist/recall/interpolate.js.map +1 -0
- package/dist/recall/resolver.d.ts +22 -0
- package/dist/recall/resolver.js +36 -0
- package/dist/recall/resolver.js.map +1 -0
- package/dist/spam/captcha.d.ts +12 -0
- package/dist/spam/captcha.js +11 -0
- package/dist/spam/captcha.js.map +1 -0
- package/dist/spam/constants.d.ts +12 -0
- package/dist/spam/constants.js +15 -0
- package/dist/spam/constants.js.map +1 -0
- package/dist/spam/identify.d.ts +12 -0
- package/dist/spam/identify.js +20 -0
- package/dist/spam/identify.js.map +1 -0
- package/dist/spam/rateLimiter.d.ts +18 -0
- package/dist/spam/rateLimiter.js +41 -0
- package/dist/spam/rateLimiter.js.map +1 -0
- package/dist/spam/reserved.js +30 -0
- package/dist/spam/reserved.js.map +1 -0
- package/dist/spam/resolveSpam.d.ts +12 -0
- package/dist/spam/resolveSpam.js +42 -0
- package/dist/spam/resolveSpam.js.map +1 -0
- package/dist/spam/spamGuard.js +68 -0
- package/dist/spam/spamGuard.js.map +1 -0
- package/dist/spam/types.d.ts +73 -0
- package/dist/spam/uploadHooks.js +33 -0
- package/dist/spam/uploadHooks.js.map +1 -0
- package/dist/submissions/SubmissionAnswers.d.ts +14 -0
- package/dist/submissions/SubmissionAnswers.js +133 -0
- package/dist/submissions/SubmissionAnswers.js.map +1 -0
- package/dist/submissions/SubmissionAnswersClient.js +142 -0
- package/dist/submissions/SubmissionAnswersClient.js.map +1 -0
- package/dist/submissions/runSubmission.js +257 -0
- package/dist/submissions/runSubmission.js.map +1 -0
- package/dist/submissions/types.d.ts +34 -0
- package/dist/submissions/validateSubmission.js +59 -0
- package/dist/submissions/validateSubmission.js.map +1 -0
- package/dist/translations/en.d.ts +12 -0
- package/dist/{translations-edMqq_2e.js → translations/en.js} +29 -23
- package/dist/translations/en.js.map +1 -0
- package/dist/translations/index.d.ts +14 -0
- package/dist/translations/index.js +26 -0
- package/dist/translations/index.js.map +1 -0
- package/dist/translations/keys.d.ts +157 -0
- package/dist/{keys-N5xGiUsh.js → translations/keys.js} +28 -3
- package/dist/translations/keys.js.map +1 -0
- package/dist/translations/makeTranslate.d.ts +11 -0
- package/dist/translations/makeTranslate.js +11 -0
- package/dist/translations/makeTranslate.js.map +1 -0
- package/dist/translations/server.js +25 -0
- package/dist/translations/server.js.map +1 -0
- package/dist/translations/useTranslation.js +12 -0
- package/dist/translations/useTranslation.js.map +1 -0
- package/dist/uploads/captureFileRef.d.ts +27 -0
- package/dist/uploads/captureFileRef.js +34 -0
- package/dist/uploads/captureFileRef.js.map +1 -0
- package/dist/uploads/resolveFileRef.d.ts +26 -0
- package/dist/uploads/resolveFileRef.js +44 -0
- package/dist/uploads/resolveFileRef.js.map +1 -0
- package/dist/uploads/types.d.ts +20 -0
- package/dist/validation/buildRuleBlocks.js +46 -0
- package/dist/validation/buildRuleBlocks.js.map +1 -0
- package/dist/validation/builtin/email.js +19 -0
- package/dist/validation/builtin/email.js.map +1 -0
- package/dist/validation/builtin/index.js +27 -0
- package/dist/validation/builtin/index.js.map +1 -0
- package/dist/validation/builtin/matchesField.js +20 -0
- package/dist/validation/builtin/matchesField.js.map +1 -0
- package/dist/validation/builtin/max.js +21 -0
- package/dist/validation/builtin/max.js.map +1 -0
- package/dist/validation/builtin/maxLength.js +26 -0
- package/dist/validation/builtin/maxLength.js.map +1 -0
- package/dist/validation/builtin/min.js +21 -0
- package/dist/validation/builtin/min.js.map +1 -0
- package/dist/validation/builtin/minLength.js +26 -0
- package/dist/validation/builtin/minLength.js.map +1 -0
- package/dist/validation/builtin/notAlreadySubmitted.js +32 -0
- package/dist/validation/builtin/notAlreadySubmitted.js.map +1 -0
- package/dist/validation/builtin/oneOf.js +34 -0
- package/dist/validation/builtin/oneOf.js.map +1 -0
- package/dist/validation/builtin/pattern.js +41 -0
- package/dist/validation/builtin/pattern.js.map +1 -0
- package/dist/validation/builtin/url.js +22 -0
- package/dist/validation/builtin/url.js.map +1 -0
- package/dist/validation/defineValidationRule.d.ts +12 -0
- package/dist/validation/defineValidationRule.js +11 -0
- package/dist/validation/defineValidationRule.js.map +1 -0
- package/dist/validation/message.js +14 -0
- package/dist/validation/message.js.map +1 -0
- package/dist/validation/registry.d.ts +10 -0
- package/dist/validation/registry.js +20 -0
- package/dist/validation/registry.js.map +1 -0
- package/dist/validation/runValidation.js +111 -0
- package/dist/validation/runValidation.js.map +1 -0
- package/dist/validation/types.d.ts +76 -0
- package/package.json +8 -5
- package/styles/form-builder.css +201 -11
- package/dist/constants-B-BUfetP.d.ts +0 -288
- package/dist/exports/client.js.map +0 -1
- package/dist/exports/react.js.map +0 -1
- package/dist/exports/rsc.js.map +0 -1
- package/dist/fieldTypes-B8jkNRob.d.ts +0 -188
- package/dist/fieldTypes-CzhhJXjg.js.map +0 -1
- package/dist/index-DfFYGbVF.d.ts +0 -481
- package/dist/keys-N5xGiUsh.js.map +0 -1
- package/dist/registry-CoCyhtvB.js +0 -282
- package/dist/registry-CoCyhtvB.js.map +0 -1
- package/dist/resolver-OeQyVH2N.js +0 -665
- package/dist/resolver-OeQyVH2N.js.map +0 -1
- package/dist/translations-edMqq_2e.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","names":[],"sources":["../../src/fields/registry.ts"],"sourcesContent":["import type { AnyFormFieldDefinition } from './types'\n\nexport type FieldTypeRegistry = Map<string, AnyFormFieldDefinition>\n\n/** Per-type opt-in: `false` removes a built-in, `true` keeps it, an object adds a new type or replaces one. */\nexport type FieldTypeOption = boolean | AnyFormFieldDefinition\n\nexport type FieldTypesConfig = Record<string, FieldTypeOption>\n\nexport const buildRegistry = (definitions: AnyFormFieldDefinition[]): FieldTypeRegistry => {\n\tconst registry: FieldTypeRegistry = new Map()\n\tfor (const definition of definitions) {\n\t\tregistry.set(definition.type, definition)\n\t}\n\treturn registry\n}\n\n/**\n * Resolve the active field-type registry from the built-in defaults and the plugin `fields` option.\n * `false` removes a type, `true` keeps the default, an object adds a new type or replaces an existing\n * one (its `type` is forced to the config key so an override cannot rename the slot).\n */\nexport const resolveFieldTypes = (\n\tdefaults: AnyFormFieldDefinition[],\n\tconfig: FieldTypesConfig = {}\n): FieldTypeRegistry => {\n\tconst registry = buildRegistry(defaults)\n\tfor (const [type, option] of Object.entries(config)) {\n\t\tif (option === false) {\n\t\t\tregistry.delete(type)\n\t\t} else if (option === true) {\n\t\t\t// keep the default; a no-op when no default exists for this key\n\t\t} else {\n\t\t\tregistry.set(type, { ...option, type })\n\t\t}\n\t}\n\treturn registry\n}\n"],"mappings":";AASA,MAAa,iBAAiB,gBAA6D;CAC1F,MAAM,2BAA8B,IAAI,IAAI;CAC5C,KAAK,MAAM,cAAc,aACxB,SAAS,IAAI,WAAW,MAAM,UAAU;CAEzC,OAAO;AACR;;;;;;AAOA,MAAa,qBACZ,UACA,SAA2B,CAAC,MACL;CACvB,MAAM,WAAW,cAAc,QAAQ;CACvC,KAAK,MAAM,CAAC,MAAM,WAAW,OAAO,QAAQ,MAAM,GACjD,IAAI,WAAW,OACd,SAAS,OAAO,IAAI;MACd,IAAI,WAAW,MAAM,CAE5B,OACC,SAAS,IAAI,MAAM;EAAE,GAAG;EAAQ;CAAK,CAAC;CAGxC,OAAO;AACR"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { keys } from "../translations/keys.js";
|
|
2
|
+
import { labelFor } from "../translations/server.js";
|
|
3
|
+
//#region src/fields/sharedConfig.ts
|
|
4
|
+
const CONDITION_FIELD_REF = "@10x-media/form-builder/client#FormConditionField";
|
|
5
|
+
const conditionField = (name, labelKey, conditionTypes) => ({
|
|
6
|
+
name,
|
|
7
|
+
type: "json",
|
|
8
|
+
label: labelFor(labelKey),
|
|
9
|
+
admin: { components: { Field: {
|
|
10
|
+
path: CONDITION_FIELD_REF,
|
|
11
|
+
clientProps: { conditionTypes }
|
|
12
|
+
} } }
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Config every field instance carries regardless of type. `name` is the machine key written into
|
|
16
|
+
* submissions; `width` is stored for the layout grid. `visibleWhen`/`validateWhen` store a
|
|
17
|
+
* canonical Payload `Where`, edited by the native condition builder. Field types add their own `config`
|
|
18
|
+
* after these.
|
|
19
|
+
*/
|
|
20
|
+
const sharedFieldConfig = (conditionTypes) => [
|
|
21
|
+
{
|
|
22
|
+
name: "name",
|
|
23
|
+
type: "text",
|
|
24
|
+
required: true,
|
|
25
|
+
label: labelFor(keys.configName)
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "label",
|
|
29
|
+
type: "text",
|
|
30
|
+
label: labelFor(keys.configLabel)
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "required",
|
|
34
|
+
type: "checkbox",
|
|
35
|
+
label: labelFor(keys.configRequired)
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "width",
|
|
39
|
+
type: "select",
|
|
40
|
+
defaultValue: "full",
|
|
41
|
+
label: labelFor(keys.configWidth),
|
|
42
|
+
options: [
|
|
43
|
+
{
|
|
44
|
+
label: "Full",
|
|
45
|
+
value: "full"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
label: "Half",
|
|
49
|
+
value: "half"
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
label: "Third",
|
|
53
|
+
value: "third"
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
label: "Two thirds",
|
|
57
|
+
value: "twoThirds"
|
|
58
|
+
}
|
|
59
|
+
]
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
name: "placeholder",
|
|
63
|
+
type: "text",
|
|
64
|
+
label: labelFor(keys.configPlaceholder)
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: "description",
|
|
68
|
+
type: "textarea",
|
|
69
|
+
label: labelFor(keys.configDescription)
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
type: "collapsible",
|
|
73
|
+
label: labelFor(keys.configAdvanced),
|
|
74
|
+
admin: { initCollapsed: true },
|
|
75
|
+
fields: [
|
|
76
|
+
conditionField("visibleWhen", keys.configVisibleWhen, conditionTypes),
|
|
77
|
+
conditionField("validateWhen", keys.configValidateWhen, conditionTypes),
|
|
78
|
+
{
|
|
79
|
+
name: "hidden",
|
|
80
|
+
type: "checkbox",
|
|
81
|
+
label: labelFor(keys.configHidden)
|
|
82
|
+
}
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
];
|
|
86
|
+
//#endregion
|
|
87
|
+
export { sharedFieldConfig };
|
|
88
|
+
|
|
89
|
+
//# sourceMappingURL=sharedConfig.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharedConfig.js","names":[],"sources":["../../src/fields/sharedConfig.ts"],"sourcesContent":["import type { Field } from 'payload'\nimport type { ConditionFieldType } from '../conditions/fieldTypes'\nimport { keys } from '../translations/keys'\nimport { labelFor } from '../translations/server'\n\nconst CONDITION_FIELD_REF = '@10x-media/form-builder/client#FormConditionField'\n\nconst conditionField = (\n\tname: 'visibleWhen' | 'validateWhen',\n\tlabelKey: string,\n\tconditionTypes: Record<string, ConditionFieldType>\n): Field => ({\n\tname,\n\ttype: 'json',\n\tlabel: labelFor(labelKey),\n\tadmin: {\n\t\tcomponents: {\n\t\t\tField: { path: CONDITION_FIELD_REF, clientProps: { conditionTypes } },\n\t\t},\n\t},\n})\n\n/**\n * Config every field instance carries regardless of type. `name` is the machine key written into\n * submissions; `width` is stored for the layout grid. `visibleWhen`/`validateWhen` store a\n * canonical Payload `Where`, edited by the native condition builder. Field types add their own `config`\n * after these.\n */\nexport const sharedFieldConfig = (conditionTypes: Record<string, ConditionFieldType>): Field[] => [\n\t{ name: 'name', type: 'text', required: true, label: labelFor(keys.configName) },\n\t{ name: 'label', type: 'text', label: labelFor(keys.configLabel) },\n\t{ name: 'required', type: 'checkbox', label: labelFor(keys.configRequired) },\n\t{\n\t\tname: 'width',\n\t\ttype: 'select',\n\t\tdefaultValue: 'full',\n\t\tlabel: labelFor(keys.configWidth),\n\t\toptions: [\n\t\t\t{ label: 'Full', value: 'full' },\n\t\t\t{ label: 'Half', value: 'half' },\n\t\t\t{ label: 'Third', value: 'third' },\n\t\t\t{ label: 'Two thirds', value: 'twoThirds' },\n\t\t],\n\t},\n\t{ name: 'placeholder', type: 'text', label: labelFor(keys.configPlaceholder) },\n\t{ name: 'description', type: 'textarea', label: labelFor(keys.configDescription) },\n\t{\n\t\ttype: 'collapsible',\n\t\tlabel: labelFor(keys.configAdvanced),\n\t\tadmin: { initCollapsed: true },\n\t\tfields: [\n\t\t\tconditionField('visibleWhen', keys.configVisibleWhen, conditionTypes),\n\t\t\tconditionField('validateWhen', keys.configValidateWhen, conditionTypes),\n\t\t\t{ name: 'hidden', type: 'checkbox', label: labelFor(keys.configHidden) },\n\t\t],\n\t},\n]\n"],"mappings":";;;AAKA,MAAM,sBAAsB;AAE5B,MAAM,kBACL,MACA,UACA,oBACY;CACZ;CACA,MAAM;CACN,OAAO,SAAS,QAAQ;CACxB,OAAO,EACN,YAAY,EACX,OAAO;EAAE,MAAM;EAAqB,aAAa,EAAE,eAAe;CAAE,EACrE,EACD;AACD;;;;;;;AAQA,MAAa,qBAAqB,mBAAgE;CACjG;EAAE,MAAM;EAAQ,MAAM;EAAQ,UAAU;EAAM,OAAO,SAAS,KAAK,UAAU;CAAE;CAC/E;EAAE,MAAM;EAAS,MAAM;EAAQ,OAAO,SAAS,KAAK,WAAW;CAAE;CACjE;EAAE,MAAM;EAAY,MAAM;EAAY,OAAO,SAAS,KAAK,cAAc;CAAE;CAC3E;EACC,MAAM;EACN,MAAM;EACN,cAAc;EACd,OAAO,SAAS,KAAK,WAAW;EAChC,SAAS;GACR;IAAE,OAAO;IAAQ,OAAO;GAAO;GAC/B;IAAE,OAAO;IAAQ,OAAO;GAAO;GAC/B;IAAE,OAAO;IAAS,OAAO;GAAQ;GACjC;IAAE,OAAO;IAAc,OAAO;GAAY;EAC3C;CACD;CACA;EAAE,MAAM;EAAe,MAAM;EAAQ,OAAO,SAAS,KAAK,iBAAiB;CAAE;CAC7E;EAAE,MAAM;EAAe,MAAM;EAAY,OAAO,SAAS,KAAK,iBAAiB;CAAE;CACjF;EACC,MAAM;EACN,OAAO,SAAS,KAAK,cAAc;EACnC,OAAO,EAAE,eAAe,KAAK;EAC7B,QAAQ;GACP,eAAe,eAAe,KAAK,mBAAmB,cAAc;GACpE,eAAe,gBAAgB,KAAK,oBAAoB,cAAc;GACtE;IAAE,MAAM;IAAU,MAAM;IAAY,OAAO,SAAS,KAAK,YAAY;GAAE;EACxE;CACD;AACD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { FileRef } from "../uploads/types.js";
|
|
2
|
+
import { ConditionFieldType } from "../conditions/fieldTypes.js";
|
|
3
|
+
import { Field } from "payload";
|
|
4
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
5
|
+
|
|
6
|
+
//#region src/fields/types.d.ts
|
|
7
|
+
/** The stored value shapes a field type can declare. Drives `validate`/`format` typing and value coercion. */
|
|
8
|
+
type FormFieldValueKind = 'text' | 'number' | 'boolean' | 'date' | 'text[]' | 'file' | 'repeater';
|
|
9
|
+
type ValueKindTypeMap = {
|
|
10
|
+
text: string;
|
|
11
|
+
number: number;
|
|
12
|
+
boolean: boolean;
|
|
13
|
+
date: string;
|
|
14
|
+
'text[]': string[];
|
|
15
|
+
file: FileRef;
|
|
16
|
+
repeater: Array<Record<string, unknown>>;
|
|
17
|
+
};
|
|
18
|
+
type ValueOfKind<K extends FormFieldValueKind> = ValueKindTypeMap[K];
|
|
19
|
+
/** Resolved per-instance config values for a field type (loose at the DB boundary, narrowed by the author's generic). */
|
|
20
|
+
type FormFieldConfigValues = Record<string, unknown>;
|
|
21
|
+
/** A `t`-like resolver. The engine supplies one from the request i18n; the renderer will supply the client i18n. */
|
|
22
|
+
type Translate = (key: string) => string;
|
|
23
|
+
type FormFieldValidateArgs<K extends FormFieldValueKind, TConfig extends FormFieldConfigValues> = {
|
|
24
|
+
value: ValueOfKind<K> | null | undefined;
|
|
25
|
+
config: TConfig;
|
|
26
|
+
siblingData: Record<string, unknown>;
|
|
27
|
+
data: Record<string, unknown>;
|
|
28
|
+
locale: string;
|
|
29
|
+
t: Translate;
|
|
30
|
+
};
|
|
31
|
+
type FormFieldValidate<K extends FormFieldValueKind, TConfig extends FormFieldConfigValues> = (args: FormFieldValidateArgs<K, TConfig>) => Promise<string | true> | string | true;
|
|
32
|
+
type FormFieldFormatArgs<K extends FormFieldValueKind, TConfig extends FormFieldConfigValues> = {
|
|
33
|
+
value: ValueOfKind<K> | null | undefined;
|
|
34
|
+
config: TConfig;
|
|
35
|
+
optionLabels?: Record<string, string>;
|
|
36
|
+
locale: string;
|
|
37
|
+
t: Translate;
|
|
38
|
+
};
|
|
39
|
+
type FormFieldFormat<K extends FormFieldValueKind, TConfig extends FormFieldConfigValues> = (args: FormFieldFormatArgs<K, TConfig>) => string;
|
|
40
|
+
/**
|
|
41
|
+
* A field type, authored once. `value` drives typed `validate`/`format`; `config` is a Payload
|
|
42
|
+
* `Field[]` for the add-field drawer; `Field` is the client renderer import-map ref;
|
|
43
|
+
* `label` is an i18n key or a literal.
|
|
44
|
+
*/
|
|
45
|
+
type FormFieldDefinition<K extends FormFieldValueKind = FormFieldValueKind, TConfig extends FormFieldConfigValues = FormFieldConfigValues> = {
|
|
46
|
+
type: string;
|
|
47
|
+
label: string;
|
|
48
|
+
value: K;
|
|
49
|
+
config?: Field[];
|
|
50
|
+
validate?: FormFieldValidate<K, TConfig>;
|
|
51
|
+
format?: FormFieldFormat<K, TConfig>;
|
|
52
|
+
Field?: string; /** Optional Standard Schema validator (Zod/Valibot/etc.), run by the engine after the intrinsic validator. */
|
|
53
|
+
schema?: StandardSchemaV1;
|
|
54
|
+
icon?: string;
|
|
55
|
+
group?: string; /** How this field appears in the condition builder. Defaults from `value` (see `defaultConditionType`). */
|
|
56
|
+
conditionType?: ConditionFieldType;
|
|
57
|
+
};
|
|
58
|
+
/** The erased shape stored in the heterogeneous registry. Value is `unknown`; config re-narrows per matched type at execution. */
|
|
59
|
+
type AnyFormFieldValidate = (args: {
|
|
60
|
+
value: unknown;
|
|
61
|
+
config: FormFieldConfigValues;
|
|
62
|
+
siblingData: Record<string, unknown>;
|
|
63
|
+
data: Record<string, unknown>;
|
|
64
|
+
locale: string;
|
|
65
|
+
t: Translate;
|
|
66
|
+
}) => Promise<string | true> | string | true;
|
|
67
|
+
type AnyFormFieldFormat = (args: {
|
|
68
|
+
value: unknown;
|
|
69
|
+
config: FormFieldConfigValues;
|
|
70
|
+
optionLabels?: Record<string, string>;
|
|
71
|
+
locale: string;
|
|
72
|
+
t: Translate;
|
|
73
|
+
}) => string;
|
|
74
|
+
type AnyFormFieldDefinition = {
|
|
75
|
+
type: string;
|
|
76
|
+
label: string;
|
|
77
|
+
value: FormFieldValueKind;
|
|
78
|
+
config?: Field[];
|
|
79
|
+
validate?: AnyFormFieldValidate;
|
|
80
|
+
format?: AnyFormFieldFormat;
|
|
81
|
+
Field?: string;
|
|
82
|
+
schema?: StandardSchemaV1;
|
|
83
|
+
icon?: string;
|
|
84
|
+
group?: string; /** How this field appears in the condition builder. Defaults from `value` (see `defaultConditionType`). */
|
|
85
|
+
conditionType?: ConditionFieldType;
|
|
86
|
+
};
|
|
87
|
+
//#endregion
|
|
88
|
+
export { AnyFormFieldDefinition, FormFieldConfigValues, FormFieldDefinition, FormFieldFormat, FormFieldValidate, FormFieldValueKind, Translate };
|
|
89
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { FormFlow } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/flow/engine.d.ts
|
|
4
|
+
/** The entry step id (the first step), or `undefined` for an empty flow. */
|
|
5
|
+
declare const firstStepId: (flow: FormFlow) => string | undefined;
|
|
6
|
+
/** The field machine names a step renders (empty for an unknown step). */
|
|
7
|
+
declare const stepFieldNames: (flow: FormFlow, id: string) => string[];
|
|
8
|
+
/**
|
|
9
|
+
* Resolve the next step id from the current step + answers: the first transition whose `when` matches
|
|
10
|
+
* (via `evaluateCondition`), else the default `next`, else `undefined` (terminal). Pure + isomorphic.
|
|
11
|
+
*/
|
|
12
|
+
declare const resolveNextStepId: (flow: FormFlow, currentId: string, answers: Record<string, unknown>) => string | undefined;
|
|
13
|
+
/** Whether the current step is terminal (no matching transition + no default next). */
|
|
14
|
+
declare const isTerminalStepId: (flow: FormFlow, currentId: string, answers: Record<string, unknown>) => boolean;
|
|
15
|
+
//#endregion
|
|
16
|
+
export { firstStepId, isTerminalStepId, resolveNextStepId, stepFieldNames };
|
|
17
|
+
//# sourceMappingURL=engine.d.ts.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { evaluateCondition } from "../conditions/evaluate.js";
|
|
2
|
+
//#region src/flow/engine.ts
|
|
3
|
+
/** The entry step id (the first step), or `undefined` for an empty flow. */
|
|
4
|
+
const firstStepId = (flow) => flow.steps[0]?.id;
|
|
5
|
+
/** The step with the given id, or `undefined`. */
|
|
6
|
+
const getStep = (flow, id) => flow.steps.find((step) => step.id === id);
|
|
7
|
+
/** The field machine names a step renders (empty for an unknown step). */
|
|
8
|
+
const stepFieldNames = (flow, id) => getStep(flow, id)?.fields ?? [];
|
|
9
|
+
/**
|
|
10
|
+
* Resolve the next step id from the current step + answers: the first transition whose `when` matches
|
|
11
|
+
* (via `evaluateCondition`), else the default `next`, else `undefined` (terminal). Pure + isomorphic.
|
|
12
|
+
*/
|
|
13
|
+
const resolveNextStepId = (flow, currentId, answers) => {
|
|
14
|
+
const step = getStep(flow, currentId);
|
|
15
|
+
if (!step) return;
|
|
16
|
+
for (const transition of step.transitions ?? []) if (evaluateCondition(transition.when, answers)) return transition.to;
|
|
17
|
+
return step.next;
|
|
18
|
+
};
|
|
19
|
+
/** Whether the current step is terminal (no matching transition + no default next). */
|
|
20
|
+
const isTerminalStepId = (flow, currentId, answers) => resolveNextStepId(flow, currentId, answers) === void 0;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { firstStepId, isTerminalStepId, resolveNextStepId, stepFieldNames };
|
|
23
|
+
|
|
24
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","names":[],"sources":["../../src/flow/engine.ts"],"sourcesContent":["import { evaluateCondition } from '../conditions/evaluate'\nimport type { FlowStep, FormFlow } from './types'\n\n/** The entry step id (the first step), or `undefined` for an empty flow. */\nexport const firstStepId = (flow: FormFlow): string | undefined => flow.steps[0]?.id\n\n/** The step with the given id, or `undefined`. */\nexport const getStep = (flow: FormFlow, id: string): FlowStep | undefined =>\n\tflow.steps.find((step) => step.id === id)\n\n/** The field machine names a step renders (empty for an unknown step). */\nexport const stepFieldNames = (flow: FormFlow, id: string): string[] =>\n\tgetStep(flow, id)?.fields ?? []\n\n/**\n * Resolve the next step id from the current step + answers: the first transition whose `when` matches\n * (via `evaluateCondition`), else the default `next`, else `undefined` (terminal). Pure + isomorphic.\n */\nexport const resolveNextStepId = (\n\tflow: FormFlow,\n\tcurrentId: string,\n\tanswers: Record<string, unknown>\n): string | undefined => {\n\tconst step = getStep(flow, currentId)\n\tif (!step) {\n\t\treturn undefined\n\t}\n\tfor (const transition of step.transitions ?? []) {\n\t\tif (evaluateCondition(transition.when, answers)) {\n\t\t\treturn transition.to\n\t\t}\n\t}\n\treturn step.next\n}\n\n/** Whether the current step is terminal (no matching transition + no default next). */\nexport const isTerminalStepId = (\n\tflow: FormFlow,\n\tcurrentId: string,\n\tanswers: Record<string, unknown>\n): boolean => resolveNextStepId(flow, currentId, answers) === undefined\n"],"mappings":";;;AAIA,MAAa,eAAe,SAAuC,KAAK,MAAM,IAAI;;AAGlF,MAAa,WAAW,MAAgB,OACvC,KAAK,MAAM,MAAM,SAAS,KAAK,OAAO,EAAE;;AAGzC,MAAa,kBAAkB,MAAgB,OAC9C,QAAQ,MAAM,EAAE,GAAG,UAAU,CAAC;;;;;AAM/B,MAAa,qBACZ,MACA,WACA,YACwB;CACxB,MAAM,OAAO,QAAQ,MAAM,SAAS;CACpC,IAAI,CAAC,MACJ;CAED,KAAK,MAAM,cAAc,KAAK,eAAe,CAAC,GAC7C,IAAI,kBAAkB,WAAW,MAAM,OAAO,GAC7C,OAAO,WAAW;CAGpB,OAAO,KAAK;AACb;;AAGA,MAAa,oBACZ,MACA,WACA,YACa,kBAAkB,MAAM,WAAW,OAAO,MAAM,KAAA"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
//#region src/flow/normalizeFlow.ts
|
|
2
|
+
const isRecord = (v) => v !== null && typeof v === "object" && !Array.isArray(v);
|
|
3
|
+
/**
|
|
4
|
+
* Pure guard that normalizes a raw (possibly untrusted) flow value against the
|
|
5
|
+
* form's current field list. Returns `undefined` when the flow is absent, empty,
|
|
6
|
+
* or resolves to fewer than two steps (a single step is an ordinary form).
|
|
7
|
+
*/
|
|
8
|
+
const normalizeFlow = (raw, fieldNames) => {
|
|
9
|
+
if (!isRecord(raw) || !Array.isArray(raw.steps)) return;
|
|
10
|
+
const knownFields = new Set(fieldNames);
|
|
11
|
+
const rawSteps = raw.steps.filter((s) => isRecord(s) && typeof s.id === "string");
|
|
12
|
+
const knownIds = new Set(rawSteps.map((s) => s.id));
|
|
13
|
+
if (knownIds.size < 2) return;
|
|
14
|
+
return { steps: rawSteps.map((s) => {
|
|
15
|
+
const id = s.id;
|
|
16
|
+
const fields = Array.isArray(s.fields) ? s.fields.filter((f) => typeof f === "string" && knownFields.has(f)) : [];
|
|
17
|
+
const transitions = (Array.isArray(s.transitions) ? s.transitions : []).filter((t) => isRecord(t) && typeof t.to === "string" && knownIds.has(t.to) && isRecord(t.when)).map((t) => ({
|
|
18
|
+
when: t.when,
|
|
19
|
+
to: t.to
|
|
20
|
+
}));
|
|
21
|
+
const next = typeof s.next === "string" && knownIds.has(s.next) ? s.next : void 0;
|
|
22
|
+
const step = {
|
|
23
|
+
id,
|
|
24
|
+
fields
|
|
25
|
+
};
|
|
26
|
+
if (typeof s.title === "string") step.title = s.title;
|
|
27
|
+
if (transitions.length > 0) step.transitions = transitions;
|
|
28
|
+
if (next !== void 0) step.next = next;
|
|
29
|
+
return step;
|
|
30
|
+
}) };
|
|
31
|
+
};
|
|
32
|
+
//#endregion
|
|
33
|
+
export { normalizeFlow };
|
|
34
|
+
|
|
35
|
+
//# sourceMappingURL=normalizeFlow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalizeFlow.js","names":[],"sources":["../../src/flow/normalizeFlow.ts"],"sourcesContent":["import type { Where } from 'payload'\nimport type { FlowStep, FormFlow } from './types'\n\nconst isRecord = (v: unknown): v is Record<string, unknown> =>\n\tv !== null && typeof v === 'object' && !Array.isArray(v)\n\n/**\n * Pure guard that normalizes a raw (possibly untrusted) flow value against the\n * form's current field list. Returns `undefined` when the flow is absent, empty,\n * or resolves to fewer than two steps (a single step is an ordinary form).\n */\nexport const normalizeFlow = (raw: unknown, fieldNames: string[]): FormFlow | undefined => {\n\tif (!isRecord(raw) || !Array.isArray(raw.steps)) {\n\t\treturn undefined\n\t}\n\n\tconst knownFields = new Set(fieldNames)\n\n\tconst rawSteps = raw.steps.filter(\n\t\t(s): s is Record<string, unknown> => isRecord(s) && typeof s.id === 'string'\n\t)\n\n\tconst knownIds = new Set(rawSteps.map((s) => s.id as string))\n\n\tif (knownIds.size < 2) {\n\t\treturn undefined\n\t}\n\n\tconst steps: FlowStep[] = rawSteps.map((s) => {\n\t\tconst id = s.id as string\n\n\t\tconst fields = Array.isArray(s.fields)\n\t\t\t? s.fields.filter((f): f is string => typeof f === 'string' && knownFields.has(f))\n\t\t\t: []\n\n\t\tconst rawTransitions = Array.isArray(s.transitions) ? s.transitions : []\n\t\tconst transitions = rawTransitions\n\t\t\t.filter(\n\t\t\t\t(t): t is Record<string, unknown> =>\n\t\t\t\t\tisRecord(t) &&\n\t\t\t\t\ttypeof t.to === 'string' &&\n\t\t\t\t\tknownIds.has(t.to as string) &&\n\t\t\t\t\tisRecord(t.when)\n\t\t\t)\n\t\t\t.map((t) => ({ when: t.when as Where, to: t.to as string }))\n\n\t\tconst next = typeof s.next === 'string' && knownIds.has(s.next) ? (s.next as string) : undefined\n\n\t\tconst step: FlowStep = { id, fields }\n\t\tif (typeof s.title === 'string') step.title = s.title\n\t\tif (transitions.length > 0) step.transitions = transitions\n\t\tif (next !== undefined) step.next = next\n\n\t\treturn step\n\t})\n\n\treturn { steps }\n}\n"],"mappings":";AAGA,MAAM,YAAY,MACjB,MAAM,QAAQ,OAAO,MAAM,YAAY,CAAC,MAAM,QAAQ,CAAC;;;;;;AAOxD,MAAa,iBAAiB,KAAc,eAA+C;CAC1F,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,QAAQ,IAAI,KAAK,GAC7C;CAGD,MAAM,cAAc,IAAI,IAAI,UAAU;CAEtC,MAAM,WAAW,IAAI,MAAM,QACzB,MAAoC,SAAS,CAAC,KAAK,OAAO,EAAE,OAAO,QACrE;CAEA,MAAM,WAAW,IAAI,IAAI,SAAS,KAAK,MAAM,EAAE,EAAY,CAAC;CAE5D,IAAI,SAAS,OAAO,GACnB;CA+BD,OAAO,EAAE,OA5BiB,SAAS,KAAK,MAAM;EAC7C,MAAM,KAAK,EAAE;EAEb,MAAM,SAAS,MAAM,QAAQ,EAAE,MAAM,IAClC,EAAE,OAAO,QAAQ,MAAmB,OAAO,MAAM,YAAY,YAAY,IAAI,CAAC,CAAC,IAC/E,CAAC;EAGJ,MAAM,eADiB,MAAM,QAAQ,EAAE,WAAW,IAAI,EAAE,cAAc,CAAC,GAErE,QACC,MACA,SAAS,CAAC,KACV,OAAO,EAAE,OAAO,YAChB,SAAS,IAAI,EAAE,EAAY,KAC3B,SAAS,EAAE,IAAI,CACjB,EACC,KAAK,OAAO;GAAE,MAAM,EAAE;GAAe,IAAI,EAAE;EAAa,EAAE;EAE5D,MAAM,OAAO,OAAO,EAAE,SAAS,YAAY,SAAS,IAAI,EAAE,IAAI,IAAK,EAAE,OAAkB,KAAA;EAEvF,MAAM,OAAiB;GAAE;GAAI;EAAO;EACpC,IAAI,OAAO,EAAE,UAAU,UAAU,KAAK,QAAQ,EAAE;EAChD,IAAI,YAAY,SAAS,GAAG,KAAK,cAAc;EAC/C,IAAI,SAAS,KAAA,GAAW,KAAK,OAAO;EAEpC,OAAO;CACR,CAEa,EAAE;AAChB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,93 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
1
|
+
import { FileFieldConfig, FileRef, FileRefError } from "./uploads/types.js";
|
|
2
|
+
import { AnyFormFieldDefinition, FormFieldDefinition, FormFieldFormat, FormFieldValidate, FormFieldValueKind } from "./fields/types.js";
|
|
3
|
+
import { TranslationsOption } from "./translations/index.js";
|
|
4
|
+
import { AggregationBucket, AggregationRow, FieldAggregation, FieldMeta, SubmissionStatusFilter } from "./aggregation/types.js";
|
|
5
|
+
import { CalcExpression } from "./calc/types.js";
|
|
6
|
+
import { calcExpressionOf, computeCalcFields } from "./calc/computeCalcFields.js";
|
|
7
|
+
import { evaluateCalc } from "./calc/evaluate.js";
|
|
8
|
+
import { evaluateCondition } from "./conditions/evaluate.js";
|
|
9
|
+
import { FieldTypeOption, FieldTypeRegistry, FieldTypesConfig } from "./fields/registry.js";
|
|
10
|
+
import { PrefillOptions, valuesFromSearchParams } from "./prefill/valuesFromSearchParams.js";
|
|
11
|
+
import { FormEventSink } from "./events/types.js";
|
|
12
|
+
import { AnyValidationRuleDefinition, ValidationRuleDefinition, ValidationRuleResult, ValidationSeverity } from "./validation/types.js";
|
|
13
|
+
import { PresentationDensity, PresentationDescriptor, PresentationSurface } from "./presentations/types.js";
|
|
14
|
+
import { interpolate } from "./recall/interpolate.js";
|
|
15
|
+
import { RecallResolver, buildRecallResolver, optionLabelsFor } from "./recall/resolver.js";
|
|
16
|
+
import { CAPTCHA_TOKEN_KEY, DEFAULT_HONEYPOT_FIELD } from "./spam/constants.js";
|
|
17
|
+
import { ActionDefinition, ActionRunArgs, AnyActionDefinition, defineAction } from "./actions/defineAction.js";
|
|
18
|
+
import { ActionOption, ActionRegistry, ActionsConfig, resolveActions } from "./actions/registry.js";
|
|
19
|
+
import { ActionResult } from "./actions/runActions.js";
|
|
20
|
+
import { AggregateFieldResponsesArgs, AggregateFormResponsesArgs, aggregateFieldResponses, aggregateFormResponses, fieldHasOptions } from "./aggregation/aggregateResponses.js";
|
|
21
|
+
import { ResolveResultsRequestArgs, ResolveResultsRequestResult, resolveFormResultsRequest } from "./aggregation/resolveResultsRequest.js";
|
|
22
|
+
import { CollectionOverrides } from "./plugin/collectionOverrides.js";
|
|
23
|
+
import { FORM_UPLOADS_SLUG, UploadsCollectionConfig, UploadsOption, buildUploadsCollection, resolveUploads } from "./collections/uploads.js";
|
|
24
|
+
import { FieldCondition } from "./conditions/types.js";
|
|
25
|
+
import { AnyConsentSource, ConsentLink, ConsentResolveArgs, ConsentResolved, ConsentSource, defineConsentSource } from "./consent/defineConsentSource.js";
|
|
26
|
+
import { ConsentSourceOption, ConsentSourceRegistry, ConsentSourcesConfig, resolveConsentSources } from "./consent/registry.js";
|
|
27
|
+
import { ConsentProof, captureConsent } from "./consent/captureConsent.js";
|
|
28
|
+
import { PresentationDescriptorOption, PresentationDescriptorRegistry, PresentationsDescriptorConfig, resolvePresentationDescriptors } from "./presentations/registry.js";
|
|
29
|
+
import { CaptchaProvider, CaptchaVerifyArgs, IdentifyFn, RateLimitCheckArgs, RateLimitConfig, RateLimitResult, RateLimiter, SpamConfig, SpamMetadataConfig, SpamOption } from "./spam/types.js";
|
|
30
|
+
import { ValidationRuleOption, ValidationRuleRegistry, ValidationRulesConfig } from "./validation/registry.js";
|
|
31
|
+
import { defaultActionDefinitions } from "./actions/builtin/index.js";
|
|
32
|
+
import { SIGNATURE_HEADER, signPayload } from "./actions/sign.js";
|
|
33
|
+
import { aggregateRowForField, aggregateRowsForFields } from "./aggregation/aggregateRows.js";
|
|
34
|
+
import { normalizeCalc } from "./calc/normalizeCalc.js";
|
|
35
|
+
import { defaultConsentSources } from "./consent/builtin/index.js";
|
|
36
|
+
import { resolveConsentLinks } from "./consent/resolveConsentLinks.js";
|
|
37
|
+
import { resolvePublishedVersionRef } from "./consent/resolvePublishedVersionRef.js";
|
|
38
|
+
import { defineFormField } from "./fields/defineFormField.js";
|
|
39
|
+
import { DEFAULT_PRESENTATION_NAME, defaultPresentationDescriptors } from "./presentations/defaults.js";
|
|
40
|
+
import { defineCaptchaProvider } from "./spam/captcha.js";
|
|
41
|
+
import { defaultIdentify } from "./spam/identify.js";
|
|
42
|
+
import { createKvRateLimiter } from "./spam/rateLimiter.js";
|
|
43
|
+
import { resolveSpamConfig } from "./spam/resolveSpam.js";
|
|
44
|
+
import { resolveFileRef } from "./uploads/resolveFileRef.js";
|
|
45
|
+
import { captureFileRef } from "./uploads/captureFileRef.js";
|
|
46
|
+
import { defineValidationRule } from "./validation/defineValidationRule.js";
|
|
47
|
+
|
|
48
|
+
//#region src/index.d.ts
|
|
49
|
+
type FormBuilderPluginOptions = {
|
|
50
|
+
disabled?: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Per-locale overrides for this plugin's UI strings, keyed by the typed
|
|
53
|
+
* translation keys exported from `@10x-media/form-builder/i18n`. Values win
|
|
54
|
+
* over the built-in locales key-by-key; locales the plugin does not ship are
|
|
55
|
+
* added whole. App-level `i18n.translations` still wins over both.
|
|
56
|
+
*/
|
|
57
|
+
translations?: TranslationsOption; /** Pluggable sink for form lifecycle events. Defaults to a no-op; analytics adapters or a future analytics plugin subscribe here. */
|
|
58
|
+
events?: FormEventSink; /** Add, override, or remove field types. `false` removes a built-in, `true` keeps it, an object adds or replaces one. */
|
|
59
|
+
fields?: FieldTypesConfig; /** Add, override, or remove presentations. `false` removes a built-in, `true` keeps it, an object adds or replaces one. */
|
|
60
|
+
presentations?: PresentationsDescriptorConfig; /** Add, override, or remove validation rule types. `false` removes a built-in, `true` keeps it, an object adds or replaces one. */
|
|
61
|
+
rules?: ValidationRulesConfig; /** Add, override, or remove post-submit action types. `false` removes a built-in, `true` keeps it, an object adds or replaces one. */
|
|
62
|
+
actions?: ActionsConfig; /** Add, override, or remove consent source types. `false` removes a built-in, `true` keeps it, an object adds or replaces one. */
|
|
63
|
+
consentSources?: ConsentSourcesConfig; /** The built-in `form-uploads` collection backing file fields. `false` disables it (bring your own); an object overrides slug/upload/access/fields. */
|
|
64
|
+
uploads?: UploadsOption; /** Honeypot + rate-limiting (on by default) + a captcha adapter seam + upload-ownership scoping. `false` disables the whole subsystem. */
|
|
65
|
+
spam?: SpamOption;
|
|
66
|
+
/**
|
|
67
|
+
* When `true`, the raw `values`, `descriptors`, and `consent` JSON fields are visible in the
|
|
68
|
+
* submission admin view. Default `false` — those fields are fully represented by the
|
|
69
|
+
* `SubmissionAnswers` UI component and are noisy when shown alongside it.
|
|
70
|
+
*/
|
|
71
|
+
showSubmissionRawFields?: boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Override individual plugin-managed collections using explicit spreads. Each key accepts a
|
|
74
|
+
* `CollectionOverrides` object: top-level keys are spread with the plugin's defaults (spread
|
|
75
|
+
* order per key determines who wins), hooks are appended after the plugin's own hooks, and
|
|
76
|
+
* `fields` is a function that receives the default fields and returns the final array so
|
|
77
|
+
* additions/removals are always intentional.
|
|
78
|
+
*/
|
|
79
|
+
overrides?: {
|
|
80
|
+
forms?: CollectionOverrides;
|
|
81
|
+
formSubmissions?: CollectionOverrides;
|
|
82
|
+
uploads?: CollectionOverrides;
|
|
83
|
+
};
|
|
84
|
+
};
|
|
85
|
+
declare module 'payload' {
|
|
86
|
+
interface RegisteredPlugins {
|
|
87
|
+
'@10x-media/form-builder': FormBuilderPluginOptions;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
declare const formBuilder: (options: FormBuilderPluginOptions) => import("payload").Plugin;
|
|
91
|
+
//#endregion
|
|
92
|
+
export { type ActionDefinition, type ActionOption, type ActionRegistry, type ActionResult, type ActionRunArgs, type ActionsConfig, type AggregateFieldResponsesArgs, type AggregateFormResponsesArgs, type AggregationBucket, type AggregationRow, type AnyActionDefinition, type AnyConsentSource, type AnyFormFieldDefinition, type AnyValidationRuleDefinition, CAPTCHA_TOKEN_KEY, type CalcExpression, type CaptchaProvider, type CaptchaVerifyArgs, type ConsentLink, type ConsentProof, type ConsentResolveArgs, type ConsentResolved, type ConsentSource, type ConsentSourceOption, type ConsentSourceRegistry, type ConsentSourcesConfig, DEFAULT_HONEYPOT_FIELD, DEFAULT_PRESENTATION_NAME, FORM_UPLOADS_SLUG, type FieldAggregation, type FieldCondition, type FieldMeta, type FieldTypeOption, type FieldTypeRegistry, type FieldTypesConfig, type FileFieldConfig, type FileRef, type FileRefError, FormBuilderPluginOptions, type FormBuilderPluginOptions as PluginOptions, type FormFieldDefinition, type FormFieldFormat, type FormFieldValidate, type FormFieldValueKind, type IdentifyFn, type PrefillOptions, type PresentationDensity, type PresentationDescriptor, type PresentationDescriptorOption, type PresentationDescriptorRegistry, type PresentationSurface, type PresentationsDescriptorConfig, type RateLimitCheckArgs, type RateLimitConfig, type RateLimitResult, type RateLimiter, type RecallResolver, type ResolveResultsRequestArgs, type ResolveResultsRequestResult, SIGNATURE_HEADER, type SpamConfig, type SpamMetadataConfig, type SpamOption, type SubmissionStatusFilter, type UploadsCollectionConfig, type UploadsOption, type ValidationRuleDefinition, type ValidationRuleOption, type ValidationRuleRegistry, type ValidationRuleResult, type ValidationRulesConfig, type ValidationSeverity, aggregateFieldResponses, aggregateFormResponses, aggregateRowForField, aggregateRowsForFields, buildRecallResolver, buildUploadsCollection, calcExpressionOf, captureConsent, captureFileRef, computeCalcFields, createKvRateLimiter, defaultActionDefinitions, defaultConsentSources, defaultIdentify, defaultPresentationDescriptors, defineAction, defineCaptchaProvider, defineConsentSource, defineFormField, defineValidationRule, evaluateCalc, evaluateCondition, fieldHasOptions, formBuilder, interpolate, normalizeCalc, optionLabelsFor, resolveActions, resolveConsentLinks, resolveConsentSources, resolveFileRef, resolveFormResultsRequest, resolvePresentationDescriptors, resolvePublishedVersionRef, resolveSpamConfig, resolveUploads, signPayload, valuesFromSearchParams };
|
|
93
|
+
//# sourceMappingURL=index.d.ts.map
|