@riverbankcms/sdk 0.60.9 → 0.60.12

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 (45) hide show
  1. package/dist/_dts/api/src/accessAdmin.d.ts +102 -0
  2. package/dist/_dts/api/src/common/envelope.d.ts +1 -1
  3. package/dist/_dts/api/src/domains.d.ts +14 -13
  4. package/dist/_dts/api/src/endpoints.d.ts +32 -0
  5. package/dist/_dts/api/src/index.d.ts +4 -3
  6. package/dist/_dts/api/src/navigation/linkValue.d.ts +15 -2
  7. package/dist/_dts/api/src/navigation.d.ts +2 -0
  8. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +15 -1
  9. package/dist/_dts/blocks/src/index.d.ts +1 -1
  10. package/dist/_dts/blocks/src/system/node/fragments/ctaButton.d.ts +2 -2
  11. package/dist/_dts/blocks/src/system/runtime/nodes/basic.d.ts +2 -1
  12. package/dist/_dts/blocks/src/system/types/link.d.ts +7 -1
  13. package/dist/_dts/core/src/participant-identity.d.ts +72 -0
  14. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +96 -60
  15. package/dist/_dts/db/src/schemas/forms.d.ts +135 -24
  16. package/dist/_dts/sdk/src/contracts/content.d.ts +7 -1
  17. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -1
  18. package/dist/_dts/sdk/src/version.d.ts +1 -1
  19. package/dist/_dts/theme-core/src/buttons/classNames.d.ts +21 -0
  20. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  21. package/dist/_dts/theme-core/src/buttons/types.d.ts +1 -0
  22. package/dist/cli/index.mjs +188 -9
  23. package/dist/client/bookings.mjs +808 -149
  24. package/dist/client/client.mjs +553 -130
  25. package/dist/client/hooks.mjs +119 -0
  26. package/dist/client/rendering/client.mjs +412 -113
  27. package/dist/client/rendering/islands.mjs +4605 -4361
  28. package/dist/client/rendering.mjs +580 -157
  29. package/dist/preview-next/before-render.mjs +57 -0
  30. package/dist/preview-next/client/runtime.mjs +580 -151
  31. package/dist/preview-next/middleware.mjs +57 -0
  32. package/dist/server/components.mjs +293 -45
  33. package/dist/server/config-validation.mjs +119 -0
  34. package/dist/server/config.mjs +119 -0
  35. package/dist/server/data.mjs +119 -0
  36. package/dist/server/index.mjs +120 -1
  37. package/dist/server/next.mjs +300 -52
  38. package/dist/server/page-converter.mjs +62 -0
  39. package/dist/server/prebuild.mjs +1 -1
  40. package/dist/server/rendering/server.mjs +293 -45
  41. package/dist/server/rendering.mjs +293 -45
  42. package/dist/server/routing.mjs +159 -29
  43. package/dist/server/server.mjs +120 -1
  44. package/package.json +1 -1
  45. package/dist/_dts/blocks/src/system/runtime/shared/themedButtonClass.d.ts +0 -11
@@ -371,6 +371,68 @@ function toLocationCoordinates(value) {
371
371
  };
372
372
  }
373
373
 
