@riverbankcms/sdk 0.126.0 → 0.127.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 (126) hide show
  1. package/dist/{PreviewEditorSidebar-DcYJxTgc.mjs → PreviewEditorSidebar-BXtfF7tp.mjs} +58 -38
  2. package/dist/{PreviewEditorUI-Ctt1yTJr.mjs → PreviewEditorUI-Dou73Q0K.mjs} +2 -2
  3. package/dist/{SdkPreviewModeRuntime-CvW1vdQ4.mjs → SdkPreviewModeRuntime-B0HPXr-l.mjs} +119 -41
  4. package/dist/{SiteChromeCustomizeContext-C87qlKWw.mjs → SiteChromeCustomizeContext-DZiDBAYu.mjs} +9961 -9583
  5. package/dist/_dts/ai/src/contracts/proposals.d.ts +198 -0
  6. package/dist/_dts/api/src/contentRuntime.d.ts +1 -5
  7. package/dist/_dts/block-form/src/backend/store-backend.d.ts +2 -1
  8. package/dist/_dts/block-form/src/blockDraftSaveability.d.ts +1 -0
  9. package/dist/_dts/blocks/src/index.d.ts +3 -2
  10. package/dist/_dts/blocks/src/lib/media.d.ts +267 -0
  11. package/dist/_dts/blocks/src/system/constants/buttonRoles.d.ts +0 -13
  12. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +4 -4
  13. package/dist/_dts/blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.d.ts +7 -0
  14. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +2 -2
  15. package/dist/_dts/content-editor/src/ui/blockValidationManifestRegistry.d.ts +17 -0
  16. package/dist/_dts/content-editor/src/ui/blockValidationView.d.ts +1 -1
  17. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +4 -0
  18. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +143 -155
  19. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +4 -0
  20. package/dist/_dts/editor-blocks/src/block-editor/hooks/useBlockValidationManifests.d.ts +26 -0
  21. package/dist/_dts/editor-blocks/src/widgets/rich-text/imageInsert.d.ts +3 -3
  22. package/dist/_dts/media-editor/src/MediaEditor.d.ts +2 -2
  23. package/dist/_dts/media-editor/src/context.d.ts +1 -2
  24. package/dist/_dts/media-editor/src/index.d.ts +3 -1
  25. package/dist/_dts/media-editor/src/mediaSelection.d.ts +32 -0
  26. package/dist/_dts/media-editor/src/types.d.ts +3 -1
  27. package/dist/_dts/media-editor/src/useMediaSelection.d.ts +26 -0
  28. package/dist/_dts/preview-next/src/client/index.d.ts +2 -0
  29. package/dist/_dts/preview-next/src/client/preview/HeaderMenuControls.d.ts +12 -0
  30. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +12 -1
  31. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +7 -1
  32. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +4 -49
  33. package/dist/_dts/preview-next/src/client/preview/headerInteractionPaletteSurfaceState.d.ts +8 -0
  34. package/dist/_dts/preview-next/src/client/preview/previewThemeRoles.d.ts +15 -0
  35. package/dist/_dts/preview-next/src/client/preview/siteChromeCustomizeTypes.d.ts +54 -0
  36. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +13 -3
  37. package/dist/_dts/preview-next/src/client/preview/siteChromeNavQuickControlHistory.d.ts +3 -0
  38. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +6 -3
  39. package/dist/_dts/sdk/src/rendering/islands/types.d.ts +2 -2
  40. package/dist/_dts/sdk/src/version.d.ts +1 -1
  41. package/dist/_dts/theme-core/src/buttons/effects/presets/background.d.ts +1 -1
  42. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +0 -18
  43. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -3
  44. package/dist/_dts/theme-core/src/header/containerSchema.d.ts +20 -0
  45. package/dist/_dts/theme-core/src/header/generateHeaderCss.d.ts +1 -1
  46. package/dist/_dts/theme-core/src/header/interactionPalette.d.ts +14 -0
  47. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +3 -0
  48. package/dist/_dts/theme-core/src/header/paintTargets.d.ts +25 -0
  49. package/dist/_dts/theme-core/src/header/scrollTreatment.d.ts +11 -0
  50. package/dist/_dts/theme-core/src/header/surfaceRules.d.ts +9 -0
  51. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +15 -0
  52. package/dist/_dts/theme-core/src/palette/colors.d.ts +1 -1
  53. package/dist/_dts/theme-core/src/schema.d.ts +67 -19
  54. package/dist/_dts/theme-core/src/site-styles/appearancePresetCatalog.d.ts +3 -51
  55. package/dist/_dts/theme-core/src/site-styles/appearancePresetTypes.d.ts +4 -11
  56. package/dist/_dts/theme-core/src/site-styles/blockAppearancePresets.d.ts +3 -51
  57. package/dist/_dts/theme-core/src/site-styles/headerInteractionPalette.d.ts +32 -0
  58. package/dist/_dts/theme-core/src/site-styles/headerLooks.d.ts +19 -106
  59. package/dist/_dts/theme-core/src/site-styles/headerOpeningForeground.d.ts +22 -0
  60. package/dist/_dts/theme-core/src/site-styles/headerOpeningSection.d.ts +2 -0
  61. package/dist/_dts/theme-core/src/site-styles/headerStyleParts.d.ts +4 -0
  62. package/dist/_dts/theme-core/src/site-styles/index.d.ts +3 -0
  63. package/dist/_dts/theme-core/src/site-styles/lookOptionGroups.d.ts +24 -0
  64. package/dist/_dts/theme-core/src/site-styles/lookResolution.d.ts +1 -2
  65. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +4 -22
  66. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorOptions.d.ts +21 -0
  67. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +1 -1
  68. package/dist/_dts/theme-core/src/site-styles/siteChromeNavPreferences.d.ts +4 -1
  69. package/dist/cli/index.mjs +973 -1081
  70. package/dist/client/{DiscountCodeDisclosure-DS0AuFWW.mjs → DiscountCodeDisclosure-BDFRp8Y7.mjs} +1 -1
  71. package/dist/client/{EventCombined.client-DtMxLr7q.mjs → EventCombined.client-DJgF1_lf.mjs} +2 -2
  72. package/dist/client/{EventListing.client-BdLSRNg1.mjs → EventListing.client-CnWGNjOr.mjs} +2 -2
  73. package/dist/client/{LeafletStaticMap-BrpC6vsT.mjs → LeafletStaticMap-BISs9Bl7.mjs} +1 -1
  74. package/dist/client/{MagicLinkForm-Bt3IuLMy.mjs → MagicLinkForm-b5E_HoG9.mjs} +1 -1
  75. package/dist/client/{StepIndicator-CBYPFVoy.mjs → StepIndicator-D8gVYkK-.mjs} +2 -2
  76. package/dist/client/{accordion-BqqwPJWM.mjs → accordion-DFDajgDz.mjs} +1 -1
  77. package/dist/client/{bookingForm-SneP3yxC.mjs → bookingForm-Bdqj9-52.mjs} +5 -5
  78. package/dist/client/bookings.mjs +126 -23
  79. package/dist/client/{carousel-BTIR9L3I.mjs → carousel-Cvqf-kN8.mjs} +1 -1
  80. package/dist/client/{cart-bqiqd8SX.mjs → cart-CuH2TJXP.mjs} +3 -3
  81. package/dist/client/{checkout-WbTFV5v4.mjs → checkout-CMNPpejZ.mjs} +3 -3
  82. package/dist/client/client.mjs +1227 -1209
  83. package/dist/client/{courseRegistration-BcemLAdN.mjs → courseRegistration-DTEYWL6Z.mjs} +6 -6
  84. package/dist/client/{eventCalendar-CsxIw0V_.mjs → eventCalendar-BW-XoxZ0.mjs} +4 -4
  85. package/dist/client/{eventCombined-B6XMoHfa.mjs → eventCombined-Bpn7s0y9.mjs} +2 -2
  86. package/dist/client/{eventDetails-BJaoPPfo.mjs → eventDetails-D2uUSTMH.mjs} +3 -3
  87. package/dist/client/{eventListing-DgwdYHRT.mjs → eventListing-CVr1c094.mjs} +2 -2
  88. package/dist/client/{eventRegistration-C0O3folu.mjs → eventRegistration-Dv4AvkMw.mjs} +6 -6
  89. package/dist/client/{form-Bk9txGFt.mjs → form-DxdKf9fs.mjs} +1 -1
  90. package/dist/client/{headerSection-yIBt0yTv.mjs → headerSection-BaXI5Sro.mjs} +2 -2
  91. package/dist/client/hooks.mjs +801 -874
  92. package/dist/client/{locationMap-C-3KIpv-.mjs → locationMap-BEtW2fKz.mjs} +2 -2
  93. package/dist/client/{newsletterForm-CzB8g8h2.mjs → newsletterForm-BKKs0S4R.mjs} +1 -1
  94. package/dist/client/{pricing-C1QeDes_.mjs → pricing-ClkqcElA.mjs} +1 -1
  95. package/dist/client/{productDetail-w7SBp5uc.mjs → productDetail-H-ru8dyy.mjs} +3 -3
  96. package/dist/client/{productList-D0tGKHGf.mjs → productList-Buyi5c0C.mjs} +3 -3
  97. package/dist/client/{propsDecoder-Bcin2DB3.mjs → propsDecoder-BF7i6Ijg.mjs} +127 -55
  98. package/dist/client/rendering/client.mjs +928 -916
  99. package/dist/client/rendering/islands.mjs +18 -18
  100. package/dist/client/rendering.mjs +1130 -1114
  101. package/dist/client/{scrollToBlock-h-o_STf_.mjs → scrollToBlock-D_7t8yWb.mjs} +1 -1
  102. package/dist/client/{shop-BGzmL8O_.mjs → shop-CF7SZQNX.mjs} +5 -5
  103. package/dist/client/{shop-commerce-lX8QxjX-.mjs → shop-commerce-DA7_Rq5p.mjs} +4 -4
  104. package/dist/client/{shop-commerce-store-CEurARtu.mjs → shop-commerce-store-BmLqW7Gh.mjs} +1 -1
  105. package/dist/client/{shopShared-DXxH8xxw.mjs → shopShared-WL-E1znM.mjs} +2 -2
  106. package/dist/client/{useEventFilters-B591g9vd.mjs → useEventFilters-rc8VLeLV.mjs} +2 -2
  107. package/dist/client/{usePolling-BvnChV4m.mjs → usePolling-1ncrfd4S.mjs} +2 -2
  108. package/dist/preview-next/client/runtime.mjs +3 -3
  109. package/dist/{sdk-runtime-M__i3Jce.mjs → sdk-runtime-BnrCCFJq.mjs} +1 -1
  110. package/dist/{separator-VSlnI9bc.mjs → separator-CFvBx2yl.mjs} +1 -1
  111. package/dist/server/components.mjs +1302 -1350
  112. package/dist/server/config-validation.mjs +801 -874
  113. package/dist/server/config.mjs +801 -874
  114. package/dist/server/data.mjs +801 -874
  115. package/dist/server/index.mjs +1 -1
  116. package/dist/server/next.mjs +1303 -1351
  117. package/dist/server/page-converter.mjs +801 -874
  118. package/dist/server/prebuild.mjs +1 -1
  119. package/dist/server/rendering/server.mjs +1296 -1344
  120. package/dist/server/rendering.mjs +1302 -1350
  121. package/dist/server/routing.mjs +869 -895
  122. package/dist/server/server.mjs +802 -875
  123. package/dist/server/theme-bridge.mjs +151 -118
  124. package/dist/server/theme.mjs +111 -23
  125. package/package.json +1 -1
  126. package/dist/_dts/editor-blocks/src/widgets/rich-text/ensureRichTextImageAssetIdentifier.d.ts +0 -8
@@ -13716,8 +13716,7 @@ function createRichTextDocFromMarkdown(markdown) {
13716
13716
  })
13717
13717
  };
13718
13718
  }
