@riverbankcms/sdk 0.95.0 → 0.96.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.
Files changed (149) hide show
  1. package/README.md +27 -4
  2. package/dist/{PreviewEditorSidebar-6FQYKOSB.mjs → PreviewEditorSidebar-46VT4QVU.mjs} +2 -2
  3. package/dist/{PreviewEditorUI-NPO2XMFB.mjs → PreviewEditorUI-JD75GE5F.mjs} +2 -2
  4. package/dist/SdkPreviewModeRuntime-MJUSYUFB.mjs +8 -0
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +10 -10
  6. package/dist/_dts/block-form/src/client/index.d.ts +1 -1
  7. package/dist/_dts/block-form/src/fields/types.d.ts +9 -1
  8. package/dist/_dts/block-form/src/registry/schemas.d.ts +4 -0
  9. package/dist/_dts/block-form/src/registry/widgets.d.ts +1 -0
  10. package/dist/_dts/block-form/src/widgets/InlineTextField/InlineTextField.d.ts +4 -0
  11. package/dist/_dts/block-form/src/widgets/InlineTextField/index.d.ts +3 -0
  12. package/dist/_dts/block-form/src/widgets/InlineTextField/inlineTextFieldDefaults.d.ts +2 -0
  13. package/dist/_dts/block-form/src/widgets/InlineTextField/inlineTextFieldSchema.d.ts +3 -0
  14. package/dist/_dts/blocks/src/bindings/index.d.ts +1 -0
  15. package/dist/_dts/blocks/src/bindings/types.d.ts +1 -0
  16. package/dist/_dts/blocks/src/index.d.ts +2 -0
  17. package/dist/_dts/blocks/src/system/blocks/appointment-booking.d.ts +2 -29631
  18. package/dist/_dts/blocks/src/system/blocks/blog-listing.d.ts +2 -29614
  19. package/dist/_dts/blocks/src/system/blocks/cart.d.ts +2 -29634
  20. package/dist/_dts/blocks/src/system/blocks/checkout.d.ts +2 -29627
  21. package/dist/_dts/blocks/src/system/blocks/collection.d.ts +2 -29585
  22. package/dist/_dts/blocks/src/system/blocks/faq.d.ts +2 -29677
  23. package/dist/_dts/blocks/src/system/blocks/gifting.d.ts +2 -29655
  24. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +220 -0
  25. package/dist/_dts/blocks/src/system/blocks/product-detail.d.ts +2 -29655
  26. package/dist/_dts/blocks/src/system/blocks/product-list.d.ts +2 -29685
  27. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -29761
  28. package/dist/_dts/blocks/src/system/fragments/library/heroCopy.d.ts +9 -0
  29. package/dist/_dts/blocks/src/system/inlineText.d.ts +78 -0
  30. package/dist/_dts/blocks/src/system/manifest/derivedContent.d.ts +3 -1
  31. package/dist/_dts/blocks/src/system/manifest/fieldValidation/index.d.ts +15 -3
  32. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +188 -7
  33. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +2 -1
  34. package/dist/_dts/blocks/src/system/runtime/nodes/renderInlineText.d.ts +3 -0
  35. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  36. package/dist/_dts/content-editor/src/primitives/PreviewInlineTextEditor.d.ts +9 -0
  37. package/dist/_dts/content-model/src/templates/bindingTypeCompatibility.d.ts +1 -1
  38. package/dist/_dts/content-model/src/templates/defaults.d.ts +30 -0
  39. package/dist/_dts/content-model/src/templates/types.d.ts +1 -0
  40. package/dist/_dts/editor/src/inline/FloatingToolbar.d.ts +18 -0
  41. package/dist/_dts/editor/src/inline/InlineTextEditor.d.ts +18 -1
  42. package/dist/_dts/editor/src/inline/InlineTextEditorStyles.d.ts +1 -0
  43. package/dist/_dts/editor/src/inline/domParse.d.ts +3 -0
  44. package/dist/_dts/editor/src/inline/presentation.d.ts +48 -0
  45. package/dist/_dts/editor/src/inline/selection.d.ts +12 -0
  46. package/dist/_dts/editor-blocks/src/widgets/index.d.ts +1 -0
  47. package/dist/_dts/editor-blocks/src/widgets/inline-text/InlineTextField.d.ts +3 -0
  48. package/dist/_dts/editor-blocks/src/widgets/inline-text/index.d.ts +1 -0
  49. package/dist/_dts/path-utils/src/index.d.ts +1 -0
  50. package/dist/_dts/preview-next/src/client/widgets/widgetOverrides.d.ts +1 -0
  51. package/dist/_dts/sdk/src/cli/commands/content.d.ts +56 -0
  52. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +4 -0
  53. package/dist/_dts/sdk/src/cli/commands/push/scopes/commandBackedDatedOfferingScope.d.ts +2 -6
  54. package/dist/_dts/sdk/src/cli/commands/push/scopes/types.d.ts +2 -0
  55. package/dist/_dts/sdk/src/cli/commands/push/verification.d.ts +56 -0
  56. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +2 -1
  57. package/dist/_dts/sdk/src/cli/content/edit/format.d.ts +2 -0
  58. package/dist/_dts/sdk/src/cli/content/edit/path.d.ts +14 -0
  59. package/dist/_dts/sdk/src/cli/content/edit/planner.d.ts +46 -0
  60. package/dist/_dts/sdk/src/cli/content/fs-utils.d.ts +4 -0
  61. package/dist/_dts/sdk/src/cli/content/writer.d.ts +2 -0
  62. package/dist/_dts/sdk/src/cli/merge-remote/mergeFieldChanges.d.ts +22 -0
  63. package/dist/_dts/sdk/src/cli/merge-remote/pageLocal.d.ts +3 -0
  64. package/dist/_dts/sdk/src/cli/merge-remote/pageMerge.d.ts +78 -0
  65. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePlan.d.ts +36 -0
  66. package/dist/_dts/sdk/src/cli/merge-remote/pageMergePush.d.ts +21 -0
  67. package/dist/_dts/sdk/src/cli/merge-remote/pageMergeReport.d.ts +29 -0
  68. package/dist/_dts/sdk/src/cli/merge-remote/pageSnapshots.d.ts +48 -0
  69. package/dist/_dts/sdk/src/cli/sync/diff.d.ts +3 -6
  70. package/dist/_dts/sdk/src/cli/sync/field-diff.d.ts +39 -0
  71. package/dist/_dts/sdk/src/cli/sync/index.d.ts +1 -0
  72. package/dist/_dts/sdk/src/config/field-definitions.d.ts +8 -3
  73. package/dist/_dts/sdk/src/config/typed-entries.d.ts +5 -3
  74. package/dist/_dts/sdk/src/contracts/bindings.d.ts +1 -0
  75. package/dist/_dts/sdk/src/contracts/content.d.ts +18 -0
  76. package/dist/_dts/sdk/src/contracts/index.d.ts +1 -1
  77. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +3 -2
  78. package/dist/_dts/sdk/src/rendering/helpers/bindings.d.ts +1 -0
  79. package/dist/_dts/sdk/src/version.d.ts +1 -1
  80. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  81. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -1
  82. package/dist/_dts/theme-core/src/cards/types.d.ts +15 -15
  83. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  84. package/dist/_dts/theme-core/src/inputs/types.d.ts +1 -1
  85. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +42 -42
  86. package/dist/_dts/theme-core/src/palette/variants/types.d.ts +2 -2
  87. package/dist/_dts/theme-core/src/schema.d.ts +44 -44
  88. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  89. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +16 -16
  90. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +4 -4
  91. package/dist/_dts/theme-core/src/site-styles/tokenRecipes.d.ts +1 -1
  92. package/dist/_dts/theme-core/src/tokens/themeColorTokens.d.ts +1 -1
  93. package/dist/{chunk-K2SJTZMX.mjs → chunk-4TLTV7OB.mjs} +1 -1
  94. package/dist/{chunk-4A6NWO3X.mjs → chunk-EL55VV6Q.mjs} +47 -7
  95. package/dist/{chunk-PJPFTVZG.mjs → chunk-VHIMXQ7Z.mjs} +105 -3
  96. package/dist/{chunk-VZBSD4AJ.mjs → chunk-XMATDBXO.mjs} +1633 -225
  97. package/dist/cli/index.mjs +2691 -772
  98. package/dist/cli/init-docs/content/cli-reference.md +43 -4
  99. package/dist/cli/init-docs/content/content-management.md +22 -0
  100. package/dist/client/{accordion-LGO4IO5U.mjs → accordion-GUNXIIZR.mjs} +1 -1
  101. package/dist/client/{bookingForm-MWLS4LGU.mjs → bookingForm-AOU4VHP5.mjs} +3 -3
  102. package/dist/client/{carousel-6AHNP5HA.mjs → carousel-4QSX2JPC.mjs} +1 -1
  103. package/dist/client/{cart-CIXGYAZB.mjs → cart-JKN6C4ZB.mjs} +4 -4
  104. package/dist/client/{checkout-OTX6O3DN.mjs → checkout-YY6YMITW.mjs} +4 -4
  105. package/dist/client/{chunk-Y2PMKCXO.mjs → chunk-6H27K6AA.mjs} +1 -1
  106. package/dist/client/{chunk-R3NQTBWE.mjs → chunk-A3YN7M3G.mjs} +1 -1
  107. package/dist/client/{chunk-TREIML53.mjs → chunk-BFCJZODD.mjs} +3 -3
  108. package/dist/client/{chunk-INRIT6DP.mjs → chunk-CPKMJVBD.mjs} +5 -5
  109. package/dist/client/{chunk-V67AT7ZW.mjs → chunk-GWCRCJLB.mjs} +6 -0
  110. package/dist/client/{chunk-AVBQSUIS.mjs → chunk-H7A6PUGM.mjs} +1 -1
  111. package/dist/client/{chunk-HOP7MKAZ.mjs → chunk-SY543WZ3.mjs} +1 -1
  112. package/dist/client/{chunk-MYCXAKWP.mjs → chunk-VJROUYOQ.mjs} +2 -2
  113. package/dist/client/client.mjs +4007 -3687
  114. package/dist/client/{courseRegistration-2LU6C3JL.mjs → courseRegistration-UU2KMPSQ.mjs} +3 -3
  115. package/dist/client/{eventCalendar-OKUSISBZ.mjs → eventCalendar-WIVNS2TM.mjs} +6 -6
  116. package/dist/client/{eventCombined-CMF6CD4S.mjs → eventCombined-P3G5MW4J.mjs} +6 -6
  117. package/dist/client/{eventDetails-XYWH7WXI.mjs → eventDetails-2VHJ2RDG.mjs} +6 -6
  118. package/dist/client/{eventListing-EK5DJTAH.mjs → eventListing-TGO6JI3R.mjs} +6 -6
  119. package/dist/client/{eventRegistration-XDOSICV6.mjs → eventRegistration-B46HEJES.mjs} +6 -6
  120. package/dist/client/{form-J6GOHKYG.mjs → form-VKRTFUNQ.mjs} +1 -1
  121. package/dist/client/{headerSection-C5SYJTRW.mjs → headerSection-XUX4ZJLO.mjs} +2 -2
  122. package/dist/client/hooks.mjs +20 -3
  123. package/dist/client/{locationMap-QSQIFVVT.mjs → locationMap-NQFI5MJO.mjs} +2 -2
  124. package/dist/client/{newsletterForm-47VXJRWK.mjs → newsletterForm-P2GETCQK.mjs} +1 -1
  125. package/dist/client/{productDetail-5U6ISCC2.mjs → productDetail-7NQ7O5IF.mjs} +4 -4
  126. package/dist/client/{productList-XDZUMR3P.mjs → productList-RX6ZJ7BL.mjs} +4 -4
  127. package/dist/client/rendering/client.mjs +3822 -3600
  128. package/dist/client/rendering/islands.mjs +18 -18
  129. package/dist/client/rendering.mjs +1211 -883
  130. package/dist/client/{shop-ZSZKIY3R.mjs → shop-BHN5AKY6.mjs} +4 -4
  131. package/dist/preview-next/client/runtime.mjs +3 -3
  132. package/dist/{sdk-runtime-PHNM7MRD.mjs → sdk-runtime-X2LXQ5IC.mjs} +4 -4
  133. package/dist/server/components.mjs +3144 -2827
  134. package/dist/server/config-template-validation.mjs +29 -20
  135. package/dist/server/config-validation.mjs +22 -4
  136. package/dist/server/config.mjs +22 -4
  137. package/dist/server/data.mjs +20 -3
  138. package/dist/server/index.mjs +1 -1
  139. package/dist/server/next.mjs +3181 -2858
  140. package/dist/server/page-converter.mjs +20 -3
  141. package/dist/server/prebuild.mjs +1 -1
  142. package/dist/server/rendering/server.mjs +3153 -2837
  143. package/dist/server/rendering.mjs +3168 -2844
  144. package/dist/server/routing.mjs +21 -4
  145. package/dist/server/server.mjs +2299 -2188
  146. package/dist/server/theme-bridge.mjs +43 -0
  147. package/dist/styles/index.css +44 -0
  148. package/package.json +1 -1
  149. package/dist/SdkPreviewModeRuntime-PBEFH5AL.mjs +0 -8
