riverbankcms 0.20.0 → 0.22.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.
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { An as unsafeAsStoragePath, B as parsePublicContactDetails, C as stableJsonStringify, Cn as unsafeAsProductId, Dn as unsafeAsSiteScopedStoragePath, En as unsafeAsSiteId, H as isPresent, Mn as unsafeAsUserId, Mt as fromArray, N as parseFooterCompositionV1, Nn as err, Nt as mapNonEmptyArray, P as footerNavigationLayouts, Pn as ok, Pt as mapReadonlyNonEmptyArray, Tn as unsafeAsSiteFontId, Wt as assertNever, Zt as parseMediaAssetId, an as unsafeAsBookingRequirementId, bn as unsafeAsPositiveByteCount, c as resolveSiteVerticalBookingConfig, cn as unsafeAsDeclaredMimeType, ct as validateBookingPaymentOptionKinds, d as ORDINARY_EVENT_PRESET_VALUES, dn as unsafeAsEntitlementId, gn as unsafeAsMediaAssetId, hn as unsafeAsFileChecksumSha256, jn as unsafeAsUploadSessionId, kn as unsafeAsStorageBucketName, nt as localScheduleTimePattern, on as unsafeAsBookingSessionId, r as NAVIGATION_LOCATIONS, rt as parseUtcIsoDateTimeString, st as parseBookingTimeZone, tn as parseSiteId, u as EVENT_PRESET_VALUES, un as unsafeAsDetectedMimeType, vn as unsafeAsOriginalFilename, wn as unsafeAsSafeDownloadFilename, xn as unsafeAsPositiveSeconds, z as isCanonicalRichTextDoc } from "./src-Dixcv4PB.mjs";
2
+ import { An as unsafeAsSafeDownloadFilename, B as isPresent, Bn as ok, Bt as mapReadonlyNonEmptyArray, C as stableJsonStringify, Dn as unsafeAsPositiveSeconds, En as unsafeAsPositiveByteCount, Fn as unsafeAsStorageBucketName, In as unsafeAsStoragePath, L as isCanonicalRichTextDoc, Ln as unsafeAsUploadSessionId, M as parseFooterCompositionV1, Mn as unsafeAsSiteId, N as footerNavigationLayouts, Nn as unsafeAsSiteScopedStoragePath, R as parsePublicContactDetails, Rn as unsafeAsUserId, Rt as fromArray, Sn as unsafeAsMediaAssetId, Xt as assertNever, _n as unsafeAsEntitlementId, at as localScheduleTimePattern, c as resolveSiteVerticalBookingConfig, d as ORDINARY_EVENT_PRESET_VALUES, dn as unsafeAsBookingRequirementId, fn as unsafeAsBookingSessionId, gn as unsafeAsDetectedMimeType, jn as unsafeAsSiteFontId, kn as unsafeAsProductId, mn as unsafeAsDeclaredMimeType, mt as validateBookingPaymentOptionKinds, pt as parseBookingTimeZone, r as NAVIGATION_LOCATIONS, rn as parseMediaAssetId, sn as parseSiteId, st as parseUtcIsoDateTimeString, u as EVENT_PRESET_VALUES, wn as unsafeAsOriginalFilename, xn as unsafeAsFileChecksumSha256, zn as err, zt as mapNonEmptyArray } from "./src-zzwJUef5.mjs";
3
3
  import "node:module";
4
4
  import { z } from "zod";
5
5
 
@@ -4903,7 +4903,8 @@ const cardListItemParts = [
4903
4903
  "schedule",
4904
4904
  "dates",
4905
4905
  "availability",
4906
- "action"
4906
+ "action",
4907
+ "price"
4907
4908
  ];
4908
4909
  /** Block supply is capability, never a second Look catalogue. */
4909
4910
  const cardListBlockParts = {
@@ -4913,13 +4914,39 @@ const cardListBlockParts = {
4913
4914
  "text",
4914
4915
  "action"
4915
4916
  ],
4916
- "block.offerings-preview": cardListItemParts,
4917
+ "block.offerings-preview": [
4918
+ "media",
4919
+ "title",
4920
+ "text",
4921
+ "facts",
4922
+ "chips",
4923
+ "numeral",
4924
+ "schedule",
4925
+ "dates",
4926
+ "availability",
4927
+ "action"
4928
+ ],
4917
4929
  "block.appointment-services": [
4918
4930
  "media",
4919
4931
  "title",
4920
4932
  "text",
4921
4933
  "facts",
4922
4934
  "action"
4935
+ ],
4936
+ "block.team-members": [
4937
+ "media",
4938
+ "title",
4939
+ "text",
4940
+ "facts",
4941
+ "chips",
4942
+ "action"
4943
+ ],
4944
+ "block.shop": [
4945
+ "title",
4946
+ "text",
4947
+ "facts",
4948
+ "price",
4949
+ "action"
4923
4950
  ]
4924
4951
  };
4925
4952
  const cardListFamilyBlocks = Object.keys(cardListBlockParts);
@@ -5010,7 +5037,9 @@ const arrangementLookTargets = {
5010
5037
  "image-gallery": "image-gallery",
5011
5038
  "newsletter-signup": "newsletter",
5012
5039
  form: "contact-form",
5013
- "body-text": "body-text"
5040
+ "body-text": "body-text",
5041
+ faq: "faq",
5042
+ "cta-full": "cta"
5014
5043
  };
5015
5044
  function defineArrangementLook(id$2, block, name, arrangement, knobs, input = {}) {
5016
5045
  const mode = block === "event-calendar" ? "list" : null;
@@ -6162,6 +6191,98 @@ const blockAppearancePresets = [
6162
6191
  dates: "summary"
6163
6192
  },
6164
6193
  styleFallback: [id$1("feature-cards-cards")]
6194
+ }),
6195
+ defineArrangementLook("body-text-title-beside", "body-text", "Title beside the text", "prose", [], { styleFallback: [id$1("body-text-reading-column")] }),
6196
+ defineArrangementLook("body-text-large-opening", "body-text", "Large opening paragraph", "prose", [], { styleFallback: [id$1("body-text-reading-column")] }),
6197
+ defineArrangementLook("faq-questions-under-title", "faq", "Questions under the title", "default", []),
6198
+ defineArrangementLook("faq-title-beside-questions", "faq", "Title beside the questions", "two-column", [], { styleFallback: [id$1("faq-questions-under-title")] }),
6199
+ defineArrangementLook("faq-questions-two-columns", "faq", "Questions in two columns", "question-columns", [], { styleFallback: [id$1("faq-questions-under-title")] }),
6200
+ defineArrangementLook("image-gallery-lead-photo", "image-gallery", "One large photo, then smaller ones", "tiles", [], { styleFallback: [id$1("image-gallery-square-tiles")] }),
6201
+ defineArrangementLook("image-gallery-captions-under", "image-gallery", "Photos with captions underneath", "tiles", [], { styleFallback: [id$1("image-gallery-arched-captions"), id$1("image-gallery-square-tiles")] }),
6202
+ defineArrangementLook("cta-centred", "cta-full", "Centred, buttons below", "default", []),
6203
+ {
6204
+ ...defineCardListLook("team-members-tall-portraits", "Tall portraits in a row", "cards", [
6205
+ "media",
6206
+ "title",
6207
+ "text",
6208
+ "facts",
6209
+ "chips",
6210
+ "action"
6211
+ ], ["showPhotos"], {
6212
+ knobDefaults: { actionStyle: "link" },
6213
+ styleFallback: [id$1("team-members-ruled-names")]
6214
+ }),
6215
+ blockKinds: ["block.team-members"]
6216
+ },
6217
+ {
6218
+ ...defineCardListLook("team-members-portrait-bio", "Portrait beside a longer bio", "stack", [
6219
+ "media",
6220
+ "title",
6221
+ "text",
6222
+ "facts",
6223
+ "chips",
6224
+ "action"
6225
+ ], ["showPhotos"], {
6226
+ teamBiography: "profile",
6227
+ knobDefaults: { actionStyle: "link" },
6228
+ styleFallback: [id$1("team-members-tall-portraits")]
6229
+ }),
6230
+ blockKinds: ["block.team-members"]
6231
+ },
6232
+ {
6233
+ ...defineCardListLook("team-members-ruled-names", "Names in a ruled list", "index", [
6234
+ "title",
6235
+ "text",
6236
+ "facts",
6237
+ "chips",
6238
+ "action"
6239
+ ], [], {
6240
+ forcedKnobs: {
6241
+ showPhotos: "false",
6242
+ cardMarker: "none"
6243
+ },
6244
+ knobDefaults: { actionStyle: "link" },
6245
+ styleFallback: [id$1("feature-cards-index")]
6246
+ }),
6247
+ blockKinds: ["block.team-members"]
6248
+ },
6249
+ defineCardListLook("shop-price-cards", "Price cards", "cards", [
6250
+ "title",
6251
+ "text",
6252
+ "facts",
6253
+ "price",
6254
+ "action"
6255
+ ], [], {
6256
+ itemRoles: { items: "card" },
6257
+ styleFallback: [id$1("shop-ruled-prices")]
6258
+ }),
6259
+ defineCardListLook("shop-price-cards-featured", "Price cards, one featured", "cards", [
6260
+ "title",
6261
+ "text",
6262
+ "facts",
6263
+ "price",
6264
+ "action"
6265
+ ], [], {
6266
+ itemRoles: {
6267
+ items: "card",
6268
+ featured: "statement"
6269
+ },
6270
+ whenMissing: [{
6271
+ fact: "featured",
6272
+ look: id$1("shop-price-cards")
6273
+ }],
6274
+ styleFallback: [id$1("shop-price-cards")]
6275
+ }),
6276
+ defineCardListLook("shop-ruled-prices", "Prices in a ruled list", "index", [
6277
+ "title",
6278
+ "text",
6279
+ "facts",
6280
+ "price",
6281
+ "action"
6282
+ ], [], {
6283
+ forcedKnobs: { cardMarker: "none" },
6284
+ knobDefaults: { actionStyle: "link" },
6285
+ styleFallback: [id$1("feature-cards-index")]
6165
6286
  })
