@riverbankcms/sdk 0.98.0 → 0.99.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 (120) hide show
  1. package/dist/{PreviewEditorSidebar-CG3SSJND.mjs → PreviewEditorSidebar-TPOKCCKY.mjs} +3 -3
  2. package/dist/{PreviewEditorUI-RHNGKAAU.mjs → PreviewEditorUI-Y347GLC2.mjs} +3 -3
  3. package/dist/SdkPreviewModeRuntime-OGTXRQ4M.mjs +8 -0
  4. package/dist/_dts/ai/src/contracts/proposals.d.ts +36 -36
  5. package/dist/_dts/api/src/billing.d.ts +2 -0
  6. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +5 -1
  7. package/dist/_dts/api/src/endpoints.d.ts +8 -0
  8. package/dist/_dts/api/src/index.d.ts +1 -1
  9. package/dist/_dts/api/src/siteOperations.d.ts +65 -1
  10. package/dist/_dts/billing/src/site-arrangements.d.ts +151 -0
  11. package/dist/_dts/billing/src/subscriptions/store.d.ts +2 -0
  12. package/dist/_dts/block-form/src/widgets/RepeaterField/utils/resolveThumbnail.d.ts +2 -1
  13. package/dist/_dts/blocks/src/PageRenderer.d.ts +6 -0
  14. package/dist/_dts/blocks/src/system/runtime/components/booking/DatePicker.d.ts +6 -2
  15. package/dist/_dts/blocks/src/system/runtime/components/booking/SuccessMessage.d.ts +3 -1
  16. package/dist/_dts/blocks/src/system/runtime/components/booking/TimeSlotSelector.d.ts +10 -4
  17. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.state.d.ts +2 -2
  18. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +11 -0
  19. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/StepIndicator.d.ts +3 -1
  20. package/dist/_dts/blocks/src/system/runtime/shared/components/FeedbackMessage.d.ts +2 -1
  21. package/dist/_dts/blocks/src/system/runtime/{nodes/event-registration → shared/components}/SelectableOptionCard.d.ts +11 -2
  22. package/dist/_dts/blocks/src/system/runtime/shared/components/StepIndicator.d.ts +16 -5
  23. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +2 -0
  24. package/dist/_dts/blocks/src/system/runtime/shared/index.d.ts +2 -2
  25. package/dist/_dts/blocks/src/utils/date-formatting.d.ts +17 -1
  26. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +274 -30
  27. package/dist/_dts/sdk/src/__mocks__/next-cache.d.ts +1 -1
  28. package/dist/_dts/sdk/src/cli/commands/push.d.ts +13 -0
  29. package/dist/_dts/sdk/src/cli/merge-remote/entryMergeReport.d.ts +6 -18
  30. package/dist/_dts/sdk/src/cli/merge-remote/entrySnapshots.d.ts +2 -4
  31. package/dist/_dts/sdk/src/cli/merge-remote/pageMergeReport.d.ts +6 -18
  32. package/dist/_dts/sdk/src/cli/merge-remote/pageSnapshots.d.ts +2 -4
  33. package/dist/_dts/sdk/src/cli/merge-remote/sharedBaseSnapshots.d.ts +32 -0
  34. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergePlan.d.ts +27 -0
  35. package/dist/_dts/sdk/src/cli/merge-remote/sharedMergeReport.d.ts +63 -0
  36. package/dist/_dts/sdk/src/client/index.d.ts +6 -0
  37. package/dist/_dts/sdk/src/data/prefetchBlockData.d.ts +6 -1
  38. package/dist/_dts/sdk/src/next/types.d.ts +19 -0
  39. package/dist/_dts/sdk/src/prebuild/loader.d.ts +8 -1
  40. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +2 -0
  41. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +4 -0
  42. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +6 -0
  43. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +8 -0
  44. package/dist/_dts/sdk/src/rendering/index.d.ts +7 -7
  45. package/dist/_dts/sdk/src/rendering/overrides.d.ts +2 -0
  46. package/dist/_dts/sdk/src/routing/resolveRoute.d.ts +18 -0
  47. package/dist/_dts/sdk/src/test/apiClient.d.ts +17 -0
  48. package/dist/_dts/sdk/src/test/bunDom.setup.d.ts +1 -0
  49. package/dist/_dts/sdk/src/test/env.d.ts +4 -0
  50. package/dist/_dts/sdk/src/version.d.ts +1 -1
  51. package/dist/_dts/site-commands/src/commands.d.ts +3 -3
  52. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  53. package/dist/_dts/theme-core/src/interactive/generateBaseCSS.d.ts +6 -0
  54. package/dist/_dts/theme-core/src/status/contextualColors.d.ts +6 -0
  55. package/dist/_dts/theme-core/src/status/index.d.ts +1 -0
  56. package/dist/{chunk-H24OU7WG.mjs → chunk-4HXF2QLH.mjs} +2 -2
  57. package/dist/{chunk-QPXE2OUZ.mjs → chunk-EMJIT3ZJ.mjs} +1 -1
  58. package/dist/{chunk-PKDPQHB5.mjs → chunk-PM7HGDHM.mjs} +2 -2
  59. package/dist/{chunk-DBRI3PQF.mjs → chunk-XO34WBBP.mjs} +1383 -1143
  60. package/dist/{chunk-6WDBXCPX.mjs → chunk-YGTTEVUM.mjs} +7 -7
  61. package/dist/{chunk-V2BYFSPW.mjs → chunk-YWTCCOSF.mjs} +8 -0
  62. package/dist/cli/index.mjs +1010 -921
  63. package/dist/client/{accordion-Q2BDNL53.mjs → accordion-QSUEYL4L.mjs} +2 -2
  64. package/dist/client/{bookingForm-ZMP4P7EK.mjs → bookingForm-QYGAHPDP.mjs} +364 -300
  65. package/dist/client/bookings.mjs +697 -411
  66. package/dist/client/{carousel-LW3UXPWO.mjs → carousel-SM2LEWAU.mjs} +3 -3
  67. package/dist/client/{cart-Z6D3KS6K.mjs → cart-3N3SFKNQ.mjs} +7 -7
  68. package/dist/client/{checkout-YMT2QJQM.mjs → checkout-YFAYPKPZ.mjs} +7 -7
  69. package/dist/client/{chunk-XNTHVZ25.mjs → chunk-5DLGREUB.mjs} +1 -1
  70. package/dist/client/{chunk-SK2BMD22.mjs → chunk-CLZ7NBSP.mjs} +147 -75
  71. package/dist/client/{chunk-R4XK3CKR.mjs → chunk-CYJ3MUFP.mjs} +6 -5
  72. package/dist/client/{chunk-JNE6UI6U.mjs → chunk-H3H3ODO7.mjs} +1 -1
  73. package/dist/client/{chunk-IEOECM7U.mjs → chunk-HPEQ4YWW.mjs} +28 -73
  74. package/dist/client/{chunk-PCHACQEB.mjs → chunk-IIUIKJ4K.mjs} +15 -7
  75. package/dist/client/{chunk-KDP7ZRZV.mjs → chunk-IOAHWAQG.mjs} +2 -0
  76. package/dist/client/{chunk-26ZBRXFR.mjs → chunk-JTKBF3W2.mjs} +3 -3
  77. package/dist/client/{chunk-OLAOAZEO.mjs → chunk-K7KTSACR.mjs} +1 -1
  78. package/dist/client/{chunk-ET2MDQQT.mjs → chunk-R32M5HFS.mjs} +6 -6
  79. package/dist/client/{chunk-DRRQ7QSL.mjs → chunk-WEVT46PX.mjs} +3 -3
  80. package/dist/client/{chunk-HBQEAOG4.mjs → chunk-ZU65LTI3.mjs} +1 -1
  81. package/dist/client/client.mjs +1875 -1581
  82. package/dist/client/{courseRegistration-DGKCMC77.mjs → courseRegistration-LYBE7VVK.mjs} +7 -7
  83. package/dist/client/{eventCalendar-74Z2NNFM.mjs → eventCalendar-FMTB75X6.mjs} +9 -9
  84. package/dist/client/{eventCombined-GK2ODOX2.mjs → eventCombined-E4LUCJXT.mjs} +9 -9
  85. package/dist/client/{eventDetails-MONAGT3N.mjs → eventDetails-GELSRR4Z.mjs} +9 -9
  86. package/dist/client/{eventListing-SKGAO6PS.mjs → eventListing-TB623B6R.mjs} +9 -9
  87. package/dist/client/{eventRegistration-6KISGXRD.mjs → eventRegistration-NRIKHXTI.mjs} +9 -9
  88. package/dist/client/{form-FXPRTXHI.mjs → form-Y4U4IAXE.mjs} +3 -3
  89. package/dist/client/{headerSection-7NAN5WNB.mjs → headerSection-QSOVV5P7.mjs} +3 -3
  90. package/dist/client/hooks.mjs +115 -21
  91. package/dist/client/{locationMap-UERN74U4.mjs → locationMap-QYCAHH7H.mjs} +3 -3
  92. package/dist/client/{newsletterForm-SGWXMJ7U.mjs → newsletterForm-NWHY5TBY.mjs} +3 -3
  93. package/dist/client/{productDetail-HN3HWZQZ.mjs → productDetail-FYDMU2CE.mjs} +7 -7
  94. package/dist/client/{productList-YT22Z5UR.mjs → productList-D76CGACQ.mjs} +7 -7
  95. package/dist/client/rendering/client.mjs +1209 -975
  96. package/dist/client/rendering/islands.mjs +19 -19
  97. package/dist/client/rendering.mjs +1952 -1638
  98. package/dist/client/{shop-TKEDNWUS.mjs → shop-SOUACT5N.mjs} +7 -7
  99. package/dist/preview-next/before-render.mjs +8 -0
  100. package/dist/preview-next/client/runtime.mjs +5 -5
  101. package/dist/preview-next/middleware.mjs +8 -0
  102. package/dist/{sdk-runtime-LWNYCQF2.mjs → sdk-runtime-XPVE3LBA.mjs} +6 -6
  103. package/dist/server/components.mjs +917 -765
  104. package/dist/server/config-validation.mjs +100 -19
  105. package/dist/server/config.mjs +100 -19
  106. package/dist/server/data.mjs +115 -21
  107. package/dist/server/index.mjs +59 -25
  108. package/dist/server/next.mjs +1017 -816
  109. package/dist/server/page-converter.mjs +92 -19
  110. package/dist/server/prebuild-loader.mjs +42 -23
  111. package/dist/server/prebuild.mjs +1 -1
  112. package/dist/server/rendering/server.mjs +932 -767
  113. package/dist/server/rendering.mjs +968 -776
  114. package/dist/server/routing.mjs +162 -36
  115. package/dist/server/server.mjs +156 -32
  116. package/dist/server/theme-bridge.mjs +597 -505
  117. package/dist/server/theme.mjs +5 -4
  118. package/dist/styles/index.css +499 -490
  119. package/package.json +6 -4
  120. package/dist/SdkPreviewModeRuntime-OV5PNJBB.mjs +0 -8
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { unwrapResponse, ApiRequestError, ApiEnvelopeError, extractApiEnvelopeErrorDetails } from './chunk-V2BYFSPW.mjs';
2
+ import { unwrapResponse, ApiRequestError, ApiEnvelopeError, extractApiEnvelopeErrorDetails } from './chunk-YWTCCOSF.mjs';
3
3
  import { __commonJS, __export, __toESM } from './chunk-R7POPVJR.mjs';
4
4
  import * as React61 from 'react';
5
5
  import React61__default, { createContext, forwardRef, useContext, createElement, useRef, useMemo, useEffect, useState, useCallback, useImperativeHandle, useLayoutEffect, memo, createRef, Component as Component$1, useDebugValue, useId as useId$1, useSyncExternalStore, isValidElement, cloneElement, useReducer, startTransition } from 'react';