@@ -177,11 +177,12 @@ If unrelated local files would be included by a broad scope, stage a temporary c
177
177
  | `--with-theme` | Also push theme when pushing all content |
178
178
  | `--sync-media` | Sync media files from local to remote environment |
179
179
  | `--overwrite-media` | When using `--sync-media`, overwrite target media on checksum mismatch |
180
- | `--merge-remote` | Plan an entries-only three-way merge for `--env=remote` that preserves remote edits |
180
+ | `--merge-remote` | Plan an entries/pages three-way merge for `--env=remote` that preserves remote edits |
181
181
  | `--delete-orphaned` | Delete CMS entries not present in local files |
182
182
  | `--auto-pull-stale` | Automatically pull stale content and retry push |
183
183
  | `--no-meta` | Skip writing `.meta/` and media manifest files (content files still written) |
184
184
  | `--diff` | Show human-readable field-level diff with before/after values (requires `--dry-run`) |
185
+ | `--verify-noop` | After an applied push, re-fetch the target and fail if changes remain |
185
186
  | `--delete-missing` | **[Deprecated]** Use `--delete-orphaned` instead |
186
187
 
187
188
  **Theme files:**
@@ -206,9 +207,9 @@ riverbankcms push entries service-tile --env=remote --yes --delete-orphaned
206
207
 