374
+ // ../core/src/participant-identity.ts
375
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
376
+ participant_id: {
377
+ field: "participant_id",
378
+ role: "canonical_link",
379
+ canonicalSource: "booking_participants.id",
380
+ contractAction: "tighten_in_839",
381
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
382
+ },
383
+ display_name: {
384
+ field: "display_name",
385
+ role: "contextual_snapshot",
386
+ canonicalSource: "booking_participants.display_name for live identity",
387
+ contractAction: "retain_as_snapshot",
388
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
389
+ },
390
+ email: {
391
+ field: "email",
392
+ role: "contextual_snapshot",
393
+ canonicalSource: "booking_participants.email_normalized for live email identity",
394
+ contractAction: "retain_as_snapshot",
395
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
396
+ },
397
+ email_normalized: {
398
+ field: "email_normalized",
399
+ role: "contextual_snapshot",
400
+ canonicalSource: "booking_participants.email_normalized for live email identity",
401
+ contractAction: "retain_as_snapshot",
402
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
403
+ },
404
+ phone: {
405
+ field: "phone",
406
+ role: "contextual_snapshot",
407
+ canonicalSource: "booking_participants.phone for live phone identity",
408
+ contractAction: "retain_as_snapshot",
409
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
410
+ },
411
+ identity_state: {
412
+ field: "identity_state",
413
+ role: "materialization_state",
414
+ canonicalSource: "booking_participants.identity_state for subject state",
415
+ contractAction: "review_for_later_contract_cleanup",
416
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
417
+ },
418
+ event_attendee_guest_id: {
419
+ field: "event_attendee_guest_id",
420
+ role: "compatibility_projection",
421
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
422
+ contractAction: "retain_as_projection",
423
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
424
+ }
425
+ };
426
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
427
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
428
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
429
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
430
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
431
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
432
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
433
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
434
+ ];
435
+
374
436
  // ../media-core/src/typeGuards.ts
375
437
  function isRecord(value) {
376
438
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
@@ -1335,6 +1397,9 @@ function validationContext(options = {}) {
1335
1397
  allowIncomplete: isDraft || (options.allowIncomplete ?? false)
1336
1398
  };
1337
1399
  }
1400
+ function formatFieldPath(path) {
1401
+ return path.map((segment) => String(segment)).join(".");
1402
+ }
1338
1403
  function fieldIssueToMessage(issue2) {
1339
1404
  switch (issue2.kind) {
1340
1405
  case "required":
@@ -1558,7 +1623,7 @@ function normalizeRepeaterItems(plan, value, ctx) {
1558
1623
  return normalizeObjectChildren(fields3, itemRecord, ctx);
1559
1624
  });
1560
1625
  }
