@riverbankcms/sdk 0.82.0 → 0.84.1
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 +16 -0
- package/dist/{PreviewEditorSidebar-LHGK6RIO.mjs → PreviewEditorSidebar-X7RLMEI6.mjs} +330 -11
- package/dist/{PreviewEditorUI-AXZG2SDC.mjs → PreviewEditorUI-CT67N4O3.mjs} +3 -3
- package/dist/SdkPreviewModeRuntime-EIMQ3S2V.mjs +8 -0
- package/dist/_dts/ai/src/contracts/proposals.d.ts +200 -0
- package/dist/_dts/api/src/blocks.d.ts +36 -0
- package/dist/_dts/api/src/contentRuntime.d.ts +46 -0
- package/dist/_dts/api/src/endpoints.d.ts +40 -0
- package/dist/_dts/api/src/index.d.ts +2 -2
- package/dist/_dts/api/src/sdk-event-pricing.d.ts +61 -0
- package/dist/_dts/api/src/sdk-event-schedule.d.ts +52 -0
- package/dist/_dts/api/src/sdk-event-upsert.d.ts +50 -0
- package/dist/_dts/api/src/sdkContracts.d.ts +67 -33
- package/dist/_dts/api/src/shared-contracts.d.ts +13 -0
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +22 -36
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +46 -1
- package/dist/_dts/block-form/src/backend/useBackendWatch.d.ts +6 -1
- package/dist/_dts/block-form/src/utils/evaluateVisibility.d.ts +3 -2
- package/dist/_dts/block-form/src/utils/visibleWhen.d.ts +7 -0
- package/dist/_dts/blocks/src/PageRenderer.d.ts +11 -0
- package/dist/_dts/blocks/src/bindings/index.d.ts +1 -1
- package/dist/_dts/blocks/src/client/site-chrome.d.ts +1 -1
- package/dist/_dts/blocks/src/client.d.ts +4 -0
- package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +16 -4
- package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +171 -0
- package/dist/_dts/blocks/src/system/blocks/faq.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/hero.d.ts +3 -2
- package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -7
- package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +2534 -151
- package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -2016
- package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +36 -3
- package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +2 -2
- package/dist/_dts/blocks/src/system/constants/blockKinds.d.ts +1 -1
- package/dist/_dts/blocks/src/system/fields/aspectRatio.d.ts +4 -1
- package/dist/_dts/blocks/src/system/fields/imageShape.d.ts +30 -0
- package/dist/_dts/blocks/src/system/fragments/library/heroLayoutControls.d.ts +25 -0
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +35 -161
- package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +24 -6
- package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +12 -3
- package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +33 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/EventRegistrationWizard.d.ts +0 -2
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/constants.d.ts +1 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +275 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.override.d.ts +10 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.planning.d.ts +22 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.state.d.ts +3 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +20 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +13 -4
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/utils.d.ts +1 -1
- package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +28 -6
- package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/pricing.d.ts +14 -0
- package/dist/_dts/content-editor/src/controller/EntryControllerProvider.d.ts +1 -1
- package/dist/_dts/content-editor/src/controller/buildBlockPublishedBaselines.d.ts +1 -1
- package/dist/_dts/content-editor/src/controller/seedDraftBaselinesFromBlocks.d.ts +1 -1
- package/dist/_dts/content-editor/src/controller/useBlocksList.d.ts +1 -1
- package/dist/_dts/content-editor/src/controller/useInvalidBlockRecovery.d.ts +1 -1
- package/dist/_dts/content-editor/src/primitives/PreviewRichTextEditor.d.ts +2 -1
- package/dist/_dts/content-editor/src/primitives/PreviewTextEditor.d.ts +1 -0
- package/dist/_dts/content-model/src/entry-slots/index.d.ts +1 -0
- package/dist/_dts/content-model/src/entry-slots/types.d.ts +356 -0
- package/dist/_dts/content-model/src/index.d.ts +1 -0
- package/dist/_dts/content-model/src/templates/defaults.d.ts +7 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +100 -5
- package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +6 -1
- package/dist/_dts/editor-blocks/src/BlockForm.d.ts +7 -5
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockCreation.d.ts +3 -2
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockDuplication.d.ts +3 -2
- package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockReorder.d.ts +3 -2
- package/dist/_dts/editor-blocks/src/block-editor/owner.d.ts +27 -0
- package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
- package/dist/_dts/media-core/src/assetsInUseSummary.d.ts +8 -0
- package/dist/_dts/media-core/src/mediaUsageProjection.d.ts +37 -3
- package/dist/_dts/preview-next/src/client/blocks/pageDesignRuntimePreview.d.ts +4 -2
- package/dist/_dts/preview-next/src/client/blocks/previewProjection/runtimeContentDecoration.d.ts +2 -2
- package/dist/_dts/preview-next/src/client/preview/EntryEditorPanel.d.ts +3 -1
- package/dist/_dts/preview-next/src/client/preview/EntrySlotBlockEditorPanel.d.ts +19 -0
- package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeButton.d.ts +8 -0
- package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -1
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -1
- package/dist/_dts/preview-next/src/client/preview/linkedEntryEditEvents.d.ts +9 -0
- package/dist/_dts/preview-next/src/client/preview/previewCustomizeControls.d.ts +9 -8
- package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +10 -1
- package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +5 -1
- package/dist/_dts/sdk/src/bookings/index.d.ts +5 -4
- package/dist/_dts/sdk/src/bookings/types.d.ts +2 -2
- package/dist/_dts/sdk/src/cli/content/reader.d.ts +9 -8
- package/dist/_dts/sdk/src/cli/content/writer.d.ts +6 -1
- package/dist/_dts/sdk/src/cli/helpers.d.ts +10 -5
- package/dist/_dts/sdk/src/cli/merge-remote/entryLocal.d.ts +2 -2
- package/dist/_dts/sdk/src/cli/merge-remote/entryMerge.d.ts +2 -1
- package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -2
- package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
- package/dist/_dts/sdk/src/client/management/types.d.ts +40 -10
- package/dist/_dts/sdk/src/config/field-definitions.d.ts +13 -7
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +26 -3
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +13 -0
- package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
- package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +6 -1
- package/dist/_dts/sdk/src/rendering/overrides.d.ts +6 -1
- package/dist/_dts/sdk/src/types/block-kinds.d.ts +1 -1
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/site-commands/src/commands.d.ts +15 -0
- package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
- package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +11 -0
- package/dist/_dts/theme-core/src/buttons/personalities/ornate-ritual.d.ts +16 -0
- package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +1 -1
- package/dist/_dts/theme-core/src/buttons/types.d.ts +3 -3
- package/dist/_dts/theme-core/src/cards/types.d.ts +15 -15
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/inputs/types.d.ts +1 -1
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +33 -33
- package/dist/_dts/theme-core/src/palette/variants/index.d.ts +15 -0
- package/dist/_dts/theme-core/src/palette/variants/warm-dark.d.ts +16 -0
- package/dist/_dts/theme-core/src/schema.d.ts +30 -25
- package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
- package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +141 -1
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +2 -0
- package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +110 -5
- package/dist/_dts/theme-core/src/site-styles/generatedSchemas.d.ts +4 -2
- package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +5 -1
- package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/types.d.ts +1 -1
- package/dist/_dts/theme-core/src/site-styles/typographyPresets.d.ts +16 -1
- package/dist/_dts/theme-core/src/siteChromePlanning.d.ts +1 -0
- package/dist/_dts/theme-core/src/utils/colorStyles.d.ts +6 -6
- package/dist/{chunk-2BUMISSH.mjs → chunk-3LXFQS7T.mjs} +1 -1
- package/dist/{chunk-FIREV57T.mjs → chunk-LBBPD2IW.mjs} +40 -0
- package/dist/{chunk-XQR6THQJ.mjs → chunk-O62NDCTI.mjs} +3390 -1331
- package/dist/{chunk-6FWNF3DJ.mjs → chunk-QRKJDWT7.mjs} +158 -20
- package/dist/{chunk-HKB6XVIP.mjs → chunk-RCTJAZSK.mjs} +2 -2
- package/dist/{chunk-G35HOQEN.mjs → chunk-X5ZCSU6F.mjs} +132 -46
- package/dist/cli/index.mjs +2925 -577
- package/dist/cli/init-docs/content/agents-section.md +5 -0
- package/dist/cli/init-docs/content/cli-reference.md +13 -0
- package/dist/cli/init-docs/content/content-management.md +31 -0
- package/dist/cli/init-docs/content/getting-started.md +14 -0
- package/dist/cli/init-docs/content/workflow-add-block.md +3 -1
- package/dist/cli/init-docs/content/workflow-agent-safe-sync.md +81 -0
- package/dist/cli/init-docs/content/workflow-create-page.md +13 -3
- package/dist/cli/init-docs/content/workflow-custom-block.md +9 -0
- package/dist/cli/init-docs/content/workflow-templates.md +107 -2
- package/dist/client/{accordion-G34C45TW.mjs → accordion-2UZPBMYM.mjs} +2 -2
- package/dist/client/{bookingForm-BLBVKSAQ.mjs → bookingForm-DYXT6YB6.mjs} +5 -5
- package/dist/client/bookings.mjs +3477 -186
- package/dist/client/{carousel-7ZVTBRMD.mjs → carousel-QH77HR6X.mjs} +3 -3
- package/dist/client/{cart-Q6S6LZUO.mjs → cart-X4YK4FTW.mjs} +6 -6
- package/dist/client/{checkout-5QJLDE4I.mjs → checkout-OM2BEPWD.mjs} +6 -6
- package/dist/client/{chunk-ZF4XEWDM.mjs → chunk-3DTWLTXM.mjs} +1 -1
- package/dist/client/{chunk-5PQH4Y75.mjs → chunk-4OXKTA3D.mjs} +2 -2
- package/dist/client/{chunk-WJFHDTYF.mjs → chunk-52CGCQ7B.mjs} +5 -5
- package/dist/client/{chunk-CHAB5ACD.mjs → chunk-7UCLJ5SP.mjs} +2 -2
- package/dist/client/{chunk-U2EW7RSR.mjs → chunk-F5VRX5Y6.mjs} +1 -1
- package/dist/client/{chunk-SBBSMFFG.mjs → chunk-SYIJ5JO2.mjs} +1 -1
- package/dist/client/{chunk-EQKYMX4N.mjs → chunk-UHDWIXVR.mjs} +180 -157
- package/dist/client/{chunk-RJHTCTCZ.mjs → chunk-VGDBVNOO.mjs} +429 -15
- package/dist/client/{chunk-S3MKFGOG.mjs → chunk-ZE5G642V.mjs} +1 -1
- package/dist/client/{chunk-CSZGLBYR.mjs → chunk-ZKUO52W3.mjs} +1 -1
- package/dist/client/client.mjs +2685 -847
- package/dist/client/{courseRegistration-VUG2JJDB.mjs → courseRegistration-YBOGURTA.mjs} +5 -5
- package/dist/client/{eventCalendar-E7D2LD4N.mjs → eventCalendar-K4QJVCMD.mjs} +7 -7
- package/dist/client/{eventCombined-FUZ2Z3CS.mjs → eventCombined-MTXGMTCZ.mjs} +7 -7
- package/dist/client/{eventDetails-QRITJAOW.mjs → eventDetails-3PC4NL3U.mjs} +7 -7
- package/dist/client/{eventListing-INMQMJZ5.mjs → eventListing-TFJET6DN.mjs} +7 -7
- package/dist/client/{eventRegistration-TOOJD4WU.mjs → eventRegistration-QGPBGJTW.mjs} +7 -7
- package/dist/client/{form-BOWN7ZNQ.mjs → form-MDKR4FNB.mjs} +2 -2
- package/dist/client/{headerSection-HFQNZOUU.mjs → headerSection-Y5TMR3TW.mjs} +3 -3
- package/dist/client/hooks.mjs +2077 -546
- package/dist/client/{locationMap-VUZGC7Y5.mjs → locationMap-RH2LG7FZ.mjs} +2 -2
- package/dist/client/{newsletterForm-X2XQTPCB.mjs → newsletterForm-ZR5UDGBT.mjs} +2 -2
- package/dist/client/{productDetail-TA7D2G2B.mjs → productDetail-OIGDR4YE.mjs} +6 -6
- package/dist/client/{productList-AZOLOZKM.mjs → productList-4MA5S2CX.mjs} +6 -6
- package/dist/client/rendering/client.mjs +2560 -1205
- package/dist/client/rendering/islands.mjs +19 -19
- package/dist/client/rendering.mjs +2932 -1021
- package/dist/client/{shop-ZDLO7IIG.mjs → shop-WXSYV5QO.mjs} +6 -6
- package/dist/preview-next/before-render.mjs +40 -0
- package/dist/preview-next/client/runtime.mjs +5 -5
- package/dist/preview-next/middleware.mjs +40 -0
- package/dist/{sdk-runtime-CTWKNBDQ.mjs → sdk-runtime-7HJYPRWQ.mjs} +6 -6
- package/dist/server/components.mjs +2232 -534
- package/dist/server/config-validation.mjs +2068 -536
- package/dist/server/config.mjs +2068 -536
- package/dist/server/data.mjs +2077 -546
- package/dist/server/index.mjs +42 -1
- package/dist/server/next.mjs +2345 -574
- package/dist/server/page-converter.mjs +2684 -1220
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +2244 -546
- package/dist/server/rendering.mjs +2323 -552
- package/dist/server/routing.mjs +2012 -420
- package/dist/server/server.mjs +2153 -549
- package/dist/server/theme-bridge.mjs +1180 -101
- package/dist/server/theme.mjs +92 -1
- package/dist/styles/index.css +292 -36
- package/package.json +1 -1
- package/dist/SdkPreviewModeRuntime-RNVRHFFR.mjs +0 -8
|
@@ -25,6 +25,7 @@ Detailed documentation is available in `.riverbank/docs/`:
|
|
|
25
25
|
- `block-types.md` - Available block types (auto-generated)
|
|
26
26
|
- `theme-schema.md` - Theme schema reference (auto-generated from Zod)
|
|
27
27
|
- `workflows/` - Step-by-step guides for common tasks, including editor workflows
|
|
28
|
+
- `workflows/agent-safe-sync.md` - Agent-safe dry-run, scoped push, and `--env` guidance
|
|
28
29
|
- `site-workflows/` - Site-specific workflows and customizations
|
|
29
30
|
|
|
30
31
|
### Quick Commands
|
|
@@ -36,6 +37,8 @@ riverbankcms push # Push local changes to CMS
|
|
|
36
37
|
riverbankcms push-config # Sync riverbank.config.ts schema/config to CMS
|
|
37
38
|
```
|
|
38
39
|
|
|
40
|
+
Use CLI `--env=remote` / `--env=local` for CMS commands rather than relying on `RIVERBANK_ENV=...` shell prefixes. Site `.env.local` files may set `RIVERBANK_ENV`, and the CLI flag is the explicit source of truth for sync operations.
|
|
41
|
+
|
|
39
42
|
### Working with Content
|
|
40
43
|
|
|
41
44
|
1. **Pull latest**: `riverbankcms pull` downloads content to `content/` directory
|
|
@@ -43,6 +46,8 @@ riverbankcms push-config # Sync riverbank.config.ts schema/config to CMS
|
|
|
43
46
|
3. **Preview**: `riverbankcms push --dry-run` shows what would change
|
|
44
47
|
4. **Push**: `riverbankcms push` applies changes to CMS
|
|
45
48
|
|
|
49
|
+
For narrow edits, push the narrowest scope possible, for example `riverbankcms push pages privacy-policy --env=remote --dry-run`. If broad local content is stale or contains unrelated differences, see `.riverbank/docs/workflows/agent-safe-sync.md`.
|
|
50
|
+
|
|
46
51
|
### Editing Page Content Directly
|
|
47
52
|
|
|
48
53
|
Page content lives in `content/pages/[identifier].json`. Each page has a `blocks` array containing the actual content. To edit copy:
|
|
@@ -25,6 +25,8 @@ All commands support these options:
|
|
|
25
25
|
- Remote operations default to dry-run and require `--yes` to execute
|
|
26
26
|
- When using `--env=both`, local runs first, then remote with the same safety rules
|
|
27
27
|
|
|
28
|
+
Prefer the CLI `--env` flag over shell prefixes such as `RIVERBANK_ENV=remote riverbankcms ...`. Site `.env.local` files may define `RIVERBANK_ENV`, and command-specific `--env` is the reliable way to target local or remote CMS sync.
|
|
29
|
+
|
|
28
30
|
## Environment Variables
|
|
29
31
|
|
|
30
32
|
### Local Environment (default)
|
|
@@ -148,6 +150,15 @@ riverbankcms push --dry-run --json-diff=summary
|
|
|
148
150
|
riverbankcms push --dry-run --json-diff=full
|
|
149
151
|
```
|
|
150
152
|
|
|
153
|
+
**Agent-safe scoped push example:**
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
riverbankcms push pages privacy-policy --env=remote --dry-run
|
|
157
|
+
riverbankcms push pages privacy-policy --env=remote --yes
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
If unrelated local files would be included by a broad scope, stage a temporary content directory containing only the intended file(s) and use `--content-dir`; see `workflows/agent-safe-sync.md`.
|
|
161
|
+
|
|
151
162
|
**Options:**
|
|
152
163
|
|
|
153
164
|
| Option | Description |
|
|
@@ -284,6 +295,8 @@ riverbankcms push-config --config ./src/riverbank.config.ts
|
|
|
284
295
|
|
|
285
296
|
Syncs SDK schema/config surfaces such as custom blocks, block field options/extensions, content type definitions/templates, SDK-managed site settings, and footer blocks. Pages, entries, and navigation menus are synced with explicit `riverbankcms push` scopes.
|
|
286
297
|
|
|
298
|
+
If `push-config` returns template binding validation errors, treat them as schema feedback. For example, a content type `reference` field should bind to a custom block `reference` field with the same `referenceKind`, not to a plain `text` field.
|
|
299
|
+
|
|
287
300
|
This syncs:
|
|
288
301
|
|
|
289
302
|
- Custom blocks
|
|
@@ -314,6 +314,35 @@ riverbankcms push --dry-run
|
|
|
314
314
|
riverbankcms push
|
|
315
315
|
```
|
|
316
316
|
|
|
317
|
+
For agent work, prefer scoped pushes over broad pushes:
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
# One page
|
|
321
|
+
riverbankcms push pages privacy-policy --env=remote --dry-run
|
|
322
|
+
riverbankcms push pages privacy-policy --env=remote --yes
|
|
323
|
+
|
|
324
|
+
# One content type or entry
|
|
325
|
+
riverbankcms push entries blog-post --env=remote --dry-run
|
|
326
|
+
riverbankcms push entries blog-post welcome --env=remote --dry-run
|
|
327
|
+
```
|
|
328
|
+
|
|
329
|
+
Use CLI `--env=local` / `--env=remote` rather than `RIVERBANK_ENV=...` shell prefixes for sync commands. Site `.env.local` files may set `RIVERBANK_ENV`, while the CLI flag explicitly selects the sync target.
|
|
330
|
+
|
|
331
|
+
If local files include unrelated page or entry differences, isolate the changed files with `--content-dir`:
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
tmpdir=$(mktemp -d)
|
|
335
|
+
mkdir -p "$tmpdir/pages"
|
|
336
|
+
cp content/pages/privacy-policy.json "$tmpdir/pages/privacy-policy.json"
|
|
337
|
+
|
|
338
|
+
riverbankcms push pages --content-dir "$tmpdir" --env=remote --dry-run
|
|
339
|
+
riverbankcms push pages --content-dir "$tmpdir" --env=remote --yes
|
|
340
|
+
|
|
341
|
+
rm -rf "$tmpdir"
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
See `workflows/agent-safe-sync.md` for the full safe-push checklist.
|
|
345
|
+
|
|
317
346
|
### Sync Configuration
|
|
318
347
|
|
|
319
348
|
Configure sync behavior in `riverbank.config.ts`:
|
|
@@ -328,6 +357,8 @@ export default defineConfig({
|
|
|
328
357
|
});
|
|
329
358
|
```
|
|
330
359
|
|
|
360
|
+
`push-config` syncs schema/config surfaces such as custom blocks, block extensions/options, content type schemas/templates, SDK-managed settings, and footer blocks. It does not replace `push pages`, `push entries`, or `push navigation` for file-backed content.
|
|
361
|
+
|
|
331
362
|
| Option | Values | Description |
|
|
332
363
|
| ----------------- | ---------------- | -------------------------------------------- |
|
|
333
364
|
| `existingEntries` | `skip`, `update` | Whether to update entries that already exist |
|
|
@@ -80,6 +80,8 @@ riverbankcms push
|
|
|
80
80
|
|
|
81
81
|
If your SDK site uses `createCatchAllPage()`, you can render with local theme objects (and switch themes at runtime) without pushing theme changes to the CMS. See `cli-reference.md` for theme pull/push commands and the SDK README for the `createCatchAllPage({ themes, themeSwitch })` API.
|
|
82
82
|
|
|
83
|
+
Event registration blocks need both the SDK base stylesheet and a runtime theme scope. Generated SDK pages that render inside `Layout` get `ThemeScope` by default. Standalone `Page` or `Block` usage should wrap registration content in `ThemeBridgeProvider` or manual `generateThemeBridgeCss` with a `data-theme-scope="sdk"` wrapper; keep visual changes in scoped CSS variables instead of forking booking logic.
|
|
84
|
+
|
|
83
85
|
## Key Documentation
|
|
84
86
|
|
|
85
87
|
| Document | Purpose |
|
|
@@ -90,6 +92,7 @@ If your SDK site uses `createCatchAllPage()`, you can render with local theme ob
|
|
|
90
92
|
| `block-types.md` | Available block types (auto-generated) |
|
|
91
93
|
| `theme-schema.md` | Theme schema reference (auto-generated from Zod) |
|
|
92
94
|
| `workflows/` | Step-by-step guides for common tasks, including editor workflows |
|
|
95
|
+
| `workflows/agent-safe-sync.md` | Agent-safe dry-run, scoped push, and stale-content handling |
|
|
93
96
|
|
|
94
97
|
## Common Tasks
|
|
95
98
|
|
|
@@ -136,6 +139,17 @@ riverbankcms push --env=remote --yes
|
|
|
136
139
|
|
|
137
140
|
**Safety note:** Remote push requires `--yes` flag to prevent accidental production changes.
|
|
138
141
|
|
|
142
|
+
Prefer the CLI `--env` flag over shell prefixes such as `RIVERBANK_ENV=remote riverbankcms ...`. Site `.env.local` files often contain their own `RIVERBANK_ENV` value, while `--env=remote` is explicit and reliable for CLI sync commands.
|
|
143
|
+
|
|
144
|
+
For narrow production edits, dry-run and apply the smallest scope:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
riverbankcms push pages privacy-policy --env=remote --dry-run
|
|
148
|
+
riverbankcms push pages privacy-policy --env=remote --yes
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
If local content includes unrelated differences, see `workflows/agent-safe-sync.md` for the temporary `--content-dir` pattern.
|
|
152
|
+
|
|
139
153
|
## Media Safety (Avoid Broken Images)
|
|
140
154
|
|
|
141
155
|
- Portable content JSON should store media as **identifier-only** (no `assetId` / storage paths / `src`).
|
|
@@ -25,6 +25,8 @@ View built-in blocks in `block-types.md`. Common block kinds:
|
|
|
25
25
|
|
|
26
26
|
Check `schema.md` for custom blocks specific to this site.
|
|
27
27
|
|
|
28
|
+
Prefer built-in blocks before creating a custom block. For a simple policy/terms/about page, use `block.body-text` and put the page title, intro, and section headings in the rich text body. Only create a custom block when the needed structure or behavior cannot be represented by built-in blocks plus styling.
|
|
29
|
+
|
|
28
30
|
### 2. List Existing Blocks
|
|
29
31
|
|
|
30
32
|
See what blocks are already on the page:
|
|
@@ -62,7 +64,7 @@ Add a body text block:
|
|
|
62
64
|
```bash
|
|
63
65
|
riverbankcms block upsert home intro-content \
|
|
64
66
|
--kind block.body-text \
|
|
65
|
-
--data '{"content": "
|
|
67
|
+
--data '{"body": {"type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Welcome to our site. We offer..."}]}]}}'
|
|
66
68
|
```
|
|
67
69
|
|
|
68
70
|
Add an image block:
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Workflow: Agent-Safe Sync
|
|
2
|
+
|
|
3
|
+
Use this workflow when an agent needs to push a narrow CMS change without overwriting unrelated dashboard edits.
|
|
4
|
+
|
|
5
|
+
## Golden Rules
|
|
6
|
+
|
|
7
|
+
1. Prefer the CLI `--env` flag over shell environment overrides.
|
|
8
|
+
2. Dry-run the exact scope you plan to apply.
|
|
9
|
+
3. Push the narrowest possible content scope.
|
|
10
|
+
4. Treat stale-content warnings as evidence of unrelated remote edits.
|
|
11
|
+
5. Use `push-config` for schema/config only; use `push` for pages, entries, navigation, settings, and other content files.
|
|
12
|
+
|
|
13
|
+
## Environment Targeting
|
|
14
|
+
|
|
15
|
+
Use the CLI environment flag:
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
riverbankcms pull --env=remote
|
|
19
|
+
riverbankcms push pages privacy-policy --env=remote --dry-run
|
|
20
|
+
riverbankcms push-config --env=remote
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Do not rely on `RIVERBANK_ENV=remote riverbankcms ...` for CLI sync commands. Site projects often load `.env.local`, and an existing `RIVERBANK_ENV=local` value can override the shell value in config-loading paths. The CLI `--env` flag is explicit and survives project env defaults.
|
|
24
|
+
|
|
25
|
+
## Narrow Page Push
|
|
26
|
+
|
|
27
|
+
For a single page, push the page identifier rather than all pages:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
riverbankcms push pages privacy-policy --env=remote --dry-run --force
|
|
31
|
+
riverbankcms push pages privacy-policy --env=remote --yes --force
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
If you need to isolate a local file snapshot from the rest of `content/pages`, use a temporary content directory:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
tmpdir=$(mktemp -d)
|
|
38
|
+
mkdir -p "$tmpdir/pages"
|
|
39
|
+
cp content/pages/privacy-policy.json "$tmpdir/pages/privacy-policy.json"
|
|
40
|
+
|
|
41
|
+
riverbankcms push pages --content-dir "$tmpdir" --env=remote --dry-run --force
|
|
42
|
+
riverbankcms push pages --content-dir "$tmpdir" --env=remote --yes --force
|
|
43
|
+
|
|
44
|
+
rm -rf "$tmpdir"
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
This is useful when local content files include older or unrelated page differences that should not be pushed.
|
|
48
|
+
|
|
49
|
+
## Stale Content
|
|
50
|
+
|
|
51
|
+
If a push aborts because unrelated remote content is newer:
|
|
52
|
+
|
|
53
|
+
- Do not blindly run a broad `push --force`.
|
|
54
|
+
- Prefer pushing the exact changed page, entry, or navigation scope.
|
|
55
|
+
- Use `--force` only after a dry-run confirms the planned changes are limited to the intended objects.
|
|
56
|
+
- If you truly need the latest remote state, run a scoped pull first, for example `riverbankcms pull pages privacy-policy --env=remote`.
|
|
57
|
+
|
|
58
|
+
## Content vs Config
|
|
59
|
+
|
|
60
|
+
Use these commands for different surfaces:
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# Pages, entries, navigation, settings, forms, footer content, themes
|
|
64
|
+
riverbankcms push <scope> ...
|
|
65
|
+
|
|
66
|
+
# Custom blocks, block extensions/options, content type schemas/templates,
|
|
67
|
+
# SDK-managed settings, footer blocks/layout config
|
|
68
|
+
riverbankcms push-config ...
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
`push-config` does not replace `push pages` or `push entries`; it syncs schema/config surfaces. If config validation fails, read the field errors as schema feedback before working around them in the site.
|
|
72
|
+
|
|
73
|
+
## Before Applying
|
|
74
|
+
|
|
75
|
+
Checklist:
|
|
76
|
+
|
|
77
|
+
- [ ] I used `--env=local`, `--env=remote`, or `--env=both` explicitly.
|
|
78
|
+
- [ ] I ran a dry-run for the same scope and target environment.
|
|
79
|
+
- [ ] The dry-run contains only intended creates/updates/deletes.
|
|
80
|
+
- [ ] I understand any stale-content warnings.
|
|
81
|
+
- [ ] For remote writes, I included `--yes` only after reviewing the dry-run.
|
|
@@ -10,6 +10,16 @@ This workflow guides you through creating a new page in the CMS.
|
|
|
10
10
|
|
|
11
11
|
## Steps
|
|
12
12
|
|
|
13
|
+
### Before You Add Custom Blocks
|
|
14
|
+
|
|
15
|
+
For simple content pages such as privacy policies, terms pages, FAQs, about copy, and editorial articles, start with built-in blocks:
|
|
16
|
+
|
|
17
|
+
- `block.body-text` for long-form rich text
|
|
18
|
+
- `block.hero` only when the page genuinely needs a visual/intro hero
|
|
19
|
+
- `block.cta-full` or existing CTA blocks for action strips
|
|
20
|
+
|
|
21
|
+
Check `block-types.md` before creating a custom block. A plain content page should usually be one `block.body-text` block with an `h1` and intro paragraph in the rich text body, not a site-specific custom block.
|
|
22
|
+
|
|
13
23
|
### 1. Create the Page
|
|
14
24
|
|
|
15
25
|
```bash
|
|
@@ -45,7 +55,7 @@ Add a body text block:
|
|
|
45
55
|
```bash
|
|
46
56
|
riverbankcms block upsert contact intro-text \
|
|
47
57
|
--kind block.body-text \
|
|
48
|
-
--data '{"content": "
|
|
58
|
+
--data '{"body": {"type": "doc", "content": [{"type": "heading", "attrs": {"level": 1}, "content": [{"type": "text", "text": "Contact Us"}]}, {"type": "paragraph", "content": [{"type": "text", "text": "Reach out using the form below or email us directly."}]}]}}'
|
|
49
59
|
```
|
|
50
60
|
|
|
51
61
|
Add more blocks as needed. See `block-types.md` for available block types.
|
|
@@ -159,12 +169,12 @@ riverbankcms block upsert about hero \
|
|
|
159
169
|
# 3. Add introduction text
|
|
160
170
|
riverbankcms block upsert about intro \
|
|
161
171
|
--kind block.body-text \
|
|
162
|
-
--data '{"content": "
|
|
172
|
+
--data '{"body": {"type": "doc", "content": [{"type": "paragraph", "content": [{"type": "text", "text": "Founded in 2020, we have been..."}]}]}}'
|
|
163
173
|
|
|
164
174
|
# 4. Add team section (if using a team block)
|
|
165
175
|
riverbankcms block upsert about team \
|
|
166
176
|
--kind block.body-text \
|
|
167
|
-
--data '{"content": "
|
|
177
|
+
--data '{"body": {"type": "doc", "content": [{"type": "heading", "attrs": {"level": 2}, "content": [{"type": "text", "text": "Our Team"}]}, {"type": "paragraph", "content": [{"type": "text", "text": "Meet the people behind the company."}]}]}}'
|
|
168
178
|
|
|
169
179
|
# 5. Verify
|
|
170
180
|
riverbankcms page get about
|
|
@@ -4,6 +4,15 @@ Create a site-specific block with custom fields and rendering when system blocks
|
|
|
4
4
|
|
|
5
5
|
## When to Use Custom Blocks
|
|
6
6
|
|
|
7
|
+
Before creating a custom block, check `block-types.md` and the site `schema.md`. Many content needs are already covered by system blocks:
|
|
8
|
+
|
|
9
|
+
- `block.body-text` for policy pages, terms pages, simple articles, and editorial copy
|
|
10
|
+
- `block.hero` for page intros and visual mastheads
|
|
11
|
+
- `block.cta-full` / CTA blocks for call-to-action sections
|
|
12
|
+
- `block.image-gallery`, `block.media-text`, and similar media/content patterns
|
|
13
|
+
|
|
14
|
+
Do not create a custom block just to get “a rich text area with different spacing.” Use a built-in block and add scoped site CSS or block field extensions when that is enough.
|
|
15
|
+
|
|
7
16
|
**Use custom blocks when:**
|
|
8
17
|
- You need a completely unique block structure
|
|
9
18
|
- The functionality doesn't map to any system block
|
|
@@ -11,8 +11,8 @@ Define default template blocks for content types that generate pages. Templates
|
|
|
11
11
|
|
|
12
12
|
**Templates vs manual blocks:**
|
|
13
13
|
- Templates define the *default* blocks for new entries
|
|
14
|
-
-
|
|
15
|
-
- SDK
|
|
14
|
+
- Entry slots let editors add per-entry Page Content inside a shared template
|
|
15
|
+
- SDK config owns the template structure; entry slot blocks belong to each entry
|
|
16
16
|
|
|
17
17
|
## Prerequisites
|
|
18
18
|
|
|
@@ -92,6 +92,97 @@ Each template block has a scope that determines how its content is sourced:
|
|
|
92
92
|
}
|
|
93
93
|
```
|
|
94
94
|
|
|
95
|
+
### Page Content Slots
|
|
96
|
+
|
|
97
|
+
Use `system.entry-slot` when every entry should keep the same outer template but needs its own editable Page Content area. The slot must be template-scoped, and it only renders blocks for entries whose current template declares that slot key.
|
|
98
|
+
|
|
99
|
+
```typescript
|
|
100
|
+
{
|
|
101
|
+
key: 'article',
|
|
102
|
+
name: 'Article',
|
|
103
|
+
hasPages: true,
|
|
104
|
+
routePattern: '/articles/{slug}',
|
|
105
|
+
fields: [
|
|
106
|
+
{ id: 'summary', type: 'text', label: 'Summary', multiline: true },
|
|
107
|
+
],
|
|
108
|
+
template: {
|
|
109
|
+
blocks: [
|
|
110
|
+
{
|
|
111
|
+
identifier: 'article-header',
|
|
112
|
+
kind: 'block.hero',
|
|
113
|
+
scope: 'entry',
|
|
114
|
+
bindings: {
|
|
115
|
+
headline: { source: 'meta', path: 'title' },
|
|
116
|
+
subheadline: { source: 'field', path: 'summary' },
|
|
117
|
+
},
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
identifier: 'main-content',
|
|
121
|
+
kind: 'system.entry-slot',
|
|
122
|
+
scope: 'template',
|
|
123
|
+
content: {
|
|
124
|
+
slotKey: 'main',
|
|
125
|
+
label: 'Page content',
|
|
126
|
+
allowedBlocks: ['block.body-text', 'block.rich-text', 'custom.article-callout'],
|
|
127
|
+
},
|
|
128
|
+
},
|
|
129
|
+
],
|
|
130
|
+
},
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
Event templates use the same primitive. Keep native event data in event blocks, then place editorial content in the slot:
|
|
135
|
+
|
|
136
|
+
```typescript
|
|
137
|
+
{
|
|
138
|
+
key: 'event',
|
|
139
|
+
name: 'Event',
|
|
140
|
+
hasPages: true,
|
|
141
|
+
routePattern: '/events/{slug}',
|
|
142
|
+
template: {
|
|
143
|
+
blocks: [
|
|
144
|
+
{ identifier: 'event-hero', kind: 'block.hero', scope: 'entry' },
|
|
145
|
+
{ identifier: 'event-details', kind: 'block.event-details', scope: 'template' },
|
|
146
|
+
{
|
|
147
|
+
identifier: 'event-page-content',
|
|
148
|
+
kind: 'system.entry-slot',
|
|
149
|
+
scope: 'template',
|
|
150
|
+
content: {
|
|
151
|
+
slotKey: 'main',
|
|
152
|
+
label: 'Page content',
|
|
153
|
+
allowedBlocks: ['block.body-text', 'block.image-gallery', 'block.cta-full'],
|
|
154
|
+
},
|
|
155
|
+
},
|
|
156
|
+
{ identifier: 'registration', kind: 'block.event-registration', scope: 'template' },
|
|
157
|
+
],
|
|
158
|
+
},
|
|
159
|
+
}
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
For entry content files, use the `blocks` object keyed by slot:
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
{
|
|
166
|
+
identifier: 'gentle-essay',
|
|
167
|
+
contentType: 'article',
|
|
168
|
+
slug: 'gentle-essay',
|
|
169
|
+
data: { summary: 'A short introduction.' },
|
|
170
|
+
blocks: {
|
|
171
|
+
main: [
|
|
172
|
+
{
|
|
173
|
+
identifier: 'intro',
|
|
174
|
+
kind: 'block.body-text',
|
|
175
|
+
content: { body: 'The editable article body starts here.' },
|
|
176
|
+
},
|
|
177
|
+
],
|
|
178
|
+
},
|
|
179
|
+
}
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
If `allowedBlocks` is omitted, the slot uses the curated Page Content palette. An empty array means the slot is locked and editors cannot add blocks. Template-only system blocks such as event registration are not allowed inside slots; keep those in the outer template.
|
|
183
|
+
|
|
184
|
+
Use entry fields for structured metadata that code needs to query or validate, such as retreat level, arrival time, teacher references, or event booking settings. Entry slots are for editorial page composition; extending built-in event metadata is a separate structured-data concern.
|
|
185
|
+
|
|
95
186
|
**Template-scoped blocks** have fixed content:
|
|
96
187
|
```typescript
|
|
97
188
|
{
|
|
@@ -119,6 +210,19 @@ Bindings map block fields to data sources. Available binding sources:
|
|
|
119
210
|
|
|
120
211
|
**Valid meta paths:** `title`, `slug`, `publishedAt`, `createdAt`, `updatedAt`
|
|
121
212
|
|
|
213
|
+
### Binding Type Compatibility
|
|
214
|
+
|
|
215
|
+
Template bindings must connect compatible source and target field types. `push-config` validates this and will reject mismatches before they reach the dashboard.
|
|
216
|
+
|
|
217
|
+
Common examples:
|
|
218
|
+
|
|
219
|
+
- `richText` entry field -> `richText` block field
|
|
220
|
+
- `media` entry field -> `media` block field
|
|
221
|
+
- `reference` entry field -> `reference` block field with the same `referenceKind`
|
|
222
|
+
- `text` entry field -> `text` block field
|
|
223
|
+
|
|
224
|
+
Do not bind a `reference` source into a `text` target just because the renderer eventually wants an identifier string. Make the custom block field a `reference` too, then convert/normalize the rendered value in code if needed. This keeps the block schema honest and allows dashboard validation/editor UI to work correctly.
|
|
225
|
+
|
|
122
226
|
### Step 4: Push Configuration
|
|
123
227
|
|
|
124
228
|
Push the template to sync it with the CMS:
|
|
@@ -274,3 +378,4 @@ When you first push a template to a content type that has existing entries:
|
|
|
274
378
|
- Check binding keys match block field IDs
|
|
275
379
|
- Verify field paths exist in content type fields
|
|
276
380
|
- Ensure block kinds are valid system or custom blocks
|
|
381
|
+
- Ensure source and target field types are compatible, especially `reference` fields
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { defineIslandPropsDecoder } from './chunk-
|
|
2
|
-
import './chunk-
|
|
1
|
+
import { defineIslandPropsDecoder } from './chunk-VGDBVNOO.mjs';
|
|
2
|
+
import './chunk-ZE5G642V.mjs';
|
|
3
3
|
|
|
4
4
|
// src/rendering/islands/enhancers/accordion.ts
|
|
5
5
|
var decode = defineIslandPropsDecoder("accordion");
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { usePolling } from './chunk-
|
|
3
|
-
import { SpinnerNode } from './chunk-
|
|
2
|
+
import { usePolling } from './chunk-ZKUO52W3.mjs';
|
|
3
|
+
import { SpinnerNode } from './chunk-SYIJ5JO2.mjs';
|
|
4
4
|
import { useDiscountCodeUi } from './chunk-ZFHRN6W2.mjs';
|
|
5
5
|
import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
|
|
6
|
-
import { scrollToBlock, buildCheckoutReturnUrls, DiscountCodeDisclosure, formatPrice } from './chunk-
|
|
6
|
+
import { scrollToBlock, buildCheckoutReturnUrls, DiscountCodeDisclosure, formatPrice } from './chunk-7UCLJ5SP.mjs';
|
|
7
7
|
import { FieldValidationMessage, getFieldValidationControlProps } from './chunk-3DCJ45Z2.mjs';
|
|
8
8
|
import './chunk-DVNUDUVT.mjs';
|
|
9
9
|
import { isSpamProtectionEnabled, getChallengeUrl, AltchaWidget } from './chunk-GFSQNTRW.mjs';
|
|
10
10
|
import { BlockApiProvider, useBlockApi, FeedbackMessage } from './chunk-UDNSI5PY.mjs';
|
|
11
11
|
import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
|
|
12
|
-
import { defineIslandPropsDecoder, resolveBookingSiteId, resolveDefaultBookingServiceId, getBookingRedirectStateFromLocation, deriveBookingFormViewState, logger, getBookingSuccessMessage, resolveAppointmentCheckoutVerificationState, themeButtonClassName, toSelectedCollectionOptionKind, assertNever11, prepareBookingSubmission, formatBookingSubmissionPreparationError, resolveBookingPaymentStep, BOOKING_FORM_DATA_RESERVED_KEYS, clearWorkflowFeedback, reportWorkflowError, reportWorkflowSuccess, okWith2, err2 } from './chunk-
|
|
13
|
-
import { resolveBookingTimeZoneId, DEFAULT_BOOKING_TIME_ZONE, unsafeAsFormId, unsafeAsAppointmentResourceId, unsafeAsCustomerPassId, unsafeAsAppointmentServiceId, formatLocalScheduleDate, addLocalScheduleDays, parseBookingLocalDate, resolveFlexibleBalanceInitialPaymentCents, resolveFlexibleBalanceDueAt, getBookingInstalmentDepositRefundability, unsafeAsPassId, splitAmountWithRemainderInFirst, addIntervalPreservingMonthAnchor, clampConfiguredAmount, getBookingInstalmentPlanIntervalCount, omitZeroAmountFutureRows, formatBookingInstant } from './chunk-
|
|
12
|
+
import { defineIslandPropsDecoder, resolveBookingSiteId, resolveDefaultBookingServiceId, getBookingRedirectStateFromLocation, deriveBookingFormViewState, logger, getBookingSuccessMessage, resolveAppointmentCheckoutVerificationState, themeButtonClassName, toSelectedCollectionOptionKind, assertNever11, prepareBookingSubmission, formatBookingSubmissionPreparationError, resolveBookingPaymentStep, BOOKING_FORM_DATA_RESERVED_KEYS, clearWorkflowFeedback, reportWorkflowError, reportWorkflowSuccess, okWith2, err2 } from './chunk-VGDBVNOO.mjs';
|
|
13
|
+
import { resolveBookingTimeZoneId, DEFAULT_BOOKING_TIME_ZONE, unsafeAsFormId, unsafeAsAppointmentResourceId, unsafeAsCustomerPassId, unsafeAsAppointmentServiceId, formatLocalScheduleDate, addLocalScheduleDays, parseBookingLocalDate, resolveFlexibleBalanceInitialPaymentCents, resolveFlexibleBalanceDueAt, getBookingInstalmentDepositRefundability, unsafeAsPassId, splitAmountWithRemainderInFirst, addIntervalPreservingMonthAnchor, clampConfiguredAmount, getBookingInstalmentPlanIntervalCount, omitZeroAmountFutureRows, formatBookingInstant } from './chunk-ZE5G642V.mjs';
|
|
14
14
|
import React2, { useRef, useState, useMemo, useReducer, useEffect, useCallback, useLayoutEffect } from 'react';
|
|
15
15
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
16
16
|
|