@@ -429,6 +429,13 @@ function assertNever3(value) {
429
429
  // ../core/src/booking-date-time.ts
430
430
  var DEFAULT_LOCALE = "en-US";
431
431
  var FALLBACK_TIMEZONE = "UTC";
432
+ var DEFAULT_BOOKING_DATE_TIME_FORMAT = {
433
+ weekday: "short",
434
+ month: "short",
435
+ day: "numeric",
436
+ hour: "numeric",
437
+ minute: "2-digit"
438
+ };
432
439
  var LOCAL_DATE_PATTERN = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
433
440
  function isValidTimeZone(timeZone) {
434
441
  try {
@@ -631,13 +638,14 @@ function formatBookingTime(input, format2 = {
631
638
  format: format2
632
639
  });
633
640
  }
634
- function formatBookingDateTime(input, format2 = {
635
- weekday: "short",
636
- month: "short",
637
- day: "numeric",
638
- hour: "numeric",
639
- minute: "2-digit"
640
- }) {
641
+ function formatBookingDateTime(input, format2 = DEFAULT_BOOKING_DATE_TIME_FORMAT) {
642
+ if (format2 === DEFAULT_BOOKING_DATE_TIME_FORMAT) {
643
+ return `${formatBookingDate(input, {
644
+ weekday: "short",
645
+ month: "short",
646
+ day: "numeric"
647
+ })}, ${formatBookingTime(input)}`;
648
+ }
641
649
  return formatBookingInstant(input.startsAt, {
642
650
  locale: input.locale,
643
651
  timeZone: input.timeZone,
@@ -37427,6 +37435,79 @@ var TokenResolver = class {
37427
37435
  }
37428
37436
  };
37429
37437
 
37438
+ // ../theme-core/src/interactive/generateBaseCSS.ts
37439
+ var FONT_WEIGHT_MAP = {
37440
+ regular: 400,
37441
+ medium: 500,
37442
+ semibold: 600,
37443
+ bold: 700
37444
+ };
37445
+ function generateBaseInteractiveCSS(options) {
37446
+ const {
37447
+ typography,
37448
+ padding,
37449
+ borderRadius,
37450
+ includeTransition = true,
37451
+ includeFlexCenter = false,
37452
+ borderWidth
37453
+ } = options;
37454
+ const rules = [];
37455
+ if (typography.fontWeight !== void 0) {
37456
+ const weight = typeof typography.fontWeight === "number" ? typography.fontWeight : FONT_WEIGHT_MAP[typography.fontWeight];
37457
+ rules.push(`font-weight: ${weight};`);
37458
+ }
37459
+ if (typography.typography === "heading") {
37460
+ rules.push(`font-family: var(--font-heading);`);
37461
+ rules.push(`letter-spacing: var(--ls-heading);`);
37462
+ } else if (typography.typography === "body") {
37463
+ rules.push(`font-family: var(--font-body);`);
37464
+ }
37465
+ if (typography.italic) {
37466
+ rules.push(`font-style: italic;`);
37467
+ }
37468
+ if (typography.textTransform && typography.textTransform !== "none") {
37469
+ rules.push(`text-transform: ${typography.textTransform};`);
37470
+ }
37471
+ if (padding) {
37472
+ if (borderWidth && borderWidth !== "0px") {
37473
+ const paddingParts = padding.split(" ");
37474
+ const verticalPadding = paddingParts[0] || "0.5rem";
37475
+ const horizontalPadding = paddingParts[1] || paddingParts[0] || "1rem";
37476
+ rules.push(`padding-top: calc(${verticalPadding} - ${borderWidth} - 1px);`);
37477
+ rules.push(`padding-bottom: calc(${verticalPadding} - ${borderWidth} - 1px);`);
37478
+ rules.push(`padding-left: calc(${horizontalPadding} - ${borderWidth});`);
37479
+ rules.push(`padding-right: calc(${horizontalPadding} - ${borderWidth});`);
37480
+ } else {
37481
+ rules.push(`padding: ${padding};`);
37482
+ }
37483
+ }
37484
+ if (borderRadius) {
37485
+ rules.push(`border-radius: ${borderRadius};`);
37486
+ }
37487
+ if (includeTransition) {
37488
+ rules.push(`transition: all 200ms ease;`);
37489
+ }
37490
+ if (includeFlexCenter) {
37491
+ rules.push(`display: inline-flex;`);
37492
+ rules.push(`align-items: center;`);
37493
+ rules.push(`justify-content: center;`);
37494
+ rules.push(`cursor: pointer;`);
37495
+ }
37496
+ return rules;
37497
+ }
37498
+ function generateInteractiveChildInheritanceCSS(selector) {
37499
+ return `
37500
+ ${selector} * {
37501
+ font-family: inherit;
37502
+ font-weight: inherit;
37503
+ font-style: inherit;
37504
+ letter-spacing: inherit;
37505
+ text-transform: inherit;
37506
+ color: inherit;
37507
+ }
37508
+ `;
37509
+ }
37510
+
37430
37511
  // ../theme-core/src/buttons/effects/presets/background.ts
37431
37512
  var darkenBackgroundEffect = {
37432
37513
  id: "darken-background",
@@ -38908,7 +38989,9 @@ function resolveAliasSource(enabled) {
38908
38989
  function variantChunks(variant, global, themeSizes, themeId, tokens, theme) {
38909
38990
  const out = [];
38910
38991
  const variantId = parseButtonVariantIdForCss(variant.id);
38911
- out.push(variantBaseRule(variant, variantId, global, themeId, tokens, theme));
38992
+ const selector = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}`;
38993
+ out.push(variantBaseRule(variant, selector, global, tokens, theme));
38994
+ out.push({ raw: generateInteractiveChildInheritanceCSS(selector) });
38912
38995
  const hoverBg = variantHoverBackgroundRule(variant, variantId, global, themeId, tokens);
38913
38996
  if (hoverBg) out.push(hoverBg);
38914
38997
  out.push(variantFocusVisibleRule(variantId, themeId));
@@ -38925,8 +39008,7 @@ function parseButtonVariantIdForCss(value) {
38925
39008
  }
38926
39009
  return variantId;
38927
39010
  }
38928
- function variantBaseRule(variant, variantId, global, themeId, tokens, theme) {
38929
- const selector = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}`;
39011
+ function variantBaseRule(variant, selector, global, tokens, theme) {
38930
39012
  const decls = [];
38931
39013
  decls.push(["font-weight", String(global.fontWeight)]);
38932
39014
  decls.push(["font-family", resolveFontFamily(global)]);
@@ -39559,15 +39641,16 @@ var joyStamp = defineButtonPersonality({
39559
39641
  // 700, matching the mockup's chunky button labels.
39560
39642
  typography: "heading",
39561
39643
  fontWeight: 700,
39644
+ fontSize: "text-lg",
39562
39645
  borderWidth: 2,
39563
39646
  hoverTransform: "none",
39564
39647
  hoverColor: "none"
39565
39648
  },
39566
39649
  sizes: {
39567
- sm: { padding: "0.625rem 1.25rem", fontSize: "text-sm" },
39568
- md: { padding: "0.875rem 1.75rem", fontSize: "text-base" },
39569
- lg: { padding: "1.125rem 2.25rem", fontSize: "text-lg" },
39570
- xl: { padding: "1.25rem 2.75rem", fontSize: "text-xl" }
39650
+ sm: { padding: "0.625rem 1.25rem", fontSize: "text-base" },
39651
+ md: { padding: "0.875rem 1.75rem", fontSize: "text-lg" },
39652
+ lg: { padding: "1.125rem 2.25rem", fontSize: "text-xl" },
39653
+ xl: { padding: "1.25rem 2.75rem", fontSize: "text-2xl" }
39571
39654
  },
39572
39655
  variants: [
39573
39656
  {
@@ -40150,6 +40233,20 @@ function generateDefaultCardSystem(theme) {
40150
40233
  };
40151
40234
  }
40152
40235
 
40236
+ // ../theme-core/src/status/contextualColors.ts
40237
+ var STATUS_MUTED_COLOR_VAR = "--rb-status-muted-color";
40238
+ var DEFAULT_STATUS_MUTED_COLOR = "rgb(var(--tb-mutedText))";
40239
+ var SURFACE_MUTED_STATUS_COLOR = "color-mix(in oklab, currentColor, transparent 18%)";
40240
+ function statusMutedColorValue() {
40241
+ return `var(${STATUS_MUTED_COLOR_VAR}, ${DEFAULT_STATUS_MUTED_COLOR})`;
40242
+ }
40243
+ function statusMutedColorDeclaration() {
40244
+ return `color: ${statusMutedColorValue()};`;
40245
+ }
40246
+ function contextualMutedStatusColorDeclaration(value) {
40247
+ return `${STATUS_MUTED_COLOR_VAR}: ${value}`;
40248
+ }
40249
+
40153
40250
  // ../theme-core/src/cards/generateCardCss.ts
40154
40251
  var PER_CORNER_RADIUS_MAP = {
40155
40252
  square: "0",
@@ -40223,6 +40320,7 @@ function generateVariantCSS(variant, themeId, tokens, theme) {
40223
40320
  if (variant.foregroundToken) {
40224
40321
  rules.push(`color: ${tokens.getColor(variant.foregroundToken)}`);
40225
40322
  }
40323
+ rules.push(contextualMutedStatusColorDeclaration(SURFACE_MUTED_STATUS_COLOR));
40226
40324
  if (variant.accentEdge) {
40227
40325
  const side = ACCENT_EDGE_SIDE_MAP[variant.accentEdge.edge];
40228
40326
  const width = ACCENT_EDGE_WIDTH_MAP[variant.accentEdge.width];
@@ -40475,7 +40573,7 @@ var LABEL_FONT_SIZE_MAP = {
40475
40573
  base: "1rem"
40476
40574
  // 16px
40477
40575
  };
40478
- var FONT_WEIGHT_MAP = {
40576
+ var FONT_WEIGHT_MAP2 = {
40479
40577
  regular: "400",
40480
40578
  medium: "500",
40481
40579
  semibold: "600",
@@ -75290,14 +75388,27 @@ function BookingFormSSR({
75290
75388
  return /* @__PURE__ */ jsxs(
75291
75389
  "div",
75292
75390
  {
75293
- className: `booking-form-ssr ${className ?? ""}`.trim(),
75391
+ className: `rb-reg-surface booking-form-ssr ${display.state === "missing" ? "" : "ab-shell "}${className ?? ""}`.trim(),
75294
75392
  ...getIslandRootProps("booking-form", blockId),
75393
+ "aria-busy": display.state === "missing" ? void 0 : true,
75394
+ "aria-label": display.state === "missing" ? void 0 : "Loading booking form",
75395
+ role: display.state === "missing" ? void 0 : "status",
75295
75396
  children: [
75296
75397
  /* @__PURE__ */ jsx(IslandPropsScript, { value: islandProps }),
75297
- /* @__PURE__ */ jsx("div", { className: "booking-form-ssr__summary", children: display.state === "missing" ? /* @__PURE__ */ jsx("p", { className: "booking-form-ssr__error", children: display.message }) : /* @__PURE__ */ jsxs(Fragment, { children: [
75298
- /* @__PURE__ */ jsx("strong", { children: display.submitLabel }),
75299
- display.successMessage ? /* @__PURE__ */ jsx("p", { className: "booking-form-ssr__success", children: display.successMessage }) : null
75300
- ] }) }),
75398
+ display.state === "missing" ? /* @__PURE__ */ jsx("div", { className: "alert alert-error", role: "alert", children: /* @__PURE__ */ jsx("p", { className: "ab-text", children: display.message }) }) : /* @__PURE__ */ jsxs(Fragment, { children: [
75399
+ /* @__PURE__ */ jsx("span", { className: "rb-sr-only", children: "Loading booking form..." }),
75400
+ /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack", "aria-hidden": "true", children: [
75401
+ /* @__PURE__ */ jsx("div", { className: "rb-reg-summary", children: /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
75402
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--md" }),
75403
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--sm" })
75404
+ ] }) }),
75405
+ /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
75406
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--lg" }),
75407
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--xs" })
75408
+ ] }),
75409
+ /* @__PURE__ */ jsx("div", { className: "rb-wizard-actions", children: /* @__PURE__ */ jsx("div", { className: "ab-shell-button", children: display.submitLabel }) })
75410
+ ] })
75411
+ ] }),
75301
75412
  children
75302
75413
  ]
75303
75414
  }
@@ -77855,20 +77966,38 @@ function EventRegistrationShell({
77855
77966
  "div",
77856
77967
  {
77857
77968
  id: EVENT_REGISTRATION_ANCHOR_ID,
77858
- className: "er-container er-registration-shell",
77969
+ className: "rb-reg-surface er-container er-registration-shell",
77859
77970
  "aria-busy": "true",
77860
77971
  role: "status",
77861
77972
  children: /* @__PURE__ */ jsxs("div", { className: "er-payment-layout er-payment-layout--no-sidebar", children: [
77862
77973
  /* @__PURE__ */ jsxs("div", { className: "er-payment-layout-main", children: [
77863
- /* @__PURE__ */ jsx("div", { className: "er-steps-nav er-registration-shell__steps", "aria-hidden": "true", children: /* @__PURE__ */ jsx("ol", { className: "er-steps", children: display.stepLabels.map((label, index2) => {
77974
+ /* @__PURE__ */ jsx("div", { className: "rb-steps-nav er-steps-nav er-registration-shell__steps", "aria-hidden": "true", children: /* @__PURE__ */ jsx("ol", { className: "rb-steps er-steps", children: display.stepLabels.map((label, index2) => {
77864
77975
  const isActive2 = index2 === 0;
77865
- return /* @__PURE__ */ jsxs("li", { className: "er-step", children: [
77866
- /* @__PURE__ */ jsx("span", { className: cx("er-step-circle", isActive2 && "er-step-circle--active"), children: index2 + 1 }),
77867
- /* @__PURE__ */ jsx("span", { className: cx("er-step-label", isActive2 && "er-step-label--active"), children: label }),
77868
- index2 < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx("span", { className: "er-step-connector" }) : null
77976
+ return /* @__PURE__ */ jsxs("li", { className: "rb-step er-step", children: [
77977
+ /* @__PURE__ */ jsx(
77978
+ "span",
77979
+ {
77980
+ className: cx(
77981
+ "rb-step-circle er-step-circle",
77982
+ isActive2 && "rb-step-circle--active er-step-circle--active"
77983
+ ),
77984
+ children: index2 + 1
77985
+ }
77986
+ ),
77987
+ /* @__PURE__ */ jsx(
77988
+ "span",
77989
+ {
77990
+ className: cx(
77991
+ "rb-step-label er-step-label",
77992
+ isActive2 && "rb-step-label--active er-step-label--active"
77993
+ ),
77994
+ children: label
77995
+ }
77996
+ ),
77997
+ index2 < display.stepLabels.length - 1 ? /* @__PURE__ */ jsx("span", { className: "rb-step-connector er-step-connector" }) : null
77869
77998
  ] }, label);
77870
77999
  }) }) }),
77871
- /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
78000
+ /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
77872
78001
  /* @__PURE__ */ jsxs("div", { children: [
77873
78002
  /* @__PURE__ */ jsx("p", { className: "er-registration-shell__eyebrow", children: "Registration" }),
77874
78003
  /* @__PURE__ */ jsx("h3", { className: "er-title er-registration-shell__title", children: display.titleText }),
@@ -77876,20 +78005,20 @@ function EventRegistrationShell({
77876
78005
  ] }),
77877
78006
  /* @__PURE__ */ jsxs("div", { className: "er-event-grid er-registration-shell__cards", "aria-hidden": "true", children: [
77878
78007
  /* @__PURE__ */ jsxs("div", { className: "er-event-card er-registration-shell__card", children: [
77879
- /* @__PURE__ */ jsx("div", { className: "er-registration-shell__line er-registration-shell__line--lg" }),
77880
- /* @__PURE__ */ jsx("div", { className: "er-registration-shell__line er-registration-shell__line--sm" })
78008
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--lg er-registration-shell__line er-registration-shell__line--lg" }),
78009
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--sm er-registration-shell__line er-registration-shell__line--sm" })
77881
78010
  ] }),
77882
78011
  /* @__PURE__ */ jsxs("div", { className: "er-event-card er-registration-shell__card", children: [
77883
- /* @__PURE__ */ jsx("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
77884
- /* @__PURE__ */ jsx("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
78012
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--md er-registration-shell__line er-registration-shell__line--md" }),
78013
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--xs er-registration-shell__line er-registration-shell__line--xs" })
77885
78014
  ] })
77886
78015
  ] })
77887
78016
  ] })
77888
78017
  ] }),
77889
78018
  /* @__PURE__ */ jsx("div", { className: "er-payment-layout-footer", children: /* @__PURE__ */ jsxs("div", { className: "er-summary-bar er-registration-shell__summary", "aria-hidden": "true", children: [
77890
78019
  /* @__PURE__ */ jsxs("div", { className: "er-summary-bar-info", children: [
77891
- /* @__PURE__ */ jsx("div", { className: "er-registration-shell__line er-registration-shell__line--md" }),
77892
- /* @__PURE__ */ jsx("div", { className: "er-registration-shell__line er-registration-shell__line--xs" })
78020
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--md er-registration-shell__line er-registration-shell__line--md" }),
78021
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-line rb-shell-line--xs er-registration-shell__line er-registration-shell__line--xs" })
77893
78022
  ] }),
77894
78023
  /* @__PURE__ */ jsx("div", { className: "er-registration-shell__button-placeholder", children: display.summaryButtonText })
77895
78024
  ] }) })
@@ -77905,6 +78034,7 @@ function FeedbackMessage({
77905
78034
  tone,
77906
78035
  children,
77907
78036
  className,
78037
+ id,
77908
78038
  title,
77909
78039
  titleClassName,
77910
78040
  bodyClassName,
@@ -77916,6 +78046,7 @@ function FeedbackMessage({
77916
78046
  return /* @__PURE__ */ jsxs(
77917
78047
  "div",
77918
78048
  {
78049
+ id,
77919
78050
  className,
77920
78051
  "data-feedback-tone": tone,
77921
78052
  role,
@@ -80127,7 +80258,7 @@ function generateInputCss({
80127
80258
  const labelSelector = `${rootSelector} .form-label`;
80128
80259
  const labelRules = [];
80129
80260
  labelRules.push(`color: ${rgbColorValue(inputSystem.label.textColorToken)}`);
80130
- labelRules.push(`font-weight: ${FONT_WEIGHT_MAP[inputSystem.label.fontWeight]}`);
80261
+ labelRules.push(`font-weight: ${FONT_WEIGHT_MAP2[inputSystem.label.fontWeight]}`);
80131
80262
  labelRules.push(`font-size: ${LABEL_FONT_SIZE_MAP[inputSystem.label.fontSize]}`);
80132
80263
  if (inputSystem.label.textTransform && inputSystem.label.textTransform !== "none") {
80133
80264
  labelRules.push(`text-transform: ${inputSystem.label.textTransform}`);
@@ -80368,67 +80499,6 @@ function generateDefaultInputSystem(theme) {
80368
80499
  };
80369
80500
  }
80370
80501
 
80371
- // ../theme-core/src/interactive/generateBaseCSS.ts
80372
- var FONT_WEIGHT_MAP2 = {
80373
- regular: 400,
80374
- medium: 500,
80375
- semibold: 600,
80376
- bold: 700
80377
- };
80378
- function generateBaseInteractiveCSS(options) {
80379
- const {
80380
- typography,
80381
- padding,
80382
- borderRadius,
80383
- includeTransition = true,
80384
- includeFlexCenter = false,
80385
- borderWidth
80386
- } = options;
80387
- const rules = [];
80388
- if (typography.fontWeight !== void 0) {
80389
- const weight = typeof typography.fontWeight === "number" ? typography.fontWeight : FONT_WEIGHT_MAP2[typography.fontWeight];
80390
- rules.push(`font-weight: ${weight};`);
80391
- }
80392
- if (typography.typography === "heading") {
80393
- rules.push(`font-family: var(--font-heading);`);
80394
- rules.push(`letter-spacing: var(--ls-heading);`);
80395
- } else if (typography.typography === "body") {
80396
- rules.push(`font-family: var(--font-body);`);
80397
- }
80398
- if (typography.italic) {
80399
- rules.push(`font-style: italic;`);
80400
- }
80401
- if (typography.textTransform && typography.textTransform !== "none") {
80402
- rules.push(`text-transform: ${typography.textTransform};`);
80403
- }
80404
- if (padding) {
80405
- if (borderWidth && borderWidth !== "0px") {
80406
- const paddingParts = padding.split(" ");
80407
- const verticalPadding = paddingParts[0] || "0.5rem";
80408
- const horizontalPadding = paddingParts[1] || paddingParts[0] || "1rem";
80409
- rules.push(`padding-top: calc(${verticalPadding} - ${borderWidth} - 1px);`);
80410
- rules.push(`padding-bottom: calc(${verticalPadding} - ${borderWidth} - 1px);`);
80411
- rules.push(`padding-left: calc(${horizontalPadding} - ${borderWidth});`);
80412
- rules.push(`padding-right: calc(${horizontalPadding} - ${borderWidth});`);
80413
- } else {
80414
- rules.push(`padding: ${padding};`);
80415
- }
80416
- }
80417
- if (borderRadius) {
80418
- rules.push(`border-radius: ${borderRadius};`);
80419
- }
80420
- if (includeTransition) {
80421
- rules.push(`transition: all 200ms ease;`);
80422
- }
80423
- if (includeFlexCenter) {
80424
- rules.push(`display: inline-flex;`);
80425
- rules.push(`align-items: center;`);
80426
- rules.push(`justify-content: center;`);
80427
- rules.push(`cursor: pointer;`);
80428
- }
80429
- return rules;
80430
- }
80431
-
80432
80502
  // ../theme-core/src/navigation/generateNavLinkCSS.ts
80433
80503
  function generateNavLinkCSS(options) {
80434
80504
  const { themeId, tokens, theme, style: style2, className } = options;
@@ -80515,14 +80585,7 @@ ${activeSelector} {
80515
80585
  }
80516
80586
  `);
80517
80587
  }
80518
- cssChunks.push(`
80519
- ${selector} * {
80520
- font-family: inherit;
80521
- font-weight: inherit;
80522
- letter-spacing: inherit;
80523
- color: inherit;
80524
- }
80525
- `);
80588
+ cssChunks.push(generateInteractiveChildInheritanceCSS(selector));
80526
80589
  return cssChunks.join("");
80527
80590
  }
80528
80591
  function buildTextContrastShadow(input) {
@@ -81819,7 +81882,7 @@ ${root} .status-error { color: rgb(var(--tb-destructive)); }
81819
81882
  ${root} .status-success { color: rgb(var(--tb-success)); }
81820
81883
  ${root} .status-warning { color: rgb(var(--tb-warning)); }
81821
81884
  ${root} .status-info { color: rgb(var(--tb-info)); }
81822
- ${root} .status-muted { color: rgb(var(--tb-mutedText)); }`);
81885
+ ${root} .status-muted { ${statusMutedColorDeclaration()} }`);
81823
81886
  cssBlocks.push(`/* Alert containers */
81824
81887
  ${root} .alert {
81825
81888
  padding: 1rem;
@@ -82135,6 +82198,34 @@ ${root} {
82135
82198
  /* Order summary */
82136
82199
  --er-summary-bg: rgba(var(--tb-primary), 0.1);
82137
82200
  --er-summary-border: rgb(var(--tb-border));
82201
+
82202
+ /* Shared registration-surface mappings (issue 1174).
82203
+ Route the shared --rb-reg-* contract through this block's documented
82204
+ Tier 3 vars so existing --er-* overrides keep working unchanged. */
82205
+ --rb-reg-radius: var(--er-radius);
82206
+ --rb-reg-border: var(--er-border);
82207
+ --rb-reg-border-hover: var(--er-border-hover);
82208
+ --rb-reg-border-selected: var(--er-border-selected);
82209
+ --rb-reg-bg-selected: var(--er-payment-bg-selected);
82210
+ --rb-reg-option-bg: var(--er-control-bg);
82211
+ --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
82212
+ --rb-reg-surface-bg: rgb(var(--tb-surface));
82213
+ --rb-reg-on-surface: var(--er-on-surface);
82214
+ --rb-reg-on-surface-muted: var(--er-on-surface-muted);
82215
+ --rb-reg-on-surface-subtle: var(--er-on-surface-subtle);
82216
+ --rb-reg-on-surface-faint: var(--er-on-surface-faint);
82217
+ --rb-reg-check-bg: var(--er-check-bg);
82218
+ --rb-reg-check-text: var(--er-check-text);
82219
+ --rb-reg-step-active: var(--er-step-active);
82220
+ --rb-reg-step-completed: var(--er-step-completed);
82221
+ --rb-reg-step-inactive: var(--er-step-inactive);
82222
+ --rb-reg-step-text: var(--er-step-text);
82223
+ --rb-reg-step-text-active: var(--er-step-text-active);
82224
+ --rb-reg-step-connector: var(--er-step-connector);
82225
+ --rb-reg-summary-bg: var(--er-surface-muted);
82226
+ --rb-reg-summary-border: var(--er-border);
82227
+ --rb-reg-focus-ring: var(--er-focus-ring);
82228
+ --rb-reg-shell-line: var(--er-shell-line);
82138
82229
  }
82139
82230
  `;
82140
82231
  }
@@ -82267,25 +82358,40 @@ ${root} {
82267
82358
  --ab-info-bg: rgba(var(--tb-info), 0.1);
82268
82359
  --ab-info-text: rgb(var(--tb-info));
82269
82360
 
82270
- /* Loading/muted states */
82361
+ /* Muted summary state */
82271
82362
  --ab-muted-bg: rgba(var(--tb-text), 0.05);
82272
- --ab-muted-text: rgba(var(--tb-text), 0.6);
82273
- --ab-spinner-color: rgb(var(--tb-primary));
82274
82363
 
82275
- /* Form elements */
82276
- --ab-input-border: rgb(var(--tb-border));
82364
+ /* Focus ring used by shared registration-surface controls */
82277
82365
  --ab-input-focus-ring: rgba(var(--tb-primary), 0.3);
82278
82366
 
82279
- /* Buttons */
82280
- --ab-btn-primary-bg: rgb(var(--tb-primary));
82281
- --ab-btn-primary-text: rgb(var(--tb-background));
82282
- --ab-btn-primary-hover: rgba(var(--tb-primary), 0.9);
82283
- --ab-btn-secondary-border: rgb(var(--tb-border));
82284
- --ab-btn-secondary-hover: rgba(var(--tb-text), 0.05);
82285
-
82286
- /* Text opacity levels */
82287
- --ab-text-muted-opacity: 0.6;
82288
- --ab-text-faint-opacity: 0.4;
82367
+ /* Shared registration-surface mappings (issue 1174).
82368
+ Route the shared --rb-reg-* contract through this block's Tier 3 vars
82369
+ (palette tokens where no --ab-* var exists) so --ab-* overrides keep
82370
+ working as the block adopts the shared classes. */
82371
+ --rb-reg-radius: var(--ab-card-radius, var(--rb-block-radius));
82372
+ --rb-reg-border: var(--ab-card-border);
82373
+ --rb-reg-border-hover: var(--ab-card-border-hover);
82374
+ --rb-reg-border-selected: var(--ab-card-border-selected);
82375
+ --rb-reg-bg-selected: var(--ab-card-bg-selected);
82376
+ --rb-reg-option-bg: transparent;
82377
+ --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
82378
+ --rb-reg-surface-bg: rgb(var(--tb-surface));
82379
+ --rb-reg-on-surface: rgb(var(--tb-onSurface, var(--tb-text)));
82380
+ --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
82381
+ --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
82382
+ --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
82383
+ --rb-reg-check-bg: var(--ab-check-bg);
82384
+ --rb-reg-check-text: var(--ab-check-text);
82385
+ --rb-reg-step-active: rgb(var(--tb-primary));
82386
+ --rb-reg-step-completed: rgb(var(--tb-success));
82387
+ --rb-reg-step-inactive: rgb(var(--tb-mutedText));
82388
+ --rb-reg-step-text: rgb(255 255 255);
82389
+ --rb-reg-step-text-active: rgb(var(--tb-primaryText, 255 255 255));
82390
+ --rb-reg-step-connector: rgba(var(--tb-border), 0.5);
82391
+ --rb-reg-summary-bg: var(--ab-muted-bg);
82392
+ --rb-reg-summary-border: var(--ab-card-border);
82393
+ --rb-reg-focus-ring: var(--ab-input-focus-ring);
82394
+ --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
82289
82395
  }
82290
82396
  `;
82291
82397
  }
@@ -82576,6 +82682,35 @@ ${root} {
82576
82682
  /* Summary */
82577
82683
  --cr-summary-bg: rgba(var(--tb-primary), 0.1);
82578
82684
  --cr-summary-border: rgb(var(--tb-border));
82685
+
82686
+ /* Shared registration-surface mappings (issue 1174).
82687
+ Route the shared --rb-reg-* contract through this block's Tier 3 vars
82688
+ (palette tokens where no --cr-* var exists) so existing --cr-* overrides
82689
+ keep working unchanged. */
82690
+ --rb-reg-radius: var(--rb-block-radius);
82691
+ --rb-reg-border: var(--cr-border);
82692
+ --rb-reg-border-hover: var(--cr-border-hover);
82693
+ --rb-reg-border-selected: var(--cr-border-selected);
82694
+ --rb-reg-bg-selected: var(--cr-payment-bg-selected);
82695
+ --rb-reg-option-bg: rgb(var(--tb-background));
82696
+ --rb-reg-option-hover-shadow: 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08);
82697
+ --rb-reg-surface-bg: rgb(var(--tb-surface));
82698
+ --rb-reg-on-surface: var(--cr-on-surface);
82699
+ --rb-reg-on-surface-muted: rgba(var(--tb-onSurface, var(--tb-text)), 0.7);
82700
+ --rb-reg-on-surface-subtle: rgba(var(--tb-onSurface, var(--tb-text)), 0.6);
82701
+ --rb-reg-on-surface-faint: rgba(var(--tb-onSurface, var(--tb-text)), 0.5);
82702
+ --rb-reg-check-bg: var(--cr-check-bg);
82703
+ --rb-reg-check-text: var(--cr-check-text);
82704
+ --rb-reg-step-active: var(--cr-step-active);
82705
+ --rb-reg-step-completed: var(--cr-step-completed);
82706
+ --rb-reg-step-inactive: var(--cr-step-inactive);
82707
+ --rb-reg-step-text: var(--cr-step-text);
82708
+ --rb-reg-step-text-active: var(--cr-step-text-active);
82709
+ --rb-reg-step-connector: var(--cr-step-connector);
82710
+ --rb-reg-summary-bg: var(--cr-summary-bg);
82711
+ --rb-reg-summary-border: var(--cr-summary-border);
82712
+ --rb-reg-focus-ring: var(--cr-focus-ring);
82713
+ --rb-reg-shell-line: rgba(var(--tb-mutedText, 100 116 139), 0.22);
82579
82714
  }
82580
82715
  `;
82581
82716
  }
@@ -83838,6 +83973,8 @@ var MemoBlockSection = React61.memo(
83838
83973
  occurrenceContext: dataContext?.occurrenceContext ?? null,
83839
83974
  entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
83840
83975
  contentEntry: dataContext?.contentEntry ?? null,
83976
+ pageSurface: dataContext?.pageSurface ?? null,
83977
+ subject: dataContext?.subject ?? null,
83841
83978
  supabaseUrl: dataContext?.supabaseUrl,
83842
83979
  imageResolveContext: resolvedImageResolveContext,
83843
83980
  blockId: block.id ?? null,
@@ -83966,6 +84103,8 @@ var MemoBlockSection = React61.memo(
83966
84103
  occurrenceContext: dataContext?.occurrenceContext ?? null,
83967
84104
  entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
83968
84105
  contentEntry: dataContext?.contentEntry ?? null,
84106
+ pageSurface: dataContext?.pageSurface ?? null,
84107
+ subject: dataContext?.subject ?? null,
83969
84108
  supabaseUrl: dataContext?.supabaseUrl,
83970
84109
  imageResolveContext: resolvedImageResolveContext,
83971
84110
  blockId: block.id ?? null,
@@ -83993,7 +84132,9 @@ var MemoBlockSection = React61.memo(
83993
84132
  // Occurrence and content entry context for template pages
83994
84133
  occurrenceContext: dataContext?.occurrenceContext ?? null,
83995
84134
  entrySubrouteContext: dataContext?.entrySubrouteContext ?? null,
83996
- contentEntry: dataContext?.contentEntry ?? null
84135
+ contentEntry: dataContext?.contentEntry ?? null,
84136
+ pageSurface: dataContext?.pageSurface ?? null,
84137
+ subject: dataContext?.subject ?? null
83997
84138
  }
83998
84139
  };
83999
84140
  const blockBindings = block.bindings;
@@ -87390,13 +87531,36 @@ var containerResponsiveThemeCss = `/*
87390
87531
  */
87391
87532
 
87392
87533
  /* =============================================================================
87393
- * Shared: Registration Terminal State Icons
87394
- * Used by event-registration and course-registration blocks.
87534
+ * Shared: Registration Surface (issue 1174)
87395
87535
  *
87396
- * Layout rules only \u2014 block-specific colors are defined in each block's CSS
87397
- * via scoped \`.rb-state-icon--{variant}\` rules.
87536
+ * Wizard-surface primitives shared by the event-registration,
87537
+ * course-registration and appointment-booking blocks: surface container,
87538
+ * selectable option cards, step indicator, wizard actions row, on-surface
87539
+ * text ramp, layout stacks, summary box and skeleton shell lines.
87540
+ *
87541
+ * Uses:
87542
+ * - Tier 1 vars: --tb-* (from theme palette) as inline fallbacks
87543
+ * - Tier 2 vars: --rb-block-radius, --rb-block-transition (from theme scope)
87544
+ * - Shared vars: --rb-reg-* (mapped per block by the Tier 3 var generators;
87545
+ * canonical name list in blocks/registrationSurfaceVars.ts)
87546
+ *
87547
+ * Defaults intentionally match the event-registration (issue 1089) values; blocks
87548
+ * that need to preserve a different look override in their own block CSS,
87549
+ * which is imported after this file (cascade order is the override contract \u2014
87550
+ * all selectors here are zero-specificity \`:where()\`).
87551
+ *
87552
+ * Layout-only \`.rb-state-icon\` rules (formerly registration-shared.css) live
87553
+ * here too; block CSS provides the \`.rb-state-icon--{variant}\` colors.
87554
+ *
87555
+ * Naming: component-like primitives follow the existing bare \`rb-\` shared
87556
+ * precedent (\`.rb-state-icon\`, \`.rb-tile\`): \`.rb-option-card\`, \`.rb-step-*\`,
87557
+ * \`.rb-wizard-actions\`, \`.rb-on-surface\`, \`.rb-shell-*\`. Container/layout
87558
+ * pieces that would otherwise collide with the global \`.rb-*\` utility layer
87559
+ * are namespaced \`rb-reg-*\` (\`.rb-reg-surface\`, \`.rb-reg-stack\`, ...). All of
87560
+ * them are scoped to the three registration blocks either way.
87398
87561
  * ============================================================================= */
87399
87562
 
87563
+ /* Terminal state icon (layout only \u2014 colors are per-block) */
87400
87564
  :where(.theme-scope) .rb-state-icon {
87401
87565
  width: 4rem;
87402
87566
  height: 4rem;
@@ -87412,6 +87576,273 @@ var containerResponsiveThemeCss = `/*
87412
87576
  height: 2rem;
87413
87577
  }
87414
87578
 
87579
+ /* Surface container */
87580
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-surface {
87581
+ border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
87582
+ border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
87583
+ padding: clamp(1rem, 2vw, 1.5rem);
87584
+ background: var(--rb-reg-surface-bg, rgb(var(--tb-surface, 248 250 252)));
87585
+ color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
87586
+ transition: border-color var(--rb-block-transition, 150ms) ease;
87587
+ width: 100%;
87588
+ max-width: 800px;
87589
+ margin-inline: 0;
87590
+ }
87591
+
87592
+ /* Selectable option card */
87593
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card {
87594
+ position: relative;
87595
+ display: flex;
87596
+ align-items: flex-start;
87597
+ gap: 0.75rem;
87598
+ padding: 1rem;
87599
+ border: 1px solid var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
87600
+ border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
87601
+ background: var(--rb-reg-option-bg, transparent);
87602
+ color: inherit;
87603
+ cursor: pointer;
87604
+ text-align: left;
87605
+ transition: border-color var(--rb-block-transition, 150ms) ease,
87606
+ background-color var(--rb-block-transition, 150ms) ease,
87607
+ box-shadow var(--rb-block-transition, 150ms) ease;
87608
+ }
87609
+
87610
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:hover:not(:disabled):not([aria-disabled="true"]) {
87611
+ border-color: var(--rb-reg-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
87612
+ box-shadow: var(--rb-reg-option-hover-shadow, 0 8px 18px rgba(var(--tb-shadow, 15 23 42), 0.08));
87613
+ }
87614
+
87615
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card:focus-visible {
87616
+ outline: 2px solid var(--rb-reg-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
87617
+ outline-offset: 2px;
87618
+ }
87619
+
87620
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--selected {
87621
+ border-color: var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
87622
+ background-color: var(--rb-reg-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.08));
87623
+ box-shadow: 0 0 0 1px var(--rb-reg-border-selected, rgb(var(--tb-primary, 17 24 39)));
87624
+ }
87625
+
87626
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled {
87627
+ cursor: not-allowed;
87628
+ opacity: 0.7;
87629
+ }
87630
+
87631
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-card--disabled:hover {
87632
+ border-color: var(--rb-reg-border, rgb(var(--tb-border, 226 232 240)));
87633
+ box-shadow: none;
87634
+ }
87635
+
87636
+ /* Check indicator */
87637
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check {
87638
+ flex-shrink: 0;
87639
+ width: 1.25rem;
87640
+ height: 1.25rem;
87641
+ border-radius: 50%;
87642
+ background: var(--rb-reg-check-bg, rgb(var(--tb-primary, 17 24 39)));
87643
+ display: flex;
87644
+ align-items: center;
87645
+ justify-content: center;
87646
+ }
87647
+
87648
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-option-check svg {
87649
+ width: 0.75rem;
87650
+ height: 0.75rem;
87651
+ color: var(--rb-reg-check-text, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
87652
+ }
87653
+
87654
+ /* Step indicator */
87655
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps-nav {
87656
+ margin-bottom: 1.5rem;
87657
+ }
87658
+
87659
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-steps {
87660
+ display: flex;
87661
+ align-items: center;
87662
+ justify-content: center;
87663
+ gap: 0.5rem;
87664
+ list-style: none;
87665
+ padding: 0;
87666
+ margin: 0;
87667
+ }
87668
+
87669
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step {
87670
+ display: flex;
87671
+ align-items: center;
87672
+ gap: 0.5rem;
87673
+ }
87674
+
87675
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle {
87676
+ width: 1.75rem;
87677
+ height: 1.75rem;
87678
+ border-radius: 50%;
87679
+ display: flex;
87680
+ align-items: center;
87681
+ justify-content: center;
87682
+ font-size: 0.75rem;
87683
+ font-weight: 600;
87684
+ background: var(--rb-reg-step-inactive, rgb(var(--tb-mutedText, 100 116 139)));
87685
+ color: var(--rb-reg-step-text, rgb(var(--tb-primaryForeground, 255 255 255)));
87686
+ transition: background-color var(--rb-block-transition, 150ms) ease;
87687
+ }
87688
+
87689
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--active {
87690
+ background: var(--rb-reg-step-active, rgb(var(--tb-primary, 17 24 39)));
87691
+ color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
87692
+ }
87693
+
87694
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-circle--completed {
87695
+ background: var(--rb-reg-step-completed, rgb(var(--tb-success, 22 163 74)));
87696
+ color: var(--rb-reg-step-text-active, rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255))));
87697
+ }
87698
+
87699
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-check {
87700
+ width: 0.75rem;
87701
+ height: 0.75rem;
87702
+ }
87703
+
87704
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-connector {
87705
+ width: 2rem;
87706
+ height: 2px;
87707
+ background: var(--rb-reg-step-connector, rgba(var(--tb-border, 226 232 240), 0.5));
87708
+ }
87709
+
87710
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
87711
+ font-size: 0.75rem;
87712
+ color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
87713
+ display: none;
87714
+ }
87715
+
87716
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label--active {
87717
+ font-weight: 500;
87718
+ }
87719
+
87720
+ @container rb-site (min-width: 640px) {
87721
+ @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
87722
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-step-label {
87723
+ display: inline;
87724
+ }
87725
+ }
87726
+ }
87727
+
87728
+ /* Wizard actions row */
87729
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions {
87730
+ display: flex;
87731
+ justify-content: space-between;
87732
+ align-items: center;
87733
+ gap: 1rem;
87734
+ margin-top: 1.5rem;
87735
+ }
87736
+
87737
+ /* When there's only one action (no back button), push it to the right */
87738
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-wizard-actions > :only-child {
87739
+ margin-inline-start: auto;
87740
+ }
87741
+
87742
+ /* On-surface text ramp */
87743
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface {
87744
+ color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
87745
+ }
87746
+
87747
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--muted {
87748
+ color: var(--rb-reg-on-surface-muted, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.7));
87749
+ }
87750
+
87751
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--subtle {
87752
+ color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
87753
+ }
87754
+
87755
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-on-surface--faint {
87756
+ color: var(--rb-reg-on-surface-faint, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.5));
87757
+ }
87758
+
87759
+ /* Layout stacks */
87760
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack {
87761
+ display: flex;
87762
+ flex-direction: column;
87763
+ gap: 1rem;
87764
+ }
87765
+
87766
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-stack--sm {
87767
+ gap: 0.75rem;
87768
+ }
87769
+
87770
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row {
87771
+ display: flex;
87772
+ align-items: center;
87773
+ gap: 1rem;
87774
+ }
87775
+
87776
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-row--between {
87777
+ justify-content: space-between;
87778
+ align-items: flex-start;
87779
+ }
87780
+
87781
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-grid {
87782
+ display: grid;
87783
+ gap: 0.75rem;
87784
+ }
87785
+
87786
+ /* Summary box */
87787
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-reg-summary {
87788
+ padding: 1rem;
87789
+ border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.75);
87790
+ border: 1px solid var(--rb-reg-summary-border, rgb(var(--tb-border, 226 232 240)));
87791
+ background: var(--rb-reg-summary-bg, rgba(var(--tb-muted, 241 245 249), 0.42));
87792
+ }
87793
+
87794
+ /* Skeleton shell lines */
87795
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line {
87796
+ height: 0.75rem;
87797
+ border-radius: 9999px;
87798
+ background: linear-gradient(
87799
+ 90deg,
87800
+ var(--rb-reg-shell-line, rgba(var(--tb-mutedText, 100 116 139), 0.22)),
87801
+ rgba(var(--tb-primary, 17 24 39), 0.12),
87802
+ var(--rb-reg-shell-line, rgba(var(--tb-mutedText, 100 116 139), 0.22))
87803
+ );
87804
+ }
87805
+
87806
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--lg {
87807
+ width: min(26rem, 82%);
87808
+ }
87809
+
87810
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--md {
87811
+ width: min(19rem, 68%);
87812
+ }
87813
+
87814
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--sm {
87815
+ width: min(14rem, 52%);
87816
+ }
87817
+
87818
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-line--xs {
87819
+ width: min(10rem, 42%);
87820
+ }
87821
+
87822
+ /* Skeleton block (rectangular placeholder, pulses) */
87823
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
87824
+ height: 2.5rem;
87825
+ width: 100%;
87826
+ border-radius: var(--rb-reg-radius, var(--rb-block-radius, 1rem));
87827
+ background: var(--rb-reg-shell-line, rgba(var(--tb-mutedText, 100 116 139), 0.22));
87828
+ animation: rb-reg-pulse 1.5s ease-in-out infinite;
87829
+ }
87830
+
87831
+ @keyframes rb-reg-pulse {
87832
+ 0%, 100% {
87833
+ opacity: 1;
87834
+ }
87835
+ 50% {
87836
+ opacity: 0.5;
87837
+ }
87838
+ }
87839
+
87840
+ @media (prefers-reduced-motion: reduce) {
87841
+ :where(.theme-scope) :where([data-block="event-registration"], [data-block="course-registration"], [data-block="appointment-booking"]) .rb-shell-block {
87842
+ animation: none;
87843
+ }
87844
+ }
87845
+
87415
87846
  /* =============================================================================
87416
87847
  * Block: Event Registration (pilot #76)
87417
87848
  * Uses CSS vars: --er-* (Tier 3) and --rb-block-* (Tier 2)
@@ -87435,18 +87866,9 @@ var containerResponsiveThemeCss = `/*
87435
87866
  --er-on-surface-disabled-detail: rgba(var(--tb-onSurface, var(--tb-text)), 0.68);
87436
87867
  }
87437
87868
 
87438
- /* Container */
87439
- :where(.theme-scope) :where([data-block="event-registration"]) .er-container {
87440
- border-radius: var(--rb-block-radius);
87441
- border: 1px solid var(--er-border);
87442
- padding: clamp(1rem, 2vw, 1.5rem);
87443
- background: rgb(var(--tb-surface));
87444
- color: var(--er-on-surface);
87445
- transition: border-color var(--rb-block-transition) ease;
87446
- width: 100%;
87447
- max-width: 800px;
87448
- margin-inline: 0;
87449
- }
87869
+ /* Container: styled by the shared .rb-reg-surface (registration-surface.css);
87870
+ .er-container remains in markup as a hook and for the overlay/embedded
87871
+ variants below. */
87450
87872
 
87451
87873
  /* SSR shell / required-island fallback */
87452
87874
  :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell {
@@ -87491,32 +87913,8 @@ var containerResponsiveThemeCss = `/*
87491
87913
  padding: 1rem;
87492
87914
  }
87493
87915
 
87494
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line {
87495
- height: 0.75rem;
87496
- border-radius: 9999px;
87497
- background: linear-gradient(
87498
- 90deg,
87499
- var(--er-shell-line),
87500
- rgba(var(--tb-primary), 0.12),
87501
- var(--er-shell-line)
87502
- );
87503
- }
87504
-
87505
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--lg {
87506
- width: min(26rem, 82%);
87507
- }
87508
-
87509
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--md {
87510
- width: min(19rem, 68%);
87511
- }
87512
-
87513
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--sm {
87514
- width: min(14rem, 52%);
87515
- }
87516
-
87517
- :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__line--xs {
87518
- width: min(10rem, 42%);
87519
- }
87916
+ /* Shell skeleton lines: styled by the shared .rb-shell-line family
87917
+ (registration-surface.css); legacy classes remain in markup as hooks. */
87520
87918
 
87521
87919
  :where(.theme-scope) :where([data-block="event-registration"]) .er-registration-shell__summary {
87522
87920
  align-items: center;
@@ -87593,13 +87991,8 @@ var containerResponsiveThemeCss = `/*
87593
87991
  color: var(--er-capacity-soldout-text);
87594
87992
  }
87595
87993
 
87596
- /* Selected event summary */
87597
- :where(.theme-scope) :where([data-block="event-registration"]) .er-event-summary {
87598
- padding: 1rem;
87599
- border-radius: calc(var(--rb-block-radius) * 0.75);
87600
- border: 1px solid var(--er-border);
87601
- background: var(--er-surface-muted);
87602
- }
87994
+ /* Selected event summary: superseded by the shared .rb-reg-summary
87995
+ (registration-surface.css); no markup emitted .er-event-summary anymore. */
87603
87996
 
87604
87997
  /* Ticket counter */
87605
87998
  :where(.theme-scope) :where([data-block="event-registration"]) .er-ticket-counter-group {
@@ -87805,7 +88198,7 @@ var containerResponsiveThemeCss = `/*
87805
88198
  opacity: 1;
87806
88199
  }
87807
88200
 
87808
- /* State icon color variants (layout from registration-shared.css) */
88201
+ /* State icon color variants (layout from registration-surface.css) */
87809
88202
  :where(.theme-scope) :where([data-block="event-registration"]) .rb-state-icon--success {
87810
88203
  background: var(--er-success-bg);
87811
88204
  color: var(--er-success-text);
@@ -87961,16 +88354,8 @@ var containerResponsiveThemeCss = `/*
87961
88354
  text-align: center;
87962
88355
  }
87963
88356
 
87964
- /* Layout */
87965
- :where(.theme-scope) :where([data-block="event-registration"]) .er-stack {
87966
- display: flex;
87967
- flex-direction: column;
87968
- gap: 1rem;
87969
- }
87970
-
87971
- :where(.theme-scope) :where([data-block="event-registration"]) .er-stack--sm {
87972
- gap: 0.75rem;
87973
- }
88357
+ /* Layout stacks/rows: styled by the shared .rb-reg-stack / .rb-reg-row
88358
+ (registration-surface.css); legacy classes remain in markup as hooks. */
87974
88359
 
87975
88360
  /* Event/date selection rows */
87976
88361
  :where(.theme-scope) :where([data-block="event-registration"]) .er-event-grid {
@@ -87979,17 +88364,6 @@ var containerResponsiveThemeCss = `/*
87979
88364
  gap: 0;
87980
88365
  }
87981
88366
 
87982
- :where(.theme-scope) :where([data-block="event-registration"]) .er-row {
87983
- display: flex;
87984
- align-items: center;
87985
- gap: 1rem;
87986
- }
87987
-
87988
- :where(.theme-scope) :where([data-block="event-registration"]) .er-row--between {
87989
- justify-content: space-between;
87990
- align-items: flex-start;
87991
- }
87992
-
87993
88367
  :where(.theme-scope) :where([data-block="event-registration"]) .er-center {
87994
88368
  text-align: center;
87995
88369
  padding: 2rem;
@@ -88001,18 +88375,8 @@ var containerResponsiveThemeCss = `/*
88001
88375
  margin-bottom: 1rem;
88002
88376
  }
88003
88377
 
88004
- :where(.theme-scope) :where([data-block="event-registration"]) .er-actions {
88005
- display: flex;
88006
- justify-content: space-between;
88007
- align-items: center;
88008
- gap: 1rem;
88009
- margin-top: 1.5rem;
88010
- }
88011
-
88012
- /* When there's only one button (no back), push to the right */
88013
- :where(.theme-scope) :where([data-block="event-registration"]) .er-actions > :only-child {
88014
- margin-inline-start: auto;
88015
- }
88378
+ /* Actions row: styled by the shared .rb-wizard-actions (registration-surface.css);
88379
+ .er-actions remains in markup as a hook. */
88016
88380
 
88017
88381
  :where(.theme-scope) :where([data-block="event-registration"]) .er-button-with-spinner {
88018
88382
  display: inline-flex;
@@ -88264,23 +88628,8 @@ var containerResponsiveThemeCss = `/*
88264
88628
  color: var(--er-on-surface-faint);
88265
88629
  }
88266
88630
 
88267
- /* Checkmark indicator */
88268
- :where(.theme-scope) :where([data-block="event-registration"]) .er-check {
88269
- flex-shrink: 0;
88270
- width: 1.25rem;
88271
- height: 1.25rem;
88272
- border-radius: 50%;
88273
- background: var(--er-check-bg);
88274
- display: flex;
88275
- align-items: center;
88276
- justify-content: center;
88277
- }
88278
-
88279
- :where(.theme-scope) :where([data-block="event-registration"]) .er-check svg {
88280
- width: 0.75rem;
88281
- height: 0.75rem;
88282
- color: var(--er-check-text);
88283
- }
88631
+ /* Checkmark indicator: styled by the shared .rb-option-check
88632
+ (registration-surface.css); .er-check remains in markup as a hook. */
88284
88633
 
88285
88634
  /* Payment summary */
88286
88635
  :where(.theme-scope) :where([data-block="event-registration"]) .er-payment-summary {
@@ -88328,78 +88677,12 @@ var containerResponsiveThemeCss = `/*
88328
88677
  margin-bottom: 1.5rem;
88329
88678
  }
88330
88679
 
88331
- :where(.theme-scope) :where([data-block="event-registration"]) .er-steps {
88332
- display: flex;
88333
- align-items: center;
88334
- justify-content: center;
88335
- gap: 0.5rem;
88336
- list-style: none;
88337
- padding: 0;
88338
- margin: 0;
88339
- }
88340
-
88341
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step {
88342
- display: flex;
88343
- align-items: center;
88344
- gap: 0.5rem;
88345
- }
88346
-
88347
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-circle {
88348
- width: 1.75rem;
88349
- height: 1.75rem;
88350
- border-radius: 50%;
88351
- display: flex;
88352
- align-items: center;
88353
- justify-content: center;
88354
- font-size: 0.75rem;
88355
- font-weight: 600;
88356
- background: var(--er-step-inactive);
88357
- color: var(--er-step-text);
88358
- transition: background-color var(--rb-block-transition) ease;
88359
- }
88360
-
88361
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-circle--active {
88362
- background: var(--er-step-active);
88363
- color: var(--er-step-text-active);
88364
- }
88365
-
88366
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-circle--completed {
88367
- background: var(--er-step-completed);
88368
- color: var(--er-step-text-active);
88369
- }
88370
-
88371
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-check {
88372
- width: 0.75rem;
88373
- height: 0.75rem;
88374
- }
88375
-
88376
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-connector {
88377
- width: 2rem;
88378
- height: 2px;
88379
- background: var(--er-step-connector);
88380
- }
88381
-
88382
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-connector--completed {
88383
- background: var(--er-step-connector);
88384
- }
88385
-
88386
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-label {
88387
- font-size: 0.75rem;
88388
- color: var(--er-on-surface);
88389
- display: none;
88390
- }
88391
-
88392
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-label--active {
88393
- font-weight: 500;
88394
- }
88395
-
88396
- @container rb-site (min-width: 640px) {
88397
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
88398
- :where(.theme-scope) :where([data-block="event-registration"]) .er-step-label {
88399
- display: inline;
88400
- }
88401
- }
88402
- }
88680
+ /* Step indicator internals: styled by the shared .rb-steps / .rb-step-*
88681
+ family (registration-surface.css) via the --rb-reg-step-* mappings in the
88682
+ event-registration var generator; er-* classes remain in markup as hooks.
88683
+ Note: .er-steps-nav above is intentionally retained \u2014 its source position
88684
+ keeps the wizard's 1.5rem step margin winning over the SSR shell's
88685
+ 1.25rem .er-registration-shell__steps override. */
88403
88686
 
88404
88687
  /* Sticky order summary */
88405
88688
  :where(.theme-scope) :where([data-block="event-registration"]) .er-summary {
@@ -90632,69 +90915,34 @@ var containerResponsiveThemeCss = `/*
90632
90915
 
90633
90916
  /* =============================================================================
90634
90917
  * Block: Appointment Booking
90918
+ *
90919
+ * Structural styling comes from the shared registration-surface layer
90920
+ * (registration-surface.css): surface container, option cards + check,
90921
+ * step indicator, wizard actions, on-surface text ramp, stacks, summary box
90922
+ * and skeleton shell. Colors flow through the --rb-reg-* contract, mapped
90923
+ * from this block's --ab-* Tier 3 vars by its var generator.
90924
+ *
90925
+ * Inputs use the theme-generated form-* classes; feedback boxes use the
90926
+ * theme-generated alert / alert-{tone} classes. Only genuinely
90927
+ * booking-specific rules live here.
90928
+ *
90635
90929
  * Uses:
90636
- * - Tier 1 vars: --tb-border, --tb-text, --tb-primary (from theme palette)
90637
- * - Tier 2 vars: --rb-block-radius, --rb-block-transition (from theme scope)
90930
+ * - Tier 1 vars: --tb-* (from theme palette)
90638
90931
  * - Tier 3 vars: --ab-* (from appointment-booking var generator)
90639
90932
  * =============================================================================
90640
90933
  */
90641
90934
 
90642
- /* Main container */
90643
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-container {
90644
- width: 100%;
90645
- }
90646
-
90647
- /* Stack layout utilities */
90648
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-stack {
90649
- display: flex;
90650
- flex-direction: column;
90651
- gap: 1.5rem;
90652
- }
90653
-
90654
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-stack--sm {
90655
- display: flex;
90656
- flex-direction: column;
90657
- gap: 0.75rem;
90658
- }
90659
-
90660
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-stack--xs {
90661
- display: flex;
90662
- flex-direction: column;
90663
- gap: 0.5rem;
90664
- }
90665
-
90666
- /* Row layout */
90667
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-row {
90668
- display: flex;
90669
- align-items: center;
90670
- gap: 0.75rem;
90671
- }
90672
-
90673
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-row--between {
90674
- justify-content: space-between;
90675
- }
90676
-
90677
- /* Grid layout */
90678
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-grid {
90679
- display: grid;
90680
- gap: 0.75rem;
90681
- }
90682
-
90683
- /* Center layout */
90684
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-center {
90685
- text-align: center;
90686
- padding: 2rem;
90687
- }
90688
-
90689
- /* Typography */
90935
+ /* Typography helpers */
90690
90936
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-title {
90691
90937
  font-size: 1.5rem;
90692
- font-weight: 700;
90938
+ font-weight: 600;
90939
+ line-height: 1.3;
90693
90940
  }
90694
90941
 
90695
90942
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-subtitle {
90696
- font-size: 0.875rem;
90697
- font-weight: 500;
90943
+ font-size: 0.9375rem;
90944
+ font-weight: 600;
90945
+ line-height: 1.3;
90698
90946
  }
90699
90947
 
90700
90948
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text {
@@ -90705,211 +90953,111 @@ var containerResponsiveThemeCss = `/*
90705
90953
  font-size: 0.75rem;
90706
90954
  }
90707
90955
 
90708
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text--muted {
90709
- opacity: var(--ab-text-muted-opacity, 0.6);
90710
- }
90711
-
90712
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-text--faint {
90713
- opacity: var(--ab-text-faint-opacity, 0.4);
90714
- }
90715
-
90716
- /* Selection cards (service, resource, time slot) */
90717
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-card {
90718
- position: relative;
90719
- padding: 1rem;
90720
- border: 2px solid var(--ab-card-border, rgb(var(--tb-border, 226 232 240)));
90721
- border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
90722
- text-align: left;
90723
- background: transparent;
90724
- cursor: pointer;
90725
- transition: border-color var(--rb-block-transition, 150ms) ease, background-color var(--rb-block-transition, 150ms) ease;
90726
- }
90727
-
90728
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-card:hover {
90729
- border-color: var(--ab-card-border-hover, rgba(var(--tb-primary, 17 24 39), 0.5));
90730
- }
90731
-
90732
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-card--selected {
90733
- border-color: var(--ab-card-border-selected, rgb(var(--tb-primary, 17 24 39)));
90734
- background-color: var(--ab-card-bg-selected, rgba(var(--tb-primary, 17 24 39), 0.05));
90735
- }
90736
-
90737
- /* Checkmark indicator */
90738
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-check {
90739
- flex-shrink: 0;
90740
- width: 1.25rem;
90741
- height: 1.25rem;
90742
- border-radius: 50%;
90743
- background-color: var(--ab-check-bg, rgb(var(--tb-primary, 17 24 39)));
90744
- display: flex;
90745
- align-items: center;
90746
- justify-content: center;
90747
- }
90748
-
90749
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-check svg {
90750
- width: 0.75rem;
90751
- height: 0.75rem;
90752
- color: var(--ab-check-text, rgb(var(--tb-background, 255 255 255)));
90753
- }
90754
-
90755
- /* Info box (service summary) */
90756
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-info-box {
90757
- padding: 1rem;
90758
- border: 1px solid var(--ab-card-border, rgb(var(--tb-border, 226 232 240)));
90759
- border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
90760
- background-color: var(--ab-muted-bg, rgba(var(--tb-foreground, var(--tb-text, 15 23 42)), 0.05));
90956
+ /* Centered state (loading / terminal panels) */
90957
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-center {
90958
+ text-align: center;
90959
+ padding: 2rem;
90761
90960
  }
90762
90961
 
90763
- /* Alert states */
90764
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert {
90765
- padding: 0.75rem 1rem;
90766
- border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
90767
- font-size: 0.875rem;
90962
+ /* Terminal state title (below the state icon) */
90963
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-terminal-title {
90964
+ margin: 0.75rem 0 0.5rem 0;
90965
+ font-size: 1.125rem;
90966
+ font-weight: 700;
90768
90967
  }
90769
90968
 
90770
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--success {
90771
- background-color: var(--ab-success-bg, rgba(var(--tb-success, 22 163 74), 0.1));
90969
+ /* State icon color variants (layout from registration-surface.css) */
90970
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .rb-state-icon--success {
90971
+ background: var(--ab-success-bg, rgba(var(--tb-success, 22 163 74), 0.1));
90772
90972
  color: var(--ab-success-text, rgb(var(--tb-success, 22 163 74)));
90773
90973
  }
90774
90974
 
90775
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--error {
90776
- background-color: var(--ab-error-bg, rgba(var(--tb-destructive, 220 38 38), 0.1));
90975
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .rb-state-icon--error {
90976
+ background: var(--ab-error-bg, rgba(var(--tb-destructive, 220 38 38), 0.1));
90777
90977
  color: var(--ab-error-text, rgb(var(--tb-destructive, 220 38 38)));
90778
90978
  }
90779
90979
 
90780
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--warning {
90781
- background-color: var(--ab-warning-bg, rgba(var(--tb-warning, 245 158 11), 0.1));
90782
- color: var(--ab-warning-text, rgb(var(--tb-warning, 245 158 11)));
90783
- }
90784
-
90785
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-alert--info {
90786
- background-color: var(--ab-info-bg, rgba(var(--tb-info, 14 165 233), 0.1));
90980
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .rb-state-icon--info {
90981
+ background: var(--ab-info-bg, rgba(var(--tb-info, 14 165 233), 0.1));
90787
90982
  color: var(--ab-info-text, rgb(var(--tb-info, 14 165 233)));
90788
90983
  }
90789
90984
 
90790
- /* Form elements */
90791
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-label {
90792
- display: block;
90793
- font-size: 0.875rem;
90794
- font-weight: 500;
90795
- margin-bottom: 0.5rem;
90985
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .rb-state-icon--warning {
90986
+ background: var(--ab-warning-bg, rgba(var(--tb-warning, 245 158 11), 0.1));
90987
+ color: var(--ab-warning-text, rgb(var(--tb-warning, 245 158 11)));
90796
90988
  }
90797
90989
 
90798
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-required {
90799
- color: var(--ab-error-text, rgb(var(--tb-destructive, 220 38 38)));
90800
- margin-left: 0.125rem;
90990
+ /* Payment option summary rows (label/value lines inside an option card) */
90991
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-option-rows {
90992
+ display: grid;
90993
+ gap: 0.125rem;
90801
90994
  }
90802
90995
 
90803
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-input,
90804
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-select,
90805
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-textarea {
90806
- width: 100%;
90807
- padding: 0.5rem 0.75rem;
90808
- border: 1px solid var(--ab-input-border, rgb(var(--tb-border, 226 232 240)));
90809
- border-radius: var(--ab-input-radius, var(--rb-input-radius, var(--radius-control, var(--rb-block-radius, 1rem))));
90810
- background: transparent;
90811
- font-size: 0.875rem;
90812
- transition: border-color var(--rb-block-transition, 150ms) ease, box-shadow var(--rb-block-transition, 150ms) ease;
90996
+ /* Date/time pill grids (selection pills extend .rb-option-card) */
90997
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-pill-grid {
90998
+ display: flex;
90999
+ flex-wrap: wrap;
91000
+ gap: 0.5rem;
90813
91001
  }
90814
91002
 
90815
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-input:focus,
90816
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-select:focus,
90817
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-textarea:focus {
90818
- outline: none;
90819
- border-color: var(--ab-card-border-selected, rgb(var(--tb-primary, 17 24 39)));
90820
- box-shadow: 0 0 0 3px var(--ab-input-focus-ring, rgba(var(--tb-primary, 17 24 39), 0.3));
91003
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-date-pill {
91004
+ flex-direction: column;
91005
+ align-items: center;
91006
+ gap: 0.125rem;
91007
+ padding: 0.5rem 0.875rem;
91008
+ min-width: 4.25rem;
91009
+ text-align: center;
90821
91010
  }
90822
91011
 
90823
- /* Buttons */
90824
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn {
90825
- display: inline-flex;
91012
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-time-pill {
90826
91013
  align-items: center;
90827
91014
  justify-content: center;
90828
- padding: 0.5rem 1.5rem;
90829
- border-radius: var(--ab-button-radius, var(--rb-button-radius, var(--rb-block-radius, 1rem)));
91015
+ padding: 0.5rem 0.875rem;
91016
+ min-width: 5.5rem;
90830
91017
  font-size: 0.875rem;
90831
91018
  font-weight: 500;
90832
- cursor: pointer;
90833
- transition: background-color var(--rb-block-transition, 150ms) ease, border-color var(--rb-block-transition, 150ms) ease;
90834
- }
90835
-
90836
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--primary {
90837
- flex: 1;
90838
- background-color: var(--ab-btn-primary-bg, rgb(var(--tb-primary, 17 24 39)));
90839
- color: var(--ab-btn-primary-text, rgb(var(--tb-primaryForeground, 255 255 255)));
90840
- border: none;
90841
- }
90842
-
90843
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--primary:hover:not(:disabled) {
90844
- background-color: var(--ab-btn-primary-hover, rgba(var(--tb-primary, 17 24 39), 0.9));
90845
- }
90846
-
90847
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--secondary {
90848
- background: transparent;
90849
- border: 1px solid var(--ab-btn-secondary-border, rgb(var(--tb-border, 226 232 240)));
90850
- }
90851
-
90852
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--secondary:hover:not(:disabled) {
90853
- background-color: var(--ab-btn-secondary-hover, rgba(var(--tb-foreground, var(--tb-text, 15 23 42)), 0.05));
90854
- }
90855
-
90856
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--link {
90857
- background: transparent;
90858
- border: none;
90859
- padding: 0;
90860
- text-decoration: underline;
90861
- }
90862
-
90863
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn--link:hover {
90864
- text-decoration: none;
90865
- }
90866
-
90867
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-btn:disabled {
90868
- opacity: 0.5;
90869
- cursor: not-allowed;
90870
- }
90871
-
90872
- /* Actions row */
90873
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-actions {
90874
- display: flex;
90875
- gap: 0.75rem;
90876
- margin-top: 1.5rem;
91019
+ text-align: center;
90877
91020
  }
90878
91021
 
90879
- /* Skeleton loading */
90880
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-skeleton {
90881
- height: 2.5rem;
90882
- width: 100%;
90883
- background-color: var(--ab-muted-bg, rgba(var(--tb-foreground, var(--tb-text, 15 23 42)), 0.05));
90884
- border-radius: var(--ab-card-radius, var(--rb-block-radius, 1rem));
90885
- animation: ab-pulse 1.5s ease-in-out infinite;
91022
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-pill-caption {
91023
+ font-size: 0.6875rem;
91024
+ font-weight: 600;
91025
+ letter-spacing: 0;
91026
+ line-height: 1.2;
91027
+ text-transform: uppercase;
91028
+ color: var(--rb-reg-on-surface-subtle, rgba(var(--tb-onSurface, var(--tb-text, 15 23 42)), 0.6));
90886
91029
  }
90887
91030
 
90888
- @keyframes ab-pulse {
90889
- 0%, 100% {
90890
- opacity: 1;
90891
- }
90892
- 50% {
90893
- opacity: 0.5;
90894
- }
91031
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-pill-value {
91032
+ font-size: 1.125rem;
91033
+ font-weight: 600;
91034
+ line-height: 1.2;
90895
91035
  }
90896
91036
 
90897
- /* Field wrapper */
90898
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-field {
90899
- display: flex;
90900
- flex-direction: column;
90901
- gap: 0.5rem;
91037
+ /* SSR shell skeleton (mirrors the hydrated layout to reduce hydration jump) */
91038
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-shell {
91039
+ min-height: 18rem;
90902
91040
  }
90903
91041
 
90904
- /* Altcha wrapper */
90905
- :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-altcha {
90906
- margin-top: 1rem;
91042
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-shell-button {
91043
+ display: inline-flex;
91044
+ min-height: 2.5rem;
91045
+ align-items: center;
91046
+ justify-content: center;
91047
+ border-radius: calc(var(--rb-reg-radius, var(--rb-block-radius, 1rem)) * 0.6);
91048
+ background: rgb(var(--tb-primary, 17 24 39));
91049
+ color: rgb(var(--tb-primaryText, var(--tb-primaryForeground, 255 255 255)));
91050
+ padding: 0.625rem 1rem;
91051
+ font-size: 0.875rem;
91052
+ font-weight: 600;
91053
+ line-height: 1.2;
91054
+ text-align: center;
91055
+ white-space: nowrap;
90907
91056
  }
90908
91057
 
90909
- /* Link button (inline text link) */
91058
+ /* Inline text-link button (e.g. "Load more dates") */
90910
91059
  :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-link {
90911
91060
  display: inline;
90912
- margin-left: 0.5rem;
90913
91061
  color: rgb(var(--tb-primary, 17 24 39));
90914
91062
  background: none;
90915
91063
  border: none;
@@ -90923,91 +91071,9 @@ var containerResponsiveThemeCss = `/*
90923
91071
  text-decoration: none;
90924
91072
  }
90925
91073
 
90926
- /* =============================================================================
90927
- * Form Block (fb-*)
90928
- *
90929
- * Uses:
90930
- * - Tier 1 vars: --tb-border, --tb-surface, --tb-success, --tb-destructive
90931
- * - Tier 2 vars: --rb-block-radius
90932
- * - Tier 3 vars: --fb-success-*, --fb-error-*, --fb-empty-*
90933
- *
90934
- * Note: Form input styling (form-input, form-select, etc.) is handled by
90935
- * the input CSS generator. These styles are for form container/state only.
90936
- * ============================================================================= */
90937
-
90938
- /* Form container */
90939
- :where(.theme-scope) :where([data-block="form"]) .fb-form {
90940
- display: flex;
90941
- flex-direction: column;
90942
- gap: 1rem;
90943
- }
90944
-
90945
- /* Two-column row (opt-in per field via schema layout) */
90946
- :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
90947
- display: grid;
90948
- grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
90949
- gap: 1rem;
90950
- }
90951
-
90952
- /* Field wrapper */
90953
- :where(.theme-scope) :where([data-block="form"]) .fb-field {
90954
- display: flex;
90955
- flex-direction: column;
90956
- gap: 0.25rem;
90957
- }
90958
-
90959
- /* Fieldset (for radio groups) */
90960
- :where(.theme-scope) :where([data-block="form"]) .fb-fieldset {
90961
- display: flex;
90962
- flex-direction: column;
90963
- gap: 0.5rem;
90964
- border: none;
90965
- padding: 0;
90966
- margin: 0;
90967
- }
90968
-
90969
- /* Inline field (checkbox, radio with label) */
90970
- :where(.theme-scope) :where([data-block="form"]) .fb-inline {
90971
- display: flex;
90972
- align-items: center;
90973
- gap: 0.5rem;
90974
- }
90975
-
90976
- /* Success state */
90977
- :where(.theme-scope) :where([data-block="form"]) .fb-success {
90978
- background-color: var(--fb-success-bg);
90979
- color: var(--fb-success-text);
90980
- border: 1px solid var(--fb-success-border);
90981
- border-radius: var(--rb-block-radius);
90982
- padding: 1rem;
90983
- font-size: 0.875rem;
90984
- }
90985
-
90986
- /* Error banner */
90987
- :where(.theme-scope) :where([data-block="form"]) .fb-error {
90988
- background-color: var(--fb-error-bg);
90989
- color: var(--fb-error-text);
90990
- border: 1px solid var(--fb-error-border);
90991
- border-radius: var(--rb-block-radius);
90992
- padding: 0.75rem;
90993
- font-size: 0.875rem;
90994
- margin-bottom: 0.5rem;
90995
- }
90996
-
90997
- /* Empty state (no form data) */
90998
- :where(.theme-scope) :where([data-block="form"]) .fb-empty {
90999
- background-color: var(--fb-empty-bg);
91000
- color: var(--fb-empty-text);
91001
- border: 1px dashed var(--fb-empty-border);
91002
- border-radius: var(--rb-block-radius);
91003
- padding: 1.5rem;
91004
- font-size: 0.875rem;
91005
- text-align: center;
91006
- }
91007
-
91008
- /* Form actions (submit button container) */
91009
- :where(.theme-scope) :where([data-block="form"]) .fb-actions {
91010
- margin-top: 0.5rem;
91074
+ /* Altcha wrapper */
91075
+ :where(.theme-scope) :where([data-block="appointment-booking"]) .ab-altcha {
91076
+ margin-top: 1rem;
91011
91077
  }
91012
91078
 
91013
91079
  /* =============================================================================
@@ -91265,6 +91331,93 @@ var containerResponsiveThemeCss = `/*
91265
91331
  color: var(--section-text-color, rgb(var(--tb-text)));
91266
91332
  }
91267
91333
 
91334
+ /* =============================================================================
91335
+ * Form Block (fb-*)
91336
+ *
91337
+ * Uses:
91338
+ * - Tier 1 vars: --tb-border, --tb-surface, --tb-success, --tb-destructive
91339
+ * - Tier 2 vars: --rb-block-radius
91340
+ * - Tier 3 vars: --fb-success-*, --fb-error-*, --fb-empty-*
91341
+ *
91342
+ * Note: Form input styling (form-input, form-select, etc.) is handled by
91343
+ * the input CSS generator. These styles are for form container/state only.
91344
+ * ============================================================================= */
91345
+
91346
+ /* Form container */
91347
+ :where(.theme-scope) :where([data-block="form"]) .fb-form {
91348
+ display: flex;
91349
+ flex-direction: column;
91350
+ gap: 1rem;
91351
+ }
91352
+
91353
+ /* Two-column row (opt-in per field via schema layout) */
91354
+ :where(.theme-scope) :where([data-block="form"]) .fb-row-2 {
91355
+ display: grid;
91356
+ grid-template-columns: repeat(auto-fit, minmax(min(14rem, 100%), 1fr));
91357
+ gap: 1rem;
91358
+ }
91359
+
91360
+ /* Field wrapper */
91361
+ :where(.theme-scope) :where([data-block="form"]) .fb-field {
91362
+ display: flex;
91363
+ flex-direction: column;
91364
+ gap: 0.25rem;
91365
+ }
91366
+
91367
+ /* Fieldset (for radio groups) */
91368
+ :where(.theme-scope) :where([data-block="form"]) .fb-fieldset {
91369
+ display: flex;
91370
+ flex-direction: column;
91371
+ gap: 0.5rem;
91372
+ border: none;
91373
+ padding: 0;
91374
+ margin: 0;
91375
+ }
91376
+
91377
+ /* Inline field (checkbox, radio with label) */
91378
+ :where(.theme-scope) :where([data-block="form"]) .fb-inline {
91379
+ display: flex;
91380
+ align-items: center;
91381
+ gap: 0.5rem;
91382
+ }
91383
+
91384
+ /* Success state */
91385
+ :where(.theme-scope) :where([data-block="form"]) .fb-success {
91386
+ background-color: var(--fb-success-bg);
91387
+ color: var(--fb-success-text);
91388
+ border: 1px solid var(--fb-success-border);
91389
+ border-radius: var(--rb-block-radius);
91390
+ padding: 1rem;
91391
+ font-size: 0.875rem;
91392
+ }
91393
+
91394
+ /* Error banner */
91395
+ :where(.theme-scope) :where([data-block="form"]) .fb-error {
91396
+ background-color: var(--fb-error-bg);
91397
+ color: var(--fb-error-text);
91398
+ border: 1px solid var(--fb-error-border);
91399
+ border-radius: var(--rb-block-radius);
91400
+ padding: 0.75rem;
91401
+ font-size: 0.875rem;
91402
+ margin-bottom: 0.5rem;
91403
+ }
91404
+
91405
+ /* Empty state (no form data) */
91406
+ :where(.theme-scope) :where([data-block="form"]) .fb-empty {
91407
+ background-color: var(--fb-empty-bg);
91408
+ color: var(--fb-empty-text);
91409
+ border: 1px dashed var(--fb-empty-border);
91410
+ border-radius: var(--rb-block-radius);
91411
+ padding: 1.5rem;
91412
+ font-size: 0.875rem;
91413
+ text-align: center;
91414
+ }
91415
+
91416
+ /* Form actions (submit button container) */
91417
+ :where(.theme-scope) :where([data-block="form"]) .fb-actions {
91418
+ margin-top: 0.5rem;
91419
+ }
91420
+
91268
91421
  /* =============================================================================
91269
91422
  * Block-Level Override Utilities
91270
91423
  *
@@ -92881,14 +93034,11 @@ var containerResponsiveThemeCss = `/*
92881
93034
  --cr-on-surface-hover-bg: rgba(var(--tb-onSurface, var(--tb-text)), 0.05);
92882
93035
  }
92883
93036
 
92884
- /* Container */
93037
+ /* Container: base styling comes from the shared .rb-reg-surface
93038
+ (registration-surface.css); these overrides preserve course
93039
+ registration's pre-extraction look (fixed padding, centered). */
92885
93040
  :where(.theme-scope) :where([data-block="course-registration"]) .cr-container {
92886
- border-radius: var(--rb-block-radius);
92887
- border: 1px solid var(--cr-border);
92888
93041
  padding: 1.5rem;
92889
- background: rgb(var(--tb-surface));
92890
- color: var(--cr-on-surface);
92891
- max-width: 50rem; /* 800px */
92892
93042
  margin-inline: auto;
92893
93043
  }
92894
93044
 
@@ -93565,7 +93715,7 @@ var containerResponsiveThemeCss = `/*
93565
93715
  padding: 2rem 1rem;
93566
93716
  }
93567
93717
 
93568
- /* State icon color variants (layout from registration-shared.css) */
93718
+ /* State icon color variants (layout from registration-surface.css) */
93569
93719
  :where(.theme-scope) :where([data-block="course-registration"]) .rb-state-icon--success {
93570
93720
  background: var(--cr-success-bg);
93571
93721
  color: var(--cr-success-text);
@@ -128242,25 +128392,87 @@ function AltchaWidget({
128242
128392
  function isSpamProtectionEnabled() {
128243
128393
  return process.env.NEXT_PUBLIC_SPAM_PROTECTION_ENABLED === "true";
128244
128394
  }
128395
+ function CheckIcon2({ className, strokeWidth = 2 }) {
128396
+ return /* @__PURE__ */ jsx(
128397
+ "svg",
128398
+ {
128399
+ fill: "none",
128400
+ strokeLinecap: "round",
128401
+ strokeLinejoin: "round",
128402
+ strokeWidth,
128403
+ viewBox: "0 0 24 24",
128404
+ stroke: "currentColor",
128405
+ className,
128406
+ width: "1em",
128407
+ height: "1em",
128408
+ "aria-hidden": "true",
128409
+ children: /* @__PURE__ */ jsx("path", { d: "M5 13l4 4L19 7" })
128410
+ }
128411
+ );
128412
+ }
128413
+ function StateIcon({ variant, children }) {
128414
+ return /* @__PURE__ */ jsx("div", { className: `rb-state-icon rb-state-icon--${variant}`, "aria-hidden": "true", children });
128415
+ }
128416
+ function joinClasses7(...parts) {
128417
+ return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
128418
+ }
128419
+ function TerminalPanel({
128420
+ tone,
128421
+ title,
128422
+ titleAs: Title = "h3",
128423
+ body,
128424
+ secondaryBody,
128425
+ icon: icon2,
128426
+ actions,
128427
+ className,
128428
+ titleClassName,
128429
+ bodyClassName,
128430
+ secondaryBodyClassName,
128431
+ iconClassName,
128432
+ actionsClassName,
128433
+ role,
128434
+ live
128435
+ }) {
128436
+ const resolvedRole = role ?? (tone === "error" ? "alert" : "status");
128437
+ const resolvedLive = live ?? (resolvedRole === "alert" ? "assertive" : "polite");
128438
+ return /* @__PURE__ */ jsxs(
128439
+ "div",
128440
+ {
128441
+ className,
128442
+ "data-terminal-panel": true,
128443
+ "data-terminal-tone": tone,
128444
+ role: resolvedRole,
128445
+ "aria-live": resolvedLive === "off" ? void 0 : resolvedLive,
128446
+ children: [
128447
+ icon2 ? /* @__PURE__ */ jsx("div", { className: joinClasses7(iconClassName), "data-terminal-icon": true, children: icon2 }) : null,
128448
+ /* @__PURE__ */ jsx(Title, { className: joinClasses7(titleClassName), "data-terminal-title": true, children: title }),
128449
+ body ? /* @__PURE__ */ jsx("div", { className: joinClasses7(bodyClassName), "data-terminal-body": true, children: body }) : null,
128450
+ actions ? /* @__PURE__ */ jsx("div", { className: joinClasses7(actionsClassName), "data-terminal-actions": true, children: actions }) : null,
128451
+ secondaryBody ? /* @__PURE__ */ jsx("div", { className: joinClasses7(secondaryBodyClassName), "data-terminal-secondary-body": true, children: secondaryBody }) : null
128452
+ ]
128453
+ }
128454
+ );
128455
+ }
128245
128456
  var SuccessMessage = ({
128246
128457
  message: message2,
128247
128458
  resourceName,
128248
128459
  className
128249
128460
  }) => {
128250
128461
  return /* @__PURE__ */ jsx(
128251
- FeedbackMessage,
128462
+ TerminalPanel,
128252
128463
  {
128253
128464
  tone: "success",
128254
- className: `ab-alert ab-alert--success ${className ?? ""}`,
128465
+ title: "Booking confirmed",
128466
+ icon: /* @__PURE__ */ jsx(StateIcon, { variant: "success", children: /* @__PURE__ */ jsx(CheckIcon2, { strokeWidth: 3 }) }),
128467
+ body: /* @__PURE__ */ jsx("p", { className: "ab-text", children: message2 }),
128468
+ secondaryBody: resourceName ? /* @__PURE__ */ jsxs("p", { className: "ab-text rb-on-surface--muted", children: [
128469
+ "Practitioner: ",
128470
+ resourceName
128471
+ ] }) : null,
128472
+ className: ["ab-center", className ?? ""].join(" ").trim(),
128473
+ titleClassName: "ab-terminal-title",
128255
128474
  role: "alert",
128256
- live: "polite",
128257
- children: /* @__PURE__ */ jsxs(Fragment, { children: [
128258
- /* @__PURE__ */ jsx("p", { className: "ab-text", children: message2 }),
128259
- resourceName ? /* @__PURE__ */ jsxs("p", { className: "ab-text ab-text--muted", children: [
128260
- "Practitioner: ",
128261
- resourceName
128262
- ] }) : null
128263
- ] })
128475
+ live: "polite"
128264
128476
  }
128265
128477
  );
128266
128478
  };
@@ -128324,9 +128536,30 @@ function formatDate2(dateStr) {
128324
128536
  }
128325
128537
  });
128326
128538
  }
128327
- function formatTime2(isoString) {
128328
- return formatBookingInstant(isoString, {
128539
+ function formatDatePillParts(dateStr) {
128540
+ const instant = `${dateStr}T00:00:00.000Z`;
128541
+ const partFormat = (format2) => formatBookingInstant(instant, {
128329
128542
  timeZone: DEFAULT_BOOKING_TIME_ZONE,
128543
+ format: format2
128544
+ });
128545
+ return {
128546
+ weekday: partFormat({ weekday: "short" }),
128547
+ day: partFormat({ day: "numeric" }),
128548
+ month: partFormat({ month: "short" })
128549
+ };
128550
+ }
128551
+ function formatTimeShort(isoString, timeZone = DEFAULT_BOOKING_TIME_ZONE) {
128552
+ return formatBookingInstant(isoString, {
128553
+ timeZone,
128554
+ format: {
128555
+ hour: "numeric",
128556
+ minute: "2-digit"
128557
+ }
128558
+ });
128559
+ }
128560
+ function formatTime2(isoString, timeZone = DEFAULT_BOOKING_TIME_ZONE) {
128561
+ return formatBookingInstant(isoString, {
128562
+ timeZone,
128330
128563
  format: {
128331
128564
  hour: "numeric",
128332
128565
  minute: "2-digit",
@@ -129456,6 +129689,24 @@ function toBookingSlotView(slot) {
129456
129689
  function toBookingSlotViews(slots) {
129457
129690
  return slots.map(toBookingSlotView);
129458
129691
  }
129692
+ function deriveBookingSlotDisplayOptions(input) {
129693
+ const seenStartTimes = /* @__PURE__ */ new Set();
129694
+ const options = [];
129695
+ for (const slot of input.slots) {
129696
+ if (!input.hasSelectedResource) {
129697
+ if (seenStartTimes.has(slot.startAt)) continue;
129698
+ seenStartTimes.add(slot.startAt);
129699
+ }
129700
+ options.push({
129701
+ key: slot.key,
129702
+ startAt: slot.startAt,
129703
+ endAt: slot.endAt,
129704
+ resourceId: slot.resourceId,
129705
+ slot
129706
+ });
129707
+ }
129708
+ return options;
129709
+ }
129459
129710
  function toBookingFormData(state) {
129460
129711
  return {
129461
129712
  ...state.fieldValues,
@@ -130752,63 +131003,96 @@ function useAppointmentCheckoutVerificationWithDeps(config, deps) {
130752
131003
  retry: polling.retry
130753
131004
  };
130754
131005
  }
131006
+ function DateFieldLabel({
131007
+ labelId,
131008
+ required
131009
+ }) {
131010
+ return /* @__PURE__ */ jsxs("span", { className: "form-label", id: labelId, children: [
131011
+ "Select Date",
131012
+ required && /* @__PURE__ */ jsx("span", { className: "required-marker", children: "*" })
131013
+ ] });
131014
+ }
130755
131015
  var DatePicker = ({
130756
131016
  value,
130757
131017
  onChange,
130758
131018
  dateOptions,
130759
131019
  required = true,
131020
+ ariaDescribedBy,
131021
+ ariaInvalid,
130760
131022
  isLoading = false,
130761
131023
  isEmpty = false,
130762
131024
  hasMore = false,
130763
131025
  onLoadMore
130764
131026
  }) => {
131027
+ const generatedId = React61__default.useId();
131028
+ const labelId = `${generatedId}-date-label`;
131029
+ const gridRef = React61__default.useRef(null);
131030
+ const previousCountRef = React61__default.useRef(dateOptions.length);
131031
+ React61__default.useEffect(() => {
131032
+ const previousCount = previousCountRef.current;
131033
+ previousCountRef.current = dateOptions.length;
131034
+ if (previousCount === 0 || dateOptions.length <= previousCount) return;
131035
+ const pills = gridRef.current?.querySelectorAll(
131036
+ "button[aria-pressed]"
131037
+ );
131038
+ pills?.[previousCount]?.focus();
131039
+ }, [dateOptions.length]);
130765
131040
  if (isLoading) {
130766
- return /* @__PURE__ */ jsxs("div", { className: "ab-stack--sm", children: [
130767
- /* @__PURE__ */ jsxs("label", { className: "ab-label", children: [
130768
- "Select Date",
130769
- required && /* @__PURE__ */ jsx("span", { className: "ab-required", children: "*" })
130770
- ] }),
130771
- /* @__PURE__ */ jsx("div", { className: "ab-skeleton" }),
130772
- /* @__PURE__ */ jsx("p", { className: "ab-text ab-text--muted ab-text--sm", children: "Loading available dates..." })
131041
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
131042
+ /* @__PURE__ */ jsx(DateFieldLabel, { labelId, required }),
131043
+ /* @__PURE__ */ jsx("div", { className: "rb-shell-block" }),
131044
+ /* @__PURE__ */ jsx("p", { className: "ab-text ab-text--sm rb-on-surface--muted", children: "Loading available dates..." })
130773
131045
  ] });
130774
131046
  }
130775
131047
  if (isEmpty) {
130776
- return /* @__PURE__ */ jsxs("div", { className: "ab-stack--sm", children: [
130777
- /* @__PURE__ */ jsxs("label", { className: "ab-label", children: [
130778
- "Select Date",
130779
- required && /* @__PURE__ */ jsx("span", { className: "ab-required", children: "*" })
130780
- ] }),
130781
- /* @__PURE__ */ jsx(FeedbackMessage, { tone: "warning", className: "ab-alert ab-alert--warning", role: "status", children: /* @__PURE__ */ jsxs("p", { className: "ab-text", children: [
131048
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
131049
+ /* @__PURE__ */ jsx(DateFieldLabel, { labelId, required }),
131050
+ /* @__PURE__ */ jsx(FeedbackMessage, { tone: "warning", className: "alert alert-warning", role: "status", children: /* @__PURE__ */ jsxs("p", { className: "ab-text", children: [
130782
131051
  "No available dates in this period.",
130783
131052
  hasMore && onLoadMore && /* @__PURE__ */ jsx(
130784
131053
  "button",
130785
131054
  {
130786
131055
  type: "button",
130787
131056
  onClick: onLoadMore,
130788
- className: "ab-link",
131057
+ className: "ab-link rb-ml-2",
130789
131058
  children: "Check later dates"
130790
131059
  }
130791
131060
  )
130792
131061
  ] }) })
130793
131062
  ] });
130794
131063
  }
130795
- return /* @__PURE__ */ jsxs("div", { className: "ab-stack--sm", children: [
130796
- /* @__PURE__ */ jsxs("label", { htmlFor: "booking-date", className: "ab-label", children: [
130797
- "Select Date",
130798
- required && /* @__PURE__ */ jsx("span", { className: "ab-required", children: "*" })
130799
- ] }),
130800
- /* @__PURE__ */ jsxs(
130801
- "select",
131064
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
131065
+ /* @__PURE__ */ jsx(DateFieldLabel, { labelId, required }),
131066
+ /* @__PURE__ */ jsx(
131067
+ "div",
130802
131068
  {
130803
- id: "booking-date",
130804
- value,
130805
- onChange: (e3) => onChange(e3.target.value),
130806
- required,
130807
- className: "ab-select",
130808
- children: [
130809
- /* @__PURE__ */ jsx("option", { value: "", children: "Choose a date..." }),
130810
- dateOptions.map((date) => /* @__PURE__ */ jsx("option", { value: date, children: formatDate2(date) }, date))
130811
- ]
131069
+ ref: gridRef,
131070
+ role: "group",
131071
+ "aria-labelledby": labelId,
131072
+ "aria-describedby": ariaDescribedBy,
131073
+ "aria-invalid": ariaInvalid || void 0,
131074
+ "aria-required": required || void 0,
131075
+ className: "ab-pill-grid",
131076
+ children: dateOptions.map((date) => {
131077
+ const isSelected = value === date;
131078
+ const parts = formatDatePillParts(date);
131079
+ return /* @__PURE__ */ jsxs(
131080
+ "button",
131081
+ {
131082
+ type: "button",
131083
+ onClick: () => onChange(isSelected ? "" : date),
131084
+ "aria-pressed": isSelected,
131085
+ "aria-label": formatDate2(date),
131086
+ className: `rb-option-card ab-date-pill${isSelected ? " rb-option-card--selected" : ""}`,
131087
+ children: [
131088
+ /* @__PURE__ */ jsx("span", { className: "ab-pill-caption", "aria-hidden": "true", children: parts.weekday }),
131089
+ /* @__PURE__ */ jsx("span", { className: "ab-pill-value", "aria-hidden": "true", children: parts.day }),
131090
+ /* @__PURE__ */ jsx("span", { className: "ab-pill-caption", "aria-hidden": "true", children: parts.month })
131091
+ ]
131092
+ },
131093
+ date
131094
+ );
131095
+ })
130812
131096
  }
130813
131097
  ),
130814
131098
  hasMore && onLoadMore && /* @__PURE__ */ jsx(
@@ -130817,7 +131101,7 @@ var DatePicker = ({
130817
131101
  type: "button",
130818
131102
  onClick: onLoadMore,
130819
131103
  className: "ab-link",
130820
- children: "Load more dates \u2192"
131104
+ children: "More dates \u2192"
130821
131105
  }
130822
131106
  )
130823
131107
  ] });
@@ -130827,29 +131111,125 @@ var TimeSlotSelector = ({
130827
131111
  onChange,
130828
131112
  slots,
130829
131113
  isLoading,
130830
- required = true
131114
+ timezone,
131115
+ required = true,
131116
+ ariaDescribedBy,
131117
+ ariaInvalid
130831
131118
  }) => {
130832
- return /* @__PURE__ */ jsxs("div", { className: "ab-stack--sm", children: [
130833
- /* @__PURE__ */ jsxs("label", { htmlFor: "booking-slot", className: "ab-label", children: [
131119
+ const generatedId = React61__default.useId();
131120
+ const labelId = `${generatedId}-time-label`;
131121
+ const groupRef = React61__default.useRef(null);
131122
+ const hadSlotsRef = React61__default.useRef(false);
131123
+ React61__default.useEffect(() => {
131124
+ const hasSlots = !isLoading && slots.length > 0;
131125
+ if (hasSlots && !hadSlotsRef.current) {
131126
+ groupRef.current?.scrollIntoView({ block: "nearest", behavior: "smooth" });
131127
+ }
131128
+ hadSlotsRef.current = hasSlots;
131129
+ }, [isLoading, slots.length]);
131130
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
131131
+ /* @__PURE__ */ jsxs("span", { className: "form-label", id: labelId, children: [
130834
131132
  "Select Time",
130835
- required && /* @__PURE__ */ jsx("span", { className: "ab-required", children: "*" })
131133
+ required && /* @__PURE__ */ jsx("span", { className: "required-marker", children: "*" })
130836
131134
  ] }),
130837
- isLoading ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "ab-alert ab-alert--info ab-center", role: "status", children: "Loading available times..." }) : slots.length === 0 ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "ab-alert ab-alert--info ab-center", role: "status", children: "No available times for this date" }) : /* @__PURE__ */ jsxs(
130838
- "select",
131135
+ isLoading ? /* @__PURE__ */ jsx("div", { className: "rb-shell-block" }) : slots.length === 0 ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "alert alert-info", role: "status", children: "No available times for this date" }) : /* @__PURE__ */ jsx(
131136
+ "div",
130839
131137
  {
130840
- id: "booking-slot",
130841
- value,
130842
- onChange: (e3) => onChange(e3.target.value),
130843
- required,
130844
- className: "ab-select",
130845
- children: [
130846
- /* @__PURE__ */ jsx("option", { value: "", children: "Choose a time..." }),
130847
- slots.map((slot) => /* @__PURE__ */ jsx("option", { value: slot.startAt, children: formatTime2(slot.startAt) }, slot.startAt))
130848
- ]
131138
+ ref: groupRef,
131139
+ role: "group",
131140
+ "aria-labelledby": labelId,
131141
+ "aria-describedby": ariaDescribedBy,
131142
+ "aria-invalid": ariaInvalid || void 0,
131143
+ "aria-required": required || void 0,
131144
+ className: "ab-pill-grid",
131145
+ children: slots.map((slot) => {
131146
+ const isSelected = value === slot.key;
131147
+ return /* @__PURE__ */ jsx(
131148
+ "button",
131149
+ {
131150
+ type: "button",
131151
+ onClick: () => onChange(isSelected ? "" : slot.key),
131152
+ "aria-pressed": isSelected,
131153
+ "aria-label": formatTime2(slot.startAt, timezone),
131154
+ className: `rb-option-card ab-time-pill${isSelected ? " rb-option-card--selected" : ""}`,
131155
+ children: formatTimeShort(slot.startAt, timezone)
131156
+ },
131157
+ slot.key
131158
+ );
131159
+ })
130849
131160
  }
130850
131161
  )
130851
131162
  ] });
130852
131163
  };
131164
+ function buildClassChannels(slot, classPrefix, emitSharedClasses) {
131165
+ const classes = [];
131166
+ if (emitSharedClasses) classes.push(`rb-${slot}`);
131167
+ if (classPrefix) classes.push(`${classPrefix}-${slot}`);
131168
+ return classes;
131169
+ }
131170
+ function StepIndicator({
131171
+ currentStep,
131172
+ totalSteps,
131173
+ stepLabels,
131174
+ classPrefix,
131175
+ emitSharedClasses
131176
+ }) {
131177
+ const slotClass = (slot, modifier) => {
131178
+ const base2 = buildClassChannels(slot, classPrefix, emitSharedClasses);
131179
+ if (!modifier) return base2.join(" ");
131180
+ const modified = buildClassChannels(
131181
+ `${slot}--${modifier}`,
131182
+ classPrefix,
131183
+ emitSharedClasses
131184
+ );
131185
+ return [...base2, ...modified].join(" ");
131186
+ };
131187
+ return /* @__PURE__ */ jsx("nav", { "aria-label": "Registration progress", className: slotClass("steps-nav"), children: /* @__PURE__ */ jsx("ol", { className: slotClass("steps"), children: Array.from({ length: totalSteps }, (_2, i2) => {
131188
+ const stepNum = i2 + 1;
131189
+ const isActive2 = stepNum === currentStep;
131190
+ const isComplete = stepNum < currentStep;
131191
+ return /* @__PURE__ */ jsxs(
131192
+ "li",
131193
+ {
131194
+ className: slotClass("step"),
131195
+ "aria-current": isActive2 ? "step" : void 0,
131196
+ children: [
131197
+ /* @__PURE__ */ jsx(
131198
+ "div",
131199
+ {
131200
+ className: slotClass(
131201
+ "step-circle",
131202
+ isActive2 ? "active" : isComplete ? "completed" : void 0
131203
+ ),
131204
+ children: isComplete ? /* @__PURE__ */ jsx(CheckIcon2, { className: slotClass("step-check"), strokeWidth: 3 }) : stepNum
131205
+ }
131206
+ ),
131207
+ stepLabels?.[i2] && /* @__PURE__ */ jsx(
131208
+ "span",
131209
+ {
131210
+ className: slotClass(
131211
+ "step-label",
131212
+ isActive2 ? "active" : void 0
131213
+ ),
131214
+ children: stepLabels[i2]
131215
+ }
131216
+ ),
131217
+ stepNum < totalSteps && /* @__PURE__ */ jsx(
131218
+ "div",
131219
+ {
131220
+ className: slotClass(
131221
+ "step-connector",
131222
+ isComplete ? "completed" : void 0
131223
+ ),
131224
+ "aria-hidden": "true"
131225
+ }
131226
+ )
131227
+ ]
131228
+ },
131229
+ i2
131230
+ );
131231
+ }) }) });
131232
+ }
130853
131233
  var BLOCK_DISCOUNT_CODE_DISCLOSURE_CLASSES = {
130854
131234
  "course-registration": {
130855
131235
  root: "cr-discount",
@@ -131004,17 +131384,9 @@ function FieldValidationMessage({
131004
131384
  }
131005
131385
  );
131006
131386
  }
131007
- var paymentOptionLayoutStyle = {
131008
- alignItems: "flex-start",
131009
- display: "flex",
131010
- flexDirection: "column",
131011
- gap: "0.25rem",
131012
- justifyContent: "flex-start",
131013
- width: "100%"
131014
- };
131015
- var summaryStackStyle = {
131016
- gap: "0.125rem"
131017
- };
131387
+ function optionCardClassName(isSelected) {
131388
+ return `rb-option-card${isSelected ? " rb-option-card--selected" : ""}`;
131389
+ }
131018
131390
  function formatBookingAmount(amount, currency) {
131019
131391
  return formatCurrencyAmount(amount, currency, { decimals: "auto" });
131020
131392
  }
@@ -131023,6 +131395,7 @@ function HeadlessBookingDefaultForm({
131023
131395
  onSubmit
131024
131396
  }) {
131025
131397
  const currentStep = booking.currentStep;
131398
+ const errorSummaryId = React61__default.useId();
131026
131399
  const currentStepIndex = currentStep?.visibleIndex ?? 0;
131027
131400
  const isFirstStep = currentStepIndex === 0;
131028
131401
  const isLastStep = currentStepIndex === booking.steps.length - 1;
@@ -131038,16 +131411,30 @@ function HeadlessBookingDefaultForm({
131038
131411
  return /* @__PURE__ */ jsx("div", { className: "rb-text-center rb-py-12", children: /* @__PURE__ */ jsx("p", { className: "status-muted", children: "No steps available" }) });
131039
131412
  }
131040
131413
  return /* @__PURE__ */ jsxs("div", { className: "multi-step-form", children: [
131041
- /* @__PURE__ */ jsx("div", { className: "rb-mb-8", children: /* @__PURE__ */ jsx(
131042
- DefaultBookingProgress,
131414
+ booking.steps.length > 1 ? /* @__PURE__ */ jsx(
131415
+ StepIndicator,
131416
+ {
131417
+ currentStep: currentStepIndex + 1,
131418
+ totalSteps: booking.steps.length,
131419
+ stepLabels: booking.steps.map((step) => step.label),
131420
+ emitSharedClasses: true
131421
+ }
131422
+ ) : null,
131423
+ /* @__PURE__ */ jsx("div", { className: "step-content", children: /* @__PURE__ */ jsx(
131424
+ DefaultBookingStepContent,
131043
131425
  {
131044
- steps: booking.steps,
131045
- currentIndex: currentStepIndex
131426
+ booking,
131427
+ errorSummaryId
131046
131428
  }
131047
131429
  ) }),
131048
- /* @__PURE__ */ jsx("div", { className: "step-content", children: /* @__PURE__ */ jsx(DefaultBookingStepContent, { booking }) }),
131049
- /* @__PURE__ */ jsx(DefaultBookingErrorSummary, { errors: currentStep.errors }),
131050
- /* @__PURE__ */ jsxs("div", { className: "rb-flex rb-gap-3 rb-mt-8", children: [
131430
+ /* @__PURE__ */ jsx(
131431
+ DefaultBookingErrorSummary,
131432
+ {
131433
+ errors: currentStep.errors,
131434
+ id: errorSummaryId
131435
+ }
131436
+ ),
131437
+ /* @__PURE__ */ jsxs("div", { className: "rb-wizard-actions", children: [
131051
131438
  !isFirstStep ? /* @__PURE__ */ jsx(
131052
131439
  "button",
131053
131440
  {
@@ -131065,11 +131452,7 @@ function HeadlessBookingDefaultForm({
131065
131452
  void handlePrimaryAction();
131066
131453
  },
131067
131454
  disabled: isSubmitting,
131068
- className: themeButtonClassName({
131069
- variant: "primary",
131070
- size: "md",
131071
- extraClassName: "rb-flex-1"
131072
- }),
131455
+ className: themeButtonClassName({ variant: "primary", size: "md" }),
131073
131456
  children: isSubmitting ? /* @__PURE__ */ jsxs(Fragment, { children: [
131074
131457
  /* @__PURE__ */ jsx(
131075
131458
  SpinnerNode,
@@ -131090,44 +131473,9 @@ function HeadlessBookingDefaultForm({
131090
131473
  /* @__PURE__ */ jsx(DefaultBookingAltcha, { booking })
131091
131474
  ] });
131092
131475
  }
131093
- function DefaultBookingProgress({
131094
- steps,
131095
- currentIndex
131096
- }) {
131097
- return /* @__PURE__ */ jsx("div", { className: "rb-flex rb-items-center rb-justify-between", children: steps.map((step, index2) => {
131098
- const isActive2 = index2 === currentIndex;
131099
- const isCompleted = index2 < currentIndex;
131100
- const isLast = index2 === steps.length - 1;
131101
- return /* @__PURE__ */ jsxs("div", { className: "rb-flex rb-items-center rb-flex-1", children: [
131102
- /* @__PURE__ */ jsxs("div", { className: "rb-flex rb-items-center rb-gap-2 rb-cursor-default", children: [
131103
- /* @__PURE__ */ jsx(
131104
- "div",
131105
- {
131106
- className: `
131107
- step-circle transition-theme-standard
131108
- ${isActive2 ? "step-circle-active" : ""}
131109
- ${isCompleted ? "step-circle-complete" : ""}
131110
- `,
131111
- children: isCompleted ? "\u2713" : index2 + 1
131112
- }
131113
- ),
131114
- /* @__PURE__ */ jsx(
131115
- "span",
131116
- {
131117
- className: `
131118
- rb-caption rb-hidden rb-sm-inline
131119
- ${isCompleted || !isActive2 ? "status-muted" : ""}
131120
- `,
131121
- children: step.label
131122
- }
131123
- )
131124
- ] }),
131125
- !isLast ? /* @__PURE__ */ jsx("div", { className: "step-connector rb-ml-2 rb-mr-2 rb-hidden rb-sm-block" }) : null
131126
- ] }, step.id);
131127
- }) });
131128
- }
131129
131476
  function DefaultBookingStepContent({
131130
- booking
131477
+ booking,
131478
+ errorSummaryId
131131
131479
  }) {
131132
131480
  const stepId = booking.currentStep?.id;
131133
131481
  if (!stepId) return null;
@@ -131135,7 +131483,13 @@ function DefaultBookingStepContent({
131135
131483
  case "service-selection":
131136
131484
  return /* @__PURE__ */ jsx(DefaultServiceSelectionStep, { booking });
131137
131485
  case "datetime-selection":
131138
- return /* @__PURE__ */ jsx(DefaultDateTimeSelectionStep, { booking });
131486
+ return /* @__PURE__ */ jsx(
131487
+ DefaultDateTimeSelectionStep,
131488
+ {
131489
+ booking,
131490
+ errorSummaryId
131491
+ }
131492
+ );
131139
131493
  case "payment-selection":
131140
131494
  return /* @__PURE__ */ jsx(HeadlessBookingPaymentSelectionStep, { booking });
131141
131495
  case "custom-fields":
@@ -131154,32 +131508,33 @@ function DefaultServiceSelectionStep({
131154
131508
  const showServiceSelect = booking.services.requiresSelection || services.length > 1;
131155
131509
  const showResourceSelect = booking.resources.requiresSelection || resources.length > 1;
131156
131510
  const allowAnyResource = !booking.resources.requiresSelection;
131157
- return /* @__PURE__ */ jsxs("div", { className: "ab-stack", children: [
131511
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack", children: [
131158
131512
  /* @__PURE__ */ jsxs("div", { children: [
131159
131513
  /* @__PURE__ */ jsx("h2", { className: "ab-title", children: "Select Service" }),
131160
- /* @__PURE__ */ jsx("p", { className: "ab-text ab-text--muted", children: "Choose the service you'd like to book" })
131514
+ /* @__PURE__ */ jsx("p", { className: "ab-text rb-on-surface--muted", children: "Choose the service you'd like to book" })
131161
131515
  ] }),
131162
- showServiceSelect ? /* @__PURE__ */ jsxs("div", { className: "ab-stack--sm", children: [
131163
- /* @__PURE__ */ jsx("label", { className: "ab-subtitle", children: "Service" }),
131164
- /* @__PURE__ */ jsx("div", { className: "ab-grid", children: services.map((service) => {
131516
+ showServiceSelect ? /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
131517
+ /* @__PURE__ */ jsx("span", { className: "ab-subtitle", children: "Service" }),
131518
+ /* @__PURE__ */ jsx("div", { className: "rb-reg-grid", children: services.map((service) => {
131165
131519
  const isSelected = selectedServiceId === service.id;
131166
- return /* @__PURE__ */ jsx(
131520
+ return /* @__PURE__ */ jsxs(
131167
131521
  "button",
131168
131522
  {
131169
131523
  type: "button",
131170
131524
  onClick: () => booking.actions.selectService(service.id),
131171
- className: `ab-card ${isSelected ? "ab-card--selected" : ""}`,
131172
- children: /* @__PURE__ */ jsxs("div", { className: "ab-row--between", children: [
131173
- /* @__PURE__ */ jsxs("div", { children: [
131525
+ className: optionCardClassName(isSelected),
131526
+ "aria-pressed": isSelected,
131527
+ children: [
131528
+ /* @__PURE__ */ jsxs("div", { className: "rb-flex-1", children: [
131174
131529
  /* @__PURE__ */ jsx("div", { className: "ab-subtitle", children: service.title }),
131175
- service.description ? /* @__PURE__ */ jsx("div", { className: "ab-text ab-text--muted", children: service.description }) : null,
131176
- service.durationMinutes ? /* @__PURE__ */ jsxs("div", { className: "ab-text ab-text--muted", children: [
131530
+ service.description ? /* @__PURE__ */ jsx("div", { className: "ab-text rb-on-surface--muted", children: service.description }) : null,
131531
+ service.durationMinutes ? /* @__PURE__ */ jsxs("div", { className: "ab-text rb-on-surface--muted", children: [
131177
131532
  service.durationMinutes,
131178
131533
  " minutes"
131179
131534
  ] }) : null
131180
131535
  ] }),
131181
131536
  isSelected ? /* @__PURE__ */ jsx(SelectedCheck, {}) : null
131182
- ] })
131537
+ ]
131183
131538
  },
131184
131539
  service.id
131185
131540
  );
@@ -131187,41 +131542,43 @@ function DefaultServiceSelectionStep({
131187
131542
  ] }) : null,
131188
131543
  booking.resources.state.tag === "loading" ? /* @__PURE__ */ jsxs("div", { className: "ab-center", children: [
131189
131544
  /* @__PURE__ */ jsx(SpinnerNode, { size: "md", srLabel: "Loading practitioners" }),
131190
- /* @__PURE__ */ jsx("p", { className: "ab-text ab-text--muted", children: "Loading practitioners..." })
131545
+ /* @__PURE__ */ jsx("p", { className: "ab-text rb-on-surface--muted", children: "Loading practitioners..." })
131191
131546
  ] }) : null,
131192
- booking.resources.state.tag === "error" ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "ab-alert ab-alert--error", role: "alert", children: booking.resources.state.message }) : null,
131193
- showResourceSelect && booking.resources.state.tag === "loaded" && resources.length === 0 ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "ab-alert ab-alert--error", role: "alert", children: "No practitioners are available for this service right now." }) : null,
131194
- showResourceSelect && booking.resources.state.tag !== "loading" && (allowAnyResource || resources.length > 0) ? /* @__PURE__ */ jsxs("div", { className: "ab-stack--sm", children: [
131195
- /* @__PURE__ */ jsxs("label", { className: "ab-subtitle", children: [
131547
+ booking.resources.state.tag === "error" ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "alert alert-error", role: "alert", children: booking.resources.state.message }) : null,
131548
+ showResourceSelect && booking.resources.state.tag === "loaded" && resources.length === 0 ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "alert alert-error", role: "alert", children: "No practitioners are available for this service right now." }) : null,
131549
+ showResourceSelect && booking.resources.state.tag !== "loading" && (allowAnyResource || resources.length > 0) ? /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack rb-reg-stack--sm", children: [
131550
+ /* @__PURE__ */ jsxs("span", { className: "ab-subtitle", children: [
131196
131551
  "Practitioner",
131197
131552
  booking.resources.requiresSelection ? "" : " (Optional)"
131198
131553
  ] }),
131199
- /* @__PURE__ */ jsx("p", { className: "ab-text ab-text--muted", children: allowAnyResource ? 'Choose a specific practitioner or select "Any Available"' : "Choose the practitioner you'd like to book" }),
131200
- /* @__PURE__ */ jsxs("div", { className: "ab-grid", children: [
131201
- allowAnyResource ? /* @__PURE__ */ jsx(
131554
+ /* @__PURE__ */ jsx("p", { className: "ab-text rb-on-surface--muted", children: allowAnyResource ? 'Choose a specific practitioner or select "Any Available"' : "Choose the practitioner you'd like to book" }),
131555
+ /* @__PURE__ */ jsxs("div", { className: "rb-reg-grid", children: [
131556
+ allowAnyResource ? /* @__PURE__ */ jsxs(
131202
131557
  "button",
131203
131558
  {
131204
131559
  type: "button",
131205
131560
  onClick: () => booking.actions.selectResource(null),
131206
- className: `ab-card ${!selectedResourceId ? "ab-card--selected" : ""}`,
131207
- children: /* @__PURE__ */ jsxs("div", { className: "ab-row--between", children: [
131208
- /* @__PURE__ */ jsx("div", { className: "ab-subtitle", children: "Any Available" }),
131561
+ className: optionCardClassName(!selectedResourceId),
131562
+ "aria-pressed": !selectedResourceId,
131563
+ children: [
131564
+ /* @__PURE__ */ jsx("div", { className: "rb-flex-1 ab-subtitle", children: "Any Available" }),
131209
131565
  !selectedResourceId ? /* @__PURE__ */ jsx(SelectedCheck, {}) : null
131210
- ] })
131566
+ ]
131211
131567
  }
131212
131568
  ) : null,
131213
131569
  resources.map((resource) => {
131214
131570
  const isSelected = selectedResourceId === resource.id;
131215
- return /* @__PURE__ */ jsx(
131571
+ return /* @__PURE__ */ jsxs(
131216
131572
  "button",
131217
131573
  {
131218
131574
  type: "button",
131219
131575
  onClick: () => booking.actions.selectResource(resource.id),
131220
- className: `ab-card ${isSelected ? "ab-card--selected" : ""}`,
131221
- children: /* @__PURE__ */ jsxs("div", { className: "ab-row--between", children: [
131222
- /* @__PURE__ */ jsx("div", { className: "ab-subtitle", children: resource.label }),
131576
+ className: optionCardClassName(isSelected),
131577
+ "aria-pressed": isSelected,
131578
+ children: [
131579
+ /* @__PURE__ */ jsx("div", { className: "rb-flex-1 ab-subtitle", children: resource.label }),
131223
131580
  isSelected ? /* @__PURE__ */ jsx(SelectedCheck, {}) : null
131224
- ] })
131581
+ ]
131225
131582
  },
131226
131583
  resource.id
131227
131584
  );
@@ -131231,27 +131588,30 @@ function DefaultServiceSelectionStep({
131231
131588
  ] });
131232
131589
  }
131233
131590
  function DefaultDateTimeSelectionStep({
131234
- booking
131591
+ booking,
131592
+ errorSummaryId
131235
131593
  }) {
131236
131594
  const selectedDate = booking.availability.selectedDate ?? "";
131237
- const selectedSlotStart = booking.availability.selectedSlot?.startAt ?? "";
131595
+ const selectedSlotKey = booking.availability.selectedSlot?.key ?? "";
131238
131596
  const singleService = booking.services.items.length === 1 ? booking.services.items[0] : void 0;
131239
- const slots = collapseHeadlessSlotsForDisplay({
131597
+ const slots = deriveBookingSlotDisplayOptions({
131240
131598
  slots: booking.availability.slots,
131241
131599
  hasSelectedResource: Boolean(booking.resources.selectedResourceId)
131242
131600
  });
131243
131601
  const error = booking.availability.datesState.tag === "error" ? booking.availability.datesState.message : booking.availability.slotsState.tag === "error" ? booking.availability.slotsState.message : null;
131244
- return /* @__PURE__ */ jsxs("div", { className: "ab-stack", children: [
131245
- singleService ? /* @__PURE__ */ jsxs("div", { className: "ab-info-box", children: [
131602
+ const hasValidationError = Boolean(booking.currentStep?.errors.formError);
131603
+ const validationDescribedBy = hasValidationError ? errorSummaryId : void 0;
131604
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack", children: [
131605
+ singleService ? /* @__PURE__ */ jsxs("div", { className: "rb-reg-summary", children: [
131246
131606
  /* @__PURE__ */ jsx("h3", { className: "ab-subtitle", children: singleService.title }),
131247
- singleService.description ? /* @__PURE__ */ jsx("p", { className: "ab-text ab-text--muted", children: singleService.description }) : null,
131248
- singleService.durationMinutes ? /* @__PURE__ */ jsxs("p", { className: "ab-text ab-text--muted", children: [
131607
+ singleService.description ? /* @__PURE__ */ jsx("p", { className: "ab-text rb-on-surface--muted", children: singleService.description }) : null,
131608
+ singleService.durationMinutes ? /* @__PURE__ */ jsxs("p", { className: "ab-text rb-on-surface--muted", children: [
131249
131609
  "Duration: ",
131250
131610
  singleService.durationMinutes,
131251
131611
  " minutes"
131252
131612
  ] }) : null
131253
131613
  ] }) : null,
131254
- error ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "ab-alert ab-alert--error", role: "alert", children: error }) : null,
131614
+ error ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "alert alert-error", role: "alert", children: error }) : null,
131255
131615
  /* @__PURE__ */ jsx(
131256
131616
  DatePicker,
131257
131617
  {
@@ -131260,6 +131620,8 @@ function DefaultDateTimeSelectionStep({
131260
131620
  dateOptions: [...booking.availability.availableDates],
131261
131621
  isLoading: booking.availability.datesState.tag === "loading",
131262
131622
  isEmpty: booking.availability.datesState.tag !== "loading" && booking.availability.availableDates.length === 0,
131623
+ ariaDescribedBy: validationDescribedBy,
131624
+ ariaInvalid: hasValidationError,
131263
131625
  hasMore: booking.availability.hasMoreDates,
131264
131626
  onLoadMore: booking.availability.loadMoreDates
131265
131627
  }
@@ -131267,16 +131629,17 @@ function DefaultDateTimeSelectionStep({
131267
131629
  selectedDate ? /* @__PURE__ */ jsx(
131268
131630
  TimeSlotSelector,
131269
131631
  {
131270
- value: selectedSlotStart,
131271
- onChange: (slotStartTime) => {
131632
+ value: selectedSlotKey,
131633
+ onChange: (slotKey) => {
131272
131634
  booking.actions.selectSlot(
131273
- booking.availability.slots.find(
131274
- (slot) => slot.startAt === slotStartTime
131275
- ) ?? null
131635
+ slots.find((slot) => slot.key === slotKey)?.slot ?? null
131276
131636
  );
131277
131637
  },
131278
131638
  slots,
131279
- isLoading: booking.availability.slotsState.tag === "loading"
131639
+ isLoading: booking.availability.slotsState.tag === "loading",
131640
+ timezone: booking.availability.timezone,
131641
+ ariaDescribedBy: validationDescribedBy,
131642
+ ariaInvalid: hasValidationError
131280
131643
  }
131281
131644
  ) : null
131282
131645
  ] });
@@ -131287,21 +131650,21 @@ function HeadlessBookingPaymentSelectionStep({
131287
131650
  const service = booking.services.selected;
131288
131651
  const viewModel = booking.payment.selection;
131289
131652
  if (booking.payment.kind === "unsupported") {
131290
- return /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "ab-alert ab-alert--error", role: "alert", children: booking.payment.errorMessage });
131653
+ return /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "alert alert-error", role: "alert", children: booking.payment.errorMessage });
131291
131654
  }
131292
131655
  if (!service || !viewModel) {
131293
- return /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "ab-alert ab-alert--error", role: "alert", children: "Payment options are unavailable for this service right now." });
131656
+ return /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "alert alert-error", role: "alert", children: "Payment options are unavailable for this service right now." });
131294
131657
  }
131295
131658
  const packageOptions = booking.payment.appointmentPackages.items;
131296
131659
  const hasPackageOptions = packageOptions.length > 0;
131297
131660
  const slidingScale = booking.payment.slidingScale;
131298
- return /* @__PURE__ */ jsxs("div", { className: "ab-stack", children: [
131299
- /* @__PURE__ */ jsxs("div", { className: "ab-info-box", children: [
131661
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack", children: [
131662
+ /* @__PURE__ */ jsxs("div", { className: "rb-reg-summary", children: [
131300
131663
  /* @__PURE__ */ jsx("h3", { className: "ab-subtitle", children: viewModel.sectionTitle }),
131301
- /* @__PURE__ */ jsx("p", { className: "ab-text ab-text--muted", children: service.title })
131664
+ /* @__PURE__ */ jsx("p", { className: "ab-text rb-on-surface--muted", children: service.title })
131302
131665
  ] }),
131303
- booking.payment.appointmentPackages.state.tag === "loading" ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "ab-alert ab-alert--info", role: "status", children: "Checking package credits..." }) : null,
131304
- booking.payment.appointmentPackages.state.tag === "error" ? /* @__PURE__ */ jsxs(FeedbackMessage, { tone: "info", className: "ab-alert ab-alert--info", role: "status", children: [
131666
+ booking.payment.appointmentPackages.state.tag === "loading" ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "alert alert-info", role: "status", children: "Checking package credits..." }) : null,
131667
+ booking.payment.appointmentPackages.state.tag === "error" ? /* @__PURE__ */ jsxs(FeedbackMessage, { tone: "info", className: "alert alert-info", role: "status", children: [
131305
131668
  booking.payment.appointmentPackages.state.message,
131306
131669
  " You can continue with the normal payment option."
131307
131670
  ] }) : null,
@@ -131327,47 +131690,47 @@ function HeadlessBookingPaymentSelectionStep({
131327
131690
  }
131328
131691
  )
131329
131692
  ] }) : null,
131330
- /* @__PURE__ */ jsxs("div", { className: "ab-stack", role: "list", "aria-label": "Payment options", children: [
131331
- packageOptions.map((appointmentPackage) => {
131332
- const isSelected = booking.payment.selectedAppointmentPackageId === appointmentPackage.customerPassId;
131333
- return /* @__PURE__ */ jsx(
131334
- "button",
131335
- {
131336
- type: "button",
131337
- className: themeButtonClassName({
131338
- variant: isSelected ? "primary" : "outline",
131339
- size: "md"
131340
- }),
131341
- style: paymentOptionLayoutStyle,
131342
- onClick: () => booking.actions.selectAppointmentPackage(
131343
- appointmentPackage.customerPassId
131344
- ),
131345
- "aria-pressed": isSelected,
131346
- children: /* @__PURE__ */ jsx(
131347
- PaymentOptionContent,
131693
+ /* @__PURE__ */ jsxs(
131694
+ "div",
131695
+ {
131696
+ className: "rb-reg-stack rb-reg-stack--sm",
131697
+ role: "list",
131698
+ "aria-label": "Payment options",
131699
+ children: [
131700
+ packageOptions.map((appointmentPackage) => {
131701
+ const isSelected = booking.payment.selectedAppointmentPackageId === appointmentPackage.customerPassId;
131702
+ return /* @__PURE__ */ jsxs(
131703
+ "button",
131348
131704
  {
131349
- id: appointmentPackage.customerPassId,
131350
- title: appointmentPackage.passName,
131351
- description: "Use 1 package credit",
131352
- summaryRows: [{
131353
- label: "Balance",
131354
- value: `${appointmentPackage.creditsRemaining} of ${appointmentPackage.creditsTotal} credits remaining`
131355
- }]
131356
- }
131357
- )
131358
- },
131359
- appointmentPackage.customerPassId
131360
- );
131361
- }),
131362
- viewModel.options.map((option) => {
131363
- const isSelected = !booking.payment.selectedAppointmentPackageId && (booking.payment.selectedCollectionOptionKind === option.kind || viewModel.mode === "single_option");
131364
- if (viewModel.mode === "single_option" && !hasPackageOptions) {
131365
- return /* @__PURE__ */ jsx(
131366
- "div",
131367
- {
131368
- className: "ab-card",
131369
- style: paymentOptionLayoutStyle,
131370
- children: /* @__PURE__ */ jsx(
131705
+ type: "button",
131706
+ className: optionCardClassName(isSelected),
131707
+ onClick: () => booking.actions.selectAppointmentPackage(
131708
+ appointmentPackage.customerPassId
131709
+ ),
131710
+ "aria-pressed": isSelected,
131711
+ children: [
131712
+ /* @__PURE__ */ jsx(
131713
+ PaymentOptionContent,
131714
+ {
131715
+ id: appointmentPackage.customerPassId,
131716
+ title: appointmentPackage.passName,
131717
+ description: "Use 1 package credit",
131718
+ summaryRows: [{
131719
+ label: "Balance",
131720
+ value: `${appointmentPackage.creditsRemaining} of ${appointmentPackage.creditsTotal} credits remaining`
131721
+ }]
131722
+ }
131723
+ ),
131724
+ isSelected ? /* @__PURE__ */ jsx(SelectedCheck, {}) : null
131725
+ ]
131726
+ },
131727
+ appointmentPackage.customerPassId
131728
+ );
131729
+ }),
131730
+ viewModel.options.map((option) => {
131731
+ const isSelected = !booking.payment.selectedAppointmentPackageId && (booking.payment.selectedCollectionOptionKind === option.kind || viewModel.mode === "single_option");
131732
+ if (viewModel.mode === "single_option" && !hasPackageOptions) {
131733
+ return /* @__PURE__ */ jsx("div", { className: "rb-reg-summary", children: /* @__PURE__ */ jsx(
131371
131734
  PaymentOptionContent,
131372
131735
  {
131373
131736
  id: option.kind,
@@ -131376,37 +131739,35 @@ function HeadlessBookingPaymentSelectionStep({
131376
131739
  summaryRows: option.summaryRows,
131377
131740
  helperText: option.helperText
131378
131741
  }
131379
- )
131380
- },
131381
- option.kind
131382
- );
131383
- }
131384
- return /* @__PURE__ */ jsx(
131385
- "button",
131386
- {
131387
- type: "button",
131388
- className: themeButtonClassName({
131389
- variant: isSelected ? "primary" : "outline",
131390
- size: "md"
131391
- }),
131392
- style: paymentOptionLayoutStyle,
131393
- onClick: () => booking.actions.selectPaymentOption(option.kind),
131394
- "aria-pressed": isSelected,
131395
- children: /* @__PURE__ */ jsx(
131396
- PaymentOptionContent,
131742
+ ) }, option.kind);
131743
+ }
131744
+ return /* @__PURE__ */ jsxs(
131745
+ "button",
131397
131746
  {
131398
- id: option.kind,
131399
- title: option.title,
131400
- description: option.description,
131401
- summaryRows: option.summaryRows,
131402
- helperText: option.helperText
131403
- }
131404
- )
131405
- },
131406
- option.kind
131407
- );
131408
- })
131409
- ] })
131747
+ type: "button",
131748
+ className: optionCardClassName(isSelected),
131749
+ onClick: () => booking.actions.selectPaymentOption(option.kind),
131750
+ "aria-pressed": isSelected,
131751
+ children: [
131752
+ /* @__PURE__ */ jsx(
131753
+ PaymentOptionContent,
131754
+ {
131755
+ id: option.kind,
131756
+ title: option.title,
131757
+ description: option.description,
131758
+ summaryRows: option.summaryRows,
131759
+ helperText: option.helperText
131760
+ }
131761
+ ),
131762
+ isSelected ? /* @__PURE__ */ jsx(SelectedCheck, {}) : null
131763
+ ]
131764
+ },
131765
+ option.kind
131766
+ );
131767
+ })
131768
+ ]
131769
+ }
131770
+ )
131410
131771
  ] });
131411
131772
  }
131412
131773
  function PaymentOptionContent({
@@ -131416,15 +131777,15 @@ function PaymentOptionContent({
131416
131777
  summaryRows,
131417
131778
  title
131418
131779
  }) {
131419
- return /* @__PURE__ */ jsxs(Fragment, { children: [
131420
- /* @__PURE__ */ jsx("span", { children: title }),
131421
- /* @__PURE__ */ jsx("span", { className: "ab-text ab-text--muted", children: description }),
131422
- /* @__PURE__ */ jsx("div", { className: "ab-stack", style: summaryStackStyle, children: summaryRows.map((row) => /* @__PURE__ */ jsxs("span", { className: "ab-text ab-text--muted", children: [
131780
+ return /* @__PURE__ */ jsxs("div", { className: "rb-flex-1", children: [
131781
+ /* @__PURE__ */ jsx("div", { className: "ab-subtitle", children: title }),
131782
+ /* @__PURE__ */ jsx("div", { className: "ab-text rb-on-surface--muted", children: description }),
131783
+ /* @__PURE__ */ jsx("div", { className: "ab-option-rows", children: summaryRows.map((row) => /* @__PURE__ */ jsxs("span", { className: "ab-text rb-on-surface--muted", children: [
131423
131784
  row.label,
131424
131785
  ": ",
131425
131786
  row.value
131426
131787
  ] }, `${id}-${row.label}`)) }),
131427
- helperText ? /* @__PURE__ */ jsx("span", { className: "ab-text ab-text--muted", children: helperText }) : null
131788
+ helperText ? /* @__PURE__ */ jsx("div", { className: "ab-text rb-on-surface--muted", children: helperText }) : null
131428
131789
  ] });
131429
131790
  }
131430
131791
  function DefaultDynamicFields({
@@ -131696,7 +132057,7 @@ function DefaultBookingDiscount({
131696
132057
  }
131697
132058
  }
131698
132059
  ) : null,
131699
- booking.discount.autoAppliedDiscount && booking.discount.code.trim().length === 0 ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "ab-alert ab-alert--info rb-mt-4", role: "status", children: /* @__PURE__ */ jsxs("p", { className: "ab-text", children: [
132060
+ booking.discount.autoAppliedDiscount && booking.discount.code.trim().length === 0 ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "alert alert-info rb-mt-4", role: "status", children: /* @__PURE__ */ jsxs("p", { className: "ab-text", children: [
131700
132061
  "Discount available: ",
131701
132062
  booking.discount.autoAppliedDiscount.publicLabel,
131702
132063
  " ",
@@ -131708,7 +132069,7 @@ function DefaultBookingFeedback({
131708
132069
  booking
131709
132070
  }) {
131710
132071
  if (booking.feedback.kind !== "error") return null;
131711
- return /* @__PURE__ */ jsxs(FeedbackMessage, { tone: "error", className: "ab-alert ab-alert--error", role: "alert", children: [
132072
+ return /* @__PURE__ */ jsxs(FeedbackMessage, { tone: "error", className: "alert alert-error rb-mt-4", role: "alert", children: [
131712
132073
  /* @__PURE__ */ jsx("p", { className: "ab-text", children: booking.feedback.message }),
131713
132074
  /* @__PURE__ */ jsx(
131714
132075
  "button",
@@ -131734,43 +132095,26 @@ function DefaultBookingAltcha({
131734
132095
  ) });
131735
132096
  }
131736
132097
  function DefaultBookingErrorSummary({
131737
- errors
132098
+ errors,
132099
+ id
131738
132100
  }) {
131739
132101
  if (!hasBookingValidationErrors(errors)) return null;
131740
- return /* @__PURE__ */ jsxs(FeedbackMessage, { tone: "error", className: "rb-mt-6 alert alert-error", role: "alert", children: [
131741
- errors.formError ? /* @__PURE__ */ jsx("p", { className: "rb-caption", children: /* @__PURE__ */ jsx("strong", { children: errors.formError }) }) : null,
131742
- Object.entries(errors.fieldErrors).map(([key, message2]) => /* @__PURE__ */ jsx("p", { className: "rb-caption", children: message2 }, key))
131743
- ] });
131744
- }
131745
- function SelectedCheck() {
131746
- return /* @__PURE__ */ jsx("div", { className: "ab-check", children: /* @__PURE__ */ jsx(
131747
- "svg",
132102
+ return /* @__PURE__ */ jsxs(
132103
+ FeedbackMessage,
131748
132104
  {
131749
- fill: "none",
131750
- strokeLinecap: "round",
131751
- strokeLinejoin: "round",
131752
- strokeWidth: "2",
131753
- viewBox: "0 0 24 24",
131754
- stroke: "currentColor",
131755
- children: /* @__PURE__ */ jsx("path", { d: "M5 13l4 4L19 7" })
132105
+ tone: "error",
132106
+ className: "rb-mt-6 alert alert-error",
132107
+ id,
132108
+ role: "alert",
132109
+ children: [
132110
+ errors.formError ? /* @__PURE__ */ jsx("p", { className: "rb-caption", children: /* @__PURE__ */ jsx("strong", { children: errors.formError }) }) : null,
132111
+ Object.entries(errors.fieldErrors).map(([key, message2]) => /* @__PURE__ */ jsx("p", { className: "rb-caption", children: message2 }, key))
132112
+ ]
131756
132113
  }
131757
- ) });
132114
+ );
131758
132115
  }
131759
- function collapseHeadlessSlotsForDisplay(input) {
131760
- const seenStartTimes = /* @__PURE__ */ new Set();
131761
- const visibleSlots = [];
131762
- for (const slot of input.slots) {
131763
- if (!input.hasSelectedResource) {
131764
- if (seenStartTimes.has(slot.startAt)) continue;
131765
- seenStartTimes.add(slot.startAt);
131766
- }
131767
- visibleSlots.push({
131768
- startAt: slot.startAt,
131769
- endAt: slot.endAt,
131770
- resourceId: unsafeAsAppointmentResourceId(slot.resourceId)
131771
- });
131772
- }
131773
- return visibleSlots;
132116
+ function SelectedCheck() {
132117
+ return /* @__PURE__ */ jsx("div", { className: "rb-option-check", children: /* @__PURE__ */ jsx(CheckIcon2, {}) });
131774
132118
  }
131775
132119
 
131776
132120
  // ../blocks/src/system/runtime/shared/utils/checkoutUrls.ts
@@ -131913,24 +132257,6 @@ function getStepNumber2(step, wizardSteps) {
131913
132257
  const index2 = wizardSteps.indexOf(step);
131914
132258
  return index2 >= 0 ? index2 + 1 : 1;
131915
132259
  }
131916
- function CheckIcon2({ className, strokeWidth = 2 }) {
131917
- return /* @__PURE__ */ jsx(
131918
- "svg",
131919
- {
131920
- fill: "none",
131921
- strokeLinecap: "round",
131922
- strokeLinejoin: "round",
131923
- strokeWidth,
131924
- viewBox: "0 0 24 24",
131925
- stroke: "currentColor",
131926
- className,
131927
- width: "1em",
131928
- height: "1em",
131929
- "aria-hidden": "true",
131930
- children: /* @__PURE__ */ jsx("path", { d: "M5 13l4 4L19 7" })
131931
- }
131932
- );
131933
- }
131934
132260
  function ClockIcon2({ className, strokeWidth = 2 }) {
131935
132261
  return /* @__PURE__ */ jsx(
131936
132262
  "svg",
@@ -131972,7 +132298,7 @@ var alignmentClasses = {
131972
132298
  end: "rb-justify-end",
131973
132299
  between: "rb-justify-between"
131974
132300
  };
131975
- function joinClasses7(...parts) {
132301
+ function joinClasses8(...parts) {
131976
132302
  return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
131977
132303
  }
131978
132304
  function ActionRow({
@@ -131983,7 +132309,7 @@ function ActionRow({
131983
132309
  return /* @__PURE__ */ jsx(
131984
132310
  "div",
131985
132311
  {
131986
- className: joinClasses7("rb-flex rb-flex-wrap rb-items-center rb-gap-2", alignmentClasses[align], className),
132312
+ className: joinClasses8("rb-flex rb-flex-wrap rb-items-center rb-gap-2", alignmentClasses[align], className),
131987
132313
  "data-action-row": true,
131988
132314
  children
131989
132315
  }
@@ -131999,9 +132325,6 @@ function LoggedInAsUser({ email, onLogout, classPrefix }) {
131999
132325
  ] })
132000
132326
  ] });
132001
132327
  }
132002
- function StateIcon({ variant, children }) {
132003
- return /* @__PURE__ */ jsx("div", { className: `rb-state-icon rb-state-icon--${variant}`, "aria-hidden": "true", children });
132004
- }
132005
132328
  function MembershipHero({
132006
132329
  membershipName,
132007
132330
  classPrefix,
@@ -132199,89 +132522,51 @@ function TabBarFragment({
132199
132522
  }
132200
132523
  );
132201
132524
  }
132202
- function joinClasses8(...parts) {
132203
- return parts.filter((part) => typeof part === "string" && part.length > 0).join(" ");
132204
- }
132205
- function TerminalPanel({
132206
- tone,
132207
- title,
132208
- titleAs: Title = "h3",
132209
- body,
132210
- secondaryBody,
132211
- icon: icon2,
132212
- actions,
132213
- className,
132214
- titleClassName,
132215
- bodyClassName,
132216
- secondaryBodyClassName,
132217
- iconClassName,
132218
- actionsClassName,
132219
- role,
132220
- live
132221
- }) {
132222
- const resolvedRole = role ?? (tone === "error" ? "alert" : "status");
132223
- const resolvedLive = live ?? (resolvedRole === "alert" ? "assertive" : "polite");
132525
+ function SelectableOptionCard(props2) {
132526
+ const {
132527
+ baseClassName,
132528
+ selectedClassName,
132529
+ disabledClassName,
132530
+ iconClassName,
132531
+ labelClassName,
132532
+ detailClassName,
132533
+ icon: icon2,
132534
+ label,
132535
+ detail,
132536
+ selected,
132537
+ disabled,
132538
+ tooltip,
132539
+ extraClassNames = [],
132540
+ onClick,
132541
+ renderCheck,
132542
+ renderDisabledTooltip
132543
+ } = props2;
132544
+ const isSelected = selected && !disabled;
132545
+ const className = [
132546
+ baseClassName,
132547
+ isSelected && selectedClassName,
132548
+ disabled && disabledClassName,
132549
+ ...extraClassNames
132550
+ ].filter(Boolean).join(" ");
132551
+ const showNativeTitle = Boolean(tooltip) && !(disabled && renderDisabledTooltip);
132224
132552
  return /* @__PURE__ */ jsxs(
132225
- "div",
132553
+ "button",
132226
132554
  {
132555
+ type: "button",
132227
132556
  className,
132228
- "data-terminal-panel": true,
132229
- "data-terminal-tone": tone,
132230
- role: resolvedRole,
132231
- "aria-live": resolvedLive === "off" ? void 0 : resolvedLive,
132557
+ onClick: disabled ? void 0 : onClick,
132558
+ title: showNativeTitle ? tooltip : void 0,
132559
+ "aria-disabled": disabled || void 0,
132232
132560
  children: [
132233
- icon2 ? /* @__PURE__ */ jsx("div", { className: joinClasses8(iconClassName), "data-terminal-icon": true, children: icon2 }) : null,
132234
- /* @__PURE__ */ jsx(Title, { className: joinClasses8(titleClassName), "data-terminal-title": true, children: title }),
132235
- body ? /* @__PURE__ */ jsx("div", { className: joinClasses8(bodyClassName), "data-terminal-body": true, children: body }) : null,
132236
- actions ? /* @__PURE__ */ jsx("div", { className: joinClasses8(actionsClassName), "data-terminal-actions": true, children: actions }) : null,
132237
- secondaryBody ? /* @__PURE__ */ jsx("div", { className: joinClasses8(secondaryBodyClassName), "data-terminal-secondary-body": true, children: secondaryBody }) : null
132561
+ /* @__PURE__ */ jsx("div", { className: iconClassName, children: icon2 }),
132562
+ /* @__PURE__ */ jsx("div", { className: labelClassName, children: label }),
132563
+ /* @__PURE__ */ jsx("div", { className: detailClassName, children: detail }),
132564
+ isSelected && renderCheck?.(),
132565
+ disabled && tooltip && renderDisabledTooltip?.(tooltip)
132238
132566
  ]
132239
132567
  }
132240
132568
  );
132241
132569
  }
132242
- function StepIndicator({
132243
- currentStep,
132244
- totalSteps,
132245
- stepLabels,
132246
- classPrefix
132247
- }) {
132248
- return /* @__PURE__ */ jsx("nav", { "aria-label": "Registration progress", className: `${classPrefix}-steps-nav`, children: /* @__PURE__ */ jsx("ol", { className: `${classPrefix}-steps`, children: Array.from({ length: totalSteps }, (_2, i2) => {
132249
- const stepNum = i2 + 1;
132250
- const isActive2 = stepNum === currentStep;
132251
- const isComplete = stepNum < currentStep;
132252
- return /* @__PURE__ */ jsxs(
132253
- "li",
132254
- {
132255
- className: `${classPrefix}-step`,
132256
- "aria-current": isActive2 ? "step" : void 0,
132257
- children: [
132258
- /* @__PURE__ */ jsx(
132259
- "div",
132260
- {
132261
- className: `${classPrefix}-step-circle${isActive2 ? ` ${classPrefix}-step-circle--active` : ""}${isComplete ? ` ${classPrefix}-step-circle--completed` : ""}`,
132262
- children: isComplete ? /* @__PURE__ */ jsx(CheckIcon2, { className: `${classPrefix}-step-check`, strokeWidth: 3 }) : stepNum
132263
- }
132264
- ),
132265
- stepLabels?.[i2] && /* @__PURE__ */ jsx(
132266
- "span",
132267
- {
132268
- className: `${classPrefix}-step-label${isActive2 ? ` ${classPrefix}-step-label--active` : ""}`,
132269
- children: stepLabels[i2]
132270
- }
132271
- ),
132272
- stepNum < totalSteps && /* @__PURE__ */ jsx(
132273
- "div",
132274
- {
132275
- className: `${classPrefix}-step-connector${isComplete ? ` ${classPrefix}-step-connector--completed` : ""}`,
132276
- "aria-hidden": "true"
132277
- }
132278
- )
132279
- ]
132280
- },
132281
- i2
132282
- );
132283
- }) }) });
132284
- }
132285
132570
  var PORTAL_REBOOK_QUERY_PARAM = "rebook";
132286
132571
  var PORTAL_REBOOK_QUERY_VALUE = "1";
132287
132572
  var REBOOK_COMPLETION_MODE_VERIFIED_CHECKOUT = "verified_checkout";
@@ -132306,6 +132591,14 @@ function appendRebookFlag(url, enabled) {
132306
132591
  );
132307
132592
  return nextUrl.toString();
132308
132593
  }
132594
+ function BookingSurface({
132595
+ id,
132596
+ className,
132597
+ children
132598
+ }) {
132599
+ const classes = ["rb-reg-surface", className ?? ""].join(" ").trim();
132600
+ return /* @__PURE__ */ jsx("div", { id, className: classes, children });
132601
+ }
132309
132602
  var BookingFormClient = ({
132310
132603
  siteId: siteIdProp,
132311
132604
  render
@@ -132403,7 +132696,7 @@ var BookingFormClient = ({
132403
132696
  FeedbackMessage,
132404
132697
  {
132405
132698
  tone: "error",
132406
- className: `ab-alert ab-alert--error ${render.display.className ?? ""}`.trim(),
132699
+ className: `alert alert-error ${render.display.className ?? ""}`.trim(),
132407
132700
  role: "alert",
132408
132701
  children: /* @__PURE__ */ jsx("p", { className: "ab-text", children: render.display.message ?? "Booking form not found. Please check your configuration." })
132409
132702
  }
@@ -132425,28 +132718,20 @@ var BookingFormClient = ({
132425
132718
  }
132426
132719
  };
132427
132720
  if (viewState.kind === "success") {
132428
- return /* @__PURE__ */ jsx(
132721
+ return /* @__PURE__ */ jsx(BookingSurface, { id: bookingAnchorId, className: render.display.className, children: /* @__PURE__ */ jsx(
132429
132722
  SuccessMessage,
132430
132723
  {
132431
132724
  message: getBookingSuccessMessage(render.display.successMessage),
132432
- resourceName: viewState.resourceName,
132433
- className: render.display.className ?? void 0
132725
+ resourceName: viewState.resourceName
132434
132726
  }
132435
- );
132727
+ ) });
132436
132728
  }
132437
132729
  if (viewState.kind === "verifying") {
132438
- return /* @__PURE__ */ jsx(
132439
- "div",
132440
- {
132441
- id: bookingAnchorId,
132442
- className: render.display.className ?? void 0,
132443
- children: /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "ab-alert ab-alert--info", role: "status", children: /* @__PURE__ */ jsx("p", { className: "ab-text", children: viewState.message }) })
132444
- }
132445
- );
132730
+ return /* @__PURE__ */ jsx(BookingSurface, { id: bookingAnchorId, className: render.display.className, children: /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "alert alert-info", role: "status", children: /* @__PURE__ */ jsx("p", { className: "ab-text", children: viewState.message }) }) });
132446
132731
  }
132447
- return /* @__PURE__ */ jsxs("div", { id: bookingAnchorId, className: render.display.className ?? void 0, children: [
132448
- render.hydration.noticeMessage ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "ab-alert ab-alert--info rb-mb-4", role: "status", children: /* @__PURE__ */ jsx("p", { className: "ab-text", children: render.hydration.noticeMessage }) }) : null,
132449
- viewState.kind === "error" ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "ab-alert ab-alert--error", role: "alert", children: /* @__PURE__ */ jsx("p", { className: "ab-text", children: viewState.message }) }) : null,
132732
+ return /* @__PURE__ */ jsxs(BookingSurface, { id: bookingAnchorId, className: render.display.className, children: [
132733
+ render.hydration.noticeMessage ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "info", className: "alert alert-info rb-mb-4", role: "status", children: /* @__PURE__ */ jsx("p", { className: "ab-text", children: render.hydration.noticeMessage }) }) : null,
132734
+ viewState.kind === "error" ? /* @__PURE__ */ jsx(FeedbackMessage, { tone: "error", className: "alert alert-error rb-mb-4", role: "alert", children: /* @__PURE__ */ jsx("p", { className: "ab-text", children: viewState.message }) }) : null,
132450
132735
  /* @__PURE__ */ jsx(HeadlessBookingDefaultForm, { booking, onSubmit: handleComplete })
132451
132736
  ] });
132452
132737
  };
@@ -132455,7 +132740,7 @@ function buildBookingFormNodeClientProps(props2) {
132455
132740
  return buildBookingFormInteractiveIslandProps(props2);
132456
132741
  }
132457
132742
  function StepIndicator2(props2) {
132458
- return /* @__PURE__ */ jsx(StepIndicator, { ...props2, classPrefix: "er" });
132743
+ return /* @__PURE__ */ jsx(StepIndicator, { ...props2, classPrefix: "er", emitSharedClasses: true });
132459
132744
  }
132460
132745
 
132461
132746
  // ../blocks/src/system/runtime/nodes/event-registration/registrationStateMachine.ts
@@ -133298,7 +133583,7 @@ var EventSelectionStep = ({
133298
133583
  }) => {
133299
133584
  const selectionMode = getEventSelectionMode(events2);
133300
133585
  const isDateSelection2 = selectionMode === "date";
133301
- return /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
133586
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
133302
133587
  /* @__PURE__ */ jsx("h3", { className: "er-title", children: isDateSelection2 ? "Choose a date" : "Select an event" }),
133303
133588
  /* @__PURE__ */ jsx("div", { className: "er-event-grid", children: events2.map((event) => {
133304
133589
  const isSelected = selectedEvent?.publicEventId === event.publicEventId;
@@ -133355,7 +133640,7 @@ function getEventAttendanceModeLabel(mode) {
133355
133640
  function TicketCounter(props2) {
133356
133641
  const { ticketsCount, maxAllowed, label, onTicketsChange } = props2;
133357
133642
  const minAllowed = props2.minAllowed ?? 1;
133358
- return /* @__PURE__ */ jsxs("div", { className: "er-row er-counter", children: [
133643
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-row er-row er-counter", children: [
133359
133644
  /* @__PURE__ */ jsx(
133360
133645
  "button",
133361
133646
  {
@@ -133580,7 +133865,7 @@ var TicketSelectionStep = ({
133580
133865
  });
133581
133866
  const eventAvailabilityLabel = !canJoinWaitlist && event?.availableSpots != null ? `${event.availableSpots} spots available` : null;
133582
133867
  if (deliveryMode === "hybrid" && !selectedAttendanceMode) {
133583
- return /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
133868
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
133584
133869
  /* @__PURE__ */ jsx("h3", { className: "er-title", children: "How will you attend?" }),
133585
133870
  /* @__PURE__ */ jsx(
133586
133871
  AttendanceModeTiles,
@@ -133594,12 +133879,12 @@ var TicketSelectionStep = ({
133594
133879
  ] });
133595
133880
  }
133596
133881
  if (isSoldOut && !canJoinWaitlist) {
133597
- return /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
133882
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
133598
133883
  /* @__PURE__ */ jsx("h3", { className: "er-title", children: "Sold Out" }),
133599
133884
  /* @__PURE__ */ jsx("p", { className: "er-text er-text--muted", children: "Sorry you missed out! This event is fully booked." })
133600
133885
  ] });
133601
133886
  }
133602
- return /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
133887
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
133603
133888
  deliveryMode === "hybrid" ? /* @__PURE__ */ jsxs(Fragment, { children: [
133604
133889
  /* @__PURE__ */ jsx("h3", { className: "er-title", children: "How will you attend?" }),
133605
133890
  /* @__PURE__ */ jsx(
@@ -133793,7 +134078,7 @@ var AttendeeDetailsStep = ({
133793
134078
  messageId: emailErrorId
133794
134079
  });
133795
134080
  const showGuestSection = requireGuestDetails && ticketsCount > 1 && onGuestsChange;
133796
- return /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
134081
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
133797
134082
  /* @__PURE__ */ jsx("h3", { className: "er-title", children: "Your Information" }),
133798
134083
  /* @__PURE__ */ jsxs("div", { children: [
133799
134084
  /* @__PURE__ */ jsxs("div", { className: "er-field", children: [
@@ -133887,7 +134172,7 @@ var AttendeeDetailsStep = ({
133887
134172
  var MembershipHero2 = ({
133888
134173
  membershipName
133889
134174
  }) => {
133890
- return /* @__PURE__ */ jsx("div", { className: "er-stack", children: /* @__PURE__ */ jsxs("div", { className: "er-booking-mode-hero", children: [
134175
+ return /* @__PURE__ */ jsx("div", { className: "rb-reg-stack er-stack", children: /* @__PURE__ */ jsxs("div", { className: "er-booking-mode-hero", children: [
133891
134176
  /* @__PURE__ */ jsx("div", { className: "er-booking-mode-hero-icon", children: /* @__PURE__ */ jsx(Sparkles, { size: 20, fill: "currentColor", "aria-hidden": "true" }) }),
133892
134177
  /* @__PURE__ */ jsxs("div", { className: "er-booking-mode-hero-content", children: [
133893
134178
  /* @__PURE__ */ jsxs("h3", { className: "er-booking-mode-hero-title", children: [
@@ -133898,51 +134183,6 @@ var MembershipHero2 = ({
133898
134183
  ] })
133899
134184
  ] }) });
133900
134185
  };
133901
- function SelectableOptionCard(props2) {
133902
- const {
133903
- baseClassName,
133904
- selectedClassName,
133905
- disabledClassName,
133906
- iconClassName,
133907
- labelClassName,
133908
- detailClassName,
133909
- icon: icon2,
133910
- label,
133911
- detail,
133912
- selected,
133913
- disabled,
133914
- tooltip,
133915
- extraClassNames = [],
133916
- onClick,
133917
- renderCheck,
133918
- renderDisabledTooltip
133919
- } = props2;
133920
- const isSelected = selected && !disabled;
133921
- const className = [
133922
- baseClassName,
133923
- isSelected && selectedClassName,
133924
- disabled && disabledClassName,
133925
- ...extraClassNames
133926
- ].filter(Boolean).join(" ");
133927
- const showNativeTitle = Boolean(tooltip) && !(disabled && renderDisabledTooltip);
133928
- return /* @__PURE__ */ jsxs(
133929
- "button",
133930
- {
133931
- type: "button",
133932
- className,
133933
- onClick: disabled ? void 0 : onClick,
133934
- title: showNativeTitle ? tooltip : void 0,
133935
- "aria-disabled": disabled || void 0,
133936
- children: [
133937
- /* @__PURE__ */ jsx("div", { className: iconClassName, children: icon2 }),
133938
- /* @__PURE__ */ jsx("div", { className: labelClassName, children: label }),
133939
- /* @__PURE__ */ jsx("div", { className: detailClassName, children: detail }),
133940
- isSelected && renderCheck?.(),
133941
- disabled && tooltip && renderDisabledTooltip?.(tooltip)
133942
- ]
133943
- }
133944
- );
133945
- }
133946
134186
 
133947
134187
  // ../blocks/src/system/runtime/nodes/event-registration/eventPaymentOptions.ts
133948
134188
  var DEFAULT_EVENT_DIRECT_PAYMENT_OPTION = {
@@ -134024,7 +134264,7 @@ function resolveEventRegistrationDirectPaymentSelection(input) {
134024
134264
  };
134025
134265
  }
134026
134266
  function PaymentCheckIcon() {
134027
- return /* @__PURE__ */ jsx("div", { className: "er-check", children: /* @__PURE__ */ jsx(CheckIcon2, {}) });
134267
+ return /* @__PURE__ */ jsx("div", { className: "rb-option-check er-check", children: /* @__PURE__ */ jsx(CheckIcon2, {}) });
134028
134268
  }
134029
134269
  function PaymentTile({
134030
134270
  icon: icon2,
@@ -134161,25 +134401,25 @@ var PaymentSelectionStep = ({
134161
134401
  getButtonText
134162
134402
  ]);
134163
134403
  if (eligibilityLoading) {
134164
- return /* @__PURE__ */ jsx("div", { className: "er-stack", children: /* @__PURE__ */ jsxs("div", { className: "er-center", children: [
134404
+ return /* @__PURE__ */ jsx("div", { className: "rb-reg-stack er-stack", children: /* @__PURE__ */ jsxs("div", { className: "er-center", children: [
134165
134405
  /* @__PURE__ */ jsx(SpinnerNode, { size: "lg", srLabel: "Checking payment options" }),
134166
134406
  /* @__PURE__ */ jsx("p", { className: "er-text--muted", children: "Checking payment options..." })
134167
134407
  ] }) });
134168
134408
  }
134169
134409
  if (eligibilityError) {
134170
- return /* @__PURE__ */ jsx("div", { className: "er-stack", children: /* @__PURE__ */ jsx("div", { className: "er-center", children: /* @__PURE__ */ jsx("p", { className: "er-text er-text--error", children: eligibilityError }) }) });
134410
+ return /* @__PURE__ */ jsx("div", { className: "rb-reg-stack er-stack", children: /* @__PURE__ */ jsx("div", { className: "er-center", children: /* @__PURE__ */ jsx("p", { className: "er-text er-text--error", children: eligibilityError }) }) });
134171
134411
  }
134172
134412
  if (!eligibility) {
134173
134413
  const missing = [];
134174
134414
  if (!occurrenceId) missing.push("occurrenceId");
134175
134415
  if (!email) missing.push("email");
134176
- return /* @__PURE__ */ jsx("div", { className: "er-stack", children: /* @__PURE__ */ jsx("div", { className: "er-center", children: /* @__PURE__ */ jsxs("p", { className: "er-text er-text--error", children: [
134416
+ return /* @__PURE__ */ jsx("div", { className: "rb-reg-stack er-stack", children: /* @__PURE__ */ jsx("div", { className: "er-center", children: /* @__PURE__ */ jsxs("p", { className: "er-text er-text--error", children: [
134177
134417
  "Unable to determine payment options",
134178
134418
  missing.length > 0 && ` (missing: ${missing.join(", ")})`
134179
134419
  ] }) }) });
134180
134420
  }
134181
134421
  if (eligibility.isFree) {
134182
- return /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
134422
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
134183
134423
  /* @__PURE__ */ jsx("h3", { className: "er-title", children: "Payment" }),
134184
134424
  /* @__PURE__ */ jsxs("div", { className: "er-payment-summary", children: [
134185
134425
  /* @__PURE__ */ jsx("p", { className: "er-text er-text--success", children: "This event is free!" }),
@@ -134193,13 +134433,13 @@ var PaymentSelectionStep = ({
134193
134433
  }
134194
134434
  if (!eligibility.eligible) {
134195
134435
  if (eligibility.isFull && !eligibility.canJoinWaitlist) {
134196
- return /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
134436
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
134197
134437
  /* @__PURE__ */ jsx("h3", { className: "er-title", children: "Sold Out" }),
134198
134438
  /* @__PURE__ */ jsx("div", { className: "er-center", children: /* @__PURE__ */ jsx("p", { className: "er-text er-text--muted", children: "This event is fully booked and there is no waitlist available for this booking." }) })
134199
134439
  ] });
134200
134440
  }
134201
134441
  const shouldPromptLogin = !isAuthenticated && (eligibility.requiresAuthForPasses || eligibility.requiresAuthForMemberships);
134202
- return /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
134442
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
134203
134443
  /* @__PURE__ */ jsx("h3", { className: "er-title", children: shouldPromptLogin ? "Log In Required" : "Payment Required" }),
134204
134444
  /* @__PURE__ */ jsx("div", { className: "er-center", children: shouldPromptLogin ? /* @__PURE__ */ jsxs(Fragment, { children: [
134205
134445
  /* @__PURE__ */ jsx("p", { className: "er-text er-text--muted", children: "Have a pass or membership? Log in to use it." }),
@@ -134225,7 +134465,7 @@ var PaymentSelectionStep = ({
134225
134465
  ] });
134226
134466
  }
134227
134467
  const isMultiTicket = areEntitlementsDisabledForTicketCount(ticketsCount);
134228
- return /* @__PURE__ */ jsxs("div", { className: "er-stack", children: [
134468
+ return /* @__PURE__ */ jsxs("div", { className: "rb-reg-stack er-stack", children: [
134229
134469
  /* @__PURE__ */ jsx("h3", { className: "er-title", children: "Payment Options" }),
134230
134470
  /* @__PURE__ */ jsxs("div", { className: "er-payment-tiles", children: [
134231
134471
  canShowDirectPaymentOptions && /* @__PURE__ */ jsx(Fragment, { children: directPaymentOptions.map((option) => /* @__PURE__ */ jsx(
@@ -134600,7 +134840,7 @@ function EventRegistrationWizardActions(props2) {
134600
134840
  const ticketTypeSelectionBlocked = wizard.ticketTypeSelectionRequired && !wizard.hasValidTicketSelection;
134601
134841
  const isContinueDisabled = isWaitingForEligibility || isCheckingExistingRegistration || hasExistingRegistration || isSoldOutWithoutWaitlist || ticketTypeSelectionBlocked;
134602
134842
  const continueLabel = isCheckingExistingRegistration ? "Checking registration..." : hasExistingRegistration ? "Already registered" : isSoldOutWithoutWaitlist ? "Sold out" : ticketTypeSelectionBlocked ? "Choose a ticket" : "Continue";
134603
- return /* @__PURE__ */ jsxs("div", { className: "er-actions", children: [
134843
+ return /* @__PURE__ */ jsxs("div", { className: "rb-wizard-actions er-actions", children: [
134604
134844
  !wizard.hasPreSelectedContext && /* @__PURE__ */ jsx("button", { type: "button", onClick: () => wizard.setStep("select-event"), className: "er-back-btn", children: "\u2190 Back" }),
134605
134845
  /* @__PURE__ */ jsx(
134606
134846
  "button",
@@ -134622,7 +134862,7 @@ function EventRegistrationWizardActions(props2) {
134622
134862
  const isSoldOut = !hasWaitlistClaim && wizard.eligibility?.isFull === true && wizard.eligibility.canJoinWaitlist !== true;
134623
134863
  const isContinueDisabled = isCheckingEligibility || isSoldOut;
134624
134864
  const continueLabel = isCheckingEligibility ? "Checking availability..." : getDetailsButtonText();
134625
- return /* @__PURE__ */ jsxs("div", { className: "er-actions", children: [
134865
+ return /* @__PURE__ */ jsxs("div", { className: "rb-wizard-actions er-actions", children: [
134626
134866
  /* @__PURE__ */ jsx("button", { type: "button", onClick: () => wizard.setStep(prevStepForDetails), className: "er-back-btn", children: "\u2190 Back" }),
134627
134867
  /* @__PURE__ */ jsx(
134628
134868
  "button",
@@ -134641,7 +134881,7 @@ function EventRegistrationWizardActions(props2) {
134641
134881
  const handlePaymentContinue = () => {
134642
134882
  void wizard.handlePaymentSelect();
134643
134883
  };
134644
- return /* @__PURE__ */ jsxs("div", { className: "er-actions", children: [
134884
+ return /* @__PURE__ */ jsxs("div", { className: "rb-wizard-actions er-actions", children: [
134645
134885
  /* @__PURE__ */ jsx("button", { type: "button", onClick: () => wizard.setStep("enter-details"), className: "er-back-btn", children: "\u2190 Back" }),
134646
134886
  status === "ready" && /* @__PURE__ */ jsx(
134647
134887
  "button",
@@ -136136,7 +136376,7 @@ function EventRegistrationWizard(props2) {
136136
136376
  description: wizard.waitlistClaim.loginMessage ?? "Log in to continue with your waitlist claim."
136137
136377
  } : EVENT_PORTAL_AUTH_COPY.membership;
136138
136378
  const showPortalAuthPrompt = waitlistClaimRequiresPortalLogin || wizard.step === "select-tickets" && wizard.portalAuthState !== "authenticated" && wizard.portalAuthState !== "checking" && hasPassOrMembershipProducts && summaryEventPricingType !== "free";
136139
- const renderRegistrationSurface = (variant) => /* @__PURE__ */ jsxs("div", { className: `er-container${variant === "overlay" ? " er-container--overlay" : ""}`, children: [
136379
+ const renderRegistrationSurface = (variant) => /* @__PURE__ */ jsxs("div", { className: `rb-reg-surface er-container${variant === "overlay" ? " er-container--overlay" : ""}`, children: [
136140
136380
  isWizardStep && /* @__PURE__ */ jsxs("div", { className: "er-payment-layout er-payment-layout--no-sidebar", children: [
136141
136381
  /* @__PURE__ */ jsxs("div", { className: "er-payment-layout-main", children: [
136142
136382
  totalSteps > 1 && /* @__PURE__ */ jsx(StepIndicator2, { currentStep: currentStepNumber, totalSteps, stepLabels }),
@@ -137751,7 +137991,7 @@ function CourseRegistrationWizard(props2) {
137751
137991
  id: COURSE_REGISTRATION_ANCHOR_ID,
137752
137992
  className: `course-registration ${className || ""}`,
137753
137993
  "data-block": "course-registration",
137754
- children: /* @__PURE__ */ jsx("div", { className: "cr-container", children: /* @__PURE__ */ jsxs(
137994
+ children: /* @__PURE__ */ jsx("div", { className: "rb-reg-surface cr-container", children: /* @__PURE__ */ jsxs(
137755
137995
  "div",
137756
137996
  {
137757
137997
  className: `cr-layout${showSidebarLayout ? " cr-layout--with-sidebar" : ""}`,
@@ -145406,7 +145646,7 @@ function resolveStoragePathUrl(media2, options) {
145406
145646
  height: getNumber(media2.height)
145407
145647
  };
145408
145648
  try {
145409
- return resolveImageUrlWithContext(
145649
+ return (options?.resolveImageUrl ?? resolveImageUrlWithContext)(
145410
145650
  mediaValue,
145411
145651
  {
145412
145652
  width: 320,
@@ -145447,7 +145687,7 @@ function resolveIdentifierUrl(media2, options) {
145447
145687
  height: getNumber(media2.height)
145448
145688
  };
145449
145689
  try {
145450
- return resolveImageUrlWithContext(
145690
+ return (options?.resolveImageUrl ?? resolveImageUrlWithContext)(
145451
145691
  mediaValue,
145452
145692
  {
145453
145693
  width: 320,
@@ -164798,7 +165038,7 @@ function findDiffEnd(a2, b2, posA, posB) {
164798
165038
  posB -= size4;
164799
165039
  }
164800
165040
  }
164801
- var Fragment54 = class _Fragment {
165041
+ var Fragment53 = class _Fragment {
164802
165042
  /**
164803
165043
  @internal
164804
165044
  */
@@ -165090,7 +165330,7 @@ var Fragment54 = class _Fragment {
165090
165330
  throw new RangeError("Can not convert " + nodes + " to a Fragment" + (nodes.nodesBetween ? " (looks like multiple versions of prosemirror-model were loaded)" : ""));
165091
165331
  }
165092
165332
  };
165093
- Fragment54.empty = new Fragment54([], 0);
165333
+ Fragment53.empty = new Fragment53([], 0);
165094
165334
  var found = { index: 0, offset: 0 };
165095
165335
  function retIndex(index2, offset4) {
165096
165336
  found.index = index2;
@@ -165315,7 +165555,7 @@ var Slice2 = class _Slice {
165315
165555
  let openStart = json.openStart || 0, openEnd = json.openEnd || 0;
165316
165556
  if (typeof openStart != "number" || typeof openEnd != "number")
165317
165557
  throw new RangeError("Invalid input for Slice.fromJSON");
165318
- return new _Slice(Fragment54.fromJSON(schema, json.content), openStart, openEnd);
165558
+ return new _Slice(Fragment53.fromJSON(schema, json.content), openStart, openEnd);
165319
165559
  }
165320
165560
  /**
165321
165561
  Create a slice from a fragment by taking the maximum possible
@@ -165330,7 +165570,7 @@ var Slice2 = class _Slice {
165330
165570
  return new _Slice(fragment, openStart, openEnd);
165331
165571
  }
165332
165572
  };
165333
- Slice2.empty = new Slice2(Fragment54.empty, 0, 0);
165573
+ Slice2.empty = new Slice2(Fragment53.empty, 0, 0);
165334
165574
  function removeRange(content, from2, to) {
165335
165575
  let { index: index2, offset: offset4 } = content.findIndex(from2), child = content.maybeChild(index2);
165336
165576
  let { index: indexTo, offset: offsetTo } = content.findIndex(to);
@@ -165428,7 +165668,7 @@ function replaceThreeWay($from, $start, $end, $to, depth) {
165428
165668
  addNode(close(openEnd, replaceTwoWay($end, $to, depth + 1)), content);
165429
165669
  }
165430
165670
  addRange($to, null, depth, content);
165431
- return new Fragment54(content);
165671
+ return new Fragment53(content);
165432
165672
  }
165433
165673
  function replaceTwoWay($from, $to, depth) {
165434
165674
  let content = [];
@@ -165438,13 +165678,13 @@ function replaceTwoWay($from, $to, depth) {
165438
165678
  addNode(close(type, replaceTwoWay($from, $to, depth + 1)), content);
165439
165679
  }
165440
165680
  addRange($to, null, depth, content);
165441
- return new Fragment54(content);
165681
+ return new Fragment53(content);
165442
165682
  }
165443
165683
  function prepareSliceForReplace(slice2, $along) {
165444
165684
  let extra = $along.depth - slice2.openStart, parent = $along.node(extra);
165445
165685
  let node = parent.copy(slice2.content);
165446
165686
  for (let i2 = extra - 1; i2 >= 0; i2--)
165447
- node = $along.node(i2).copy(Fragment54.from(node));
165687
+ node = $along.node(i2).copy(Fragment53.from(node));
165448
165688
  return {
165449
165689
  start: node.resolveNoCache(slice2.openStart + extra),
165450
165690
  end: node.resolveNoCache(node.content.size - slice2.openEnd - extra)
@@ -165783,7 +166023,7 @@ var Node2 = class _Node {
165783
166023
  this.type = type;
165784
166024
  this.attrs = attrs;
165785
166025
  this.marks = marks;
165786
- this.content = content || Fragment54.empty;
166026
+ this.content = content || Fragment53.empty;
165787
166027
  }
165788
166028
  /**
165789
166029
  The array of this node's child nodes.
@@ -166088,7 +166328,7 @@ var Node2 = class _Node {
166088
166328
  can optionally pass `start` and `end` indices into the
166089
166329
  replacement fragment.
166090
166330
  */
166091
- canReplace(from2, to, replacement = Fragment54.empty, start = 0, end = replacement.childCount) {
166331
+ canReplace(from2, to, replacement = Fragment53.empty, start = 0, end = replacement.childCount) {
166092
166332
  let one = this.contentMatchAt(from2).matchFragment(replacement, start, end);
166093
166333
  let two = one && one.matchFragment(this.content, to);
166094
166334
  if (!two || !two.validEnd)
@@ -166170,7 +166410,7 @@ var Node2 = class _Node {
166170
166410
  throw new RangeError("Invalid text node in JSON");
166171
166411
  return schema.text(json.text, marks);
166172
166412
  }
166173
- let content = Fragment54.fromJSON(schema, json.content);
166413
+ let content = Fragment53.fromJSON(schema, json.content);
166174
166414
  let node = schema.nodeType(json.type).create(json.attrs, content, marks);
166175
166415
  node.type.checkAttrs(node.attrs);
166176
166416
  return node;
@@ -166312,7 +166552,7 @@ var ContentMatch = class _ContentMatch {
166312
166552
  function search(match2, types) {
166313
166553
  let finished = match2.matchFragment(after, startIndex);
166314
166554
  if (finished && (!toEnd || finished.validEnd))
166315
- return Fragment54.from(types.map((tp) => tp.createAndFill()));
166555
+ return Fragment53.from(types.map((tp) => tp.createAndFill()));
166316
166556
  for (let i2 = 0; i2 < match2.next.length; i2++) {
166317
166557
  let { type, next } = match2.next[i2];
166318
166558
  if (!(type.isText || type.hasRequiredAttrs()) && seen.indexOf(next) == -1) {
@@ -166764,7 +167004,7 @@ var NodeType = class _NodeType {
166764
167004
  create(attrs = null, content, marks) {
166765
167005
  if (this.isText)
166766
167006
  throw new Error("NodeType.create can't construct text nodes");
166767
- return new Node2(this, this.computeAttrs(attrs), Fragment54.from(content), Mark.setFrom(marks));
167007
+ return new Node2(this, this.computeAttrs(attrs), Fragment53.from(content), Mark.setFrom(marks));
166768
167008
  }
166769
167009
  /**
166770
167010
  Like [`create`](https://prosemirror.net/docs/ref/#model.NodeType.create), but check the given content
@@ -166772,7 +167012,7 @@ var NodeType = class _NodeType {
166772
167012
  if it doesn't match.
166773
167013
  */
166774
167014
  createChecked(attrs = null, content, marks) {
166775
- content = Fragment54.from(content);
167015
+ content = Fragment53.from(content);
166776
167016
  this.checkContent(content);
166777
167017
  return new Node2(this, this.computeAttrs(attrs), content, Mark.setFrom(marks));
166778
167018
  }
@@ -166786,7 +167026,7 @@ var NodeType = class _NodeType {
166786
167026
  */
166787
167027
  createAndFill(attrs = null, content, marks) {
166788
167028
  attrs = this.computeAttrs(attrs);
166789
- content = Fragment54.from(content);
167029
+ content = Fragment53.from(content);
166790
167030
  if (content.size) {
166791
167031
  let before = this.contentMatch.fillBefore(content);
166792
167032
  if (!before)
@@ -166794,7 +167034,7 @@ var NodeType = class _NodeType {
166794
167034
  content = before.append(content);
166795
167035
  }
166796
167036
  let matched = this.contentMatch.matchFragment(content);
166797
- let after = matched && matched.fillBefore(Fragment54.empty, true);
167037
+ let after = matched && matched.fillBefore(Fragment53.empty, true);
166798
167038
  if (!after)
166799
167039
  return null;
166800
167040
  return new Node2(this, attrs, content.append(after), Mark.setFrom(marks));
@@ -167258,7 +167498,7 @@ var NodeContext = class {
167258
167498
  if (!this.match) {
167259
167499
  if (!this.type)
167260
167500
  return [];
167261
- let fill = this.type.contentMatch.fillBefore(Fragment54.from(node));
167501
+ let fill = this.type.contentMatch.fillBefore(Fragment53.from(node));
167262
167502
  if (fill) {
167263
167503
  this.match = this.type.contentMatch.matchFragment(fill);
167264
167504
  } else {
@@ -167284,9 +167524,9 @@ var NodeContext = class {
167284
167524
  this.content[this.content.length - 1] = text2.withText(text2.text.slice(0, text2.text.length - m2[0].length));
167285
167525
  }
167286
167526
  }
167287
- let content = Fragment54.from(this.content);
167527
+ let content = Fragment53.from(this.content);
167288
167528
  if (!openEnd && this.match)
167289
- content = content.append(this.match.fillBefore(Fragment54.empty, true));
167529
+ content = content.append(this.match.fillBefore(Fragment53.empty, true));
167290
167530
  return this.type ? this.type.create(this.attrs, content, this.marks) : content;
167291
167531
  }
167292
167532
  inlineContext(node) {
@@ -168302,7 +168542,7 @@ function mapFragment(fragment, f2, parent) {
168302
168542
  child = f2(child, parent, i2);
168303
168543
  mapped.push(child);
168304
168544
  }
168305
- return Fragment54.fromArray(mapped);
168545
+ return Fragment53.fromArray(mapped);
168306
168546
  }
168307
168547
  var AddMarkStep = class _AddMarkStep extends Step {
168308
168548
  /**
@@ -168419,7 +168659,7 @@ var AddNodeMarkStep = class _AddNodeMarkStep extends Step {
168419
168659
  if (!node)
168420
168660
  return StepResult.fail("No node at mark step's position");
168421
168661
  let updated = node.type.create(node.attrs, null, this.mark.addToSet(node.marks));
168422
- return StepResult.fromReplace(doc3, this.pos, this.pos + 1, new Slice2(Fragment54.from(updated), 0, node.isLeaf ? 0 : 1));
168662
+ return StepResult.fromReplace(doc3, this.pos, this.pos + 1, new Slice2(Fragment53.from(updated), 0, node.isLeaf ? 0 : 1));
168423
168663
  }
168424
168664
  invert(doc3) {
168425
168665
  let node = doc3.nodeAt(this.pos);
@@ -168465,7 +168705,7 @@ var RemoveNodeMarkStep = class _RemoveNodeMarkStep extends Step {
168465
168705
  if (!node)
168466
168706
  return StepResult.fail("No node at mark step's position");
168467
168707
  let updated = node.type.create(node.attrs, null, this.mark.removeFromSet(node.marks));
168468
- return StepResult.fromReplace(doc3, this.pos, this.pos + 1, new Slice2(Fragment54.from(updated), 0, node.isLeaf ? 0 : 1));
168708
+ return StepResult.fromReplace(doc3, this.pos, this.pos + 1, new Slice2(Fragment53.from(updated), 0, node.isLeaf ? 0 : 1));
168469
168709
  }
168470
168710
  invert(doc3) {
168471
168711
  let node = doc3.nodeAt(this.pos);
@@ -168730,7 +168970,7 @@ function clearIncompatible(tr2, pos, parentType, match2 = parentType.contentMatc
168730
168970
  let m2, newline = /\r?\n|\r/g, slice2;
168731
168971
  while (m2 = newline.exec(child.text)) {
168732
168972
  if (!slice2)
168733
- slice2 = new Slice2(Fragment54.from(parentType.schema.text(" ", parentType.allowedMarks(child.marks))), 0, 0);
168973
+ slice2 = new Slice2(Fragment53.from(parentType.schema.text(" ", parentType.allowedMarks(child.marks))), 0, 0);
168734
168974
  replSteps.push(new ReplaceStep(cur + m2.index, cur + m2.index + m2[0].length, slice2));
168735
168975
  }
168736
168976
  }
@@ -168738,7 +168978,7 @@ function clearIncompatible(tr2, pos, parentType, match2 = parentType.contentMatc
168738
168978
  cur = end;
168739
168979
  }
168740
168980
  if (!match2.validEnd) {
168741
- let fill = match2.fillBefore(Fragment54.empty, true);
168981
+ let fill = match2.fillBefore(Fragment53.empty, true);
168742
168982
  tr2.replace(cur, cur, new Slice2(fill, 0, 0));
168743
168983
  }
168744
168984
  for (let i2 = replSteps.length - 1; i2 >= 0; i2--)
@@ -168764,20 +169004,20 @@ function lift(tr2, range, target) {
168764
169004
  let { $from, $to, depth } = range;
168765
169005
  let gapStart = $from.before(depth + 1), gapEnd = $to.after(depth + 1);
168766
169006
  let start = gapStart, end = gapEnd;
168767
- let before = Fragment54.empty, openStart = 0;
169007
+ let before = Fragment53.empty, openStart = 0;
168768
169008
  for (let d2 = depth, splitting = false; d2 > target; d2--)
168769
169009
  if (splitting || $from.index(d2) > 0) {
168770
169010
  splitting = true;
168771
- before = Fragment54.from($from.node(d2).copy(before));
169011
+ before = Fragment53.from($from.node(d2).copy(before));
168772
169012
  openStart++;
168773
169013
  } else {
168774
169014
  start--;
168775
169015
  }
168776
- let after = Fragment54.empty, openEnd = 0;
169016
+ let after = Fragment53.empty, openEnd = 0;
168777
169017
  for (let d2 = depth, splitting = false; d2 > target; d2--)
168778
169018
  if (splitting || $to.after(d2 + 1) < $to.end(d2)) {
168779
169019
  splitting = true;
168780
- after = Fragment54.from($to.node(d2).copy(after));
169020
+ after = Fragment53.from($to.node(d2).copy(after));
168781
169021
  openEnd++;
168782
169022
  } else {
168783
169023
  end++;
@@ -168817,14 +169057,14 @@ function findWrappingInside(range, type) {
168817
169057
  return inside;
168818
169058
  }
168819
169059
  function wrap(tr2, range, wrappers) {
168820
- let content = Fragment54.empty;
169060
+ let content = Fragment53.empty;
168821
169061
  for (let i2 = wrappers.length - 1; i2 >= 0; i2--) {
168822
169062
  if (content.size) {
168823
169063
  let match2 = wrappers[i2].type.contentMatch.matchFragment(content);
168824
169064
  if (!match2 || !match2.validEnd)
168825
169065
  throw new RangeError("Wrapper type given to Transform.wrap does not form valid content of its parent wrapper");
168826
169066
  }
168827
- content = Fragment54.from(wrappers[i2].type.create(wrappers[i2].attrs, content));
169067
+ content = Fragment53.from(wrappers[i2].type.create(wrappers[i2].attrs, content));
168828
169068
  }
168829
169069
  let start = range.start, end = range.end;
168830
169070
  tr2.step(new ReplaceAroundStep(start, end, start, end, new Slice2(content, 0, 0), wrappers.length, true));
@@ -168849,7 +169089,7 @@ function setBlockType(tr2, from2, to, type, attrs) {
168849
169089
  clearIncompatible(tr2, tr2.mapping.slice(mapFrom).map(pos, 1), type, void 0, convertNewlines === null);
168850
169090
  let mapping = tr2.mapping.slice(mapFrom);
168851
169091
  let startM = mapping.map(pos, 1), endM = mapping.map(pos + node.nodeSize, 1);
168852
- tr2.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice2(Fragment54.from(type.create(attrsHere, null, node.marks)), 0, 0), 1, true));
169092
+ tr2.step(new ReplaceAroundStep(startM, endM, startM + 1, endM - 1, new Slice2(Fragment53.from(type.create(attrsHere, null, node.marks)), 0, 0), 1, true));
168853
169093
  if (convertNewlines === true)
168854
169094
  replaceNewlines(tr2, node, pos, mapFrom);
168855
169095
  return false;
@@ -168890,7 +169130,7 @@ function setNodeMarkup(tr2, pos, type, attrs, marks) {
168890
169130
  return tr2.replaceWith(pos, pos + node.nodeSize, newNode);
168891
169131
  if (!type.validContent(node.content))
168892
169132
  throw new RangeError("Invalid content for node type " + type.name);
168893
- tr2.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice2(Fragment54.from(newNode), 0, 0), 1, true));
169133
+ tr2.step(new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1, pos + node.nodeSize - 1, new Slice2(Fragment53.from(newNode), 0, 0), 1, true));
168894
169134
  }
168895
169135
  function canSplit(doc3, pos, depth = 1, typesAfter) {
168896
169136
  let $pos = doc3.resolve(pos), base2 = $pos.depth - depth;
@@ -168914,11 +169154,11 @@ function canSplit(doc3, pos, depth = 1, typesAfter) {
168914
169154
  return $pos.node(base2).canReplaceWith(index2, index2, baseType ? baseType.type : $pos.node(base2 + 1).type);
168915
169155
  }
168916
169156
  function split(tr2, pos, depth = 1, typesAfter) {
168917
- let $pos = tr2.doc.resolve(pos), before = Fragment54.empty, after = Fragment54.empty;
169157
+ let $pos = tr2.doc.resolve(pos), before = Fragment53.empty, after = Fragment53.empty;
168918
169158
  for (let d2 = $pos.depth, e3 = $pos.depth - depth, i2 = depth - 1; d2 > e3; d2--, i2--) {
168919
- before = Fragment54.from($pos.node(d2).copy(before));
169159
+ before = Fragment53.from($pos.node(d2).copy(before));
168920
169160
  let typeAfter = typesAfter && typesAfter[i2];
168921
- after = Fragment54.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d2).copy(after));
169161
+ after = Fragment53.from(typeAfter ? typeAfter.type.create(typeAfter.attrs, after) : $pos.node(d2).copy(after));
168922
169162
  }
168923
169163
  tr2.step(new ReplaceStep(pos, pos, new Slice2(before.append(after), depth, depth), true));
168924
169164
  }
@@ -169057,7 +169297,7 @@ var Fitter = class {
169057
169297
  this.$to = $to;
169058
169298
  this.unplaced = unplaced;
169059
169299
  this.frontier = [];
169060
- this.placed = Fragment54.empty;
169300
+ this.placed = Fragment53.empty;
169061
169301
  for (let i2 = 0; i2 <= $from.depth; i2++) {
169062
169302
  let node = $from.node(i2);
169063
169303
  this.frontier.push({
@@ -169066,7 +169306,7 @@ var Fitter = class {
169066
169306
  });
169067
169307
  }
169068
169308
  for (let i2 = $from.depth; i2 > 0; i2--)
169069
- this.placed = Fragment54.from($from.node(i2).copy(this.placed));
169309
+ this.placed = Fragment53.from($from.node(i2).copy(this.placed));
169070
169310
  }
169071
169311
  get depth() {
169072
169312
  return this.frontier.length - 1;
@@ -169123,7 +169363,7 @@ var Fitter = class {
169123
169363
  let first2 = fragment.firstChild;
169124
169364
  for (let frontierDepth = this.depth; frontierDepth >= 0; frontierDepth--) {
169125
169365
  let { type, match: match2 } = this.frontier[frontierDepth], wrap2, inject = null;
169126
- if (pass == 1 && (first2 ? match2.matchType(first2.type) || (inject = match2.fillBefore(Fragment54.from(first2), false)) : parent && type.compatibleContent(parent.type)))
169366
+ if (pass == 1 && (first2 ? match2.matchType(first2.type) || (inject = match2.fillBefore(Fragment53.from(first2), false)) : parent && type.compatibleContent(parent.type)))
169127
169367
  return { sliceDepth, frontierDepth, parent, inject };
169128
169368
  else if (pass == 2 && first2 && (wrap2 = match2.findWrapping(first2.type)))
169129
169369
  return { sliceDepth, frontierDepth, parent, wrap: wrap2 };
@@ -169183,7 +169423,7 @@ var Fitter = class {
169183
169423
  let toEnd = taken == fragment.childCount;
169184
169424
  if (!toEnd)
169185
169425
  openEndCount = -1;
169186
- this.placed = addToFragment(this.placed, frontierDepth, Fragment54.from(add2));
169426
+ this.placed = addToFragment(this.placed, frontierDepth, Fragment53.from(add2));
169187
169427
  this.frontier[frontierDepth].match = match2;
169188
169428
  if (toEnd && openEndCount < 0 && parent && parent.type == this.frontier[this.depth].type && this.frontier.length > 1)
169189
169429
  this.closeFrontierNode();
@@ -169239,12 +169479,12 @@ var Fitter = class {
169239
169479
  openFrontierNode(type, attrs = null, content) {
169240
169480
  let top = this.frontier[this.depth];
169241
169481
  top.match = top.match.matchType(type);
169242
- this.placed = addToFragment(this.placed, this.depth, Fragment54.from(type.create(attrs, content)));
169482
+ this.placed = addToFragment(this.placed, this.depth, Fragment53.from(type.create(attrs, content)));
169243
169483
  this.frontier.push({ type, match: type.contentMatch });
169244
169484
  }
169245
169485
  closeFrontierNode() {
169246
169486
  let open = this.frontier.pop();
169247
- let add2 = open.match.fillBefore(Fragment54.empty, true);
169487
+ let add2 = open.match.fillBefore(Fragment53.empty, true);
169248
169488
  if (add2.childCount)
169249
169489
  this.placed = addToFragment(this.placed, this.frontier.length, add2);
169250
169490
  }
@@ -169273,7 +169513,7 @@ function closeNodeStart(node, openStart, openEnd) {
169273
169513
  if (openStart > 0) {
169274
169514
  frag = node.type.contentMatch.fillBefore(frag).append(frag);
169275
169515
  if (openEnd <= 0)
169276
- frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment54.empty, true));
169516
+ frag = frag.append(node.type.contentMatch.matchFragment(frag).fillBefore(Fragment53.empty, true));
169277
169517
  }
169278
169518
  return node.copy(frag);
169279
169519
  }
@@ -169365,7 +169605,7 @@ function closeFragment(fragment, depth, oldOpen, newOpen, parent) {
169365
169605
  if (depth > newOpen) {
169366
169606
  let match2 = parent.contentMatchAt(0);
169367
169607
  let start = match2.fillBefore(fragment).append(fragment);
169368
- fragment = start.append(match2.matchFragment(start).fillBefore(Fragment54.empty, true));
169608
+ fragment = start.append(match2.matchFragment(start).fillBefore(Fragment53.empty, true));
169369
169609
  }
169370
169610
  return fragment;
169371
169611
  }
@@ -169375,7 +169615,7 @@ function replaceRangeWith(tr2, from2, to, node) {
169375
169615
  if (point != null)
169376
169616
  from2 = to = point;
169377
169617
  }
169378
- tr2.replaceRange(from2, to, new Slice2(Fragment54.from(node), 0, 0));
169618
+ tr2.replaceRange(from2, to, new Slice2(Fragment53.from(node), 0, 0));
169379
169619
  }
169380
169620
  function deleteRange(tr2, from2, to) {
169381
169621
  let $from = tr2.doc.resolve(from2), $to = tr2.doc.resolve(to);
@@ -169423,7 +169663,7 @@ var AttrStep = class _AttrStep extends Step {
169423
169663
  attrs[name] = node.attrs[name];
169424
169664
  attrs[this.attr] = this.value;
169425
169665
  let updated = node.type.create(attrs, null, node.marks);
169426
- return StepResult.fromReplace(doc3, this.pos, this.pos + 1, new Slice2(Fragment54.from(updated), 0, node.isLeaf ? 0 : 1));
169666
+ return StepResult.fromReplace(doc3, this.pos, this.pos + 1, new Slice2(Fragment53.from(updated), 0, node.isLeaf ? 0 : 1));
169427
169667
  }
169428
169668
  getMap() {
169429
169669
  return StepMap.empty;
@@ -169558,7 +169798,7 @@ var Transform = class {
169558
169798
  fragment, node, or array of nodes.
169559
169799
  */
169560
169800
  replaceWith(from2, to, content) {
169561
- return this.replace(from2, to, new Slice2(Fragment54.from(content), 0, 0));
169801
+ return this.replace(from2, to, new Slice2(Fragment53.from(content), 0, 0));
169562
169802
  }
169563
169803
  /**
169564
169804
  Delete the content between the given positions.
@@ -170060,7 +170300,7 @@ var NodeSelection = class _NodeSelection extends Selection {
170060
170300
  return new _NodeSelection($pos);
170061
170301
  }
170062
170302
  content() {
170063
- return new Slice2(Fragment54.from(this.node), 0, 0);
170303
+ return new Slice2(Fragment53.from(this.node), 0, 0);
170064
170304
  }
170065
170305
  eq(other) {
170066
170306
  return other instanceof _NodeSelection && other.anchor == this.anchor;
@@ -171882,7 +172122,7 @@ var NodeViewDesc = class _NodeViewDesc extends ViewDesc {
171882
172122
  }
171883
172123
  }
171884
172124
  if (!rule2.contentElement)
171885
- rule2.getContent = () => Fragment54.empty;
172125
+ rule2.getContent = () => Fragment53.empty;
171886
172126
  }
171887
172127
  return rule2;
171888
172128
  }
@@ -173194,7 +173434,7 @@ function parseFromClipboard(view, text2, html, plainText, $context) {
173194
173434
  text2 = f2(text2, inCode || plainText, view);
173195
173435
  });
173196
173436
  if (inCode) {
173197
- slice2 = new Slice2(Fragment54.from(view.state.schema.text(text2.replace(/\r\n?/g, "\n"))), 0, 0);
173437
+ slice2 = new Slice2(Fragment53.from(view.state.schema.text(text2.replace(/\r\n?/g, "\n"))), 0, 0);
173198
173438
  view.someProp("transformPasted", (f2) => {
173199
173439
  slice2 = f2(slice2, view, true);
173200
173440
  });
@@ -173288,13 +173528,13 @@ function normalizeSiblings(fragment, $context) {
173288
173528
  }
173289
173529
  });
173290
173530
  if (result)
173291
- return Fragment54.from(result);
173531
+ return Fragment53.from(result);
173292
173532
  }
173293
173533
  return fragment;
173294
173534
  }
173295
173535
  function withWrappers(node, wrap2, from2 = 0) {
173296
173536
  for (let i2 = wrap2.length - 1; i2 >= from2; i2--)
173297
- node = wrap2[i2].create(null, Fragment54.from(node));
173537
+ node = wrap2[i2].create(null, Fragment53.from(node));
173298
173538
  return node;
173299
173539
  }
173300
173540
  function addToSibling(wrap2, lastWrap, node, sibling, depth) {
@@ -173304,14 +173544,14 @@ function addToSibling(wrap2, lastWrap, node, sibling, depth) {
173304
173544
  return sibling.copy(sibling.content.replaceChild(sibling.childCount - 1, inner));
173305
173545
  let match2 = sibling.contentMatchAt(sibling.childCount);
173306
173546
  if (match2.matchType(depth == wrap2.length - 1 ? node.type : wrap2[depth + 1]))
173307
- return sibling.copy(sibling.content.append(Fragment54.from(withWrappers(node, wrap2, depth + 1))));
173547
+ return sibling.copy(sibling.content.append(Fragment53.from(withWrappers(node, wrap2, depth + 1))));
173308
173548
  }
173309
173549
  }
173310
173550
  function closeRight(node, depth) {
173311
173551
  if (depth == 0)
173312
173552
  return node;
173313
173553
  let fragment = node.content.replaceChild(node.childCount - 1, closeRight(node.lastChild, depth - 1));
173314
- let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment54.empty, true);
173554
+ let fill = node.contentMatchAt(node.childCount).fillBefore(Fragment53.empty, true);
173315
173555
  return node.copy(fragment.append(fill));
173316
173556
  }
173317
173557
  function closeRange(fragment, side, from2, to, depth, openEnd) {
@@ -173321,7 +173561,7 @@ function closeRange(fragment, side, from2, to, depth, openEnd) {
173321
173561
  if (depth < to - 1)
173322
173562
  inner = closeRange(inner, side, from2, to, depth + 1, openEnd);
173323
173563
  if (depth >= from2)
173324
- inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, openEnd <= depth).append(inner) : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment54.empty, true));
173564
+ inner = side < 0 ? node.contentMatchAt(0).fillBefore(inner, openEnd <= depth).append(inner) : inner.append(node.contentMatchAt(node.childCount).fillBefore(Fragment53.empty, true));
173325
173565
  return fragment.replaceChild(side < 0 ? 0 : fragment.childCount - 1, node.copy(inner));
173326
173566
  }
173327
173567
  function closeSlice(slice2, openStart, openEnd) {
@@ -173391,7 +173631,7 @@ function addContext(slice2, context) {
173391
173631
  let type = schema.nodes[array[i2]];
173392
173632
  if (!type || type.hasRequiredAttrs())
173393
173633
  break;
173394
- content = Fragment54.from(type.create(array[i2 + 1], content));
173634
+ content = Fragment53.from(type.create(array[i2 + 1], content));
173395
173635
  openStart++;
173396
173636
  openEnd++;
173397
173637
  }
@@ -175250,7 +175490,7 @@ function isMarkChange(cur, prev) {
175250
175490
  let updated = [];
175251
175491
  for (let i2 = 0; i2 < prev.childCount; i2++)
175252
175492
  updated.push(update(prev.child(i2)));
175253
- if (Fragment54.from(updated).eq(cur))
175493
+ if (Fragment53.from(updated).eq(cur))
175254
175494
  return { mark, type };
175255
175495
  }
175256
175496
  function looksLikeBackspace(old, start, end, $newStart, $newEnd) {
@@ -176400,10 +176640,10 @@ function deleteBarrier(state, $cut, dispatch, dir) {
176400
176640
  let canDelAfter = !isolated && $cut.parent.canReplace($cut.index(), $cut.index() + 1);
176401
176641
  if (canDelAfter && (conn = (match2 = before.contentMatchAt(before.childCount)).findWrapping(after.type)) && match2.matchType(conn[0] || after.type).validEnd) {
176402
176642
  if (dispatch) {
176403
- let end = $cut.pos + after.nodeSize, wrap2 = Fragment54.empty;
176643
+ let end = $cut.pos + after.nodeSize, wrap2 = Fragment53.empty;
176404
176644
  for (let i2 = conn.length - 1; i2 >= 0; i2--)
176405
- wrap2 = Fragment54.from(conn[i2].create(null, wrap2));
176406
- wrap2 = Fragment54.from(before.copy(wrap2));
176645
+ wrap2 = Fragment53.from(conn[i2].create(null, wrap2));
176646
+ wrap2 = Fragment53.from(before.copy(wrap2));
176407
176647
  let tr2 = state.tr.step(new ReplaceAroundStep($cut.pos - 1, end, $cut.pos, end, new Slice2(wrap2, 1, 0), conn.length, true));
176408
176648
  let $joinAt = tr2.doc.resolve(end + 2 * conn.length);
176409
176649
  if ($joinAt.nodeAfter && $joinAt.nodeAfter.type == before.type && canJoin(tr2.doc, $joinAt.pos))
@@ -176432,9 +176672,9 @@ function deleteBarrier(state, $cut, dispatch, dir) {
176432
176672
  afterDepth++;
176433
176673
  if (at.canReplace(at.childCount, at.childCount, afterText.content)) {
176434
176674
  if (dispatch) {
176435
- let end = Fragment54.empty;
176675
+ let end = Fragment53.empty;
176436
176676
  for (let i2 = wrap2.length - 1; i2 >= 0; i2--)
176437
- end = Fragment54.from(wrap2[i2].copy(end));
176677
+ end = Fragment53.from(wrap2[i2].copy(end));
176438
176678
  let tr2 = state.tr.step(new ReplaceAroundStep($cut.pos - wrap2.length, $cut.pos + after.nodeSize, $cut.pos + afterDepth, $cut.pos + after.nodeSize - afterDepth, new Slice2(end, wrap2.length, 0), 0, true));
176439
176679
  dispatch(tr2.scrollIntoView());
176440
176680
  }
@@ -176551,9 +176791,9 @@ function wrapRangeInList(tr2, range, listType, attrs = null) {
176551
176791
  return true;
176552
176792
  }
176553
176793
  function doWrapInList(tr2, range, wrappers, joinBefore, listType) {
176554
- let content = Fragment54.empty;
176794
+ let content = Fragment53.empty;
176555
176795
  for (let i2 = wrappers.length - 1; i2 >= 0; i2--)
176556
- content = Fragment54.from(wrappers[i2].type.create(wrappers[i2].attrs, content));
176796
+ content = Fragment53.from(wrappers[i2].type.create(wrappers[i2].attrs, content));
176557
176797
  tr2.step(new ReplaceAroundStep(range.start - (joinBefore ? 2 : 0), range.end, range.start, range.end, new Slice2(content, 0, 0), wrappers.length, true));
176558
176798
  let found2 = 0;
176559
176799
  for (let i2 = 0; i2 < wrappers.length; i2++)
@@ -176587,7 +176827,7 @@ function liftListItem(itemType) {
176587
176827
  function liftToOuterList(state, dispatch, itemType, range) {
176588
176828
  let tr2 = state.tr, end = range.end, endOfList = range.$to.end(range.depth);
176589
176829
  if (end < endOfList) {
176590
- tr2.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice2(Fragment54.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));
176830
+ tr2.step(new ReplaceAroundStep(end - 1, endOfList, end, endOfList, new Slice2(Fragment53.from(itemType.create(null, range.parent.copy())), 1, 0), 1, true));
176591
176831
  range = new NodeRange(tr2.doc.resolve(range.$from.pos), tr2.doc.resolve(endOfList), range.depth);
176592
176832
  }
176593
176833
  const target = liftTarget(range);
@@ -176611,10 +176851,10 @@ function liftOutOfList(state, dispatch, range) {
176611
176851
  return false;
176612
176852
  let atStart = range.startIndex == 0, atEnd = range.endIndex == list.childCount;
176613
176853
  let parent = $start.node(-1), indexBefore = $start.index(-1);
176614
- if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment54.empty : Fragment54.from(list))))
176854
+ if (!parent.canReplace(indexBefore + (atStart ? 0 : 1), indexBefore + 1, item.content.append(atEnd ? Fragment53.empty : Fragment53.from(list))))
176615
176855
  return false;
176616
176856
  let start = $start.pos, end = start + item.nodeSize;
176617
- tr2.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice2((atStart ? Fragment54.empty : Fragment54.from(list.copy(Fragment54.empty))).append(atEnd ? Fragment54.empty : Fragment54.from(list.copy(Fragment54.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));
176857
+ tr2.step(new ReplaceAroundStep(start - (atStart ? 1 : 0), end + (atEnd ? 1 : 0), start + 1, end - 1, new Slice2((atStart ? Fragment53.empty : Fragment53.from(list.copy(Fragment53.empty))).append(atEnd ? Fragment53.empty : Fragment53.from(list.copy(Fragment53.empty))), atStart ? 0 : 1, atEnd ? 0 : 1), atStart ? 0 : 1));
176618
176858
  dispatch(tr2.scrollIntoView());
176619
176859
  return true;
176620
176860
  }
@@ -176632,8 +176872,8 @@ function sinkListItem(itemType) {
176632
176872
  return false;
176633
176873
  if (dispatch) {
176634
176874
  let nestedBefore = nodeBefore.lastChild && nodeBefore.lastChild.type == parent.type;
176635
- let inner = Fragment54.from(nestedBefore ? itemType.create() : null);
176636
- let slice2 = new Slice2(Fragment54.from(itemType.create(null, Fragment54.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);
176875
+ let inner = Fragment53.from(nestedBefore ? itemType.create() : null);
176876
+ let slice2 = new Slice2(Fragment53.from(itemType.create(null, Fragment53.from(parent.type.create(null, inner)))), nestedBefore ? 3 : 1, 0);
176637
176877
  let before = range.start, after = range.end;
176638
176878
  dispatch(state.tr.step(new ReplaceAroundStep(before - (nestedBefore ? 3 : 1), after, before, after, slice2, 1, true)).scrollIntoView());
176639
176879
  }
@@ -177264,7 +177504,7 @@ function inputRulesPlugin(props2) {
177264
177504
  if (typeof text2 === "string") {
177265
177505
  text2 = text2;
177266
177506
  } else {
177267
- text2 = getHTMLFromFragment(Fragment54.from(text2), state.schema);
177507
+ text2 = getHTMLFromFragment(Fragment53.from(text2), state.schema);
177268
177508
  }
177269
177509
  const { from: from2 } = simulatedInputMeta;
177270
177510
  const to = from2 + text2.length;
@@ -177623,7 +177863,7 @@ function pasteRulesPlugin(props2) {
177623
177863
  if (typeof text2 === "string") {
177624
177864
  text2 = text2;
177625
177865
  } else {
177626
- text2 = getHTMLFromFragment(Fragment54.from(text2), state.schema);
177866
+ text2 = getHTMLFromFragment(Fragment53.from(text2), state.schema);
177627
177867
  }
177628
177868
  const { from: from3 } = simulatedPasteMeta;
177629
177869
  const to2 = from3 + text2.length;
@@ -178324,7 +178564,7 @@ function elementFromString(value) {
178324
178564
  return removeWhitespaces(html);
178325
178565
  }
178326
178566
  function createNodeFromContent(content, schema, options) {
178327
- if (content instanceof Node2 || content instanceof Fragment54) {
178567
+ if (content instanceof Node2 || content instanceof Fragment53) {
178328
178568
  return content;
178329
178569
  }
178330
178570
  options = {
@@ -178338,7 +178578,7 @@ function createNodeFromContent(content, schema, options) {
178338
178578
  try {
178339
178579
  const isArrayContent = Array.isArray(content) && content.length > 0;
178340
178580
  if (isArrayContent) {
178341
- return Fragment54.fromArray(content.map((item) => schema.nodeFromJSON(item)));
178581
+ return Fragment53.fromArray(content.map((item) => schema.nodeFromJSON(item)));
178342
178582
  }
178343
178583
  const node = schema.nodeFromJSON(content);
178344
178584
  if (options.errorOnInvalidContent) {
@@ -178483,7 +178723,7 @@ var insertContentAt = (position, value, options) => ({ tr: tr2, dispatch, editor
178483
178723
  if (isOnlyTextContent) {
178484
178724
  if (Array.isArray(value)) {
178485
178725
  newContent = value.map((v2) => v2.text || "").join("");
178486
- } else if (value instanceof Fragment54) {
178726
+ } else if (value instanceof Fragment53) {
178487
178727
  let text2 = "";
178488
178728
  value.forEach((node) => {
178489
178729
  if (node.text) {
@@ -179282,10 +179522,10 @@ var splitListItem = (typeOrName, overrideAttrs = {}) => ({ tr: tr2, state, dispa
179282
179522
  return false;
179283
179523
  }
179284
179524
  if (dispatch) {
179285
- let wrap2 = Fragment54.empty;
179525
+ let wrap2 = Fragment53.empty;
179286
179526
  const depthBefore = $from.index(-1) ? 1 : $from.index(-2) ? 2 : 3;
179287
179527
  for (let d2 = $from.depth - depthBefore; d2 >= $from.depth - 3; d2 -= 1) {
179288
- wrap2 = Fragment54.from($from.node(d2).copy(wrap2));
179528
+ wrap2 = Fragment53.from($from.node(d2).copy(wrap2));
179289
179529
  }
179290
179530
  const depthAfter = $from.indexAfter(-1) < $from.node(-2).childCount ? 1 : $from.indexAfter(-2) < $from.node(-3).childCount ? 2 : 3;
179291
179531
  const newNextTypeAttributes2 = {
@@ -179293,7 +179533,7 @@ var splitListItem = (typeOrName, overrideAttrs = {}) => ({ tr: tr2, state, dispa
179293
179533
  ...overrideAttrs
179294
179534
  };
179295
179535
  const nextType2 = ((_a = type.contentMatch.defaultType) === null || _a === void 0 ? void 0 : _a.createAndFill(newNextTypeAttributes2)) || void 0;
179296
- wrap2 = wrap2.append(Fragment54.from(type.createAndFill(null, nextType2) || void 0));
179536
+ wrap2 = wrap2.append(Fragment53.from(type.createAndFill(null, nextType2) || void 0));
179297
179537
  const start = $from.before($from.depth - (depthBefore - 1));
179298
179538
  tr2.replace(start, $from.after(-depthAfter), new Slice2(wrap2, 4 - depthBefore, 0));
179299
179539
  let sel = -1;
@@ -181594,9 +181834,9 @@ function beforeinput(view, event) {
181594
181834
  let insert2 = $from.parent.contentMatchAt($from.index()).findWrapping(view.state.schema.nodes.text);
181595
181835
  if (!insert2)
181596
181836
  return false;
181597
- let frag = Fragment54.empty;
181837
+ let frag = Fragment53.empty;
181598
181838
  for (let i2 = insert2.length - 1; i2 >= 0; i2--)
181599
- frag = Fragment54.from(insert2[i2].createAndFill(null, frag));
181839
+ frag = Fragment53.from(insert2[i2].createAndFill(null, frag));
181600
181840
  let tr2 = view.state.tr.replace($from.pos, $from.pos, new Slice2(frag, 0, 0));
181601
181841
  tr2.setSelection(TextSelection.near(tr2.doc.resolve($from.pos + 1)));
181602
181842
  view.dispatch(tr2);