@riverbankcms/sdk 0.136.0 → 0.138.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/CHANGELOG.md +109 -0
- package/README.md +7 -4
- package/dist/{PreviewEditorSidebar-BU5ZlhQR.mjs → PreviewEditorSidebar-BVPur_CU.mjs} +12 -18
- package/dist/{PreviewEditorUI-9XkHL-bC.mjs → PreviewEditorUI-DLhWX8oh.mjs} +3 -3
- package/dist/{PreviewQueryProvider-wbEpXryy.mjs → PreviewQueryProvider-BguJY1SW.mjs} +1 -1
- package/dist/{SdkPreviewModeRuntime-CnWmj-2B.mjs → SdkPreviewModeRuntime-Tda6qw4z.mjs} +1375 -495
- package/dist/{SiteChromeCustomizeContext-B6d5zkog.mjs → SiteChromeCustomizeContext-BHFgMjde.mjs} +35665 -33602
- package/dist/_dts/ai/src/contracts/proposals.d.ts +7226 -3057
- package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +1223 -811
- package/dist/_dts/ai/src/designer/themePatch.d.ts +5 -10
- package/dist/_dts/api/src/accessAdmin.d.ts +16 -18
- package/dist/_dts/api/src/accountApi.d.ts +49 -2
- package/dist/_dts/api/src/appointmentServiceContracts.d.ts +83 -0
- package/dist/_dts/api/src/appointmentServiceLocation.d.ts +12 -0
- package/dist/_dts/api/src/appointmentServiceVisibility.d.ts +14 -0
- package/dist/_dts/api/src/appointmentSetup.d.ts +8 -0
- package/dist/_dts/api/src/bookingConfig.d.ts +35 -87
- package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +1 -1
- package/dist/_dts/api/src/bookingOperations.d.ts +2 -69
- package/dist/_dts/api/src/bookingRecords.d.ts +2 -2
- package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +2 -2
- package/dist/_dts/api/src/bookingServicePricing.d.ts +47 -0
- package/dist/_dts/api/src/bookings.d.ts +2 -2
- package/dist/_dts/api/src/cache-tags.d.ts +7 -2
- package/dist/_dts/api/src/common/index.d.ts +1 -0
- package/dist/_dts/api/src/common/zodFieldErrors.d.ts +34 -0
- package/dist/_dts/api/src/communications.d.ts +14 -8
- package/dist/_dts/api/src/contentRuntime.d.ts +3 -6
- package/dist/_dts/api/src/domainConnection.d.ts +41 -0
- package/dist/_dts/api/src/endpoints.d.ts +1636 -1637
- package/dist/_dts/api/src/eventAttendanceLabels.d.ts +2 -2
- package/dist/_dts/api/src/eventManagementContracts.d.ts +10 -14
- package/dist/_dts/api/src/index.d.ts +11 -9
- package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
- package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
- package/dist/_dts/api/src/media.d.ts +19 -2
- package/dist/_dts/api/src/occurrenceScheduling.d.ts +1 -1
- package/dist/_dts/api/src/participantMessaging.d.ts +3 -3
- package/dist/_dts/api/src/public/endpoints.d.ts +1 -1
- package/dist/_dts/api/src/publicBookingAvailabilityEndpointDefinitions.d.ts +62 -0
- package/dist/_dts/api/src/publicBookingService.d.ts +109 -2
- package/dist/_dts/api/src/publicEventCheckoutEndpointDefinitions.d.ts +27 -0
- package/dist/_dts/api/src/publicEventEndpointDefinitions.d.ts +7 -0
- package/dist/_dts/api/src/publicExperience/commerceEndpoints.d.ts +2 -1
- package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +30 -148
- package/dist/_dts/api/src/publicExperience/sharedTypes.d.ts +8 -26
- package/dist/_dts/api/src/publicExperience/siteEndpoints.d.ts +5 -13
- package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +2 -3
- package/dist/_dts/api/src/schemas/admin-allowed-domains.d.ts +76 -0
- package/dist/_dts/api/src/schemas/admin-observability-logs.d.ts +61 -0
- package/dist/_dts/api/src/schemas/admin-users.d.ts +80 -0
- package/dist/_dts/api/src/schemas/newsletter-memberships.d.ts +98 -0
- package/dist/_dts/api/src/schemas/sdk-entries.d.ts +128 -0
- package/dist/_dts/api/src/schemas/site-api-keys.d.ts +112 -0
- package/dist/_dts/api/src/schemas/support.d.ts +35 -0
- package/dist/_dts/api/src/sdk-event-booking-offer.d.ts +14 -0
- package/dist/_dts/api/src/sdk-event-payment-terms.d.ts +4 -16
- package/dist/_dts/api/src/sdk-event-upsert.d.ts +11 -21
- package/dist/_dts/api/src/sdkContracts.d.ts +8 -23
- package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +37 -0
- package/dist/_dts/api/src/sdkMediaContracts.d.ts +40 -0
- package/dist/_dts/api/src/sdkMediaEndpointDefinitions.d.ts +66 -0
- package/dist/_dts/api/src/sdkThemeWire.d.ts +157 -146
- package/dist/_dts/api/src/siteInfrastructure.d.ts +37 -37
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +35 -54
- package/dist/_dts/api/src/siteOnboarding.d.ts +3 -3
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +38 -16
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +37 -17
- package/dist/_dts/api/src/types.d.ts +2 -2
- package/dist/_dts/api/src/{wholeSeriesOfferings.d.ts → wholeSeriesRuns.d.ts} +11 -67
- package/dist/_dts/block-form/src/FormRenderer.d.ts +3 -1
- package/dist/_dts/block-form/src/backend/store-backend.d.ts +2 -1
- package/dist/_dts/block-form/src/backend/types.d.ts +2 -0
- package/dist/_dts/block-form/src/context/FormFocusContext.d.ts +7 -0
- package/dist/_dts/block-form/src/index.d.ts +2 -0
- package/dist/_dts/block-form/src/manifest/ManifestForm.d.ts +2 -1
- package/dist/_dts/block-form/src/utils/promotedFieldBackend.d.ts +8 -0
- package/dist/_dts/block-form/src/utils/promotedFieldPlan.d.ts +18 -0
- package/dist/_dts/block-form/src/utils/resolvePromotedFields.d.ts +8 -1
- package/dist/_dts/blocks/src/BlockErrorBoundary.d.ts +46 -0
- package/dist/_dts/blocks/src/PageRenderer.d.ts +2 -141
- package/dist/_dts/blocks/src/contracts/index.d.ts +2 -0
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +12 -6
- package/dist/_dts/blocks/src/index.d.ts +1 -0
- package/dist/_dts/blocks/src/pageRenderAudience.d.ts +54 -0
- package/dist/_dts/blocks/src/pageRenderDiagnostics.d.ts +26 -0
- package/dist/_dts/blocks/src/pageRenderPlan.d.ts +116 -0
- package/dist/_dts/blocks/src/pageRenderPreparation.d.ts +109 -0
- package/dist/_dts/blocks/src/pageRendererBoundaries.d.ts +1 -0
- package/dist/_dts/blocks/src/pageRendererContracts.d.ts +154 -0
- package/dist/_dts/blocks/src/portal/types.d.ts +1 -1
- package/dist/_dts/blocks/src/server.d.ts +1 -0
- package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +12 -20
- package/dist/_dts/blocks/src/system/blocks/events/event-calendar.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/events/eventCalendarDataLoaders.d.ts +3 -0
- package/dist/_dts/blocks/src/system/blocks/events/shared/calendarWindow.d.ts +95 -0
- package/dist/_dts/blocks/src/system/blocks/events/shared/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/blocks/events/shared/runGrouping.d.ts +37 -0
- package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +1046 -773
- package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +59 -46
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +3 -3
- package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +161 -161
- package/dist/_dts/blocks/src/system/blocks/offerings-preview/model.d.ts +13 -6
- package/dist/_dts/blocks/src/system/blocks/offerings-preview/scheduleSummary.d.ts +10 -4
- package/dist/_dts/blocks/src/system/constants/buttonRoles.d.ts +2 -2
- package/dist/_dts/blocks/src/system/constants/events.d.ts +4 -0
- package/dist/_dts/blocks/src/system/customize/facets.d.ts +4 -4
- package/dist/_dts/blocks/src/system/data/loaderEndpoints.d.ts +1 -1
- package/dist/_dts/blocks/src/system/data/publicLoaderCachePolicy.d.ts +5 -9
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +83 -83
- package/dist/_dts/blocks/src/system/runtime/api/client.d.ts +12 -3
- package/dist/_dts/blocks/src/system/runtime/api/endpoints.d.ts +8 -8
- package/dist/_dts/blocks/src/system/runtime/api/index.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/api/types/core.d.ts +13 -0
- package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +12 -20
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +32 -37
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +15 -18
- package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.d.ts +11 -8
- package/dist/_dts/blocks/src/system/runtime/hooks/useCalendarEvents.state.d.ts +38 -22
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +7 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details/WholeSeriesPricingDisplay.d.ts +2 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-details/logic.d.ts +16 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/ErrorStep.d.ts +3 -5
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizardActions.d.ts +4 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/PaymentSelectionStep.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +5 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventScope.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/hooks.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationCompletion.d.ts +15 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationDerivations.d.ts +2 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorPresentation.d.ts +5 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationErrorRecovery.d.ts +25 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationEventAdapter.d.ts +14 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationSurface.d.ts +3 -21
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/registrationWizardContext.d.ts +4 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/siteCreditPreview.d.ts +0 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/ticketSelectionLines.d.ts +14 -16
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +13 -15
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationStripeReturn.d.ts +7 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +9 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +25 -23
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useWaitlistClaimRestoration.d.ts +2 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +11 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +8 -13
- package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCalendar.interactive.d.ts +5 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.client.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/EventCombined.interactive.d.ts +11 -3
- package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/capacity.d.ts +164 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/cta.d.ts +29 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/dates.d.ts +47 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/index.d.ts +14 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/people.d.ts +6 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/domain/pricing.d.ts +24 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/OfferingTitle.d.ts +11 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekAgendaView.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/WeekBoardView.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +1080 -560
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventProductEligibility.d.ts +2 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/index.d.ts +3 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/listingLayout.d.ts +23 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/offerings-preview.d.ts +2 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +7 -7
- package/dist/_dts/blocks/src/system/transforms/registry/eventCalendar.d.ts +11 -0
- package/dist/_dts/commerce/src/moneyReport.d.ts +1 -1
- package/dist/_dts/commerce/src/purchase/checkoutErrorCodes.d.ts +1 -1
- package/dist/_dts/commerce/src/purchase/event-registration-errors.d.ts +57 -0
- package/dist/_dts/commerce/src/purchase/eventOrderOptionSnapshot.d.ts +3 -0
- package/dist/_dts/commerce/src/purchase/index.d.ts +1 -0
- package/dist/_dts/commerce/src/purchase/orderItemMetadata.d.ts +6 -3
- package/dist/_dts/commerce/src/purchase/types.d.ts +3 -2
- package/dist/_dts/commerce/src/waitlists.d.ts +1 -1
- package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +4 -0
- package/dist/_dts/content-editor/src/controller/useBlockedPublishPlan.d.ts +11 -0
- package/dist/_dts/content-editor/src/hooks/applyBlockedPublishPlan.d.ts +1 -1
- package/dist/_dts/content-editor/src/hooks/blockedPublishPlan.d.ts +13 -5
- package/dist/_dts/content-editor/src/hooks/useEntryActions.d.ts +5 -1
- package/dist/_dts/content-editor/src/hooks/validateBlocksForPublish.d.ts +34 -2
- package/dist/_dts/content-editor/src/index.d.ts +2 -1
- package/dist/_dts/content-editor/src/ui/blockValidationManifestRegistry.d.ts +2 -0
- package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +4 -2
- package/dist/_dts/content-editor/src/ui/stores/types.d.ts +27 -5
- package/dist/_dts/content-model/src/content-types/schema.d.ts +3 -3
- package/dist/_dts/content-model/src/templates/defaults.d.ts +11 -0
- package/dist/_dts/core/src/branded.d.ts +28 -9
- package/dist/_dts/core/src/event-booking-offer-parser.d.ts +82 -0
- package/dist/_dts/core/src/event-booking-offer.d.ts +89 -0
- package/dist/_dts/core/src/event-page-surface-subject.d.ts +81 -4
- package/dist/_dts/core/src/event-pricing.d.ts +81 -89
- package/dist/_dts/core/src/index.d.ts +3 -0
- package/dist/_dts/core/src/non-empty-array.d.ts +3 -0
- package/dist/_dts/core/src/whole-series-run-schedule.d.ts +92 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +495 -279
- package/dist/_dts/db/src/index.d.ts +1 -0
- package/dist/_dts/db/src/utils/postgrestFilter.d.ts +2 -0
- package/dist/_dts/editor-blocks/src/BlockForm.d.ts +2 -6
- package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +1 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +2 -2
- package/dist/_dts/editor-blocks/src/block-editor/BlockSettingsModal.d.ts +4 -2
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockValidationManifests.d.ts +1 -0
- package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +22 -7
- package/dist/_dts/editor-blocks/src/block-editor/useSettingsFieldFocus.d.ts +18 -0
- package/dist/_dts/media-core/src/bulkDeletePlanning.d.ts +4 -0
- package/dist/_dts/media-core/src/fileDomain.d.ts +3 -0
- package/dist/_dts/preview-next/src/client/blocks/previewBatchLoaderParams.d.ts +2 -0
- package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +1 -0
- package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +1 -0
- package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +3 -2
- package/dist/_dts/preview-next/src/client/preview/siteChromeBrandPreferences.d.ts +1 -1
- package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +2 -0
- package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlSaveRequest.d.ts +51 -0
- package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +24 -2
- package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +23 -1
- package/dist/_dts/preview-next/src/client/preview/usePersistedHeaderPreferences.d.ts +8 -0
- package/dist/_dts/sdk/src/client/{eventSubrouteReadOperations.d.ts → publicEventReadOperations.d.ts} +4 -3
- package/dist/_dts/sdk/src/client/types.d.ts +6 -10
- package/dist/_dts/sdk/src/config/types.d.ts +1 -1
- package/dist/_dts/sdk/src/config/validation.d.ts +3 -3
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +5 -0
- package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +2 -3
- package/dist/_dts/sdk/src/manifest/passes/pass1-fields.d.ts +8 -8
- package/dist/_dts/sdk/src/next/tags.d.ts +5 -8
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +2 -26
- package/dist/_dts/sdk/src/rendering/helpers/footerPageOutline.d.ts +9 -1
- package/dist/_dts/sdk/src/rendering/index.d.ts +1 -0
- package/dist/_dts/sdk/src/rendering/islands/types.d.ts +6 -53
- package/dist/_dts/sdk/src/rendering/server.d.ts +1 -0
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/theme-core/src/accordions/types.d.ts +5 -5
- package/dist/_dts/theme-core/src/buttons/styles/recipes/flatInk.d.ts +25 -25
- package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +25 -25
- package/dist/_dts/theme-core/src/buttons/styles/selection.d.ts +7 -7
- package/dist/_dts/theme-core/src/buttons/types.d.ts +22 -22
- package/dist/_dts/theme-core/src/cards/types.d.ts +49 -49
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/gradients/types.d.ts +5 -0
- package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +26 -3
- package/dist/_dts/theme-core/src/inputs/types.d.ts +2 -2
- package/dist/_dts/theme-core/src/interactive/baseSchema.d.ts +1 -1
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +195 -195
- package/dist/_dts/theme-core/src/navigation/types.d.ts +3 -3
- package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
- package/dist/_dts/theme-core/src/palette/curated/types.d.ts +2 -2
- package/dist/_dts/theme-core/src/schema.d.ts +258 -257
- package/dist/_dts/theme-core/src/shared/componentStyles.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
- package/dist/_dts/theme-core/src/site-styles/cardRoleVocabulary.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/compilationPlan.d.ts +43 -3
- package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +10 -0
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +4 -4
- package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +2 -2
- package/dist/_dts/theme-core/src/site-styles/headerBrandPresentation.d.ts +63 -0
- package/dist/_dts/theme-core/src/site-styles/headerBytesComparison.d.ts +30 -0
- package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +50 -1
- package/dist/_dts/theme-core/src/site-styles/headerLayoutCatalog.d.ts +48 -9
- package/dist/_dts/theme-core/src/site-styles/headerPreferences.d.ts +162 -0
- package/dist/_dts/theme-core/src/site-styles/headerPreferencesPersistence.d.ts +73 -0
- package/dist/_dts/theme-core/src/site-styles/headerRecompile.d.ts +118 -0
- package/dist/_dts/theme-core/src/site-styles/headerStyleCompiler.d.ts +10 -1
- package/dist/_dts/theme-core/src/site-styles/headerStyleDefaults.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/headerStyleRecipe.d.ts +7 -0
- package/dist/_dts/theme-core/src/site-styles/index.d.ts +5 -0
- package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/siteChromeBackgrounds.d.ts +20 -1
- package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +43 -2
- package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
- package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +3 -3
- package/dist/_dts/ui/src/badge.d.ts +1 -1
- package/dist/_dts/ui/src/button.d.ts +2 -2
- package/dist/client/{BookingConsentAgreement-DCch21a6.mjs → BookingConsentAgreement-DQUik1Mx.mjs} +2 -2
- package/dist/client/{DiscountCodeDisclosure-DIj1T59K.mjs → DiscountCodeDisclosure-CU67Q4vH.mjs} +1 -1
- package/dist/client/{EventCombined.client-BWVNlXTx.mjs → EventCombined.client-a02TXUgg.mjs} +233 -348
- package/dist/client/{EventListing.client-DVFCDe3i.mjs → EventListing.client-99qx7jFl.mjs} +2 -2
- package/dist/client/{LeafletStaticMap-BY5mIHw9.mjs → LeafletStaticMap-CWzcq73L.mjs} +1 -1
- package/dist/client/{accordion-CK29E8rG.mjs → accordion-D1nb3-Oj.mjs} +1 -1
- package/dist/client/{bookingForm-DFvnet-N.mjs → bookingForm-BGrmLhaO.mjs} +5 -5
- package/dist/client/bookings.mjs +10555 -10475
- package/dist/client/{carousel-BVU5NQlb.mjs → carousel-DSmOx3ad.mjs} +1 -1
- package/dist/client/{cart-BNItcZVa.mjs → cart-COWeOIUk.mjs} +3 -3
- package/dist/client/{checkout-Bu6iCdkP.mjs → checkout-CeysaIJK.mjs} +3 -3
- package/dist/client/client.mjs +58968 -57441
- package/dist/client/{context-BImarOAq.mjs → context-DBzX85Xc.mjs} +46 -18
- package/dist/client/dates-DCYhZBlW.mjs +264 -0
- package/dist/client/{eventCalendar-DS2h-UXD.mjs → eventCalendar-BgsN73Ul.mjs} +21 -44
- package/dist/client/{eventCombined-Drt4Oq9p.mjs → eventCombined-DcZQAMQP.mjs} +3 -3
- package/dist/client/{eventDetails-Bl2vWgTX.mjs → eventDetails-BWwGJ54l.mjs} +131 -51
- package/dist/client/{eventListing-CS7PHY7v.mjs → eventListing-DqYqV8vp.mjs} +3 -3
- package/dist/client/{eventRegistration-D-j8eNy2.mjs → eventRegistration-DQGDgu_e.mjs} +1122 -803
- package/dist/client/{form-RMpoLTyr.mjs → form-ClfpasVT.mjs} +2 -2
- package/dist/client/{headerSection-BYE3Lb3k.mjs → headerSection-BuOMe98N.mjs} +2 -2
- package/dist/client/hooks.mjs +9630 -9526
- package/dist/client/{locationMap-BxSr7Kkh.mjs → locationMap-CEqu_sfa.mjs} +2 -2
- package/dist/client/{newsletterForm-DerbXwFC.mjs → newsletterForm-IbrHjMxy.mjs} +2 -2
- package/dist/client/pricing-xj7MPZlK.mjs +314 -0
- package/dist/client/{productDetail-4SZCLhAf.mjs → productDetail-vxqTt5Xj.mjs} +3 -3
- package/dist/client/{productList-D7AP4GNq.mjs → productList-OTdZu8sb.mjs} +3 -3
- package/dist/client/{propsDecoder-pzBeCh14.mjs → propsDecoder-CY9gGEF7.mjs} +786 -1194
- package/dist/client/rendering/client.mjs +11481 -10469
- package/dist/client/rendering/islands.mjs +17 -17
- package/dist/client/rendering.mjs +26871 -25232
- package/dist/client/{scrollToBlock-CduAKf8T.mjs → scrollToBlock--BFV6kl-.mjs} +1 -1
- package/dist/client/{shop-Cp5p_kGe.mjs → shop-CP4YbDL9.mjs} +6 -6
- package/dist/client/{shop-commerce-DicXYaYX.mjs → shop-commerce-APs4XBXE.mjs} +5 -5
- package/dist/client/{shop-commerce-store-CGWnpY4K.mjs → shop-commerce-store-CAVLxLFr.mjs} +1 -1
- package/dist/client/{shopShared-BDf9ljkm.mjs → shopShared-BnSRrwXI.mjs} +3 -3
- package/dist/client/{useEventFilters-DeeyGYuk.mjs → useEventFilters-1a1by4c8.mjs} +33 -18
- package/dist/preview-next/before-render.mjs +186 -148
- package/dist/preview-next/client/runtime.mjs +4 -4
- package/dist/preview-next/keepAlive.mjs +186 -148
- package/dist/preview-next/middleware.mjs +186 -148
- package/dist/{previewAuthStore-DbqBol0V.mjs → previewAuthStore-BkEgnYPP.mjs} +186 -148
- package/dist/{sdk-runtime-19MO27F0.mjs → sdk-runtime-DwGfsT0S.mjs} +2 -2
- package/dist/{separator-DaPLtJ1f.mjs → separator-BeqDLneQ.mjs} +1 -1
- package/dist/server/components.mjs +53243 -51879
- package/dist/server/config-validation.mjs +1015 -906
- package/dist/server/config.mjs +1019 -910
- package/dist/server/data.mjs +10304 -10200
- package/dist/server/index.mjs +217 -198
- package/dist/server/next/tags.mjs +18 -4
- package/dist/server/next.mjs +62787 -61617
- package/dist/server/page-converter.mjs +797 -917
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +52557 -51365
- package/dist/server/rendering.mjs +54373 -53054
- package/dist/server/routing.mjs +13274 -13142
- package/dist/server/server.mjs +1076 -1154
- package/dist/server/theme-bridge.mjs +69 -9
- package/dist/server/theme.mjs +27 -8
- package/dist/styles/index.css +32 -1
- package/package.json +1 -1
- package/dist/_dts/api/src/publicExperience/wholeSeriesEndpoints.d.ts +0 -65
- package/dist/_dts/api/src/publicWholeSeriesEndpointDefinitions.d.ts +0 -20
- package/dist/_dts/api/src/sdk-event-pricing.d.ts +0 -61
- package/dist/_dts/blocks/src/system/blocks/events/whole-series/index.d.ts +0 -3
- package/dist/_dts/blocks/src/system/blocks/events/whole-series/pricing.d.ts +0 -50
- package/dist/_dts/blocks/src/system/blocks/events/whole-series/schemas.d.ts +0 -135
- package/dist/_dts/blocks/src/system/blocks/events/whole-series/types.d.ts +0 -87
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCapacity.d.ts +0 -48
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +0 -17
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/utils.d.ts +0 -100
- package/dist/_dts/sdk/src/client/wholeSeriesReadOperations.d.ts +0 -11
- package/dist/_dts/sdk/src/public-api/wholeSeriesContracts.d.ts +0 -2
- /package/dist/_dts/blocks/src/system/runtime/nodes/events/{shared → domain}/destination.d.ts +0 -0
|
@@ -2,6 +2,6 @@ import { type ThemeColorToken } from '../tokens';
|
|
|
2
2
|
export declare const backgroundAppearanceQuickColorTokenNames: readonly ["background", "surface", "muted", "primary", "secondary", "accent"];
|
|
3
3
|
export declare const backgroundAppearanceBaseColorTokenNames: readonly ["background", "surface", "surfaceAlt", "muted", "primary", "secondary", "accent", "neutral"];
|
|
4
4
|
export declare const backgroundAppearanceShadeableColorTokenNames: readonly ["primary", "secondary", "accent", "neutral"];
|
|
5
|
-
export declare const backgroundAppearanceColorTokenNames: readonly ("surface" | "background" | "
|
|
6
|
-
export declare const backgroundAppearanceAdvancedColorTokenNames: ("surface" | "background" | "
|
|
5
|
+
export declare const backgroundAppearanceColorTokenNames: readonly ("surface" | "background" | "primary" | "secondary" | "accent" | "surfaceAlt" | "muted" | "neutral" | "neutral-600" | "neutral-500" | "neutral-800" | "neutral-700" | "neutral-900" | "primary-500" | "primary-400" | "neutral-950" | "primary-300" | "primary-600" | "secondary-600" | "accent-600" | "secondary-500" | "accent-400" | "neutral-50" | "neutral-100" | "neutral-200" | "neutral-300" | "secondary-400" | "neutral-400" | "primary-100" | "primary-800" | "primary-900" | "primary-700" | "primary-50" | "secondary-50" | "secondary-900" | "accent-50" | "accent-500" | "accent-900" | "primary-200" | "primary-950" | "secondary-100" | "secondary-200" | "secondary-300" | "secondary-700" | "secondary-800" | "secondary-950" | "accent-100" | "accent-200" | "accent-300" | "accent-700" | "accent-800" | "accent-950")[];
|
|
6
|
+
export declare const backgroundAppearanceAdvancedColorTokenNames: ("surface" | "background" | "primary" | "secondary" | "accent" | "surfaceAlt" | "muted" | "neutral" | "neutral-600" | "neutral-500" | "neutral-800" | "neutral-700" | "neutral-900" | "primary-500" | "primary-400" | "neutral-950" | "primary-300" | "primary-600" | "secondary-600" | "accent-600" | "secondary-500" | "accent-400" | "neutral-50" | "neutral-100" | "neutral-200" | "neutral-300" | "secondary-400" | "neutral-400" | "primary-100" | "primary-800" | "primary-900" | "primary-700" | "primary-50" | "secondary-50" | "secondary-900" | "accent-50" | "accent-500" | "accent-900" | "primary-200" | "primary-950" | "secondary-100" | "secondary-200" | "secondary-300" | "secondary-700" | "secondary-800" | "secondary-950" | "accent-100" | "accent-200" | "accent-300" | "accent-700" | "accent-800" | "accent-950")[];
|
|
7
7
|
export declare function parseBackgroundAppearanceColorToken(value: unknown): ThemeColorToken | null;
|
|
@@ -41,8 +41,8 @@ export declare function cardRoleFromLegacyVocabulary(value: unknown): CardRole |
|
|
|
41
41
|
* the role they meant, everything else fails the parse.
|
|
42
42
|
*/
|
|
43
43
|
export declare const cardRoleWithLegacyAliasSchema: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
|
|
44
|
-
open: "open";
|
|
45
44
|
none: "none";
|
|
45
|
+
open: "open";
|
|
46
46
|
default: "default";
|
|
47
47
|
alternative: "alternative";
|
|
48
48
|
}>>;
|
|
@@ -4,6 +4,7 @@ import type { ButtonStyleSelection } from '../buttons/styles/selection';
|
|
|
4
4
|
import type { HeaderLayoutStyleSelection, HeaderLogoContext } from './headerLayoutStyles';
|
|
5
5
|
import type { FooterLookId } from './footerLooks';
|
|
6
6
|
import type { BrandDisplayMode, LogoSizePolicy } from './logoBranding';
|
|
7
|
+
import type { HeaderPreferences } from './headerPreferences';
|
|
7
8
|
export type HeaderBrandPreferences = Readonly<{
|
|
8
9
|
brandDisplay: BrandDisplayMode;
|
|
9
10
|
logoSize: LogoSizePolicy;
|
|
@@ -15,10 +16,42 @@ export type HeaderRecompileDirective = Readonly<{
|
|
|
15
16
|
selection: HeaderLayoutStyleSelection;
|
|
16
17
|
brandPresentation: ReplacementBrandPresentation;
|
|
17
18
|
}>;
|
|
18
|
-
|
|
19
|
+
/**
|
|
20
|
+
* "Leave the header as the user last chose it", expressed as intent rather
|
|
21
|
+
* than as bytes (#1318 Phase 4d).
|
|
22
|
+
*
|
|
23
|
+
* Until 4d this arm carried `header: Theme['header']` and the compiler returned
|
|
24
|
+
* it verbatim, which was a fourth authority over `theme.header`: bytes reached
|
|
25
|
+
* persistence without passing through a recipe. It now names the row whose
|
|
26
|
+
* intent is to be honoured, and the compiler recompiles from
|
|
27
|
+
* `(stored selection, preferences)` — the same pipeline every other write uses.
|
|
28
|
+
*
|
|
29
|
+
* `preferences` is the stored record when the caller holds one and `null` while
|
|
30
|
+
* the Phase 4c backfill has not reached the row, in which case the intent is
|
|
31
|
+
* read back out of `persistedTheme`'s own bytes by the Phase 4a reader. It is
|
|
32
|
+
* never "the defaults": a default here would be the hidden authority this slice
|
|
33
|
+
* removes.
|
|
34
|
+
*/
|
|
35
|
+
export type HeaderPreserveDirective = Readonly<{
|
|
19
36
|
kind: 'preserve';
|
|
20
|
-
|
|
21
|
-
|
|
37
|
+
/** The row's own persisted theme. Its intent is read; its bytes are not copied. */
|
|
38
|
+
persistedTheme: Theme;
|
|
39
|
+
preferences: HeaderPreferences | null;
|
|
40
|
+
/**
|
|
41
|
+
* Always the logo context, never `use-compiled-defaults` — which is why this
|
|
42
|
+
* is narrowed to the one arm rather than taking the whole union.
|
|
43
|
+
*
|
|
44
|
+
* The intent on this path is derived from the row's own bytes, and that
|
|
45
|
+
* derivation compares the persisted `logo` against **both** compiled
|
|
46
|
+
* candidates. Withholding the context leaves it one, so a `'recommended'` row
|
|
47
|
+
* classifies as `'plain'` and silently loses its logo treatment. Which mode
|
|
48
|
+
* then wins is `applyHeaderPreferences`'s business, from the record (D24).
|
|
49
|
+
*/
|
|
50
|
+
brandPresentation: Extract<ReplacementBrandPresentation, {
|
|
51
|
+
kind: 'apply-logo-context';
|
|
52
|
+
}>;
|
|
53
|
+
}>;
|
|
54
|
+
export type HeaderCompilationDirective = HeaderPreserveDirective | HeaderRecompileDirective;
|
|
22
55
|
export type FooterCompilationDirective = Readonly<{
|
|
23
56
|
kind: 'preserve';
|
|
24
57
|
footer: Theme['footer'];
|
|
@@ -69,3 +102,10 @@ export declare function replaceSiteStyleCompilationPlan(input: Readonly<{
|
|
|
69
102
|
}>): Extract<SiteThemeCompilationPlan, {
|
|
70
103
|
kind: 'replace-site-style';
|
|
71
104
|
}>;
|
|
105
|
+
/**
|
|
106
|
+
* Writes the brand display / logo size preference onto the header's logo style.
|
|
107
|
+
*
|
|
108
|
+
* Moved here from preview-next in #1318 Phase 4a so the header preference
|
|
109
|
+
* pipeline can be composed once, in theme-core, rather than half in the client.
|
|
110
|
+
*/
|
|
111
|
+
export declare function withHeaderBrandThemePreferences(theme: Theme, preferences: HeaderBrandPreferences): Theme;
|
|
@@ -146,6 +146,16 @@ export type CuratedSiteStyle = Readonly<{
|
|
|
146
146
|
export declare function defaultButtonStyleSelectionForSiteStyle(siteStyle: CuratedSiteStyle): ButtonStyleSelection;
|
|
147
147
|
export declare function defaultPaletteForSiteStyle(siteStyle: CuratedSiteStyle): KnownCuratedPaletteValueKey;
|
|
148
148
|
export declare function defaultHeaderSelectionForSiteStyle(siteStyle: CuratedSiteStyle): HeaderLayoutStyleSelection;
|
|
149
|
+
/**
|
|
150
|
+
* The curated default selection together with the style choices that belong to
|
|
151
|
+
* it. Carrying the styles alongside the ids is what lets a caller fall back to
|
|
152
|
+
* the default layout without a second, nullable lookup that can never actually
|
|
153
|
+
* miss — the source of an unreachable throw before #1318 Phase 4a.
|
|
154
|
+
*/
|
|
155
|
+
export declare function defaultHeaderCurationForSiteStyle(siteStyle: CuratedSiteStyle): Readonly<{
|
|
156
|
+
selection: HeaderLayoutStyleSelection;
|
|
157
|
+
styles: NonEmptyReadonlyArray<HeaderStyleChoice>;
|
|
158
|
+
}>;
|
|
149
159
|
export declare function headerLayoutChoicesForSiteStyle(siteStyle: CuratedSiteStyle): NonEmptyReadonlyArray<HeaderLayoutChoice>;
|
|
150
160
|
export declare function headerStyleChoicesForLayout(siteStyle: CuratedSiteStyle, layoutId: HeaderLayoutId): NonEmptyReadonlyArray<HeaderStyleChoice> | null;
|
|
151
161
|
/**
|
|
@@ -85,10 +85,10 @@ export type PageStyleAuthoritySummary<TBlockId extends string = DesignBlockId> =
|
|
|
85
85
|
export declare const styleAuthoritySchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
86
86
|
kind: z.ZodLiteral<"theme-v2">;
|
|
87
87
|
source: z.ZodEnum<{
|
|
88
|
-
admin: "admin";
|
|
89
|
-
sdk: "sdk";
|
|
90
88
|
generated: "generated";
|
|
91
89
|
user: "user";
|
|
90
|
+
admin: "admin";
|
|
91
|
+
sdk: "sdk";
|
|
92
92
|
}>;
|
|
93
93
|
siteStyleId: z.ZodPipe<z.ZodString, z.ZodTransform<SiteStyleId, string>>;
|
|
94
94
|
templateId: z.ZodPipe<z.ZodString, z.ZodTransform<DesignSystemTemplateId, string>>;
|
|
@@ -118,10 +118,10 @@ export declare const blockRuntimeStyleAuthoritySchema: z.ZodObject<{
|
|
|
118
118
|
authority: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
119
119
|
kind: z.ZodLiteral<"theme-v2">;
|
|
120
120
|
source: z.ZodEnum<{
|
|
121
|
-
admin: "admin";
|
|
122
|
-
sdk: "sdk";
|
|
123
121
|
generated: "generated";
|
|
124
122
|
user: "user";
|
|
123
|
+
admin: "admin";
|
|
124
|
+
sdk: "sdk";
|
|
125
125
|
}>;
|
|
126
126
|
siteStyleId: z.ZodPipe<z.ZodString, z.ZodTransform<SiteStyleId, string>>;
|
|
127
127
|
templateId: z.ZodPipe<z.ZodString, z.ZodTransform<DesignSystemTemplateId, string>>;
|
|
@@ -83,8 +83,8 @@ export declare const generatedBlockDesignIntentSchema: z.ZodObject<{
|
|
|
83
83
|
source: z.ZodLiteral<"generated">;
|
|
84
84
|
kind: z.ZodLiteral<"explicit">;
|
|
85
85
|
value: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
|
|
86
|
-
open: "open";
|
|
87
86
|
none: "none";
|
|
87
|
+
open: "open";
|
|
88
88
|
default: "default";
|
|
89
89
|
alternative: "alternative";
|
|
90
90
|
}>>;
|
|
@@ -234,8 +234,8 @@ export declare const generatedPageDesignIntentSchema: z.ZodObject<{
|
|
|
234
234
|
source: z.ZodLiteral<"generated">;
|
|
235
235
|
kind: z.ZodLiteral<"explicit">;
|
|
236
236
|
value: z.ZodPipe<z.ZodTransform<unknown, unknown>, z.ZodEnum<{
|
|
237
|
-
open: "open";
|
|
238
237
|
none: "none";
|
|
238
|
+
open: "open";
|
|
239
239
|
default: "default";
|
|
240
240
|
alternative: "alternative";
|
|
241
241
|
}>>;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import type { ThemeHeader } from '../schema';
|
|
2
|
+
/**
|
|
3
|
+
* Whether the header wears a brand presentation at all (#1318 Phase 4c).
|
|
4
|
+
*
|
|
5
|
+
* `applyHeaderBrandPresentation` is unconditional today: given a logo context
|
|
6
|
+
* it always writes a `logo` object carrying a resolved display, size and
|
|
7
|
+
* accommodation. That makes "this header has no brand presentation block" —
|
|
8
|
+
* which is what several live sites persist, including one whose site *does*
|
|
9
|
+
* have a logo asset — a state the preference record could not express, so a
|
|
10
|
+
* recompile would silently give the site a logo treatment it has never
|
|
11
|
+
* rendered.
|
|
12
|
+
*
|
|
13
|
+
* This is the third field in this phase with that shape, after the interaction
|
|
14
|
+
* palette and the nav text size: the persisted bytes carry intent the reader
|
|
15
|
+
* cannot say, so the recompile "corrects" it. The fix is the same one — widen
|
|
16
|
+
* the closed vocabulary with a named member and derive it by baseline
|
|
17
|
+
* comparison — and it is a *widening*, not a restyle: `'recommended'` is the
|
|
18
|
+
* default and reproduces today's behaviour exactly, so no row whose bytes carry
|
|
19
|
+
* a presentation compiles differently for `'plain'` existing.
|
|
20
|
+
*
|
|
21
|
+
* `'plain'` is deliberately not "preserve whatever bytes are there". It is a
|
|
22
|
+
* constructive instruction — *write no presentation block* — so Phase 4e's
|
|
23
|
+
* compiler, which builds the header from nothing, can produce it.
|
|
24
|
+
*/
|
|
25
|
+
export declare const headerBrandPresentationValues: readonly ["recommended", "plain"];
|
|
26
|
+
export type HeaderBrandPresentationPreference = (typeof headerBrandPresentationValues)[number];
|
|
27
|
+
export declare const defaultHeaderBrandPresentation: HeaderBrandPresentationPreference;
|
|
28
|
+
/**
|
|
29
|
+
* What the row's own bytes say about the presentation mode.
|
|
30
|
+
*
|
|
31
|
+
* `unrecognised` is its own state for the same reason it is on the interaction
|
|
32
|
+
* palette: the record has no way to represent "a logo block nobody's rule
|
|
33
|
+
* produces", and answering `'plain'` for one would drop a treatment the site
|
|
34
|
+
* renders. An unrecognised row falls back to `'recommended'` in the record and
|
|
35
|
+
* is reported by the divergence report, which blocks the Phase 4e gate.
|
|
36
|
+
*/
|
|
37
|
+
export type HeaderBrandPresentationBytesClassification = Readonly<{
|
|
38
|
+
kind: 'recommended';
|
|
39
|
+
}> | Readonly<{
|
|
40
|
+
kind: 'plain';
|
|
41
|
+
}> | Readonly<{
|
|
42
|
+
kind: 'unrecognised';
|
|
43
|
+
}>;
|
|
44
|
+
/**
|
|
45
|
+
* Which mode reproduces this row's persisted logo bytes.
|
|
46
|
+
*
|
|
47
|
+
* Both candidates are supplied rather than reconstructed here, because both are
|
|
48
|
+
* the compilation's own output and rebuilding either would be a second
|
|
49
|
+
* authority on what the modes mean. `'recommended'` is tested first so that a
|
|
50
|
+
* row the resolver already agrees with keeps the live mode; `'plain'` is the
|
|
51
|
+
* answer for the rows that carry no presentation — an absent block, or a block
|
|
52
|
+
* holding only the recipe's own brand typography.
|
|
53
|
+
*/
|
|
54
|
+
export declare function classifyHeaderBrandPresentationBytes(persisted: ThemeHeader,
|
|
55
|
+
/** The header `'recommended'` produces for this row — presentation applied. */
|
|
56
|
+
recommended: ThemeHeader,
|
|
57
|
+
/** The header `'plain'` produces — the presentation step skipped. */
|
|
58
|
+
plain: ThemeHeader): HeaderBrandPresentationBytesClassification;
|
|
59
|
+
/**
|
|
60
|
+
* The preference the bytes express, or `null` when they express none the record
|
|
61
|
+
* can carry. `null` is the caller's cue to fall back to the default and say so.
|
|
62
|
+
*/
|
|
63
|
+
export declare function readHeaderBrandPresentationFromBytes(persisted: ThemeHeader, recommended: ThemeHeader, plain: ThemeHeader): HeaderBrandPresentationPreference | null;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { ThemeHeader } from '../schema';
|
|
2
|
+
export type HeaderFieldDiff = Readonly<{
|
|
3
|
+
path: string;
|
|
4
|
+
left: unknown;
|
|
5
|
+
right: unknown;
|
|
6
|
+
}>;
|
|
7
|
+
/**
|
|
8
|
+
* Structural diff by JSON path. Values are compared through
|
|
9
|
+
* `JSON.stringify`, so a key present with the value `undefined` and an absent
|
|
10
|
+
* key read as the same thing — which is what `jsonb` does to them anyway
|
|
11
|
+
* (#1318 Correction 5).
|
|
12
|
+
*/
|
|
13
|
+
export declare function diffJsonPaths(left: unknown, right: unknown, path?: string): readonly HeaderFieldDiff[];
|
|
14
|
+
export type CompiledHeaderComparison = Readonly<{
|
|
15
|
+
kind: 'equal';
|
|
16
|
+
}> | Readonly<{
|
|
17
|
+
kind: 'different';
|
|
18
|
+
diffs: readonly HeaderFieldDiff[];
|
|
19
|
+
differingPaths: readonly string[];
|
|
20
|
+
}>;
|
|
21
|
+
/**
|
|
22
|
+
* The Phase 4b equality assertion: does the header a client compiled match the
|
|
23
|
+
* one the server compiles from the same `(selection, preferences)`?
|
|
24
|
+
*
|
|
25
|
+
* Both sides go through a JSON round trip first, because the persisted form is
|
|
26
|
+
* `jsonb` and an in-memory `ctaVariant: undefined` is not a difference the
|
|
27
|
+
* database could ever store (#1318 Correction 5). Comparing the in-memory
|
|
28
|
+
* objects directly would report a mismatch that no save could produce.
|
|
29
|
+
*/
|
|
30
|
+
export declare function compareCompiledHeaders(left: ThemeHeader, right: ThemeHeader): CompiledHeaderComparison;
|
|
@@ -10,7 +10,7 @@ export declare const clearSplitInteractionPalette: Readonly<{
|
|
|
10
10
|
id: "interaction-palette";
|
|
11
11
|
label: string;
|
|
12
12
|
options: readonly [HeaderInteractionPaletteOption, ...HeaderInteractionPaletteOption[]];
|
|
13
|
-
defaultOptionId: "
|
|
13
|
+
defaultOptionId: "primary" | "secondary" | "accent" | "quiet";
|
|
14
14
|
}>;
|
|
15
15
|
export type HeaderInteractionPaletteControlState = Readonly<{
|
|
16
16
|
kind: 'unavailable';
|
|
@@ -30,3 +30,52 @@ export type HeaderInteractionPaletteControlState = Readonly<{
|
|
|
30
30
|
}>;
|
|
31
31
|
export declare function resolveHeaderInteractionPaletteControl(group: HeaderInteractionPaletteOptionGroup | undefined, preference: HeaderInteractionPalettePreference): HeaderInteractionPaletteControlState;
|
|
32
32
|
export declare function applyHeaderInteractionPalette(header: ThemeHeader, group: HeaderInteractionPaletteOptionGroup | undefined, preference: HeaderInteractionPalettePreference): ThemeHeader;
|
|
33
|
+
/**
|
|
34
|
+
* What a persisted header's nav link style says about the palette.
|
|
35
|
+
*
|
|
36
|
+
* `'unrecognised'` is the arm that matters. `'quiet'` writes nothing and is
|
|
37
|
+
* therefore a fixed point of *every* header, so a fixed-point search alone
|
|
38
|
+
* would answer `'quiet'` for a pill nobody in the group produces — and a
|
|
39
|
+
* recompile under `'quiet'` would then drop that pill. Reporting the state
|
|
40
|
+
* instead means a row like that reaches a human through the Phase 4c report
|
|
41
|
+
* rather than losing its hover treatment quietly.
|
|
42
|
+
*/
|
|
43
|
+
export type HeaderInteractionPaletteBytesClassification = Readonly<{
|
|
44
|
+
kind: 'derived';
|
|
45
|
+
preference: HeaderInteractionPalettePreference;
|
|
46
|
+
}> | Readonly<{
|
|
47
|
+
kind: 'unrecognised';
|
|
48
|
+
}> | Readonly<{
|
|
49
|
+
kind: 'no-palette';
|
|
50
|
+
}>;
|
|
51
|
+
/**
|
|
52
|
+
* Which option of `group` a persisted header's nav link style is the output of
|
|
53
|
+
* (#1318 Phase 4c decision 2).
|
|
54
|
+
*
|
|
55
|
+
* This is a baseline comparison rather than a pattern match on effect bytes.
|
|
56
|
+
* The palette overwrites its four fields unconditionally, so applying an option
|
|
57
|
+
* to a header leaves that header unchanged exactly when the header is already
|
|
58
|
+
* that option's output — which makes "which option produced these bytes" a
|
|
59
|
+
* fixed-point search over the closed option list.
|
|
60
|
+
*
|
|
61
|
+
* Order is load-bearing twice over:
|
|
62
|
+
*
|
|
63
|
+
* - `'recommended'` is tried first, so a row compiled from the recommendation
|
|
64
|
+
* derives the sentinel rather than the default option's own id. As with the
|
|
65
|
+
* structure rule, an explicit choice that happens to equal the default
|
|
66
|
+
* collapses to the sentinel; nothing in the bytes distinguishes the two.
|
|
67
|
+
* - `'quiet'` is tried last, because it writes nothing and is therefore a fixed
|
|
68
|
+
* point of every header. Reaching it means no pill option produced these
|
|
69
|
+
* bytes — which is what "this row renders no pill" means, *provided the row
|
|
70
|
+
* carries no pill*. `carriesPaletteShapedEffect` is that proviso: a
|
|
71
|
+
* palette-shaped nav link that no option reproduces is `'unrecognised'`, not
|
|
72
|
+
* `'quiet'`.
|
|
73
|
+
*/
|
|
74
|
+
export declare function classifyHeaderInteractionPaletteBytes(header: ThemeHeader, group: HeaderInteractionPaletteOptionGroup | undefined): HeaderInteractionPaletteBytesClassification;
|
|
75
|
+
/**
|
|
76
|
+
* The preference `classifyHeaderInteractionPaletteBytes` derived, or `null`
|
|
77
|
+
* when the bytes express none — either because the style offers no palette or
|
|
78
|
+
* because they match no option it does offer. Callers that need to tell those
|
|
79
|
+
* two apart use the classification directly.
|
|
80
|
+
*/
|
|
81
|
+
export declare function readHeaderInteractionPaletteFromBytes(header: ThemeHeader, group: HeaderInteractionPaletteOptionGroup | undefined): HeaderInteractionPalettePreference | null;
|
|
@@ -1,18 +1,57 @@
|
|
|
1
|
-
import type
|
|
2
|
-
import { type
|
|
3
|
-
|
|
1
|
+
import { type HeaderBrandPresentationPlan, type HeaderBrandPresentationSelection, type BrandDisplayMode, type LogoAccommodationOption, type LogoAccommodationPattern, type LogoSizePolicy } from './logoBranding';
|
|
2
|
+
import { type HeaderLayoutId, type HeaderLogoContext, type HeaderLogoDimensions, type HeaderLogoShape, type HeaderStyleId } from './headerLayoutTypes';
|
|
3
|
+
export declare function logoAccommodationProvidesBacking(pattern: LogoAccommodationPattern): boolean;
|
|
4
|
+
export type HeaderLogoAsset = Readonly<{
|
|
5
|
+
/** The site's stored logo, or `null` when it has none. */
|
|
6
|
+
asset: HeaderLogoDimensions | null;
|
|
7
|
+
/** The accommodation the row currently persists, if any. */
|
|
8
|
+
accommodation: LogoAccommodationPattern | undefined;
|
|
9
|
+
}>;
|
|
10
|
+
/**
|
|
11
|
+
* The single answer to "what shape is this site's logo" (#1318 Phase 4b).
|
|
12
|
+
*
|
|
13
|
+
* The server and the public frontend each had their own copy of this, and they
|
|
14
|
+
* disagreed on the one case that matters: a logo whose dimensions are unknown.
|
|
15
|
+
* The server assumed `horizontal`; the frontend asked whether the persisted
|
|
16
|
+
* accommodation brings its own backing and answered `square` if it does. The
|
|
17
|
+
* richer rule is the correct one — a badge or masthead accommodation is
|
|
18
|
+
* evidence about the asset that raw dimensions would otherwise supply — and it
|
|
19
|
+
* reduces to `horizontal` whenever there is no backing, so it subsumes the
|
|
20
|
+
* server's rule rather than contradicting it. The backing question goes through
|
|
21
|
+
* `logoAccommodationProvidesBacking`, so the pattern list has one home.
|
|
22
|
+
*/
|
|
23
|
+
export declare function deriveHeaderLogoShape({ asset, accommodation, }: HeaderLogoAsset): HeaderLogoShape;
|
|
24
|
+
/**
|
|
25
|
+
* The site's logo as the header pipeline sees it, from the two database values
|
|
26
|
+
* that describe it: the asset (or its absence) and the accommodation the row
|
|
27
|
+
* currently persists, which is evidence about the asset when its dimensions are
|
|
28
|
+
* missing.
|
|
29
|
+
*
|
|
30
|
+
* One definition, shared by every shell that has to answer it — the dashboard's
|
|
31
|
+
* `loadHeaderLogoContextForSite`, the public frontend, and the Phase 4c repair
|
|
32
|
+
* generator — because a second copy is a second answer to "what shape is this
|
|
33
|
+
* site's logo", and the two former copies disagreed on exactly the case this
|
|
34
|
+
* one is careful about (#1318 Phase 4b/4c).
|
|
35
|
+
*/
|
|
36
|
+
export declare function headerLogoShapeContext(input: HeaderLogoAsset & Readonly<{
|
|
37
|
+
/**
|
|
38
|
+
* The brand half of the preference record, when the caller holds one.
|
|
39
|
+
* Both members are optional because the public frontend reads them off
|
|
40
|
+
* the persisted header, where either can be absent; an absent one is left
|
|
41
|
+
* off the context rather than written as `undefined`, so the resolver's
|
|
42
|
+
* own `?? 'auto'` still decides.
|
|
43
|
+
*/
|
|
44
|
+
brand?: Readonly<{
|
|
45
|
+
brandDisplay?: BrandDisplayMode;
|
|
46
|
+
logoSize?: LogoSizePolicy;
|
|
47
|
+
}>;
|
|
48
|
+
}>): HeaderLogoContext;
|
|
4
49
|
export declare function resolveHeaderBrandPresentation(input: Readonly<{
|
|
5
50
|
logo: HeaderLogoContext;
|
|
6
51
|
accommodations: readonly LogoAccommodationOption[];
|
|
7
52
|
allowDisplayFallback?: boolean;
|
|
8
53
|
}>): HeaderBrandPresentationPlan;
|
|
9
54
|
export declare function requireHeaderBrandPresentationSelection(plan: HeaderBrandPresentationPlan): HeaderBrandPresentationSelection;
|
|
10
|
-
/**
|
|
11
|
-
* Starts each compilation from the generated theme's header branch, then
|
|
12
|
-
* clears optional nested styling fields that would otherwise leak from a
|
|
13
|
-
* different header selection.
|
|
14
|
-
*/
|
|
15
|
-
export declare function baseHeader(theme: Theme): Theme['header'];
|
|
16
55
|
export declare const headerLayoutCatalog: readonly [{
|
|
17
56
|
readonly id: HeaderLayoutId;
|
|
18
57
|
readonly label: "Classic";
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import type { Theme, ThemeHeader } from '../schema';
|
|
2
|
+
import { type SiteChromeBackgroundOverride } from './siteChromeBackgrounds';
|
|
3
|
+
import { type HeaderNavFontSizePreference, type HeaderNavTypographyPreference } from './siteChromeNavPreferences';
|
|
4
|
+
import type { HeaderInteractionPalettePreference } from '../header/interactionPalette';
|
|
5
|
+
import { type HeaderInteractionPaletteOptionGroup } from './headerInteractionPalette';
|
|
6
|
+
import { type HeaderBrandPresentationPreference } from './headerBrandPresentation';
|
|
7
|
+
import type { BrandDisplayMode, HeaderBrandPresentationSelection, LogoSizePolicy } from './logoBranding';
|
|
8
|
+
export type HeaderLogoTextIntent = NonNullable<ThemeHeader['logoText']>;
|
|
9
|
+
/**
|
|
10
|
+
* Site-agnostic overrides of the layout's structural defaults (#1318 D15).
|
|
11
|
+
*
|
|
12
|
+
* `'inherit'` means "take whatever the row's own (layout, recipe) compiles". It
|
|
13
|
+
* is a sentinel rather than an absent field so that "the user has not chosen"
|
|
14
|
+
* stays distinguishable from "the user chose the value that happens to equal
|
|
15
|
+
* the layout default" — the distinction an optional field cannot carry.
|
|
16
|
+
*
|
|
17
|
+
* `logoText` has a third state because the classic layout compiles a value and
|
|
18
|
+
* a row can legitimately carry none: `'none'` is an explicit "no logo text
|
|
19
|
+
* accommodation", which `'inherit'` would silently turn back into the layout's.
|
|
20
|
+
*/
|
|
21
|
+
export type HeaderStructurePreferences = Readonly<{
|
|
22
|
+
positioning: 'inherit' | ThemeHeader['positioning'];
|
|
23
|
+
shrinkOnScroll: 'inherit' | boolean;
|
|
24
|
+
logoText: 'inherit' | 'none' | HeaderLogoTextIntent;
|
|
25
|
+
}>;
|
|
26
|
+
/**
|
|
27
|
+
* Everything a user can express about a header, as intent rather than as
|
|
28
|
+
* compiled bytes. The first six fields already persist inside `theme.header`
|
|
29
|
+
* today and have readers; `structure` is new (D15).
|
|
30
|
+
*/
|
|
31
|
+
export type HeaderPreferences = Readonly<{
|
|
32
|
+
/**
|
|
33
|
+
* Whether the header wears a brand presentation at all. `'plain'` is the
|
|
34
|
+
* state several live rows persist — no `logo` block — which the record could
|
|
35
|
+
* not express before (#1318 Phase 4c decision 5b, D24).
|
|
36
|
+
*/
|
|
37
|
+
brandPresentation: HeaderBrandPresentationPreference;
|
|
38
|
+
brandDisplay: BrandDisplayMode;
|
|
39
|
+
logoSize: LogoSizePolicy;
|
|
40
|
+
navFontRole: HeaderNavTypographyPreference;
|
|
41
|
+
navTextSize: HeaderNavFontSizePreference;
|
|
42
|
+
interactionPalette: HeaderInteractionPalettePreference;
|
|
43
|
+
background: SiteChromeBackgroundOverride;
|
|
44
|
+
structure: HeaderStructurePreferences;
|
|
45
|
+
}>;
|
|
46
|
+
export declare const defaultHeaderStructurePreferences: HeaderStructurePreferences;
|
|
47
|
+
export declare const defaultHeaderPreferences: HeaderPreferences;
|
|
48
|
+
/**
|
|
49
|
+
* The written-down backfill rule (#1318 Phase 4a): compare the persisted value
|
|
50
|
+
* against the value the row's own (layout, recipe) compiles, and emit
|
|
51
|
+
* `'inherit'` when they are equal, the explicit value when they are not.
|
|
52
|
+
*
|
|
53
|
+
* Equal-to-default therefore collapses to `'inherit'`. Nothing in the data
|
|
54
|
+
* distinguishes a deliberate "sticky, same as the default" from an untouched
|
|
55
|
+
* row, so the backfill does not pretend to recover it; going forward the editor
|
|
56
|
+
* records what the user picks and the distinction is real for new intent.
|
|
57
|
+
*
|
|
58
|
+
* Two qualifications on "the value it compiles", both of which keep the rule
|
|
59
|
+
* from inventing intent:
|
|
60
|
+
*
|
|
61
|
+
* 1. A value that no vocabulary accepts expresses nothing, so it derives to
|
|
62
|
+
* `'inherit'` rather than to whatever a fallback would have picked.
|
|
63
|
+
* 2. A field a later pipeline step overwrites unconditionally cannot carry
|
|
64
|
+
* intent at all. That is `shrinkOnScroll` on a display-logo row — see
|
|
65
|
+
* `headerBrandPresentationForcesShrink`.
|
|
66
|
+
*/
|
|
67
|
+
export declare function readHeaderStructurePreferences(persisted: ThemeHeader, compiled: ThemeHeader): HeaderStructurePreferences;
|
|
68
|
+
/**
|
|
69
|
+
* Total over any persisted theme, including a malformed one: every field goes
|
|
70
|
+
* through a reader that closes over the vocabulary rather than trusting the
|
|
71
|
+
* stored value.
|
|
72
|
+
*
|
|
73
|
+
* `compiledHeader` is the structure baseline — the header this row's own
|
|
74
|
+
* (layout, recipe) compiles. It is a required parameter rather than something
|
|
75
|
+
* derived inside, because a `Theme` alone does not carry the selection ids the
|
|
76
|
+
* baseline needs; asking the caller for it keeps the rule single-valued.
|
|
77
|
+
*
|
|
78
|
+
* `navTextSize` is derived against that same baseline rather than read off
|
|
79
|
+
* `header.navTextSize` (#1318 Phase 4c decision 1). It is the one nav field a
|
|
80
|
+
* pre-preferences row could express only through the compiled bytes, so
|
|
81
|
+
* reading the marker alone loses it — see
|
|
82
|
+
* `readHeaderNavFontSizeAgainstBaseline`. `navFontRole` stays a marker read:
|
|
83
|
+
* unlike size, `navLinkStyle.typography` is written by the recipe's own
|
|
84
|
+
* treatment on every row, so a baseline comparison there would report the
|
|
85
|
+
* treatment's default role as user intent.
|
|
86
|
+
*
|
|
87
|
+
* `interactionPaletteGroup` is the palette the row's resolved recipe offers,
|
|
88
|
+
* and the same reasoning applies to it (#1318 Phase 4c decision 2): a row that
|
|
89
|
+
* predates the palette carries its hover treatment in the compiled bytes and
|
|
90
|
+
* nothing in `header.interactionPalette`. `undefined` means the caller does not
|
|
91
|
+
* know which palette applies — it is not "the style has none" — and the marker
|
|
92
|
+
* read stands.
|
|
93
|
+
*
|
|
94
|
+
* `brandPresentationCandidates` are the two headers the two presentation modes
|
|
95
|
+
* produce for this row. The mode is derived by comparing the persisted `logo`
|
|
96
|
+
* against both, so a row that carries no presentation block keeps having none
|
|
97
|
+
* instead of being given one it has never rendered (#1318 Phase 4c decision
|
|
98
|
+
* 5b). They are supplied rather than rebuilt here because they are the
|
|
99
|
+
* compilation's own output, and a second construction of them would be a second
|
|
100
|
+
* authority on what the modes mean — `headerBrandPresentationCandidates` builds
|
|
101
|
+
* them with the real appliers.
|
|
102
|
+
*/
|
|
103
|
+
export declare function readHeaderPreferences(theme: Theme, compiledHeader: ThemeHeader, interactionPaletteGroup: HeaderInteractionPaletteOptionGroup | undefined, brandPresentationCandidates: HeaderBrandPresentationCandidates): HeaderPreferences;
|
|
104
|
+
/** The header each brand-presentation mode compiles to, for one row. */
|
|
105
|
+
export type HeaderBrandPresentationCandidates = Readonly<{
|
|
106
|
+
recommended: ThemeHeader;
|
|
107
|
+
plain: ThemeHeader;
|
|
108
|
+
}>;
|
|
109
|
+
/**
|
|
110
|
+
* Both candidates, built with the same two appliers the pipeline uses.
|
|
111
|
+
*
|
|
112
|
+
* There is no circularity to resolve: the only record fields that reach
|
|
113
|
+
* `header.logo` are `brandDisplay` and `logoSize`, and those are read straight
|
|
114
|
+
* off the persisted theme rather than derived. The structure preferences run
|
|
115
|
+
* before the presentation in the named order but touch `positioning`,
|
|
116
|
+
* `shrinkOnScroll` and `logoText` — never `logo` — so leaving them out here
|
|
117
|
+
* cannot change either answer.
|
|
118
|
+
*
|
|
119
|
+
* One known over-specification, recorded rather than fixed because it changes
|
|
120
|
+
* no bytes. `applyHeaderBrandPresentation` reads `positioning` when it decides
|
|
121
|
+
* whether to force `shrinkOnScroll` for a display logo, and it sees the
|
|
122
|
+
* *structure-adjusted* value at apply time while it sees the layout default
|
|
123
|
+
* here. On a `'recommended'` row that overrides positioning to `'static'` the
|
|
124
|
+
* candidate can therefore carry a forced `shrinkOnScroll` the applied header
|
|
125
|
+
* will not, which makes `readHeaderStructurePreferences` emit an explicit
|
|
126
|
+
* `shrinkOnScroll` where `'inherit'` would have done. The record is more
|
|
127
|
+
* specific than it needs to be; the compiled bytes are identical either way,
|
|
128
|
+
* because the explicit value it writes is the one the row already has. Fixing
|
|
129
|
+
* it means deriving `positioning` before the candidates, which is a second
|
|
130
|
+
* derivation pass for no byte change (#1318 Phase 4c review round 2, item 10).
|
|
131
|
+
*/
|
|
132
|
+
export declare function headerBrandPresentationCandidates(theme: Theme, compiledBaseline: ThemeHeader, presentation: HeaderBrandPresentationSelection | null): HeaderBrandPresentationCandidates;
|
|
133
|
+
export declare function applyHeaderStructurePreferences(header: ThemeHeader, preferences: HeaderStructurePreferences): ThemeHeader;
|
|
134
|
+
/**
|
|
135
|
+
* The brand presentation step, which sits between the structure preferences and
|
|
136
|
+
* the nav/logo/background ones because it reads `positioning` and can force
|
|
137
|
+
* `shrinkOnScroll` for a display logo (`previewCompiler.ts`).
|
|
138
|
+
*/
|
|
139
|
+
/**
|
|
140
|
+
* Writes a resolved brand presentation onto the header. Lives here rather than
|
|
141
|
+
* in `previewCompiler` so the pipeline step has one definition: it sits between
|
|
142
|
+
* the structure preferences and the nav/logo/background ones, and it is the
|
|
143
|
+
* reason that position is load-bearing — it reads `positioning` and can force
|
|
144
|
+
* `shrinkOnScroll` for a display logo that brings its own backing.
|
|
145
|
+
*/
|
|
146
|
+
export declare function applyHeaderBrandPresentation(header: ThemeHeader, presentation: HeaderBrandPresentationSelection): ThemeHeader;
|
|
147
|
+
/**
|
|
148
|
+
* The preference half of the header pipeline, composed once so that no caller
|
|
149
|
+
* assembles its own order. Named order, tail of the recompile:
|
|
150
|
+
*
|
|
151
|
+
* structure preferences → brand presentation → brand display/logo size
|
|
152
|
+
* → nav preferences → header background override
|
|
153
|
+
*
|
|
154
|
+
* `brandPresentation` is data rather than a callback so the step is inspectable
|
|
155
|
+
* and cannot vary by caller; `null` is "this caller has no logo context".
|
|
156
|
+
*
|
|
157
|
+
* The background applier is the header-only one on purpose: the header+footer
|
|
158
|
+
* pair function would clobber footer intent (#1318 Correction 20).
|
|
159
|
+
*/
|
|
160
|
+
export declare function applyHeaderPreferences(theme: Theme, preferences: HeaderPreferences, brandPresentation: HeaderBrandPresentationSelection | null): Theme;
|
|
161
|
+
/** The fields authored by header quick controls; structure and presentation belong to the row. */
|
|
162
|
+
export type HeaderQuickControlPreferences = Pick<HeaderPreferences, 'brandDisplay' | 'logoSize' | 'navFontRole' | 'navTextSize' | 'interactionPalette' | 'background'>;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { type SiteChromeBackgroundColorToken } from './siteChromeBackgrounds';
|
|
3
|
+
import type { HeaderPreferences } from './headerPreferences';
|
|
4
|
+
/**
|
|
5
|
+
* The persisted shape of `HeaderPreferences`, closed at every field.
|
|
6
|
+
*
|
|
7
|
+
* `.strict()` throughout is deliberate: an unknown key in the stored blob means
|
|
8
|
+
* the writer knew about a field this reader does not, and silently dropping it
|
|
9
|
+
* would let a save round-trip away someone else's intent. Every field is
|
|
10
|
+
* required for the same reason a default would be a hidden authority: a stored
|
|
11
|
+
* record that omits one is not a record this reader may complete.
|
|
12
|
+
*/
|
|
13
|
+
export declare const headerPreferencesSchema: z.ZodType<HeaderPreferences>;
|
|
14
|
+
/** Only controls the client can edit may cross the write boundary. */
|
|
15
|
+
export declare const headerPreferencesWireSchema: z.ZodObject<{
|
|
16
|
+
background: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
17
|
+
kind: z.ZodLiteral<"default">;
|
|
18
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
19
|
+
kind: z.ZodLiteral<"color">;
|
|
20
|
+
token: z.ZodType<SiteChromeBackgroundColorToken, unknown, z.core.$ZodTypeInternals<SiteChromeBackgroundColorToken, unknown>>;
|
|
21
|
+
}, z.core.$strict>], "kind">;
|
|
22
|
+
navTextSize: z.ZodEnum<{
|
|
23
|
+
base: "base";
|
|
24
|
+
sm: "sm";
|
|
25
|
+
lg: "lg";
|
|
26
|
+
xl: "xl";
|
|
27
|
+
inherit: "inherit";
|
|
28
|
+
}>;
|
|
29
|
+
navFontRole: z.ZodEnum<{
|
|
30
|
+
heading: "heading";
|
|
31
|
+
body: "body";
|
|
32
|
+
inherit: "inherit";
|
|
33
|
+
}>;
|
|
34
|
+
interactionPalette: z.ZodUnion<readonly [z.ZodLiteral<"recommended">, z.ZodEnum<{
|
|
35
|
+
primary: "primary";
|
|
36
|
+
secondary: "secondary";
|
|
37
|
+
accent: "accent";
|
|
38
|
+
quiet: "quiet";
|
|
39
|
+
}>]>;
|
|
40
|
+
brandDisplay: z.ZodEnum<{
|
|
41
|
+
auto: "auto";
|
|
42
|
+
"logo-only": "logo-only";
|
|
43
|
+
"logo-plus-title": "logo-plus-title";
|
|
44
|
+
"title-only": "title-only";
|
|
45
|
+
}>;
|
|
46
|
+
logoSize: z.ZodEnum<{
|
|
47
|
+
display: "display";
|
|
48
|
+
auto: "auto";
|
|
49
|
+
standard: "standard";
|
|
50
|
+
compact: "compact";
|
|
51
|
+
generous: "generous";
|
|
52
|
+
}>;
|
|
53
|
+
}, z.core.$strict>;
|
|
54
|
+
/**
|
|
55
|
+
* The read boundary for `site_theme_selections.header_preferences`.
|
|
56
|
+
*
|
|
57
|
+
* Three outcomes, never a throw and never a silent default: the column is
|
|
58
|
+
* nullable while the Phase 4c backfill is outstanding, so "absent" is a real
|
|
59
|
+
* and expected state that a caller must handle by deriving from the legacy
|
|
60
|
+
* theme with `readHeaderPreferences`. "Invalid" is separate from "absent"
|
|
61
|
+
* because the two want different responses — one is a backlog item, the other
|
|
62
|
+
* is a bug or a hand-edited row.
|
|
63
|
+
*/
|
|
64
|
+
export type PersistedHeaderPreferences = Readonly<{
|
|
65
|
+
kind: 'present';
|
|
66
|
+
preferences: HeaderPreferences;
|
|
67
|
+
}> | Readonly<{
|
|
68
|
+
kind: 'absent';
|
|
69
|
+
}> | Readonly<{
|
|
70
|
+
kind: 'invalid';
|
|
71
|
+
issues: readonly string[];
|
|
72
|
+
}>;
|
|
73
|
+
export declare function parsePersistedHeaderPreferences(value: unknown): PersistedHeaderPreferences;
|