@riverbankcms/sdk 0.62.4 → 0.67.0
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/README.md +11 -0
- package/dist/_dts/api/src/accessAdmin.d.ts +64 -2
- package/dist/_dts/api/src/aiEndpoints.d.ts +2 -2
- package/dist/_dts/api/src/aiPlayground.d.ts +18 -11
- package/dist/_dts/api/src/apiEndpointTypes.d.ts +12 -0
- package/dist/_dts/api/src/billing.d.ts +46 -10
- package/dist/_dts/api/src/bookingConfig.d.ts +2 -0
- package/dist/_dts/api/src/bookingOperations.d.ts +1 -1
- package/dist/_dts/api/src/bookingRecords.d.ts +26 -0
- package/dist/_dts/api/src/commercePortalEndpoints.d.ts +12 -1
- package/dist/_dts/api/src/contentRuntime.d.ts +1 -0
- package/dist/_dts/api/src/courses.d.ts +3 -0
- package/dist/_dts/api/src/endpoints.d.ts +48 -0
- package/dist/_dts/api/src/index.d.ts +8 -5
- package/dist/_dts/api/src/sdkConfig/contracts.d.ts +29 -40
- package/dist/_dts/api/src/sdkContracts.d.ts +14 -2
- package/dist/_dts/api/src/siteMembers.d.ts +1 -1
- package/dist/_dts/api/src/siteOnboarding.d.ts +4 -0
- package/dist/_dts/api/src/siteOperations.d.ts +11 -1
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +29 -0
- package/dist/_dts/api/src/types.d.ts +2 -1
- package/dist/_dts/billing/src/plans/registry.d.ts +1 -0
- package/dist/_dts/billing/src/plans/types.d.ts +10 -1
- package/dist/_dts/block-form/src/FormRenderer.d.ts +38 -0
- package/dist/_dts/block-form/src/backend/adapter.d.ts +7 -0
- package/dist/_dts/block-form/src/backend/hooks/useRepeaterBackend.d.ts +34 -0
- package/dist/_dts/block-form/src/backend/hooks.d.ts +66 -0
- package/dist/_dts/block-form/src/backend/index.d.ts +12 -0
- package/dist/_dts/block-form/src/backend/rhf-backend.d.ts +34 -0
- package/dist/_dts/block-form/src/backend/store-backend.d.ts +60 -0
- package/dist/_dts/block-form/src/backend/types.d.ts +137 -0
- package/dist/_dts/block-form/src/backend/useBackendWatch.d.ts +22 -0
- package/dist/_dts/block-form/src/backend/utils/getErrorMessage.d.ts +1 -0
- package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +70 -0
- package/dist/_dts/block-form/src/client/blockDraftSaveability.d.ts +1 -0
- package/dist/_dts/block-form/src/client/index.d.ts +30 -0
- package/dist/_dts/block-form/src/context/BlockContext.d.ts +29 -0
- package/dist/_dts/block-form/src/context/DisplayLabelResolverContext.d.ts +33 -0
- package/dist/_dts/block-form/src/context/FieldPreviewResolverContext.d.ts +30 -0
- package/dist/_dts/block-form/src/context/ImageResolveContext.d.ts +1 -0
- package/dist/_dts/block-form/src/context/index.d.ts +4 -0
- package/dist/_dts/block-form/src/fields/props.d.ts +48 -0
- package/dist/_dts/block-form/src/fields/types.d.ts +223 -0
- package/dist/_dts/block-form/src/index.d.ts +22 -0
- package/dist/_dts/block-form/src/manifest/ManifestForm.d.ts +37 -0
- package/dist/_dts/block-form/src/manifest/canonicalValidation.d.ts +5 -0
- package/dist/_dts/block-form/src/manifest/filterSdkTabs.d.ts +44 -0
- package/dist/_dts/block-form/src/manifest/manifestFormAdapter.d.ts +61 -0
- package/dist/_dts/block-form/src/manifest/mergeManifestWithSdkOptions.d.ts +24 -0
- package/dist/_dts/block-form/src/palette/PaletteContext.d.ts +11 -0
- package/dist/_dts/block-form/src/registry/schemas.d.ts +105 -0
- package/dist/_dts/block-form/src/registry/widgets.d.ts +59 -0
- package/dist/_dts/block-form/src/sdk-config/SdkConfigContext.d.ts +110 -0
- package/dist/_dts/block-form/src/sdk-config/hooks.d.ts +21 -0
- package/dist/_dts/block-form/src/sdk-config/index.d.ts +2 -0
- package/dist/_dts/block-form/src/shared/disclosure.d.ts +1 -0
- package/dist/_dts/block-form/src/shared/hooks/index.d.ts +2 -0
- package/dist/_dts/block-form/src/shared/hooks/useCoarsePointer.d.ts +5 -0
- package/dist/_dts/block-form/src/shared/hooks/useContainerWidth.d.ts +6 -0
- package/dist/_dts/block-form/src/utils/VisibilityWrapper.d.ts +25 -0
- package/dist/_dts/block-form/src/utils/computeWatchedPath.d.ts +18 -0
- package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +9 -0
- package/dist/_dts/block-form/src/utils/fieldHelpers.d.ts +94 -0
- package/dist/_dts/block-form/src/utils/resolvePromotedFields.d.ts +22 -0
- package/dist/_dts/block-form/src/utils/slug.d.ts +3 -0
- package/dist/_dts/block-form/src/utils/typeGuards.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/BackgroundColorWidget/BackgroundColorField.d.ts +10 -0
- package/dist/_dts/block-form/src/widgets/BackgroundColorWidget/BackgroundColorWidget.d.ts +23 -0
- package/dist/_dts/block-form/src/widgets/BackgroundColorWidget/index.d.ts +2 -0
- package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientField.d.ts +13 -0
- package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientWidget.d.ts +17 -0
- package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/index.d.ts +2 -0
- package/dist/_dts/block-form/src/widgets/BooleanField/BooleanField.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/BooleanField/booleanFieldDefaults.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/BooleanField/booleanFieldSchema.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/BooleanField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/BoxStyleWidget/BoxStyleWidget.d.ts +17 -0
- package/dist/_dts/block-form/src/widgets/BoxStyleWidget/index.d.ts +1 -0
- package/dist/_dts/block-form/src/widgets/ContentTypeSelectField/contentTypeSelectFieldDefaults.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/ContentTypeSelectField/contentTypeSelectFieldSchema.d.ts +4 -0
- package/dist/_dts/block-form/src/widgets/DateField/DateField.d.ts +23 -0
- package/dist/_dts/block-form/src/widgets/DateField/dateFieldDefaults.d.ts +8 -0
- package/dist/_dts/block-form/src/widgets/DateField/dateFieldSchema.d.ts +9 -0
- package/dist/_dts/block-form/src/widgets/DateField/datePickerPopover.d.ts +32 -0
- package/dist/_dts/block-form/src/widgets/DateField/index.d.ts +4 -0
- package/dist/_dts/block-form/src/widgets/DateTimeField/DateTimeField.d.ts +30 -0
- package/dist/_dts/block-form/src/widgets/DateTimeField/dateTimeFieldDefaults.d.ts +8 -0
- package/dist/_dts/block-form/src/widgets/DateTimeField/dateTimeFieldSchema.d.ts +11 -0
- package/dist/_dts/block-form/src/widgets/DateTimeField/index.d.ts +4 -0
- package/dist/_dts/block-form/src/widgets/DateTimeField/utils/dateTimeUtils.d.ts +22 -0
- package/dist/_dts/block-form/src/widgets/DateTimeField/utils/index.d.ts +1 -0
- package/dist/_dts/block-form/src/widgets/EntryPickerField/entryPickerFieldDefaults.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/EntryPickerField/entryPickerFieldSchema.d.ts +4 -0
- package/dist/_dts/block-form/src/widgets/Field.d.ts +21 -0
- package/dist/_dts/block-form/src/widgets/FieldFrame.d.ts +32 -0
- package/dist/_dts/block-form/src/widgets/FieldSettingsModal/FieldSettingsModal.d.ts +34 -0
- package/dist/_dts/block-form/src/widgets/FieldSettingsModal/index.d.ts +2 -0
- package/dist/_dts/block-form/src/widgets/GroupField/GroupField.d.ts +23 -0
- package/dist/_dts/block-form/src/widgets/GroupField/groupFieldDefaults.d.ts +9 -0
- package/dist/_dts/block-form/src/widgets/GroupField/groupFieldSchema.d.ts +10 -0
- package/dist/_dts/block-form/src/widgets/GroupField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/LinkField/linkFieldDefaults.d.ts +10 -0
- package/dist/_dts/block-form/src/widgets/LinkField/linkFieldSchema.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/MediaField/mediaFieldDefaults.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/MediaField/mediaFieldSchema.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/ModalGroupField/ModalGroupField.d.ts +17 -0
- package/dist/_dts/block-form/src/widgets/ModalGroupField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/ModalGroupField/modalFieldDefaults.d.ts +18 -0
- package/dist/_dts/block-form/src/widgets/ModalGroupField/modalFieldSchema.d.ts +14 -0
- package/dist/_dts/block-form/src/widgets/NumberField/NumberField.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/NumberField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/NumberField/numberFieldDefaults.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/NumberField/numberFieldSchema.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/PresetOrCustomField/PresetOrCustomField.d.ts +11 -0
- package/dist/_dts/block-form/src/widgets/PresetOrCustomField/index.d.ts +4 -0
- package/dist/_dts/block-form/src/widgets/PresetOrCustomField/presetOrCustomFieldDefaults.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/PresetOrCustomField/presetOrCustomFieldSchema.d.ts +4 -0
- package/dist/_dts/block-form/src/widgets/PresetOrCustomField/types.d.ts +37 -0
- package/dist/_dts/block-form/src/widgets/ReferenceField/referenceFieldDefaults.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/ReferenceField/referenceFieldSchema.d.ts +4 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/RepeaterField.d.ts +26 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterDragHandle.d.ts +8 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterError.d.ts +11 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterHeader.d.ts +10 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterLayoutGrid.d.ts +27 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterList.d.ts +19 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRow.d.ts +23 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowActions.d.ts +16 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterRowContent.d.ts +19 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterTabbedEditDialog.d.ts +16 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterThumbnailCard.d.ts +26 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/RepeaterThumbnailGrid.d.ts +20 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/index.d.ts +11 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/components/layoutGridDomain.d.ts +34 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/index.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/layoutGridCapacityDecision.d.ts +22 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLayoutGridCapacity.d.ts +20 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useLinearRepeaterDnd.d.ts +23 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterPointerDragCapability.d.ts +10 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterRowErrors.d.ts +12 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useRepeaterVisibility.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/hooks/useResolvedItemLabel.d.ts +12 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/repeaterFieldDefaults.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/repeaterFieldSchema.d.ts +8 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildItemLabel.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/buildSummary.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/createDefaultItem.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/getRepeaterItemFieldGroups.d.ts +8 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/getRepeaterItemFields.d.ts +22 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/index.d.ts +10 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/layoutGridCapacityContext.d.ts +2 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterDndDomain.d.ts +43 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/repeaterPresentation.d.ts +24 -0
- package/dist/_dts/block-form/src/widgets/RepeaterField/utils/resolveThumbnail.d.ts +12 -0
- package/dist/_dts/block-form/src/widgets/RichTextField/richTextFieldDefaults.d.ts +20 -0
- package/dist/_dts/block-form/src/widgets/RichTextField/richTextFieldSchema.d.ts +16 -0
- package/dist/_dts/block-form/src/widgets/SdkSelectField/SdkSelectField.d.ts +11 -0
- package/dist/_dts/block-form/src/widgets/SdkSelectField/index.d.ts +1 -0
- package/dist/_dts/block-form/src/widgets/SelectField/SelectField.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/SelectField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/SelectField/selectFieldDefaults.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/SelectField/selectFieldSchema.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/SelectWidget.d.ts +34 -0
- package/dist/_dts/block-form/src/widgets/SettingsModal/SettingsModal.d.ts +17 -0
- package/dist/_dts/block-form/src/widgets/SettingsModal/index.d.ts +2 -0
- package/dist/_dts/block-form/src/widgets/SliderField/SliderField.d.ts +16 -0
- package/dist/_dts/block-form/src/widgets/SliderField/index.d.ts +1 -0
- package/dist/_dts/block-form/src/widgets/SlugField/SlugField.d.ts +39 -0
- package/dist/_dts/block-form/src/widgets/SlugField/hooks/index.d.ts +1 -0
- package/dist/_dts/block-form/src/widgets/SlugField/hooks/useSlugAutoGeneration.d.ts +29 -0
- package/dist/_dts/block-form/src/widgets/SlugField/index.d.ts +5 -0
- package/dist/_dts/block-form/src/widgets/SlugField/slugFieldDefaults.d.ts +8 -0
- package/dist/_dts/block-form/src/widgets/SlugField/slugFieldSchema.d.ts +14 -0
- package/dist/_dts/block-form/src/widgets/SlugField/utils/index.d.ts +2 -0
- package/dist/_dts/block-form/src/widgets/SlugField/utils/pathUtils.d.ts +30 -0
- package/dist/_dts/block-form/src/widgets/SlugField/utils/slugUtils.d.ts +17 -0
- package/dist/_dts/block-form/src/widgets/TabGroupField/TabGroupField.d.ts +13 -0
- package/dist/_dts/block-form/src/widgets/TabGroupField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/TabGroupField/tabGroupFieldSchema.d.ts +25 -0
- package/dist/_dts/block-form/src/widgets/TabGroupField/types.d.ts +46 -0
- package/dist/_dts/block-form/src/widgets/TextField/TextField.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/TextField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/TextField/textFieldDefaults.d.ts +6 -0
- package/dist/_dts/block-form/src/widgets/TextField/textFieldSchema.d.ts +7 -0
- package/dist/_dts/block-form/src/widgets/TextInputWidget.d.ts +20 -0
- package/dist/_dts/block-form/src/widgets/TimeField/TimeField.d.ts +23 -0
- package/dist/_dts/block-form/src/widgets/TimeField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/TimeField/timeFieldDefaults.d.ts +8 -0
- package/dist/_dts/block-form/src/widgets/TimeField/timeFieldSchema.d.ts +9 -0
- package/dist/_dts/block-form/src/widgets/ToggleWidget.d.ts +16 -0
- package/dist/_dts/block-form/src/widgets/UrlField/UrlField.d.ts +23 -0
- package/dist/_dts/block-form/src/widgets/UrlField/index.d.ts +3 -0
- package/dist/_dts/block-form/src/widgets/UrlField/urlFieldDefaults.d.ts +8 -0
- package/dist/_dts/block-form/src/widgets/UrlField/urlFieldSchema.d.ts +9 -0
- package/dist/_dts/block-form/src/widgets/constants.d.ts +58 -0
- package/dist/_dts/block-form/src/widgets/groupFieldHelpers.d.ts +61 -0
- package/dist/_dts/block-form/src/widgets/index.d.ts +20 -0
- package/dist/_dts/block-form/src/widgets/selectValueMapping.d.ts +9 -0
- package/dist/_dts/block-form/src/widgets/types/modalConfig.d.ts +18 -0
- package/dist/_dts/block-form/src/widgets/utils/readNumericUiConfig.d.ts +10 -0
- package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
- package/dist/_dts/blocks/src/contracts/non-block-islands.d.ts +4 -0
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +2 -0
- package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/blog-post.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/cart.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/collection.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/columns.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/courses/shared/schemas.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/event-details.d.ts +25 -0
- package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/faq.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +6 -6
- package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/products/shared.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/shop.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
- package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +1 -1
- package/dist/_dts/blocks/src/system/fragments/library/card.d.ts +1 -1
- package/dist/_dts/blocks/src/system/fragments/library/ctaRow.d.ts +1 -1
- package/dist/_dts/blocks/src/system/fragments/library/feedbackCallout.d.ts +1 -1
- package/dist/_dts/blocks/src/system/fragments/library/heroCtaRow.d.ts +1 -1
- package/dist/_dts/blocks/src/system/fragments/library/sectionState.d.ts +1 -1
- package/dist/_dts/blocks/src/system/node/validation-constants.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details/view.d.ts +4 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details.client.d.ts +4 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details.server.d.ts +4 -1
- package/dist/_dts/blocks/src/system/transforms/registry/formatting.d.ts +1 -0
- package/dist/_dts/blocks/src/system/transforms/typed.d.ts +2 -1
- package/dist/_dts/calendar/src/grid.d.ts +60 -0
- package/dist/_dts/calendar/src/group.d.ts +14 -0
- package/dist/_dts/calendar/src/index.d.ts +6 -0
- package/dist/_dts/calendar/src/lane-packing.d.ts +28 -0
- package/dist/_dts/calendar/src/timetable.d.ts +90 -0
- package/dist/_dts/calendar/src/timezone.d.ts +19 -0
- package/dist/_dts/content-editor/src/index.d.ts +1 -4
- package/dist/_dts/core/src/booking-date-time.d.ts +1 -0
- package/dist/_dts/core/src/branded.d.ts +18 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +900 -69
- package/dist/_dts/editor-blocks/src/index.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/widgets/index.d.ts +7 -7
- package/dist/_dts/editor-blocks/src/widgets/link/LinkWidget.d.ts +1 -2
- package/dist/_dts/editor-blocks/src/widgets/link/index.d.ts +1 -0
- package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +7 -3
- package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
- package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +4 -0
- package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +49 -0
- package/dist/_dts/preview-next/src/client/preview/SiteChromeEditableSurface.d.ts +6 -0
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +3 -1
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -0
- package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +18 -0
- package/dist/_dts/sdk/src/cli/commands/pull.d.ts +5 -0
- package/dist/_dts/sdk/src/cli/commands/push/execute/footer.d.ts +33 -0
- package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +2 -0
- package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +18 -0
- package/dist/_dts/sdk/src/cli/content/entryPaths.d.ts +6 -0
- package/dist/_dts/sdk/src/cli/content/writer.d.ts +2 -0
- package/dist/_dts/sdk/src/cli/env.d.ts +2 -1
- package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +3 -0
- package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +77 -0
- package/dist/_dts/sdk/src/cli/merge-remote/entryMergePlan.d.ts +45 -0
- package/dist/_dts/sdk/src/cli/merge-remote/entryMergePush.d.ts +22 -0
- package/dist/_dts/sdk/src/cli/merge-remote/entryMergeReport.d.ts +30 -0
- package/dist/_dts/sdk/src/cli/merge-remote/entryRemote.d.ts +9 -0
- package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +50 -0
- package/dist/_dts/sdk/src/cli/merge-remote/stableJson.d.ts +3 -0
- package/dist/_dts/sdk/src/cli/site-commands/commandKeys.d.ts +13 -0
- package/dist/_dts/sdk/src/cli/site-commands/commandRuntime.d.ts +114 -0
- package/dist/_dts/sdk/src/cli/site-commands/entryCommands.d.ts +63 -0
- package/dist/_dts/sdk/src/cli/site-commands/footerCommands.d.ts +50 -0
- package/dist/_dts/sdk/src/cli/site-commands/formCommands.d.ts +57 -0
- package/dist/_dts/sdk/src/cli/site-commands/index.d.ts +7 -0
- package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +57 -0
- package/dist/_dts/sdk/src/cli/site-commands/pageCommands.d.ts +83 -0
- package/dist/_dts/sdk/src/cli/site-commands/pushExecution.d.ts +83 -0
- package/dist/_dts/sdk/src/cli/sync/executor.d.ts +11 -28
- package/dist/_dts/sdk/src/cli/sync/index.d.ts +1 -1
- package/dist/_dts/sdk/src/config/dashboard-validation.d.ts +0 -48
- package/dist/_dts/sdk/src/config/types.d.ts +1 -1
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -0
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/site-commands/src/adapter.d.ts +23 -0
- package/dist/_dts/site-commands/src/capabilityGaps.d.ts +8 -0
- package/dist/_dts/site-commands/src/commands.d.ts +2341 -0
- package/dist/_dts/site-commands/src/domain.d.ts +104 -0
- package/dist/_dts/site-commands/src/exposure.d.ts +41 -0
- package/dist/_dts/site-commands/src/guards.d.ts +1 -0
- package/dist/_dts/site-commands/src/index.d.ts +10 -0
- package/dist/_dts/site-commands/src/metadata.d.ts +503 -0
- package/dist/_dts/site-commands/src/planner.d.ts +58 -0
- package/dist/_dts/site-commands/src/refContributions.d.ts +10 -0
- package/dist/_dts/site-commands/src/refs.d.ts +87 -0
- package/dist/_dts/site-commands/src/staticExecutionGaps.d.ts +10 -0
- package/dist/_dts/theme-core/src/palette/utils/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/palette/utils/onColor.d.ts +2 -0
- package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +83 -0
- package/dist/_dts/theme-core/src/site-styles/contentTemplateRuntimeCompiler.d.ts +2 -1
- package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +89 -12
- package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +8 -2
- package/dist/_dts/theme-core/src/site-styles/index.d.ts +1 -0
- package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +3 -2
- package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +9 -6
- package/dist/_dts/ui/src/callout.d.ts +1 -1
- package/dist/cli/index.mjs +6446 -1220
- package/dist/cli/init-docs/content/cli-reference.md +18 -0
- package/dist/client/bookings.mjs +25 -25
- package/dist/client/client.mjs +3157 -2858
- package/dist/client/hooks.mjs +2608 -2326
- package/dist/client/rendering/client.mjs +505 -176
- package/dist/client/rendering/islands.mjs +18329 -13012
- package/dist/client/rendering.mjs +1204 -903
- package/dist/preview-next/before-render.mjs +84 -13
- package/dist/preview-next/client/runtime.mjs +3149 -2452
- package/dist/preview-next/middleware.mjs +84 -13
- package/dist/server/components.mjs +936 -631
- package/dist/server/config-validation.mjs +2838 -2556
- package/dist/server/config.mjs +2838 -2556
- package/dist/server/data.mjs +2608 -2326
- package/dist/server/index.mjs +676 -552
- package/dist/server/next.mjs +3043 -2738
- package/dist/server/page-converter.mjs +201 -51
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +936 -631
- package/dist/server/rendering.mjs +936 -631
- package/dist/server/routing.mjs +2701 -2426
- package/dist/server/server.mjs +2626 -2344
- package/dist/server/theme-bridge.mjs +169 -52
- package/package.json +2 -1
- package/dist/_dts/content-editor/src/ai/patch/allowed.d.ts +0 -2
- package/dist/_dts/content-editor/src/ai/patch/diff.d.ts +0 -17
- package/dist/_dts/content-editor/src/ai/patch/schema.d.ts +0 -49
- package/dist/_dts/path-utils/src/index.d.ts +0 -8
- package/dist/_dts/path-utils/src/redirectPaths.d.ts +0 -26
- package/dist/_dts/path-utils/src/safeAppPath.d.ts +0 -26
|
@@ -3,6 +3,7 @@ export type { AccessPolicyContract, AccessPolicyTag, CreateMediaAssetBody, Entit
|
|
|
3
3
|
export type { AnalyticsPreset, AnalyticsReferrer, AnalyticsReportFilters, AnalyticsReportQuery, AnalyticsReportResponse, AnalyticsSeriesPoint, AnalyticsTopPage, AnalyticsTotals, } from "./analytics";
|
|
4
4
|
export type { AIChatMessage, AiBriefTurn, JsonPrimitive, JsonValue, MediaUsageCheckItem, MediaUsageCheckResponse, MediaUsageLocation, } from "./shared-contracts";
|
|
5
5
|
export type * from "./accessAdmin";
|
|
6
|
+
export { STAFF_OPERATIONAL_CAPABILITIES } from "./accessAdmin";
|
|
6
7
|
export type * from "./aiEndpoints";
|
|
7
8
|
export type * from "./apiEndpointTypes";
|
|
8
9
|
export type * from "./bookingAdjustments";
|
|
@@ -42,7 +43,7 @@ export type { SitePageBlock, SitePagePayload } from "./sitePages";
|
|
|
42
43
|
export type { SiteAnalyticsCookieBannerCopyOverrides, SiteAnalyticsSettingsPayload, SiteAnalyticsSettingsResponse, } from "./siteAnalytics";
|
|
43
44
|
export type { SiteLegalJurisdiction, SiteLegalProfilePayload, SensitiveClientRecordsConfirmationKey, SensitiveClientRecordsMode, SensitiveClientRecordsRetentionProfile, SensitiveClientRecordsSettings, SensitiveClientRecordsUpdatePayload, SitePrivacyPolicyCapabilities, SitePrivacyPolicyDocument, SitePrivacySettings, SitePrivacySettingsPayload, SitePrivacySettingsResponse, SiteRuntimePrivacyPolicy, SitePrivacyPolicySection, } from "./privacyPolicy";
|
|
44
45
|
export type { MaintenanceSettingsPayload, MaintenanceSettingsResponse, SiteBusinessAddressPayload, SiteBusinessAddressResponse, SiteDeploymentMode, SiteFooterBlocksEditorBlock, SiteFooterBlocksEditorResponse, SiteGeneralSettingsPayload, SiteGeneralSettingsResponse, SiteLayoutResolvedPayload, SiteLayoutSettingsPayload, SiteLayoutSettingsResponse, UpdateSiteDeploymentModePayload, UpdateSiteDeploymentModeResponse, UpdateSiteFooterBlocksPayload, UpdateSiteFooterBlocksResponse, } from "./siteSettings";
|
|
45
|
-
export type { BillingCheckoutRequest, BillingCheckoutResponse, BillingStatusResponse, BillingSummaryResponse, SiteBillingCheckoutResponse, SiteBillingCostResponse, StripeAutomaticTaxIssue, StripeAutomaticTaxReadiness, StripeAutomaticTaxStatus, StripeConnectDisconnectResponse, StripeConnectRestrictions, StripeConnectStartResponse, StripeConnectStatusResponse, UpdateStripeAutomaticTaxRequest, } from "./billing";
|
|
46
|
+
export type { BillingCheckoutRequest, BillingCheckoutResponse, BillingStatusResponse, BillingSummaryComponent, BillingSummaryComponentKind, BillingSummaryComponentSource, BillingSummaryBasePlanComponent, BillingSummarySiteComponent, BillingSummaryAddOnComponent, BillingSummaryResponse, SiteBillingCheckoutResponse, SiteBillingCostResponse, StripeAutomaticTaxIssue, StripeAutomaticTaxReadiness, StripeAutomaticTaxStatus, StripeConnectDisconnectResponse, StripeConnectRestrictions, StripeConnectStartResponse, StripeConnectStatusResponse, UpdateStripeAutomaticTaxRequest, } from "./billing";
|
|
46
47
|
export type { AiGenerateSiteEntityType, AiGenerateSitePrimaryCta, AiGenerateSiteRequest, AiGenerateSiteResponse, } from "./siteGeneration";
|
|
47
48
|
export { SITE_ROLE_DISPLAY_ORDER, SITE_ROLE_PERMISSION_LEVEL } from "./siteMembers";
|
|
48
49
|
export type { SiteRole } from "./siteMembers";
|
|
@@ -5,6 +5,7 @@ export declare function ensureBillingPlanId(planId: string): BillingPlanId;
|
|
|
5
5
|
export declare function getPlanById(planId: string): PlanDefinition | undefined;
|
|
6
6
|
export declare function ensurePlan(planId: string): PlanDefinition;
|
|
7
7
|
export declare function getPlanEntitlements(planId: string): PlanDefinition['entitlements'];
|
|
8
|
+
export declare function getMacadamiaSiteAllowance(planId: string): PlanDefinition['entitlements']['macadamiaSiteAllowance'];
|
|
8
9
|
/**
|
|
9
10
|
* @deprecated Use database pricing with resolveUserPrice() instead.
|
|
10
11
|
* This function fetches pre-created Stripe Price IDs which is being replaced
|
|
@@ -40,7 +40,7 @@ export declare const BRANDING_TIERS: readonly ["macadamia_visible", "light_custo
|
|
|
40
40
|
export type BrandingTier = (typeof BRANDING_TIERS)[number];
|
|
41
41
|
export declare const TEAM_TIERS: readonly ["owner_only", "multi_practitioner"];
|
|
42
42
|
export type TeamTier = (typeof TEAM_TIERS)[number];
|
|
43
|
-
export declare const SITE_ROLE_ENTITLEMENTS: readonly ["administrator", "editor", "
|
|
43
|
+
export declare const SITE_ROLE_ENTITLEMENTS: readonly ["administrator", "editor", "team_member"];
|
|
44
44
|
export type SiteRoleEntitlement = (typeof SITE_ROLE_ENTITLEMENTS)[number];
|
|
45
45
|
export declare const PLAN_BOOLEAN_FEATURE_KEYS: readonly ["customDomain", "customContentTypes", "analytics", "passes", "memberships", "discountCodes", "advancedPaymentSchemes", "internalNotes", "multipleTeamLogins", "multiplePractitioners"];
|
|
46
46
|
export type PlanBooleanFeatureKey = (typeof PLAN_BOOLEAN_FEATURE_KEYS)[number];
|
|
@@ -55,6 +55,15 @@ export interface PlanEntitlements {
|
|
|
55
55
|
planId: BillingPlanId;
|
|
56
56
|
monthlyPricePence: number | null;
|
|
57
57
|
availableIntervals: readonly BillingInterval[];
|
|
58
|
+
macadamiaSiteAllowance: Readonly<{
|
|
59
|
+
includedLiveSiteCount: number;
|
|
60
|
+
extraSite: Readonly<{
|
|
61
|
+
tag: 'not_supported';
|
|
62
|
+
}> | Readonly<{
|
|
63
|
+
tag: 'priced';
|
|
64
|
+
monthlyPricePence: number;
|
|
65
|
+
}>;
|
|
66
|
+
}>;
|
|
58
67
|
monthlyBookingLimit: number | null;
|
|
59
68
|
durableStorageQuota: StorageQuota;
|
|
60
69
|
stripeBookingCommission: StripeBookingCommission;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FormRenderer - Generic form rendering component
|
|
3
|
+
*
|
|
4
|
+
* Completely manifest-agnostic. Renders any FieldConfig[] with any FormBackend.
|
|
5
|
+
* Provides renderChild recursively for container widgets (GroupField, RepeaterField).
|
|
6
|
+
*/
|
|
7
|
+
import type { ReactNode } from 'react';
|
|
8
|
+
import type { FieldConfig } from './fields/types';
|
|
9
|
+
import type { FormBackend } from './backend/types';
|
|
10
|
+
import type { FieldWidgetComponent } from './fields/props';
|
|
11
|
+
export interface FormRendererProps {
|
|
12
|
+
/** Field configurations to render */
|
|
13
|
+
fields: FieldConfig[];
|
|
14
|
+
/** Form backend (RHF or Store) */
|
|
15
|
+
backend: FormBackend;
|
|
16
|
+
/** Optional className for container */
|
|
17
|
+
className?: string;
|
|
18
|
+
/** Optional wrapper component for each field */
|
|
19
|
+
fieldWrapper?: (children: ReactNode, field: FieldConfig) => ReactNode;
|
|
20
|
+
/** Optional widget overrides - allows replacing widgets at runtime */
|
|
21
|
+
widgetOverrides?: Partial<Record<string, FieldWidgetComponent>>;
|
|
22
|
+
/** Optional block kind for SDK field options lookup (e.g., 'block.embed', 'custom.hero') */
|
|
23
|
+
blockKind?: string;
|
|
24
|
+
/** Show inline settings trigger for non-content intents (default: true) */
|
|
25
|
+
showSettingsTrigger?: boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Optional list of nested field paths to surface in the main form body as shortcuts.
|
|
28
|
+
* These paths should refer to existing data within the form values (no duplication).
|
|
29
|
+
*/
|
|
30
|
+
promotedFields?: string[];
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* FormRenderer - Renders a list of fields using the widget registry
|
|
34
|
+
*
|
|
35
|
+
* Works with any field source (manifests, custom configs, etc.)
|
|
36
|
+
* Works with any backend (RHF, Zustand store, etc.)
|
|
37
|
+
*/
|
|
38
|
+
export declare function FormRenderer({ fields, backend, className, fieldWrapper, widgetOverrides, blockKind, showSettingsTrigger, promotedFields, }: FormRendererProps): ReactNode;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated Import from './types', './rhf-backend', or './store-backend' instead.
|
|
3
|
+
* This file is kept for backward compatibility only.
|
|
4
|
+
*/
|
|
5
|
+
export type { FormBackend, SetValueOptions, FieldError, FieldState, FormState, StoreBackendOptions, } from './types';
|
|
6
|
+
export { createRHFBackend } from './rhf-backend';
|
|
7
|
+
export { createStoreBackend } from './store-backend';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FormBackend } from '../adapter';
|
|
2
|
+
/**
|
|
3
|
+
* Item with stable React key for repeater rendering
|
|
4
|
+
*/
|
|
5
|
+
export type RepeaterItem = {
|
|
6
|
+
/** Stable ID for React keys and drag-drop */
|
|
7
|
+
id: string;
|
|
8
|
+
/** Item data */
|
|
9
|
+
data: unknown;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Array operations interface for repeater widgets
|
|
13
|
+
*/
|
|
14
|
+
export type RepeaterBackendOps = {
|
|
15
|
+
/** Array items with stable keys */
|
|
16
|
+
items: RepeaterItem[];
|
|
17
|
+
/** Append item to array */
|
|
18
|
+
append: (value: unknown) => void;
|
|
19
|
+
/** Remove item at index */
|
|
20
|
+
remove: (index: number) => void;
|
|
21
|
+
/** Move item from one index to another */
|
|
22
|
+
move: (from: number, to: number) => void;
|
|
23
|
+
/** Insert item at index */
|
|
24
|
+
insert: (index: number, value: unknown) => void;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Hook to get repeater operations from a backend.
|
|
28
|
+
* Provides stable keys for React rendering and drag-drop.
|
|
29
|
+
*
|
|
30
|
+
* Uses backend's unified interface throughout - no branching on backend.type.
|
|
31
|
+
* For RHF backends, uses react-hook-form's optimized useFieldArray hook.
|
|
32
|
+
* For other backends, uses useSyncExternalStore with the backend's subscribe/getValue.
|
|
33
|
+
*/
|
|
34
|
+
export declare function useRepeaterBackend(backend: FormBackend, path: string): RepeaterBackendOps;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import type { FormBackend, SetValueOptions } from './types';
|
|
2
|
+
/**
|
|
3
|
+
* useArrayField - Hook for array field operations (append, remove, move, insert)
|
|
4
|
+
*
|
|
5
|
+
* @param path - Field path
|
|
6
|
+
* @param backend - Form backend
|
|
7
|
+
* @returns Object with array manipulation functions
|
|
8
|
+
*/
|
|
9
|
+
export declare function useArrayField(path: string, backend: FormBackend): {
|
|
10
|
+
append: (value: unknown) => void;
|
|
11
|
+
remove: (index: number) => void;
|
|
12
|
+
move: (from: number, to: number) => void;
|
|
13
|
+
insert: (index: number, value: unknown) => void;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* useField - Combined hook for field value, state, and setter
|
|
17
|
+
*
|
|
18
|
+
* This is the recommended hook for form widgets. It provides everything needed
|
|
19
|
+
* for a field in one call, using the unified backend.subscribe API.
|
|
20
|
+
*
|
|
21
|
+
* No branching on backend.type - the backend hides implementation details.
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```tsx
|
|
25
|
+
* function TextField({ path, backend, field }: FormFieldProps<string>) {
|
|
26
|
+
* const { value, error, isDirty, setValue } = useField<string>(path, backend)
|
|
27
|
+
*
|
|
28
|
+
* return (
|
|
29
|
+
* <input
|
|
30
|
+
* value={value ?? ''}
|
|
31
|
+
* onChange={(e) => setValue(e.target.value)}
|
|
32
|
+
* />
|
|
33
|
+
* )
|
|
34
|
+
* }
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export declare function useField<T = unknown>(path: string, backend: FormBackend): {
|
|
38
|
+
value: T | undefined;
|
|
39
|
+
error: import("./types").FieldError | undefined;
|
|
40
|
+
isDirty: boolean | undefined;
|
|
41
|
+
isTouched: boolean | undefined;
|
|
42
|
+
invalid: boolean | undefined;
|
|
43
|
+
setValue: (newValue: T, options?: SetValueOptions) => void;
|
|
44
|
+
};
|
|
45
|
+
/**
|
|
46
|
+
* useFieldError - Hook to get only the error state of a field
|
|
47
|
+
*
|
|
48
|
+
* Use this for container widgets (GroupField, RepeaterField) that need to display
|
|
49
|
+
* group-level errors but don't interact with the field value.
|
|
50
|
+
*
|
|
51
|
+
* More efficient than useField when you only need error state.
|
|
52
|
+
*
|
|
53
|
+
* @example
|
|
54
|
+
* ```tsx
|
|
55
|
+
* function GroupField({ path, backend, field, renderChild }: FormFieldProps) {
|
|
56
|
+
* const error = useFieldError(path, backend)
|
|
57
|
+
*
|
|
58
|
+
* return (
|
|
59
|
+
* <FieldFrame error={error?.message}>
|
|
60
|
+
* {field.fields.map(child => renderChild(child, `${path}.${child.id}`))}
|
|
61
|
+
* </FieldFrame>
|
|
62
|
+
* )
|
|
63
|
+
* }
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
export declare function useFieldError(path: string, backend: FormBackend): import("./types").FieldError | undefined;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Backend abstraction layer for form operations
|
|
3
|
+
*
|
|
4
|
+
* This module provides a unified API that works with either:
|
|
5
|
+
* - React Hook Form (RHF) for traditional form handling
|
|
6
|
+
* - Zustand Store for inline editing with autosave
|
|
7
|
+
*/
|
|
8
|
+
export * from './types';
|
|
9
|
+
export * from './hooks';
|
|
10
|
+
export * from './adapter';
|
|
11
|
+
export { useRepeaterBackend } from './hooks/useRepeaterBackend';
|
|
12
|
+
export type { RepeaterBackendOps, RepeaterItem } from './hooks/useRepeaterBackend';
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Hook Form (RHF) backend implementation
|
|
3
|
+
*
|
|
4
|
+
* Wraps a react-hook-form instance to provide the unified FormBackend interface.
|
|
5
|
+
* Validation is handled by the resolver passed to useForm (e.g., zodResolver).
|
|
6
|
+
*
|
|
7
|
+
* ## Why `as never` casts are used
|
|
8
|
+
*
|
|
9
|
+
* React Hook Form is heavily typed around its generic parameter, so methods like
|
|
10
|
+
* `setValue<TFieldName>(path: TFieldName, value: TFieldValues[TFieldName])` require
|
|
11
|
+
* compile-time knowledge of the exact form schema.
|
|
12
|
+
*
|
|
13
|
+
* Our FormBackend interface is library-agnostic and uses dynamic string paths
|
|
14
|
+
* (e.g., `"author.name"`, `"items.0.title"`) that can't be statically typed.
|
|
15
|
+
* TypeScript's `keyof T` doesn't work with nested dot-notation paths.
|
|
16
|
+
*
|
|
17
|
+
* The `as never` cast is the safest way to bypass this:
|
|
18
|
+
* - `never` is the bottom type, so casting TO `never` is always allowed
|
|
19
|
+
* - It makes the intent explicit: "we're deliberately bypassing type checking here"
|
|
20
|
+
* - It's more honest than using `any`, which could mask real errors
|
|
21
|
+
*
|
|
22
|
+
* Type safety is maintained at the widget layer, where components know their
|
|
23
|
+
* specific field types and cast immediately after reading values.
|
|
24
|
+
*/
|
|
25
|
+
import type { FieldValues, UseFormReturn } from 'react-hook-form';
|
|
26
|
+
import type { FormBackend } from './types';
|
|
27
|
+
/**
|
|
28
|
+
* Create RHF backend from react-hook-form instance
|
|
29
|
+
*
|
|
30
|
+
* Note: RHF handles validation through its resolver (passed to useForm).
|
|
31
|
+
* The schema is integrated at form creation time, so we don't need it here.
|
|
32
|
+
*/
|
|
33
|
+
export declare function createRHFBackend<TFieldValues extends FieldValues>(form: UseFormReturn<TFieldValues>): FormBackend;
|
|
34
|
+
export declare function createRHFBackend(form: UseFormReturn<FieldValues>): FormBackend;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zustand Store backend implementation
|
|
3
|
+
*
|
|
4
|
+
* Integrates with EditorUiStore for autosave-enabled form management.
|
|
5
|
+
* Supports three scopes: blocks (per-block data), metadata (page/entry metadata), and content (content entry data).
|
|
6
|
+
*/
|
|
7
|
+
import type { EditorBlockId, EditorSyncState } from '@riverbankcms/core';
|
|
8
|
+
import type { FormBackend, StoreBackendOptions } from './types';
|
|
9
|
+
type StoreSnapshot = {
|
|
10
|
+
current: Record<string, unknown> | null;
|
|
11
|
+
baseline: Record<string, unknown> | null;
|
|
12
|
+
syncState: EditorSyncState;
|
|
13
|
+
version?: number;
|
|
14
|
+
};
|
|
15
|
+
interface BlocksSlice {
|
|
16
|
+
getAtPath: (blockId: EditorBlockId, path: string) => unknown;
|
|
17
|
+
setAtPath: (blockId: EditorBlockId, path: string, value: unknown) => void;
|
|
18
|
+
getCurrentValues: (blockId: EditorBlockId) => Record<string, unknown> | null;
|
|
19
|
+
getBlockSnapshot?: (blockId: EditorBlockId) => StoreSnapshot | null;
|
|
20
|
+
clearError?: (blockId: EditorBlockId) => void;
|
|
21
|
+
updateBlockBaseline?: (blockId: EditorBlockId, data: Record<string, unknown> | null) => void;
|
|
22
|
+
}
|
|
23
|
+
interface RootSlice {
|
|
24
|
+
getAtPath: (path: string) => unknown;
|
|
25
|
+
setAtPath: (path: string, value: unknown) => void;
|
|
26
|
+
getCurrentValues: () => Record<string, unknown> | null;
|
|
27
|
+
getSnapshot?: () => StoreSnapshot | null;
|
|
28
|
+
clearError?: () => void;
|
|
29
|
+
hydrate?: (baseline: Record<string, unknown> | null, current: Record<string, unknown> | null) => void;
|
|
30
|
+
}
|
|
31
|
+
interface ArrayKeysManager {
|
|
32
|
+
get: (scope: string, path: string) => string[] | undefined;
|
|
33
|
+
set: (scope: string, path: string, keys: string[]) => void;
|
|
34
|
+
append: (scope: string, path: string, key: string) => void;
|
|
35
|
+
remove: (scope: string, path: string, index: number) => void;
|
|
36
|
+
move: (scope: string, path: string, from: number, to: number) => void;
|
|
37
|
+
insert: (scope: string, path: string, index: number, key: string) => void;
|
|
38
|
+
}
|
|
39
|
+
interface EditorStoreState {
|
|
40
|
+
drafts?: BlocksSlice;
|
|
41
|
+
metadata?: RootSlice;
|
|
42
|
+
content?: RootSlice;
|
|
43
|
+
blockValidation?: {
|
|
44
|
+
markPathEdited: (blockId: EditorBlockId, path: string) => void;
|
|
45
|
+
isPathEdited: (blockId: EditorBlockId, path: string) => boolean;
|
|
46
|
+
showAllValidation: (blockId: EditorBlockId) => boolean;
|
|
47
|
+
};
|
|
48
|
+
arrayKeys: ArrayKeysManager;
|
|
49
|
+
requestFocus?: (payload: {
|
|
50
|
+
blockId: EditorBlockId;
|
|
51
|
+
fieldPath?: string | null;
|
|
52
|
+
}) => void;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create Store backend from Zustand store
|
|
56
|
+
*
|
|
57
|
+
* Integrates with editorUiStore for autosave and validation
|
|
58
|
+
*/
|
|
59
|
+
export declare function createStoreBackend(options: StoreBackendOptions<EditorStoreState>): FormBackend;
|
|
60
|
+
export {};
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FormBackend - Unified backend interface for form operations
|
|
3
|
+
*
|
|
4
|
+
* This module provides types for a unified interface that works with either:
|
|
5
|
+
* - React Hook Form (RHF) for settings forms
|
|
6
|
+
* - Zustand Store for content editing with autosave
|
|
7
|
+
*
|
|
8
|
+
* Validation Flow:
|
|
9
|
+
* - RHF backends: Validation handled by resolver passed to useForm (zodResolver, etc.)
|
|
10
|
+
* - Store backends: Validation handled by validateFn option
|
|
11
|
+
* Example: createStoreBackend({ validateFn: (values) => schema.safeParse(values).error?.issues ?? [] })
|
|
12
|
+
*/
|
|
13
|
+
import type { ZodIssue } from 'zod';
|
|
14
|
+
import type { FieldValues, UseFormReturn } from 'react-hook-form';
|
|
15
|
+
import type { EditorBlockId } from '@riverbankcms/core';
|
|
16
|
+
/**
|
|
17
|
+
* Zustand-like store interface for store backend.
|
|
18
|
+
* We use a minimal contract here to avoid circular dependencies with content-editor.
|
|
19
|
+
* The actual EditorUiStoreInstance has more methods, but we only require
|
|
20
|
+
* the core zustand contract at the type level.
|
|
21
|
+
*/
|
|
22
|
+
export interface ZustandLikeStore<TState = unknown> {
|
|
23
|
+
getState: () => TState;
|
|
24
|
+
subscribe: (callback: () => void) => () => void;
|
|
25
|
+
}
|
|
26
|
+
export type SetValueOptions = {
|
|
27
|
+
shouldDirty?: boolean;
|
|
28
|
+
shouldTouch?: boolean;
|
|
29
|
+
shouldValidate?: boolean;
|
|
30
|
+
};
|
|
31
|
+
export type FieldError = {
|
|
32
|
+
message: string;
|
|
33
|
+
type?: string;
|
|
34
|
+
};
|
|
35
|
+
export type FieldState = {
|
|
36
|
+
error?: FieldError;
|
|
37
|
+
isDirty?: boolean;
|
|
38
|
+
isTouched?: boolean;
|
|
39
|
+
invalid?: boolean;
|
|
40
|
+
};
|
|
41
|
+
export type FormState = {
|
|
42
|
+
isDirty: boolean;
|
|
43
|
+
isValid: boolean;
|
|
44
|
+
isSubmitting?: boolean;
|
|
45
|
+
errors: Record<string, FieldError>;
|
|
46
|
+
};
|
|
47
|
+
/**
|
|
48
|
+
* Unified form backend interface.
|
|
49
|
+
* Factory functions (createRHFBackend, createStoreBackend) return this interface.
|
|
50
|
+
*
|
|
51
|
+
* Internal properties (form, store, scope, blockId) are available for hooks that need
|
|
52
|
+
* direct access to underlying implementations (e.g., for reactivity).
|
|
53
|
+
*/
|
|
54
|
+
export interface FormBackend {
|
|
55
|
+
/** Backend type identifier */
|
|
56
|
+
type: 'rhf' | 'store';
|
|
57
|
+
/** RHF form instance (RHF backend only) */
|
|
58
|
+
form?: UseFormReturn<FieldValues>;
|
|
59
|
+
/** Zustand store instance (Store backend only) */
|
|
60
|
+
store?: ZustandLikeStore;
|
|
61
|
+
/** Store scope (Store backend only) */
|
|
62
|
+
scope?: 'blocks' | 'metadata' | 'content';
|
|
63
|
+
/** Block ID for blocks scope (Store backend only) */
|
|
64
|
+
blockId?: EditorBlockId;
|
|
65
|
+
/** Get value at field path */
|
|
66
|
+
getValue: (path: string) => unknown;
|
|
67
|
+
/** Set value at field path with options */
|
|
68
|
+
setValue: (path: string, value: unknown, options?: SetValueOptions) => void;
|
|
69
|
+
/** Get all form values */
|
|
70
|
+
getValues: () => Record<string, unknown>;
|
|
71
|
+
/** Get field-level state (error, dirty, touched) */
|
|
72
|
+
getFieldState: (path: string) => FieldState;
|
|
73
|
+
/** Set custom error on field (for async/server validation) */
|
|
74
|
+
setError: (path: string, error: FieldError) => void;
|
|
75
|
+
/** Clear errors (specific field or all) */
|
|
76
|
+
clearErrors: (path?: string) => void;
|
|
77
|
+
/** Get all form errors */
|
|
78
|
+
getErrors: () => Record<string, FieldError>;
|
|
79
|
+
/** Manually mark field as dirty */
|
|
80
|
+
setDirty: (path: string, isDirty: boolean) => void;
|
|
81
|
+
/** Manually mark field as touched */
|
|
82
|
+
setTouched: (path: string, isTouched: boolean) => void;
|
|
83
|
+
/** Reset field to default value */
|
|
84
|
+
resetField: (path: string) => void;
|
|
85
|
+
/** Request focus on field */
|
|
86
|
+
setFocus: (path: string) => void;
|
|
87
|
+
/** Array field operations for repeater widgets */
|
|
88
|
+
arrayField: {
|
|
89
|
+
/** Append item to array */
|
|
90
|
+
append: (path: string, value: unknown) => void;
|
|
91
|
+
/** Remove item at index */
|
|
92
|
+
remove: (path: string, index: number) => void;
|
|
93
|
+
/** Move item from one index to another */
|
|
94
|
+
move: (path: string, from: number, to: number) => void;
|
|
95
|
+
/** Insert item at index */
|
|
96
|
+
insert: (path: string, index: number, value: unknown) => void;
|
|
97
|
+
};
|
|
98
|
+
/** Get form-level state */
|
|
99
|
+
formState: FormState;
|
|
100
|
+
/** Reset entire form (optionally with new values) */
|
|
101
|
+
reset: (values?: unknown) => void;
|
|
102
|
+
/** Trigger validation */
|
|
103
|
+
validate: () => Promise<boolean>;
|
|
104
|
+
/**
|
|
105
|
+
* Subscribe to form changes. Callback fires whenever any value changes.
|
|
106
|
+
* Returns unsubscribe function.
|
|
107
|
+
*
|
|
108
|
+
* This is the unified subscription API - consumers should never branch on backend.type.
|
|
109
|
+
*/
|
|
110
|
+
subscribe: (callback: () => void) => () => void;
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Options for creating a store backend
|
|
114
|
+
*/
|
|
115
|
+
export type StoreBackendOptions<TState = unknown> = {
|
|
116
|
+
scope: 'blocks' | 'metadata' | 'content';
|
|
117
|
+
store: ZustandLikeStore<TState>;
|
|
118
|
+
blockId?: EditorBlockId;
|
|
119
|
+
validateFn?: (values: Record<string, unknown>) => ZodIssue[];
|
|
120
|
+
};
|
|
121
|
+
/**
|
|
122
|
+
* Type guards for discriminating backend types
|
|
123
|
+
*/
|
|
124
|
+
export declare function isRhfBackend(backend: FormBackend): backend is FormBackend & {
|
|
125
|
+
type: 'rhf';
|
|
126
|
+
form: UseFormReturn<FieldValues>;
|
|
127
|
+
};
|
|
128
|
+
export declare function isStoreBackend(backend: FormBackend): backend is FormBackend & {
|
|
129
|
+
type: 'store';
|
|
130
|
+
store: ZustandLikeStore;
|
|
131
|
+
scope: 'blocks' | 'metadata' | 'content';
|
|
132
|
+
blockId?: EditorBlockId;
|
|
133
|
+
};
|
|
134
|
+
export type { FieldDefinition } from '@riverbankcms/blocks';
|
|
135
|
+
export { createRHFBackend } from './rhf-backend';
|
|
136
|
+
export { createStoreBackend } from './store-backend';
|
|
137
|
+
export { useBackendWatch } from './useBackendWatch';
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useBackendWatch - Hook for watching field values reactively
|
|
3
|
+
*
|
|
4
|
+
* Works with all backends through the unified interface.
|
|
5
|
+
* For RHF backends, uses react-hook-form's optimized useWatch hook.
|
|
6
|
+
* For other backends, uses useSyncExternalStore with backend.subscribe/getValue.
|
|
7
|
+
*/
|
|
8
|
+
import type { FormBackend } from './adapter';
|
|
9
|
+
/**
|
|
10
|
+
* Watch a field path and return its current value.
|
|
11
|
+
* The value updates reactively when the field changes.
|
|
12
|
+
*
|
|
13
|
+
* Uses backend's unified interface - no branching on backend.type.
|
|
14
|
+
* Detects RHF backend by presence of backend.form property.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* const titleValue = useBackendWatch(backend, 'title')
|
|
19
|
+
* const statusValue = useBackendWatch(backend, 'status')
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export declare function useBackendWatch(backend: FormBackend, path: string): unknown;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function getErrorMessage(error: unknown): string | undefined;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { type BlockManifest } from '@riverbankcms/blocks';
|
|
2
|
+
import type { EditorSyncState } from '@riverbankcms/core';
|
|
3
|
+
import type { z } from 'zod';
|
|
4
|
+
type ManifestValidationIssue = z.core.$ZodIssue;
|
|
5
|
+
export type BlockDraftValidationIssue = Readonly<{
|
|
6
|
+
code: ManifestValidationIssue['code'];
|
|
7
|
+
path: (string | number)[];
|
|
8
|
+
fieldPath: string;
|
|
9
|
+
message: string;
|
|
10
|
+
}>;
|
|
11
|
+
export type BlockManifestValidationMode = 'draft' | 'strict';
|
|
12
|
+
export type BlockDraftSaveability = Readonly<{
|
|
13
|
+
kind: 'pristine';
|
|
14
|
+
issues: readonly BlockDraftValidationIssue[];
|
|
15
|
+
}> | Readonly<{
|
|
16
|
+
kind: 'incomplete';
|
|
17
|
+
issues: readonly BlockDraftValidationIssue[];
|
|
18
|
+
}> | Readonly<{
|
|
19
|
+
kind: 'saveable';
|
|
20
|
+
issues: readonly [];
|
|
21
|
+
}> | Readonly<{
|
|
22
|
+
kind: 'save_failed';
|
|
23
|
+
issues: readonly BlockDraftValidationIssue[];
|
|
24
|
+
error: string;
|
|
25
|
+
}>;
|
|
26
|
+
export declare const unfinishedBlockCopy: {
|
|
27
|
+
readonly title: "Fix this block to save it";
|
|
28
|
+
readonly description: "Some fields need a quick check. Your changes are safe here for now.";
|
|
29
|
+
};
|
|
30
|
+
export declare const recoveryConflictCopy: {
|
|
31
|
+
readonly reviewActionLabel: "Review affected blocks";
|
|
32
|
+
readonly discardActionLabel: "Discard browser recovery";
|
|
33
|
+
readonly blockNoticeTitle: "We couldn’t restore unfinished edits here automatically";
|
|
34
|
+
readonly blockNoticeDescription: "The saved version changed before we could put them back.";
|
|
35
|
+
readonly pageNoticeDescription: "The saved page changed, so we couldn’t restore them automatically.";
|
|
36
|
+
};
|
|
37
|
+
export declare const unfinishedBlocksSummaryCopy: {
|
|
38
|
+
readonly singular: "1 block still needs attention";
|
|
39
|
+
readonly plural: (count: number) => string;
|
|
40
|
+
};
|
|
41
|
+
export declare const publishBlockedCopy: {
|
|
42
|
+
readonly singleInvalidBlock: (blockLabel: string) => string;
|
|
43
|
+
readonly multipleInvalidBlocks: (count: number) => string;
|
|
44
|
+
};
|
|
45
|
+
export declare function formatRecoveryConflictTitle(count: number): string;
|
|
46
|
+
export declare function formatRecoveryConflictSummary(count: number): string | null;
|
|
47
|
+
export declare function formatUnfinishedBlocksSummary(count: number): string | null;
|
|
48
|
+
export declare function formatPublishBlockedMessage(input: Readonly<{
|
|
49
|
+
type: 'single-invalid-block';
|
|
50
|
+
blockLabel: string;
|
|
51
|
+
} | {
|
|
52
|
+
type: 'multiple-invalid-blocks';
|
|
53
|
+
count: number;
|
|
54
|
+
}>): string;
|
|
55
|
+
export declare function deriveBlockDraftSaveability(input: {
|
|
56
|
+
syncState: EditorSyncState;
|
|
57
|
+
issues: readonly BlockDraftValidationIssue[];
|
|
58
|
+
hasMeaningfulEdit: boolean;
|
|
59
|
+
showAllValidation: boolean;
|
|
60
|
+
}): BlockDraftSaveability;
|
|
61
|
+
export declare function shouldShowBlockFieldValidation(input: {
|
|
62
|
+
fieldPath: string;
|
|
63
|
+
touchedPaths: ReadonlySet<string>;
|
|
64
|
+
showAllValidation: boolean;
|
|
65
|
+
}): boolean;
|
|
66
|
+
export declare function validateBlockManifestValues(manifest: BlockManifest, values: Record<string, unknown>): BlockDraftValidationIssue[];
|
|
67
|
+
export declare function validateBlockManifestIssues(manifest: BlockManifest, values: Record<string, unknown>, mode: BlockManifestValidationMode): ManifestValidationIssue[];
|
|
68
|
+
export declare function validateBlockManifest(manifest: BlockManifest, values: Record<string, unknown>, mode: BlockManifestValidationMode): BlockDraftValidationIssue[];
|
|
69
|
+
export declare function normalizeManifestIssueMessage(issue: ManifestValidationIssue): string;
|
|
70
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from '../blockDraftSaveability';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
export { FormRenderer } from '../FormRenderer';
|
|
2
|
+
export type { FormRendererProps } from '../FormRenderer';
|
|
3
|
+
export { ManifestForm } from '../manifest/ManifestForm';
|
|
4
|
+
export type { ManifestFormProps } from '../manifest/ManifestForm';
|
|
5
|
+
export type { FieldWidgetComponent, FieldWidgetProps } from '../fields/props';
|
|
6
|
+
export { useField, useArrayField } from '../backend/hooks';
|
|
7
|
+
export { createRHFBackend, createStoreBackend, useBackendWatch } from '../backend/types';
|
|
8
|
+
export type { FormBackend, FieldError, FieldState, SetValueOptions } from '../backend/types';
|
|
9
|
+
export type { ManifestAdapterOptions, ManifestAdapterResult, ManifestFormSource, ManifestSchemaOptions, ManifestValidationResult, } from '../manifest/manifestFormAdapter';
|
|
10
|
+
export { createManifestValidation } from '../manifest/manifestFormAdapter';
|
|
11
|
+
export { formatPublishBlockedMessage, formatRecoveryConflictSummary, formatRecoveryConflictTitle, deriveBlockDraftSaveability, formatUnfinishedBlocksSummary, normalizeManifestIssueMessage, recoveryConflictCopy, shouldShowBlockFieldValidation, unfinishedBlockCopy, validateBlockManifest, validateBlockManifestIssues, validateBlockManifestValues, } from './blockDraftSaveability';
|
|
12
|
+
export type { BlockDraftSaveability, BlockDraftValidationIssue, BlockManifestValidationMode, } from './blockDraftSaveability';
|
|
13
|
+
export type { BaseFieldConfig, FieldConfig, TextFieldConfig, NumberFieldConfig, RichTextFieldConfig, MediaFieldConfig, BooleanFieldConfig, DateFieldConfig, TimeFieldConfig, DateTimeFieldConfig, SlugFieldConfig, UrlFieldConfig, LinkFieldConfig, SelectFieldConfig, ReferenceFieldConfig, GroupFieldConfig, RepeaterFieldConfig, ButtonFieldConfig, ContentTypeSelectFieldConfig, EntryPickerFieldConfig, } from '../fields/types';
|
|
14
|
+
export { createManifestFormAdapter } from '../manifest/manifestFormAdapter';
|
|
15
|
+
export { PaletteProvider, usePalette } from '../palette/PaletteContext';
|
|
16
|
+
export { SdkConfigProvider, useSdkConfig, useBlockFieldOptions } from '../sdk-config';
|
|
17
|
+
export type { SdkConfig, SdkConfigProviderProps, SdkThemePalette, SdkSectionBackground, SdkSectionOptions, SdkSiteStyleConfig, SdkFieldSelectOption, SdkBlockFieldConfig, SdkBlockFieldOptionsMap, SdkBlockFieldExtensionsMap, } from '../sdk-config';
|
|
18
|
+
export { BlockContextProvider, useBlockContext } from '../context';
|
|
19
|
+
export type { BlockContextValue, BlockContextProviderProps } from '../context';
|
|
20
|
+
export { DisplayLabelResolverProvider, useDisplayLabelResolvers } from '../context';
|
|
21
|
+
export type { DisplayLabelResolver, DisplayLabelResolverMap, ResolverCallContext } from '../context';
|
|
22
|
+
export { FieldPreviewResolverProvider, useFieldPreviewResolvers } from '../context';
|
|
23
|
+
export type { FieldPreviewResolver, FieldPreviewResolverMap, FieldPreviewResolverCallContext } from '../context';
|
|
24
|
+
export { ImageResolveContextProvider, useImageResolveContextOptional } from '../context';
|
|
25
|
+
export { mergeManifestWithSdkOptions } from '../manifest/mergeManifestWithSdkOptions';
|
|
26
|
+
export { FieldFrame, FieldFrameMessage } from '../widgets/FieldFrame';
|
|
27
|
+
export type { FieldFrameProps, FieldFrameRenderProps, FieldFrameMessageProps } from '../widgets/FieldFrame';
|
|
28
|
+
export { SelectField } from '../widgets/SelectField';
|
|
29
|
+
export { BackgroundColorField } from '../widgets/BackgroundColorWidget';
|
|
30
|
+
export { BackgroundGradientField } from '../widgets/BackgroundGradientWidget';
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* Block context value
|
|
4
|
+
*
|
|
5
|
+
* Provides information about the current block being edited.
|
|
6
|
+
* Used by widgets like SdkSelectField to look up SDK-provided field options.
|
|
7
|
+
*/
|
|
8
|
+
export interface BlockContextValue {
|
|
9
|
+
/** The block kind (e.g., 'block.embed', 'custom.hero') */
|
|
10
|
+
blockKind: string;
|
|
11
|
+
}
|
|
12
|
+
export interface BlockContextProviderProps {
|
|
13
|
+
blockKind: string;
|
|
14
|
+
children: React.ReactNode;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* BlockContextProvider
|
|
18
|
+
*
|
|
19
|
+
* Provides block information to child widgets.
|
|
20
|
+
* Typically used by FormRenderer when editing a block.
|
|
21
|
+
*/
|
|
22
|
+
export declare function BlockContextProvider({ blockKind, children }: BlockContextProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
/**
|
|
24
|
+
* useBlockContext
|
|
25
|
+
*
|
|
26
|
+
* Hook to access the current block context.
|
|
27
|
+
* Returns null when not within a BlockContextProvider.
|
|
28
|
+
*/
|
|
29
|
+
export declare function useBlockContext(): BlockContextValue | null;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { FieldConfig } from '../fields/types';
|
|
3
|
+
/**
|
|
4
|
+
* Context passed to a display label resolver, providing access to sibling field values.
|
|
5
|
+
*/
|
|
6
|
+
export type ResolverCallContext = {
|
|
7
|
+
getSiblingValue: (fieldId: string) => unknown;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* A function that resolves a stored field value to a human-readable display label.
|
|
11
|
+
*
|
|
12
|
+
* Returns null if the value can't be resolved (caller falls back to raw value).
|
|
13
|
+
*/
|
|
14
|
+
export type DisplayLabelResolver = (value: unknown, fieldConfig: FieldConfig, context: ResolverCallContext) => Promise<string | null>;
|
|
15
|
+
/**
|
|
16
|
+
* Map of field type to display label resolver.
|
|
17
|
+
* Only field types that need async resolution register here.
|
|
18
|
+
*/
|
|
19
|
+
export type DisplayLabelResolverMap = Partial<Record<FieldConfig['type'], DisplayLabelResolver>>;
|
|
20
|
+
/**
|
|
21
|
+
* Provides display label resolvers to descendant components.
|
|
22
|
+
* Repeater items use these resolvers to show human-readable labels
|
|
23
|
+
* instead of raw stored values (e.g. entry titles instead of slugs).
|
|
24
|
+
*/
|
|
25
|
+
export declare function DisplayLabelResolverProvider({ resolvers, children, }: {
|
|
26
|
+
resolvers: DisplayLabelResolverMap;
|
|
27
|
+
children: React.ReactNode;
|
|
28
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
29
|
+
/**
|
|
30
|
+
* Access the display label resolver map.
|
|
31
|
+
* Returns an empty map when no provider is present (resolvers are optional).
|
|
32
|
+
*/
|
|
33
|
+
export declare function useDisplayLabelResolvers(): DisplayLabelResolverMap;
|