207
208
  **Warning:** This is a destructive operation. Always use `--dry-run` first to preview which entries will be deleted.
208
209
 
209
- **Remote-aware entry merge:**
210
+ **Remote-aware content merge:**
210
211
 
211
- Use `--merge-remote` when pushing entries to production and you want to preserve remote dashboard edits instead of treating local files as the whole source of truth. The CLI compares the last pulled base snapshot, local entry files, and current remote entries, then prints a merge plan. Remote runs still default to dry-run; add `--yes` only after reviewing the plan.
212
+ Use `--merge-remote` when pushing entries or pages to production and you want to preserve remote dashboard edits instead of treating local files as the whole source of truth. The CLI compares the last pulled base snapshot, local files, and current remote content, then prints a merge plan. Remote runs still default to dry-run; add `--yes` only after reviewing the plan. Page block changes are treated conservatively as conflicts unless remote blocks are unchanged.
212
213
 
213
214
  ```bash
214
215
  # Preview a merge for one content type
@@ -219,9 +220,43 @@ riverbankcms push entries blog-post --env=remote --merge-remote --yes
219
220
 
220
221
  # Target a single entry
221
222
  riverbankcms push entries blog-post welcome --env=remote --merge-remote --yes
223
+
224
+ # Target a single page
225
+ riverbankcms push pages home --env=remote --merge-remote
222
226
  ```
