@riverbankcms/sdk 0.78.2 → 0.79.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +80 -0
- package/dist/{PreviewEditorSidebar-4DXLYX2V.mjs → PreviewEditorSidebar-56NMJMIK.mjs} +724 -47
- package/dist/{PreviewEditorUI-CS5P4N3P.mjs → PreviewEditorUI-27KJVEET.mjs} +3 -3
- package/dist/SdkPreviewModeRuntime-H4BSP6E7.mjs +8 -0
- package/dist/_dts/ai/src/contracts/proposals.d.ts +36 -0
- package/dist/_dts/api/src/endpoints.d.ts +55 -0
- package/dist/_dts/api/src/index.d.ts +5 -3
- package/dist/_dts/api/src/media.d.ts +8 -1
- package/dist/_dts/api/src/navigation/dashboardSettingsNav.d.ts +1 -1
- package/dist/_dts/api/src/navigation/dashboardSiteNav.d.ts +8 -8
- package/dist/_dts/api/src/navigation/identity.d.ts +59 -0
- package/dist/_dts/api/src/navigation.d.ts +2 -0
- package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +4 -0
- package/dist/_dts/api/src/sdkContracts.d.ts +1 -0
- package/dist/_dts/api/src/siteIcons.d.ts +128 -0
- package/dist/_dts/api/src/siteManagementEndpoints.d.ts +16 -0
- package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +7 -0
- package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +6 -1
- package/dist/_dts/api/src/types.d.ts +1 -1
- package/dist/_dts/api/src/webhooks.d.ts +239 -0
- package/dist/_dts/blocks/src/index.d.ts +4 -0
- package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/cart.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/collection.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/faq.d.ts +294 -289
- package/dist/_dts/blocks/src/system/blocks/feature-card-icons.d.ts +57 -0
- package/dist/_dts/blocks/src/system/blocks/feature-cards.d.ts +4 -0
- package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/blocks/location-map.d.ts +1 -1
- package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +22 -22
- package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/shop.d.ts +288 -288
- package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +7 -1
- package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +170 -0
- package/dist/_dts/blocks/src/system/fragments/library/testimonialsCarousel.d.ts +5 -0
- package/dist/_dts/blocks/src/system/helpers/resolveBackground.d.ts +3 -1
- package/dist/_dts/blocks/src/system/icons/ids.d.ts +13 -0
- package/dist/_dts/blocks/src/system/icons/index.d.ts +6 -0
- package/dist/_dts/blocks/src/system/icons/presets.d.ts +4 -0
- package/dist/_dts/blocks/src/system/icons/registry.d.ts +18 -0
- package/dist/_dts/blocks/src/system/icons/semantic.d.ts +239 -0
- package/dist/_dts/blocks/src/system/icons/value.d.ts +94 -0
- package/dist/_dts/blocks/src/system/index.d.ts +1 -0
- package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +4 -1
- package/dist/_dts/blocks/src/system/manifest/schema.d.ts +23 -0
- package/dist/_dts/blocks/src/system/runtime/nodes/feature-card-icon.d.ts +13 -0
- package/dist/_dts/content-model/src/contentManifest.d.ts +3 -1
- package/dist/_dts/core/src/branded.d.ts +6 -0
- package/dist/_dts/db/src/generated/supabase/database.types.d.ts +191 -0
- package/dist/_dts/editor-blocks/src/block-editor/BlockCard.d.ts +12 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockCardBody.d.ts +12 -1
- package/dist/_dts/editor-blocks/src/block-editor/BlockCardHeader.d.ts +12 -2
- package/dist/_dts/editor-blocks/src/block-editor/FeatureCardIconsPanel.d.ts +21 -0
- package/dist/_dts/editor-blocks/src/block-editor/GeneratedIconSetDialog.d.ts +40 -0
- package/dist/_dts/editor-blocks/src/block-editor/SortableBlockItem.d.ts +11 -1
- package/dist/_dts/editor-blocks/src/block-editor/featureCardIconActions.d.ts +82 -0
- package/dist/_dts/editor-blocks/src/widgets/icon-picker/IconPickerField.d.ts +1 -1
- package/dist/_dts/media-core/src/fileDomain.d.ts +8 -1
- package/dist/_dts/media-editor/src/MediaEditor.d.ts +3 -2
- package/dist/_dts/media-react/src/components/MediaLibrary.d.ts +2 -1
- package/dist/_dts/media-react/src/components/MediaPickerMini.d.ts +2 -1
- package/dist/_dts/preview-next/src/client/blocks/previewCustomizeActions.d.ts +17 -0
- package/dist/_dts/preview-next/src/client/preview/PageDesignEditorStateContext.d.ts +4 -0
- package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +3 -2
- package/dist/_dts/preview-next/src/client/preview/previewCustomizeHistory.d.ts +6 -0
- package/dist/_dts/sdk/src/cli/navigationIdentity.d.ts +11 -0
- package/dist/_dts/sdk/src/cli/site-commands/navigationCommands.d.ts +4 -0
- package/dist/_dts/sdk/src/cli/site-commands/oneOffCommands.d.ts +1 -0
- package/dist/_dts/sdk/src/cli/sync/diff.d.ts +9 -0
- package/dist/_dts/sdk/src/client/management/types.d.ts +2 -0
- package/dist/_dts/sdk/src/config/field-definitions.d.ts +3 -1
- package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
- package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +19 -2
- package/dist/_dts/sdk/src/next/index.d.ts +1 -1
- package/dist/_dts/sdk/src/next/revalidate.d.ts +26 -5
- package/dist/_dts/sdk/src/next/static-params.d.ts +28 -3
- package/dist/_dts/sdk/src/public-api/contracts.d.ts +5 -1
- package/dist/_dts/sdk/src/public-api/runtime.d.ts +1 -1
- package/dist/_dts/sdk/src/version.d.ts +1 -1
- package/dist/_dts/sdk/src/webhooks/index.d.ts +1 -1
- package/dist/_dts/sdk/src/webhooks/verify.d.ts +6 -102
- package/dist/_dts/site-commands/src/commands.d.ts +3 -0
- package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
- package/dist/_dts/theme-core/src/mock-themes/all.d.ts +3 -3
- package/dist/_dts/theme-core/src/schema.d.ts +5 -5
- package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +25 -2
- package/dist/_dts/theme-core/src/site-styles/designState.d.ts +5 -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 +4 -4
- package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +2 -0
- package/dist/_dts/ui/src/combobox.d.ts +1 -0
- package/dist/{chunk-RGTOD4AJ.mjs → chunk-4HCW7FHJ.mjs} +491 -56
- package/dist/{chunk-OKMBEAXY.mjs → chunk-A3HHFKVT.mjs} +1 -1
- package/dist/{chunk-6HYXHRAI.mjs → chunk-GP555I66.mjs} +177 -7
- package/dist/{chunk-CR5HKAGU.mjs → chunk-K2IIF34C.mjs} +55 -0
- package/dist/{chunk-4QEGTLK6.mjs → chunk-LCY32PXF.mjs} +1 -1
- package/dist/{chunk-MCRQMPET.mjs → chunk-V47ZU33I.mjs} +1745 -157
- package/dist/cli/index.mjs +1169 -171
- package/dist/cli/init-docs/content/workflow-editor-workflows.md +2 -0
- package/dist/cli/init-docs/content/workflow-isr-revalidation.md +138 -0
- package/dist/client/{accordion-PLYNJIIM.mjs → accordion-QLA7KBYO.mjs} +1 -1
- package/dist/client/{bookingForm-BXAP6AO7.mjs → bookingForm-PYZIPA5G.mjs} +3 -3
- package/dist/client/bookings.mjs +110 -2
- package/dist/client/{carousel-TRBXDHGF.mjs → carousel-5EIULWBI.mjs} +2 -2
- package/dist/client/{cart-Z7H3HJRS.mjs → cart-DOP3FNI4.mjs} +5 -5
- package/dist/client/{checkout-WAFCUBIX.mjs → checkout-BVMF6FBV.mjs} +5 -5
- package/dist/client/{chunk-JRDUHZCT.mjs → chunk-44K2U3QI.mjs} +4 -4
- package/dist/client/{chunk-UVQEJJTN.mjs → chunk-CCNTDRCF.mjs} +1 -1
- package/dist/client/{chunk-ZI3LLBPZ.mjs → chunk-GG4M2NP6.mjs} +1 -1
- package/dist/client/{chunk-JGXPTEI2.mjs → chunk-R5ESWNKX.mjs} +6 -3
- package/dist/client/{chunk-CWGTG37I.mjs → chunk-TYONZMST.mjs} +1 -1
- package/dist/client/{chunk-75OUS5MT.mjs → chunk-UDS3NTWA.mjs} +1 -1
- package/dist/client/{chunk-DNRGY432.mjs → chunk-V6M5FCR5.mjs} +1 -1
- package/dist/client/{chunk-FUXW6VW2.mjs → chunk-YLDYVRZL.mjs} +4 -4
- package/dist/client/client.mjs +21329 -19729
- package/dist/client/{courseRegistration-AHFQHWIJ.mjs → courseRegistration-E6EAA6NL.mjs} +3 -3
- package/dist/client/{eventCalendar-LDXTV5R7.mjs → eventCalendar-HBG3HAK6.mjs} +5 -5
- package/dist/client/{eventCombined-A4JGTNJO.mjs → eventCombined-6K5ZZWAK.mjs} +5 -5
- package/dist/client/{eventDetails-4YXTZ7EG.mjs → eventDetails-Q75ICXLT.mjs} +5 -5
- package/dist/client/{eventListing-P72TPFFM.mjs → eventListing-27P5F7DZ.mjs} +5 -5
- package/dist/client/{eventRegistration-LSYJHGMT.mjs → eventRegistration-IQ7AMASR.mjs} +5 -5
- package/dist/client/{form-AOPYOKOW.mjs → form-JRTD65FN.mjs} +1 -1
- package/dist/client/{headerSection-5TFYDFVQ.mjs → headerSection-7FPSSZHS.mjs} +2 -2
- package/dist/client/hooks.mjs +350 -35
- package/dist/client/{locationMap-QSZ3ZVAZ.mjs → locationMap-7NGFNYBH.mjs} +1 -1
- package/dist/client/{newsletterForm-KTRHZY52.mjs → newsletterForm-F3BADCI2.mjs} +1 -1
- package/dist/client/{productDetail-N4E775RG.mjs → productDetail-V3HP7ITJ.mjs} +5 -5
- package/dist/client/{productList-UGUQ2S45.mjs → productList-L3EGJUF2.mjs} +5 -5
- package/dist/client/rendering/client.mjs +2713 -1382
- package/dist/client/rendering/islands.mjs +18 -18
- package/dist/client/rendering.mjs +2014 -414
- package/dist/client/{shop-VHSZEEQ2.mjs → shop-DQUB5E2C.mjs} +5 -5
- package/dist/preview-next/before-render.mjs +55 -0
- package/dist/preview-next/client/runtime.mjs +5 -5
- package/dist/preview-next/middleware.mjs +55 -0
- package/dist/{sdk-runtime-WHPJEF5G.mjs → sdk-runtime-AF6KXJU4.mjs} +6 -6
- package/dist/server/components.mjs +2169 -781
- package/dist/server/config-validation.mjs +350 -35
- package/dist/server/config.mjs +350 -35
- package/dist/server/data.mjs +350 -35
- package/dist/server/index.mjs +64 -1
- package/dist/server/next/revalidate.mjs +229 -34
- package/dist/server/next.mjs +2307 -818
- package/dist/server/page-converter.mjs +275 -34
- package/dist/server/prebuild.mjs +1 -1
- package/dist/server/rendering/server.mjs +2174 -786
- package/dist/server/rendering.mjs +2187 -799
- package/dist/server/routing.mjs +767 -50
- package/dist/server/server.mjs +351 -36
- package/dist/server/theme-bridge.mjs +164 -2
- package/dist/server/theme.mjs +2 -2
- package/dist/server/webhooks.mjs +129 -25
- package/dist/styles/index.css +55 -0
- package/package.json +2 -1
- package/dist/SdkPreviewModeRuntime-IJDHTW4W.mjs +0 -8
|
@@ -31,6 +31,8 @@ Use `contentType: "page"` for page workflows. Use a content type key, such as `b
|
|
|
31
31
|
|
|
32
32
|
Riverbank saves the draft, disables the editor, creates a workflow run, and posts to your endpoint. Verify the raw body with the same HMAC helper used for webhooks:
|
|
33
33
|
|
|
34
|
+
The `x-riverbank-signature` header is formatted as `sha256=<hex HMAC-SHA256 digest>`.
|
|
35
|
+
|
|
34
36
|
```ts
|
|
35
37
|
import { verifyWebhookSignature } from "@riverbankcms/sdk/webhooks";
|
|
36
38
|
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Workflow: Production ISR and Revalidation
|
|
2
|
+
|
|
3
|
+
## Purpose
|
|
4
|
+
|
|
5
|
+
Configure a Riverbank SDK Next.js App Router site to prerender published routes, serve production pages through ISR, and refresh affected paths when the CMS sends signed publish webhooks.
|
|
6
|
+
|
|
7
|
+
## Prerequisites
|
|
8
|
+
|
|
9
|
+
- A Riverbank SDK site using `createCatchAllPage()` in `src/app/[[...slug]]/page.tsx`.
|
|
10
|
+
- A production content API key in `RIVERBANK_API_KEY`.
|
|
11
|
+
- `RIVERBANK_SITE_ID` set to this site's Riverbank site ID.
|
|
12
|
+
- `NEXT_PUBLIC_DASHBOARD_URL` set to the dashboard origin, for example `https://cms.example.com`.
|
|
13
|
+
- A shared webhook secret for the deployed site and the Riverbank webhook endpoint.
|
|
14
|
+
|
|
15
|
+
Preview deployments should also set `RIVERBANK_PREVIEW_MODE=true` so draft previews stay dynamic instead of serving stale ISR HTML.
|
|
16
|
+
|
|
17
|
+
## Configure the Catch-All Route
|
|
18
|
+
|
|
19
|
+
In `src/app/[[...slug]]/page.tsx`:
|
|
20
|
+
|
|
21
|
+
```tsx
|
|
22
|
+
import {
|
|
23
|
+
createCatchAllPage,
|
|
24
|
+
generateAllStaticParams,
|
|
25
|
+
getISRConfig,
|
|
26
|
+
} from '@riverbankcms/sdk/next'
|
|
27
|
+
|
|
28
|
+
import config from '@/riverbank.config'
|
|
29
|
+
import { blockOverrides } from '@/lib/block-overrides'
|
|
30
|
+
import { getRiverbankClient } from '@/lib/riverbank-client'
|
|
31
|
+
|
|
32
|
+
export const revalidate = getISRConfig().revalidate
|
|
33
|
+
export const dynamicParams = true
|
|
34
|
+
export { generateAllStaticParams as generateStaticParams }
|
|
35
|
+
|
|
36
|
+
const { Page, generateMetadata } = createCatchAllPage({
|
|
37
|
+
getClient: getRiverbankClient,
|
|
38
|
+
config,
|
|
39
|
+
blockOverrides,
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
export default Page
|
|
43
|
+
export { generateMetadata }
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
`generateAllStaticParams()` discovers published pages and routable entries at build time. It reads:
|
|
47
|
+
|
|
48
|
+
- `RIVERBANK_API_KEY`
|
|
49
|
+
- `RIVERBANK_SITE_ID`
|
|
50
|
+
- `NEXT_PUBLIC_DASHBOARD_URL`
|
|
51
|
+
|
|
52
|
+
By default, route discovery falls back to the homepage if the CMS is temporarily unavailable. Use strict mode when you want production CI to fail instead:
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
import { generateAllStaticParams } from '@riverbankcms/sdk/next'
|
|
56
|
+
|
|
57
|
+
export function generateStaticParams() {
|
|
58
|
+
return generateAllStaticParams({ failureMode: 'throw' })
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
If your site already centralizes the SDK client, use the explicit factory:
|
|
63
|
+
|
|
64
|
+
```tsx
|
|
65
|
+
import { createGenerateStaticParams } from '@riverbankcms/sdk/next'
|
|
66
|
+
|
|
67
|
+
import config from '@/riverbank.config'
|
|
68
|
+
import { getRiverbankClient } from '@/lib/riverbank-client'
|
|
69
|
+
|
|
70
|
+
export const generateStaticParams = createGenerateStaticParams({
|
|
71
|
+
getClient: getRiverbankClient,
|
|
72
|
+
siteId: config.siteId,
|
|
73
|
+
failureMode: 'throw',
|
|
74
|
+
})
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Add the Revalidation Route
|
|
78
|
+
|
|
79
|
+
Create `src/app/api/revalidate/route.ts`:
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
import { createRevalidateHandler } from '@riverbankcms/sdk/next/revalidate'
|
|
83
|
+
|
|
84
|
+
export const POST = createRevalidateHandler()
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
Set the same secret in the deployed site and the Riverbank webhook endpoint:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
RIVERBANK_WEBHOOK_SECRET=...
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
Riverbank signs each request with:
|
|
94
|
+
|
|
95
|
+
```http
|
|
96
|
+
X-Riverbank-Signature: sha256=<hex HMAC-SHA256 digest>
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
The digest is computed over the raw JSON body. The SDK handler rejects unsigned requests, plain hex signatures without the `sha256=` prefix, malformed digests, bad signatures, and invalid payloads. Malformed path entries are skipped and reported in the response metadata while valid tags and paths still revalidate.
|
|
100
|
+
|
|
101
|
+
Riverbank includes a `dispatchId` in signed payloads and sends matching `X-Riverbank-Dispatch-Id` / `X-Riverbank-Correlation-Id` headers. To join CMS delivery logs with this site's deployment logs, use the optional callback metadata:
|
|
102
|
+
|
|
103
|
+
```ts
|
|
104
|
+
export const POST = createRevalidateHandler({
|
|
105
|
+
onRevalidate: (_payload, _items, metadata) => {
|
|
106
|
+
console.info('Riverbank ISR revalidated', metadata)
|
|
107
|
+
},
|
|
108
|
+
})
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
## Configure the CMS Webhook Endpoint
|
|
112
|
+
|
|
113
|
+
In the Riverbank dashboard, configure or reuse an enabled webhook endpoint whose URL points at the deployed route:
|
|
114
|
+
|
|
115
|
+
```text
|
|
116
|
+
https://www.example.com/api/revalidate
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Use the same `RIVERBANK_WEBHOOK_SECRET` value for that endpoint. SDK-site revalidation events include page and entry publish, unpublish, delete, and public path changes, along with navigation, theme, and site settings updates. Events send top-level `paths` and `tags`; the SDK handler normalizes and dedupes them before calling `revalidatePath()` and `revalidateTag()`.
|
|
120
|
+
|
|
121
|
+
Some valid events are tags-only. Global render changes do not include explicit paths, and very large path sets degrade to tags-only delivery so webhook payloads stay bounded. Existing webhook endpoints may need their subscribed event list updated to receive the newer unpublish, delete, and path-change events.
|
|
122
|
+
|
|
123
|
+
For troubleshooting, inspect the endpoint's delivery logs in Riverbank. Each delivery stores minimized payload diagnostics with `dispatchId`, `siteId`, event, `pathCount`, `tagCount`, status, response time, and a minimized failure body. Secrets, signature headers, cookies, authorization headers, and raw sensitive fields are not written to delivery logs.
|
|
124
|
+
|
|
125
|
+
## Verify
|
|
126
|
+
|
|
127
|
+
1. Build the site with production environment variables present.
|
|
128
|
+
2. Confirm a published route is included in the static params output or appears as prerendered in the Next build summary.
|
|
129
|
+
3. Visit a published page.
|
|
130
|
+
4. Publish a change in the CMS.
|
|
131
|
+
5. Confirm the webhook delivery succeeds.
|
|
132
|
+
6. Reload the page and confirm the changed content appears without waiting for the normal ISR interval.
|
|
133
|
+
|
|
134
|
+
For local SDK development inside the Riverbank monorepo, the smoke check is:
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
pnpm --filter @riverbankcms/sdk test:isr-catch-all-revalidate-smoke
|
|
138
|
+
```
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { usePolling } from './chunk-
|
|
2
|
+
import { usePolling } from './chunk-V6M5FCR5.mjs';
|
|
3
3
|
import { SpinnerNode } from './chunk-CE7IBGVW.mjs';
|
|
4
4
|
import { useDiscountCodeUi } from './chunk-ZFHRN6W2.mjs';
|
|
5
|
-
import { scrollToBlock, buildCheckoutReturnUrls, DiscountCodeDisclosure, formatPrice } from './chunk-
|
|
5
|
+
import { scrollToBlock, buildCheckoutReturnUrls, DiscountCodeDisclosure, formatPrice } from './chunk-CCNTDRCF.mjs';
|
|
6
6
|
import { FieldValidationMessage, getFieldValidationControlProps } from './chunk-3DCJ45Z2.mjs';
|
|
7
7
|
import './chunk-3PEDD5KJ.mjs';
|
|
8
8
|
import { isSpamProtectionEnabled, getChallengeUrl, AltchaWidget } from './chunk-YLMKMCSJ.mjs';
|
|
9
9
|
import { BlockApiProvider, useBlockApi, FeedbackMessage } from './chunk-UDNSI5PY.mjs';
|
|
10
10
|
import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
|
|
11
|
-
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-
|
|
11
|
+
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-R5ESWNKX.mjs';
|
|
12
12
|
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-AUJ5DBZJ.mjs';
|
|
13
13
|
import React2, { useRef, useState, useMemo, useReducer, useEffect, useCallback, useLayoutEffect } from 'react';
|
|
14
14
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
package/dist/client/bookings.mjs
CHANGED
|
@@ -4047,7 +4047,7 @@ var themeColorBaseTokenNames = [
|
|
|
4047
4047
|
"accentForeground"
|
|
4048
4048
|
];
|
|
4049
4049
|
var themeColorBaseTokenSet = new Set(themeColorBaseTokenNames);
|
|
4050
|
-
var
|
|
4050
|
+
var themeColorShadeSteps = [
|
|
4051
4051
|
"50",
|
|
4052
4052
|
"100",
|
|
4053
4053
|
"200",
|
|
@@ -4060,7 +4060,7 @@ var SHADE_STEPS = [
|
|
|
4060
4060
|
"900",
|
|
4061
4061
|
"950"
|
|
4062
4062
|
];
|
|
4063
|
-
var shadeStepSet = new Set(
|
|
4063
|
+
var shadeStepSet = new Set(themeColorShadeSteps);
|
|
4064
4064
|
function isKnownBaseToken(value) {
|
|
4065
4065
|
return themeColorBaseTokenSet.has(value);
|
|
4066
4066
|
}
|
|
@@ -9225,6 +9225,114 @@ var curatedSiteStyles = [
|
|
|
9225
9225
|
paletteChoice("warm-neutral-clay")
|
|
9226
9226
|
]
|
|
9227
9227
|
}),
|
|
9228
|
+
defineCuratedSiteStyle({
|
|
9229
|
+
id: "site-style:clarity-zen-blue",
|
|
9230
|
+
name: "Clarity Zen",
|
|
9231
|
+
description: "Calm, editorial, and reassuring for therapy, counselling, and wellbeing support practices.",
|
|
9232
|
+
generationBrief: "Use a calm, soft palette, editorial serif headings, warm grounded copy, rounded cards, calm proof sections, and clear booking routes. Keep the tone compassionate and straightforward, with professional trust rather than hard-sell wellness language.",
|
|
9233
|
+
siteCreatorSelection: {
|
|
9234
|
+
kind: "site_creator_keyword_heuristic",
|
|
9235
|
+
priority: 25
|
|
9236
|
+
},
|
|
9237
|
+
selectionKeywordRules: [
|
|
9238
|
+
{ kind: "substring", value: "psychotherap" },
|
|
9239
|
+
{ kind: "phrase", value: "mental health" },
|
|
9240
|
+
{ kind: "phrase", value: "talk therapy" },
|
|
9241
|
+
{ kind: "phrase", value: "therapy and wellbeing" }
|
|
9242
|
+
],
|
|
9243
|
+
tokenRecipes: {
|
|
9244
|
+
palette: "brand-led",
|
|
9245
|
+
contrast: "standard",
|
|
9246
|
+
radius: "rounded",
|
|
9247
|
+
shadow: "subtle",
|
|
9248
|
+
typography: "serif-editorial",
|
|
9249
|
+
spacing: "airy",
|
|
9250
|
+
motion: "subtle"
|
|
9251
|
+
},
|
|
9252
|
+
compositionBudget: balancedBudget,
|
|
9253
|
+
themeOverrides: {
|
|
9254
|
+
typography: {
|
|
9255
|
+
body: {
|
|
9256
|
+
family: "Inter, system-ui, sans-serif",
|
|
9257
|
+
size: "md",
|
|
9258
|
+
weight: "regular",
|
|
9259
|
+
lineHeight: "relaxed",
|
|
9260
|
+
letterSpacing: "normal"
|
|
9261
|
+
},
|
|
9262
|
+
headings: {
|
|
9263
|
+
default: {
|
|
9264
|
+
family: '"Cormorant Garamond", Georgia, serif',
|
|
9265
|
+
weight: "regular",
|
|
9266
|
+
lineHeight: "normal",
|
|
9267
|
+
letterSpacing: "normal",
|
|
9268
|
+
colorToken: "text",
|
|
9269
|
+
italic: null,
|
|
9270
|
+
case: null
|
|
9271
|
+
},
|
|
9272
|
+
h1: {
|
|
9273
|
+
size: "xl",
|
|
9274
|
+
weight: "regular",
|
|
9275
|
+
lineHeight: "normal",
|
|
9276
|
+
letterSpacing: "normal",
|
|
9277
|
+
italic: null
|
|
9278
|
+
},
|
|
9279
|
+
h2: {
|
|
9280
|
+
size: "lg",
|
|
9281
|
+
weight: "regular",
|
|
9282
|
+
lineHeight: "normal",
|
|
9283
|
+
letterSpacing: "normal",
|
|
9284
|
+
italic: null
|
|
9285
|
+
},
|
|
9286
|
+
h3: {
|
|
9287
|
+
size: "md",
|
|
9288
|
+
weight: "regular",
|
|
9289
|
+
lineHeight: "normal",
|
|
9290
|
+
letterSpacing: "normal",
|
|
9291
|
+
italic: null
|
|
9292
|
+
}
|
|
9293
|
+
},
|
|
9294
|
+
scale: "majorThird"
|
|
9295
|
+
},
|
|
9296
|
+
bodyText: {
|
|
9297
|
+
intro: {
|
|
9298
|
+
paragraphSize: "default",
|
|
9299
|
+
headingSize: "editorial"
|
|
9300
|
+
}
|
|
9301
|
+
}
|
|
9302
|
+
},
|
|
9303
|
+
defaultBlockVariants: {
|
|
9304
|
+
"block.faq": "split-heading-columns"
|
|
9305
|
+
},
|
|
9306
|
+
recommendedAppearancePresetIds: [
|
|
9307
|
+
"hero-split-editorial",
|
|
9308
|
+
"intro-organic-statement",
|
|
9309
|
+
"feature-cards-raised-rule",
|
|
9310
|
+
"media-text-quiet-story",
|
|
9311
|
+
"testimonials-brand-background-quotes",
|
|
9312
|
+
"faq-contained-help",
|
|
9313
|
+
"contact-form-panel"
|
|
9314
|
+
],
|
|
9315
|
+
recommendedHeaderLookIds: [
|
|
9316
|
+
"centered-calm",
|
|
9317
|
+
"serif-line",
|
|
9318
|
+
"minimal-transparent"
|
|
9319
|
+
],
|
|
9320
|
+
recommendedFooterLookIds: [
|
|
9321
|
+
"footer-muted-grounding",
|
|
9322
|
+
"site-footer-brand-two-band"
|
|
9323
|
+
],
|
|
9324
|
+
buttonPersonalityChoices: [
|
|
9325
|
+
buttonChoice("soft-pill"),
|
|
9326
|
+
buttonChoice("pebble"),
|
|
9327
|
+
buttonChoice("editorial-link")
|
|
9328
|
+
],
|
|
9329
|
+
paletteVariantChoices: [
|
|
9330
|
+
paletteChoice("brand-led-cool"),
|
|
9331
|
+
paletteChoice("soft-natural-watercolor"),
|
|
9332
|
+
paletteChoice("soft-natural-stone"),
|
|
9333
|
+
paletteChoice("warm-neutral-cream")
|
|
9334
|
+
]
|
|
9335
|
+
}),
|
|
9228
9336
|
defineCuratedSiteStyle({
|
|
9229
9337
|
id: "site-style:personal-retreat-journal",
|
|
9230
9338
|
name: "Personal Retreat Journal",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { normalizeCarouselProps, CarouselNodeClient } from './chunk-
|
|
1
|
+
import { normalizeCarouselProps, CarouselNodeClient } from './chunk-UDS3NTWA.mjs';
|
|
2
2
|
import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
|
|
3
|
-
import { defineIslandPropsDecoder } from './chunk-
|
|
3
|
+
import { defineIslandPropsDecoder } from './chunk-R5ESWNKX.mjs';
|
|
4
4
|
import './chunk-AUJ5DBZJ.mjs';
|
|
5
5
|
import { jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { mountShopBlockIsland, CartClient } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
1
|
+
import { mountShopBlockIsland, CartClient } from './chunk-YLDYVRZL.mjs';
|
|
2
|
+
import './chunk-TYONZMST.mjs';
|
|
3
|
+
import './chunk-UDS3NTWA.mjs';
|
|
4
4
|
import './chunk-I2MMZO53.mjs';
|
|
5
5
|
import './chunk-ZFHRN6W2.mjs';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-CCNTDRCF.mjs';
|
|
7
7
|
import './chunk-3DCJ45Z2.mjs';
|
|
8
8
|
import './chunk-3PEDD5KJ.mjs';
|
|
9
9
|
import './chunk-UDNSI5PY.mjs';
|
|
10
10
|
import './chunk-N7PBWBWQ.mjs';
|
|
11
|
-
import { defineIslandPropsDecoder } from './chunk-
|
|
11
|
+
import { defineIslandPropsDecoder } from './chunk-R5ESWNKX.mjs';
|
|
12
12
|
import './chunk-AUJ5DBZJ.mjs';
|
|
13
13
|
|
|
14
14
|
// src/rendering/islands/enhancers/cart.tsx
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { mountShopBlockIsland, CheckoutClient } from './chunk-
|
|
2
|
-
import './chunk-
|
|
3
|
-
import './chunk-
|
|
1
|
+
import { mountShopBlockIsland, CheckoutClient } from './chunk-YLDYVRZL.mjs';
|
|
2
|
+
import './chunk-TYONZMST.mjs';
|
|
3
|
+
import './chunk-UDS3NTWA.mjs';
|
|
4
4
|
import './chunk-I2MMZO53.mjs';
|
|
5
5
|
import './chunk-ZFHRN6W2.mjs';
|
|
6
|
-
import './chunk-
|
|
6
|
+
import './chunk-CCNTDRCF.mjs';
|
|
7
7
|
import './chunk-3DCJ45Z2.mjs';
|
|
8
8
|
import './chunk-3PEDD5KJ.mjs';
|
|
9
9
|
import './chunk-UDNSI5PY.mjs';
|
|
10
10
|
import './chunk-N7PBWBWQ.mjs';
|
|
11
|
-
import { defineIslandPropsDecoder } from './chunk-
|
|
11
|
+
import { defineIslandPropsDecoder } from './chunk-R5ESWNKX.mjs';
|
|
12
12
|
import './chunk-AUJ5DBZJ.mjs';
|
|
13
13
|
|
|
14
14
|
// src/rendering/islands/enhancers/checkout.tsx
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { LeafletStaticMap } from './chunk-XSV6KW4D.mjs';
|
|
3
|
-
import { MagicLinkForm, useWaitlistClaim } from './chunk-
|
|
4
|
-
import { usePolling } from './chunk-
|
|
3
|
+
import { MagicLinkForm, useWaitlistClaim } from './chunk-GG4M2NP6.mjs';
|
|
4
|
+
import { usePolling } from './chunk-V6M5FCR5.mjs';
|
|
5
5
|
import { SpinnerNode } from './chunk-CE7IBGVW.mjs';
|
|
6
6
|
import { useDiscountCodeUi } from './chunk-ZFHRN6W2.mjs';
|
|
7
|
-
import { TabBarFragment, logoutPortal, StepIndicator, DiscountCodeDisclosure, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, consumeSearchParam, LoggedInAsUser, CheckIcon } from './chunk-
|
|
7
|
+
import { TabBarFragment, logoutPortal, StepIndicator, DiscountCodeDisclosure, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, consumeSearchParam, LoggedInAsUser, CheckIcon } from './chunk-CCNTDRCF.mjs';
|
|
8
8
|
import { getFieldValidationControlProps, FieldValidationMessage } from './chunk-3DCJ45Z2.mjs';
|
|
9
9
|
import { ModalShell } from './chunk-3PEDD5KJ.mjs';
|
|
10
10
|
import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-YLMKMCSJ.mjs';
|
|
11
11
|
import { useBlockApi, FeedbackMessage } from './chunk-UDNSI5PY.mjs';
|
|
12
|
-
import { buildEventCalendarListingRender, getWeekCalendarDays, formatCalendarTitle, groupEventsByDate, getOrderedDayNames, getMonthCalendarDays, formatDateKey, themeButtonClassName, normalizeEventBlockKind, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, addMonths, getThreeMonthRange, isToday, MAX_EVENTS_PER_DAY, formatTime, resolveCoursePricingState, formatEventDateParts, formatCoursePriceAmount, DateTimeTile, normalizeIdList, EventCard, buildTimetableModel, formatDate, isEventContentType, formatCoursePriceDisplay, MONTH_NAMES, formatEventPrice, getEventAvailability, formatEventTeacherLine, CreditCard, Ticket, Star, Sparkles, assertNever11 } from './chunk-
|
|
12
|
+
import { buildEventCalendarListingRender, getWeekCalendarDays, formatCalendarTitle, groupEventsByDate, getOrderedDayNames, getMonthCalendarDays, formatDateKey, themeButtonClassName, normalizeEventBlockKind, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, addMonths, getThreeMonthRange, isToday, MAX_EVENTS_PER_DAY, formatTime, resolveCoursePricingState, formatEventDateParts, formatCoursePriceAmount, DateTimeTile, normalizeIdList, EventCard, buildTimetableModel, formatDate, isEventContentType, formatCoursePriceDisplay, MONTH_NAMES, formatEventPrice, getEventAvailability, formatEventTeacherLine, CreditCard, Ticket, Star, Sparkles, assertNever11 } from './chunk-R5ESWNKX.mjs';
|
|
13
13
|
import { getBookingLocalDateKey, toScheduledBookingDateTime, toBookingTimeZone, formatBookingDateTime, formatBookingDate, formatBookingTime } from './chunk-AUJ5DBZJ.mjs';
|
|
14
14
|
import { createContext, useId, useMemo, useState, useRef, useEffect, useCallback, useContext, useReducer } from 'react';
|
|
15
15
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FeedbackMessage } from './chunk-UDNSI5PY.mjs';
|
|
2
|
-
import { themeButtonClassName } from './chunk-
|
|
2
|
+
import { themeButtonClassName } from './chunk-R5ESWNKX.mjs';
|
|
3
3
|
import { clsx_default } from './chunk-AUJ5DBZJ.mjs';
|
|
4
4
|
import { useId } from 'react';
|
|
5
5
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { useBlockApi, BlockApiError } from './chunk-UDNSI5PY.mjs';
|
|
3
|
-
import { themeButtonClassName } from './chunk-
|
|
3
|
+
import { themeButtonClassName } from './chunk-R5ESWNKX.mjs';
|
|
4
4
|
import { useState, useSyncExternalStore, useEffect } from 'react';
|
|
5
5
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
6
6
|
|
|
@@ -771,7 +771,7 @@ var themeColorBaseTokenNames = [
|
|
|
771
771
|
"accentForeground"
|
|
772
772
|
];
|
|
773
773
|
var themeColorBaseTokenSet = new Set(themeColorBaseTokenNames);
|
|
774
|
-
var
|
|
774
|
+
var themeColorShadeSteps = [
|
|
775
775
|
"50",
|
|
776
776
|
"100",
|
|
777
777
|
"200",
|
|
@@ -784,7 +784,7 @@ var SHADE_STEPS = [
|
|
|
784
784
|
"900",
|
|
785
785
|
"950"
|
|
786
786
|
];
|
|
787
|
-
var shadeStepSet = new Set(
|
|
787
|
+
var shadeStepSet = new Set(themeColorShadeSteps);
|
|
788
788
|
function isKnownBaseToken(value) {
|
|
789
789
|
return themeColorBaseTokenSet.has(value);
|
|
790
790
|
}
|
|
@@ -1971,6 +1971,9 @@ function resolveRepeaterGridColumnFieldId(options) {
|
|
|
1971
1971
|
return asNonEmptyString(options?.id) ?? DEFAULT_REPEATER_GRID_COLUMN_FIELD_ID;
|
|
1972
1972
|
}
|
|
1973
1973
|
|
|
1974
|
+
// ../blocks/src/system/icons/presets.ts
|
|
1975
|
+
var ICON_PICKER_PRESETS = ["cta", "feature"];
|
|
1976
|
+
|
|
1974
1977
|
// ../blocks/src/system/manifest/schema.ts
|
|
1975
1978
|
var visibilityLevels = ["admin", "designer", "author"];
|
|
1976
1979
|
var MEDIA_KINDS = [
|
|
@@ -2129,7 +2132,7 @@ var uiSchema = z.object({
|
|
|
2129
2132
|
layoutGridColumnField: z.string().optional(),
|
|
2130
2133
|
layoutGridMaxRows: z.number().int().positive().optional(),
|
|
2131
2134
|
// Icon picker configuration (used when ui.widget === 'iconPicker')
|
|
2132
|
-
iconPickerPreset: z.enum(
|
|
2135
|
+
iconPickerPreset: z.enum(ICON_PICKER_PRESETS).optional(),
|
|
2133
2136
|
// Entry picker configuration
|
|
2134
2137
|
contentTypeField: z.string().optional(),
|
|
2135
2138
|
fixedContentType: z.string().optional(),
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-
|
|
1
|
+
import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-R5ESWNKX.mjs';
|
|
2
2
|
import * as React from 'react';
|
|
3
3
|
|
|
4
4
|
var EMPTY_STATE = EMPTY_COMMERCE_CART_STATE;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { ChevronLeft, ChevronRight } from './chunk-
|
|
2
|
+
import { ChevronLeft, ChevronRight } from './chunk-R5ESWNKX.mjs';
|
|
3
3
|
import { clsx_default } from './chunk-AUJ5DBZJ.mjs';
|
|
4
4
|
import React, { useRef, useState, useCallback, useEffect } from 'react';
|
|
5
5
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { addPassToCommerceCart, useCommerceCart } from './chunk-
|
|
3
|
-
import { CarouselNodeClient } from './chunk-
|
|
2
|
+
import { addPassToCommerceCart, useCommerceCart } from './chunk-TYONZMST.mjs';
|
|
3
|
+
import { CarouselNodeClient } from './chunk-UDS3NTWA.mjs';
|
|
4
4
|
import { isRecord } from './chunk-I2MMZO53.mjs';
|
|
5
5
|
import { useDiscountCodeUi } from './chunk-ZFHRN6W2.mjs';
|
|
6
|
-
import { createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, DiscountCodeDisclosure, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-
|
|
6
|
+
import { createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, DiscountCodeDisclosure, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-CCNTDRCF.mjs';
|
|
7
7
|
import { ModalShell, resolveDedicatedCheckoutPath } from './chunk-3PEDD5KJ.mjs';
|
|
8
8
|
import { useBlockApi, FeedbackMessage, BlockApiProvider } from './chunk-UDNSI5PY.mjs';
|
|
9
9
|
import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
|
|
10
|
-
import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, deriveCommerceCheckoutState, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever11, reportWorkflowError, clearWorkflowFeedback } from './chunk-
|
|
10
|
+
import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, deriveCommerceCheckoutState, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever11, reportWorkflowError, clearWorkflowFeedback } from './chunk-R5ESWNKX.mjs';
|
|
11
11
|
import { assertNever, ok, err, getCurrentResolveImageUrlContext, resolveImageUrlWithContext, ImagePresets } from './chunk-AUJ5DBZJ.mjs';
|
|
12
12
|
import * as React3 from 'react';
|
|
13
13
|
import React3__default, { useState, useRef, useCallback, useEffect } from 'react';
|