13719
- var TipTapMarkSchema, TipTapNodeSchema, RichTextDocSchema;
13720
- var init_richTextSchema = __esmMin((() => {
13719
+ var TipTapMarkSchema, TipTapNodeSchema, RichTextDocSchema, init_richTextSchema = __esmMin((() => {
13721
13720
  init_typeGuards();
13722
13721
  TipTapMarkSchema = z$1.object({
13723
13722
  type: z$1.string().min(1),
@@ -13758,11 +13757,103 @@ var init_richTextSchema = __esmMin((() => {
13758
13757
  type: z$1.literal("doc"),
13759
13758
  content: z$1.array(TipTapNodeSchema)
13760
13759
  }).strict();
13760
+ })), PUBLIC_DOWNLOAD_MEDIA_TYPES, hotspotSchema$1, rotationSchema$1, rectSchema$1, aspectCropSchema$1, transformSchema$1, mediaPosterSchema, mediaBaseSchema, mediaIdentifierSchema, imageMediaSchema, videoMediaSchema, audioMediaSchema, documentMediaSchema, spreadsheetMediaSchema, archiveMediaSchema, mediaSchema$1, persistableMediaBaseSchema;
13761
+ var init_media$2 = __esmMin((() => {
13762
+ init_src$2();
13763
+ PUBLIC_DOWNLOAD_MEDIA_TYPES = [
13764
+ "document",
13765
+ "spreadsheet",
13766
+ "archive",
13767
+ "audio"
13768
+ ];
13769
+ hotspotSchema$1 = z.object({
13770
+ x: z.number().min(0).max(1),
13771
+ y: z.number().min(0).max(1),
13772
+ radius: z.number().optional()
13773
+ });
13774
+ rotationSchema$1 = z.union([
13775
+ z.literal(0),
13776
+ z.literal(90),
13777
+ z.literal(180),
13778
+ z.literal(270)
13779
+ ]);
13780
+ rectSchema$1 = z.tuple([
13781
+ z.number(),
13782
+ z.number(),
13783
+ z.number(),
13784
+ z.number()
13785
+ ]);
13786
+ aspectCropSchema$1 = z.object({
13787
+ aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
13788
+ rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema$1.optional()),
13789
+ hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema$1.optional()),
13790
+ rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema$1.optional())
13791
+ });
13792
+ transformSchema$1 = z.object({
13793
+ aspectCrops: z.preprocess((value) => {
13794
+ if (!value || typeof value !== "object" || Array.isArray(value)) return;
13795
+ return value;
13796
+ }, z.record(z.string(), aspectCropSchema$1.catch({}))).optional(),
13797
+ rect: rectSchema$1.optional(),
13798
+ hotspot: hotspotSchema$1.optional(),
13799
+ rotation: rotationSchema$1.optional()
13800
+ });
13801
+ mediaPosterSchema = z.discriminatedUnion("tag", [z.object({
13802
+ tag: z.literal("storage"),
13803
+ assetId: z.string().optional(),
13804
+ storageBucket: z.string().min(1),
13805
+ storagePath: z.string().min(1)
13806
+ }), z.object({
13807
+ tag: z.literal("external-src"),
13808
+ assetId: z.string().optional(),
13809
+ src: z.string().url()
13810
+ })]);
13811
+ mediaBaseSchema = z.object({
13812
+ purpose: z.string().optional(),
13813
+ placeholder: z.boolean().default(true).optional(),
13814
+ assetId: z.string().optional(),
13815
+ identifier: z.string().optional(),
13816
+ src: z.string().optional(),
13817
+ alt: z.string().optional(),
13818
+ filename: z.string().optional(),
13819
+ mimeType: z.string().optional(),
13820
+ width: z.number().optional(),
13821
+ height: z.number().optional(),
13822
+ storageBucket: z.string().optional(),
13823
+ storagePath: z.string().optional(),
13824
+ poster: mediaPosterSchema.optional(),
13825
+ transform: transformSchema$1.optional()
13826
+ });
13827
+ mediaIdentifierSchema = z.string().trim().min(1).brand();
13828
+ imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
13829
+ videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
13830
+ audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
13831
+ documentMediaSchema = mediaBaseSchema.extend({ type: z.literal("document") });
13832
+ spreadsheetMediaSchema = mediaBaseSchema.extend({ type: z.literal("spreadsheet") });
13833
+ archiveMediaSchema = mediaBaseSchema.extend({ type: z.literal("archive") });
13834
+ mediaSchema$1 = z.discriminatedUnion("type", [
13835
+ imageMediaSchema,
13836
+ videoMediaSchema,
13837
+ audioMediaSchema,
13838
+ documentMediaSchema,
13839
+ spreadsheetMediaSchema,
13840
+ archiveMediaSchema
13841
+ ]);
13842
+ persistableMediaBaseSchema = mediaBaseSchema.extend({ identifier: mediaIdentifierSchema });
13843
+ z.discriminatedUnion("type", [
13844
+ persistableMediaBaseSchema.extend({ type: z.literal("image") }),
13845
+ persistableMediaBaseSchema.extend({ type: z.literal("video") }),
13846
+ persistableMediaBaseSchema.extend({ type: z.literal("audio") }),
13847
+ persistableMediaBaseSchema.extend({ type: z.literal("document") }),
13848
+ persistableMediaBaseSchema.extend({ type: z.literal("spreadsheet") }),
13849
+ persistableMediaBaseSchema.extend({ type: z.literal("archive") })
13850
+ ]);
13761
13851
  }));
13762
13852
  //#endregion
13763
13853
  //#region ../blocks/src/system/manifest/fieldValidation/index.ts
13764
13854
  init_src$2();
13765
13855
  init_richTextSchema();
13856
+ init_media$2();
13766
13857
  const TEL_RE = /^[+()0-9\s-]{3,}$/;
13767
13858
  const SLUG_PATTERN = /^(?:[a-z0-9]+(?:-[a-z0-9]+)*)(?:\/(?:[a-z0-9]+(?:-[a-z0-9]+)*))*$/;
13768
13859
  const ALLOWED_URL_PROTOCOLS = ["http:", "https:"];
@@ -14050,7 +14141,7 @@ function canonicalizeFieldValueForWrite(plan, value) {
14050
14141
  case "media": {
14051
14142
  if (!isPlainObject$6(value)) return value;
14052
14143
  const canonical = { ...value };
14053
- if (typeof canonical.identifier === "string" && canonical.identifier.trim().length > 0) deleteEnvSpecificKeys(canonical);
14144
+ if (mediaIdentifierSchema.safeParse(canonical.identifier).success) deleteEnvSpecificKeys(canonical);
14054
14145
  return canonical;
14055
14146
  }
14056
14147
  case "group": return canonicalizeObjectForWrite(selectedGroupChildPlans(plan, value), value);
@@ -14145,7 +14236,7 @@ function normalizeObjectChildren(children, value, ctx) {
14145
14236
  function normalizeInlineTextFallbacks(plans, values, ctx) {
14146
14237
  for (const plan of plans) {
14147
14238
  if (plan.kind !== "inlineText" || !plan.plainTextFallbackPath) continue;
14148
- if (!isMissingForPlan(plan, values[plan.fieldId])) continue;
14239
+ if (!isMissingForPlan(plan, values[plan.fieldId]) && !(ctx.allowIncomplete && !parseInlineTextFromUnknown(values[plan.fieldId]).ok)) continue;
14149
14240
  const fallback = getAtFieldPath(values, plan.plainTextFallbackPath);
14150
14241
  if (typeof fallback !== "string" || fallback.trim().length === 0) continue;
14151
14242
  values[plan.fieldId] = normalizeFieldValue(plan, plainTextToInlineText(fallback), ctx);
@@ -14186,7 +14277,7 @@ function validateNormalizedFieldValue(plan, value, ctx) {
14186
14277
  case "select": return validateSelectPlan(plan, value);
14187
14278
  case "richText": return isValidRichTextDoc(value) ? [] : [issue$3(plan, "invalidRichText")];
14188
14279
  case "inlineText": return validateInlineTextPlan(plan, value);
14189
- case "media": return isPlainObject$6(value) && typeof value.identifier === "string" && value.identifier.trim().length > 0 && (value.type === void 0 || typeof value.type === "string" && plan.allowedMediaTypes.includes(value.type)) ? [] : [issue$3(plan, "invalidMedia")];
14280
+ case "media": return isPlainObject$6(value) && mediaIdentifierSchema.safeParse(value.identifier).success && (value.type === void 0 || typeof value.type === "string" && plan.allowedMediaTypes.includes(value.type)) ? [] : [issue$3(plan, "invalidMedia")];
14190
14281
  case "link": return linkSchema.safeParse(value).success ? [] : [issue$3(plan, "invalidLink")];
14191
14282
  case "repeater": return validateRepeaterPlan(plan, value, ctx);
14192
14283
  case "group": return validateGroupPlan(plan, value, ctx);
@@ -14959,6 +15050,18 @@ var init_accessibleSurfaces = __esmMin((() => {
14959
15050
  init_onColor();
14960
15051
  }));
14961
15052
  //#endregion
15053
+ //#region ../theme-core/src/site-styles/lookOptionGroups.ts
15054
+ function defineLookOptionGroup(group) {
15055
+ defaultOption(group);
15056
+ return group;
15057
+ }
15058
+ function defaultOption(group) {
15059
+ const option = group.options.find((candidate) => candidate.id === group.defaultOptionId);
15060
+ if (option) return option;
15061
+ throw new Error(`Look option group "${group.id}" defaults to missing option "${group.defaultOptionId}".`);
15062
+ }
15063
+ var init_lookOptionGroups = __esmMin((() => {}));
15064
+ //#endregion
14962
15065
  //#region ../theme-core/src/site-styles/types.ts
14963
15066
  /**
14964
15067
  * Defines a literal-preserving catalog while rejecting top-level extra keys on
@@ -15107,7 +15210,7 @@ var init_types$15 = __esmMin((() => {
15107
15210
  //#region ../theme-core/src/site-styles/appearancePresetResolution.ts
15108
15211
  function assertValidOptionGroups(preset) {
15109
15212
  preset.optionGroups?.forEach((group) => {
15110
- if (!group.options.find((option) => option.id === group.selectedOptionId)) throw new Error(`Appearance preset "${preset.id}" option group "${group.id}" selects missing option "${group.selectedOptionId}".`);
15213
+ defineLookOptionGroup(group);
15111
15214
  });
15112
15215
  }
15113
15216
  function defineBlockAppearancePreset(preset) {
@@ -15115,772 +15218,655 @@ function defineBlockAppearancePreset(preset) {
15115
15218
  return preset;
15116
15219
  }
15117
15220
  var init_appearancePresetResolution = __esmMin((() => {
15221
+ init_lookOptionGroups();
15118
15222
  init_types$15();
15119
- }));
15120
- //#endregion
15121
- //#region ../theme-core/src/site-styles/blockAppearancePresets.ts
15122
- var blockAppearancePresets;
15223
+ })), brandScrimOptionGroups, microBannerLayoutPatches;
15123
15224
  var init_blockAppearancePresets = __esmMin((() => {
15124
15225
  init_appearancePresetResolution();
15125
15226
  init_types$15();
15126
- blockAppearancePresets = [
15127
- defineBlockAppearancePreset({
15128
- kind: "block-design",
15129
- id: "hero-immersive-image",
15130
- target: "hero",
15131
- label: "Immersive image hero",
15132
- blockKinds: ["block.hero"],
15133
- constraints: { layoutFamilies: ["centered", "compact"] },
15134
- layoutPatches: [{
15135
- constraints: { layoutVariantKeys: ["micro"] },
15136
- designPatch: {
15137
- sectionHeight: "banner",
15138
- heroTypographyScale: "display"
15139
- }
15140
- }],
15141
- design: {
15142
- sectionSurface: "hero-image",
15143
- contentFrame: plainFrame,
15144
- itemSurface: "none",
15145
- sectionHeight: "hero",
15146
- heroComposition: "center",
15147
- heroTypographyScale: "display",
15148
- imageSurfaceTreatment: { kind: "neutral-wash" }
15227
+ brandScrimOptionGroups = [{
15228
+ id: "image-surface-treatment",
15229
+ label: "Treatment",
15230
+ defaultOptionId: "brand-scrim-primary",
15231
+ options: [{
15232
+ id: "brand-scrim-primary",
15233
+ label: "Brand scrim",
15234
+ designPatch: { imageSurfaceTreatment: {
15235
+ kind: "brand-scrim",
15236
+ token: "primary"
15237
+ } }
15238
+ }, {
15239
+ id: "neutral-scrim",
15240
+ label: "Neutral scrim",
15241
+ designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
15242
+ }]
15243
+ }];
15244
+ microBannerLayoutPatches = [{
15245
+ constraints: { layoutVariantKeys: ["micro"] },
15246
+ designPatch: { sectionHeight: "banner" }
15247
+ }];
15248
+ defineBlockAppearancePreset({
15249
+ id: "hero-immersive-image",
15250
+ target: "hero",
15251
+ label: "Immersive image hero",
15252
+ blockKinds: ["block.hero"],
15253
+ constraints: { layoutFamilies: ["centered", "compact"] },
15254
+ layoutPatches: [{
15255
+ constraints: { layoutVariantKeys: ["micro"] },
15256
+ designPatch: {
15257
+ sectionHeight: "banner",
15258
+ heroTypographyScale: "display"
15149
15259
  }
15150
- }),
15151
- defineBlockAppearancePreset({
15152
- kind: "block-design",
15153
- id: "hero-bottom-left-panel",
15154
- target: "hero",
15155
- label: "Bottom-left panel hero",
15156
- blockKinds: ["block.hero"],
15157
- constraints: { layoutFamilies: ["centered", "compact"] },
15158
- optionGroups: [{
15159
- id: "image-surface-treatment",
15160
- label: "Treatment",
15161
- selectedOptionId: "neutral-scrim",
15162
- options: [{
15163
- id: "neutral-scrim",
15164
- label: "Neutral scrim",
15165
- designPatch: { imageSurfaceTreatment: {
15166
- kind: "neutral-scrim",
15167
- intensity: "balanced"
15168
- } }
15169
- }, {
15170
- id: "brand-scrim-primary",
15171
- label: "Brand scrim",
15172
- designPatch: { imageSurfaceTreatment: {
15173
- kind: "brand-scrim",
15174
- token: "primary",
15175
- intensity: "balanced"
15176
- } }
15177
- }]
15178
- }],
15179
- layoutPatches: [{
15180
- constraints: { layoutVariantKeys: ["micro"] },
15181
- designPatch: {
15182
- sectionHeight: "banner",
15183
- heroTypographyScale: "editorial"
15184
- }
15185
- }],
15186
- design: {
15187
- sectionSurface: "hero-image",
15188
- contentFrame: panelFrame("raised"),
15189
- itemSurface: "none",
15190
- sectionHeight: "immersive",
15191
- heroComposition: "bottom-left",
15192
- heroTypographyScale: "display",
15193
- imageSurfaceTreatment: {
15260
+ }],
15261
+ design: {
15262
+ sectionSurface: "hero-image",
15263
+ contentFrame: plainFrame,
15264
+ itemSurface: "none",
15265
+ sectionHeight: "hero",
15266
+ heroComposition: "center",
15267
+ heroTypographyScale: "display",
15268
+ imageSurfaceTreatment: { kind: "neutral-wash" }
15269
+ }
15270
+ }), defineBlockAppearancePreset({
15271
+ id: "hero-bottom-left-panel",
15272
+ target: "hero",
15273
+ label: "Bottom-left panel hero",
15274
+ blockKinds: ["block.hero"],
15275
+ constraints: { layoutFamilies: ["centered", "compact"] },
15276
+ optionGroups: [{
15277
+ id: "image-surface-treatment",
15278
+ label: "Treatment",
15279
+ defaultOptionId: "neutral-scrim",
15280
+ options: [{
15281
+ id: "neutral-scrim",
15282
+ label: "Neutral scrim",
15283
+ designPatch: { imageSurfaceTreatment: {
15194
15284
  kind: "neutral-scrim",
15195
15285
  intensity: "balanced"
15196
- }
15197
- }
15198
- }),
15199
- defineBlockAppearancePreset({
15200
- kind: "block-design",
15201
- id: "hero-poster-image",
15202
- target: "hero",
15203
- label: "Poster image hero",
15204
- blockKinds: ["block.hero"],
15205
- constraints: { layoutFamilies: ["centered", "compact"] },
15206
- layoutPatches: [{
15207
- constraints: { layoutVariantKeys: ["micro"] },
15208
- designPatch: {
15209
- sectionHeight: "banner",
15210
- heroTypographyScale: "display"
15211
- }
15212
- }],
15213
- design: {
15214
- sectionSurface: "hero-image",
15215
- contentFrame: plainFrame,
15216
- itemSurface: "none",
15217
- sectionHeight: "immersive",
15218
- heroComposition: "center",
15219
- heroTypographyScale: "poster",
15220
- imageSurfaceTreatment: {
15286
+ } }
15287
+ }, {
15288
+ id: "brand-scrim-primary",
15289
+ label: "Brand scrim",
15290
+ designPatch: { imageSurfaceTreatment: {
15221
15291
  kind: "brand-scrim",
15222
15292
  token: "primary",
15223
- intensity: "strong"
15224
- }
15225
- }
15226
- }),
15227
- defineBlockAppearancePreset({
15228
- kind: "block-design",
15229
- id: "hero-brand-scrim",
15230
- target: "hero",
15231
- label: "Brand scrim image hero",
15232
- blockKinds: ["block.hero"],
15233
- constraints: { layoutFamilies: ["centered", "compact"] },
15234
- optionGroups: [{
15235
- id: "image-surface-treatment",
15236
- label: "Treatment",
15237
- selectedOptionId: "brand-scrim-primary",
15238
- options: [{
15239
- id: "brand-scrim-primary",
15240
- label: "Brand scrim",
15241
- designPatch: { imageSurfaceTreatment: {
15242
- kind: "brand-scrim",
15243
- token: "primary"
15244
- } }
15245
- }, {
15246
- id: "neutral-scrim",
15247
- label: "Neutral scrim",
15248
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
15249
- }]
15250
- }],
15251
- layoutPatches: [{
15252
- constraints: { layoutVariantKeys: ["micro"] },
15253
- designPatch: { sectionHeight: "banner" }
15254
- }],
15255
- design: {
15256
- sectionSurface: "hero-image",
15257
- contentFrame: plainFrame,
15258
- itemSurface: "none",
15259
- sectionHeight: "immersive",
15260
- heroComposition: "center",
15261
- heroTypographyScale: "display",
15262
- imageSurfaceTreatment: {
15263
- kind: "brand-scrim",
15264
- token: "primary"
15265
- }
15266
- }
15267
- }),
15268
- defineBlockAppearancePreset({
15269
- kind: "block-design",
15270
- id: "hero-brand-scrim-fixed-frame",
15271
- target: "hero",
15272
- label: "Fixed-frame brand scrim hero",
15273
- blockKinds: ["block.hero"],
15274
- constraints: { layoutFamilies: ["centered", "compact"] },
15275
- optionGroups: [{
15276
- id: "image-surface-treatment",
15277
- label: "Treatment",
15278
- selectedOptionId: "brand-scrim-primary",
15279
- options: [{
15280
- id: "brand-scrim-primary",
15281
- label: "Brand scrim",
15282
- designPatch: { imageSurfaceTreatment: {
15283
- kind: "brand-scrim",
15284
- token: "primary"
15285
- } }
15286
- }, {
15287
- id: "neutral-scrim",
15288
- label: "Neutral scrim",
15289
- designPatch: { imageSurfaceTreatment: { kind: "neutral-scrim" } }
15290
- }]
15291
- }],
15292
- layoutPatches: [{
15293
- constraints: { layoutVariantKeys: ["micro"] },
15294
- designPatch: { sectionHeight: "banner" }
15295
- }],
15296
- design: {
15297
- sectionSurface: "hero-image",
15298
- contentFrame: plainFrame,
15299
- itemSurface: "none",
15300
- sectionHeight: "immersive",
15301
- heroComposition: "center",
15302
- heroTypographyScale: "display",
15303
- imageSurfaceTreatment: {
15304
- kind: "brand-scrim",
15305
- token: "primary"
15306
- },
15307
- imageSurfaceMotion: "fixed-frame",
15308
- eyebrowTreatment: "accent-pill-bounce"
15309
- }
15310
- }),
15311
- defineBlockAppearancePreset({
15312
- kind: "block-design",
15313
- id: "hero-brand-depth-expressive",
15314
- target: "hero",
15315
- label: "Expressive brand-depth hero",
15316
- blockKinds: ["block.hero"],
15317
- constraints: { layoutFamilies: ["centered", "compact"] },
15318
- design: {
15319
- sectionSurface: "brand-depth-band",
15320
- contentFrame: plainFrame,
15321
- itemSurface: "none",
15322
- heroComposition: "center",
15323
- heroTypographyScale: "editorial",
15324
- eyebrowTreatment: "accent-pill-bounce"
15325
- }
15326
- }),
15327
- defineBlockAppearancePreset({
15328
- kind: "block-design",
15329
- id: "hero-contained-intro",
15330
- target: "hero",
15331
- label: "Contained intro hero",
15332
- blockKinds: ["block.hero"],
15333
- design: {
15334
- sectionSurface: "muted-band",
15335
- contentFrame: panelFrame("inset"),
15336
- itemSurface: "none",
15337
- heroComposition: "center",
15338
- heroTypographyScale: "editorial"
15339
- }
15340
- }),
15341
- defineBlockAppearancePreset({
15342
- kind: "block-design",
15343
- id: "hero-split-editorial",
15344
- target: "hero",
15345
- label: "Editorial split hero",
15346
- blockKinds: ["block.hero"],
15347
- constraints: { layoutFamilies: ["split"] },
15348
- design: {
15349
- sectionSurface: "base",
15350
- contentFrame: plainFrame,
15351
- itemSurface: "none",
15352
- heroTypographyScale: "editorial"
15353
- }
15354
- }),
15355
- defineBlockAppearancePreset({
15356
- kind: "block-design",
15357
- id: "hero-split-brand",
15358
- target: "hero",
15359
- label: "Brand split hero",
15360
- blockKinds: ["block.hero"],
15361
- constraints: { layoutFamilies: ["split"] },
15362
- design: {
15363
- sectionSurface: "brand-depth-band",
15364
- contentFrame: plainFrame,
15365
- itemSurface: "none",
15366
- heroTypographyScale: "display",
15367
- eyebrowTreatment: "accent-pill-bounce"
15368
- }
15369
- }),
15370
- defineBlockAppearancePreset({
15371
- kind: "block-design",
15372
- id: "hero-split-soft-panel",
15373
- target: "hero",
15374
- label: "Soft panel split hero",
15375
- blockKinds: ["block.hero"],
15376
- constraints: { layoutFamilies: ["split"] },
15377
- design: {
15378
- sectionSurface: "muted-band",
15379
- contentFrame: panelFrame("raised"),
15380
- itemSurface: "none",
15293
+ intensity: "balanced"
15294
+ } }
15295
+ }]
15296
+ }],
15297
+ layoutPatches: [{
15298
+ constraints: { layoutVariantKeys: ["micro"] },
15299
+ designPatch: {
15300
+ sectionHeight: "banner",
15381
15301
  heroTypographyScale: "editorial"
15382
15302
  }
15383
- }),
15384
- defineBlockAppearancePreset({
15385
- kind: "block-design",
15386
- id: "hero-split-accent",
15387
- target: "hero",
15388
- label: "Accent split hero",
15389
- blockKinds: ["block.hero"],
15390
- constraints: { layoutFamilies: ["split"] },
15391
- design: {
15392
- sectionSurface: "accent-band",
15393
- contentFrame: panelFrame("raised"),
15394
- itemSurface: "none",
15303
+ }],
15304
+ design: {
15305
+ sectionSurface: "hero-image",
15306
+ contentFrame: panelFrame("raised"),
15307
+ itemSurface: "none",
15308
+ sectionHeight: "immersive",
15309
+ heroComposition: "bottom-left",
15310
+ heroTypographyScale: "display",
15311
+ imageSurfaceTreatment: {
15312
+ kind: "neutral-scrim",
15313
+ intensity: "balanced"
15314
+ }
15315
+ }
15316
+ }), defineBlockAppearancePreset({
15317
+ id: "hero-poster-image",
15318
+ target: "hero",
15319
+ label: "Poster image hero",
15320
+ blockKinds: ["block.hero"],
15321
+ constraints: { layoutFamilies: ["centered", "compact"] },
15322
+ layoutPatches: [{
15323
+ constraints: { layoutVariantKeys: ["micro"] },
15324
+ designPatch: {
15325
+ sectionHeight: "banner",
15395
15326
  heroTypographyScale: "display"
15396
15327
  }
15397
- }),
15398
- defineBlockAppearancePreset({
15399
- kind: "block-design",
15400
- id: "intro-editorial-statement",
15401
- target: "intro",
15402
- label: "Editorial intro statement",
15403
- blockKinds: ["block.intro"],
15404
- constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
15405
- design: {
15406
- sectionSurface: "base",
15407
- contentFrame: plainFrame,
15408
- itemSurface: "none",
15409
- composition: {
15410
- kind: "intro",
15411
- treatment: "editorial-statement"
15412
- }
15413
- }
15414
- }),
15415
- defineBlockAppearancePreset({
15416
- kind: "block-design",
15417
- id: "intro-portrait-bio",
15418
- target: "intro",
15419
- label: "Portrait and bio",
15420
- blockKinds: ["block.intro"],
15421
- constraints: { layoutVariantKeys: ["media-copy"] },
15422
- design: {
15423
- sectionSurface: "base",
15424
- contentFrame: plainFrame,
15425
- itemSurface: "none",
15426
- composition: {
15427
- kind: "intro",
15428
- treatment: "portrait-bio"
15429
- }
15430
- }
15431
- }),
15432
- defineBlockAppearancePreset({
15433
- kind: "block-design",
15434
- id: "offerings-preview-default-cards",
15435
- target: "offerings",
15436
- label: "Default offering cards",
15437
- blockKinds: ["block.offerings-preview"],
15438
- design: {
15439
- sectionSurface: "base",
15440
- contentFrame: plainFrame,
15441
- itemSurface: "default"
15442
- }
15443
- }),
15444
- defineBlockAppearancePreset({
15445
- kind: "block-design",
15446
- id: "offerings-preview-secondary-cards",
15447
- target: "offerings",
15448
- label: "Secondary offering cards",
15449
- blockKinds: ["block.offerings-preview"],
15450
- design: {
15451
- sectionSurface: "muted-band",
15452
- contentFrame: plainFrame,
15453
- itemSurface: "inset"
15454
- }
15455
- }),
15456
- defineBlockAppearancePreset({
15457
- kind: "block-design",
15458
- id: "offerings-preview-non-carded",
15459
- target: "offerings",
15460
- label: "Non-carded offerings",
15461
- blockKinds: ["block.offerings-preview"],
15462
- design: {
15463
- sectionSurface: "muted-band",
15464
- contentFrame: plainFrame,
15465
- itemSurface: "editorial"
15466
- }
15467
- }),
15468
- defineBlockAppearancePreset({
15469
- kind: "block-design",
15470
- id: "offerings-preview-paired-feature-cards",
15471
- target: "offerings",
15472
- label: "Paired feature cards",
15473
- blockKinds: ["block.offerings-preview"],
15474
- constraints: { layoutVariantKeys: ["cards"] },
15475
- design: {
15476
- sectionSurface: "base",
15477
- contentFrame: plainFrame,
15478
- itemSurface: "none"
15479
- }
15480
- }),
15481
- defineBlockAppearancePreset({
15482
- kind: "block-design",
15483
- id: "offerings-preview-open-editorial-columns",
15484
- target: "offerings",
15485
- label: "Open editorial columns",
15486
- blockKinds: ["block.offerings-preview"],
15487
- constraints: { layoutVariantKeys: ["cards"] },
15488
- design: {
15489
- sectionSurface: "base",
15490
- contentFrame: plainFrame,
15491
- itemSurface: "none"
15492
- }
15493
- }),
15494
- defineBlockAppearancePreset({
15495
- kind: "block-design",
15496
- id: "offerings-preview-joined-programme-panel",
15497
- target: "offerings",
15498
- label: "Joined programme panel",
15499
- blockKinds: ["block.offerings-preview"],
15500
- constraints: { layoutVariantKeys: ["cards"] },
15501
- design: {
15502
- sectionSurface: "base",
15503
- contentFrame: plainFrame,
15504
- itemSurface: "none"
15505
- }
15506
- }),
15507
- defineBlockAppearancePreset({
15508
- kind: "block-design",
15509
- id: "feature-cards-raised-rule",
15510
- target: "feature-cards",
15511
- label: "Raised cards with rule",
15512
- blockKinds: ["block.feature-cards"],
15513
- design: {
15514
- sectionSurface: "base",
15515
- contentFrame: plainFrame,
15516
- itemSurface: "raised"
15517
- }
15518
- }),
15519
- defineBlockAppearancePreset({
15520
- kind: "block-design",
15521
- id: "feature-cards-bold-colors",
15522
- target: "feature-cards",
15523
- label: "Bold colour-blocked cards",
15524
- blockKinds: ["block.feature-cards"],
15525
- design: {
15526
- sectionSurface: "base",
15527
- contentFrame: plainFrame,
15528
- itemSurface: "color-blocked"
15529
- }
15530
- }),
15531
- defineBlockAppearancePreset({
15532
- kind: "block-design",
15533
- id: "feature-cards-editorial-columns",
15534
- target: "feature-cards",
15535
- label: "Editorial open columns",
15536
- blockKinds: ["block.feature-cards"],
15537
- design: {
15538
- sectionSurface: "base",
15539
- contentFrame: plainFrame,
15540
- itemSurface: "editorial"
15541
- }
15542
- }),
15543
- defineBlockAppearancePreset({
15544
- kind: "block-design",
15545
- id: "feature-cards-asymmetric-emphasis",
15546
- target: "feature-cards",
15547
- label: "Asymmetric emphasis pair",
15548
- blockKinds: ["block.feature-cards"],
15549
- constraints: { layoutFamilies: ["grid"] },
15550
- design: {
15551
- sectionSurface: "base",
15552
- contentFrame: plainFrame,
15553
- itemSurface: "none",
15554
- composition: {
15555
- kind: "feature-cards",
15556
- treatment: "asymmetric-emphasis"
15557
- }
15558
- }
15559
- }),
15560
- defineBlockAppearancePreset({
15561
- kind: "block-design",
15562
- id: "feature-cards-framed-programme",
15563
- target: "feature-cards",
15564
- label: "Framed programme cards",
15565
- blockKinds: ["block.feature-cards"],
15566
- constraints: { layoutFamilies: ["grid"] },
15567
- design: {
15568
- sectionSurface: "brand-depth-band",
15569
- contentFrame: plainFrame,
15570
- itemSurface: "inset",
15571
- composition: {
15572
- kind: "feature-cards",
15573
- treatment: "framed-programme"
15574
- }
15575
- }
15576
- }),
15577
- defineBlockAppearancePreset({
15578
- kind: "block-design",
15579
- id: "feature-cards-soft-panels",
15580
- target: "feature-cards",
15581
- label: "Soft tinted panels",
15582
- blockKinds: ["block.feature-cards"],
15583
- design: {
15584
- sectionSurface: "base",
15585
- contentFrame: plainFrame,
15586
- itemSurface: "inset"
15587
- }
15588
- }),
15589
- defineBlockAppearancePreset({
15590
- kind: "block-design",
15591
- id: "feature-cards-editorial-diptych",
15592
- target: "feature-cards",
15593
- label: "Editorial diptych",
15594
- blockKinds: ["block.feature-cards"],
15595
- constraints: { layoutVariantKeys: ["editorial-diptych"] },
15596
- design: {
15597
- sectionSurface: "base",
15598
- contentFrame: plainFrame,
15599
- itemSurface: "flat"
15600
- }
15601
- }),
15602
- defineBlockAppearancePreset({
15603
- kind: "block-design",
15604
- id: "feature-cards-editorial-pathways",
15605
- target: "feature-cards",
15606
- label: "Editorial pathways",
15607
- blockKinds: ["block.feature-cards"],
15608
- constraints: { layoutVariantKeys: ["editorial-pathways"] },
15609
- design: {
15610
- sectionSurface: "base",
15611
- contentFrame: plainFrame,
15612
- itemSurface: "flat"
15613
- }
15614
- }),
15615
- defineBlockAppearancePreset({
15616
- kind: "block-design",
15617
- id: "feature-cards-photo-tiles",
15618
- target: "feature-cards",
15619
- label: "Photo tiles",
15620
- blockKinds: ["block.feature-cards"],
15621
- design: {
15622
- sectionSurface: "base",
15623
- contentFrame: plainFrame,
15624
- itemSurface: "raised"
15625
- }
15626
- }),
15627
- defineBlockAppearancePreset({
15628
- kind: "block-design",
15629
- id: "events-lined-panel",
15630
- target: "events",
15631
- label: "Raised event panel",
15632
- blockKinds: ["block.event-calendar", "block.event-listing"],
15633
- design: {
15634
- sectionSurface: "base",
15635
- contentFrame: panelFrame("raised"),
15636
- itemSurface: "none"
15637
- }
15638
- }),
15639
- defineBlockAppearancePreset({
15640
- kind: "block-design",
15641
- id: "events-ruled-register",
15642
- target: "events",
15643
- label: "Ruled event register",
15644
- blockKinds: ["block.event-calendar", "block.event-listing"],
15645
- design: {
15646
- sectionSurface: "brand-depth-band",
15647
- contentFrame: plainFrame,
15648
- itemSurface: "none",
15649
- eventListTreatment: "ruled-register"
15650
- }
15651
- }),
15652
- defineBlockAppearancePreset({
15653
- kind: "block-design",
15654
- id: "events-editorial-register",
15655
- target: "events",
15656
- label: "Editorial event register",
15657
- blockKinds: ["block.event-calendar", "block.event-listing"],
15658
- design: {
15659
- sectionSurface: "base",
15660
- contentFrame: plainFrame,
15661
- itemSurface: "none",
15662
- eventListTreatment: "editorial-register"
15663
- }
15664
- }),
15665
- defineBlockAppearancePreset({
15666
- kind: "block-design",
15667
- id: "events-dense-index",
15668
- target: "events",
15669
- label: "Dense event index",
15670
- blockKinds: ["block.event-calendar", "block.event-listing"],
15671
- design: {
15672
- sectionSurface: "accent-band",
15673
- contentFrame: plainFrame,
15674
- itemSurface: "none",
15675
- eventListTreatment: "dense-index"
15676
- }
15677
- }),
15678
- defineBlockAppearancePreset({
15679
- kind: "block-design",
15680
- id: "schedule-details-brand-depth",
15681
- target: "events",
15682
- label: "Brand-depth schedule details",
15683
- blockKinds: ["block.event-details", "block.course-details"],
15684
- design: {
15685
- sectionSurface: "brand-depth-band",
15686
- contentFrame: plainFrame,
15687
- itemSurface: "none",
15688
- tileTreatment: "brand-depth"
15689
- }
15690
- }),
15691
- defineBlockAppearancePreset({
15692
- kind: "block-design",
15693
- id: "media-text-flush-feature",
15694
- target: "media-text",
15695
- label: "Flush media feature",
15696
- blockKinds: ["block.media-text"],
15697
- design: {
15698
- sectionSurface: "muted-band",
15699
- contentFrame: flushPanelFrame({ bleed: "start" }),
15700
- itemSurface: "none"
15701
- }
15702
- }),
15703
- defineBlockAppearancePreset({
15704
- kind: "block-design",
15705
- id: "testimonials-simple-cards",
15706
- target: "testimonials",
15707
- label: "Simple testimonial cards",
15708
- blockKinds: ["block.testimonials"],
15709
- design: {
15710
- sectionSurface: "base",
15711
- contentFrame: plainFrame,
15712
- itemSurface: "default"
15713
- }
15714
- }),
15715
- defineBlockAppearancePreset({
15716
- kind: "block-design",
15717
- id: "testimonials-raised-panel",
15718
- target: "testimonials",
15719
- label: "Raised testimonial panel",
15720
- blockKinds: ["block.testimonials"],
15721
- design: {
15722
- sectionSurface: "muted-band",
15723
- contentFrame: panelFrame("raised"),
15724
- itemSurface: "raised"
15725
- }
15726
- }),
15727
- defineBlockAppearancePreset({
15728
- kind: "block-design",
15729
- id: "testimonials-accent-panel",
15730
- target: "testimonials",
15731
- label: "Accent testimonial panel",
15732
- blockKinds: ["block.testimonials"],
15733
- design: {
15734
- sectionSurface: "accent-band",
15735
- contentFrame: panelFrame("raised"),
15736
- itemSurface: "raised"
15737
- }
15738
- }),
15739
- defineBlockAppearancePreset({
15740
- kind: "block-design",
15741
- id: "testimonials-default-cards",
15742
- target: "testimonials",
15743
- label: "Default cards",
15744
- blockKinds: ["block.testimonials"],
15745
- design: {
15746
- sectionSurface: "base",
15747
- contentFrame: plainFrame,
15748
- itemSurface: "none",
15749
- testimonialCardTreatment: "default"
15750
- }
15751
- }),
15752
- defineBlockAppearancePreset({
15753
- kind: "block-design",
15754
- id: "testimonials-statement-cards",
15755
- target: "testimonials",
15756
- label: "Statement cards",
15757
- blockKinds: ["block.testimonials"],
15758
- design: {
15759
- sectionSurface: "accent-band",
15760
- contentFrame: plainFrame,
15761
- itemSurface: "raised",
15762
- testimonialCardTreatment: "statement"
15763
- }
15764
- }),
15765
- defineBlockAppearancePreset({
15766
- kind: "block-design",
15767
- id: "testimonials-brand-statement-cards",
15768
- target: "testimonials",
15769
- label: "Brand statement cards",
15770
- blockKinds: ["block.testimonials"],
15771
- design: {
15772
- sectionSurface: "brand-depth-band",
15773
- contentFrame: plainFrame,
15774
- itemSurface: "raised",
15775
- testimonialCardTreatment: "statement"
15776
- }
15777
- }),
15778
- defineBlockAppearancePreset({
15779
- kind: "block-design",
15780
- id: "testimonials-non-carded",
15781
- target: "testimonials",
15782
- label: "Non-carded",
15783
- blockKinds: ["block.testimonials"],
15784
- design: {
15785
- sectionSurface: "muted-band",
15786
- contentFrame: plainFrame,
15787
- itemSurface: "none",
15788
- testimonialCardTreatment: "non-carded"
15789
- }
15790
- }),
15791
- defineBlockAppearancePreset({
15792
- kind: "block-design",
15793
- id: "testimonials-evergreen-lead",
15794
- target: "testimonials",
15795
- label: "Evergreen lead",
15796
- blockKinds: ["block.testimonials"],
15797
- constraints: { layoutVariantKeys: ["featured-editorial"] },
15798
- design: {
15799
- sectionSurface: "base",
15800
- contentFrame: plainFrame,
15801
- itemSurface: "none"
15802
- }
15803
- }),
15804
- defineBlockAppearancePreset({
15805
- kind: "block-design",
15806
- id: "testimonials-room-and-response",
15807
- target: "testimonials",
15808
- label: "Room and response",
15809
- blockKinds: ["block.testimonials"],
15810
- constraints: { layoutVariantKeys: ["featured-editorial"] },
15811
- design: {
15812
- sectionSurface: "base",
15813
- contentFrame: plainFrame,
15814
- itemSurface: "none"
15815
- }
15816
- }),
15817
- defineBlockAppearancePreset({
15818
- kind: "block-design",
15819
- id: "testimonials-open-floor",
15820
- target: "testimonials",
15821
- label: "Open floor",
15822
- blockKinds: ["block.testimonials"],
15823
- constraints: { layoutVariantKeys: ["featured-editorial"] },
15824
- design: {
15825
- sectionSurface: "base",
15826
- contentFrame: plainFrame,
15827
- itemSurface: "none"
15828
- }
15829
- }),
15830
- defineBlockAppearancePreset({
15831
- kind: "block-design",
15832
- id: "faq-base-accordion",
15833
- target: "faq",
15834
- label: "Base accordion FAQ",
15835
- blockKinds: ["block.faq"],
15836
- design: {
15837
- sectionSurface: "base",
15838
- contentFrame: plainFrame,
15839
- itemSurface: "default"
15840
- }
15841
- }),
15842
- defineBlockAppearancePreset({
15843
- kind: "block-design",
15844
- id: "faq-contained-help",
15845
- target: "faq",
15846
- label: "Contained help panel",
15847
- blockKinds: ["block.faq"],
15848
- design: {
15849
- sectionSurface: "muted-band",
15850
- contentFrame: panelFrame("inset"),
15851
- itemSurface: "default"
15852
- }
15853
- }),
15854
- defineBlockAppearancePreset({
15855
- kind: "block-design",
15856
- id: "contact-form-panel",
15857
- target: "contact-form",
15858
- label: "Raised form panel",
15859
- blockKinds: ["block.form"],
15860
- design: {
15861
- sectionSurface: "muted-band",
15862
- contentFrame: panelFrame("raised"),
15863
- itemSurface: "none"
15864
- }
15865
- }),
15866
- defineBlockAppearancePreset({
15867
- kind: "block-design",
15868
- id: "cta-accent-band",
15869
- target: "cta",
15870
- label: "Accent CTA band",
15871
- blockKinds: ["block.cta-full"],
15872
- design: {
15873
- sectionSurface: "accent-band",
15874
- contentFrame: plainFrame,
15875
- itemSurface: "none",
15876
- eyebrowTreatment: "accent"
15877
- }
15878
- })
15879
- ];
15328
+ }],
15329
+ design: {
15330
+ sectionSurface: "hero-image",
15331
+ contentFrame: plainFrame,
15332
+ itemSurface: "none",
15333
+ sectionHeight: "immersive",
15334
+ heroComposition: "center",
15335
+ heroTypographyScale: "poster",
15336
+ imageSurfaceTreatment: {
15337
+ kind: "brand-scrim",
15338
+ token: "primary",
15339
+ intensity: "strong"
15340
+ }
15341
+ }
15342
+ }), defineBlockAppearancePreset({
15343
+ id: "hero-brand-scrim",
15344
+ target: "hero",
15345
+ label: "Brand scrim image hero",
15346
+ blockKinds: ["block.hero"],
15347
+ constraints: { layoutFamilies: ["centered", "compact"] },
15348
+ optionGroups: brandScrimOptionGroups,
15349
+ layoutPatches: microBannerLayoutPatches,
15350
+ design: {
15351
+ sectionSurface: "hero-image",
15352
+ contentFrame: plainFrame,
15353
+ itemSurface: "none",
15354
+ sectionHeight: "immersive",
15355
+ heroComposition: "center",
15356
+ heroTypographyScale: "display",
15357
+ imageSurfaceTreatment: {
15358
+ kind: "brand-scrim",
15359
+ token: "primary"
15360
+ }
15361
+ }
15362
+ }), defineBlockAppearancePreset({
15363
+ id: "hero-brand-scrim-fixed-frame",
15364
+ target: "hero",
15365
+ label: "Fixed-frame brand scrim hero",
15366
+ blockKinds: ["block.hero"],
15367
+ constraints: { layoutFamilies: ["centered", "compact"] },
15368
+ optionGroups: brandScrimOptionGroups,
15369
+ layoutPatches: microBannerLayoutPatches,
15370
+ design: {
15371
+ sectionSurface: "hero-image",
15372
+ contentFrame: plainFrame,
15373
+ itemSurface: "none",
15374
+ sectionHeight: "immersive",
15375
+ heroComposition: "center",
15376
+ heroTypographyScale: "display",
15377
+ imageSurfaceTreatment: {
15378
+ kind: "brand-scrim",
15379
+ token: "primary"
15380
+ },
15381
+ imageSurfaceMotion: "fixed-frame",
15382
+ eyebrowTreatment: "accent-pill-bounce"
15383
+ }
15384
+ }), defineBlockAppearancePreset({
15385
+ id: "hero-brand-depth-expressive",
15386
+ target: "hero",
15387
+ label: "Expressive brand-depth hero",
15388
+ blockKinds: ["block.hero"],
15389
+ constraints: { layoutFamilies: ["centered", "compact"] },
15390
+ design: {
15391
+ sectionSurface: "brand-depth-band",
15392
+ contentFrame: plainFrame,
15393
+ itemSurface: "none",
15394
+ heroComposition: "center",
15395
+ heroTypographyScale: "editorial",
15396
+ eyebrowTreatment: "accent-pill-bounce"
15397
+ }
15398
+ }), defineBlockAppearancePreset({
15399
+ id: "hero-contained-intro",
15400
+ target: "hero",
15401
+ label: "Contained intro hero",
15402
+ blockKinds: ["block.hero"],
15403
+ design: {
15404
+ sectionSurface: "muted-band",
15405
+ contentFrame: panelFrame("inset"),
15406
+ itemSurface: "none",
15407
+ heroComposition: "center",
15408
+ heroTypographyScale: "editorial"
15409
+ }
15410
+ }), defineBlockAppearancePreset({
15411
+ id: "hero-split-editorial",
15412
+ target: "hero",
15413
+ label: "Editorial split hero",
15414
+ blockKinds: ["block.hero"],
15415
+ constraints: { layoutFamilies: ["split"] },
15416
+ design: {
15417
+ sectionSurface: "base",
15418
+ contentFrame: plainFrame,
15419
+ itemSurface: "none",
15420
+ heroTypographyScale: "editorial"
15421
+ }
15422
+ }), defineBlockAppearancePreset({
15423
+ id: "hero-split-brand",
15424
+ target: "hero",
15425
+ label: "Brand split hero",
15426
+ blockKinds: ["block.hero"],
15427
+ constraints: { layoutFamilies: ["split"] },
15428
+ design: {
15429
+ sectionSurface: "brand-depth-band",
15430
+ contentFrame: plainFrame,
15431
+ itemSurface: "none",
15432
+ heroTypographyScale: "display",
15433
+ eyebrowTreatment: "accent-pill-bounce"
15434
+ }
15435
+ }), defineBlockAppearancePreset({
15436
+ id: "hero-split-soft-panel",
15437
+ target: "hero",
15438
+ label: "Soft panel split hero",
15439
+ blockKinds: ["block.hero"],
15440
+ constraints: { layoutFamilies: ["split"] },
15441
+ design: {
15442
+ sectionSurface: "muted-band",
15443
+ contentFrame: panelFrame("raised"),
15444
+ itemSurface: "none",
15445
+ heroTypographyScale: "editorial"
15446
+ }
15447
+ }), defineBlockAppearancePreset({
15448
+ id: "hero-split-accent",
15449
+ target: "hero",
15450
+ label: "Accent split hero",
15451
+ blockKinds: ["block.hero"],
15452
+ constraints: { layoutFamilies: ["split"] },
15453
+ design: {
15454
+ sectionSurface: "accent-band",
15455
+ contentFrame: panelFrame("raised"),
15456
+ itemSurface: "none",
15457
+ heroTypographyScale: "display"
15458
+ }
15459
+ }), defineBlockAppearancePreset({
15460
+ id: "intro-editorial-statement",
15461
+ target: "intro",
15462
+ label: "Editorial intro statement",
15463
+ blockKinds: ["block.intro"],
15464
+ constraints: { layoutVariantKeys: ["centered-copy", "statement-copy"] },
15465
+ design: {
15466
+ sectionSurface: "base",
15467
+ contentFrame: plainFrame,
15468
+ itemSurface: "none",
15469
+ composition: {
15470
+ kind: "intro",
15471
+ treatment: "editorial-statement"
15472
+ }
15473
+ }
15474
+ }), defineBlockAppearancePreset({
15475
+ id: "intro-portrait-bio",
15476
+ target: "intro",
15477
+ label: "Portrait and bio",
15478
+ blockKinds: ["block.intro"],
15479
+ constraints: { layoutVariantKeys: ["media-copy"] },
15480
+ design: {
15481
+ sectionSurface: "base",
15482
+ contentFrame: plainFrame,
15483
+ itemSurface: "none",
15484
+ composition: {
15485
+ kind: "intro",
15486
+ treatment: "portrait-bio"
15487
+ }
15488
+ }
15489
+ }), defineBlockAppearancePreset({
15490
+ id: "offerings-preview-default-cards",
15491
+ target: "offerings",
15492
+ label: "Default offering cards",
15493
+ blockKinds: ["block.offerings-preview"],
15494
+ design: {
15495
+ sectionSurface: "base",
15496
+ contentFrame: plainFrame,
15497
+ itemSurface: "default"
15498
+ }
15499
+ }), defineBlockAppearancePreset({
15500
+ id: "offerings-preview-secondary-cards",
15501
+ target: "offerings",
15502
+ label: "Secondary offering cards",
15503
+ blockKinds: ["block.offerings-preview"],
15504
+ design: {
15505
+ sectionSurface: "muted-band",
15506
+ contentFrame: plainFrame,
15507
+ itemSurface: "inset"
15508
+ }
15509
+ }), defineBlockAppearancePreset({
15510
+ id: "offerings-preview-non-carded",
15511
+ target: "offerings",
15512
+ label: "Non-carded offerings",
15513
+ blockKinds: ["block.offerings-preview"],
15514
+ design: {
15515
+ sectionSurface: "muted-band",
15516
+ contentFrame: plainFrame,
15517
+ itemSurface: "editorial"
15518
+ }
15519
+ }), defineBlockAppearancePreset({
15520
+ id: "offerings-preview-paired-feature-cards",
15521
+ target: "offerings",
15522
+ label: "Paired feature cards",
15523
+ blockKinds: ["block.offerings-preview"],
15524
+ constraints: { layoutVariantKeys: ["cards"] },
15525
+ design: {
15526
+ sectionSurface: "base",
15527
+ contentFrame: plainFrame,
15528
+ itemSurface: "none"
15529
+ }
15530
+ }), defineBlockAppearancePreset({
15531
+ id: "offerings-preview-open-editorial-columns",
15532
+ target: "offerings",
15533
+ label: "Open editorial columns",
15534
+ blockKinds: ["block.offerings-preview"],
15535
+ constraints: { layoutVariantKeys: ["cards"] },
15536
+ design: {
15537
+ sectionSurface: "base",
15538
+ contentFrame: plainFrame,
15539
+ itemSurface: "none"
15540
+ }
15541
+ }), defineBlockAppearancePreset({
15542
+ id: "offerings-preview-joined-programme-panel",
15543
+ target: "offerings",
15544
+ label: "Joined programme panel",
15545
+ blockKinds: ["block.offerings-preview"],
15546
+ constraints: { layoutVariantKeys: ["cards"] },
15547
+ design: {
15548
+ sectionSurface: "base",
15549
+ contentFrame: plainFrame,
15550
+ itemSurface: "none"
15551
+ }
15552
+ }), defineBlockAppearancePreset({
15553
+ id: "feature-cards-raised-rule",
15554
+ target: "feature-cards",
15555
+ label: "Raised cards with rule",
15556
+ blockKinds: ["block.feature-cards"],
15557
+ design: {
15558
+ sectionSurface: "base",
15559
+ contentFrame: plainFrame,
15560
+ itemSurface: "raised"
15561
+ }
15562
+ }), defineBlockAppearancePreset({
15563
+ id: "feature-cards-bold-colors",
15564
+ target: "feature-cards",
15565
+ label: "Bold colour-blocked cards",
15566
+ blockKinds: ["block.feature-cards"],
15567
+ design: {
15568
+ sectionSurface: "base",
15569
+ contentFrame: plainFrame,
15570
+ itemSurface: "color-blocked"
15571
+ }
15572
+ }), defineBlockAppearancePreset({
15573
+ id: "feature-cards-editorial-columns",
15574
+ target: "feature-cards",
15575
+ label: "Editorial open columns",
15576
+ blockKinds: ["block.feature-cards"],
15577
+ design: {
15578
+ sectionSurface: "base",
15579
+ contentFrame: plainFrame,
15580
+ itemSurface: "editorial"
15581
+ }
15582
+ }), defineBlockAppearancePreset({
15583
+ id: "feature-cards-asymmetric-emphasis",
15584
+ target: "feature-cards",
15585
+ label: "Asymmetric emphasis pair",
15586
+ blockKinds: ["block.feature-cards"],
15587
+ constraints: { layoutFamilies: ["grid"] },
15588
+ design: {
15589
+ sectionSurface: "base",
15590
+ contentFrame: plainFrame,
15591
+ itemSurface: "none",
15592
+ composition: {
15593
+ kind: "feature-cards",
15594
+ treatment: "asymmetric-emphasis"
15595
+ }
15596
+ }
15597
+ }), defineBlockAppearancePreset({
15598
+ id: "feature-cards-framed-programme",
15599
+ target: "feature-cards",
15600
+ label: "Framed programme cards",
15601
+ blockKinds: ["block.feature-cards"],
15602
+ constraints: { layoutFamilies: ["grid"] },
15603
+ design: {
15604
+ sectionSurface: "brand-depth-band",
15605
+ contentFrame: plainFrame,
15606
+ itemSurface: "inset",
15607
+ composition: {
15608
+ kind: "feature-cards",
15609
+ treatment: "framed-programme"
15610
+ }
15611
+ }
15612
+ }), defineBlockAppearancePreset({
15613
+ id: "feature-cards-soft-panels",
15614
+ target: "feature-cards",
15615
+ label: "Soft tinted panels",
15616
+ blockKinds: ["block.feature-cards"],
15617
+ design: {
15618
+ sectionSurface: "base",
15619
+ contentFrame: plainFrame,
15620
+ itemSurface: "inset"
15621
+ }
15622
+ }), defineBlockAppearancePreset({
15623
+ id: "feature-cards-editorial-diptych",
15624
+ target: "feature-cards",
15625
+ label: "Editorial diptych",
15626
+ blockKinds: ["block.feature-cards"],
15627
+ constraints: { layoutVariantKeys: ["editorial-diptych"] },
15628
+ design: {
15629
+ sectionSurface: "base",
15630
+ contentFrame: plainFrame,
15631
+ itemSurface: "flat"
15632
+ }
15633
+ }), defineBlockAppearancePreset({
15634
+ id: "feature-cards-editorial-pathways",
15635
+ target: "feature-cards",
15636
+ label: "Editorial pathways",
15637
+ blockKinds: ["block.feature-cards"],
15638
+ constraints: { layoutVariantKeys: ["editorial-pathways"] },
15639
+ design: {
15640
+ sectionSurface: "base",
15641
+ contentFrame: plainFrame,
15642
+ itemSurface: "flat"
15643
+ }
15644
+ }), defineBlockAppearancePreset({
15645
+ id: "feature-cards-photo-tiles",
15646
+ target: "feature-cards",
15647
+ label: "Photo tiles",
15648
+ blockKinds: ["block.feature-cards"],
15649
+ design: {
15650
+ sectionSurface: "base",
15651
+ contentFrame: plainFrame,
15652
+ itemSurface: "raised"
15653
+ }
15654
+ }), defineBlockAppearancePreset({
15655
+ id: "events-lined-panel",
15656
+ target: "events",
15657
+ label: "Raised event panel",
15658
+ blockKinds: ["block.event-calendar", "block.event-listing"],
15659
+ design: {
15660
+ sectionSurface: "base",
15661
+ contentFrame: panelFrame("raised"),
15662
+ itemSurface: "none"
15663
+ }
15664
+ }), defineBlockAppearancePreset({
15665
+ id: "events-ruled-register",
15666
+ target: "events",
15667
+ label: "Ruled event register",
15668
+ blockKinds: ["block.event-calendar", "block.event-listing"],
15669
+ design: {
15670
+ sectionSurface: "brand-depth-band",
15671
+ contentFrame: plainFrame,
15672
+ itemSurface: "none",
15673
+ eventListTreatment: "ruled-register"
15674
+ }
15675
+ }), defineBlockAppearancePreset({
15676
+ id: "events-editorial-register",
15677
+ target: "events",
15678
+ label: "Editorial event register",
15679
+ blockKinds: ["block.event-calendar", "block.event-listing"],
15680
+ design: {
15681
+ sectionSurface: "base",
15682
+ contentFrame: plainFrame,
15683
+ itemSurface: "none",
15684
+ eventListTreatment: "editorial-register"
15685
+ }
15686
+ }), defineBlockAppearancePreset({
15687
+ id: "events-dense-index",
15688
+ target: "events",
15689
+ label: "Dense event index",
15690
+ blockKinds: ["block.event-calendar", "block.event-listing"],
15691
+ design: {
15692
+ sectionSurface: "accent-band",
15693
+ contentFrame: plainFrame,
15694
+ itemSurface: "none",
15695
+ eventListTreatment: "dense-index"
15696
+ }
15697
+ }), defineBlockAppearancePreset({
15698
+ id: "schedule-details-brand-depth",
15699
+ target: "events",
15700
+ label: "Brand-depth schedule details",
15701
+ blockKinds: ["block.event-details", "block.course-details"],
15702
+ design: {
15703
+ sectionSurface: "brand-depth-band",
15704
+ contentFrame: plainFrame,
15705
+ itemSurface: "none",
15706
+ tileTreatment: "brand-depth"
15707
+ }
15708
+ }), defineBlockAppearancePreset({
15709
+ id: "media-text-flush-feature",
15710
+ target: "media-text",
15711
+ label: "Flush media feature",
15712
+ blockKinds: ["block.media-text"],
15713
+ design: {
15714
+ sectionSurface: "muted-band",
15715
+ contentFrame: flushPanelFrame({ bleed: "start" }),
15716
+ itemSurface: "none"
15717
+ }
15718
+ }), defineBlockAppearancePreset({
15719
+ id: "testimonials-simple-cards",
15720
+ target: "testimonials",
15721
+ label: "Simple testimonial cards",
15722
+ blockKinds: ["block.testimonials"],
15723
+ design: {
15724
+ sectionSurface: "base",
15725
+ contentFrame: plainFrame,
15726
+ itemSurface: "default"
15727
+ }
15728
+ }), defineBlockAppearancePreset({
15729
+ id: "testimonials-raised-panel",
15730
+ target: "testimonials",
15731
+ label: "Raised testimonial panel",
15732
+ blockKinds: ["block.testimonials"],
15733
+ design: {
15734
+ sectionSurface: "muted-band",
15735
+ contentFrame: panelFrame("raised"),
15736
+ itemSurface: "raised"
15737
+ }
15738
+ }), defineBlockAppearancePreset({
15739
+ id: "testimonials-accent-panel",
15740
+ target: "testimonials",
15741
+ label: "Accent testimonial panel",
15742
+ blockKinds: ["block.testimonials"],
15743
+ design: {
15744
+ sectionSurface: "accent-band",
15745
+ contentFrame: panelFrame("raised"),
15746
+ itemSurface: "raised"
15747
+ }
15748
+ }), defineBlockAppearancePreset({
15749
+ id: "testimonials-default-cards",
15750
+ target: "testimonials",
15751
+ label: "Default cards",
15752
+ blockKinds: ["block.testimonials"],
15753
+ design: {
15754
+ sectionSurface: "base",
15755
+ contentFrame: plainFrame,
15756
+ itemSurface: "none",
15757
+ testimonialCardTreatment: "default"
15758
+ }
15759
+ }), defineBlockAppearancePreset({
15760
+ id: "testimonials-statement-cards",
15761
+ target: "testimonials",
15762
+ label: "Statement cards",
15763
+ blockKinds: ["block.testimonials"],
15764
+ design: {
15765
+ sectionSurface: "accent-band",
15766
+ contentFrame: plainFrame,
15767
+ itemSurface: "raised",
15768
+ testimonialCardTreatment: "statement"
15769
+ }
15770
+ }), defineBlockAppearancePreset({
15771
+ id: "testimonials-brand-statement-cards",
15772
+ target: "testimonials",
15773
+ label: "Brand statement cards",
15774
+ blockKinds: ["block.testimonials"],
15775
+ design: {
15776
+ sectionSurface: "brand-depth-band",
15777
+ contentFrame: plainFrame,
15778
+ itemSurface: "raised",
15779
+ testimonialCardTreatment: "statement"
15780
+ }
15781
+ }), defineBlockAppearancePreset({
15782
+ id: "testimonials-non-carded",
15783
+ target: "testimonials",
15784
+ label: "Non-carded",
15785
+ blockKinds: ["block.testimonials"],
15786
+ design: {
15787
+ sectionSurface: "muted-band",
15788
+ contentFrame: plainFrame,
15789
+ itemSurface: "none",
15790
+ testimonialCardTreatment: "non-carded"
15791
+ }
15792
+ }), defineBlockAppearancePreset({
15793
+ id: "testimonials-evergreen-lead",
15794
+ target: "testimonials",
15795
+ label: "Evergreen lead",
15796
+ blockKinds: ["block.testimonials"],
15797
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
15798
+ design: {
15799
+ sectionSurface: "base",
15800
+ contentFrame: plainFrame,
15801
+ itemSurface: "none"
15802
+ }
15803
+ }), defineBlockAppearancePreset({
15804
+ id: "testimonials-room-and-response",
15805
+ target: "testimonials",
15806
+ label: "Room and response",
15807
+ blockKinds: ["block.testimonials"],
15808
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
15809
+ design: {
15810
+ sectionSurface: "base",
15811
+ contentFrame: plainFrame,
15812
+ itemSurface: "none"
15813
+ }
15814
+ }), defineBlockAppearancePreset({
15815
+ id: "testimonials-open-floor",
15816
+ target: "testimonials",
15817
+ label: "Open floor",
15818
+ blockKinds: ["block.testimonials"],
15819
+ constraints: { layoutVariantKeys: ["featured-editorial"] },
15820
+ design: {
15821
+ sectionSurface: "base",
15822
+ contentFrame: plainFrame,
15823
+ itemSurface: "none"
15824
+ }
15825
+ }), defineBlockAppearancePreset({
15826
+ id: "faq-base-accordion",
15827
+ target: "faq",
15828
+ label: "Base accordion FAQ",
15829
+ blockKinds: ["block.faq"],
15830
+ design: {
15831
+ sectionSurface: "base",
15832
+ contentFrame: plainFrame,
15833
+ itemSurface: "default"
15834
+ }
15835
+ }), defineBlockAppearancePreset({
15836
+ id: "faq-contained-help",
15837
+ target: "faq",
15838
+ label: "Contained help panel",
15839
+ blockKinds: ["block.faq"],
15840
+ design: {
15841
+ sectionSurface: "muted-band",
15842
+ contentFrame: panelFrame("inset"),
15843
+ itemSurface: "default"
15844
+ }
15845
+ }), defineBlockAppearancePreset({
15846
+ id: "contact-form-panel",
15847
+ target: "contact-form",
15848
+ label: "Raised form panel",
15849
+ blockKinds: ["block.form"],
15850
+ design: {
15851
+ sectionSurface: "muted-band",
15852
+ contentFrame: panelFrame("raised"),
15853
+ itemSurface: "none"
15854
+ }
15855
+ }), defineBlockAppearancePreset({
15856
+ id: "cta-accent-band",
15857
+ target: "cta",
15858
+ label: "Accent CTA band",
15859
+ blockKinds: ["block.cta-full"],
15860
+ design: {
15861
+ sectionSurface: "accent-band",
15862
+ contentFrame: plainFrame,
15863
+ itemSurface: "none",
15864
+ eyebrowTreatment: "accent"
15865
+ }
15866
+ });
15880
15867
  }));
15881
15868
  var init_appearancePresetCatalog = __esmMin((() => {
15882
15869
  init_blockAppearancePresets();
15883
- [...blockAppearancePresets];
15884
15870
  }));
15885
15871
  var init_appearancePresetTypes = __esmMin((() => {}));
15886
15872
  //#endregion
@@ -17595,7 +17581,7 @@ function canonicalPaletteHashInput(colors, mode) {
17595
17581
  return `${mode}|${paletteColorFingerprint(colors)}`;
17596
17582
  }
17597
17583
  /**
17598
- * The shared TypeScript/SQL protocol. Do not reorder roles: the order comes
17584
+ * Stable curated-catalogue identity. Do not reorder roles: the order comes
17599
17585
  * from PALETTE_TOKEN_NAMES through canonicalPaletteHashInput.
17600
17586
  */
17601
17587
  function paletteValueKey(colors, mode) {
@@ -19197,6 +19183,47 @@ var init_backgroundAppearance = __esmMin((() => {
19197
19183
  var init_compositionBudget = __esmMin((() => {
19198
19184
  init_types$15();
19199
19185
  }));
19186
+ var init_headerStyleParts = __esmMin((() => {}));
19187
+ var headerInteractionPaletteValues, headerInteractionPaletteSchema;
19188
+ var init_interactionPalette = __esmMin((() => {
19189
+ headerInteractionPaletteValues = [
19190
+ "primary",
19191
+ "secondary",
19192
+ "accent"
19193
+ ];
19194
+ headerInteractionPaletteSchema = z$1.enum(headerInteractionPaletteValues);
19195
+ }));
19196
+ var clearSplitInteractionPalette;
19197
+ var init_headerInteractionPalette = __esmMin((() => {
19198
+ init_interactionPalette();
19199
+ init_lookOptionGroups();
19200
+ clearSplitInteractionPalette = defineLookOptionGroup({
19201
+ id: "interaction-palette",
19202
+ label: "Hover colour",
19203
+ defaultOptionId: "accent",
19204
+ options: [
19205
+ {
19206
+ id: "accent",
19207
+ label: "Accent"
19208
+ },
19209
+ {
19210
+ id: "primary",
19211
+ label: "Primary"
19212
+ },
19213
+ {
19214
+ id: "secondary",
19215
+ label: "Secondary"
19216
+ }
19217
+ ]
19218
+ });
19219
+ }));
19220
+ var init_headerOpeningForeground = __esmMin((() => {
19221
+ init_expandPalette();
19222
+ init_colorConversion();
19223
+ init_tokens();
19224
+ init_colorTokenParts();
19225
+ init_types$15();
19226
+ }));
19200
19227
  var init_customizableSurfaces = __esmMin((() => {
19201
19228
  init_types$15();
19202
19229
  })), logoTextConfidenceValues, logoAssetShapeValues, logoKindValues, logoDensityValues, logoContainsTextSchema, logoAnalysisSourceSchema, brandDisplayModeValues, logoAccommodationPatternValues, logoSizePolicyValues;
@@ -19307,7 +19334,7 @@ function asHeaderStyleId(value) {
19307
19334
  * optional nested styling fields that would otherwise leak from another Look.
19308
19335
  */
19309
19336
  function baseHeader(theme) {
19310
- const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
19337
+ const { navLinkStyle: _navLinkStyle, navFontRole: _navFontRole, navTypography: _navTypography, navTextSize: _navTextSize, interactionPalette: _interactionPalette, dropdownStyle: _dropdownStyle, ctaVariant: _ctaVariant, navContainer: _navContainer, container: _container, shadow: _shadow, logo: _logo, logoText: _logoText, border: _border, ...header } = theme.header;
19311
19338
  return {
19312
19339
  ...header,
19313
19340
  navContainer: {
@@ -19672,15 +19699,15 @@ function floatingGlassHeader(theme) {
19672
19699
  }
19673
19700
  };
19674
19701
  }
19675
- function headerConfigurationKey(configuration) {
19676
- return `${configuration.structure}:${configuration.treatment}:${configuration.behavior}`;
19677
- }
19678
19702
  function findHeaderLook(id) {
19679
19703
  return headerLooksById.get(id);
19680
19704
  }
19681
19705
  var titleOnlyLogoAccommodation, inlineWordmarkLogoAccommodation, inlineMarkWithTitleLogoAccommodation, logoPlateAccommodation, centeredBadgeAccommodation, popoutBadgeAccommodation, centeredMastheadAccommodation, unbackedOverlayLogoAccommodation, inlineClassicLogoAccommodations, centeredLogoAccommodations, overlayLogoAccommodations, headerLayoutCatalog, headerStyleCatalog, headerLayoutsById, headerStylesById, headerStyleCompatibilityOrder, legacyHeaderLookAliases, legacyHeaderLookAliasesById, headerLookCatalog, guaranteedFallbackHeaderLayoutId, guaranteedFallbackHeaderStyleId, headerLooksById;
19682
19706
  var init_headerLooks = __esmMin((() => {
19683
19707
  init_headerCtaVariants();
19708
+ init_headerStyleParts();
19709
+ init_headerInteractionPalette();
19710
+ init_headerOpeningForeground();
19684
19711
  init_customizableSurfaces();
19685
19712
  init_logoBranding();
19686
19713
  init_types$15();
@@ -19807,7 +19834,6 @@ var init_headerLooks = __esmMin((() => {
19807
19834
  id: asHeaderLayoutId("classic"),
19808
19835
  label: "Classic",
19809
19836
  description: "Logo and navigation in one practical horizontal row.",
19810
- structure: "inline-classic",
19811
19837
  variant: "classic",
19812
19838
  defaultPositioning: "sticky",
19813
19839
  shrinkOnScroll: false
@@ -19816,7 +19842,6 @@ var init_headerLooks = __esmMin((() => {
19816
19842
  id: asHeaderLayoutId("centered"),
19817
19843
  label: "Centered",
19818
19844
  description: "Logo centered above a balanced navigation row.",
19819
- structure: "centered-stack",
19820
19845
  variant: "centered",
19821
19846
  defaultPositioning: "static",
19822
19847
  shrinkOnScroll: false,
@@ -19832,7 +19857,6 @@ var init_headerLooks = __esmMin((() => {
19832
19857
  id: asHeaderLayoutId("floating"),
19833
19858
  label: "Floating",
19834
19859
  description: "Detached header chrome that sits over the opening section.",
19835
- structure: "floating-shell",
19836
19860
  variant: "floating",
19837
19861
  defaultPositioning: "sticky",
19838
19862
  shrinkOnScroll: true,
@@ -19991,10 +20015,13 @@ var init_headerLooks = __esmMin((() => {
19991
20015
  label: "Clear Split",
19992
20016
  description: "Floating logo with transparent navigation and no shared shell.",
19993
20017
  supportedLayoutIds: supportedLayouts(["floating"]),
19994
- navInteraction: "color-change",
20018
+ navInteraction: "pill-background",
19995
20019
  surface: "floating",
19996
- defaultDepth: "none",
20020
+ defaultDepth: "line",
19997
20021
  navTypography: "plain",
20022
+ openingForegroundTarget: "all",
20023
+ scrollTreatment: "contrast-glass",
20024
+ interactionPalette: clearSplitInteractionPalette,
19998
20025
  moods: ["editorial", "calm"]
19999
20026
  },
20000
20027
  {
@@ -20017,6 +20044,7 @@ var init_headerLooks = __esmMin((() => {
20017
20044
  surface: "floating",
20018
20045
  defaultDepth: "shadow",
20019
20046
  navTypography: "quiet-caps",
20047
+ openingForegroundTarget: "brand-only",
20020
20048
  moods: ["expressive"]
20021
20049
  },
20022
20050
  {
@@ -20028,6 +20056,7 @@ var init_headerLooks = __esmMin((() => {
20028
20056
  surface: "floating",
20029
20057
  defaultDepth: "shadow",
20030
20058
  navTypography: "heading",
20059
+ openingForegroundTarget: "brand-only",
20031
20060
  moods: ["calm", "editorial"]
20032
20061
  }
20033
20062
  ]);
@@ -20183,13 +20212,6 @@ var init_headerLooks = __esmMin((() => {
20183
20212
  {
20184
20213
  id: asHeaderLookId("clean-base"),
20185
20214
  label: "Clean base",
20186
- visualTreatment: "solid-neutral",
20187
- layoutBehavior: "sticky",
20188
- configuration: {
20189
- structure: "inline-classic",
20190
- treatment: "solid-neutral",
20191
- behavior: "sticky"
20192
- },
20193
20215
  openingRequirement: "none",
20194
20216
  logoAccommodations: inlineClassicLogoAccommodations,
20195
20217
  compile: cleanBaseHeader
@@ -20197,13 +20219,6 @@ var init_headerLooks = __esmMin((() => {
20197
20219
  {
20198
20220
  id: asHeaderLookId("classic-centered-nav"),
20199
20221
  label: "Centered nav",
20200
- visualTreatment: "solid-neutral",
20201
- layoutBehavior: "sticky",
20202
- configuration: {
20203
- structure: "inline-classic",
20204
- treatment: "solid-neutral",
20205
- behavior: "sticky"
20206
- },
20207
20222
  openingRequirement: "none",
20208
20223
  maxRecommendedNavItems: 6,
20209
20224
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -20212,13 +20227,6 @@ var init_headerLooks = __esmMin((() => {
20212
20227
  {
20213
20228
  id: asHeaderLookId("brand-solid"),
20214
20229
  label: "Brand solid",
20215
- visualTreatment: "solid-brand",
20216
- layoutBehavior: "sticky-shrink",
20217
- configuration: {
20218
- structure: "inline-classic",
20219
- treatment: "solid-brand",
20220
- behavior: "sticky-shrink"
20221
- },
20222
20230
  openingRequirement: "none",
20223
20231
  logoAccommodations: inlineClassicLogoAccommodations,
20224
20232
  compile: solidBrandHeader
@@ -20226,13 +20234,6 @@ var init_headerLooks = __esmMin((() => {
20226
20234
  {
20227
20235
  id: asHeaderLookId("serif-line"),
20228
20236
  label: "Serif line",
20229
- visualTreatment: "light-serif",
20230
- layoutBehavior: "sticky",
20231
- configuration: {
20232
- structure: "centered-stack",
20233
- treatment: "light-serif",
20234
- behavior: "sticky"
20235
- },
20236
20237
  openingRequirement: "none",
20237
20238
  maxRecommendedNavItems: 6,
20238
20239
  logoAccommodations: centeredLogoAccommodations,
@@ -20241,13 +20242,6 @@ var init_headerLooks = __esmMin((() => {
20241
20242
  {
20242
20243
  id: asHeaderLookId("centered-calm"),
20243
20244
  label: "Centered calm",
20244
- visualTreatment: "light-serif",
20245
- layoutBehavior: "normal-flow",
20246
- configuration: {
20247
- structure: "centered-stack",
20248
- treatment: "light-serif",
20249
- behavior: "normal-flow"
20250
- },
20251
20245
  openingRequirement: "none",
20252
20246
  maxRecommendedNavItems: 5,
20253
20247
  logoAccommodations: centeredLogoAccommodations,
@@ -20256,13 +20250,6 @@ var init_headerLooks = __esmMin((() => {
20256
20250
  {
20257
20251
  id: asHeaderLookId("practical-utility"),
20258
20252
  label: "Practical utility",
20259
- visualTreatment: "solid-neutral",
20260
- layoutBehavior: "sticky-shrink",
20261
- configuration: {
20262
- structure: "inline-classic",
20263
- treatment: "solid-neutral",
20264
- behavior: "sticky-shrink"
20265
- },
20266
20253
  openingRequirement: "none",
20267
20254
  requiresProminentCta: true,
20268
20255
  logoAccommodations: inlineClassicLogoAccommodations,
@@ -20271,13 +20258,6 @@ var init_headerLooks = __esmMin((() => {
20271
20258
  {
20272
20259
  id: asHeaderLookId("minimal-transparent"),
20273
20260
  label: "Minimal transparent",
20274
- visualTreatment: "minimal-transparent",
20275
- layoutBehavior: "normal-flow",
20276
- configuration: {
20277
- structure: "inline-classic",
20278
- treatment: "minimal-transparent",
20279
- behavior: "normal-flow"
20280
- },
20281
20261
  openingRequirement: "reserved-space-ok",
20282
20262
  logoAccommodations: inlineClassicLogoAccommodations,
20283
20263
  compile: minimalTransparentHeader
@@ -20285,13 +20265,6 @@ var init_headerLooks = __esmMin((() => {
20285
20265
  {
20286
20266
  id: asHeaderLookId("transparent-overlay"),
20287
20267
  label: "Transparent overlay",
20288
- visualTreatment: "transparent-overlay",
20289
- layoutBehavior: "fixed-overlay",
20290
- configuration: {
20291
- structure: "inline-classic",
20292
- treatment: "transparent-overlay",
20293
- behavior: "fixed-overlay"
20294
- },
20295
20268
  openingRequirement: "requires-image-hero-with-contrast-overlay",
20296
20269
  maxRecommendedNavItems: 5,
20297
20270
  logoAccommodations: overlayLogoAccommodations,
@@ -20300,13 +20273,6 @@ var init_headerLooks = __esmMin((() => {
20300
20273
  {
20301
20274
  id: asHeaderLookId("floating-glass"),
20302
20275
  label: "Floating glass",
20303
- visualTreatment: "floating-glass",
20304
- layoutBehavior: "fixed-floating",
20305
- configuration: {
20306
- structure: "floating-shell",
20307
- treatment: "floating-glass",
20308
- behavior: "fixed-floating"
20309
- },
20310
20276
  openingRequirement: "requires-image-hero-with-contrast-overlay",
20311
20277
  maxRecommendedNavItems: 5,
20312
20278
  logoAccommodations: overlayLogoAccommodations,
@@ -20315,7 +20281,6 @@ var init_headerLooks = __esmMin((() => {
20315
20281
  ]);
20316
20282
  guaranteedFallbackHeaderLayoutId = asHeaderLayoutId("classic");
20317
20283
  guaranteedFallbackHeaderStyleId = asHeaderStyleId("minimal");
20318
- new Set(headerLookCatalog.map((look) => headerConfigurationKey(look.configuration)));
20319
20284
  headerLooksById = new Map(headerLookCatalog.map((look) => [look.id, look]));
20320
20285
  }));
20321
20286
  var init_compilationPlan = __esmMin((() => {
@@ -20545,11 +20510,9 @@ var init_types$12 = __esmMin((() => {
20545
20510
  "secondary",
20546
20511
  "outline",
20547
20512
  "ghost",
20548
- "link",
20549
- "tertiary",
20550
20513
  "accent"
20551
20514
  ];
20552
- buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only");
20515
+ buttonVariantIdSchema = z$1.string().min(1).max(50).regex(/^[a-z0-9-]+$/, "Button variant IDs may contain lowercase letters, numbers, and hyphens only").refine((value) => value !== "link" && value !== "tertiary", { message: "Retired button role IDs are not valid variant IDs" });
20553
20516
  DEFAULT_VARIANT_ALIAS_ID = "default";
20554
20517
  opaqueButtonColourTokenSchema = themeColorTokenSchema.refine((value) => parseOpaqueButtonColourToken(value) !== null, "Button colour tokens must be opaque").transform((value) => {
20555
20518
  const token = parseOpaqueButtonColourToken(value);
@@ -23685,41 +23648,41 @@ var init_siteStyleTypography = __esmMin((() => {
23685
23648
  }));
23686
23649
  //#endregion
23687
23650
  //#region ../theme-core/src/lib/media.ts
23688
- var hotspotSchema$1, rotationSchema$1, rectSchema$1, aspectCropSchema$1, transformSchema$1, mediaSchema$1;
23689
- var init_media$2 = __esmMin((() => {
23690
- hotspotSchema$1 = z.object({
23651
+ var hotspotSchema, rotationSchema, rectSchema, aspectCropSchema, transformSchema, mediaSchema;
23652
+ var init_media$1 = __esmMin((() => {
23653
+ hotspotSchema = z.object({
23691
23654
  x: z.number().min(0).max(1),
23692
23655
  y: z.number().min(0).max(1),
23693
23656
  radius: z.number().optional()
23694
23657
  });
23695
- rotationSchema$1 = z.union([
23658
+ rotationSchema = z.union([
23696
23659
  z.literal(0),
23697
23660
  z.literal(90),
23698
23661
  z.literal(180),
23699
23662
  z.literal(270)
23700
23663
  ]);
23701
- rectSchema$1 = z.tuple([
23664
+ rectSchema = z.tuple([
23702
23665
  z.number(),
23703
23666
  z.number(),
23704
23667
  z.number(),
23705
23668
  z.number()
23706
23669
  ]);
23707
- aspectCropSchema$1 = z.object({
23670
+ aspectCropSchema = z.object({
23708
23671
  aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
23709
- rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema$1.optional()),
23710
- hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema$1.optional()),
23711
- rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema$1.optional())
23672
+ rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
23673
+ hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
23674
+ rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
23712
23675
  });
23713
- transformSchema$1 = z.object({
23676
+ transformSchema = z.object({
23714
23677
  aspectCrops: z.preprocess((value) => {
23715
23678
  if (!value || typeof value !== "object" || Array.isArray(value)) return;
23716
23679
  return value;
23717
- }, z.record(z.string(), aspectCropSchema$1.catch({}))).optional(),
23718
- rect: rectSchema$1.optional(),
23719
- hotspot: hotspotSchema$1.optional(),
23720
- rotation: rotationSchema$1.optional()
23680
+ }, z.record(z.string(), aspectCropSchema.catch({}))).optional(),
23681
+ rect: rectSchema.optional(),
23682
+ hotspot: hotspotSchema.optional(),
23683
+ rotation: rotationSchema.optional()
23721
23684
  });
23722
- mediaSchema$1 = z.object({
23685
+ mediaSchema = z.object({
23723
23686
  type: z.enum([
23724
23687
  "image",
23725
23688
  "video",
@@ -23740,7 +23703,7 @@ var init_media$2 = __esmMin((() => {
23740
23703
  height: z.number().optional(),
23741
23704
  storageBucket: z.string().optional(),
23742
23705
  storagePath: z.string().optional(),
23743
- transform: transformSchema$1.optional()
23706
+ transform: transformSchema.optional()
23744
23707
  });
23745
23708
  }));
23746
23709
  //#endregion
@@ -24408,20 +24371,61 @@ var init_classNames = __esmMin((() => {
24408
24371
  }));
24409
24372
  var init_generateBaseCSS = __esmMin((() => {}));
24410
24373
  //#endregion
24374
+ //#region ../theme-core/src/buttons/effects/cssUtils.ts
24375
+ /**
24376
+ * Generate CSS selector for a state with dual support for hover
24377
+ *
24378
+ * @param themeId - Theme scope ID
24379
+ * @param variantId - Variant class name
24380
+ * @param state - State group (hover, active, focus, base)
24381
+ * @returns CSS selector string
24382
+ */
24383
+ function getStateSelector(themeId, variantId, state) {
24384
+ const stateSelector = STATE_SELECTORS[state];
24385
+ if (state === "base") return `:where([data-theme-scope="${themeId}"]) .${variantId}`;
24386
+ if (state === "hover") return `:where([data-theme-scope="${themeId}"]) .${variantId}:hover,
24387
+ :where([data-theme-scope="${themeId}"]) .${variantId}[data-force-hover="true"]`;
24388
+ return `:where([data-theme-scope="${themeId}"]) .${variantId}${stateSelector}`;
24389
+ }
24390
+ /**
24391
+ * Generate CSS rule block for a state
24392
+ *
24393
+ * @param themeId - Theme scope ID
24394
+ * @param variantId - Variant class name
24395
+ * @param state - State group
24396
+ * @param cssProperties - CSS properties string (e.g., "transform: scale(1.05);")
24397
+ * @returns Complete CSS rule block
24398
+ */
24399
+ function generateStateCSS(themeId, variantId, state, cssProperties) {
24400
+ return `
24401
+ ${getStateSelector(themeId, variantId, state)} {
24402
+ ${cssProperties}
24403
+ }
24404
+ `;
24405
+ }
24406
+ var STATE_SELECTORS;
24407
+ var init_cssUtils = __esmMin((() => {
24408
+ STATE_SELECTORS = {
24409
+ hover: ":hover, [data-force-hover=\"true\"]",
24410
+ active: ":active",
24411
+ focus: ":focus-visible",
24412
+ base: ""
24413
+ };
24414
+ }));
24415
+ //#endregion
24411
24416
  //#region ../theme-core/src/buttons/effects/presets/background.ts
24412
- var darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect;
24413
- var init_background$2 = __esmMin((() => {
24414
- darkenBackgroundEffect = {
24415
- id: "darken-background",
24416
- name: "Darken on Hover",
24417
- description: "Darkens the background color on hover",
24417
+ function shadeBackgroundEffect(config) {
24418
+ return {
24419
+ id: config.id,
24420
+ name: config.name,
24421
+ description: config.description,
24418
24422
  category: "background",
24419
24423
  pseudoElement: "none",
24420
24424
  applicableTo: ["button"],
24421
24425
  customizableOption: {
24422
24426
  name: "amount",
24423
24427
  type: "select",
24424
- label: "Darken Amount (shade step)",
24428
+ label: config.label,
24425
24429
  default: 100,
24426
24430
  options: [
24427
24431
  0,
@@ -24436,63 +24440,36 @@ var init_background$2 = __esmMin((() => {
24436
24440
  900
24437
24441
  ]
24438
24442
  },
24439
- isApplicable: (buttonConfig) => {
24440
- return buttonConfig.background.type === "solid";
24441
- },
24442
- generateCSS: (ctx) => {
24443
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
24443
+ isApplicable: (buttonConfig) => buttonConfig.background.type === "solid",
24444
+ generateCSS: ({ themeId, variantId, options, tokens, buttonConfig }) => {
24444
24445
  if (buttonConfig.background.type !== "solid") return "";
24445
- const amount = options.amount || 100;
24446
+ const amount = (options.amount || 100) * config.shadeDirection;
24446
24447
  const baseToken = buttonConfig.background.colorToken ?? "primary-500";
24447
- const darkerToken = tokens.adjustShade(baseToken, amount);
24448
24448
  return `
24449
24449
  :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
24450
- background-color: ${tokens.getColor(darkerToken)};
24450
+ background-color: ${tokens.getColor(tokens.adjustShade(baseToken, amount))};
24451
24451
  }
24452
24452
  `;
24453
24453
  }
24454
24454
  };
24455
- lightenBackgroundEffect = {
24455
+ }
24456
+ var darkenBackgroundEffect, lightenBackgroundEffect, fadeBackgroundEffect, opacityReduceEffect, animatedGradientEffect, backgroundOnHoverEffect, backgroundOnHoverAlphaEffect;
24457
+ var init_background$2 = __esmMin((() => {
24458
+ init_cssUtils();
24459
+ darkenBackgroundEffect = shadeBackgroundEffect({
24460
+ id: "darken-background",
24461
+ name: "Darken on Hover",
24462
+ description: "Darkens the background color on hover",
24463
+ label: "Darken Amount (shade step)",
24464
+ shadeDirection: 1
24465
+ });
24466
+ lightenBackgroundEffect = shadeBackgroundEffect({
24456
24467
  id: "lighten-background",
24457
24468
  name: "Lighten on Hover",
24458
24469
  description: "Lightens the background color on hover",
24459
- category: "background",
24460
- pseudoElement: "none",
24461
- applicableTo: ["button"],
24462
- customizableOption: {
24463
- name: "amount",
24464
- type: "select",
24465
- label: "Lighten Amount (shade step)",
24466
- default: 100,
24467
- options: [
24468
- 0,
24469
- 100,
24470
- 200,
24471
- 300,
24472
- 400,
24473
- 500,
24474
- 600,
24475
- 700,
24476
- 800,
24477
- 900
24478
- ]
24479
- },
24480
- isApplicable: (buttonConfig) => {
24481
- return buttonConfig.background.type === "solid";
24482
- },
24483
- generateCSS: (ctx) => {
24484
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
24485
- if (buttonConfig.background.type !== "solid") return "";
24486
- const amount = options.amount || 100;
24487
- const baseToken = buttonConfig.background.colorToken ?? "primary-500";
24488
- const lighterToken = tokens.adjustShade(baseToken, -amount);
24489
- return `
24490
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
24491
- background-color: ${tokens.getColor(lighterToken)};
24492
- }
24493
- `;
24494
- }
24495
- };
24470
+ label: "Lighten Amount (shade step)",
24471
+ shadeDirection: -1
24472
+ });
24496
24473
  fadeBackgroundEffect = {
24497
24474
  id: "fade-background",
24498
24475
  name: "Fade on Hover",
@@ -24593,12 +24570,14 @@ var init_background$2 = __esmMin((() => {
24593
24570
  ]
24594
24571
  },
24595
24572
  generateCSS: (ctx) => {
24596
- const { themeId, variantId, options, tokens, buttonConfig } = ctx;
24573
+ const { themeId, variantId, stateGroup, options, tokens, buttonConfig } = ctx;
24597
24574
  const colorToken = options.colorToken || "neutral-800";
24575
+ const color = tokens.getColor(colorToken);
24576
+ const navForeground = "textColorToken" in buttonConfig && typeof options.textColorToken === "string" ? `\n color: ${tokens.getColor(options.textColorToken)};` : "";
24598
24577
  return `
24599
24578
  /* Add background on hover */
24600
- :where([data-theme-scope="${themeId}"]) .${variantId}:hover {
24601
- background-color: ${tokens.getColor(colorToken)};${"textColorToken" in buttonConfig && typeof options.textColorToken === "string" ? `\n color: ${tokens.getColor(options.textColorToken)};` : ""}
24579
+ ${getStateSelector(themeId, variantId, stateGroup)} {
24580
+ background-color: ${color};${navForeground}
24602
24581
  }
24603
24582
  `;
24604
24583
  }
@@ -24631,48 +24610,6 @@ var init_background$2 = __esmMin((() => {
24631
24610
  };
24632
24611
  }));
24633
24612
  //#endregion
24634
- //#region ../theme-core/src/buttons/effects/cssUtils.ts
24635
- /**
24636
- * Generate CSS selector for a state with dual support for hover
24637
- *
24638
- * @param themeId - Theme scope ID
24639
- * @param variantId - Variant class name
24640
- * @param state - State group (hover, active, focus, base)
24641
- * @returns CSS selector string
24642
- */
24643
- function getStateSelector(themeId, variantId, state) {
24644
- const stateSelector = STATE_SELECTORS[state];
24645
- if (state === "base") return `:where([data-theme-scope="${themeId}"]) .${variantId}`;
24646
- if (state === "hover") return `:where([data-theme-scope="${themeId}"]) .${variantId}:hover,
24647
- :where([data-theme-scope="${themeId}"]) .${variantId}[data-force-hover="true"]`;
24648
- return `:where([data-theme-scope="${themeId}"]) .${variantId}${stateSelector}`;
24649
- }
24650
- /**
24651
- * Generate CSS rule block for a state
24652
- *
24653
- * @param themeId - Theme scope ID
24654
- * @param variantId - Variant class name
24655
- * @param state - State group
24656
- * @param cssProperties - CSS properties string (e.g., "transform: scale(1.05);")
24657
- * @returns Complete CSS rule block
24658
- */
24659
- function generateStateCSS(themeId, variantId, state, cssProperties) {
24660
- return `
24661
- ${getStateSelector(themeId, variantId, state)} {
24662
- ${cssProperties}
24663
- }
24664
- `;
24665
- }
24666
- var STATE_SELECTORS;
24667
- var init_cssUtils = __esmMin((() => {
24668
- STATE_SELECTORS = {
24669
- hover: ":hover, [data-force-hover=\"true\"]",
24670
- active: ":active",
24671
- focus: ":focus-visible",
24672
- base: ""
24673
- };
24674
- }));
24675
- //#endregion
24676
24613
  //#region ../theme-core/src/buttons/effects/presets/shadow.ts
24677
24614
  var borderGlowEffect, dropShadowEffect, innerShadowEffect, neumorphicShadowEffect, outerGlowEffect, retro3DShadowEffect;
24678
24615
  var init_shadow = __esmMin((() => {
@@ -26620,6 +26557,41 @@ var init_tokenOrColor = __esmMin((() => {
26620
26557
  "yellow"
26621
26558
  ]);
26622
26559
  }));
26560
+ var init_paintTargets = __esmMin((() => {
26561
+ init_breakpoints();
26562
+ }));
26563
+ var headerScrollTreatmentSchema;
26564
+ var init_scrollTreatment = __esmMin((() => {
26565
+ init_paintTargets();
26566
+ headerScrollTreatmentSchema = z$1.discriminatedUnion("kind", [z$1.object({
26567
+ kind: z$1.literal("contrast-glass"),
26568
+ backgroundTone: z$1.enum(["light", "dark"])
26569
+ })]).optional();
26570
+ }));
26571
+ //#endregion
26572
+ //#region ../theme-core/src/header/containerSchema.ts
26573
+ var headerContainerSchema;
26574
+ var init_containerSchema = __esmMin((() => {
26575
+ headerContainerSchema = z$1.object({
26576
+ rounded: z$1.enum([
26577
+ "none",
26578
+ "sm",
26579
+ "md",
26580
+ "lg",
26581
+ "xl",
26582
+ "2xl"
26583
+ ]).default("xl"),
26584
+ border: z$1.boolean().default(true),
26585
+ shadow: z$1.boolean().default(true),
26586
+ padding: z$1.enum([
26587
+ "sm",
26588
+ "md",
26589
+ "lg"
26590
+ ]).default("md"),
26591
+ tint: z$1.string().nullable().optional(),
26592
+ opacity: z$1.number().min(0).max(1).default(.12)
26593
+ }).optional();
26594
+ }));
26623
26595
  //#endregion
26624
26596
  //#region ../theme-core/src/schema.ts
26625
26597
  /**
@@ -26636,9 +26608,9 @@ function normaliseHeaderNavFontRole(header) {
26636
26608
  navFontRole: navTypography
26637
26609
  } : rest;
26638
26610
  }
26639
- var axesSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBarFrame, headerContainerSchema, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
26611
+ var axesSchema, typographyStyleSchema, bodyTypographyStyleSchema, headingSizeSchema, headingTypographyOverridesSchema, headingTypographyStyleSchema, proseLinkUnderlineStyleSchema, proseLinkUnderlineThicknessSchema, proseLinkUnderlineOffsetSchema, proseLinkStyleSchema, semanticSpacingSchema, boxRoundedSchema, boxBackgroundOverlaySchema, boxBackgroundSchema, noHeadingDecorationSchema, visibleHeadingDecorationSchema, headingDecorationSchema, headingDecorationOverrideSchema, accordionIconTreatmentSchema, sectionStylesOverrideSchema, containerStylesOverrideSchema, cardBorderOverrideSchema, cardStylesOverrideSchema, blockStyleOverridesSchema, blockThemeOverrideSchema, typographyScaleSchema, eyebrowTypographyStyleSchema, typographySchema, spaceSchema, corners, shadow, border, motion, inputStyle, headerVariant, headerPositioning, headerNavStyle, navFontWeight, headerMaxWidth, headerBarFrame, headerBorderSchema, logoStyleSchema, headerLogoTextSchema, navEffectsSchema, dropdownStyleSchema, headerCtaGapSchema, headerCtaTreatmentSchema, navContainerSchema, headerBackgroundSchema, headerSchema, footerVariant, footerMaxWidth, footerMode, footerNavLayoutMode, footerNavLayoutAlign, footerSpacing, footerLogoPlacement, footerLogoSize, footerLogoMaxHeight, footerBottomTextLinkStyleSchema, footerBottomBarSchema, footerNavLayoutSchema, footerLogoSchema, footerSchema, containerPaddingPresetSchema, layoutSchema, heroTypographySizeSchema, heroTypographyLineHeightSchema, heroResponsiveTypographySchema, heroTypographySchema, heroSchema, bodyTextIntroTypographySizeSchema, bodyTextSchema, gradientsSchema, testimonialQuoteTreatmentSchema, themeSchema;
26640
26612
  var init_schema = __esmMin((() => {
26641
- init_media$2();
26613
+ init_media$1();
26642
26614
  init_schema$1();
26643
26615
  init_buttons();
26644
26616
  init_cards();
@@ -26654,6 +26626,9 @@ var init_schema = __esmMin((() => {
26654
26626
  init_rawStyleFields();
26655
26627
  init_themeColorTokens();
26656
26628
  init_tokenOrColor();
26629
+ init_scrollTreatment();
26630
+ init_containerSchema();
26631
+ init_interactionPalette();
26657
26632
  axesSchema = z$1.object({
26658
26633
  tone: z$1.enum([
26659
26634
  "minimal",
@@ -26813,7 +26788,7 @@ var init_schema = __esmMin((() => {
26813
26788
  color: tokenOrCssColorValueSchema.nullable().optional(),
26814
26789
  gradient: z$1.string().nullable().optional(),
26815
26790
  gradientPresetId: z$1.string().min(1).nullable().optional(),
26816
- image: mediaSchema$1.nullable().optional(),
26791
+ image: mediaSchema.nullable().optional(),
26817
26792
  objectFit: z$1.enum([
26818
26793
  "fill",
26819
26794
  "fit",
@@ -27061,25 +27036,6 @@ var init_schema = __esmMin((() => {
27061
27036
  ]);
27062
27037
  headerMaxWidth = z$1.enum(["container", "full"]);
27063
27038
  headerBarFrame = z$1.enum(["full-bleed", "inset-shell"]);
27064
- headerContainerSchema = z$1.object({
27065
- rounded: z$1.enum([
27066
- "none",
27067
- "sm",
27068
- "md",
27069
- "lg",
27070
- "xl",
27071
- "2xl"
27072
- ]).default("xl"),
27073
- border: z$1.boolean().default(true),
27074
- shadow: z$1.boolean().default(true),
27075
- padding: z$1.enum([
27076
- "sm",
27077
- "md",
27078
- "lg"
27079
- ]).default("md"),
27080
- tint: z$1.string().nullable().optional(),
27081
- opacity: z$1.number().min(0).max(1).default(.12)
27082
- }).optional();
27083
27039
  headerBorderSchema = componentBorderSchema.extend({ position: z$1.enum([
27084
27040
  "bottom",
27085
27041
  "top",
@@ -27193,7 +27149,7 @@ var init_schema = __esmMin((() => {
27193
27149
  contentOwner: z$1.literal(siteChromeBackgroundOverrideOwner).optional(),
27194
27150
  color: tokenOrCssColorValueSchema.nullable().optional(),
27195
27151
  gradient: gradientConfigSchema.nullable().optional(),
27196
- image: mediaSchema$1.nullable().optional(),
27152
+ image: mediaSchema.nullable().optional(),
27197
27153
  textColor: tokenOrCssColorValueSchema.nullable().optional()
27198
27154
  });
27199
27155
  headerSchema = z$1.object({
@@ -27202,7 +27158,8 @@ var init_schema = __esmMin((() => {
27202
27158
  shrinkOnScroll: z$1.boolean(),
27203
27159
  maxWidth: headerMaxWidth,
27204
27160
  barFrame: headerBarFrame.optional(),
27205
- logoOverride: mediaSchema$1.nullable().optional(),
27161
+ scrollTreatment: headerScrollTreatmentSchema,
27162
+ logoOverride: mediaSchema.nullable().optional(),
27206
27163
  background: headerBackgroundSchema.default({
27207
27164
  type: "color",
27208
27165
  color: "surface"
@@ -27214,6 +27171,7 @@ var init_schema = __esmMin((() => {
27214
27171
  navFontRole: z$1.enum(["body", "heading"]).optional(),
27215
27172
  navTypography: z$1.enum(["body", "heading"]).optional(),
27216
27173
  navTextSize: navLinkStyleSchema.shape.textSize,
27174
+ interactionPalette: headerInteractionPaletteSchema.optional(),
27217
27175
  navPlacement: z$1.enum(["end", "center"]).optional(),
27218
27176
  container: headerContainerSchema,
27219
27177
  border: headerBorderSchema,
@@ -29658,6 +29616,7 @@ var init_records = __esmMin((() => {}));
29658
29616
  var init_headerOpeningSection = __esmMin((() => {
29659
29617
  init_headerLooks();
29660
29618
  init_records();
29619
+ init_tokens();
29661
29620
  }));
29662
29621
  var init_generatedDesignPipeline = __esmMin((() => {
29663
29622
  init_compositionBudget();
@@ -29953,8 +29912,11 @@ var init_site_styles = __esmMin((() => {
29953
29912
  init_generatedSchemas();
29954
29913
  init_generatedDesignPipeline();
29955
29914
  init_headerLooks();
29915
+ init_headerInteractionPalette();
29916
+ init_headerOpeningForeground();
29956
29917
  init_headerOpeningSection();
29957
29918
  init_lookResolution();
29919
+ init_lookOptionGroups();
29958
29920
  init_logoBranding();
29959
29921
  init_pageDesignAuthority();
29960
29922
  init_pageDesignEditorErrors();
@@ -32813,23 +32775,14 @@ var init_heroCopy = __esmMin((() => {
32813
32775
  }));
32814
32776
  //#endregion
32815
32777
  //#region ../blocks/src/system/constants/buttonRoles.ts
32816
- /**
32817
- * Temporary rollout boundary for persisted content written before issue #1220.
32818
- * Authoring remains strict through `blockButtonRoleSchema`; this parser exists
32819
- * only until the post-deploy role rewrite has been audited in production.
32820
- */
32821
- function canonicalizePersistedBlockButtonRole(value) {
32822
- return value === "link" || value === "tertiary" ? "ghost" : value;
32823
- }
32824
32778
  function isBlockButtonRole(value) {
32825
32779
  return blockButtonRoleSchema.safeParse(value).success;
32826
32780
  }
32827
- var BLOCK_BUTTON_ROLES, blockButtonRoleSchema, persistedBlockButtonRoleSchema, BLOCK_BUTTON_ROLE_LABELS, BLOCK_BUTTON_ROLE_OPTIONS;
32781
+ var BLOCK_BUTTON_ROLES, blockButtonRoleSchema, BLOCK_BUTTON_ROLE_LABELS, BLOCK_BUTTON_ROLE_OPTIONS;
32828
32782
  var init_buttonRoles = __esmMin((() => {
32829
32783
  init_buttons();
32830
32784
  BLOCK_BUTTON_ROLES = PUBLIC_BUTTON_ROLES;
32831
32785
  blockButtonRoleSchema = z$1.enum(BLOCK_BUTTON_ROLES);
32832
- persistedBlockButtonRoleSchema = z$1.preprocess((value) => typeof value === "string" ? canonicalizePersistedBlockButtonRole(value) : value, blockButtonRoleSchema);
32833
32786
  BLOCK_BUTTON_ROLE_LABELS = {
32834
32787
  primary: "Primary",
32835
32788
  secondary: "Secondary",
@@ -41039,88 +40992,7 @@ const weeklySlotAvailabilityBlockDefinition = {
41039
40992
  };
41040
40993
  //#endregion
41041
40994
  //#region ../blocks/src/system/blocks/events/shared/types.ts
41042
- var init_types$4 = __esmMin((() => {})), PUBLIC_DOWNLOAD_MEDIA_TYPES, hotspotSchema, rotationSchema, rectSchema, aspectCropSchema, transformSchema, mediaPosterSchema, mediaBaseSchema, imageMediaSchema, videoMediaSchema, audioMediaSchema, documentMediaSchema, spreadsheetMediaSchema, archiveMediaSchema, mediaSchema;
41043
- var init_media$1 = __esmMin((() => {
41044
- init_src$2();
41045
- PUBLIC_DOWNLOAD_MEDIA_TYPES = [
41046
- "document",
41047
- "spreadsheet",
41048
- "archive",
41049
- "audio"
41050
- ];
41051
- hotspotSchema = z.object({
41052
- x: z.number().min(0).max(1),
41053
- y: z.number().min(0).max(1),
41054
- radius: z.number().optional()
41055
- });
41056
- rotationSchema = z.union([
41057
- z.literal(0),
41058
- z.literal(90),
41059
- z.literal(180),
41060
- z.literal(270)
41061
- ]);
41062
- rectSchema = z.tuple([
41063
- z.number(),
41064
- z.number(),
41065
- z.number(),
41066
- z.number()
41067
- ]);
41068
- aspectCropSchema = z.object({
41069
- aspect: z.preprocess((value) => value == null ? void 0 : value, z.string().optional()),
41070
- rect: z.preprocess((value) => value == null ? void 0 : value, rectSchema.optional()),
41071
- hotspot: z.preprocess((value) => value == null ? void 0 : value, hotspotSchema.optional()),
41072
- rotation: z.preprocess((value) => value == null ? void 0 : value, rotationSchema.optional())
41073
- });
41074
- transformSchema = z.object({
41075
- aspectCrops: z.preprocess((value) => {
41076
- if (!value || typeof value !== "object" || Array.isArray(value)) return;
41077
- return value;
41078
- }, z.record(z.string(), aspectCropSchema.catch({}))).optional(),
41079
- rect: rectSchema.optional(),
41080
- hotspot: hotspotSchema.optional(),
41081
- rotation: rotationSchema.optional()
41082
- });
41083
- mediaPosterSchema = z.discriminatedUnion("tag", [z.object({
41084
- tag: z.literal("storage"),
41085
- assetId: z.string().optional(),
41086
- storageBucket: z.string().min(1),
41087
- storagePath: z.string().min(1)
41088
- }), z.object({
41089
- tag: z.literal("external-src"),
41090
- assetId: z.string().optional(),
41091
- src: z.string().url()
41092
- })]);
41093
- mediaBaseSchema = z.object({
41094
- purpose: z.string().optional(),
41095
- placeholder: z.boolean().default(true).optional(),
41096
- assetId: z.string().optional(),
41097
- identifier: z.string().optional(),
41098
- src: z.string().optional(),
41099
- alt: z.string().optional(),
41100
- filename: z.string().optional(),
41101
- mimeType: z.string().optional(),
41102
- width: z.number().optional(),
41103
- height: z.number().optional(),
41104
- storageBucket: z.string().optional(),
41105
- storagePath: z.string().optional(),
41106
- poster: mediaPosterSchema.optional(),
41107
- transform: transformSchema.optional()
41108
- });
41109
- imageMediaSchema = mediaBaseSchema.extend({ type: z.literal("image") });
41110
- videoMediaSchema = mediaBaseSchema.extend({ type: z.literal("video") });
41111
- audioMediaSchema = mediaBaseSchema.extend({ type: z.literal("audio") });
41112
- documentMediaSchema = mediaBaseSchema.extend({ type: z.literal("document") });
41113
- spreadsheetMediaSchema = mediaBaseSchema.extend({ type: z.literal("spreadsheet") });
41114
- archiveMediaSchema = mediaBaseSchema.extend({ type: z.literal("archive") });
41115
- mediaSchema = z.discriminatedUnion("type", [
41116
- imageMediaSchema,
41117
- videoMediaSchema,
41118
- audioMediaSchema,
41119
- documentMediaSchema,
41120
- spreadsheetMediaSchema,
41121
- archiveMediaSchema
41122
- ]);
41123
- }));
40995
+ var init_types$4 = __esmMin((() => {}));
41124
40996
  //#endregion
41125
40997
  //#region ../blocks/src/system/blocks/shared/bookingPaymentTerms.ts
41126
40998
  var bookingDepositRefundPolicySchema, bookingInstalmentPlanSchema, bookingFlexibleBalanceDueDateRuleSchema, bookingFlexibleBalanceConfigSchema, blockBookingPaymentCollectionOptionSchema, blockBookingPaymentTermsSchema;
@@ -41273,7 +41145,7 @@ var init_schemas$1 = __esmMin((() => {
41273
41145
  publicCoursesArraySchema = publicWholeSeriesOfferingsArraySchema;
41274
41146
  })), eventPresetSchema, eventScheduleScopeSchema$2, publicEventRecurrenceSchema, eventDestinationModeSchema$1, publicEventDestinationSchema, eventVenueSchema, eventCategorySchema, accessRestrictionSchema, publicCoursePriceDisplaySchema, publicEventTicketTypePriceDisplaySchema, publicEventAttendanceModeSchema, publicEventAttendanceModeAvailabilitySchema, publicEventTicketTypeAvailabilitySchema, publicEventTicketTypeSchema, publicEventPricingSchema, publicTeamMemberSummarySchema, publicEventSchema, publicEventsArraySchema;
41275
41147
  var init_schemas = __esmMin((() => {
41276
- init_media$1();
41148
+ init_media$2();
41277
41149
  init_richTextSchema();
41278
41150
  init_bookingPaymentTerms();
41279
41151
  init_schemas$1();
@@ -41549,7 +41421,7 @@ var init_schemas = __esmMin((() => {
41549
41421
  presentation: z$1.object({
41550
41422
  cardTitleOverride: z$1.string().nullable().optional(),
41551
41423
  summary: z$1.string().nullable().optional(),
41552
- image: mediaSchema.nullable().optional()
41424
+ image: mediaSchema$1.nullable().optional()
41553
41425
  }).optional(),
41554
41426
  slug: z$1.string(),
41555
41427
  path: z$1.string().nullable(),
@@ -42197,7 +42069,7 @@ var init_contract_schemas = __esmMin((() => {
42197
42069
  init_buttonRoles();
42198
42070
  previewStageSchema = z$1.enum(["preview", "published"]);
42199
42071
  registrationButtonVariantSchema = blockButtonRoleSchema;
42200
- eventButtonVariantSchema = persistedBlockButtonRoleSchema;
42072
+ eventButtonVariantSchema = blockButtonRoleSchema;
42201
42073
  eventLayoutSchema = z$1.enum(eventCalendarListLayoutValues);
42202
42074
  eventCalendarDisplayModeSchema = z$1.enum(eventCalendarDisplayModeValues);
42203
42075
  eventCalendarDefaultViewSchema = z$1.enum(eventCalendarDefaultViewValues);
@@ -50319,7 +50191,7 @@ const audioPlayerBlockDefinition = { manifest: createBlockManifest({
50319
50191
  }) };
50320
50192
  //#endregion
50321
50193
  //#region ../blocks/src/system/blocks/file-download.ts
50322
- init_media$1();
50194
+ init_media$2();
50323
50195
  init_defineBlock();
50324
50196
  init_button();
50325
50197
  init_builder$1();
@@ -52818,9 +52690,9 @@ init_schema$2();
52818
52690
  init_defineBlock();
52819
52691
  init_builder$1();
52820
52692
  init_fragments$1();
52821
- init_media$1();
52693
+ init_media$2();
52822
52694
  const ITEM_NAME = "member";
52823
- const teamMemberPhotoSchema = mediaSchema.refine((media) => media.type === "image", { message: "Team member photos must be image media" }).nullable();
52695
+ const teamMemberPhotoSchema = mediaSchema$1.refine((media) => media.type === "image", { message: "Team member photos must be image media" }).nullable();
52824
52696
  const teamMemberDataSchema = z$1.object({
52825
52697
  _type: z$1.literal("teamMember"),
52826
52698
  id: z$1.string(),
@@ -54412,9 +54284,9 @@ function listBlockDefinitions() {
54412
54284
  init_tokens();
54413
54285
  //#endregion
54414
54286
  //#region ../blocks/src/system/helpers/backgroundMedia.ts
54415
- init_media$1();
54287
+ init_media$2();
54416
54288
  function resolveBackgroundMedia(input) {
54417
- const parsedMedia = mediaSchema.safeParse(input.image);
54289
+ const parsedMedia = mediaSchema$1.safeParse(input.image);
54418
54290
  if (!parsedMedia.success) return null;
54419
54291
  switch (parsedMedia.data.type) {
54420
54292
  case "image":
@@ -55650,7 +55522,6 @@ function renderMark(mark, key, child) {
55650
55522
  //#endregion
55651
55523
  //#region ../blocks/src/system/runtime/nodes/basic.tsx
55652
55524
  init_buttons();
55653
- init_buttonRoles();
55654
55525
  const TextNode = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, inlineTextFallbackPath, ...rest }) => {
55655
55526
  const inlineText = parseInlineTextFromUnknown(value);
55656
55527
  if (inlineText.ok && !isInlineTextEmpty(inlineText.value)) return /* @__PURE__ */ jsx(Text$2, {
@@ -55690,6 +55561,9 @@ function renderTrailingAffordanceIcon(affordance) {
55690
55561
  className: "rb-ml-2 rb-h-4 rb-w-4 rb-inline-block"
55691
55562
  });
55692
55563
  }
55564
+ function isMissingRequiredLink(linkRequired, resolvedHref) {
55565
+ return linkRequired && resolvedHref.length === 0;
55566
+ }
55693
55567
  const ButtonNode = ({ value, children, href, variantId = "primary", size = "md", disabled, type = "button", target, rel, linkRequired = false, trailingIcon, blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, className, ...rest }) => {
55694
55568
  const content = value ?? children;
55695
55569
  if (!content) {
@@ -55698,12 +55572,16 @@ const ButtonNode = ({ value, children, href, variantId = "primary", size = "md",
55698
55572
  }
55699
55573
  const affordanceIcon = renderTrailingAffordanceIcon(resolveButtonAffordance({ trailingIcon }));
55700
55574
  const resolvedHref = typeof href === "string" ? href.trim() : "";
55701
- if (linkRequired && resolvedHref.length === 0) {
55575
+ if (isMissingRequiredLink(linkRequired, resolvedHref)) {
55702
55576
  if (process.env.NODE_ENV === "development") console.warn("[ButtonNode] Missing href for link-required button");
55703
55577
  return null;
55704
55578
  }
55705
55579
  const extraClassName = affordanceIcon ? [className, AFFORDANCE_SUPPRESS_CLASS].filter(Boolean).join(" ") : className;
55706
- const resolvedVariantId = parseThemeButtonVariantId(canonicalizePersistedBlockButtonRole(variantId));
55580
+ const resolvedVariantId = parseThemeButtonVariantId(variantId);
55581
+ if (variantId && !resolvedVariantId) {
55582
+ console.error("[ButtonNode] Invalid button variant", { variantId });
55583
+ return null;
55584
+ }
55707
55585
  const combinedClassName = resolvedVariantId ? themeButtonClassName({
55708
55586
  variant: resolvedVariantId,
55709
55587
  size,
@@ -55808,7 +55686,7 @@ const FeatureCardIconNode = ({ value, treatment, generatedIconSizePx, className,
55808
55686
  //#region ../blocks/src/system/runtime/nodes/file-download.tsx
55809
55687
  init_svg();
55810
55688
  init_colorStyles();
55811
- init_media$1();
55689
+ init_media$2();
55812
55690
  init_buttons();
55813
55691
  init_media();
55814
55692
  init_buttonRoles();
@@ -55842,8 +55720,9 @@ function iconForMediaType(type) {
55842
55720
  });
55843
55721
  }
55844
55722
  }
55845
- function normalizeButtonVariant(value) {
55846
- return isBlockButtonRole(value) ? value : "primary";
55723
+ function parseButtonVariant(value) {
55724
+ if (value === null || value === void 0) return "primary";
55725
+ return isBlockButtonRole(value) ? value : null;
55847
55726
  }
55848
55727
  function FileDownloadNode({ value, title, description, buttonLabel, buttonVariant, className }) {
55849
55728
  if (!value || !isDownloadableMediaType(value.type)) return null;
@@ -55853,7 +55732,11 @@ function FileDownloadNode({ value, title, description, buttonLabel, buttonVarian
55853
55732
  const heading = title?.trim() || filename;
55854
55733
  const body = description?.trim();
55855
55734
  const label = buttonLabel?.trim() || "Download";
55856
- const variant = normalizeButtonVariant(buttonVariant);
55735
+ const variant = parseButtonVariant(buttonVariant);
55736
+ if (!variant) {
55737
+ console.error("[FileDownloadNode] Invalid button variant", { buttonVariant });
55738
+ return null;
55739
+ }
55857
55740
  return /* @__PURE__ */ jsx("div", {
55858
55741
  className,
55859
55742
  children: /* @__PURE__ */ jsxs("div", {
@@ -62679,12 +62562,18 @@ var init_navDropdownSizing = __esmMin((() => {
62679
62562
  `${NAV_DROPDOWN_MAX_WIDTH_CSS}`, `${NAV_DROPDOWN_SHIFT_PROPERTY}`;
62680
62563
  }));
62681
62564
  //#endregion
62565
+ //#region ../theme-core/src/header/surfaceRules.ts
62566
+ init_navDropdownSizing();
62567
+ init_shared$5();
62568
+ init_colorStyles();
62569
+ //#endregion
62682
62570
  //#region ../theme-core/src/header/generateHeaderCss.ts
62683
62571
  init_resolver$1();
62684
62572
  init_siteChromeNavPreferences();
62685
62573
  init_shared$5();
62686
62574
  init_breakpoints();
62687
- init_navDropdownSizing();
62575
+ init_scrollTreatment();
62576
+ init_paintTargets();
62688
62577
  //#endregion
62689
62578
  //#region ../theme-core/src/footer/generateFooterCss.ts
62690
62579
  init_resolver$1();
@@ -64211,6 +64100,9 @@ init_typeGuards();
64211
64100
  //#region ../blocks/src/primitives/content/primitives.tsx
64212
64101
  init_RichText();
64213
64102
  //#endregion
64103
+ //#region ../blocks/src/system/runtime/nodes/mergeResolveImageUrlContexts.ts
64104
+ init_src$2();
64105
+ //#endregion
64214
64106
  //#region ../blocks/src/system/helpers/resolveBackground.tsx
64215
64107
  /**
64216
64108
  * Helper utilities for resolving background data in custom block components.
@@ -64285,7 +64177,7 @@ init_tokens();
64285
64177
  init_gradients();
64286
64178
  init_richTextSchema();
64287
64179
  init_media();
64288
- init_media$1();
64180
+ init_media$2();
64289
64181
  init_slotContracts();
64290
64182
  init_typeGuards();
64291
64183
  init_booking_form_reserved_fields();
@@ -152871,7 +152763,7 @@ var SimpleCache = class {
152871
152763
  * 1. This constant
152872
152764
  * 2. The "version" field in package.json
152873
152765
  */
152874
- const SDK_VERSION = "0.126.0";
152766
+ const SDK_VERSION = "0.127.0";
152875
152767
  //#endregion
152876
152768
  //#region src/client/error.ts
152877
152769
  /**