6166
6287
  ];
6167
6288
 
@@ -8763,11 +8884,11 @@ function isVideoPosterFileAssetSource(source) {
8763
8884
 
8764
8885
  //#endregion
8765
8886
  //#region ../media-core/src/typeGuards.ts
8766
- function isRecord$4(value) {
8887
+ function isRecord$3(value) {
8767
8888
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
8768
8889
  }
8769
- function asRecord$1(value) {
8770
- return isRecord$4(value) ? value : undefined;
8890
+ function asRecord(value) {
8891
+ return isRecord$3(value) ? value : undefined;
8771
8892
  }
8772
8893
 
8773
8894
  //#endregion
@@ -9698,7 +9819,7 @@ function parseTaggedObject(value, allowed) {
9698
9819
  return parseOneOf(record.value.tag, allowed);
9699
9820
  }
9700
9821
  function requireRecord(value) {
9701
- if (!isRecord$4(value)) return err("expected-object");
9822
+ if (!isRecord$3(value)) return err("expected-object");
9702
9823
  return ok(value);
9703
9824
  }
9704
9825
  function requireString(value) {
@@ -9909,7 +10030,7 @@ function parseOptionalRowExif(value) {
9909
10030
  if (value === null || value === undefined) {
9910
10031
  return ok(undefined);
9911
10032
  }
9912
- if (!isRecord$4(value) || !isFileJsonObject(value)) {
10033
+ if (!isRecord$3(value) || !isFileJsonObject(value)) {
9913
10034
  return err({
9914
10035
  tag: "invalid-exif",
9915
10036
  error: "expected-object"
@@ -9983,7 +10104,7 @@ function isFileJsonValue(value) {
9983
10104
  if (Array.isArray(value)) {
9984
10105
  return value.every(isFileJsonValue);
9985
10106
  }
9986
- return isRecord$4(value) && isFileJsonObject(value);
10107
+ return isRecord$3(value) && isFileJsonObject(value);
9987
10108
  }
9988
10109
  function emptyStatePatch(patch) {
9989
10110
  return {
@@ -12562,7 +12683,7 @@ function isCmsMediaObjectType(value) {
12562
12683
  return mediaTypeDiscriminants.some((type) => type === value);
12563
12684
  }
12564
12685
  function isCmsMediaObject(value) {
12565
- if (!isRecord$4(value)) return false;
12686
+ if (!isRecord$3(value)) return false;
12566
12687
  if (value.tag === "media") return true;
12567
12688
  const type = value.type;
12568
12689
  if (!isCmsMediaObjectType(type)) return false;
@@ -12581,7 +12702,7 @@ function collectMediaObjects(value, out, location = "") {
12581
12702
  value.forEach((item, index) => collectMediaObjects(item, out, `${location}[${index}]`));
12582
12703
  return;
12583
12704
  }
12584
- if (!isRecord$4(value)) return;
12705
+ if (!isRecord$3(value)) return;
12585
12706
  if (isCmsMediaObject(value)) {
12586
12707
  out.push({
12587
12708
  obj: value,
@@ -12641,7 +12762,7 @@ function scanForMediaAssetUsage(value, tokens) {
12641
12762
  for (const item of node) visit(item);
12642
12763
  return;
12643
12764
  }
12644
- if (!isRecord$4(node)) return;
12765
+ if (!isRecord$3(node)) return;
12645
12766
  for (const [key, child] of Object.entries(node)) {
12646
12767
  if (typeof child === "string") {
12647
12768
  switch (key) {
@@ -12753,8 +12874,8 @@ function walkAndCollectImageAttrs(value, out, location = "") {
12753
12874
  value.forEach((item, index) => walkAndCollectImageAttrs(item, out, `${location}[${index}]`));
12754
12875
  return;
12755
12876
  }
12756
- if (!isRecord$4(value)) return;
12757
- if (value.type === "image" && isRecord$4(value.attrs)) {
12877
+ if (!isRecord$3(value)) return;
12878
+ if (value.type === "image" && isRecord$3(value.attrs)) {
12758
12879
  out.push({
12759
12880
  attrs: value.attrs,
12760
12881
  location: location ? `${location}.attrs` : "attrs"
@@ -12951,7 +13072,7 @@ function resolvePortableMediaReferences(references, lookup) {
12951
13072
 
12952
13073
  //#endregion
12953
13074
  //#region ../media-core/src/contentMediaAudit.ts
12954
- function isRecord$6(value) {
13075
+ function isRecord$5(value) {
12955
13076
  return typeof value === "object" && value !== null && !Array.isArray(value);
12956
13077
  }
12957
13078
  function formatContentFieldPath(path) {
@@ -12965,11 +13086,11 @@ function summarizeContentMediaValue(value) {
12965
13086
  }
12966
13087
  if (value === null) return "null";
12967
13088
  if (Array.isArray(value)) return `array(${value.length})`;
12968
- if (isRecord$6(value)) return `object(${Object.keys(value).sort().join(",")})`;
13089
+ if (isRecord$5(value)) return `object(${Object.keys(value).sort().join(",")})`;
12969
13090
  return typeof value;
12970
13091
  }
12971
13092
  function isPortableMediaValue(value, allowedMediaTypes$1) {
12972
- if (!isRecord$6(value) || !parseCanonicalMediaIdentifier(value.identifier).ok) return false;
13093
+ if (!isRecord$5(value) || !parseCanonicalMediaIdentifier(value.identifier).ok) return false;
12973
13094
  const type = value.type ?? allowedMediaTypes$1[0];
12974
13095
  const validType = allowedMediaTypes$1.some((allowed) => allowed === type);
12975
13096
  const hasEnvironmentFields = [
@@ -13020,7 +13141,7 @@ function auditMediaValue(context, path, allowedMediaTypes$1, value) {
13020
13141
  }];
13021
13142
  }
13022
13143
  function auditFields(context, fields, value, parentPath) {
13023
- if (!isRecord$6(value)) return [];
13144
+ if (!isRecord$5(value)) return [];
13024
13145
  const findings = [];
13025
13146
  for (const field of fields) {
13026
13147
  if (!(field.id in value)) continue;
@@ -13037,7 +13158,7 @@ function auditFields(context, fields, value, parentPath) {
13037
13158
  if (!Array.isArray(fieldValue)) break;
13038
13159
  for (const [index, item] of fieldValue.entries()) {
13039
13160
  const itemPath = [...fieldPath, index];
13040
- if (!isRecord$6(item)) {
13161
+ if (!isRecord$5(item)) {
13041
13162
  findings.push({
13042
13163
  tag: "missing-schema",
13043
13164
  context,
@@ -13139,7 +13260,7 @@ function resolveLegacyMediaFindings(findings, assets) {
13139
13260
  //#endregion
13140
13261
  //#region ../media-core/src/contentMediaAuditFieldAdapter.ts
13141
13262
  const contentMediaTypes = new Set(mediaTypeDiscriminants);
13142
- function isRecord$5(value) {
13263
+ function isRecord$4(value) {
13143
13264
  return typeof value === "object" && value !== null && !Array.isArray(value);
13144
13265
  }
13145
13266
  function unknownArray(value) {
@@ -13148,7 +13269,7 @@ function unknownArray(value) {
13148
13269
  function fieldsArray(value) {
13149
13270
  const directFields = unknownArray(value);
13150
13271
  if (directFields) return directFields;
13151
- if (!isRecord$5(value)) return null;
13272
+ if (!isRecord$4(value)) return null;
13152
13273
  return unknownArray(value.fields);
13153
13274
  }
13154
13275
  function nestedFields(field) {
@@ -13217,7 +13338,7 @@ function mergeFields(fields) {
13217
13338
  }
13218
13339
  function adaptFields(rawFields, flattenRepeaterGroups = false, defaultFileKinds = ["document"]) {
13219
13340
  return mergeFields(rawFields.flatMap((rawField) => {
13220
- if (!isRecord$5(rawField)) return [];
13341
+ if (!isRecord$4(rawField)) return [];
13221
13342
  const { id: id$2, type } = rawField;
13222
13343
  if (typeof id$2 !== "string" || !id$2 || typeof type !== "string") return [];
13223
13344
  if (type === "media" || type === "file") {
@@ -13227,7 +13348,7 @@ function adaptFields(rawFields, flattenRepeaterGroups = false, defaultFileKinds
13227
13348
  allowedMediaTypes: allowedMediaTypes(rawField, type, defaultFileKinds)
13228
13349
  }];
13229
13350
  }
13230
- if (flattenRepeaterGroups && type === "group" && isRecord$5(rawField.ui) && rawField.ui.flattenInRepeater === true) {
13351
+ if (flattenRepeaterGroups && type === "group" && isRecord$4(rawField.ui) && rawField.ui.flattenInRepeater === true) {
13231
13352
  return adaptFields(nestedFields(rawField), false, defaultFileKinds);
13232
13353
  }
13233
13354
  if (type === "group" || type === "modal") {
@@ -13242,12 +13363,12 @@ function adaptFields(rawFields, flattenRepeaterGroups = false, defaultFileKinds
13242
13363
  return [{
13243
13364
  kind: "object",
13244
13365
  id: id$2,
13245
- fields: adaptFields(tabs.flatMap((tab) => isRecord$5(tab) ? unknownArray(tab.fields) ?? [] : []), false, defaultFileKinds)
13366
+ fields: adaptFields(tabs.flatMap((tab) => isRecord$4(tab) ? unknownArray(tab.fields) ?? [] : []), false, defaultFileKinds)
13246
13367
  }];
13247
13368
  }
13248
13369
  if (type !== "repeater") return [];
13249
- if (isRecord$5(rawField.itemTypes)) {
13250
- const variants = Object.entries(rawField.itemTypes).flatMap(([typeId, itemType]) => isRecord$5(itemType) && Array.isArray(itemType.fields) ? [{
13370
+ if (isRecord$4(rawField.itemTypes)) {
13371
+ const variants = Object.entries(rawField.itemTypes).flatMap(([typeId, itemType]) => isRecord$4(itemType) && Array.isArray(itemType.fields) ? [{
13251
13372
  typeId,
13252
13373
  fields: adaptFields(itemType.fields, true, defaultFileKinds)
13253
13374
  }] : []);
@@ -13746,7 +13867,7 @@ const runtimeBoxBackgroundSchema = z.discriminatedUnion("type", [
13746
13867
  ]).nullable().optional() })
13747
13868
  ]);
13748
13869
  function normalizeAuthoringOpacity(value) {
13749
- if (!isRecord$3(value)) return value;
13870
+ if (!isRecord$2(value)) return value;
13750
13871
  return {
13751
13872
  ...value,
13752
13873
  opacity: normalizeOpacity(value.opacity)
@@ -13755,7 +13876,7 @@ function normalizeAuthoringOpacity(value) {
13755
13876
  function normalizeOpacity(value) {
13756
13877
  return typeof value === "number" && value > 1 && value <= 100 ? value / 100 : value;
13757
13878
  }
13758
- function isRecord$3(value) {
13879
+ function isRecord$2(value) {
13759
13880
  return typeof value === "object" && value !== null && !Array.isArray(value);
13760
13881
  }
13761
13882
 
@@ -14628,7 +14749,7 @@ function validateCompositionBudget(input) {
14628
14749
 
14629
14750
  //#endregion
14630
14751
  //#region ../theme-core/src/site-styles/records.ts
14631
- function isRecord$2(value) {
14752
+ function isRecord$1(value) {
14632
14753
  return typeof value === "object" && value !== null && !Array.isArray(value);
14633
14754
  }
14634
14755
 
@@ -14830,15 +14951,15 @@ function parsePersistedFooterPreferences(value) {
14830
14951
  }
14831
14952
  /** One-time backfill rule, also exercised against the migration SQL. Not a runtime fallback. */
14832
14953
  function readFooterPreferences(theme) {
14833
- const footer = isRecord$2(theme) && isRecord$2(theme.footer) ? theme.footer : {};
14834
- const background = isRecord$2(footer.background) ? footer.background : {};
14954
+ const footer = isRecord$1(theme) && isRecord$1(theme.footer) ? theme.footer : {};
14955
+ const background = isRecord$1(footer.background) ? footer.background : {};
14835
14956
  const token = background.type === "color" && background.contentOwner === siteChromeBackgroundOverrideOwner ? parseSiteChromeBackgroundColorToken(background.color) : null;
14836
14957
  return {
14837
14958
  background: token === null ? { kind: "default" } : {
14838
14959
  kind: "color",
14839
14960
  token
14840
14961
  },
14841
- navigationLayout: isRecord$2(footer.navLayout) && footer.navLayout.layout === "stack" ? "stack" : "inline-wrap"
14962
+ navigationLayout: isRecord$1(footer.navLayout) && footer.navLayout.layout === "stack" ? "stack" : "inline-wrap"
14842
14963
  };
14843
14964
  }
14844
14965
  function applyFooterPreferences(theme, footer, preferences) {
@@ -15774,6 +15895,9 @@ const arrangementSlotNames = [
15774
15895
  "date-label",
15775
15896
  "time",
15776
15897
  "price",
15898
+ "price-amount",
15899
+ "price-unit",
15900
+ "price-note",
15777
15901
  "mark",
15778
15902
  "navigation",
15779
15903
  "time-start",
@@ -15836,6 +15960,7 @@ function assignedItemRoles(look, overrides) {
15836
15960
  ...Object.values(look.structure.slotRoles ?? {}),
15837
15961
  ...roles.container ? [roles.container] : [],
15838
15962
  ...roles.items ? [roles.items] : [],
15963
+ ...roles.featured ? [roles.featured] : [],
15839
15964
  ...Object.values(roles.at ?? {})
15840
15965
  ];
15841
15966
  }
@@ -33929,6 +34054,54 @@ const folioLooks = {
33929
34054
  id: id("card-list-scroll-row"),
33930
34055
  treatment: "carousel-row-sheet",
33931
34056
  roleMap: folioRoles
34057
+ },
34058
+ {
34059
+ id: id("body-text-title-beside"),
34060
+ treatment: "body-beside",
34061
+ roleMap: folioRoles
34062
+ },
34063
+ {
34064
+ id: id("body-text-large-opening"),
34065
+ treatment: "body-opening",
34066
+ roleMap: folioRoles
34067
+ },
34068
+ {
34069
+ id: id("faq-questions-under-title"),
34070
+ treatment: "faq-under",
34071
+ itemRoles: { items: "card" },
34072
+ roleMap: folioRoles
34073
+ },
34074
+ {
34075
+ id: id("faq-title-beside-questions"),
34076
+ treatment: "faq-beside",
34077
+ itemRoles: { items: "card" },
34078
+ roleMap: folioRoles
34079
+ },
34080
+ {
34081
+ id: id("faq-questions-two-columns"),
34082
+ treatment: "faq-columns",
34083
+ itemRoles: { items: "card" },
34084
+ roleMap: folioRoles
34085
+ },
34086
+ {
34087
+ id: id("image-gallery-square-tiles"),
34088
+ treatment: "gallery-tiles",
34089
+ roleMap: folioRoles
34090
+ },
34091
+ {
34092
+ id: id("image-gallery-lead-photo"),
34093
+ treatment: "gallery-lead",
34094
+ roleMap: folioRoles
34095
+ },
34096
+ {
34097
+ id: id("image-gallery-captions-under"),
34098
+ treatment: "gallery-captions",
34099
+ roleMap: folioRoles
34100
+ },
34101
+ {
34102
+ id: id("cta-centred"),
34103
+ treatment: "cta-centred",
34104
+ roleMap: folioRoles
33932
34105
  }
33933
34106
  ]
33934
34107
  };
@@ -34117,6 +34290,56 @@ const fulcrumOffers = [
34117
34290
  id: id("card-list-accent-edged-cards"),
34118
34291
  treatment: "cards-accent-edged",
34119
34292
  roleMap: fulcrumRoles
34293
+ },
34294
+ {
34295
+ id: id("body-text-reading-column"),
34296
+ treatment: "body-column",
34297
+ roleMap: fulcrumRoles
34298
+ },
34299
+ {
34300
+ id: id("body-text-title-beside"),
34301
+ treatment: "body-beside",
34302
+ roleMap: fulcrumRoles
34303
+ },
34304
+ {
34305
+ id: id("body-text-large-opening"),
34306
+ treatment: "body-opening",
34307
+ roleMap: fulcrumRoles
34308
+ },
34309
+ {
34310
+ id: id("faq-questions-under-title"),
34311
+ treatment: "faq-under",
34312
+ roleMap: fulcrumRoles
34313
+ },
34314
+ {
34315
+ id: id("faq-title-beside-questions"),
34316
+ treatment: "faq-beside",
34317
+ roleMap: fulcrumRoles
34318
+ },
34319
+ {
34320
+ id: id("faq-questions-two-columns"),
34321
+ treatment: "faq-columns",
34322
+ roleMap: fulcrumRoles
34323
+ },
34324
+ {
34325
+ id: id("image-gallery-square-tiles"),
34326
+ treatment: "gallery-tiles",
34327
+ roleMap: fulcrumRoles
34328
+ },
34329
+ {
34330
+ id: id("image-gallery-lead-photo"),
34331
+ treatment: "gallery-lead",
34332
+ roleMap: fulcrumRoles
34333
+ },
34334
+ {
34335
+ id: id("image-gallery-captions-under"),
34336
+ treatment: "gallery-captions",
34337
+ roleMap: fulcrumRoles
34338
+ },
34339
+ {
34340
+ id: id("cta-centred"),
34341
+ treatment: "cta-centred",
34342
+ roleMap: fulcrumRoles
34120
34343
  }
34121
34344
  ];
34122
34345
  const fulcrumLooks = {
@@ -34362,6 +34585,56 @@ const posterOffers = [
34362
34585
  id: id("card-list-scroll-row"),
34363
34586
  treatment: "carousel-row-punchy",
34364
34587
  roleMap: posterRoles
34588
+ },
34589
+ {
34590
+ id: id("body-text-reading-column"),
34591
+ treatment: "body-column",
34592
+ roleMap: posterRoles
34593
+ },
34594
+ {
34595
+ id: id("body-text-title-beside"),
34596
+ treatment: "body-beside",
34597
+ roleMap: posterRoles
34598
+ },
34599
+ {
34600
+ id: id("body-text-large-opening"),
34601
+ treatment: "body-opening",
34602
+ roleMap: posterRoles
34603
+ },
34604
+ {
34605
+ id: id("faq-questions-under-title"),
34606
+ treatment: "faq-under",
34607
+ roleMap: posterRoles
34608
+ },
34609
+ {
34610
+ id: id("faq-title-beside-questions"),
34611
+ treatment: "faq-beside",
34612
+ roleMap: posterRoles
34613
+ },
34614
+ {
34615
+ id: id("faq-questions-two-columns"),
34616
+ treatment: "faq-columns",
34617
+ roleMap: posterRoles
34618
+ },
34619
+ {
34620
+ id: id("image-gallery-square-tiles"),
34621
+ treatment: "gallery-tiles",
34622
+ roleMap: posterRoles
34623
+ },
34624
+ {
34625
+ id: id("image-gallery-lead-photo"),
34626
+ treatment: "gallery-lead",
34627
+ roleMap: posterRoles
34628
+ },
34629
+ {
34630
+ id: id("image-gallery-captions-under"),
34631
+ treatment: "gallery-captions",
34632
+ roleMap: posterRoles
34633
+ },
34634
+ {
34635
+ id: id("cta-centred"),
34636
+ treatment: "cta-centred",
34637
+ roleMap: posterRoles
34365
34638
  }
34366
34639
  ];
34367
34640
  const posterLooks = {
@@ -34408,7 +34681,8 @@ const posterLooks = {
34408
34681
  },
34409
34682
  pop: {
34410
34683
  kind: "token",
34411
- token: "accent"
34684
+ token: "accent",
34685
+ buttonContext: { primary: unsafeAsOpaqueButtonColourToken("primary") }
34412
34686
  },
34413
34687
  inverse: {
34414
34688
  kind: "token",
@@ -34680,6 +34954,44 @@ const lanternOffers = [
34680
34954
  id: id("card-list-scroll-row"),
34681
34955
  treatment: "carousel-row-cards",
34682
34956
  roleMap: lanternRoles
34957
+ },
34958
+ {
34959
+ id: id("body-text-title-beside"),
34960
+ treatment: "body-beside",
34961
+ roleMap: lanternRoles
34962
+ },
34963
+ {
34964
+ id: id("body-text-large-opening"),
34965
+ treatment: "body-opening",
34966
+ roleMap: lanternRoles
34967
+ },
34968
+ {
34969
+ id: id("faq-questions-under-title"),
34970
+ treatment: "faq-under",
34971
+ itemRoles: { items: "card" },
34972
+ roleMap: lanternRoles
34973
+ },
34974
+ {
34975
+ id: id("faq-title-beside-questions"),
34976
+ treatment: "faq-beside",
34977
+ itemRoles: { items: "card" },
34978
+ roleMap: lanternRoles
34979
+ },
34980
+ {
34981
+ id: id("faq-questions-two-columns"),
34982
+ treatment: "faq-columns",
34983
+ itemRoles: { items: "card" },
34984
+ roleMap: lanternRoles
34985
+ },
34986
+ {
34987
+ id: id("image-gallery-lead-photo"),
34988
+ treatment: "gallery-lead",
34989
+ roleMap: lanternRoles
34990
+ },
34991
+ {
34992
+ id: id("cta-centred"),
34993
+ treatment: "cta-centred",
34994
+ roleMap: lanternRoles
34683
34995
  }
34684
34996
  ];
34685
34997
  const lanternLooks = {
@@ -34919,6 +35231,56 @@ const measureOffers = [
34919
35231
  id: id("card-list-scroll-row"),
34920
35232
  treatment: "carousel-row-sheets",
34921
35233
  roleMap: measureRoles
35234
+ },
35235
+ {
35236
+ id: id("body-text-reading-column"),
35237
+ treatment: "body-column",
35238
+ roleMap: measureRoles
35239
+ },
35240
+ {
35241
+ id: id("body-text-title-beside"),
35242
+ treatment: "body-beside",
35243
+ roleMap: measureRoles
35244
+ },
35245
+ {
35246
+ id: id("body-text-large-opening"),
35247
+ treatment: "body-opening",
35248
+ roleMap: measureRoles
35249
+ },
35250
+ {
35251
+ id: id("faq-title-beside-questions"),
35252
+ treatment: "faq-beside",
35253
+ roleMap: measureRoles
35254
+ },
35255
+ {
35256
+ id: id("faq-questions-under-title"),
35257
+ treatment: "faq-under",
35258
+ roleMap: measureRoles
35259
+ },
35260
+ {
35261
+ id: id("faq-questions-two-columns"),
35262
+ treatment: "faq-columns",
35263
+ roleMap: measureRoles
35264
+ },
35265
+ {
35266
+ id: id("image-gallery-square-tiles"),
35267
+ treatment: "gallery-tiles",
35268
+ roleMap: measureRoles
35269
+ },
35270
+ {
35271
+ id: id("image-gallery-lead-photo"),
35272
+ treatment: "gallery-lead",
35273
+ roleMap: measureRoles
35274
+ },
35275
+ {
35276
+ id: id("image-gallery-captions-under"),
35277
+ treatment: "gallery-captions",
35278
+ roleMap: measureRoles
35279
+ },
35280
+ {
35281
+ id: id("cta-centred"),
35282
+ treatment: "cta-centred",
35283
+ roleMap: measureRoles
34922
35284
  }
34923
35285
  ];
34924
35286
  const measureLooks = {
@@ -35461,7 +35823,7 @@ const curatedSiteStyles = [
35461
35823
  },
35462
35824
  compositionBudget: quietBudget,
35463
35825
  typography: fulcrumTypography,
35464
- looks: fulcrumLooks,
35826
+ looks: withPriceLooks(withTeamLooks(fulcrumLooks, fulcrumRoles), fulcrumRoles),
35465
35827
  contentTemplateDefaults: { event: "event-header" },
35466
35828
  themeOverrides: {
35467
35829
  accordions: {
@@ -35599,7 +35961,10 @@ const curatedSiteStyles = [
35599
35961
  },
35600
35962
  compositionBudget: expressiveBudget,
35601
35963
  typography: posterTypography,
35602
- looks: posterLooks,
35964
+ looks: withPriceLooks(withTeamLooks(posterLooks, posterRoles), posterRoles, {
35965
+ ...posterRoles,
35966
+ statement: "pop"
35967
+ }),
35603
35968
  contentTemplateDefaults: { event: "event-header" },
35604
35969
  themeOverrides: {
35605
35970
  accordions: boldBorderedAccordionSystem,
@@ -35653,7 +36018,7 @@ const curatedSiteStyles = [
35653
36018
  },
35654
36019
  compositionBudget: quietBudget,
35655
36020
  typography: lanternTypography,
35656
- looks: lanternLooks,
36021
+ looks: withPriceLooks(withTeamLooks(lanternLooks, lanternRoles), lanternRoles),
35657
36022
  contentTemplateDefaults: { event: "event-header" },
35658
36023
  themeOverrides: {
35659
36024
  accordions: warmInsetAccordionSystem,
@@ -35713,7 +36078,7 @@ const curatedSiteStyles = [
35713
36078
  },
35714
36079
  compositionBudget: quietBudget,
35715
36080
  typography: measureTypography,
35716
- looks: measureLooks,
36081
+ looks: withPriceLooks(withTeamLooks(measureLooks, measureRoles), measureRoles),
35717
36082
  contentTemplateDefaults: { event: "event-header" },
35718
36083
  themeOverrides: {
35719
36084
  accordions: editorialDividedAccordionSystem,
@@ -35753,7 +36118,7 @@ const curatedSiteStyles = [
35753
36118
  compositionBudget: accentLedQuietBudget,
35754
36119
  typography: folioTypography,
35755
36120
  heroTypography: groundedSerifHeroTypography,
35756
- looks: folioLooks,
36121
+ looks: withPriceLooks(withTeamLooks(folioLooks, folioRoles), folioRoles),
35757
36122
  contentTemplateDefaults: { event: "event-header" },
35758
36123
  themeOverrides: {
35759
36124
  accordions: editorialDividedAccordionSystem,
@@ -35897,6 +36262,52 @@ curatedSiteStyles.forEach((style) => {
35897
36262
  const recipes = new Set([...Object.values(style.footerLookRecipes ?? {}), ...style.recommendedFooterLookIds.map((id$2) => resolveFooterLookRecipe(style, id$2))]);
35898
36263
  recipes.forEach((recipe) => validateFooterRecipeSurfaces(style, recipe));
35899
36264
  });
36265
+ function withTeamLooks(looks, roleMap) {
36266
+ return {
36267
+ ...looks,
36268
+ offers: [
36269
+ {
36270
+ id: id("team-members-tall-portraits"),
36271
+ treatment: "team-portraits",
36272
+ roleMap
36273
+ },
36274
+ {
36275
+ id: id("team-members-portrait-bio"),
36276
+ treatment: "team-bio",
36277
+ roleMap
36278
+ },
36279
+ {
36280
+ id: id("team-members-ruled-names"),
36281
+ treatment: "team-names",
36282
+ roleMap
36283
+ },
36284
+ ...looks.offers
36285
+ ]
36286
+ };
36287
+ }
36288
+ function withPriceLooks(looks, roleMap, featuredRoleMap = roleMap) {
36289
+ return {
36290
+ ...looks,
36291
+ offers: [
36292
+ {
36293
+ id: id("shop-price-cards"),
36294
+ treatment: "shop-prices",
36295
+ roleMap
36296
+ },
36297
+ {
36298
+ id: id("shop-price-cards-featured"),
36299
+ treatment: "shop-prices-featured",
36300
+ roleMap: featuredRoleMap
36301
+ },
36302
+ {
36303
+ id: id("shop-ruled-prices"),
36304
+ treatment: "shop-price-list",
36305
+ roleMap
36306
+ },
36307
+ ...looks.offers
36308
+ ]
36309
+ };
36310
+ }
35900
36311
 
35901
36312
  //#endregion
35902
36313
  //#region ../theme-core/src/site-styles/pageDesignEditorCapabilities.ts
@@ -38668,29 +39079,29 @@ function planGeneratedHeaderOpeningSection(input) {
38668
39079
  }
38669
39080
  function hasPersistedImageBackground(content) {
38670
39081
  const sectionStyles = content._sectionStyles;
38671
- if (!isRecord$2(sectionStyles)) return false;
39082
+ if (!isRecord$1(sectionStyles)) return false;
38672
39083
  const background = sectionStyles.background;
38673
- return isRecord$2(background) && background.type === "image" && background.image !== undefined;
39084
+ return isRecord$1(background) && background.type === "image" && background.image !== undefined;
38674
39085
  }
38675
39086
  function openingBackground(content) {
38676
39087
  const sectionStyles = content ? content._sectionStyles : null;
38677
- if (!isRecord$2(sectionStyles)) return null;
39088
+ if (!isRecord$1(sectionStyles)) return null;
38678
39089
  const background = sectionStyles.background;
38679
- return isRecord$2(background) ? background : null;
39090
+ return isRecord$1(background) ? background : null;
38680
39091
  }
38681
39092
  function contentHasContrastOverlay(content) {
38682
39093
  if (!content) return false;
38683
39094
  const imageSurfaceTreatment = content.imageSurfaceTreatment;
38684
- const imageSurfaceTreatmentKind = isRecord$2(imageSurfaceTreatment) ? imageSurfaceTreatment.kind : null;
39095
+ const imageSurfaceTreatmentKind = isRecord$1(imageSurfaceTreatment) ? imageSurfaceTreatment.kind : null;
38685
39096
  const background = openingBackground(content);
38686
39097
  const backgroundOverlay = background?.overlay;
38687
- const hasBackgroundOverlay = isRecord$2(backgroundOverlay) && backgroundOverlay.type !== undefined && backgroundOverlay.type !== null && backgroundOverlay.type !== "none";
39098
+ const hasBackgroundOverlay = isRecord$1(backgroundOverlay) && backgroundOverlay.type !== undefined && backgroundOverlay.type !== null && backgroundOverlay.type !== "none";
38688
39099
  return content.heroLegibility === "scrim-gradient" || imageSurfaceTreatmentKind === "brand-scrim" || imageSurfaceTreatmentKind === "neutral-scrim" || hasBackgroundOverlay;
38689
39100
  }
38690
39101
  function contentHasOpeningTopSpacing(content) {
38691
39102
  if (!content) return false;
38692
39103
  const sectionStyles = content._sectionStyles;
38693
- const minHeight = isRecord$2(sectionStyles) ? sectionStyles.minHeight : null;
39104
+ const minHeight = isRecord$1(sectionStyles) ? sectionStyles.minHeight : null;
38694
39105
  return content.sectionHeight === "hero" || content.sectionHeight === "immersive" || minHeight === "hero" || minHeight === "immersive";
38695
39106
  }
38696
39107
  function runtimeHasContrastOverlay(block) {
@@ -45046,6 +45457,7 @@ const upsertStaffMemberCommandSchema = z.object({
45046
45457
  displayName: z.string().min(1),
45047
45458
  roleLabel: z.string().optional(),
45048
45459
  shortBio: z.string().optional(),
45460
+ avatarRef: mediaRefSchema.nullable().optional(),
45049
45461
  timezone: z.string().min(1).optional(),
45050
45462
  specialties: stringArraySchema.optional(),
45051
45463
  publicVisibility: z.enum(["hidden", "visible"]).optional()
@@ -46141,7 +46553,7 @@ function planCommandOrderingDependencies(command, commands, providerByRef, requi
46141
46553
 
46142
46554
  //#endregion
46143
46555
  //#region ../site-commands/src/guards.ts
46144
- function isRecord$1(value) {
46556
+ function isRecord(value) {
46145
46557
  return typeof value === "object" && value !== null;
46146
46558
  }
46147
46559
 
@@ -46303,6 +46715,7 @@ function commandRefContributions(command) {
46303
46715
  if (isBookingRefCommand(command)) {
46304
46716
  return bookingCommandRefContributions(command);
46305
46717
  }
46718
+ if (isLifecycleRefCommand(command)) return lifecycleCommandRefContributions(command);
46306
46719
  switch (command.type) {
46307
46720
  case "configureSiteIdentity":
46308
46721
  case "configureBookingSettings": return {
@@ -46320,7 +46733,6 @@ function commandRefContributions(command) {
46320
46733
  case "upsertPage":
46321
46734
  case "upsertForm":
46322
46735
  case "upsertFooterContent":
46323
- case "upsertStaffMember":
46324
46736
  case "upsertVenue":
46325
46737
  case "upsertEventCategory": return {
46326
46738
  provides: [{
@@ -46329,6 +46741,7 @@ function commandRefContributions(command) {
46329
46741
  }],
46330
46742
  requires: []
46331
46743
  };
46744
+ case "upsertStaffMember": return staffMemberCommandRefContributions(command);
46332
46745
  case "upsertEventSeries": return {
46333
46746
  provides: [{
46334
46747
  ref: command.ref,
@@ -46430,29 +46843,6 @@ function commandRefContributions(command) {
46430
46843
  }],
46431
46844
  requires: collectNavigationRefs(command.input.items, "input.items")
46432
46845
  };
46433
- case "publishPage":
46434
- case "unpublishPage": return {
46435
- provides: [],
46436
- requires: command.input.pageRef !== undefined ? [{
46437
- ref: command.input.pageRef,
46438
- field: "input.pageRef"
46439
- }] : []
46440
- };
46441
- case "publishContentEntry": return {
46442
- provides: [],
46443
- requires: command.input.contentEntryRef !== undefined ? [{
46444
- ref: command.input.contentEntryRef,
46445
- field: "input.contentEntryRef"
46446
- }] : []
46447
- };
46448
- case "unpublishContentEntry":
46449
- case "deleteContentEntry": return {
46450
- provides: [],
46451
- requires: command.input.contentEntryRef !== undefined ? [{
46452
- ref: command.input.contentEntryRef,
46453
- field: "input.contentEntryRef"
46454
- }] : []
46455
- };
46456
46846
  default: return assertNever(command);
46457
46847
  }
46458
46848
  }
@@ -46488,7 +46878,7 @@ function collectVenueRefsFromIntervals(intervals, path) {
46488
46878
  }
46489
46879
  function collectNavigationRefs(items, path) {
46490
46880
  return items.flatMap((item, index) => {
46491
- if (!isRecord$1(item)) return [];
46881
+ if (!isRecord(item)) return [];
46492
46882
  const itemPath = `${path}[${index}]`;
46493
46883
  const refs = [];
46494
46884
  if (typeof item.pageRef === "string") {
@@ -46511,7 +46901,7 @@ function collectNavigationRefs(items, path) {
46511
46901
  }
46512
46902
  function collectBlockRefs(blocks, path) {
46513
46903
  return blocks.flatMap((block, index) => {
46514
- if (!isRecord$1(block)) return [];
46904
+ if (!isRecord(block)) return [];
46515
46905
  const blockPath = `${path}[${index}]`;
46516
46906
  return [...collectNestedRefs(block.props, `${blockPath}.props`), ...collectNestedRefs(block.children, `${blockPath}.children`)];
46517
46907
  });
@@ -46527,9 +46917,45 @@ function collectNestedRefs(value, path) {
46527
46917
  if (Array.isArray(value)) {
46528
46918
  return value.flatMap((item, index) => collectNestedRefs(item, `${path}[${index}]`));
46529
46919
  }
46530
- if (!isRecord$1(value)) return [];
46920
+ if (!isRecord(value)) return [];
46531
46921
  return Object.entries(value).flatMap(([key, child]) => collectNestedRefs(child, `${path}.${key}`));
46532
46922
  }
46923
+ function staffMemberCommandRefContributions(command) {
46924
+ return {
46925
+ provides: [{
46926
+ ref: command.ref,
46927
+ field: "ref"
46928
+ }],
46929
+ requires: optionalRef(command.input.avatarRef ?? undefined, "input.avatarRef")
46930
+ };
46931
+ }
46932
+ const lifecycleRefCommandTypes = [
46933
+ "publishPage",
46934
+ "unpublishPage",
46935
+ "publishContentEntry",
46936
+ "unpublishContentEntry",
46937
+ "deleteContentEntry"
46938
+ ];
46939
+ const lifecycleRefCommandTypeSet = new Set(lifecycleRefCommandTypes);
46940
+ function isLifecycleRefCommand(command) {
46941
+ return lifecycleRefCommandTypeSet.has(command.type);
46942
+ }
46943
+ function lifecycleCommandRefContributions(command) {
46944
+ switch (command.type) {
46945
+ case "publishPage":
46946
+ case "unpublishPage": return {
46947
+ provides: [],
46948
+ requires: optionalRef(command.input.pageRef, "input.pageRef")
46949
+ };
46950
+ case "publishContentEntry":
46951
+ case "unpublishContentEntry":
46952
+ case "deleteContentEntry": return {
46953
+ provides: [],
46954
+ requires: optionalRef(command.input.contentEntryRef, "input.contentEntryRef")
46955
+ };
46956
+ default: return assertNever(command);
46957
+ }
46958
+ }
46533
46959
 
46534
46960
  //#endregion
46535
46961
  //#region ../site-commands/src/staticExecutionGaps.ts
@@ -46762,9 +47188,9 @@ function deriveIdempotencyKey(input) {
46762
47188
  ].join("|"));
46763
47189
  }
46764
47190
  function findUnknownCommandTypes(input) {
46765
- if (!isRecord$1(input) || !Array.isArray(input.commands)) return [];
47191
+ if (!isRecord(input) || !Array.isArray(input.commands)) return [];
46766
47192
  return input.commands.flatMap((command, commandIndex) => {
46767
- if (!isRecord$1(command) || typeof command.type !== "string") return [];
47193
+ if (!isRecord(command) || typeof command.type !== "string") return [];
46768
47194
  if (commandTypeSet.has(command.type)) return [];
46769
47195
  return [{
46770
47196
  code: "unknown_command_type",
@@ -46790,9 +47216,9 @@ function commandIndexForIssuePath(path) {
46790
47216
  return path[0] === "commands" && typeof path[1] === "number" ? path[1] : -1;
46791
47217
  }
46792
47218
  function commandTypeForIssue(input, commandIndex) {
46793
- if (!isRecord$1(input) || !isUnknownArray(input.commands)) return null;
47219
+ if (!isRecord(input) || !isUnknownArray(input.commands)) return null;
46794
47220
  const command = input.commands[commandIndex];
46795
- return isRecord$1(command) && typeof command.type === "string" ? command.type : null;
47221
+ return isRecord(command) && typeof command.type === "string" ? command.type : null;
46796
47222
  }
46797
47223
  function isUnknownArray(value) {
46798
47224
  return Array.isArray(value);
@@ -47842,229 +48268,4 @@ function parseSdkEventRunUpsertInput(input, runIndex, options) {
47842
48268
  }
47843
48269
 
47844
48270
  //#endregion
47845
- //#region ../blocks/src/lib/typeGuards.ts
47846
- /**
47847
- * Strict record guard: excludes null, primitives, and arrays.
47848
- */
47849
- function isRecord(value) {
47850
- return typeof value === "object" && value !== null && !Array.isArray(value);
47851
- }
47852
- /**
47853
- * Non-null object guard: includes arrays for behavior parity with legacy helpers.
47854
- *
47855
- * NOTE: This intentionally narrows to UnknownRecord for compatibility with existing
47856
- * callsites even though arrays pass at runtime. Follow-up cleanup should replace
47857
- * this API with a more precise predicate type and migrate consumers.
47858
- */
47859
- function isObjectRecord(value) {
47860
- return typeof value === "object" && value !== null;
47861
- }
47862
- /**
47863
- * Coerces unknown input into a strict record, returning an empty object fallback.
47864
- */
47865
- function asRecord(value) {
47866
- return isRecord(value) ? value : {};
47867
- }
47868
-
47869
- //#endregion
47870
- //#region ../blocks/src/system/manifest/richTextSchema.ts
47871
- /**
47872
- * Shared Rich Text Schema
47873
- *
47874
- * This module provides a single source of truth for TipTap rich text validation
47875
- * across both the block-form editor and the block rendering system.
47876
- *
47877
- * Rich-text fields use one canonical root shape:
47878
- * `{ type: 'doc', content: [...] }`.
47879
- */
47880
- /**
47881
- * TipTap document node schema (recursive structure)
47882
- *
47883
- * Supports the full TipTap document structure including:
47884
- * - type: Node type (e.g., 'doc', 'paragraph', 'text')
47885
- * - content: Nested array of child nodes
47886
- * - text: Text content for text nodes
47887
- * - attrs: Node attributes (e.g., alignment, color)
47888
- * - marks: Text formatting marks (e.g., bold, italic)
47889
- */
47890
- const TipTapMarkSchema = z.object({
47891
- type: z.string().min(1),
47892
- attrs: z.record(z.string(), z.unknown()).optional()
47893
- }).strict();
47894
- const TipTapNodeSchema = z.lazy(() => z.object({
47895
- type: z.string().min(1),
47896
- content: z.array(TipTapNodeSchema).optional(),
47897
- text: z.string().optional(),
47898
- attrs: z.record(z.string(), z.unknown()).optional(),
47899
- marks: z.array(TipTapMarkSchema).optional()
47900
- }).strict().superRefine((node, ctx) => {
47901
- if (node.type === "doc") {
47902
- ctx.addIssue({
47903
- code: "custom",
47904
- path: ["type"],
47905
- message: "Document nodes are only valid at the rich-text root"
47906
- });
47907
- }
47908
- if (node.type === "text") {
47909
- if (node.text === undefined || node.text.length === 0) {
47910
- ctx.addIssue({
47911
- code: "custom",
47912
- path: ["text"],
47913
- message: "Text nodes require a non-empty text value"
47914
- });
47915
- }
47916
- if (node.content !== undefined) {
47917
- ctx.addIssue({
47918
- code: "custom",
47919
- path: ["content"],
47920
- message: "Text nodes cannot contain child nodes"
47921
- });
47922
- }
47923
- return;
47924
- }
47925
- if (node.text !== undefined) {
47926
- ctx.addIssue({
47927
- code: "custom",
47928
- path: ["text"],
47929
- message: "Only text nodes can contain a text value"
47930
- });
47931
- }
47932
- }));
47933
- /**
47934
- * Canonical schema for a TipTap rich-text document root.
47935
- *
47936
- * Stricter than {@link TipTapNodeSchema}: `type` is literally `'doc'` and
47937
- * `content` is required (possibly empty). This is the shape every producer
47938
- * (dummy content, editor output, migrations) must emit, and the shape every
47939
- * non-legacy consumer can rely on.
47940
- *
47941
- */
47942
- const RichTextDocSchema = z.object({
47943
- type: z.literal("doc"),
47944
- content: z.array(TipTapNodeSchema)
47945
- }).strict();
47946
- /**
47947
- * Type guard for {@link RichTextDoc}.
47948
- *
47949
- * Returns `true` only for the canonical unwrapped form. The shared structural
47950
- * contract lives in `@riverbankcms/core`; parity tests keep its dependency-free
47951
- * guard aligned with this detailed Zod validator.
47952
- */
47953
- function isRichTextDoc(value) {
47954
- return RichTextDocSchema.safeParse(value).success;
47955
- }
47956
- /**
47957
- * Build a canonical {@link RichTextDoc} from plain-text paragraphs.
47958
- *
47959
- * Single source of truth for constructing a TipTap doc from strings.
47960
- * Used by:
47961
- * - `@riverbankcms/dummy-content` (fixture body generators)
47962
- * - `@riverbankcms/content-model` (default template `cta-full` content)
47963
- *
47964
- * Empty strings produce a paragraph with no `content` array — matching
47965
- * the TipTap convention for empty paragraphs. The shape is exactly what
47966
- * {@link RichTextDocSchema} validates, so the type and runtime check
47967
- * never drift from the constructor.
47968
- */
47969
- function createRichTextDoc(paragraphs) {
47970
- return {
47971
- type: "doc",
47972
- content: paragraphs.map((text) => text ? {
47973
- type: "paragraph",
47974
- content: [{
47975
- type: "text",
47976
- text
47977
- }]
47978
- } : { type: "paragraph" })
47979
- };
47980
- }
47981
- function createHardBreakNode() {
47982
- return { type: "hardBreak" };
47983
- }
47984
- /**
47985
- * Parse a small markdown subset into TipTap inline nodes.
47986
- *
47987
- * This intentionally supports only bold (`**text**`) because the SDK/content
47988
- * import paths use it for lightweight default content, not full markdown.
47989
- */
47990
- function parseRichTextInlineMarkdown(text) {
47991
- const out = [];
47992
- const pushText = (value, marks) => {
47993
- if (!value) return;
47994
- out.push(marks && marks.length > 0 ? {
47995
- type: "text",
47996
- text: value,
47997
- marks
47998
- } : {
47999
- type: "text",
48000
- text: value
48001
- });
48002
- };
48003
- let rest = text;
48004
- while (rest.length > 0) {
48005
- const start = rest.indexOf("**");
48006
- if (start === -1) {
48007
- pushText(rest);
48008
- break;
48009
- }
48010
- const end = rest.indexOf("**", start + 2);
48011
- if (end === -1) {
48012
- pushText(rest);
48013
- break;
48014
- }
48015
- pushText(rest.slice(0, start));
48016
- pushText(rest.slice(start + 2, end), [{ type: "bold" }]);
48017
- rest = rest.slice(end + 2);
48018
- }
48019
- return out;
48020
- }
48021
- function parseRichTextParagraphInlineMarkdown(text) {
48022
- return text.split("\n").flatMap((line, index) => {
48023
- const lineNodes = parseRichTextInlineMarkdown(line.trim());
48024
- return index === 0 ? lineNodes : [createHardBreakNode(), ...lineNodes];
48025
- });
48026
- }
48027
- /**
48028
- * Convert a plain string with a tiny markdown subset to canonical TipTap JSON.
48029
- *
48030
- * Double newlines create semantic paragraphs. Single newlines remain inside the
48031
- * current paragraph as TipTap `hardBreak` nodes for line-oriented content such
48032
- * as addresses, opening hours, and contact details.
48033
- */
48034
- function createRichTextDocFromMarkdown(markdown) {
48035
- const normalized = markdown.replace(/\r\n/g, "\n").trim();
48036
- if (!normalized) return {
48037
- type: "doc",
48038
- content: []
48039
- };
48040
- const paragraphs = normalized.split(/\n{2,}/).map((paragraph) => paragraph.trim()).filter(Boolean);
48041
- return {
48042
- type: "doc",
48043
- content: paragraphs.map((paragraph) => {
48044
- const inline = parseRichTextParagraphInlineMarkdown(paragraph);
48045
- return inline.length > 0 ? {
48046
- type: "paragraph",
48047
- content: inline
48048
- } : { type: "paragraph" };
48049
- })
48050
- };
48051
- }
48052
- function buildRichTextSchema(options) {
48053
- let schema = RichTextDocSchema;
48054
- if (options?.required) {
48055
- const label = options.label ?? "This field";
48056
- schema = schema.refine((val) => {
48057
- const content = val.content;
48058
- if (!Array.isArray(content) || content.length === 0) return false;
48059
- const first = content[0];
48060
- if (content.length === 1 && isRecord(first) && first.type === "paragraph" && (!("content" in first) || first.content == null)) {
48061
- return false;
48062
- }
48063
- return true;
48064
- }, { message: `${label} is required` });
48065
- }
48066
- return schema;
48067
- }
48068
-
48069
- //#endregion
48070
- export { createBlocksRef as $, isOnColorBackgroundCandidateToken as $i, looksLikeUuid as $n, asLayoutVariantKey as $r, ACCORDION_OPEN_ACCENT_THICKNESS as $t, parseAndPlanCommandBatchForTypes as A, opaqueSurfaceDeclarations as Ai, pageDesignIntentSchemaVersion as An, parseRelativeStoragePath as Ar, themeSchema as At, pageIdentifierForCommand as B, unsafeAsOpaqueButtonColourToken as Bi, parseCanonicalRuntimeBackground as Bn, generateShadowValue as Br, MQ_MD_DOWN as Bt, pageLinkSchema as C, borderColorStyle as Ci, buildTextContrastShadow as Cn, slugifyMediaIdentifier as Cr, resolvePublishedLook as Ct, sortRecord as D, textColorStyle as Di, resolveItemSurface as Dn, getMimeType as Dr, getGradientPreset as Dt, venueManagementFields as E, rgbColorValue as Ei, arrangementSlotNames as En, getExtensionForMimeType as Er, GRADIENT_PRESET_IDS as Et, eventManagementTiming as F, resolveThemeColorReferenceValue as Fi, sectionFactsForContent as Fn, parseSafeDownloadFilename as Fr, BREAKPOINT_LG as Ft, bookingPaymentCollectionOptionSchema as G, DEFAULT_SURFACE_TEXT_COLOR as Gi, runtimeBoxBackgroundSchema as Gn, backgroundAppearanceQuickColorTokenNames as Gr, getComponentBorderWidthPx as Gt, hasConfiguredBookingVertical as H, surfaceToneFromForegroundToken as Hi, resolveSectionPhotoPlacement as Hn, cardVariantRoleValues as Hr, MQ_SM_UP as Ht, blockIdentifierForCommand as I, resolveTokenOrCssColorValue as Ii, boundaryRuntimeMetricsForDecorativeTransition as In, generateCardCoreCss as Ir, BREAKPOINT_MD as It, require_react as J, surfaceForegroundInputFromResolved as Ji, stripStaleTransitionStyleGroup as Jn, resolveEffectiveKnobs as Jr, parseCustomCssRules as Jt, bookingPaymentTermsSchema as K, SURFACE_FOREGROUND_CSS_VARS as Ki, pageDesignEditorBackgroundOverrideOwner as Kn, parseBackgroundAppearanceColorToken as Kr, getComponentShadowVar as Kt, blockOrderIdentifiersForCommand as L, generateShadowValue$1 as Li, anglePolygonCss as Ln, getDefaultCardVariants as Lr, BREAKPOINT_SM as Lt, evaluateSiteCommandBatchExposure as M, formatButtonColourContractError as Mi, headerRootPaint as Mn, MAX_MANAGEMENT_MEDIA_UPLOAD_BYTES as Mr, generateMobileOverlayBackdropFilterFix as Mt, evaluateSiteCommandExposure as N, isCssColorLiteral as Ni, boundaryLayout as Nn, classifyKnownMimeType as Nr, getHeaderPaintTargets as Nt, stableStringify as O, textColorValue as Oi, resolveLookSlotSurfaces as On, asRecord$1 as Or, parseGradientPresetId as Ot, getSiteCommandMetadata as P, resolveOnColorForThemeToken as Pi, composeBoundary as Pn, managementMediaLibraryUploadLimitForMimeType as Pr, renderHeaderPaintTargetRules as Pt, createBlockRef as Q, expandPalette as Qi, deleteEnvSpecificKeys as Qn, asDesignBlockId as Qr, LABEL_FONT_SIZE_MAP as Qt, entryIdentifierForCommand as R, PUBLIC_BUTTON_ROLES as Ri, transitionCatalogueEntries as Rn, generateCardCss as Rr, BREAKPOINT_XL as Rt, normalizeLinkValue as S, backgroundColorStyle as Si, footerForegroundCandidates as Sn, resolveMediaIdentifier as Sr, resolveModeArrangement as St, isEventVisibility as T, mergeStyles as Ti, arrangementLookHooks as Tn, resolveVideoSelectionIntentForMediaField as Tr, gradientToCss as Tt, eventCommandScheduleSchema as U, buildThemeTokens as Ui, boxBackgroundOverlaySchema as Un, normalizeCardRole as Ur, MQ_TABLET_ONLY as Ut, pagePathForCommand as V, selectLogoVariant as Vi, resolveSectionBackground as Vn, cardRoleSchema as Vr, MQ_SM_DOWN as Vt, eventBookingOfferIntentSchema as W, defaultThemeTokens as Wi, boxBackgroundSchema as Wn, backgroundAppearanceColorTokenNames as Wr, headerVariantValues as Wt, generateCssVars as X, surfaceForegroundValue as Xi, summarizePortableMediaReferences as Xn, cardListKnobBlocks as Xr, INPUT_FONT_SIZE_MAP as Xt, pickShadeTowardBackground as Y, surfaceForegroundStyle as Yi, collectPortableMediaReferencesFromContent as Yn, cardListFamilyBlocks as Yr, FONT_WEIGHT_MAP as Yt, ianaTimezoneSchema as Z, surfaceForegroundValueWithOpacity as Zi, walkAndCollectImageAttrs as Zn, asAppearancePresetId as Zr, INPUT_SPACING_MAP as Zt, internalResolvedLinkSchema as _, resolveSurface as _i, buildGoogleFontFamilyQuery as _n, mediaTypeDiscriminants as _r, mergeHeaderNavTypographyPreference as _t, isRecord as a, parseThemeColorToken as aa, defineNoBlockDesignCapability as ai, generateButtonActionLayoutCss as an, getDirectImageUrlForRelativePath as ar, createFormRef as at, isResolvedInternalLinkEntityType as b, safeTokenOr as bi, buttonStyleSelectionSchema as bn, parseCanonicalMediaIdentifier as br, readStoredMode as bt, sdkEventOccurrenceInputSchema as c, featuresFromHex as ca, featureCardCompositionTreatmentValues as ci, resolvedButtonColourDeclarations as cn, isSiteScopedDirectImageStoragePath as cr, createSiteCommandSiteRef as ct, classifySdkEventBookingOffer as d, __commonJSMin as da, makeBoundaryId as di, parseThemeButtonVariantId as dn, mediaSchema as dr, slugPart as dt, onColorTokenName as ea, asPageFlowPresetId as ei, ACCORDION_SPACING_MAP as en, rotateNormalizedPoint as er, createCommandRef as et, RESOLVED_INTERNAL_LINK_ENTITY_TYPES as f, __toESM as fa, offeringsPreviewCompositionTreatmentValues as fi, themeButtonExtraClassesWithTrailingIcon as fn, persistableMediaSchema as fr, effectiveHeaderNavLinkStyle as ft, internalLinkSchema as g, visibleHeadingDecorationFamilyValues as gi, skinTokenCssVars as gn, resolveManagedMediaReference as gr, readOpeningForegroundProjection as gt, externalLinkSchema as h, toNonEmptyReadonlyArray as hi, parseThemeForPersistence as hn, indexRenderableMediaAssets as hr, transparentHeaderForegroundInput as ht, isObjectRecord as i, resolveOpaqueSurfaceHex as ia, defineFrameCapability as ii, ICON_SIZE_PX as in, resolveMediaTransformForAspect as ir, createFooterRef as it, mapEventCommandContent as j, compileButtonColourStates as ji, footerPreferencesSchema as jn, FILE_SIZE_LIMITS as jr, generateHeaderScrollTreatmentStyles as jt, createDryRunReport as k, opaqueSurfaceContextFromTheme as ki, pageDesignBoundaryTreatmentSchema as kn, normalizeAmbiguousStoragePathForSite as kr, deriveSiteStyleBlockPolicy as kt, sdkEventUpsertOptionalFieldSchemas as l, hexToRgb as la, headingDecorationColorTokenValues as li, resolvedButtonFocusDeclarations as ln, imageMediaSchema as lr, createVenueRef as lt, entryLinkSchema as m, tileTreatmentValues as mi, themeButtonVariantClassNames as mn, buildRenderableMediaAssetIndex as mr, headerLeafTextColor as mt, createRichTextDoc as n, ORDINARY_TEXT_MIN_CONTRAST_RATIO as na, assertNever$1 as ni, ACCORDION_TRIGGER_LETTER_SPACING as nn, isExplicitRectCrop as nr, createEventCategoryRef as nt, classifySdkEventTiming as o, parseBlockColorToken as oa, eventListTreatmentValues as oi, generateButtonCss as on, getDirectImageUrlForSiteScopedPath as or, createNavigationRef as ot, customLinkSchema as p, testimonialsCompositionTreatmentValues as pi, themeButtonSizeClassName as pn, runtimeMediaSchema as pr, headerForegroundCandidates as pt, require_jsx_runtime as q, surfaceForegroundDeclarations as qi, siteChromeBackgroundOverrideOwner as qn, defineBlockDesignMetadata as qr, parseBlockCustomCssRules as qt, isRichTextDoc as r, contrastRatio as ra, defineBlockDesignCapability as ri, ICON_CONFIG as rn, parseAspectRatioValue as rr, createEventSeriesRef as rt, sdkCourseBookingSettingsSchema as s, parseColorTokenParts as sa, eyebrowTreatmentValues as si, RESOLVED_BUTTON_DISABLED_DECLARATIONS as sn, getImageUrl as sr, createPageRef as st, RichTextDocSchema as t, getTextColorForBackground as ta, asSiteStyleId as ti, ACCORDION_TRIGGER_FONT_SCALE as tn, normalizeWidthCandidates as tr, createContentEntryRef as tt, classifySdkEventSchedule as u, oklchToHexGamut as ua, introCompositionTreatmentValues as ui, generateDefaultButtonSystem as un, mediaPosterSchema as ur, refSlug as ut, internalRouteOnlyLinkSchema as v, surfaceDecorationColors as vi, generateFontFaceCss as vn, mediaIdentifierSchema as vr, readHeaderNavFontSizePreference as vt, eventVisibilitySchema as w, cssVarValue as wi, generateNavLinkCSS as wn, deriveVideoSlotPolicy as wr, requireCuratedSiteStyle as wt, linkSchema as x, TokenResolver as xi, generateFooterCss as xn, parseMediaIdentifier as xr, resolveEffectiveArrangement as xt, isInternalResolvedLinkValue as y, resolveSurfaceForeground as yi, getFontWidthRange as yn, buildMediaIdentifierFromFilename as yr, arrangementManifestFromVariants as yt, pageIdentifierForBlockCommand as z, buttonVariantIdSchema as zi, deriveSectionGround as zn, renderCssDeclarations as zr, MQ_LG_UP as zt };
48271
+ export { createNavigationRef as $, cardRoleSchema as $n, __toESM as $r, footerPreferencesSchema as $t, eventManagementTiming as A, runtimeMediaSchema as An, backgroundColorStyle as Ar, BREAKPOINT_SM as At, bookingPaymentCollectionOptionSchema as B, deriveVideoSlotPolicy as Bn, PUBLIC_BUTTON_ROLES as Br, themeButtonSizeClassName as Bt, stableStringify as C, getDirectImageUrlForRelativePath as Cn, tileTreatmentValues as Cr, themeSchema as Ct, evaluateSiteCommandBatchExposure as D, mediaPosterSchema as Dn, surfaceDecorationColors as Dr, renderHeaderPaintTargetRules as Dt, mapEventCommandContent as E, isSiteScopedDirectImageStoragePath as En, resolveSurface as Er, getHeaderPaintTargets as Et, pageIdentifierForCommand as F, buildMediaIdentifierFromFilename as Fn, opaqueSurfaceDeclarations as Fr, getComponentShadowVar as Ft, createBlockRef as G, normalizeAmbiguousStoragePathForSite as Gn, surfaceForegroundInputFromResolved as Gr, buildTextContrastShadow as Gt, require_jsx_runtime as H, getExtensionForMimeType as Hn, surfaceToneFromForegroundToken as Hr, parseThemeForPersistence as Ht, pagePathForCommand as I, parseCanonicalMediaIdentifier as In, isCssColorLiteral as Ir, ICON_CONFIG as It, createContentEntryRef as J, MAX_MANAGEMENT_MEDIA_UPLOAD_BYTES as Jn, expandPalette as Jr, arrangementSlotNames as Jt, createBlocksRef as K, parseRelativeStoragePath as Kn, surfaceForegroundStyle as Kr, generateNavLinkCSS as Kt, hasConfiguredBookingVertical as L, parseMediaIdentifier as Ln, resolveOnColorForThemeToken as Lr, generateDefaultButtonSystem as Lt, blockOrderIdentifiersForCommand as M, resolveManagedMediaReference as Mn, mergeStyles as Mr, MQ_MD_DOWN as Mt, entryIdentifierForCommand as N, mediaTypeDiscriminants as Nn, rgbColorValue as Nr, headerVariantValues as Nt, evaluateSiteCommandExposure as O, mediaSchema as On, resolveSurfaceForeground as Or, BREAKPOINT_LG as Ot, pageIdentifierForBlockCommand as P, mediaIdentifierSchema as Pn, textColorStyle as Pr, getComponentBorderWidthPx as Pt, createFormRef as Q, renderCssDeclarations as Qn, __commonJSMin as Qr, pageDesignIntentSchemaVersion as Qt, eventCommandScheduleSchema as R, resolveMediaIdentifier as Rn, resolveThemeColorReferenceValue as Rr, parseThemeButtonVariantId as Rt, sortRecord as S, resolveMediaTransformForAspect as Sn, testimonialsCompositionTreatmentValues as Sr, deriveSiteStyleBlockPolicy as St, parseAndPlanCommandBatchForTypes as T, getImageUrl as Tn, visibleHeadingDecorationFamilyValues as Tr, generateMobileOverlayBackdropFilterFix as Tt, require_react as U, getMimeType as Un, defaultThemeTokens as Ur, buttonStyleSelectionSchema as Ut, bookingPaymentTermsSchema as V, resolveVideoSelectionIntentForMediaField as Vn, selectLogoVariant as Vr, themeButtonVariantClassNames as Vt, ianaTimezoneSchema as W, asRecord as Wn, surfaceForegroundDeclarations as Wr, footerForegroundCandidates as Wt, createEventSeriesRef as X, managementMediaLibraryUploadLimitForMimeType as Xn, parseThemeColorToken as Xr, resolveLookSlotSurfaces as Xt, createEventCategoryRef as Y, classifyKnownMimeType as Yn, getTextColorForBackground as Yr, resolveItemSurface as Yt, createFooterRef as Z, parseSafeDownloadFilename as Zn, parseBlockColorToken as Zr, pageDesignBoundaryTreatmentSchema as Zt, normalizeLinkValue as _, looksLikeUuid as _n, featureCardCompositionTreatmentValues as _r, requireCuratedSiteStyle as _t, classifySdkEventSchedule as a, parseCanonicalRuntimeBackground as an, cardListKnobBlocks as ar, effectiveHeaderNavLinkStyle as at, isEventVisibility as b, isExplicitRectCrop as bn, makeBoundaryId as br, getGradientPreset as bt, customLinkSchema as c, boxBackgroundOverlaySchema as cn, asLayoutVariantKey as cr, transparentHeaderForegroundInput as ct, internalLinkSchema as d, siteChromeBackgroundOverrideOwner as dn, assertNever$1 as dr, readHeaderNavFontSizePreference as dt, headerRootPaint as en, cardVariantRoleValues as er, createPageRef as et, internalResolvedLinkSchema as f, stripStaleTransitionStyleGroup as fn, defineBlockDesignCapability as fr, arrangementManifestFromVariants as ft, linkSchema as g, deleteEnvSpecificKeys as gn, eyebrowTreatmentValues as gr, resolvePublishedLook as gt, isResolvedInternalLinkEntityType as h, walkAndCollectImageAttrs as hn, eventListTreatmentValues as hr, resolveModeArrangement as ht, sdkEventUpsertOptionalFieldSchemas as i, deriveSectionGround as in, cardListFamilyBlocks as ir, slugPart as it, blockIdentifierForCommand as j, buildRenderableMediaAssetIndex as jn, borderColorStyle as jr, BREAKPOINT_XL as jt, getSiteCommandMetadata as k, persistableMediaSchema as kn, TokenResolver as kr, BREAKPOINT_MD as kt, entryLinkSchema as l, boxBackgroundSchema as ln, asPageFlowPresetId as lr, readOpeningForegroundProjection as lt, isInternalResolvedLinkValue as m, summarizePortableMediaReferences as mn, defineNoBlockDesignCapability as mr, resolveEffectiveArrangement as mt, sdkCourseBookingSettingsSchema as n, composeBoundary as nn, defineBlockDesignMetadata as nr, createVenueRef as nt, classifySdkEventBookingOffer as o, resolveSectionBackground as on, asAppearancePresetId as or, headerForegroundCandidates as ot, internalRouteOnlyLinkSchema as p, collectPortableMediaReferencesFromContent as pn, defineFrameCapability as pr, readStoredMode as pt, createCommandRef as q, FILE_SIZE_LIMITS as qn, surfaceForegroundValue as qr, arrangementLookHooks as qt, sdkEventOccurrenceInputSchema as r, sectionFactsForContent as rn, resolveEffectiveKnobs as rr, refSlug as rt, RESOLVED_INTERNAL_LINK_ENTITY_TYPES as s, resolveSectionPhotoPlacement as sn, asDesignBlockId as sr, headerLeafTextColor as st, classifySdkEventTiming as t, boundaryLayout as tn, normalizeCardRole as tr, createSiteCommandSiteRef as tt, externalLinkSchema as u, runtimeBoxBackgroundSchema as un, asSiteStyleId as ur, mergeHeaderNavTypographyPreference as ut, pageLinkSchema as v, rotateNormalizedPoint as vn, headingDecorationColorTokenValues as vr, compiledRuntimeStyleFieldNames as vt, createDryRunReport as w, getDirectImageUrlForSiteScopedPath as wn, toNonEmptyReadonlyArray as wr, generateHeaderScrollTreatmentStyles as wt, venueManagementFields as x, parseAspectRatioValue as xn, offeringsPreviewCompositionTreatmentValues as xr, parseGradientPresetId as xt, eventVisibilitySchema as y, normalizeWidthCandidates as yn, introCompositionTreatmentValues as yr, gradientToCss as yt, eventBookingOfferIntentSchema as z, slugifyMediaIdentifier as zn, resolveTokenOrCssColorValue as zr, themeButtonExtraClassesWithTrailingIcon as zt };