@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
@@ -368,6 +368,68 @@ function toLocationCoordinates(value) {
368
368
  };
369
369
  }
370
370
 
371
+ // ../core/src/participant-identity.ts
372
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD = {
373
+ participant_id: {
374
+ field: "participant_id",
375
+ role: "canonical_link",
376
+ canonicalSource: "booking_participants.id",
377
+ contractAction: "tighten_in_839",
378
+ notes: "Canonical person-subject link for a participation. #839 should enforce this once preflight is clean."
379
+ },
380
+ display_name: {
381
+ field: "display_name",
382
+ role: "contextual_snapshot",
383
+ canonicalSource: "booking_participants.display_name for live identity",
384
+ contractAction: "retain_as_snapshot",
385
+ notes: "Participation-time display context. Readers must not treat it as mutable live participant identity."
386
+ },
387
+ email: {
388
+ field: "email",
389
+ role: "contextual_snapshot",
390
+ canonicalSource: "booking_participants.email_normalized for live email identity",
391
+ contractAction: "retain_as_snapshot",
392
+ notes: "Participation-time contact snapshot used for notifications/context. Live identity belongs to the participant row."
393
+ },
394
+ email_normalized: {
395
+ field: "email_normalized",
396
+ role: "contextual_snapshot",
397
+ canonicalSource: "booking_participants.email_normalized for live email identity",
398
+ contractAction: "retain_as_snapshot",
399
+ notes: "Normalized snapshot/dedupe helper for the participation slot, not live person authority."
400
+ },
401
+ phone: {
402
+ field: "phone",
403
+ role: "contextual_snapshot",
404
+ canonicalSource: "booking_participants.phone for live phone identity",
405
+ contractAction: "retain_as_snapshot",
406
+ notes: "Participation-time phone context. Live identity belongs to the participant row."
407
+ },
408
+ identity_state: {
409
+ field: "identity_state",
410
+ role: "materialization_state",
411
+ canonicalSource: "booking_participants.identity_state for subject state",
412
+ contractAction: "review_for_later_contract_cleanup",
413
+ notes: "Slot materialization state: booker_supplied, contactable, portal_claimed, or staff_verified."
414
+ },
415
+ event_attendee_guest_id: {
416
+ field: "event_attendee_guest_id",
417
+ role: "compatibility_projection",
418
+ canonicalSource: "canonical participant slot plus #838 event guest compatibility projection",
419
+ contractAction: "retain_as_projection",
420
+ notes: "Compatibility FK for event guest read models. It is not person identity authority."
421
+ }
422
+ };
423
+ var PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATIONS = [
424
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.participant_id,
425
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.display_name,
426
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email,
427
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.email_normalized,
428
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.phone,
429
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.identity_state,
430
+ PARTICIPANT_PARTICIPATION_IDENTITY_FIELD_CLASSIFICATION_BY_FIELD.event_attendee_guest_id
431
+ ];
432
+
371
433
  // ../media-core/src/typeGuards.ts
372
434
  function isRecord(value) {
373
435
  return Boolean(value) && typeof value === "object" && !Array.isArray(value);
@@ -1332,6 +1394,9 @@ function validationContext(options = {}) {
1332
1394
  allowIncomplete: isDraft || (options.allowIncomplete ?? false)
1333
1395
  };
1334
1396
  }
1397
+ function formatFieldPath(path) {
1398
+ return path.map((segment) => String(segment)).join(".");
1399
+ }
1335
1400
  function fieldIssueToMessage(issue2) {
1336
1401
  switch (issue2.kind) {
1337
1402
  case "required":
@@ -1555,7 +1620,7 @@ function normalizeRepeaterItems(plan, value, ctx) {
1555
1620
  return normalizeObjectChildren(fields3, itemRecord, ctx);
1556
1621
  });
1557
1622
  }