223
227
 
224
- In v1 this mode only supports `entries` with `--env=remote`. It rejects `--env=both`, non-entry scopes, `--force`, `--delete-orphaned`, and `--auto-pull-stale`.
228
+ In v1 this mode supports `entries` and `pages` with `--env=remote`. It rejects `--env=both`, unsupported scopes, `--force`, `--delete-orphaned`, and `--auto-pull-stale`.
229
+
230
+ **Local content edit helpers:**
231
+
232
+ Use `content edit` for local file-backed edits. These commands do not call the CMS. They preview by default and require `--write` to mutate local files.
233
+
234
+ ```bash
235
+ # Preview removing a block from content/pages/home.json
236
+ riverbankcms content edit remove-page-block home old-hero
237
+
238
+ # Move a page block and write the file
239
+ riverbankcms content edit move-page-block home intro --after hero --write
240
+
241
+ # Set a string field
242
+ riverbankcms content edit set-page-field home title --value "New title" --write
243
+
244
+ # Set a JSON value
245
+ riverbankcms content edit set-page-field home blocks[0].data.count --json-value 3
246
+ ```
247
+
248
+ After editing, run `riverbankcms push --dry-run --diff`, then push with `--verify-noop` when ready.
249
+
250
+ **Post-push no-op verification:**
251
+
252
+ Use `--verify-noop` when automation should prove the target CMS compares cleanly after an applied push. Verification re-reads local files from disk, re-fetches the target environment, and fails the command if remaining changes are found.
253
+
254
+ ```bash
255
+ riverbankcms push --yes --verify-noop
256
+ riverbankcms push --env=both --yes --verify-noop
257
+ ```
258
+
259
+ `--verify-noop` cannot be combined with `--dry-run`; dry-run already answers the pre-push question. For remote targets, pass `--yes` so the push actually applies before verification. In JSON mode the CLI emits a `verification` object with `clean`, `dirty`, `fetch_failed`, or `unsupported_scope` status. A dirty result usually means the push did not leave the target in sync, but it can also mean another user or process changed remote content between the push and verification fetch.
225
260
 
226
261
  **Stale Content Detection:**
227
262
 
@@ -249,6 +284,7 @@ For theme and footer pushes, stale resolution updates only the metadata timestam
249
284
  - Add `identifier` to media fields (slug only, no extension)
250
285
  - Place files at `content/media/<identifier>.<ext>`
251
286
  - Run `riverbankcms push` to upload referenced files (default-on)
287
+ - Treat `content/media/*` as local cache/migration working data by default. Generated SDK sites gitignore it, while allowing intentional small fixtures under `content/media/fixtures/`.
252
288
 
253
289
  **Branding workflow (`content/settings.json`):**
254
290
 
@@ -1099,4 +1135,7 @@ riverbankcms push --env=remote --yes
1099
1135
 
1100
1136
  # Push to both local and remote
1101
1137
  riverbankcms push --env=both --yes