1561
- function normalizeNumberInput(value, allowNull) {
1626
+ function normalizeNumberInput(value, _allowNull) {
1562
1627
  if (value === "") return void 0;
1563
1628
  if (typeof value === "string" && value.trim() !== "") return Number(value);
1564
1629
  return value;
@@ -1690,7 +1755,7 @@ function validateRepeaterItem(plan, item, index, ctx) {
1690
1755
  const fields3 = plan.repeatedItemVariants ? plan.repeatedItemVariants.find((variant) => variant.typeId === itemType)?.fields : plan.repeatedItemPlan;
1691
1756
  if (!fields3) return [];
1692
1757
  return fields3.flatMap((childPlan) => {
1693
- const indexedPlan = withIndexedPath(childPlan, plan.path, index);
1758
+ const indexedPlan = materializeRepeaterItemPlan(childPlan, plan.path, index);
1694
1759
  return validateNormalizedFieldValue(indexedPlan, item[childPlan.fieldId], ctx);
1695
1760
  });
1696
1761
  }
@@ -1702,12 +1767,58 @@ function validateGroupPlan(plan, value, ctx) {
1702
1767
  function childValidationContext(plan, ctx) {
1703
1768
  return plan.allowNullChildren ? { ...ctx, allowNull: true } : ctx;
1704
1769
  }
1705
- function withIndexedPath(plan, parentPath, index) {
1706
- const suffix = plan.path.slice(parentPath.length + 1);
1707
- return {
1708
- ...plan,
1709
- path: [...parentPath, index, plan.fieldId, ...suffix]
1710
- };
1770
+ function materializeRepeaterItemPlan(plan, parentPath, index) {
1771
+ return rebaseFieldPlanPath(plan, [...parentPath, 0], [...parentPath, index]);
1772
+ }
1773
+ function rebaseFieldPlanPath(plan, fromPrefix, toPrefix) {
1774
+ const path = rebaseFieldPath(plan.path, fromPrefix, toPrefix);
1775
+ switch (plan.kind) {
1776
+ case "group":
1777
+ return {
1778
+ ...plan,
1779
+ path,
1780
+ children: plan.children.map((childPlan) => rebaseFieldPlanPath(childPlan, fromPrefix, toPrefix))
1781
+ };
1782
+ case "repeater":
1783
+ return {
1784
+ ...plan,
1785
+ path,
1786
+ ...plan.repeatedItemVariants ? {
1787
+ repeatedItemVariants: plan.repeatedItemVariants.map((variant) => ({
1788
+ ...variant,
1789
+ fields: variant.fields.map((fieldPlan) => rebaseFieldPlanPath(fieldPlan, fromPrefix, toPrefix))
1790
+ }))
1791
+ } : {},
1792
+ ...plan.repeatedItemPlan ? {
1793
+ repeatedItemPlan: plan.repeatedItemPlan.map(
1794
+ (fieldPlan) => rebaseFieldPlanPath(fieldPlan, fromPrefix, toPrefix)
1795
+ )
1796
+ } : {}
1797
+ };
1798
+ case "string":
1799
+ case "number":
1800
+ case "boolean":
1801
+ case "richText":
1802
+ case "media":
1803
+ case "link":
1804
+ case "select":
1805
+ case "passthrough":
1806
+ return {
1807
+ ...plan,
1808
+ path
1809
+ };
1810
+ default:
1811
+ return assertNever2(plan);
1812
+ }
1813
+ }
1814
+ function rebaseFieldPath(path, fromPrefix, toPrefix) {
1815
+ if (!startsWithFieldPath(path, fromPrefix)) {
1816
+ throw new Error(`Cannot rebase field path ${formatFieldPath(path)} from ${formatFieldPath(fromPrefix)}`);
1817
+ }
1818
+ return [...toPrefix, ...path.slice(fromPrefix.length)];
1819
+ }
1820
+ function startsWithFieldPath(path, prefix) {
1821
+ return prefix.every((segment, index) => path[index] === segment);
1711
1822
  }
1712
1823
  function issue(plan, kind, extra) {
1713
1824
  return {
@@ -2218,6 +2329,15 @@ var VARIANT_ROLES = [
2218
2329
  "tertiary",
2219
2330
  "accent"
2220
2331
  ];
2332
+ function isVariantRole(value) {
2333
+ return VARIANT_ROLES.includes(value);
2334
+ }
2335
+ function asSpecialVariantId(value) {
2336
+ if (value.length === 0) {
2337
+ throw new Error("SpecialVariantId must be a non-empty string");
2338
+ }
2339
+ return value;
2340
+ }
2221
2341
  var DEFAULT_VARIANT_ALIAS_ID = "default";
2222
2342
  var cornerStyleSchema = z6.enum(["square", "rounded", "pill"]);
2223
2343
  var shadowSizeSchema = z6.enum(["none", "low", "medium", "high"]);
@@ -2968,6 +3088,42 @@ var mediaSchema = z9.object({
2968
3088
  transform: transformSchema.optional()
2969
3089
  });
2970
3090
 
3091
+ // ../theme-core/src/buttons/classNames.ts
3092
+ function parseThemeButtonVariantId(value) {
3093
+ const normalized = value?.trim() ?? "";
3094
+ if (normalized.length === 0) {
3095
+ return null;
3096
+ }
3097
+ if (normalized === DEFAULT_VARIANT_ALIAS_ID) {
3098
+ return DEFAULT_VARIANT_ALIAS_ID;
3099
+ }
3100
+ return isVariantRole(normalized) ? normalized : asSpecialVariantId(normalized);
3101
+ }
3102
+ function themeButtonVariantClassNames(variant) {
3103
+ if (variant === DEFAULT_VARIANT_ALIAS_ID) {
3104
+ return [variant];
3105
+ }
3106
+ return [variant, `button-${variant}`];
3107
+ }
3108
+ function themeButtonSizeClassName(size) {
3109
+ return `btn-${size}`;
3110
+ }
3111
+ function themeButtonSelector(variant, size) {
3112
+ const baseSelector = `.${variant}`;
3113
+ if (!size) {
3114
+ return baseSelector;
3115
+ }
3116
+ return `${baseSelector}.${themeButtonSizeClassName(size)}`;
3117
+ }
3118
+ function themeButtonClassName(spec) {
3119
+ const classes = [
3120
+ ...themeButtonVariantClassNames(spec.variant),
3121
+ themeButtonSizeClassName(spec.size),
3122
+ spec.extraClassName
3123
+ ];
3124
+ return classes.filter(Boolean).join(" ");
3125
+ }
3126
+
2971
3127
  // ../theme-core/src/tokens/resolver.ts
2972
3128
  var TokenResolver = class {
2973
3129
  constructor(theme) {
@@ -4539,17 +4695,25 @@ function resolveAliasSource(enabled) {
4539
4695
  }
4540
4696
  function variantChunks(variant, global, themeSizes, themeId, tokens, theme) {
4541
4697
  const out = [];
4542
- out.push(variantBaseRule(variant, global, themeId, tokens, theme));
4543
- const hoverBg = variantHoverBackgroundRule(variant, global, themeId, tokens);
4698
+ const variantId = parseButtonVariantIdForCss(variant.id);
4699
+ out.push(variantBaseRule(variant, variantId, global, themeId, tokens, theme));
4700
+ const hoverBg = variantHoverBackgroundRule(variant, variantId, global, themeId, tokens);
4544
4701
  if (hoverBg) out.push(hoverBg);
4545
4702
  const effects = variantEffectsCss(variant, themeId, tokens, theme);
4546
4703
  if (effects) out.push({ raw: effects });
4547
- out.push(...variantDisabledRules(variant, themeId));
4548
- out.push(...variantSizeRules(variant, themeSizes, themeId));
4704
+ out.push(...variantDisabledRules(variantId, themeId));
4705
+ out.push(...variantSizeRules(variant, variantId, themeSizes, themeId));
4549
4706
  return out;
4550
4707
  }
4551
- function variantBaseRule(variant, global, themeId, tokens, theme) {
4552
- const selector = `:where([data-theme-scope="${themeId}"]) .${variant.id}`;
4708
+ function parseButtonVariantIdForCss(value) {
4709
+ const variantId = parseThemeButtonVariantId(value);
4710
+ if (!variantId) {
4711
+ throw new Error("Button variant id must be a non-empty string");
4712
+ }
4713
+ return variantId;
4714
+ }
4715
+ function variantBaseRule(variant, variantId, global, themeId, tokens, theme) {
4716
+ const selector = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}`;
4553
4717
  const decls = [];
4554
4718
  decls.push(["font-weight", String(global.fontWeight)]);
4555
4719
  decls.push(["font-family", resolveFontFamily(global)]);
@@ -4582,13 +4746,13 @@ function variantBaseRule(variant, global, themeId, tokens, theme) {
4582
4746
  }
4583
4747
  return rule(selector, decls);
4584
4748
  }
4585
- function variantHoverBackgroundRule(variant, global, themeId, tokens) {
4749
+ function variantHoverBackgroundRule(variant, variantId, global, themeId, tokens) {
4586
4750
  let hoverToken = variant.hoverBackgroundToken;
4587
4751
  if (!hoverToken && global.hoverColor === "token" && global.hoverColorToken) {
4588
4752
  hoverToken = global.hoverColorToken;
4589
4753
  }
4590
4754
  if (!hoverToken) return null;
4591
- return rule(`:where([data-theme-scope="${themeId}"]) .${variant.id}:hover`, [
4755
+ return rule(`:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}:hover`, [
4592
4756
  ["background-color", tokens.getColor(hoverToken)]
4593
4757
  ]);
4594
4758
  }
@@ -4608,8 +4772,8 @@ function variantEffectsCss(variant, themeId, tokens, theme) {
4608
4772
  theme
4609
4773
  });
4610
4774
  }
4611
- function variantDisabledRules(variant, themeId) {
4612
- const base = `:where([data-theme-scope="${themeId}"]) .${variant.id}:disabled`;
4775
+ function variantDisabledRules(variantId, themeId) {
4776
+ const base = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}:disabled`;
4613
4777
  const disabledSelectors = [base, `${base}:hover`, `${base}:active`, `${base}:focus`];
4614
4778
  const pseudoSelectors = [`${base}::before`, `${base}::after`];
4615
4779
  return [
@@ -4627,12 +4791,12 @@ function variantDisabledRules(variant, themeId) {
4627
4791
  ])
4628
4792
  ];
4629
4793
  }
4630
- function variantSizeRules(variant, themeSizes, themeId) {
4794
+ function variantSizeRules(variant, variantId, themeSizes, themeId) {
4631
4795
  const borderWidth = variant.border ? BORDER_WIDTH_MAP[variant.border.widthClass] || "1px" : "0px";
4632
4796
  const rules = [];
4633
4797
  for (const sizeName of BUTTON_SIZE_NAMES) {
4634
4798
  const config = resolveSizeConfig(variant, sizeName, themeSizes);
4635
- const selector = `:where([data-theme-scope="${themeId}"]) .${variant.id}.btn-${sizeName}`;
4799
+ const selector = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId, sizeName)}`;
4636
4800
  const decls = [];
4637
4801
  for (const decl of paddingDeclarations(config.padding, borderWidth)) decls.push(decl);
4638
4802
  if (config.fontSize) {
@@ -19705,14 +19869,6 @@ function CalendarIcon({
19705
19869
  );
19706
19870
  }
19707
19871
 
19708
- // ../blocks/src/system/runtime/shared/themedButtonClass.ts
19709
- function themedButtonClass(spec) {
19710
- const { variant, size, extraClassName } = spec;
19711
- const normalizedVariant = variant.trim();
19712
- const variantClasses = normalizedVariant ? [normalizedVariant, `button-${normalizedVariant}`] : [];
19713
- return [...variantClasses, `btn-${size}`, extraClassName].filter(Boolean).join(" ");
19714
- }
19715
-
19716
19872
  // ../blocks/src/system/runtime/nodes/events/shared/EventCard.tsx
19717
19873
  import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
19718
19874
  var EventCard = ({
@@ -19740,7 +19896,7 @@ var EventCard = ({
19740
19896
  const isSoldOut = cta.hidden;
19741
19897
  const { available: spotsLeft } = getEventAvailability(event);
19742
19898
  const cardClass = `card-${cardVariant}`;
19743
- const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
19899
+ const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "md" });
19744
19900
  const title = event.title;
19745
19901
  const summary = event.presentation?.summary ?? event.description;
19746
19902
  const image = event.presentation?.image ?? null;
@@ -19859,7 +20015,7 @@ var EventCompactRow = ({
19859
20015
  const price = formatEventPrice(event);
19860
20016
  const teacherLine = formatEventTeacherLine(event);
19861
20017
  const cta = resolveEventCta(event, buttonText);
19862
- const buttonClass = themedButtonClass({ variant: buttonVariant, size: "sm" });
20018
+ const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "sm" });
19863
20019
  return /* @__PURE__ */ jsxs3("div", { className: "event-compact-row", children: [
19864
20020
  /* @__PURE__ */ jsxs3("div", { className: "event-compact-row-content", children: [
19865
20021
  /* @__PURE__ */ jsxs3("div", { className: "event-compact-row-top", children: [
@@ -26549,11 +26705,12 @@ var ButtonNode = ({
26549
26705
  }
26550
26706
  return null;
26551
26707
  }
26552
- const resolvedVariantId = typeof variantId === "string" ? variantId.trim() : "";
26553
- const normalizedVariantId = resolvedVariantId === DEFAULT_VARIANT_ALIAS_ID ? "" : resolvedVariantId;
26554
- const variantClasses = normalizedVariantId ? [normalizedVariantId, `button-${normalizedVariantId}`] : [];
26555
- const sizeClass = `btn-${size}`;
26556
- const combinedClassName = [...variantClasses, sizeClass, className].filter(Boolean).join(" ");
26708
+ const resolvedVariantId = parseThemeButtonVariantId(variantId);
26709
+ const combinedClassName = resolvedVariantId ? themeButtonClassName({
26710
+ variant: resolvedVariantId,
26711
+ size,
26712
+ extraClassName: className
26713
+ }) : className;
26557
26714
  if (resolvedHref) {
26558
26715
  return /* @__PURE__ */ jsx15(
26559
26716
  "a",
@@ -27127,7 +27284,7 @@ function FileDownloadNode({
27127
27284
  {
27128
27285
  href,
27129
27286
  download: filename,
27130
- className: themedButtonClass({
27287
+ className: themeButtonClassName({
27131
27288
  variant,
27132
27289
  size: "md",
27133
27290
  extraClassName: "rb-inline-flex rb-shrink-0 rb-items-center rb-justify-center rb-gap-2"
@@ -28819,7 +28976,7 @@ var EventSpotlight = ({
28819
28976
  }
28820
28977
  const containerClass = getContainerClass(layout, columns);
28821
28978
  const cardOrientation = getCardOrientation(layout);
28822
- const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
28979
+ const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "md" });
28823
28980
  return /* @__PURE__ */ jsxs19("div", { className: `event-spotlight-section ${className || ""}`, "data-block": "event-spotlight", children: [
28824
28981
  /* @__PURE__ */ jsx32("div", { className: `event-spotlight ${containerClass}`, children: normalizedEvents.map((event) => /* @__PURE__ */ jsx32(
28825
28982
  EventCard,
@@ -29312,7 +29469,16 @@ function CheckoutShellView(props2) {
29312
29469
  import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs22 } from "react/jsx-runtime";
29313
29470
  function renderServerPendingAction(label, soldOut) {
29314
29471
  return /* @__PURE__ */ jsxs22(Fragment5, { children: [
29315
- /* @__PURE__ */ jsx36("button", { type: "button", className: "default", disabled: true, "aria-disabled": "true", children: soldOut ? "Sold out" : label }),
29472
+ /* @__PURE__ */ jsx36(
29473
+ "button",
29474
+ {
29475
+ type: "button",
29476
+ className: themeButtonClassName({ variant: "default", size: "md" }),
29477
+ disabled: true,
29478
+ "aria-disabled": "true",
29479
+ children: soldOut ? "Sold out" : label
29480
+ }
29481
+ ),
29316
29482
  !soldOut ? /* @__PURE__ */ jsx36("p", { className: "rb-caption status-muted", children: "Cart actions become interactive after page load." }) : null
29317
29483
  ] });
29318
29484
  }
@@ -29332,7 +29498,14 @@ function ProductListServerContent(props2) {
29332
29498
  ),
29333
29499
  actions: /* @__PURE__ */ jsxs22(Fragment5, { children: [
29334
29500
  renderServerPendingAction(card.actionLabel, card.soldOut),
29335
- card.path ? /* @__PURE__ */ jsx36("a", { href: card.path, className: "secondary btn-sm", children: "View details" }) : null
29501
+ card.path ? /* @__PURE__ */ jsx36(
29502
+ "a",
29503
+ {
29504
+ href: card.path,
29505
+ className: themeButtonClassName({ variant: "secondary", size: "sm" }),
29506
+ children: "View details"
29507
+ }
29508
+ ) : null
29336
29509
  ] })
29337
29510
  },
29338
29511
  card.productId
@@ -29865,7 +30038,7 @@ function renderCalendarGrid(display) {
29865
30038
  "button",
29866
30039
  {
29867
30040
  type: "button",
29868
- className: themedButtonClass({
30041
+ className: themeButtonClassName({
29869
30042
  variant: display.buttonVariant,
29870
30043
  size: "sm"
29871
30044
  }),
@@ -29951,7 +30124,7 @@ function renderTimetableSsr(display) {
29951
30124
  "button",
29952
30125
  {
29953
30126
  type: "button",
29954
- className: themedButtonClass({
30127
+ className: themeButtonClassName({
29955
30128
  variant: display.buttonVariant,
29956
30129
  size: "sm"
29957
30130
  }),
@@ -30308,7 +30481,7 @@ var FormNodeSSR = ({
30308
30481
  "button",
30309
30482
  {
30310
30483
  type: "submit",
30311
- className: themedButtonClass({
30484
+ className: themeButtonClassName({
30312
30485
  variant: "primary",
30313
30486
  size: "md",
30314
30487
  extraClassName: "rb-w-full rb-sm-w-auto"
@@ -30399,7 +30572,7 @@ function NewsletterFormSSR({
30399
30572
  "button",
30400
30573
  {
30401
30574
  type: "submit",
30402
- className: themedButtonClass({ variant: "primary", size: "md" }),
30575
+ className: themeButtonClassName({ variant: "primary", size: "md" }),
30403
30576
  children: display.buttonLabel
30404
30577
  }
30405
30578
  ) })
@@ -30519,7 +30692,16 @@ function ShopSSR({
30519
30692
  PassCardView,
30520
30693
  {
30521
30694
  display: pass,
30522
- action: /* @__PURE__ */ jsx49("button", { type: "button", className: "default", disabled: true, "aria-disabled": "true", children: pass.actionLabel })
30695
+ action: /* @__PURE__ */ jsx49(
30696
+ "button",
30697
+ {
30698
+ type: "button",
30699
+ className: themeButtonClassName({ variant: "default", size: "md" }),
30700
+ disabled: true,
30701
+ "aria-disabled": "true",
30702
+ children: pass.actionLabel
30703
+ }
30704
+ )
30523
30705
  },
30524
30706
  pass.id
30525
30707
  )),
@@ -30527,7 +30709,16 @@ function ShopSSR({
30527
30709
  MembershipCardView,
30528
30710
  {
30529
30711
  display: membership,
30530
- action: /* @__PURE__ */ jsx49("button", { type: "button", className: "default", disabled: true, "aria-disabled": "true", children: membership.actionLabel })
30712
+ action: /* @__PURE__ */ jsx49(
30713
+ "button",
30714
+ {
30715
+ type: "button",
30716
+ className: themeButtonClassName({ variant: "default", size: "md" }),
30717
+ disabled: true,
30718
+ "aria-disabled": "true",
30719
+ children: membership.actionLabel
30720
+ }
30721
+ )
30531
30722
  },
30532
30723
  membership.id
30533
30724
  ))
@@ -48927,6 +49118,63 @@ var ENDPOINT_DEFINITIONS = {
48927
49118
  auth: "user",
48928
49119
  responseKind: "json"
48929
49120
  },
49121
+ updateRegisteredDomainContact: {
49122
+ path: "/domains/{domainId}/registrar/contact",
49123
+ method: "POST",
49124
+ errors: [
49125
+ "validation:invalid_input",
49126
+ "resource:not_found",
49127
+ "auth:forbidden",
49128
+ "external:service_error",
49129
+ "external:registrar_orphaned_contact_profile",
49130
+ "server:internal_error"
49131
+ ],
49132
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49133
+ auth: "user",
49134
+ responseKind: "json"
49135
+ },
49136
+ setRegisteredDomainPrivacy: {
49137
+ path: "/domains/{domainId}/registrar/privacy",
49138
+ method: "POST",
49139
+ errors: [
49140
+ "validation:invalid_input",
49141
+ "resource:not_found",
49142
+ "auth:forbidden",
49143
+ "external:service_error",
49144
+ "server:internal_error"
49145
+ ],
49146
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49147
+ auth: "user",
49148
+ responseKind: "json"
49149
+ },
49150
+ setRegisteredDomainAutoRenew: {
49151
+ path: "/domains/{domainId}/registrar/auto-renew",
49152
+ method: "POST",
49153
+ errors: [
49154
+ "validation:invalid_input",
49155
+ "resource:not_found",
49156
+ "auth:forbidden",
49157
+ "external:service_error",
49158
+ "server:internal_error"
49159
+ ],
49160
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49161
+ auth: "user",
49162
+ responseKind: "json"
49163
+ },
49164
+ getRegisteredDomainRenewalPosture: {
49165
+ path: "/domains/{domainId}/registrar/renewal",
49166
+ method: "GET",
49167
+ errors: [
49168
+ "validation:invalid_input",
49169
+ "resource:not_found",
49170
+ "auth:forbidden",
49171
+ "external:service_error",
49172
+ "server:internal_error"
49173
+ ],
49174
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49175
+ auth: "user",
49176
+ responseKind: "json"
49177
+ },
48930
49178
  retryDomainVercel: {
48931
49179
  path: "/domains/{domainId}/vercel",
48932
49180
  method: "POST",