1558
- function normalizeNumberInput(value, allowNull) {
1623
+ function normalizeNumberInput(value, _allowNull) {
1559
1624
  if (value === "") return void 0;
1560
1625
  if (typeof value === "string" && value.trim() !== "") return Number(value);
1561
1626
  return value;
@@ -1687,7 +1752,7 @@ function validateRepeaterItem(plan, item, index, ctx) {
1687
1752
  const fields3 = plan.repeatedItemVariants ? plan.repeatedItemVariants.find((variant) => variant.typeId === itemType)?.fields : plan.repeatedItemPlan;
1688
1753
  if (!fields3) return [];
1689
1754
  return fields3.flatMap((childPlan) => {
1690
- const indexedPlan = withIndexedPath(childPlan, plan.path, index);
1755
+ const indexedPlan = materializeRepeaterItemPlan(childPlan, plan.path, index);
1691
1756
  return validateNormalizedFieldValue(indexedPlan, item[childPlan.fieldId], ctx);
1692
1757
  });
1693
1758
  }
@@ -1699,12 +1764,58 @@ function validateGroupPlan(plan, value, ctx) {
1699
1764
  function childValidationContext(plan, ctx) {
1700
1765
  return plan.allowNullChildren ? { ...ctx, allowNull: true } : ctx;
1701
1766
  }
1702
- function withIndexedPath(plan, parentPath, index) {
1703
- const suffix = plan.path.slice(parentPath.length + 1);
1704
- return {
1705
- ...plan,
1706
- path: [...parentPath, index, plan.fieldId, ...suffix]
1707
- };
1767
+ function materializeRepeaterItemPlan(plan, parentPath, index) {
1768
+ return rebaseFieldPlanPath(plan, [...parentPath, 0], [...parentPath, index]);
1769
+ }
1770
+ function rebaseFieldPlanPath(plan, fromPrefix, toPrefix) {
1771
+ const path = rebaseFieldPath(plan.path, fromPrefix, toPrefix);
1772
+ switch (plan.kind) {
1773
+ case "group":
1774
+ return {
1775
+ ...plan,
1776
+ path,
1777
+ children: plan.children.map((childPlan) => rebaseFieldPlanPath(childPlan, fromPrefix, toPrefix))
1778
+ };
1779
+ case "repeater":
1780
+ return {
1781
+ ...plan,
1782
+ path,
1783
+ ...plan.repeatedItemVariants ? {
1784
+ repeatedItemVariants: plan.repeatedItemVariants.map((variant) => ({
1785
+ ...variant,
1786
+ fields: variant.fields.map((fieldPlan) => rebaseFieldPlanPath(fieldPlan, fromPrefix, toPrefix))
1787
+ }))
1788
+ } : {},
1789
+ ...plan.repeatedItemPlan ? {
1790
+ repeatedItemPlan: plan.repeatedItemPlan.map(
1791
+ (fieldPlan) => rebaseFieldPlanPath(fieldPlan, fromPrefix, toPrefix)
1792
+ )
1793
+ } : {}
1794
+ };
1795
+ case "string":
1796
+ case "number":
1797
+ case "boolean":
1798
+ case "richText":
1799
+ case "media":
1800
+ case "link":
1801
+ case "select":
1802
+ case "passthrough":
1803
+ return {
1804
+ ...plan,
1805
+ path
1806
+ };
1807
+ default:
1808
+ return assertNever2(plan);
1809
+ }
1810
+ }
1811
+ function rebaseFieldPath(path, fromPrefix, toPrefix) {
1812
+ if (!startsWithFieldPath(path, fromPrefix)) {
1813
+ throw new Error(`Cannot rebase field path ${formatFieldPath(path)} from ${formatFieldPath(fromPrefix)}`);
1814
+ }
1815
+ return [...toPrefix, ...path.slice(fromPrefix.length)];
1816
+ }
1817
+ function startsWithFieldPath(path, prefix) {
1818
+ return prefix.every((segment, index) => path[index] === segment);
1708
1819
  }
1709
1820
  function issue(plan, kind, extra) {
1710
1821
  return {
@@ -2215,6 +2326,15 @@ var VARIANT_ROLES = [
2215
2326
  "tertiary",
2216
2327
  "accent"
2217
2328
  ];
2329
+ function isVariantRole(value) {
2330
+ return VARIANT_ROLES.includes(value);
2331
+ }
2332
+ function asSpecialVariantId(value) {
2333
+ if (value.length === 0) {
2334
+ throw new Error("SpecialVariantId must be a non-empty string");
2335
+ }
2336
+ return value;
2337
+ }
2218
2338
  var DEFAULT_VARIANT_ALIAS_ID = "default";
2219
2339
  var cornerStyleSchema = z6.enum(["square", "rounded", "pill"]);
2220
2340
  var shadowSizeSchema = z6.enum(["none", "low", "medium", "high"]);
@@ -2965,6 +3085,42 @@ var mediaSchema = z9.object({
2965
3085
  transform: transformSchema.optional()
2966
3086
  });
2967
3087
 
3088
+ // ../theme-core/src/buttons/classNames.ts
3089
+ function parseThemeButtonVariantId(value) {
3090
+ const normalized = value?.trim() ?? "";
3091
+ if (normalized.length === 0) {
3092
+ return null;
3093
+ }
3094
+ if (normalized === DEFAULT_VARIANT_ALIAS_ID) {
3095
+ return DEFAULT_VARIANT_ALIAS_ID;
3096
+ }
3097
+ return isVariantRole(normalized) ? normalized : asSpecialVariantId(normalized);
3098
+ }
3099
+ function themeButtonVariantClassNames(variant) {
3100
+ if (variant === DEFAULT_VARIANT_ALIAS_ID) {
3101
+ return [variant];
3102
+ }
3103
+ return [variant, `button-${variant}`];
3104
+ }
3105
+ function themeButtonSizeClassName(size) {
3106
+ return `btn-${size}`;
3107
+ }
3108
+ function themeButtonSelector(variant, size) {
3109
+ const baseSelector = `.${variant}`;
3110
+ if (!size) {
3111
+ return baseSelector;
3112
+ }
3113
+ return `${baseSelector}.${themeButtonSizeClassName(size)}`;
3114
+ }
3115
+ function themeButtonClassName(spec) {
3116
+ const classes = [
3117
+ ...themeButtonVariantClassNames(spec.variant),
3118
+ themeButtonSizeClassName(spec.size),
3119
+ spec.extraClassName
3120
+ ];
3121
+ return classes.filter(Boolean).join(" ");
3122
+ }
3123
+
2968
3124
  // ../theme-core/src/tokens/resolver.ts
2969
3125
  var TokenResolver = class {
2970
3126
  constructor(theme) {
@@ -4536,17 +4692,25 @@ function resolveAliasSource(enabled) {
4536
4692
  }
4537
4693
  function variantChunks(variant, global, themeSizes, themeId, tokens, theme) {
4538
4694
  const out = [];
4539
- out.push(variantBaseRule(variant, global, themeId, tokens, theme));
4540
- const hoverBg = variantHoverBackgroundRule(variant, global, themeId, tokens);
4695
+ const variantId = parseButtonVariantIdForCss(variant.id);
4696
+ out.push(variantBaseRule(variant, variantId, global, themeId, tokens, theme));
4697
+ const hoverBg = variantHoverBackgroundRule(variant, variantId, global, themeId, tokens);
4541
4698
  if (hoverBg) out.push(hoverBg);
4542
4699
  const effects = variantEffectsCss(variant, themeId, tokens, theme);
4543
4700
  if (effects) out.push({ raw: effects });
4544
- out.push(...variantDisabledRules(variant, themeId));
4545
- out.push(...variantSizeRules(variant, themeSizes, themeId));
4701
+ out.push(...variantDisabledRules(variantId, themeId));
4702
+ out.push(...variantSizeRules(variant, variantId, themeSizes, themeId));
4546
4703
  return out;
4547
4704
  }
4548
- function variantBaseRule(variant, global, themeId, tokens, theme) {
4549
- const selector = `:where([data-theme-scope="${themeId}"]) .${variant.id}`;
4705
+ function parseButtonVariantIdForCss(value) {
4706
+ const variantId = parseThemeButtonVariantId(value);
4707
+ if (!variantId) {
4708
+ throw new Error("Button variant id must be a non-empty string");
4709
+ }
4710
+ return variantId;
4711
+ }
4712
+ function variantBaseRule(variant, variantId, global, themeId, tokens, theme) {
4713
+ const selector = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}`;
4550
4714
  const decls = [];
4551
4715
  decls.push(["font-weight", String(global.fontWeight)]);
4552
4716
  decls.push(["font-family", resolveFontFamily(global)]);
@@ -4579,13 +4743,13 @@ function variantBaseRule(variant, global, themeId, tokens, theme) {
4579
4743
  }
4580
4744
  return rule(selector, decls);
4581
4745
  }
4582
- function variantHoverBackgroundRule(variant, global, themeId, tokens) {
4746
+ function variantHoverBackgroundRule(variant, variantId, global, themeId, tokens) {
4583
4747
  let hoverToken = variant.hoverBackgroundToken;
4584
4748
  if (!hoverToken && global.hoverColor === "token" && global.hoverColorToken) {
4585
4749
  hoverToken = global.hoverColorToken;
4586
4750
  }
4587
4751
  if (!hoverToken) return null;
4588
- return rule(`:where([data-theme-scope="${themeId}"]) .${variant.id}:hover`, [
4752
+ return rule(`:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}:hover`, [
4589
4753
  ["background-color", tokens.getColor(hoverToken)]
4590
4754
  ]);
4591
4755
  }
@@ -4605,8 +4769,8 @@ function variantEffectsCss(variant, themeId, tokens, theme) {
4605
4769
  theme
4606
4770
  });
4607
4771
  }
4608
- function variantDisabledRules(variant, themeId) {
4609
- const base = `:where([data-theme-scope="${themeId}"]) .${variant.id}:disabled`;
4772
+ function variantDisabledRules(variantId, themeId) {
4773
+ const base = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId)}:disabled`;
4610
4774
  const disabledSelectors = [base, `${base}:hover`, `${base}:active`, `${base}:focus`];
4611
4775
  const pseudoSelectors = [`${base}::before`, `${base}::after`];
4612
4776
  return [
@@ -4624,12 +4788,12 @@ function variantDisabledRules(variant, themeId) {
4624
4788
  ])
4625
4789
  ];
4626
4790
  }
4627
- function variantSizeRules(variant, themeSizes, themeId) {
4791
+ function variantSizeRules(variant, variantId, themeSizes, themeId) {
4628
4792
  const borderWidth = variant.border ? BORDER_WIDTH_MAP[variant.border.widthClass] || "1px" : "0px";
4629
4793
  const rules = [];
4630
4794
  for (const sizeName of BUTTON_SIZE_NAMES) {
4631
4795
  const config = resolveSizeConfig(variant, sizeName, themeSizes);
4632
- const selector = `:where([data-theme-scope="${themeId}"]) .${variant.id}.btn-${sizeName}`;
4796
+ const selector = `:where([data-theme-scope="${themeId}"]) ${themeButtonSelector(variantId, sizeName)}`;
4633
4797
  const decls = [];
4634
4798
  for (const decl of paddingDeclarations(config.padding, borderWidth)) decls.push(decl);
4635
4799
  if (config.fontSize) {
@@ -19699,14 +19863,6 @@ function CalendarIcon({
19699
19863
  );
19700
19864
  }
19701
19865
 
19702
- // ../blocks/src/system/runtime/shared/themedButtonClass.ts
19703
- function themedButtonClass(spec) {
19704
- const { variant, size, extraClassName } = spec;
19705
- const normalizedVariant = variant.trim();
19706
- const variantClasses = normalizedVariant ? [normalizedVariant, `button-${normalizedVariant}`] : [];
19707
- return [...variantClasses, `btn-${size}`, extraClassName].filter(Boolean).join(" ");
19708
- }
19709
-
19710
19866
  // ../blocks/src/system/runtime/nodes/events/shared/EventCard.tsx
19711
19867
  import { jsx as jsx4, jsxs as jsxs2 } from "react/jsx-runtime";
19712
19868
  var EventCard = ({
@@ -19734,7 +19890,7 @@ var EventCard = ({
19734
19890
  const isSoldOut = cta.hidden;
19735
19891
  const { available: spotsLeft } = getEventAvailability(event);
19736
19892
  const cardClass = `card-${cardVariant}`;
19737
- const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
19893
+ const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "md" });
19738
19894
  const title = event.title;
19739
19895
  const summary = event.presentation?.summary ?? event.description;
19740
19896
  const image = event.presentation?.image ?? null;
@@ -19853,7 +20009,7 @@ var EventCompactRow = ({
19853
20009
  const price = formatEventPrice(event);
19854
20010
  const teacherLine = formatEventTeacherLine(event);
19855
20011
  const cta = resolveEventCta(event, buttonText);
19856
- const buttonClass = themedButtonClass({ variant: buttonVariant, size: "sm" });
20012
+ const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "sm" });
19857
20013
  return /* @__PURE__ */ jsxs3("div", { className: "event-compact-row", children: [
19858
20014
  /* @__PURE__ */ jsxs3("div", { className: "event-compact-row-content", children: [
19859
20015
  /* @__PURE__ */ jsxs3("div", { className: "event-compact-row-top", children: [
@@ -26543,11 +26699,12 @@ var ButtonNode = ({
26543
26699
  }
26544
26700
  return null;
26545
26701
  }
26546
- const resolvedVariantId = typeof variantId === "string" ? variantId.trim() : "";
26547
- const normalizedVariantId = resolvedVariantId === DEFAULT_VARIANT_ALIAS_ID ? "" : resolvedVariantId;
26548
- const variantClasses = normalizedVariantId ? [normalizedVariantId, `button-${normalizedVariantId}`] : [];
26549
- const sizeClass = `btn-${size}`;
26550
- const combinedClassName = [...variantClasses, sizeClass, className].filter(Boolean).join(" ");
26702
+ const resolvedVariantId = parseThemeButtonVariantId(variantId);
26703
+ const combinedClassName = resolvedVariantId ? themeButtonClassName({
26704
+ variant: resolvedVariantId,
26705
+ size,
26706
+ extraClassName: className
26707
+ }) : className;
26551
26708
  if (resolvedHref) {
26552
26709
  return /* @__PURE__ */ jsx15(
26553
26710
  "a",
@@ -27121,7 +27278,7 @@ function FileDownloadNode({
27121
27278
  {
27122
27279
  href,
27123
27280
  download: filename,
27124
- className: themedButtonClass({
27281
+ className: themeButtonClassName({
27125
27282
  variant,
27126
27283
  size: "md",
27127
27284
  extraClassName: "rb-inline-flex rb-shrink-0 rb-items-center rb-justify-center rb-gap-2"
@@ -28813,7 +28970,7 @@ var EventSpotlight = ({
28813
28970
  }
28814
28971
  const containerClass = getContainerClass(layout, columns);
28815
28972
  const cardOrientation = getCardOrientation(layout);
28816
- const buttonClass = themedButtonClass({ variant: buttonVariant, size: "md" });
28973
+ const buttonClass = themeButtonClassName({ variant: buttonVariant, size: "md" });
28817
28974
  return /* @__PURE__ */ jsxs19("div", { className: `event-spotlight-section ${className || ""}`, "data-block": "event-spotlight", children: [
28818
28975
  /* @__PURE__ */ jsx32("div", { className: `event-spotlight ${containerClass}`, children: normalizedEvents.map((event) => /* @__PURE__ */ jsx32(
28819
28976
  EventCard,
@@ -29306,7 +29463,16 @@ function CheckoutShellView(props2) {
29306
29463
  import { Fragment as Fragment5, jsx as jsx36, jsxs as jsxs22 } from "react/jsx-runtime";
29307
29464
  function renderServerPendingAction(label, soldOut) {
29308
29465
  return /* @__PURE__ */ jsxs22(Fragment5, { children: [
29309
- /* @__PURE__ */ jsx36("button", { type: "button", className: "default", disabled: true, "aria-disabled": "true", children: soldOut ? "Sold out" : label }),
29466
+ /* @__PURE__ */ jsx36(
29467
+ "button",
29468
+ {
29469
+ type: "button",
29470
+ className: themeButtonClassName({ variant: "default", size: "md" }),
29471
+ disabled: true,
29472
+ "aria-disabled": "true",
29473
+ children: soldOut ? "Sold out" : label
29474
+ }
29475
+ ),
29310
29476
  !soldOut ? /* @__PURE__ */ jsx36("p", { className: "rb-caption status-muted", children: "Cart actions become interactive after page load." }) : null
29311
29477
  ] });
29312
29478
  }
@@ -29326,7 +29492,14 @@ function ProductListServerContent(props2) {
29326
29492
  ),
29327
29493
  actions: /* @__PURE__ */ jsxs22(Fragment5, { children: [
29328
29494
  renderServerPendingAction(card.actionLabel, card.soldOut),
29329
- card.path ? /* @__PURE__ */ jsx36("a", { href: card.path, className: "secondary btn-sm", children: "View details" }) : null
29495
+ card.path ? /* @__PURE__ */ jsx36(
29496
+ "a",
29497
+ {
29498
+ href: card.path,
29499
+ className: themeButtonClassName({ variant: "secondary", size: "sm" }),
29500
+ children: "View details"
29501
+ }
29502
+ ) : null
29330
29503
  ] })
29331
29504
  },
29332
29505
  card.productId
@@ -29859,7 +30032,7 @@ function renderCalendarGrid(display) {
29859
30032
  "button",
29860
30033
  {
29861
30034
  type: "button",
29862
- className: themedButtonClass({
30035
+ className: themeButtonClassName({
29863
30036
  variant: display.buttonVariant,
29864
30037
  size: "sm"
29865
30038
  }),
@@ -29945,7 +30118,7 @@ function renderTimetableSsr(display) {
29945
30118
  "button",
29946
30119
  {
29947
30120
  type: "button",
29948
- className: themedButtonClass({
30121
+ className: themeButtonClassName({
29949
30122
  variant: display.buttonVariant,
29950
30123
  size: "sm"
29951
30124
  }),
@@ -30302,7 +30475,7 @@ var FormNodeSSR = ({
30302
30475
  "button",
30303
30476
  {
30304
30477
  type: "submit",
30305
- className: themedButtonClass({
30478
+ className: themeButtonClassName({
30306
30479
  variant: "primary",
30307
30480
  size: "md",
30308
30481
  extraClassName: "rb-w-full rb-sm-w-auto"
@@ -30393,7 +30566,7 @@ function NewsletterFormSSR({
30393
30566
  "button",
30394
30567
  {
30395
30568
  type: "submit",
30396
- className: themedButtonClass({ variant: "primary", size: "md" }),
30569
+ className: themeButtonClassName({ variant: "primary", size: "md" }),
30397
30570
  children: display.buttonLabel
30398
30571
  }
30399
30572
  ) })
@@ -30513,7 +30686,16 @@ function ShopSSR({
30513
30686
  PassCardView,
30514
30687
  {
30515
30688
  display: pass,
30516
- action: /* @__PURE__ */ jsx49("button", { type: "button", className: "default", disabled: true, "aria-disabled": "true", children: pass.actionLabel })
30689
+ action: /* @__PURE__ */ jsx49(
30690
+ "button",
30691
+ {
30692
+ type: "button",
30693
+ className: themeButtonClassName({ variant: "default", size: "md" }),
30694
+ disabled: true,
30695
+ "aria-disabled": "true",
30696
+ children: pass.actionLabel
30697
+ }
30698
+ )
30517
30699
  },
30518
30700
  pass.id
30519
30701
  )),
@@ -30521,7 +30703,16 @@ function ShopSSR({
30521
30703
  MembershipCardView,
30522
30704
  {
30523
30705
  display: membership,
30524
- action: /* @__PURE__ */ jsx49("button", { type: "button", className: "default", disabled: true, "aria-disabled": "true", children: membership.actionLabel })
30706
+ action: /* @__PURE__ */ jsx49(
30707
+ "button",
30708
+ {
30709
+ type: "button",
30710
+ className: themeButtonClassName({ variant: "default", size: "md" }),
30711
+ disabled: true,
30712
+ "aria-disabled": "true",
30713
+ children: membership.actionLabel
30714
+ }
30715
+ )
30525
30716
  },
30526
30717
  membership.id
30527
30718
  ))
@@ -48905,6 +49096,63 @@ var ENDPOINT_DEFINITIONS = {
48905
49096
  auth: "user",
48906
49097
  responseKind: "json"
48907
49098
  },
49099
+ updateRegisteredDomainContact: {
49100
+ path: "/domains/{domainId}/registrar/contact",
49101
+ method: "POST",
49102
+ errors: [
49103
+ "validation:invalid_input",
49104
+ "resource:not_found",
49105
+ "auth:forbidden",
49106
+ "external:service_error",
49107
+ "external:registrar_orphaned_contact_profile",
49108
+ "server:internal_error"
49109
+ ],
49110
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49111
+ auth: "user",
49112
+ responseKind: "json"
49113
+ },
49114
+ setRegisteredDomainPrivacy: {
49115
+ path: "/domains/{domainId}/registrar/privacy",
49116
+ method: "POST",
49117
+ errors: [
49118
+ "validation:invalid_input",
49119
+ "resource:not_found",
49120
+ "auth:forbidden",
49121
+ "external:service_error",
49122
+ "server:internal_error"
49123
+ ],
49124
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49125
+ auth: "user",
49126
+ responseKind: "json"
49127
+ },
49128
+ setRegisteredDomainAutoRenew: {
49129
+ path: "/domains/{domainId}/registrar/auto-renew",
49130
+ method: "POST",
49131
+ errors: [
49132
+ "validation:invalid_input",
49133
+ "resource:not_found",
49134
+ "auth:forbidden",
49135
+ "external:service_error",
49136
+ "server:internal_error"
49137
+ ],
49138
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49139
+ auth: "user",
49140
+ responseKind: "json"
49141
+ },
49142
+ getRegisteredDomainRenewalPosture: {
49143
+ path: "/domains/{domainId}/registrar/renewal",
49144
+ method: "GET",
49145
+ errors: [
49146
+ "validation:invalid_input",
49147
+ "resource:not_found",
49148
+ "auth:forbidden",
49149
+ "external:service_error",
49150
+ "server:internal_error"
49151
+ ],
49152
+ tags: ["domains", "domain-{domainId}", "domain-registrar"],
49153
+ auth: "user",
49154
+ responseKind: "json"
49155
+ },
48908
49156
  retryDomainVercel: {
48909
49157
  path: "/domains/{domainId}/vercel",
48910
49158
  method: "POST",