1138
+
1139
+ # Push to both and verify both targets are clean afterwards
1140
+ riverbankcms push --env=both --yes --verify-noop
1102
1141
  ```
@@ -176,6 +176,27 @@ Rich text images (TipTap JSON) are also identifier-based:
176
176
  - Store images as `{ type: "image", attrs: { identifier: "..." } }` (no persisted `attrs.src`)
177
177
  - External `attrs.src` URLs are auto-imported into CMS media on write
178
178
 
179
+ ### `content/media` is local cache by default
180
+
181
+ The generated SDK site `.gitignore` treats `content/media/*` as local cache and
182
+ migration working data by default. This prevents large downloaded files, such as
183
+ audio libraries or environment-clone media, from being staged accidentally. The
184
+ portable source of truth is the media identifier in content JSON; local files are
185
+ only the bytes used by pull/push workflows.
186
+
187
+ If a project intentionally wants to version a few small media fixtures, place
188
+ them under `content/media/fixtures/`. That directory is unignored by the generated
189
+ pattern. For existing SDK repos that already committed local media, opt in to the
190
+ new default with:
191
+
192
+ ```bash
193
+ git rm --cached -r content/media
194
+ git add .gitignore
195
+ git commit -m "Treat content/media as local cache"
196
+ ```
197
+
198
+ Review the staged diff before committing if you keep intentional fixtures.
199
+
179
200
  ### Managing Site Logo and Favicon
180
201
 
181
202
  Use `content/settings.json` as the repo-managed source of truth for branding:
@@ -409,6 +430,7 @@ Notes:
409
430
 
410
431
  - `--sync-media` is **identifier + checksum** based. If the target already has an identifier with different bytes, the command fails unless you pass `--overwrite-media`.
411
432
  - When pulling from remote, `--sync-media` may need to **write to the source CMS** to backfill missing identifiers, so remote sync requires `--yes`.
433
+ - Local media bytes live under `content/media/`, which is treated as cache/migration working data by default in generated SDK sites.
412
434
 
413
435
  #### Promote local files → production CMS
414
436
 
@@ -1,4 +1,4 @@
1
- import { defineIslandPropsDecoder } from './chunk-V67AT7ZW.mjs';
1
+ import { defineIslandPropsDecoder } from './chunk-GWCRCJLB.mjs';
2
2
  import './chunk-PCHACQEB.mjs';
3
3
 
4
4
  // src/rendering/islands/enhancers/accordion.ts
@@ -1,14 +1,14 @@
1
1
  "use client";
2
- import { buildBookingPaymentSelectionViewModel, usePolling } from './chunk-MYCXAKWP.mjs';
2
+ import { buildBookingPaymentSelectionViewModel, usePolling } from './chunk-VJROUYOQ.mjs';
3
3
  import { SpinnerNode } from './chunk-OLAOAZEO.mjs';
4
4
  import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
5
- import { scrollToBlock, useDiscountCodeUi, buildCheckoutReturnUrls, DiscountCodeDisclosure } from './chunk-R3NQTBWE.mjs';
5
+ import { scrollToBlock, useDiscountCodeUi, buildCheckoutReturnUrls, DiscountCodeDisclosure } from './chunk-A3YN7M3G.mjs';
6
6
  import { FieldValidationMessage, getFieldValidationControlProps } from './chunk-3DCJ45Z2.mjs';
7
7
  import './chunk-WBQG7VJA.mjs';
8
8
  import { isSpamProtectionEnabled, getChallengeUrl, AltchaWidget } from './chunk-LJCX6V7Q.mjs';
9
9
  import { BlockApiProvider, useBlockApi, FeedbackMessage } from './chunk-TNGL2WJF.mjs';
10
10
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
11
- import { defineIslandPropsDecoder, resolveBookingSiteId, resolveDefaultBookingServiceId, getBookingRedirectStateFromLocation, deriveBookingFormViewState, logger, getBookingSuccessMessage, getBookingServiceSlidingScale, formatBookingCentsAsCurrencyInput, parseBookingCurrencyInputToCents, resolveAppointmentCheckoutVerificationState, themeButtonClassName, toSelectedCollectionOptionKind, assertNever, prepareBookingSubmission, formatBookingSubmissionPreparationError, resolveBookingPaymentStep, BOOKING_FORM_DATA_RESERVED_KEYS, isBookingServiceSlidingAmountInRange, clearWorkflowFeedback, reportWorkflowError, reportWorkflowSuccess, okWith, err } from './chunk-V67AT7ZW.mjs';
11
+ import { defineIslandPropsDecoder, resolveBookingSiteId, resolveDefaultBookingServiceId, getBookingRedirectStateFromLocation, deriveBookingFormViewState, logger, getBookingSuccessMessage, getBookingServiceSlidingScale, formatBookingCentsAsCurrencyInput, parseBookingCurrencyInputToCents, resolveAppointmentCheckoutVerificationState, themeButtonClassName, toSelectedCollectionOptionKind, assertNever, prepareBookingSubmission, formatBookingSubmissionPreparationError, resolveBookingPaymentStep, BOOKING_FORM_DATA_RESERVED_KEYS, isBookingServiceSlidingAmountInRange, clearWorkflowFeedback, reportWorkflowError, reportWorkflowSuccess, okWith, err } from './chunk-GWCRCJLB.mjs';
12
12
  import { resolveBookingTimeZoneId, DEFAULT_BOOKING_TIME_ZONE, unsafeAsFormId, unsafeAsAppointmentResourceId, unsafeAsCustomerPassId, unsafeAsAppointmentServiceId, formatLocalScheduleDate, addLocalScheduleDays, parseBookingLocalDate, unsafeAsPassId, formatCurrencyAmount, formatBookingInstant } from './chunk-PCHACQEB.mjs';
13
13
  import React2, { useRef, useState, useMemo, useReducer, useEffect, useCallback, useLayoutEffect } from 'react';
14
14
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,7 +1,7 @@
1
1
  import { normalizeCarouselProps, CarouselNodeClient } from './chunk-JNE6UI6U.mjs';
2
2
  import './chunk-6N7YRNYU.mjs';
3
3
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
4
- import { defineIslandPropsDecoder } from './chunk-V67AT7ZW.mjs';
4
+ import { defineIslandPropsDecoder } from './chunk-GWCRCJLB.mjs';
5
5
  import './chunk-PCHACQEB.mjs';
6
6
  import { jsx } from 'react/jsx-runtime';
7
7
 
@@ -1,14 +1,14 @@
1
- import { mountShopBlockIsland, CartClient } from './chunk-TREIML53.mjs';
2
- import './chunk-AVBQSUIS.mjs';
1
+ import { mountShopBlockIsland, CartClient } from './chunk-BFCJZODD.mjs';
2
+ import './chunk-H7A6PUGM.mjs';
3
3
  import './chunk-JNE6UI6U.mjs';
4
4
  import './chunk-6N7YRNYU.mjs';
5
5
  import './chunk-L4J5Y62O.mjs';
6
- import './chunk-R3NQTBWE.mjs';
6
+ import './chunk-A3YN7M3G.mjs';
7
7
  import './chunk-3DCJ45Z2.mjs';
8
8
  import './chunk-WBQG7VJA.mjs';
9
9
  import './chunk-TNGL2WJF.mjs';
10
10
  import './chunk-N7PBWBWQ.mjs';
11
- import { defineIslandPropsDecoder } from './chunk-V67AT7ZW.mjs';
11
+ import { defineIslandPropsDecoder } from './chunk-GWCRCJLB.mjs';
12
12
  import './chunk-PCHACQEB.mjs';
13
13
 
14
14
  // src/rendering/islands/enhancers/cart.tsx
@@ -1,14 +1,14 @@
1
- import { mountShopBlockIsland, CheckoutClient } from './chunk-TREIML53.mjs';
2
- import './chunk-AVBQSUIS.mjs';
1
+ import { mountShopBlockIsland, CheckoutClient } from './chunk-BFCJZODD.mjs';
2
+ import './chunk-H7A6PUGM.mjs';
3
3
  import './chunk-JNE6UI6U.mjs';
4
4
  import './chunk-6N7YRNYU.mjs';
5
5
  import './chunk-L4J5Y62O.mjs';
6
- import './chunk-R3NQTBWE.mjs';
6
+ import './chunk-A3YN7M3G.mjs';
7
7
  import './chunk-3DCJ45Z2.mjs';
8
8
  import './chunk-WBQG7VJA.mjs';
9
9
  import './chunk-TNGL2WJF.mjs';
10
10
  import './chunk-N7PBWBWQ.mjs';
11
- import { defineIslandPropsDecoder } from './chunk-V67AT7ZW.mjs';
11
+ import { defineIslandPropsDecoder } from './chunk-GWCRCJLB.mjs';
12
12
  import './chunk-PCHACQEB.mjs';
13
13
 
14
14
  // src/rendering/islands/enhancers/checkout.tsx
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { useBlockApi } from './chunk-TNGL2WJF.mjs';
3
- import { themeButtonClassName, assertNever } from './chunk-V67AT7ZW.mjs';
3
+ import { themeButtonClassName, assertNever } from './chunk-GWCRCJLB.mjs';
4
4
  import { resolvePlanningDateInput, formatBookingPriceDisplay } from './chunk-PCHACQEB.mjs';
5
5
  import { useState, useReducer, useSyncExternalStore, useEffect } from 'react';
6
6
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import { FeedbackMessage, discountAvailabilityHasDiscounts, getAutoAppliedDiscountPreview, discountAvailabilityAllowsManualEntry } from './chunk-TNGL2WJF.mjs';
3
- import { themeButtonClassName } from './chunk-V67AT7ZW.mjs';
3
+ import { themeButtonClassName } from './chunk-GWCRCJLB.mjs';
4
4
  import { formatCurrencyAmount, clsx_default } from './chunk-PCHACQEB.mjs';
5
5
  import { useReducer, useEffect, useId, useRef } from 'react';
6
6
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
@@ -1,12 +1,12 @@
1
1
  "use client";
2
- import { addPassToCommerceCart, useCommerceCart } from './chunk-AVBQSUIS.mjs';
2
+ import { addPassToCommerceCart, useCommerceCart } from './chunk-H7A6PUGM.mjs';
3
3
  import { CarouselNodeClient } from './chunk-JNE6UI6U.mjs';
4
4
  import { buildRouteIslandApiConfig } from './chunk-L4J5Y62O.mjs';
5
- import { useDiscountCodeUi, createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, DiscountCodeDisclosure, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-R3NQTBWE.mjs';
5
+ import { useDiscountCodeUi, createBodyThemePortalRoot, consumeSearchParams, scrollToBlock, TerminalPanel, StateIcon, CheckIcon, CrossIcon, ActionRow, DiscountCodeDisclosure, consumeSearchParam, buildCheckoutReturnUrls } from './chunk-A3YN7M3G.mjs';
6
6
  import { ModalShell, resolveDedicatedCheckoutPath } from './chunk-WBQG7VJA.mjs';
7
7
  import { useBlockApi, FeedbackMessage, BlockApiProvider, discountAvailabilityHasDiscounts, discountAvailabilityAllowsManualEntry, getAutoAppliedDiscountPreview } from './chunk-TNGL2WJF.mjs';
8
8
  import { mountReactIsland } from './chunk-N7PBWBWQ.mjs';
9
- import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, deriveCommerceCheckoutState, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever as assertNever$1, reportWorkflowError, clearWorkflowFeedback, unwrapRichTextRoot, createRichTextDocFromMarkdown, isRecord } from './chunk-V67AT7ZW.mjs';
9
+ import { themeButtonClassName, formatCommercePrice, formatInterval, getShopDisplayForItems, deriveCommerceCheckoutState, buildProductDetailDisplay, productItemKey, buildProductCartItem, buildProductCardDisplay, assertNever as assertNever$1, reportWorkflowError, clearWorkflowFeedback, unwrapRichTextRoot, createRichTextDocFromMarkdown, isRecord } from './chunk-GWCRCJLB.mjs';
10
10
  import { assertNever, ok, err, getCurrentResolveImageUrlContext, resolveImageUrlWithContext, ImagePresets } from './chunk-PCHACQEB.mjs';
11
11
  import * as React3 from 'react';
12
12
  import React3__default, { useState, useRef, useCallback, useEffect } from 'react';
@@ -1,15 +1,15 @@
1
1
  "use client";
2
- import { LeafletStaticMap } from './chunk-HOP7MKAZ.mjs';
3
- import { resolveCoursePricingState, useWaitlistClaim, MagicLinkForm, formatCoursePriceAmount, formatCoursePriceDisplay } from './chunk-Y2PMKCXO.mjs';
2
+ import { LeafletStaticMap } from './chunk-SY543WZ3.mjs';
3
+ import { resolveCoursePricingState, useWaitlistClaim, MagicLinkForm, formatCoursePriceAmount, formatCoursePriceDisplay } from './chunk-6H27K6AA.mjs';
4
4
  import { CreditCard, Ticket, Star, Sparkles } from './chunk-6N7YRNYU.mjs';
5
- import { usePolling, buildBookingPaymentSelectionViewModel } from './chunk-MYCXAKWP.mjs';
5
+ import { usePolling, buildBookingPaymentSelectionViewModel } from './chunk-VJROUYOQ.mjs';
6
6
  import { SpinnerNode } from './chunk-OLAOAZEO.mjs';
7
- import { createBodyThemePortalRoot, TabBarFragment, useDiscountCodeUi, logoutPortal, consumeSearchParam, StepIndicator, DiscountCodeDisclosure, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, LoggedInAsUser, CheckIcon } from './chunk-R3NQTBWE.mjs';
7
+ import { createBodyThemePortalRoot, TabBarFragment, useDiscountCodeUi, logoutPortal, consumeSearchParam, StepIndicator, DiscountCodeDisclosure, TerminalPanel, StateIcon, formatPrice, CrossIcon, ClockIcon, LoggedInAsUser, CheckIcon } from './chunk-A3YN7M3G.mjs';
8
8
  import { getFieldValidationControlProps, FieldValidationMessage } from './chunk-3DCJ45Z2.mjs';
9
9
  import { ModalShell } from './chunk-WBQG7VJA.mjs';
10
10
  import { isSpamProtectionEnabled, AltchaWidget, getChallengeUrl } from './chunk-LJCX6V7Q.mjs';
11
11
  import { useBlockApi, FeedbackMessage } from './chunk-TNGL2WJF.mjs';
12
- import { buildEventRuntimeFilters, buildEventCalendarListingRender, groupEventsByDate, getOrderedDayNames, formatDateKey, getEventRuntimeFiltersKey, themeButtonClassName, normalizeCsvIds, normalizeOptionalId, normalizeEventBlockKind, normalizeCsvString, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, isToday, MAX_EVENTS_PER_DAY, formatTime, WIZARD_STEPS, getWizardStepsForContext, getStepNumber, formatEventPriceDisplay, resolveRuntimeEventPricing, formatEventPrice, formatEventDateParts, resolveEventLinkProps, DateTimeTile, assertNever, EventCard, buildCalendarViewport, shiftCalendarAnchorDate, addMonths, getThreeMonthRange, buildTimetableModel, formatDate, MONTH_NAMES, getEventAvailability, formatEventTeacherLine, toRegistrationEvents, isEventContentType, findPreSelectedEvent, resolveRegistrationTarget, findEventByOccurrenceId, resolveEventRequiresPayment, resolveDiscountContext } from './chunk-V67AT7ZW.mjs';
12
+ import { buildEventRuntimeFilters, buildEventCalendarListingRender, groupEventsByDate, getOrderedDayNames, formatDateKey, getEventRuntimeFiltersKey, themeButtonClassName, normalizeCsvIds, normalizeOptionalId, normalizeEventBlockKind, normalizeCsvString, EventCompactRow, EmptyState, getContainerClass, getCardOrientation, isToday, MAX_EVENTS_PER_DAY, formatTime, WIZARD_STEPS, getWizardStepsForContext, getStepNumber, formatEventPriceDisplay, resolveRuntimeEventPricing, formatEventPrice, formatEventDateParts, resolveEventLinkProps, DateTimeTile, assertNever, EventCard, buildCalendarViewport, shiftCalendarAnchorDate, addMonths, getThreeMonthRange, buildTimetableModel, formatDate, MONTH_NAMES, getEventAvailability, formatEventTeacherLine, toRegistrationEvents, isEventContentType, findPreSelectedEvent, resolveRegistrationTarget, findEventByOccurrenceId, resolveEventRequiresPayment, resolveDiscountContext } from './chunk-GWCRCJLB.mjs';
13
13
  import { publicEventPricingType, getBookingLocalDateKey, toScheduledBookingDateTime, toBookingTimeZone, publicEventPricingCurrency, formatBookingDateTime, publicEventPricingMode, publicEventScalarPrice, publicEventTicketTypes, formatCurrencyAmount, formatBookingDate, formatBookingTime } from './chunk-PCHACQEB.mjs';
14
14
  import React9, { createContext, useId, useMemo, useReducer, useState, useRef, useEffect, useCallback, useContext } from 'react';
15
15
  import { createPortal } from 'react-dom';
@@ -2587,6 +2587,11 @@ var textFieldSchema = baseFieldSchema.extend({
2587
2587
  var richTextFieldSchema = baseFieldSchema.extend({
2588
2588
  type: z.literal("richText")
2589
2589
  });
2590
+ var inlineTextFieldSchema = baseFieldSchema.extend({
2591
+ type: z.literal("inlineText"),
2592
+ maxLength: z.number().int().positive().optional(),
2593
+ plainTextField: z.string().min(1).optional()
2594
+ });
2590
2595
  var mediaFieldSchema = baseFieldSchema.extend({
2591
2596
  type: z.literal("media"),
2592
2597
  // Keep full MEDIA_KINDS parse compatibility for pre-file-field manifests.
@@ -2909,6 +2914,7 @@ function getFieldSchemaInternal() {
2909
2914
  _fieldSchemaInternal = z.discriminatedUnion("type", [
2910
2915
  textFieldSchema,
2911
2916
  richTextFieldSchema,
2917
+ inlineTextFieldSchema,
2912
2918
  mediaFieldSchema,
2913
2919
  fileFieldSchema,
2914
2920
  booleanFieldSchema,
@@ -1,4 +1,4 @@
1
- import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-V67AT7ZW.mjs';
1
+ import { EMPTY_COMMERCE_CART_STATE, parseStoredCommerceCartState, reduceCommerceCart, buildPassCartItem } from './chunk-GWCRCJLB.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 { isRecord } from './chunk-V67AT7ZW.mjs';
2
+ import { isRecord } from './chunk-GWCRCJLB.mjs';
3
3
  import { useRef, useState, useEffect } from 'react';
4
4
  import { jsx } from 'react/jsx-runtime';
5
5
 
@@ -1,6 +1,6 @@
1
1
  "use client";
2
- import { formatPrice } from './chunk-R3NQTBWE.mjs';
3
- import { assertNever } from './chunk-V67AT7ZW.mjs';
2
+ import { formatPrice } from './chunk-A3YN7M3G.mjs';
3
+ import { assertNever } from './chunk-GWCRCJLB.mjs';
4
4
  import { resolveFlexibleBalanceInitialPaymentCents, resolveFlexibleBalanceDueAt, getBookingInstalmentDepositRefundability, splitAmountWithRemainderInFirst, addIntervalPreservingMonthAnchor, clampConfiguredAmount, getBookingInstalmentPlanIntervalCount, omitZeroAmountFutureRows } from './chunk-PCHACQEB.mjs';
5
5
  import { useReducer, useRef, useCallback, useEffect } from 'react';
6
6