@riverbankcms/sdk 0.109.0 → 0.111.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/dist/{PreviewEditorSidebar-DWqwfy3_.mjs → PreviewEditorSidebar-CTR6LUhN.mjs} +178 -117
  2. package/dist/{PreviewEditorUI-B7OL4sfR.mjs → PreviewEditorUI-DZg15Zip.mjs} +3 -4
  3. package/dist/{PreviewQueryProvider-D0y2l8JN.mjs → PreviewQueryProvider-kkmjklLG.mjs} +1 -1
  4. package/dist/{SdkPreviewModeRuntime-D8Gt9Gbe.mjs → SdkPreviewModeRuntime-DeOTAFvR.mjs} +229 -219
  5. package/dist/{SiteChromeCustomizeContext-DUpalEdL.mjs → SiteChromeCustomizeContext-DOSDLCiJ.mjs} +1695 -2169
  6. package/dist/_dts/ai/src/contracts/proposals.d.ts +1716 -76
  7. package/dist/_dts/api/src/commercePortalEndpoints.d.ts +5 -5
  8. package/dist/_dts/api/src/contentRuntime.d.ts +4 -1
  9. package/dist/_dts/api/src/courses.d.ts +30 -15
  10. package/dist/_dts/api/src/endpoints.d.ts +14 -4
  11. package/dist/_dts/api/src/index.d.ts +2 -2
  12. package/dist/_dts/api/src/sdkContracts.d.ts +23 -11
  13. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +5 -1
  14. package/dist/_dts/api/src/siteOperations.d.ts +11 -19
  15. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +6 -6
  16. package/dist/_dts/api/src/webhooks.d.ts +98 -1
  17. package/dist/_dts/billing/src/site-arrangements.d.ts +3 -0
  18. package/dist/_dts/blocks/src/client/course-registration.d.ts +4 -1
  19. package/dist/_dts/blocks/src/client.d.ts +4 -1
  20. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -4
  21. package/dist/_dts/blocks/src/index.d.ts +3 -1
  22. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +2 -1
  23. package/dist/_dts/blocks/src/system/blocks/courses/shared/types.d.ts +2 -1
  24. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +2 -4
  25. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +2 -1
  26. package/dist/_dts/blocks/src/system/blocks/events/event-listing.d.ts +2 -1
  27. package/dist/_dts/blocks/src/system/blocks/events/event-spotlight.d.ts +2 -1
  28. package/dist/_dts/blocks/src/system/blocks/events/recurring-schedule.d.ts +3 -2
  29. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +2 -1
  30. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +2 -1
  31. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +2 -1
  32. package/dist/_dts/blocks/src/system/blocks/shop.d.ts +2 -1
  33. package/dist/_dts/blocks/src/system/blocks/single-button.d.ts +2 -1
  34. package/dist/_dts/blocks/src/system/constants/buttonRoles.d.ts +35 -0
  35. package/dist/_dts/blocks/src/system/fields/button.d.ts +10 -21
  36. package/dist/_dts/blocks/src/system/fields/ctas.d.ts +2 -1
  37. package/dist/_dts/blocks/src/system/fragments/library/heroCtaRow.d.ts +9 -5
  38. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +18 -18
  39. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +9 -9
  40. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessWholeSeriesRegistrationFlow.d.ts +29 -0
  41. package/dist/_dts/blocks/src/system/runtime/nodes/buttonAffordance.d.ts +1 -1
  42. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/ErrorStep.d.ts +2 -1
  43. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/PaymentFailedStep.d.ts +2 -1
  44. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/VerifyingTimeoutStep.d.ts +2 -1
  45. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/types.d.ts +21 -0
  46. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/useCourseRegistrationWizard.d.ts +4 -4
  47. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/whole-series-registration.headless.contract.d.ts +326 -0
  48. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration/whole-series-registration.headless.planning.d.ts +27 -0
  49. package/dist/_dts/blocks/src/system/runtime/nodes/course-registration.interactive.d.ts +5 -4
  50. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +3 -2
  51. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +2 -1
  52. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +5 -4
  53. package/dist/_dts/blocks/src/system/runtime/nodes/file-download.d.ts +2 -3
  54. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
  55. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +6 -3
  56. package/dist/_dts/blocks/src/system/runtime/nodes/shop.interactive.d.ts +7 -6
  57. package/dist/_dts/blocks/src/system/runtime/nodes/shop.types.d.ts +2 -1
  58. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +2 -1
  59. package/dist/_dts/content-editor/src/FooterComposerPanel.d.ts +4 -2
  60. package/dist/_dts/content-editor/src/index.d.ts +12 -12
  61. package/dist/_dts/content-editor/src/ui/editorUiStore.d.ts +17 -2
  62. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +221 -53
  63. package/dist/_dts/editor-blocks/src/widgets/button/context.d.ts +3 -2
  64. package/dist/_dts/preview-next/src/client/index.d.ts +3 -2
  65. package/dist/_dts/preview-next/src/client/preview/ButtonStylePicker.d.ts +16 -0
  66. package/dist/_dts/preview-next/src/client/preview/PageBlockEditorPanel.d.ts +2 -3
  67. package/dist/_dts/preview-next/src/client/preview/PreviewDesignOpenRequestContext.d.ts +7 -0
  68. package/dist/_dts/preview-next/src/client/preview/PreviewEditorSidebar.d.ts +5 -11
  69. package/dist/_dts/preview-next/src/client/preview/PreviewShell.d.ts +5 -6
  70. package/dist/_dts/preview-next/src/client/preview/PreviewShellLayout.d.ts +6 -7
  71. package/dist/_dts/preview-next/src/client/preview/SiteChromeCustomizeContext.d.ts +7 -9
  72. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.d.ts +4 -11
  73. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +7 -7
  74. package/dist/_dts/preview-next/src/client/preview/sidebarTabPreference.d.ts +0 -8
  75. package/dist/_dts/preview-next/src/client/preview/siteChromeLookRows.d.ts +1 -11
  76. package/dist/_dts/preview-next/src/client/preview/siteChromeQuickControlHistoryState.d.ts +1 -5
  77. package/dist/_dts/preview-next/src/client/preview/siteChromeSavePlan.d.ts +2 -3
  78. package/dist/_dts/preview-next/src/client/preview/siteStylePreviewPlanner.d.ts +3 -4
  79. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorSnapshot.d.ts +3 -5
  80. package/dist/_dts/sdk/src/bookings/index.d.ts +5 -4
  81. package/dist/_dts/sdk/src/bookings/types.d.ts +3 -3
  82. package/dist/_dts/sdk/src/cli/commands/style.d.ts +3 -2
  83. package/dist/_dts/sdk/src/client/management/types.d.ts +2 -1
  84. package/dist/_dts/sdk/src/contracts/system-block-content.d.ts +12 -15
  85. package/dist/_dts/sdk/src/public-api/contracts.d.ts +1 -1
  86. package/dist/_dts/sdk/src/version.d.ts +1 -1
  87. package/dist/_dts/sdk/src/webhooks/index.d.ts +1 -1
  88. package/dist/_dts/sdk/src/webhooks/verify.d.ts +3 -3
  89. package/dist/_dts/site-commands/src/commands.d.ts +129 -6
  90. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/buttons/styles/domain.d.ts +80 -0
  92. package/dist/_dts/theme-core/src/buttons/styles/index.d.ts +3 -0
  93. package/dist/_dts/theme-core/src/buttons/styles/recipes/defineStaticButtonStyleRecipe.d.ts +49 -0
  94. package/dist/_dts/theme-core/src/buttons/styles/recipes/quietArrow.d.ts +67 -0
  95. package/dist/_dts/theme-core/src/buttons/styles/recipes/staticRecipes.d.ts +649 -0
  96. package/dist/_dts/theme-core/src/buttons/styles/registry.d.ts +753 -0
  97. package/dist/_dts/theme-core/src/buttons/styles/selection.d.ts +69 -0
  98. package/dist/_dts/theme-core/src/site-styles/curatedSiteStyles.d.ts +26 -24
  99. package/dist/_dts/theme-core/src/site-styles/footerLooks.d.ts +19 -153
  100. package/dist/_dts/theme-core/src/site-styles/headerCtaVariants.d.ts +3 -1
  101. package/dist/_dts/theme-core/src/site-styles/previewCompiler.d.ts +8 -9
  102. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +4 -4
  103. package/dist/_dts/ui/src/palette/hex.d.ts +3 -3
  104. package/dist/cli/index.mjs +1760 -1914
  105. package/dist/cli/init-docs/content/workflow-isr-revalidation.md +1 -1
  106. package/dist/client/{DiscountCodeDisclosure-DU1ygxU2.mjs → DiscountCodeDisclosure-C4xvTBux.mjs} +1 -1
  107. package/dist/client/{EventCombined.client-DB5zagCo.mjs → EventCombined.client-Cr7G131j.mjs} +2 -3
  108. package/dist/client/{EventListing.client-CTX9JHBL.mjs → EventListing.client-CAjbseNy.mjs} +2 -2
  109. package/dist/client/{LeafletStaticMap-BYImhgiB.mjs → LeafletStaticMap-BMlWfwz3.mjs} +1 -1
  110. package/dist/client/{MagicLinkForm-CRkw_M3l.mjs → MagicLinkForm-ChdFz96y.mjs} +1 -2
  111. package/dist/client/{StepIndicator-BnmVBJJh.mjs → StepIndicator-7D3GaBeM.mjs} +2 -2
  112. package/dist/client/{accordion-CeGreumd.mjs → accordion-D8JTs2Si.mjs} +1 -1
  113. package/dist/client/{bookingForm-CSzFNrpN.mjs → bookingForm-H3DCRBHs.mjs} +6 -7
  114. package/dist/client/bookings.mjs +3069 -1447
  115. package/dist/client/{carousel-B2jDtogf.mjs → carousel-DMr_QWlz.mjs} +1 -1
  116. package/dist/client/{cart-D-jZ-vaY.mjs → cart-DWMbfBdR.mjs} +3 -3
  117. package/dist/client/{checkout-Dza-LA7N.mjs → checkout-zmfdkXLx.mjs} +3 -3
  118. package/dist/client/client.mjs +1732 -1913
  119. package/dist/client/{colorStyles-CrgzoXsm.mjs → colorStyles-gcTh5yZT.mjs} +2 -12
  120. package/dist/client/{colorTokenParts-CMugwvX_.mjs → colorTokenParts-FSS3al6l.mjs} +31 -1
  121. package/dist/client/{courseRegistration-TYkNychb.mjs → courseRegistration-Z_mn18jy.mjs} +100 -37
  122. package/dist/client/{eventCalendar-BI_90SsT.mjs → eventCalendar-CYp0YJGF.mjs} +4 -5
  123. package/dist/client/{eventCombined-mNrpryE9.mjs → eventCombined-rKyYZUa9.mjs} +2 -2
  124. package/dist/client/{eventDetails-D4GVlCIY.mjs → eventDetails-X0ZaUuMj.mjs} +3 -3
  125. package/dist/client/{eventListing-YhKN018y.mjs → eventListing-W1SuL7EP.mjs} +2 -2
  126. package/dist/client/{eventRegistration-CdHGtilr.mjs → eventRegistration-ClWricui.mjs} +6 -7
  127. package/dist/client/{form-AcAL45rA.mjs → form--eKPwAAD.mjs} +1 -2
  128. package/dist/client/{headerSection-uEC52ueD.mjs → headerSection-BSeGr-FS.mjs} +2 -3
  129. package/dist/client/hooks.mjs +1554 -1871
  130. package/dist/client/{locationMap-_wJDSUYe.mjs → locationMap-BpOrtNYn.mjs} +8 -5
  131. package/dist/client/{media-BK0O3b-U.mjs → media-DoF0dcVx.mjs} +2 -2
  132. package/dist/client/{newsletterForm-DrArsb2B.mjs → newsletterForm-Bt7it7Dy.mjs} +1 -2
  133. package/dist/client/{pricing-BSYVghwo.mjs → pricing-BTjSDDr4.mjs} +1 -1
  134. package/dist/client/{productDetail-Dyk90sMs.mjs → productDetail-ICnVTcCg.mjs} +3 -3
  135. package/dist/client/{productList-BCKThwAI.mjs → productList-ZHr6D604.mjs} +3 -3
  136. package/dist/client/{propsDecoder-CkXxkdSR.mjs → propsDecoder-wWN0tBDF.mjs} +2351 -129
  137. package/dist/client/rendering/client.mjs +1664 -1824
  138. package/dist/client/rendering/islands.mjs +20 -20
  139. package/dist/client/rendering.mjs +1697 -1909
  140. package/dist/client/{shop-DeltVH10.mjs → shop-C1u_BUn0.mjs} +5 -6
  141. package/dist/client/{shop-commerce-BD9Jsm2Z.mjs → shop-commerce-CleZdRha.mjs} +5 -6
  142. package/dist/client/{shop-commerce-store-CmXD6FDS.mjs → shop-commerce-store-ycnoB2Ce.mjs} +1 -1
  143. package/dist/client/{shopShared-B8v-lH_F.mjs → shopShared-CPhByt2a.mjs} +3 -3
  144. package/dist/client/{useDiscountCodeUi-DbWJN8ld.mjs → useDiscountCodeUi-cStSQI6C.mjs} +1 -1
  145. package/dist/client/{useEventFilters-EJIMUnqT.mjs → useEventFilters-DKPN7hSY.mjs} +26 -27
  146. package/dist/client/{usePolling-Cmh14fc7.mjs → usePolling-BKAd6pkZ.mjs} +2 -2
  147. package/dist/preview-next/before-render.mjs +37 -6
  148. package/dist/preview-next/client/runtime.mjs +4 -4
  149. package/dist/preview-next/middleware.mjs +37 -6
  150. package/dist/{previewAuthStore-CTO7CRPk.mjs → previewAuthStore-BkT1D06A.mjs} +37 -6
  151. package/dist/{sdk-runtime-Dou0GAav.mjs → sdk-runtime-hu3wr3ng.mjs} +2 -2
  152. package/dist/{separator-CI5wZNXT.mjs → separator-Bln8izQ9.mjs} +1 -1
  153. package/dist/server/components.mjs +1472 -1788
  154. package/dist/server/config-validation.mjs +1559 -1876
  155. package/dist/server/config.mjs +1559 -1876
  156. package/dist/server/data.mjs +1554 -1871
  157. package/dist/server/index.mjs +38 -7
  158. package/dist/server/next/revalidate.mjs +53 -1
  159. package/dist/server/next.mjs +1584 -1869
  160. package/dist/server/page-converter.mjs +1543 -1860
  161. package/dist/server/prebuild.mjs +1 -1
  162. package/dist/server/rendering/server.mjs +1472 -1788
  163. package/dist/server/rendering.mjs +1472 -1788
  164. package/dist/server/routing.mjs +1600 -1891
  165. package/dist/server/server.mjs +1574 -1860
  166. package/dist/server/theme-bridge.mjs +1436 -1619
  167. package/dist/server/theme.mjs +1345 -1241
  168. package/dist/server/webhooks.mjs +54 -2
  169. package/package.json +1 -1
  170. package/dist/_dts/theme-core/src/buttons/personalities/brushed-wash.d.ts +0 -16
  171. package/dist/_dts/theme-core/src/buttons/personalities/confident-chip.d.ts +0 -16
  172. package/dist/_dts/theme-core/src/buttons/personalities/earth-pill.d.ts +0 -16
  173. package/dist/_dts/theme-core/src/buttons/personalities/editorial-link.d.ts +0 -16
  174. package/dist/_dts/theme-core/src/buttons/personalities/flat-ink.d.ts +0 -20
  175. package/dist/_dts/theme-core/src/buttons/personalities/index.d.ts +0 -172
  176. package/dist/_dts/theme-core/src/buttons/personalities/ink-stamp.d.ts +0 -16
  177. package/dist/_dts/theme-core/src/buttons/personalities/joy-stamp.d.ts +0 -22
  178. package/dist/_dts/theme-core/src/buttons/personalities/ornate-ritual.d.ts +0 -16
  179. package/dist/_dts/theme-core/src/buttons/personalities/pebble.d.ts +0 -16
  180. package/dist/_dts/theme-core/src/buttons/personalities/quiet-arrow.d.ts +0 -17
  181. package/dist/_dts/theme-core/src/buttons/personalities/showtime-pill.d.ts +0 -17
  182. package/dist/_dts/theme-core/src/buttons/personalities/soft-pill.d.ts +0 -16
  183. package/dist/_dts/theme-core/src/buttons/personalities/two-tone-pill.d.ts +0 -17
  184. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +0 -285
  185. package/dist/client/buttons-DoFV7KDL.mjs +0 -2115
  186. package/dist/client/foregroundContract-xICPq59x.mjs +0 -31
@@ -1234,7 +1234,7 @@ function getAutoAppliedDiscountPreview(availability) {
1234
1234
  case "auto_and_manual": return availability.autoAppliedDiscount;
1235
1235
  }
1236
1236
  }
1237
- var init_types$18 = __esmMin((() => {}));
1237
+ var init_types$17 = __esmMin((() => {}));
1238
1238
  //#endregion
1239
1239
  //#region ../blocks/src/system/runtime/api/creditProducts.ts
1240
1240
  function assertNever$22(value) {
@@ -1287,7 +1287,7 @@ var init_creditProducts = __esmMin((() => {}));
1287
1287
  var init_api = __esmMin((() => {
1288
1288
  init_client$2();
1289
1289
  init_context$1();
1290
- init_types$18();
1290
+ init_types$17();
1291
1291
  init_creditProducts();
1292
1292
  init_endpoints();
1293
1293
  init_deduplication();
@@ -1986,7 +1986,7 @@ function isUnknownArray$2(value) {
1986
1986
  return Array.isArray(value);
1987
1987
  }
1988
1988
  var VARIANT_ROLES, DEFAULT_VARIANT_ALIAS_ID, opaqueButtonColourTokenSchema, cornerStyleSchema, shadowSizeSchema, textTransformSchema, fontWeightSchema, buttonTypographySchema, letterSpacingSchema, hoverTransformSchema, hoverColorSchema, buttonPaddingPresetSchema, gradientStyleSchema, gradientSharpnessSchema, prioritySchema, buttonSizeNameSchema, PADDING_TOKEN_PATTERN, paddingShorthandSchema, buttonSizeConfigSchema, buttonSizesSchema, canonicalButtonGlobalSettingsSchema, buttonGlobalSettingsSchema, gradientDirectionSchema$1, buttonColourTreatmentSchema, buttonBackgroundSchema, effectApplicationSchema$1, buttonBorderSchema, buttonVariantAffordanceSchema, variantShadowSchema, variantEffectsSchema, variantSizeOverridesSchema, canonicalButtonVariantSchema, buttonVariantSchema, buttonSystemSchema;
1989
- var init_types$17 = __esmMin((() => {
1989
+ var init_types$16 = __esmMin((() => {
1990
1990
  init_effectClassification();
1991
1991
  init_themeColorTokens();
1992
1992
  init_colorTokenParts();
@@ -2248,7 +2248,7 @@ function themeButtonClassName(spec) {
2248
2248
  ].filter(Boolean).join(" ");
2249
2249
  }
2250
2250
  var init_classNames = __esmMin((() => {
2251
- init_types$17();
2251
+ init_types$16();
2252
2252
  }));
2253
2253
  var init_resolver$1 = __esmMin((() => {}));
2254
2254
  var init_generateBaseCSS = __esmMin((() => {}));
@@ -2279,7 +2279,7 @@ var init_effects = __esmMin((() => {
2279
2279
  init_nav_underline();
2280
2280
  init_nav_frosted();
2281
2281
  }));
2282
- var init_registry$1 = __esmMin((() => {
2282
+ var init_registry$2 = __esmMin((() => {
2283
2283
  init_background$2();
2284
2284
  init_shadow();
2285
2285
  init_transform();
@@ -2289,10 +2289,10 @@ var init_registry$1 = __esmMin((() => {
2289
2289
  init_animation();
2290
2290
  init_effects();
2291
2291
  })), init_generateEffectsCSS = __esmMin((() => {
2292
- init_registry$1();
2292
+ init_registry$2();
2293
2293
  }));
2294
2294
  var init_generateDefaultButtonSystem = __esmMin((() => {
2295
- init_types$17();
2295
+ init_types$16();
2296
2296
  }));
2297
2297
  var init_affordanceIcons = __esmMin((() => {}));
2298
2298
  //#endregion
@@ -2408,12 +2408,12 @@ var init_resolveButtonColourStates = __esmMin((() => {
2408
2408
  init_colorConversion();
2409
2409
  init_onColor();
2410
2410
  init_foregroundContract();
2411
- init_types$17();
2411
+ init_types$16();
2412
2412
  init_constants$2();
2413
2413
  init_effectClassification();
2414
2414
  })), init_resolvedButtonCss = __esmMin((() => {})), AFFORDANCE_SUPPRESS_CLASS;
2415
2415
  var init_generateButtonCss = __esmMin((() => {
2416
- init_types$17();
2416
+ init_types$16();
2417
2417
  init_classNames();
2418
2418
  init_resolver$1();
2419
2419
  init_generateBaseCSS();
@@ -2429,300 +2429,451 @@ var init_generateButtonCss = __esmMin((() => {
2429
2429
  buttonSizeNameSchema.options;
2430
2430
  }));
2431
2431
  //#endregion
2432
- //#region ../theme-core/src/site-styles/styleTags.ts
2433
- var STYLE_AXIS_VALUES, styleTagsSchema;
2434
- var init_styleTags = __esmMin((() => {
2435
- STYLE_AXIS_VALUES = {
2436
- tone: [
2437
- "minimal",
2438
- "classic",
2439
- "bold"
2440
- ],
2441
- energy: ["calm", "vibrant"],
2442
- motion: [
2443
- "subtle",
2444
- "standard",
2445
- "expressive"
2446
- ],
2447
- era: [
2448
- "editorial",
2449
- "modern",
2450
- "organic",
2451
- "technical",
2452
- "retro"
2453
- ]
2432
+ //#region ../theme-core/src/buttons/styles/domain.ts
2433
+ function defineButtonStyleRecipe(recipe) {
2434
+ return recipe;
2435
+ }
2436
+ function materializeButtonRoles(definitions) {
2437
+ const primary = materializeCompleteRole("primary", definitions.primary.appearance);
2438
+ const secondary = materializeCompleteRole("secondary", definitions.secondary.appearance);
2439
+ const completeRoles = {
2440
+ primary,
2441
+ secondary
2442
+ };
2443
+ return {
2444
+ primary,
2445
+ secondary,
2446
+ outline: materializeSupportingRole("outline", definitions.outline, completeRoles),
2447
+ ghost: materializeSupportingRole("ghost", definitions.ghost, completeRoles),
2448
+ accent: materializeSupportingRole("accent", definitions.accent, completeRoles)
2454
2449
  };
2455
- styleTagsSchema = z$1.object({
2456
- tone: z$1.enum(STYLE_AXIS_VALUES.tone).optional(),
2457
- energy: z$1.enum(STYLE_AXIS_VALUES.energy).optional(),
2458
- motion: z$1.enum(STYLE_AXIS_VALUES.motion).optional(),
2459
- era: z$1.enum(STYLE_AXIS_VALUES.era).optional()
2460
- });
2461
- }));
2462
- //#endregion
2463
- //#region ../theme-core/src/buttons/personalities/types.ts
2464
- function asButtonPersonalityId(value) {
2465
- if (value.length === 0) throw new Error("ButtonPersonalityId must be a non-empty string");
2466
- return value;
2467
2450
  }
2468
- /**
2469
- * Helper for personality file modules to keep the call site short and
2470
- * type-safe. `as const satisfies ...` would also work but produces wider
2471
- * types at use sites.
2472
- */
2473
- function defineButtonPersonality(input) {
2451
+ function resolveButtonStyleRecipe(recipe, parameters) {
2452
+ const parsedParameters = recipe.parameterSchema.safeParse(parameters);
2453
+ if (!parsedParameters.success) return {
2454
+ kind: "error",
2455
+ error: {
2456
+ kind: "invalid-parameters",
2457
+ styleId: recipe.id,
2458
+ issues: parsedParameters.error.issues.map((issue) => issue.message)
2459
+ }
2460
+ };
2461
+ const definition = recipe.defineSystem(parsedParameters.data);
2462
+ const roles = materializeButtonRoles(definition.roles);
2463
+ const buttonSystem = {
2464
+ global: definition.global,
2465
+ variants: PUBLIC_BUTTON_ROLES.map((role) => roles[role]),
2466
+ ...definition.sizes ? { sizes: definition.sizes } : {}
2467
+ };
2468
+ const parsedButtonSystem = buttonSystemSchema.safeParse(buttonSystem);
2469
+ if (!parsedButtonSystem.success) return {
2470
+ kind: "error",
2471
+ error: {
2472
+ kind: "invalid-button-system",
2473
+ styleId: recipe.id,
2474
+ issues: parsedButtonSystem.error.issues.map((issue) => issue.message)
2475
+ }
2476
+ };
2474
2477
  return {
2475
- id: asButtonPersonalityId(input.id),
2476
- name: input.name,
2477
- description: input.description,
2478
- tags: input.tags,
2479
- buttonSystem: buttonSystemSchema.parse(input.buttonSystem)
2478
+ kind: "resolved",
2479
+ buttonSystem: parsedButtonSystem.data
2480
2480
  };
2481
2481
  }
2482
- var buttonPersonalityIdSchema;
2483
- var init_types$16 = __esmMin((() => {
2484
- init_types$17();
2485
- init_styleTags();
2486
- buttonPersonalityIdSchema = z$1.string().min(1).transform((value) => asButtonPersonalityId(value));
2487
- z$1.object({
2488
- id: buttonPersonalityIdSchema,
2489
- name: z$1.string().min(1),
2490
- description: z$1.string().min(1),
2491
- tags: styleTagsSchema,
2492
- buttonSystem: buttonSystemSchema
2493
- });
2482
+ function materializeSupportingRole(role, definition, completeRoles) {
2483
+ if (definition.kind === "complete") return materializeCompleteRole(role, definition.appearance);
2484
+ return {
2485
+ ...completeRoles[definition.from],
2486
+ ...definition.overrides,
2487
+ id: role,
2488
+ name: roleName(role),
2489
+ enabled: true,
2490
+ priority: 3
2491
+ };
2492
+ }
2493
+ function materializeCompleteRole(role, appearance) {
2494
+ return {
2495
+ ...appearance,
2496
+ id: role,
2497
+ name: roleName(role),
2498
+ enabled: true,
2499
+ priority: rolePriority(role)
2500
+ };
2501
+ }
2502
+ function roleName(role) {
2503
+ return role.charAt(0).toUpperCase() + role.slice(1);
2504
+ }
2505
+ function rolePriority(role) {
2506
+ if (role === "primary") return 1;
2507
+ if (role === "secondary") return 2;
2508
+ return 3;
2509
+ }
2510
+ var PUBLIC_BUTTON_ROLES;
2511
+ var init_domain = __esmMin((() => {
2512
+ init_types$16();
2513
+ PUBLIC_BUTTON_ROLES = [
2514
+ "primary",
2515
+ "secondary",
2516
+ "outline",
2517
+ "ghost",
2518
+ "accent"
2519
+ ];
2520
+ }));
2521
+ //#endregion
2522
+ //#region ../theme-core/src/buttons/styles/selection.ts
2523
+ function selectionBranch(styleId, parameters) {
2524
+ return z$1.object({
2525
+ styleId: z$1.literal(styleId),
2526
+ parameters
2527
+ }).strict();
2528
+ }
2529
+ var BUTTON_STYLE_IDS, quietArrowParametersSchema, emptyParametersSchema$1, buttonStyleSelectionWireSchema, buttonStyleSelectionSchema;
2530
+ var init_selection$1 = __esmMin((() => {
2531
+ BUTTON_STYLE_IDS = [
2532
+ "soft-pill",
2533
+ "earth-pill",
2534
+ "confident-chip",
2535
+ "editorial-link",
2536
+ "pebble",
2537
+ "ink-stamp",
2538
+ "flat-ink",
2539
+ "brushed-wash",
2540
+ "showtime-pill",
2541
+ "joy-stamp",
2542
+ "ornate-ritual",
2543
+ "quiet-arrow"
2544
+ ];
2545
+ quietArrowParametersSchema = z$1.object({ secondaryTreatment: z$1.enum(["outlined", "solid-accent"]) }).strict();
2546
+ emptyParametersSchema$1 = z$1.object({}).strict();
2547
+ buttonStyleSelectionWireSchema = z$1.discriminatedUnion("styleId", [
2548
+ selectionBranch("soft-pill", emptyParametersSchema$1),
2549
+ selectionBranch("earth-pill", emptyParametersSchema$1),
2550
+ selectionBranch("confident-chip", emptyParametersSchema$1),
2551
+ selectionBranch("editorial-link", emptyParametersSchema$1),
2552
+ selectionBranch("pebble", emptyParametersSchema$1),
2553
+ selectionBranch("ink-stamp", emptyParametersSchema$1),
2554
+ selectionBranch("flat-ink", emptyParametersSchema$1),
2555
+ selectionBranch("brushed-wash", emptyParametersSchema$1),
2556
+ selectionBranch("showtime-pill", emptyParametersSchema$1),
2557
+ selectionBranch("joy-stamp", emptyParametersSchema$1),
2558
+ selectionBranch("ornate-ritual", emptyParametersSchema$1),
2559
+ selectionBranch("quiet-arrow", quietArrowParametersSchema)
2560
+ ]);
2561
+ buttonStyleSelectionSchema = buttonStyleSelectionWireSchema;
2494
2562
  }));
2495
2563
  //#endregion
2496
- //#region ../theme-core/src/buttons/personalities/brushed-wash.ts
2497
- var brushedWash;
2498
- var init_brushed_wash = __esmMin((() => {
2564
+ //#region ../theme-core/src/buttons/styles/recipes/quietArrow.ts
2565
+ var quietArrowRecipe;
2566
+ var init_quietArrow = __esmMin((() => {
2567
+ init_domain();
2499
2568
  init_types$16();
2500
- brushedWash = defineButtonPersonality({
2501
- id: "brushed-wash",
2502
- name: "Brushed Wash",
2503
- description: "Watercolour-gradient buttons with soft shadows and generous padding.",
2569
+ init_selection$1();
2570
+ quietArrowRecipe = defineButtonStyleRecipe({
2571
+ id: "quiet-arrow",
2572
+ accessibilityLabel: "Wide uppercase buttons with trailing arrows",
2504
2573
  tags: {
2505
2574
  tone: "classic",
2506
- energy: "vibrant",
2507
- motion: "standard",
2508
- era: "organic"
2575
+ energy: "calm",
2576
+ motion: "subtle",
2577
+ era: "editorial"
2509
2578
  },
2510
- buttonSystem: {
2579
+ parameterSchema: quietArrowParametersSchema,
2580
+ defaultParameters: { secondaryTreatment: "outlined" },
2581
+ controls: [{
2582
+ kind: "choice",
2583
+ parameter: "secondaryTreatment",
2584
+ label: "Secondary button treatment",
2585
+ options: [{
2586
+ value: "outlined",
2587
+ label: "Outlined"
2588
+ }, {
2589
+ value: "solid-accent",
2590
+ label: "Solid accent"
2591
+ }]
2592
+ }],
2593
+ defineSystem: (parameters) => ({
2511
2594
  global: {
2512
2595
  cornerStyle: "rounded",
2513
- shadow: "low",
2514
- textTransform: "none",
2596
+ textTransform: "uppercase",
2515
2597
  fontWeight: 500,
2516
2598
  borderWidth: 1,
2599
+ typography: "body",
2600
+ fontSize: "text-sm",
2601
+ letterSpacing: "loose",
2517
2602
  hoverTransform: "none",
2518
2603
  hoverColor: "none"
2519
2604
  },
2520
2605
  sizes: {
2521
2606
  sm: {
2522
- padding: "0.75rem 2rem",
2607
+ padding: "0.625rem 1.25rem",
2608
+ fontSize: "text-xs"
2609
+ },
2610
+ md: {
2611
+ padding: "0.8125rem 1.75rem",
2523
2612
  fontSize: "text-sm"
2524
2613
  },
2525
- md: { padding: "1rem 2.5rem" },
2526
2614
  lg: {
2527
- padding: "1.25rem 3rem",
2528
- fontSize: "text-lg"
2615
+ padding: "0.9375rem 2.125rem",
2616
+ fontSize: "text-sm"
2529
2617
  },
2530
2618
  xl: {
2531
- padding: "1.625rem 3.75rem",
2532
- fontSize: "text-xl"
2619
+ padding: "1.0625rem 2.5rem",
2620
+ fontSize: "text-base"
2533
2621
  }
2534
2622
  },
2535
- variants: [
2536
- {
2537
- id: "primary",
2538
- name: "Primary",
2539
- enabled: true,
2540
- priority: 1,
2541
- background: {
2542
- type: "gradient",
2543
- stops: ["primary", "accent"],
2544
- direction: "to-r",
2545
- foregroundToken: "primaryForeground"
2546
- },
2547
- borderRadius: "rounded-lg",
2548
- shadow: {
2549
- elevation: "low",
2550
- softness: "soft",
2551
- position: "bottom"
2623
+ roles: {
2624
+ primary: {
2625
+ kind: "complete",
2626
+ appearance: {
2627
+ background: {
2628
+ type: "solid",
2629
+ colorToken: unsafeAsOpaqueButtonColourToken("primary")
2630
+ },
2631
+ borderRadius: "rounded-xl",
2632
+ affordance: { iconId: "ArrowRight" },
2633
+ effects: { hover: [{
2634
+ effectId: "darken-background",
2635
+ options: { amount: 100 }
2636
+ }] }
2552
2637
  }
2553
2638
  },
2554
- {
2555
- id: "secondary",
2556
- name: "Secondary",
2557
- enabled: true,
2558
- priority: 2,
2559
- background: {
2560
- type: "gradient",
2561
- stops: ["secondary", "accent"],
2562
- direction: "to-br",
2563
- foregroundToken: "primaryForeground"
2564
- },
2565
- borderRadius: "rounded-lg",
2566
- shadow: {
2567
- elevation: "low",
2568
- softness: "soft",
2569
- position: "bottom"
2639
+ secondary: {
2640
+ kind: "complete",
2641
+ appearance: parameters.secondaryTreatment === "solid-accent" ? {
2642
+ background: {
2643
+ type: "solid",
2644
+ colorToken: unsafeAsOpaqueButtonColourToken("accent")
2645
+ },
2646
+ borderRadius: "rounded-xl",
2647
+ affordance: { iconId: "ArrowRight" },
2648
+ effects: { hover: [{
2649
+ effectId: "darken-background",
2650
+ options: { amount: 100 }
2651
+ }] }
2652
+ } : {
2653
+ background: {
2654
+ type: "surface",
2655
+ role: "link"
2656
+ },
2657
+ borderRadius: "rounded-xl",
2658
+ border: { widthClass: "border" },
2659
+ affordance: { iconId: "ArrowRight" },
2660
+ effects: { hover: [{
2661
+ effectId: "background-on-hover",
2662
+ options: { colorToken: "surfaceAlt" }
2663
+ }] }
2570
2664
  }
2571
2665
  },
2572
- {
2573
- id: "outline",
2574
- name: "Outline",
2575
- enabled: true,
2576
- priority: 3,
2577
- background: {
2578
- type: "surface",
2579
- role: "link"
2580
- },
2581
- borderRadius: "rounded-lg",
2582
- border: { widthClass: "border" },
2583
- effects: { hover: [{
2584
- effectId: "background-on-hover",
2585
- options: { colorToken: "surface" }
2586
- }] }
2666
+ outline: {
2667
+ kind: "complete",
2668
+ appearance: {
2669
+ background: {
2670
+ type: "surface",
2671
+ role: "link"
2672
+ },
2673
+ borderRadius: "rounded-xl",
2674
+ border: { widthClass: "border" }
2675
+ }
2587
2676
  },
2588
- {
2589
- id: "ghost",
2590
- name: "Ghost",
2591
- enabled: true,
2592
- priority: 3,
2593
- background: {
2594
- type: "surface",
2595
- role: "link"
2596
- },
2597
- borderRadius: "rounded-lg",
2598
- effects: { hover: [{
2599
- effectId: "background-on-hover",
2600
- options: { colorToken: "surface" }
2601
- }] }
2677
+ ghost: {
2678
+ kind: "complete",
2679
+ appearance: {
2680
+ background: {
2681
+ type: "surface",
2682
+ role: "link"
2683
+ },
2684
+ borderRadius: "rounded-xl"
2685
+ }
2686
+ },
2687
+ accent: {
2688
+ kind: "derive",
2689
+ from: "primary",
2690
+ overrides: { background: {
2691
+ type: "solid",
2692
+ colorToken: unsafeAsOpaqueButtonColourToken("accent")
2693
+ } }
2602
2694
  }
2603
- ]
2604
- }
2695
+ }
2696
+ })
2605
2697
  });
2606
2698
  }));
2607
2699
  //#endregion
2608
- //#region ../theme-core/src/buttons/personalities/confident-chip.ts
2609
- var confidentChip;
2610
- var init_confident_chip = __esmMin((() => {
2700
+ //#region ../theme-core/src/buttons/styles/recipes/defineStaticButtonStyleRecipe.ts
2701
+ function defineStaticButtonStyleRecipe(input) {
2702
+ const system = normalizeSystem(input.system);
2703
+ return defineButtonStyleRecipe({
2704
+ id: input.id,
2705
+ accessibilityLabel: input.accessibilityLabel,
2706
+ tags: input.tags,
2707
+ parameterSchema: emptyParametersSchema,
2708
+ defaultParameters: {},
2709
+ controls: [],
2710
+ defineSystem: () => system
2711
+ });
2712
+ }
2713
+ function normalizeSystem(input) {
2714
+ return {
2715
+ global: buttonGlobalSettingsSchema.parse(input.global),
2716
+ ...input.sizes ? { sizes: input.sizes } : {},
2717
+ roles: {
2718
+ primary: normalizeCompleteRole(input.roles.primary),
2719
+ secondary: normalizeCompleteRole(input.roles.secondary),
2720
+ outline: normalizeSupportingRole(input.roles.outline),
2721
+ ghost: normalizeSupportingRole(input.roles.ghost),
2722
+ accent: normalizeSupportingRole(input.roles.accent)
2723
+ }
2724
+ };
2725
+ }
2726
+ function normalizeCompleteRole(role) {
2727
+ return {
2728
+ kind: "complete",
2729
+ appearance: normalizeAppearance(role.appearance)
2730
+ };
2731
+ }
2732
+ function normalizeSupportingRole(role) {
2733
+ if (role.kind === "complete") return normalizeCompleteRole(role);
2734
+ return {
2735
+ kind: "derive",
2736
+ from: role.from,
2737
+ ...role.overrides ? { overrides: normalizeAppearanceOverrides(role.overrides) } : {}
2738
+ };
2739
+ }
2740
+ function normalizeAppearance(appearance) {
2741
+ const { background, hoverBackgroundToken, ...rest } = appearance;
2742
+ return {
2743
+ ...rest,
2744
+ background: buttonColourTreatmentSchema.parse(background),
2745
+ ...hoverBackgroundToken ? { hoverBackgroundToken: opaqueButtonColourTokenSchema.parse(hoverBackgroundToken) } : {}
2746
+ };
2747
+ }
2748
+ function normalizeAppearanceOverrides(overrides) {
2749
+ const { background, hoverBackgroundToken, ...rest } = overrides;
2750
+ return {
2751
+ ...rest,
2752
+ ...background ? { background: buttonColourTreatmentSchema.parse(background) } : {},
2753
+ ...hoverBackgroundToken ? { hoverBackgroundToken: opaqueButtonColourTokenSchema.parse(hoverBackgroundToken) } : {}
2754
+ };
2755
+ }
2756
+ var emptyParametersSchema;
2757
+ var init_defineStaticButtonStyleRecipe = __esmMin((() => {
2611
2758
  init_types$16();
2612
- confidentChip = defineButtonPersonality({
2613
- id: "confident-chip",
2614
- name: "Confident Chip",
2615
- description: "Mid-radius solid buttons with a crisp hover.",
2759
+ init_domain();
2760
+ emptyParametersSchema = z$1.object({}).strict();
2761
+ }));
2762
+ //#endregion
2763
+ //#region ../theme-core/src/buttons/styles/recipes/staticRecipes.ts
2764
+ var softPillRecipe, earthPillRecipe, confidentChipRecipe, editorialSizes, editorialLinkRecipe, pebbleRecipe, brushedWashRecipe, inkStampRecipe, flatInkRecipe, showtimePillRecipe, joyStampRecipe, ornateGhostSizes, ornateRitualRecipe;
2765
+ var init_staticRecipes = __esmMin((() => {
2766
+ init_defineStaticButtonStyleRecipe();
2767
+ softPillRecipe = defineStaticButtonStyleRecipe({
2768
+ id: "soft-pill",
2769
+ accessibilityLabel: "Rounded pill buttons with a gentle hover lift",
2616
2770
  tags: {
2617
2771
  tone: "classic",
2618
2772
  energy: "calm",
2619
- motion: "standard",
2620
- era: "modern"
2773
+ motion: "subtle",
2774
+ era: "organic"
2621
2775
  },
2622
- buttonSystem: {
2776
+ system: {
2623
2777
  global: {
2624
- cornerStyle: "rounded",
2625
- shadow: "medium",
2778
+ cornerStyle: "pill",
2779
+ shadow: "low",
2626
2780
  textTransform: "none",
2627
- fontWeight: 600,
2628
- borderWidth: 1,
2629
- hoverTransform: "none",
2781
+ fontWeight: 500,
2782
+ borderWidth: 2,
2783
+ hoverTransform: "lift",
2630
2784
  hoverColor: "none"
2631
2785
  },
2632
- variants: [
2633
- {
2634
- id: "primary",
2635
- name: "Primary",
2636
- enabled: true,
2637
- priority: 1,
2638
- background: {
2639
- type: "solid",
2640
- colorToken: "primary"
2641
- },
2642
- borderRadius: "rounded-md",
2643
- shadow: {
2644
- elevation: "medium",
2645
- softness: "soft",
2646
- position: "bottom"
2647
- },
2648
- effects: {
2649
- hover: [{
2650
- effectId: "darken-background",
2651
- options: { amount: 100 }
2652
- }],
2653
- active: [{
2654
- effectId: "scale-down",
2655
- options: { scale: "0.97" }
2656
- }]
2786
+ roles: {
2787
+ primary: {
2788
+ kind: "complete",
2789
+ appearance: {
2790
+ background: {
2791
+ type: "solid",
2792
+ colorToken: "primary"
2793
+ },
2794
+ borderRadius: "rounded-full",
2795
+ shadow: {
2796
+ elevation: "low",
2797
+ softness: "soft",
2798
+ position: "bottom"
2799
+ },
2800
+ effects: {
2801
+ hover: [{
2802
+ effectId: "lift",
2803
+ options: { translateY: "-1px" }
2804
+ }],
2805
+ active: [{
2806
+ effectId: "scale-down",
2807
+ options: { scale: "0.98" }
2808
+ }]
2809
+ }
2657
2810
  }
2658
2811
  },
2659
- {
2660
- id: "secondary",
2661
- name: "Secondary",
2662
- enabled: true,
2663
- priority: 2,
2664
- background: {
2665
- type: "solid",
2666
- colorToken: "surface"
2667
- },
2668
- borderRadius: "rounded-md",
2669
- border: { widthClass: "border" },
2670
- effects: { hover: [{
2671
- effectId: "background-on-hover",
2672
- options: { colorToken: "background" }
2673
- }] }
2812
+ secondary: {
2813
+ kind: "complete",
2814
+ appearance: {
2815
+ background: {
2816
+ type: "surface",
2817
+ role: "link"
2818
+ },
2819
+ borderRadius: "rounded-full",
2820
+ border: { widthClass: "border-2" },
2821
+ effects: { hover: [{
2822
+ effectId: "background-on-hover",
2823
+ options: { colorToken: "surface" }
2824
+ }] }
2825
+ }
2674
2826
  },
2675
- {
2676
- id: "outline",
2677
- name: "Outline",
2678
- enabled: true,
2679
- priority: 3,
2680
- background: {
2681
- type: "surface",
2682
- role: "link"
2683
- },
2684
- borderRadius: "rounded-md",
2685
- border: { widthClass: "border" },
2686
- effects: { hover: [{
2687
- effectId: "background-on-hover",
2688
- options: { colorToken: "surface" }
2689
- }] }
2827
+ outline: {
2828
+ kind: "complete",
2829
+ appearance: {
2830
+ background: {
2831
+ type: "surface",
2832
+ role: "link"
2833
+ },
2834
+ borderRadius: "rounded-full",
2835
+ border: { widthClass: "border" },
2836
+ effects: { hover: [{
2837
+ effectId: "background-on-hover",
2838
+ options: { colorToken: "surface" }
2839
+ }] }
2840
+ }
2690
2841
  },
2691
- {
2692
- id: "ghost",
2693
- name: "Ghost",
2694
- enabled: true,
2695
- priority: 3,
2696
- background: {
2697
- type: "surface",
2698
- role: "link"
2699
- },
2700
- borderRadius: "rounded-md",
2701
- effects: { hover: [{
2702
- effectId: "background-on-hover",
2703
- options: { colorToken: "surface" }
2704
- }] }
2842
+ ghost: {
2843
+ kind: "complete",
2844
+ appearance: {
2845
+ background: {
2846
+ type: "surface",
2847
+ role: "link"
2848
+ },
2849
+ borderRadius: "rounded-full",
2850
+ effects: { hover: [{
2851
+ effectId: "background-on-hover",
2852
+ options: { colorToken: "surface" }
2853
+ }] }
2854
+ }
2855
+ },
2856
+ accent: {
2857
+ kind: "derive",
2858
+ from: "primary",
2859
+ overrides: { background: {
2860
+ type: "solid",
2861
+ colorToken: "accent"
2862
+ } }
2705
2863
  }
2706
- ]
2864
+ }
2707
2865
  }
2708
2866
  });
2709
- }));
2710
- //#endregion
2711
- //#region ../theme-core/src/buttons/personalities/earth-pill.ts
2712
- var earthPill;
2713
- var init_earth_pill = __esmMin((() => {
2714
- init_types$16();
2715
- earthPill = defineButtonPersonality({
2867
+ earthPillRecipe = defineStaticButtonStyleRecipe({
2716
2868
  id: "earth-pill",
2717
- name: "Earth Pill",
2718
- description: "Compact terracotta pills with quiet primary-coloured ghost CTAs.",
2869
+ accessibilityLabel: "Compact rounded buttons with a quiet hover lift",
2719
2870
  tags: {
2720
2871
  tone: "classic",
2721
2872
  energy: "calm",
2722
2873
  motion: "subtle",
2723
2874
  era: "organic"
2724
2875
  },
2725
- buttonSystem: {
2876
+ system: {
2726
2877
  global: {
2727
2878
  cornerStyle: "pill",
2728
2879
  shadow: "low",
@@ -2749,566 +2900,547 @@ var init_earth_pill = __esmMin((() => {
2749
2900
  fontSize: "text-xl"
2750
2901
  }
2751
2902
  },
2752
- variants: [
2753
- {
2754
- id: "primary",
2755
- name: "Primary",
2756
- enabled: true,
2757
- priority: 1,
2758
- background: {
2759
- type: "solid",
2760
- colorToken: "primary"
2761
- },
2762
- borderRadius: "rounded-full",
2763
- shadow: {
2764
- elevation: "low",
2765
- softness: "soft",
2766
- position: "bottom"
2767
- },
2768
- effects: {
2769
- hover: [{
2770
- effectId: "lift",
2771
- options: { translateY: "-1px" }
2772
- }, {
2773
- effectId: "background-on-hover",
2774
- options: { colorToken: "accent" }
2775
- }],
2776
- active: [{
2777
- effectId: "scale-down",
2778
- options: { scale: "0.98" }
2779
- }]
2903
+ roles: {
2904
+ primary: {
2905
+ kind: "complete",
2906
+ appearance: {
2907
+ background: {
2908
+ type: "solid",
2909
+ colorToken: "primary"
2910
+ },
2911
+ borderRadius: "rounded-full",
2912
+ shadow: {
2913
+ elevation: "low",
2914
+ softness: "soft",
2915
+ position: "bottom"
2916
+ },
2917
+ effects: {
2918
+ hover: [{
2919
+ effectId: "lift",
2920
+ options: { translateY: "-1px" }
2921
+ }, {
2922
+ effectId: "background-on-hover",
2923
+ options: { colorToken: "accent" }
2924
+ }],
2925
+ active: [{
2926
+ effectId: "scale-down",
2927
+ options: { scale: "0.98" }
2928
+ }]
2929
+ }
2780
2930
  }
2781
2931
  },
2782
- {
2783
- id: "secondary",
2784
- name: "Secondary",
2785
- enabled: true,
2786
- priority: 2,
2787
- background: {
2788
- type: "surface",
2789
- role: "link"
2790
- },
2791
- borderRadius: "rounded-full",
2792
- border: { widthClass: "border" },
2793
- effects: { hover: [{
2794
- effectId: "background-on-hover",
2795
- options: { colorToken: "muted" }
2796
- }] }
2932
+ secondary: {
2933
+ kind: "complete",
2934
+ appearance: {
2935
+ background: {
2936
+ type: "surface",
2937
+ role: "link"
2938
+ },
2939
+ borderRadius: "rounded-full",
2940
+ border: { widthClass: "border" },
2941
+ effects: { hover: [{
2942
+ effectId: "background-on-hover",
2943
+ options: { colorToken: "muted" }
2944
+ }] }
2945
+ }
2797
2946
  },
2798
- {
2799
- id: "outline",
2800
- name: "Outline",
2801
- enabled: true,
2802
- priority: 3,
2803
- background: {
2804
- type: "surface",
2805
- role: "link"
2806
- },
2807
- borderRadius: "rounded-full",
2808
- border: { widthClass: "border" },
2809
- effects: { hover: [{
2810
- effectId: "background-on-hover",
2811
- options: { colorToken: "surfaceAlt" }
2812
- }] }
2947
+ outline: {
2948
+ kind: "complete",
2949
+ appearance: {
2950
+ background: {
2951
+ type: "surface",
2952
+ role: "link"
2953
+ },
2954
+ borderRadius: "rounded-full",
2955
+ border: { widthClass: "border" },
2956
+ effects: { hover: [{
2957
+ effectId: "background-on-hover",
2958
+ options: { colorToken: "surfaceAlt" }
2959
+ }] }
2960
+ }
2813
2961
  },
2814
- {
2815
- id: "ghost",
2816
- name: "Ghost",
2817
- enabled: true,
2818
- priority: 3,
2819
- background: {
2820
- type: "surface",
2821
- role: "link"
2822
- },
2823
- borderRadius: "rounded-full",
2824
- shadow: {
2825
- elevation: "none",
2826
- softness: null,
2827
- position: "bottom"
2828
- },
2829
- sizes: {
2830
- sm: {
2831
- padding: "0.25rem 0",
2832
- fontSize: "text-sm"
2962
+ ghost: {
2963
+ kind: "complete",
2964
+ appearance: {
2965
+ background: {
2966
+ type: "surface",
2967
+ role: "link"
2833
2968
  },
2834
- md: { padding: "0.375rem 0" },
2835
- lg: {
2836
- padding: "0.5rem 0",
2837
- fontSize: "text-lg"
2969
+ borderRadius: "rounded-full",
2970
+ shadow: {
2971
+ elevation: "none",
2972
+ softness: null,
2973
+ position: "bottom"
2838
2974
  },
2839
- xl: {
2840
- padding: "0.625rem 0",
2841
- fontSize: "text-xl"
2975
+ sizes: {
2976
+ sm: {
2977
+ padding: "0.25rem 0",
2978
+ fontSize: "text-sm"
2979
+ },
2980
+ md: { padding: "0.375rem 0" },
2981
+ lg: {
2982
+ padding: "0.5rem 0",
2983
+ fontSize: "text-lg"
2984
+ },
2985
+ xl: {
2986
+ padding: "0.625rem 0",
2987
+ fontSize: "text-xl"
2988
+ }
2842
2989
  }
2843
2990
  }
2991
+ },
2992
+ accent: {
2993
+ kind: "derive",
2994
+ from: "primary",
2995
+ overrides: { background: {
2996
+ type: "solid",
2997
+ colorToken: "accent"
2998
+ } }
2844
2999
  }
2845
- ]
3000
+ }
2846
3001
  }
2847
3002
  });
2848
- }));
2849
- //#endregion
2850
- //#region ../theme-core/src/buttons/personalities/editorial-link.ts
2851
- var editorialLink;
2852
- var init_editorial_link = __esmMin((() => {
2853
- init_types$16();
2854
- editorialLink = defineButtonPersonality({
2855
- id: "editorial-link",
2856
- name: "Editorial Link",
2857
- description: "Link-style with a growing underline. Refined, typographic.",
3003
+ confidentChipRecipe = defineStaticButtonStyleRecipe({
3004
+ id: "confident-chip",
3005
+ accessibilityLabel: "Moderately rounded solid buttons with a crisp hover",
2858
3006
  tags: {
2859
- tone: "minimal",
3007
+ tone: "classic",
2860
3008
  energy: "calm",
2861
- motion: "subtle",
2862
- era: "editorial"
3009
+ motion: "standard",
3010
+ era: "modern"
2863
3011
  },
2864
- buttonSystem: {
3012
+ system: {
2865
3013
  global: {
2866
- cornerStyle: "square",
3014
+ cornerStyle: "rounded",
3015
+ shadow: "medium",
2867
3016
  textTransform: "none",
2868
- fontWeight: 500,
3017
+ fontWeight: 600,
2869
3018
  borderWidth: 1,
2870
3019
  hoverTransform: "none",
2871
3020
  hoverColor: "none"
2872
3021
  },
2873
- variants: [
2874
- {
2875
- id: "primary",
2876
- name: "Primary",
2877
- enabled: true,
2878
- priority: 1,
2879
- background: {
2880
- type: "surface",
2881
- role: "link"
2882
- },
2883
- borderRadius: "rounded-none",
2884
- sizes: {
2885
- sm: { padding: "0.25rem 0" },
2886
- md: { padding: "0.5rem 0" },
2887
- lg: { padding: "0.625rem 0" },
2888
- xl: { padding: "0.75rem 0" }
2889
- },
2890
- effects: { base: [{
2891
- effectId: "border-bottom-grow",
2892
- options: {
2893
- height: 2,
2894
- colorToken: "text",
2895
- origin: "left"
3022
+ roles: {
3023
+ primary: {
3024
+ kind: "complete",
3025
+ appearance: {
3026
+ background: {
3027
+ type: "solid",
3028
+ colorToken: "primary"
3029
+ },
3030
+ borderRadius: "rounded-md",
3031
+ shadow: {
3032
+ elevation: "medium",
3033
+ softness: "soft",
3034
+ position: "bottom"
3035
+ },
3036
+ effects: {
3037
+ hover: [{
3038
+ effectId: "darken-background",
3039
+ options: { amount: 100 }
3040
+ }],
3041
+ active: [{
3042
+ effectId: "scale-down",
3043
+ options: { scale: "0.97" }
3044
+ }]
2896
3045
  }
2897
- }] }
3046
+ }
2898
3047
  },
2899
- {
2900
- id: "secondary",
2901
- name: "Secondary",
2902
- enabled: true,
2903
- priority: 2,
2904
- background: {
2905
- type: "surface",
2906
- role: "link"
2907
- },
2908
- borderRadius: "rounded-none",
2909
- sizes: {
2910
- sm: { padding: "0.25rem 0" },
2911
- md: { padding: "0.5rem 0" },
2912
- lg: { padding: "0.625rem 0" },
2913
- xl: { padding: "0.75rem 0" }
2914
- },
2915
- effects: { base: [{
2916
- effectId: "border-bottom-grow",
2917
- options: {
2918
- height: 1,
2919
- colorToken: "mutedText",
2920
- origin: "left"
2921
- }
2922
- }] }
3048
+ secondary: {
3049
+ kind: "complete",
3050
+ appearance: {
3051
+ background: {
3052
+ type: "solid",
3053
+ colorToken: "surface"
3054
+ },
3055
+ borderRadius: "rounded-md",
3056
+ border: { widthClass: "border" },
3057
+ effects: { hover: [{
3058
+ effectId: "background-on-hover",
3059
+ options: { colorToken: "background" }
3060
+ }] }
3061
+ }
2923
3062
  },
2924
- {
2925
- id: "outline",
2926
- name: "Outline",
2927
- enabled: true,
2928
- priority: 3,
2929
- background: {
2930
- type: "surface",
2931
- role: "link"
2932
- },
2933
- borderRadius: "rounded-none",
2934
- sizes: {
2935
- sm: { padding: "0.25rem 0" },
2936
- md: { padding: "0.5rem 0" },
2937
- lg: { padding: "0.625rem 0" },
2938
- xl: { padding: "0.75rem 0" }
2939
- },
2940
- effects: { base: [{
2941
- effectId: "border-bottom-grow",
2942
- options: {
2943
- height: 1,
2944
- colorToken: "accent",
2945
- origin: "left"
2946
- }
2947
- }] }
3063
+ outline: {
3064
+ kind: "complete",
3065
+ appearance: {
3066
+ background: {
3067
+ type: "surface",
3068
+ role: "link"
3069
+ },
3070
+ borderRadius: "rounded-md",
3071
+ border: { widthClass: "border" },
3072
+ effects: { hover: [{
3073
+ effectId: "background-on-hover",
3074
+ options: { colorToken: "surface" }
3075
+ }] }
3076
+ }
2948
3077
  },
2949
- {
2950
- id: "ghost",
2951
- name: "Ghost",
2952
- enabled: true,
2953
- priority: 3,
2954
- background: {
2955
- type: "surface",
2956
- role: "link"
2957
- },
2958
- borderRadius: "rounded-none",
2959
- sizes: {
2960
- sm: { padding: "0.25rem 0" },
2961
- md: { padding: "0.5rem 0" },
2962
- lg: { padding: "0.625rem 0" },
2963
- xl: { padding: "0.75rem 0" }
3078
+ ghost: {
3079
+ kind: "complete",
3080
+ appearance: {
3081
+ background: {
3082
+ type: "surface",
3083
+ role: "link"
3084
+ },
3085
+ borderRadius: "rounded-md",
3086
+ effects: { hover: [{
3087
+ effectId: "background-on-hover",
3088
+ options: { colorToken: "surface" }
3089
+ }] }
2964
3090
  }
3091
+ },
3092
+ accent: {
3093
+ kind: "derive",
3094
+ from: "primary",
3095
+ overrides: { background: {
3096
+ type: "solid",
3097
+ colorToken: "accent"
3098
+ } }
2965
3099
  }
2966
- ]
3100
+ }
2967
3101
  }
2968
3102
  });
2969
- }));
2970
- //#endregion
2971
- //#region ../theme-core/src/buttons/personalities/flat-ink.ts
2972
- var flatInk;
2973
- var init_flat_ink = __esmMin((() => {
2974
- init_types$16();
2975
- flatInk = defineButtonPersonality({
2976
- id: "flat-ink",
2977
- name: "Flat Ink",
2978
- description: "Flat solid-ink primary, hairline ghost secondary, and a single amber accent climax — modest radius, no shadow.",
3103
+ editorialSizes = {
3104
+ sm: { padding: "0.25rem 0" },
3105
+ md: { padding: "0.5rem 0" },
3106
+ lg: { padding: "0.625rem 0" },
3107
+ xl: { padding: "0.75rem 0" }
3108
+ };
3109
+ editorialLinkRecipe = defineStaticButtonStyleRecipe({
3110
+ id: "editorial-link",
3111
+ accessibilityLabel: "Flat typographic buttons with an underline treatment",
2979
3112
  tags: {
2980
- tone: "classic",
3113
+ tone: "minimal",
2981
3114
  energy: "calm",
2982
3115
  motion: "subtle",
2983
3116
  era: "editorial"
2984
3117
  },
2985
- buttonSystem: {
3118
+ system: {
2986
3119
  global: {
2987
- cornerStyle: "rounded",
3120
+ cornerStyle: "square",
2988
3121
  textTransform: "none",
2989
- fontWeight: 600,
3122
+ fontWeight: 500,
2990
3123
  borderWidth: 1,
2991
- typography: "body",
2992
- letterSpacing: "tight",
2993
- paddingPreset: "default",
2994
- hoverTransform: "lift",
3124
+ hoverTransform: "none",
2995
3125
  hoverColor: "none"
2996
3126
  },
2997
- sizes: {
2998
- sm: {
2999
- padding: "0.625rem 1.125rem",
3000
- fontSize: "text-sm"
3127
+ roles: {
3128
+ primary: {
3129
+ kind: "complete",
3130
+ appearance: {
3131
+ background: {
3132
+ type: "surface",
3133
+ role: "link"
3134
+ },
3135
+ borderRadius: "rounded-none",
3136
+ sizes: editorialSizes,
3137
+ effects: { base: [{
3138
+ effectId: "border-bottom-grow",
3139
+ options: {
3140
+ height: 2,
3141
+ colorToken: "text",
3142
+ origin: "left"
3143
+ }
3144
+ }] }
3145
+ }
3001
3146
  },
3002
- md: { padding: "0.8125rem 1.375rem" },
3003
- lg: {
3004
- padding: "0.9375rem 1.625rem",
3005
- fontSize: "text-lg"
3147
+ secondary: {
3148
+ kind: "complete",
3149
+ appearance: {
3150
+ background: {
3151
+ type: "surface",
3152
+ role: "link"
3153
+ },
3154
+ borderRadius: "rounded-none",
3155
+ sizes: editorialSizes,
3156
+ effects: { base: [{
3157
+ effectId: "border-bottom-grow",
3158
+ options: {
3159
+ height: 1,
3160
+ colorToken: "mutedText",
3161
+ origin: "left"
3162
+ }
3163
+ }] }
3164
+ }
3006
3165
  },
3007
- xl: {
3008
- padding: "1.0625rem 2rem",
3009
- fontSize: "text-xl"
3010
- }
3011
- },
3012
- variants: [
3013
- {
3014
- id: "primary",
3015
- name: "Primary",
3016
- enabled: true,
3017
- priority: 1,
3018
- background: {
3019
- type: "solid",
3020
- colorToken: "primary"
3021
- },
3022
- borderRadius: "rounded-lg",
3023
- affordance: { iconId: "ArrowRight" },
3024
- effects: { hover: [{
3025
- effectId: "lift",
3026
- options: { translateY: "-2px" }
3027
- }, {
3028
- effectId: "background-on-hover",
3029
- options: { colorToken: "secondary" }
3030
- }] }
3166
+ outline: {
3167
+ kind: "complete",
3168
+ appearance: {
3169
+ background: {
3170
+ type: "surface",
3171
+ role: "link"
3172
+ },
3173
+ borderRadius: "rounded-none",
3174
+ sizes: editorialSizes,
3175
+ effects: { base: [{
3176
+ effectId: "border-bottom-grow",
3177
+ options: {
3178
+ height: 1,
3179
+ colorToken: "accent",
3180
+ origin: "left"
3181
+ }
3182
+ }] }
3183
+ }
3031
3184
  },
3032
- {
3033
- id: "secondary",
3034
- name: "Secondary",
3035
- enabled: true,
3036
- priority: 2,
3037
- background: {
3038
- type: "surface",
3039
- role: "link"
3040
- },
3041
- borderRadius: "rounded-lg",
3042
- border: { widthClass: "border" },
3043
- effects: { hover: [{
3044
- effectId: "lift",
3045
- options: { translateY: "-2px" }
3046
- }, {
3047
- effectId: "background-on-hover",
3048
- options: { colorToken: "surfaceAlt" }
3049
- }] }
3185
+ ghost: {
3186
+ kind: "complete",
3187
+ appearance: {
3188
+ background: {
3189
+ type: "surface",
3190
+ role: "link"
3191
+ },
3192
+ borderRadius: "rounded-none",
3193
+ sizes: editorialSizes
3194
+ }
3050
3195
  },
3051
- {
3052
- id: "accent",
3053
- name: "Accent",
3054
- enabled: true,
3055
- priority: 3,
3056
- background: {
3057
- type: "solid",
3058
- colorToken: "accent"
3059
- },
3060
- borderRadius: "rounded-lg",
3061
- affordance: { iconId: "ArrowRight" },
3062
- effects: { hover: [{
3063
- effectId: "lift",
3064
- options: { translateY: "-2px" }
3065
- }] }
3196
+ accent: {
3197
+ kind: "derive",
3198
+ from: "primary",
3199
+ overrides: { effects: { base: [{
3200
+ effectId: "border-bottom-grow",
3201
+ options: {
3202
+ height: 2,
3203
+ colorToken: "accent",
3204
+ origin: "left"
3205
+ }
3206
+ }] } }
3066
3207
  }
3067
- ]
3208
+ }
3068
3209
  }
3069
3210
  });
3070
- }));
3071
- //#endregion
3072
- //#region ../theme-core/src/buttons/personalities/ink-stamp.ts
3073
- var inkStamp;
3074
- var init_ink_stamp = __esmMin((() => {
3075
- init_types$16();
3076
- inkStamp = defineButtonPersonality({
3077
- id: "ink-stamp",
3078
- name: "Ink Stamp",
3079
- description: "Hand-stamped block-print buttons with a slight lift on hover.",
3211
+ pebbleRecipe = defineStaticButtonStyleRecipe({
3212
+ id: "pebble",
3213
+ accessibilityLabel: "Generously padded pill buttons",
3080
3214
  tags: {
3081
- tone: "bold",
3082
- energy: "vibrant",
3215
+ tone: "classic",
3216
+ energy: "calm",
3083
3217
  motion: "standard",
3084
3218
  era: "organic"
3085
3219
  },
3086
- buttonSystem: {
3220
+ system: {
3087
3221
  global: {
3088
- cornerStyle: "rounded",
3089
- textTransform: "uppercase",
3090
- fontWeight: 600,
3091
- borderWidth: 1,
3222
+ cornerStyle: "pill",
3223
+ textTransform: "none",
3224
+ fontWeight: 500,
3225
+ borderWidth: 2,
3092
3226
  hoverTransform: "none",
3093
- hoverColor: "none",
3094
- letterSpacing: "loose"
3227
+ hoverColor: "none"
3095
3228
  },
3096
3229
  sizes: {
3097
3230
  sm: {
3098
- padding: "0.5rem 1.25rem",
3099
- fontSize: "text-xs"
3100
- },
3101
- md: {
3102
- padding: "0.75rem 1.75rem",
3231
+ padding: "0.625rem 1.75rem",
3103
3232
  fontSize: "text-sm"
3104
3233
  },
3234
+ md: { padding: "0.875rem 2.25rem" },
3105
3235
  lg: {
3106
- padding: "0.875rem 2.25rem",
3107
- fontSize: "text-base"
3108
- },
3109
- xl: {
3110
3236
  padding: "1.125rem 2.75rem",
3111
3237
  fontSize: "text-lg"
3238
+ },
3239
+ xl: {
3240
+ padding: "1.5rem 3.5rem",
3241
+ fontSize: "text-xl"
3112
3242
  }
3113
3243
  },
3114
- variants: [
3115
- {
3116
- id: "primary",
3117
- name: "Primary",
3118
- enabled: true,
3119
- priority: 1,
3120
- background: {
3121
- type: "solid",
3122
- colorToken: "primary"
3123
- },
3124
- borderRadius: "rounded-md",
3125
- effects: {
3126
- hover: [{
3127
- effectId: "drop-shadow",
3128
- options: { intensity: "medium" }
3129
- }, {
3130
- effectId: "scale-up",
3131
- options: { scale: "1.02" }
3132
- }],
3133
- active: [{
3134
- effectId: "scale-down",
3135
- options: { scale: "0.98" }
3136
- }]
3244
+ roles: {
3245
+ primary: {
3246
+ kind: "complete",
3247
+ appearance: {
3248
+ background: {
3249
+ type: "solid",
3250
+ colorToken: "primary"
3251
+ },
3252
+ borderRadius: "rounded-full",
3253
+ effects: { hover: [{
3254
+ effectId: "darken-background",
3255
+ options: { amount: 100 }
3256
+ }] }
3137
3257
  }
3138
3258
  },
3139
- {
3140
- id: "secondary",
3141
- name: "Secondary",
3142
- enabled: true,
3143
- priority: 2,
3144
- background: {
3145
- type: "surface",
3146
- role: "link"
3147
- },
3148
- borderRadius: "rounded-md",
3149
- border: { widthClass: "border-2" },
3150
- effects: { hover: [{
3151
- effectId: "background-on-hover",
3152
- options: { colorToken: "surface" }
3153
- }] }
3154
- },
3155
- {
3156
- id: "outline",
3157
- name: "Outline",
3158
- enabled: true,
3159
- priority: 3,
3160
- background: {
3161
- type: "surface",
3162
- role: "link"
3163
- },
3164
- borderRadius: "rounded-md",
3165
- border: { widthClass: "border-2" },
3166
- effects: { hover: [{
3167
- effectId: "background-on-hover",
3168
- options: { colorToken: "surface" }
3169
- }] }
3170
- },
3171
- {
3172
- id: "ghost",
3173
- name: "Ghost",
3174
- enabled: true,
3175
- priority: 3,
3176
- background: {
3177
- type: "surface",
3178
- role: "link"
3179
- },
3180
- borderRadius: "rounded-none",
3181
- sizes: {
3182
- sm: {
3183
- padding: "0.375rem 0",
3184
- fontSize: "text-xs"
3259
+ secondary: {
3260
+ kind: "complete",
3261
+ appearance: {
3262
+ background: {
3263
+ type: "surface",
3264
+ role: "link"
3185
3265
  },
3186
- md: {
3187
- padding: "0.5rem 0",
3188
- fontSize: "text-sm"
3266
+ borderRadius: "rounded-full",
3267
+ border: { widthClass: "border-2" },
3268
+ effects: { hover: [{
3269
+ effectId: "background-on-hover",
3270
+ options: { colorToken: "accent" }
3271
+ }] }
3272
+ }
3273
+ },
3274
+ outline: {
3275
+ kind: "complete",
3276
+ appearance: {
3277
+ background: {
3278
+ type: "surface",
3279
+ role: "link"
3189
3280
  },
3190
- lg: {
3191
- padding: "0.625rem 0",
3192
- fontSize: "text-base"
3281
+ borderRadius: "rounded-full",
3282
+ border: { widthClass: "border" },
3283
+ effects: { hover: [{
3284
+ effectId: "background-on-hover",
3285
+ options: { colorToken: "surface" }
3286
+ }] }
3287
+ }
3288
+ },
3289
+ ghost: {
3290
+ kind: "complete",
3291
+ appearance: {
3292
+ background: {
3293
+ type: "surface",
3294
+ role: "link"
3193
3295
  },
3194
- xl: {
3195
- padding: "0.75rem 0",
3196
- fontSize: "text-lg"
3197
- }
3198
- },
3199
- effects: { base: [{
3200
- effectId: "border-bottom-grow",
3201
- options: {
3202
- height: 1,
3203
- colorToken: "accent",
3204
- origin: "left"
3296
+ borderRadius: "rounded-full",
3297
+ sizes: {
3298
+ sm: {
3299
+ padding: "0.375rem 0.875rem",
3300
+ fontSize: "text-sm"
3301
+ },
3302
+ md: { padding: "0.5rem 1rem" },
3303
+ lg: {
3304
+ padding: "0.625rem 1.25rem",
3305
+ fontSize: "text-lg"
3306
+ },
3307
+ xl: {
3308
+ padding: "0.75rem 1.5rem",
3309
+ fontSize: "text-xl"
3310
+ }
3205
3311
  }
3206
- }] }
3312
+ }
3313
+ },
3314
+ accent: {
3315
+ kind: "derive",
3316
+ from: "primary",
3317
+ overrides: { background: {
3318
+ type: "solid",
3319
+ colorToken: "accent"
3320
+ } }
3207
3321
  }
3208
- ]
3322
+ }
3209
3323
  }
3210
3324
  });
3211
- }));
3212
- //#endregion
3213
- //#region ../theme-core/src/buttons/personalities/joy-stamp.ts
3214
- var joyStamp;
3215
- var init_joy_stamp = __esmMin((() => {
3216
- init_types$16();
3217
- joyStamp = defineButtonPersonality({
3218
- id: "joy-stamp",
3219
- name: "Joy Stamp",
3220
- description: "Pill buttons with a hard, brand-coloured offset shadow that presses in on hover.",
3325
+ brushedWashRecipe = defineStaticButtonStyleRecipe({
3326
+ id: "brushed-wash",
3327
+ accessibilityLabel: "Generously padded gradient buttons with soft shadows",
3221
3328
  tags: {
3222
- tone: "bold",
3329
+ tone: "classic",
3223
3330
  energy: "vibrant",
3224
- motion: "expressive",
3331
+ motion: "standard",
3225
3332
  era: "organic"
3226
3333
  },
3227
- buttonSystem: {
3334
+ system: {
3228
3335
  global: {
3229
- cornerStyle: "pill",
3230
- shadow: "high",
3336
+ cornerStyle: "rounded",
3337
+ shadow: "low",
3231
3338
  textTransform: "none",
3232
- typography: "heading",
3233
- fontWeight: 700,
3234
- fontSize: "text-lg",
3235
- borderWidth: 2,
3339
+ fontWeight: 500,
3340
+ borderWidth: 1,
3236
3341
  hoverTransform: "none",
3237
3342
  hoverColor: "none"
3238
3343
  },
3239
3344
  sizes: {
3240
3345
  sm: {
3241
- padding: "0.625rem 1.25rem",
3242
- fontSize: "text-base"
3243
- },
3244
- md: {
3245
- padding: "0.875rem 1.75rem",
3246
- fontSize: "text-lg"
3346
+ padding: "0.75rem 2rem",
3347
+ fontSize: "text-sm"
3247
3348
  },
3349
+ md: { padding: "1rem 2.5rem" },
3248
3350
  lg: {
3249
- padding: "1.125rem 2.25rem",
3250
- fontSize: "text-xl"
3351
+ padding: "1.25rem 3rem",
3352
+ fontSize: "text-lg"
3251
3353
  },
3252
3354
  xl: {
3253
- padding: "1.25rem 2.75rem",
3254
- fontSize: "text-2xl"
3355
+ padding: "1.625rem 3.75rem",
3356
+ fontSize: "text-xl"
3255
3357
  }
3256
3358
  },
3257
- variants: [{
3258
- id: "primary",
3259
- name: "Primary",
3260
- enabled: true,
3261
- priority: 1,
3262
- background: {
3263
- type: "solid",
3264
- colorToken: "primary"
3359
+ roles: {
3360
+ primary: {
3361
+ kind: "complete",
3362
+ appearance: {
3363
+ background: {
3364
+ type: "gradient",
3365
+ stops: ["primary", "accent"],
3366
+ direction: "to-r",
3367
+ foregroundToken: "primaryForeground"
3368
+ },
3369
+ borderRadius: "rounded-lg",
3370
+ shadow: {
3371
+ elevation: "low",
3372
+ softness: "soft",
3373
+ position: "bottom"
3374
+ }
3375
+ }
3265
3376
  },
3266
- borderRadius: "rounded-full",
3267
- shadow: {
3268
- elevation: "high",
3269
- softness: "hard",
3270
- position: "bottom-right",
3271
- colorToken: "text"
3377
+ secondary: {
3378
+ kind: "complete",
3379
+ appearance: {
3380
+ background: {
3381
+ type: "gradient",
3382
+ stops: ["secondary", "accent"],
3383
+ direction: "to-br",
3384
+ foregroundToken: "primaryForeground"
3385
+ },
3386
+ borderRadius: "rounded-lg",
3387
+ shadow: {
3388
+ elevation: "low",
3389
+ softness: "soft",
3390
+ position: "bottom"
3391
+ }
3392
+ }
3272
3393
  },
3273
- effects: { hover: [{ effectId: "press-down" }] }
3274
- }, {
3275
- id: "secondary",
3276
- name: "Secondary",
3277
- enabled: true,
3278
- priority: 2,
3279
- background: {
3280
- type: "surface",
3281
- role: "link"
3394
+ outline: {
3395
+ kind: "complete",
3396
+ appearance: {
3397
+ background: {
3398
+ type: "surface",
3399
+ role: "link"
3400
+ },
3401
+ borderRadius: "rounded-lg",
3402
+ border: { widthClass: "border" },
3403
+ effects: { hover: [{
3404
+ effectId: "background-on-hover",
3405
+ options: { colorToken: "surface" }
3406
+ }] }
3407
+ }
3282
3408
  },
3283
- borderRadius: "rounded-full",
3284
- border: { widthClass: "border-2" },
3285
- shadow: {
3286
- elevation: "high",
3287
- softness: "hard",
3288
- position: "bottom-right",
3289
- colorToken: "secondary"
3409
+ ghost: {
3410
+ kind: "complete",
3411
+ appearance: {
3412
+ background: {
3413
+ type: "surface",
3414
+ role: "link"
3415
+ },
3416
+ borderRadius: "rounded-lg",
3417
+ effects: { hover: [{
3418
+ effectId: "background-on-hover",
3419
+ options: { colorToken: "surface" }
3420
+ }] }
3421
+ }
3290
3422
  },
3291
- effects: { hover: [{ effectId: "press-down" }] }
3292
- }]
3423
+ accent: {
3424
+ kind: "derive",
3425
+ from: "primary",
3426
+ overrides: { background: {
3427
+ type: "solid",
3428
+ colorToken: "accent"
3429
+ } }
3430
+ }
3431
+ }
3293
3432
  }
3294
3433
  });
3295
- }));
3296
- //#endregion
3297
- //#region ../theme-core/src/buttons/personalities/ornate-ritual.ts
3298
- var ornateRitual;
3299
- var init_ornate_ritual = __esmMin((() => {
3300
- init_types$16();
3301
- ornateRitual = defineButtonPersonality({
3302
- id: "ornate-ritual",
3303
- name: "Ornate Ritual",
3304
- description: "Ceremonial framed buttons with jewel-toned fills and quiet color-change hover states.",
3434
+ inkStampRecipe = defineStaticButtonStyleRecipe({
3435
+ id: "ink-stamp",
3436
+ accessibilityLabel: "Uppercase block-print buttons with a playful hover",
3305
3437
  tags: {
3306
- tone: "classic",
3438
+ tone: "bold",
3307
3439
  energy: "vibrant",
3308
- motion: "subtle",
3440
+ motion: "standard",
3309
3441
  era: "organic"
3310
3442
  },
3311
- buttonSystem: {
3443
+ system: {
3312
3444
  global: {
3313
3445
  cornerStyle: "rounded",
3314
3446
  textTransform: "uppercase",
@@ -3320,357 +3452,256 @@ var init_ornate_ritual = __esmMin((() => {
3320
3452
  },
3321
3453
  sizes: {
3322
3454
  sm: {
3323
- padding: "0.5625rem 1.25rem",
3455
+ padding: "0.5rem 1.25rem",
3324
3456
  fontSize: "text-xs"
3325
3457
  },
3326
3458
  md: {
3327
3459
  padding: "0.75rem 1.75rem",
3328
- fontSize: "text-xs"
3460
+ fontSize: "text-sm"
3329
3461
  },
3330
3462
  lg: {
3331
3463
  padding: "0.875rem 2.25rem",
3332
- fontSize: "text-sm"
3333
- },
3334
- xl: {
3335
- padding: "1rem 2.75rem",
3336
3464
  fontSize: "text-base"
3337
- }
3338
- },
3339
- variants: [
3340
- {
3341
- id: "primary",
3342
- name: "Primary",
3343
- enabled: true,
3344
- priority: 1,
3345
- background: {
3346
- type: "solid",
3347
- colorToken: "primary"
3348
- },
3349
- borderRadius: "rounded-md",
3350
- border: { widthClass: "border" },
3351
- effects: {
3352
- hover: [{
3353
- effectId: "background-on-hover",
3354
- options: { colorToken: "primary-100" }
3355
- }],
3356
- active: [{
3357
- effectId: "scale-down",
3358
- options: { scale: "0.98" }
3359
- }]
3360
- }
3361
- },
3362
- {
3363
- id: "secondary",
3364
- name: "Secondary",
3365
- enabled: true,
3366
- priority: 2,
3367
- background: {
3368
- type: "solid",
3369
- colorToken: "secondary"
3370
- },
3371
- borderRadius: "rounded-md",
3372
- border: { widthClass: "border" },
3373
- effects: { hover: [{
3374
- effectId: "background-on-hover",
3375
- options: { colorToken: "surface" }
3376
- }] }
3377
3465
  },
3378
- {
3379
- id: "outline",
3380
- name: "Outline",
3381
- enabled: true,
3382
- priority: 3,
3383
- background: {
3384
- type: "surface",
3385
- role: "link"
3386
- },
3387
- borderRadius: "rounded-md",
3388
- border: { widthClass: "border" },
3389
- effects: { hover: [{
3390
- effectId: "background-on-hover",
3391
- options: { colorToken: "muted" }
3392
- }] }
3393
- },
3394
- {
3395
- id: "ghost",
3396
- name: "Ghost",
3397
- enabled: true,
3398
- priority: 3,
3399
- background: {
3400
- type: "surface",
3401
- role: "link"
3402
- },
3403
- borderRadius: "rounded-none",
3404
- sizes: {
3405
- sm: {
3406
- padding: "0.375rem 0",
3407
- fontSize: "text-xs"
3408
- },
3409
- md: {
3410
- padding: "0.5rem 0",
3411
- fontSize: "text-sm"
3412
- },
3413
- lg: {
3414
- padding: "0.625rem 0",
3415
- fontSize: "text-base"
3416
- },
3417
- xl: {
3418
- padding: "0.75rem 0",
3419
- fontSize: "text-lg"
3420
- }
3421
- },
3422
- effects: { base: [{
3423
- effectId: "border-bottom-grow",
3424
- options: {
3425
- height: 1,
3426
- colorToken: "accent",
3427
- origin: "left"
3428
- }
3429
- }] }
3430
- }
3431
- ]
3432
- }
3433
- });
3434
- }));
3435
- //#endregion
3436
- //#region ../theme-core/src/buttons/personalities/pebble.ts
3437
- var pebble;
3438
- var init_pebble = __esmMin((() => {
3439
- init_types$16();
3440
- pebble = defineButtonPersonality({
3441
- id: "pebble",
3442
- name: "Pebble",
3443
- description: "Generous pill buttons with a quiet colour-softening hover.",
3444
- tags: {
3445
- tone: "classic",
3446
- energy: "calm",
3447
- motion: "standard",
3448
- era: "organic"
3449
- },
3450
- buttonSystem: {
3451
- global: {
3452
- cornerStyle: "pill",
3453
- textTransform: "none",
3454
- fontWeight: 500,
3455
- borderWidth: 2,
3456
- hoverTransform: "none",
3457
- hoverColor: "none"
3458
- },
3459
- sizes: {
3460
- sm: {
3461
- padding: "0.625rem 1.75rem",
3462
- fontSize: "text-sm"
3463
- },
3464
- md: { padding: "0.875rem 2.25rem" },
3465
- lg: {
3466
+ xl: {
3466
3467
  padding: "1.125rem 2.75rem",
3467
3468
  fontSize: "text-lg"
3468
- },
3469
- xl: {
3470
- padding: "1.5rem 3.5rem",
3471
- fontSize: "text-xl"
3472
3469
  }
3473
3470
  },
3474
- variants: [
3475
- {
3476
- id: "primary",
3477
- name: "Primary",
3478
- enabled: true,
3479
- priority: 1,
3480
- background: {
3481
- type: "solid",
3482
- colorToken: "primary"
3483
- },
3484
- borderRadius: "rounded-full",
3485
- effects: { hover: [{
3486
- effectId: "darken-background",
3487
- options: { amount: 100 }
3488
- }] }
3471
+ roles: {
3472
+ primary: {
3473
+ kind: "complete",
3474
+ appearance: {
3475
+ background: {
3476
+ type: "solid",
3477
+ colorToken: "primary"
3478
+ },
3479
+ borderRadius: "rounded-md",
3480
+ effects: {
3481
+ hover: [{
3482
+ effectId: "drop-shadow",
3483
+ options: { intensity: "medium" }
3484
+ }, {
3485
+ effectId: "scale-up",
3486
+ options: { scale: "1.02" }
3487
+ }],
3488
+ active: [{
3489
+ effectId: "scale-down",
3490
+ options: { scale: "0.98" }
3491
+ }]
3492
+ }
3493
+ }
3489
3494
  },
3490
- {
3491
- id: "secondary",
3492
- name: "Secondary",
3493
- enabled: true,
3494
- priority: 2,
3495
- background: {
3496
- type: "surface",
3497
- role: "link"
3498
- },
3499
- borderRadius: "rounded-full",
3500
- border: { widthClass: "border-2" },
3501
- effects: { hover: [{
3502
- effectId: "background-on-hover",
3503
- options: { colorToken: "accent" }
3504
- }] }
3495
+ secondary: {
3496
+ kind: "complete",
3497
+ appearance: {
3498
+ background: {
3499
+ type: "surface",
3500
+ role: "link"
3501
+ },
3502
+ borderRadius: "rounded-md",
3503
+ border: { widthClass: "border-2" },
3504
+ effects: { hover: [{
3505
+ effectId: "background-on-hover",
3506
+ options: { colorToken: "surface" }
3507
+ }] }
3508
+ }
3505
3509
  },
3506
- {
3507
- id: "outline",
3508
- name: "Outline",
3509
- enabled: true,
3510
- priority: 3,
3511
- background: {
3512
- type: "surface",
3513
- role: "link"
3514
- },
3515
- borderRadius: "rounded-full",
3516
- border: { widthClass: "border" },
3517
- effects: { hover: [{
3518
- effectId: "background-on-hover",
3519
- options: { colorToken: "surface" }
3520
- }] }
3510
+ outline: {
3511
+ kind: "complete",
3512
+ appearance: {
3513
+ background: {
3514
+ type: "surface",
3515
+ role: "link"
3516
+ },
3517
+ borderRadius: "rounded-md",
3518
+ border: { widthClass: "border-2" },
3519
+ effects: { hover: [{
3520
+ effectId: "background-on-hover",
3521
+ options: { colorToken: "surface" }
3522
+ }] }
3523
+ }
3521
3524
  },
3522
- {
3523
- id: "ghost",
3524
- name: "Ghost",
3525
- enabled: true,
3526
- priority: 3,
3527
- background: {
3528
- type: "surface",
3529
- role: "link"
3530
- },
3531
- borderRadius: "rounded-full",
3532
- sizes: {
3533
- sm: {
3534
- padding: "0.375rem 0.875rem",
3535
- fontSize: "text-sm"
3525
+ ghost: {
3526
+ kind: "complete",
3527
+ appearance: {
3528
+ background: {
3529
+ type: "surface",
3530
+ role: "link"
3536
3531
  },
3537
- md: { padding: "0.5rem 1rem" },
3538
- lg: {
3539
- padding: "0.625rem 1.25rem",
3540
- fontSize: "text-lg"
3532
+ borderRadius: "rounded-none",
3533
+ sizes: {
3534
+ sm: {
3535
+ padding: "0.375rem 0",
3536
+ fontSize: "text-xs"
3537
+ },
3538
+ md: {
3539
+ padding: "0.5rem 0",
3540
+ fontSize: "text-sm"
3541
+ },
3542
+ lg: {
3543
+ padding: "0.625rem 0",
3544
+ fontSize: "text-base"
3545
+ },
3546
+ xl: {
3547
+ padding: "0.75rem 0",
3548
+ fontSize: "text-lg"
3549
+ }
3541
3550
  },
3542
- xl: {
3543
- padding: "0.75rem 1.5rem",
3544
- fontSize: "text-xl"
3545
- }
3551
+ effects: { base: [{
3552
+ effectId: "border-bottom-grow",
3553
+ options: {
3554
+ height: 1,
3555
+ colorToken: "accent",
3556
+ origin: "left"
3557
+ }
3558
+ }] }
3546
3559
  }
3560
+ },
3561
+ accent: {
3562
+ kind: "derive",
3563
+ from: "primary",
3564
+ overrides: { background: {
3565
+ type: "solid",
3566
+ colorToken: "accent"
3567
+ } }
3547
3568
  }
3548
- ]
3569
+ }
3549
3570
  }
3550
3571
  });
3551
- }));
3552
- //#endregion
3553
- //#region ../theme-core/src/buttons/personalities/quiet-arrow.ts
3554
- var quietArrow;
3555
- var init_quiet_arrow = __esmMin((() => {
3556
- init_types$16();
3557
- quietArrow = defineButtonPersonality({
3558
- id: "quiet-arrow",
3559
- name: "Quiet Arrow",
3560
- description: "Wide, flat arrow buttons with a solid primary and a primary-colour outlined secondary.",
3572
+ flatInkRecipe = defineStaticButtonStyleRecipe({
3573
+ id: "flat-ink",
3574
+ accessibilityLabel: "Flat rounded buttons with arrow affordances",
3561
3575
  tags: {
3562
3576
  tone: "classic",
3563
3577
  energy: "calm",
3564
3578
  motion: "subtle",
3565
3579
  era: "editorial"
3566
3580
  },
3567
- buttonSystem: {
3581
+ system: {
3568
3582
  global: {
3569
3583
  cornerStyle: "rounded",
3570
- textTransform: "uppercase",
3571
- fontWeight: 500,
3584
+ textTransform: "none",
3585
+ fontWeight: 600,
3572
3586
  borderWidth: 1,
3573
3587
  typography: "body",
3574
- fontSize: "text-sm",
3575
- letterSpacing: "loose",
3576
- hoverTransform: "none",
3588
+ letterSpacing: "tight",
3589
+ paddingPreset: "default",
3590
+ hoverTransform: "lift",
3577
3591
  hoverColor: "none"
3578
3592
  },
3579
3593
  sizes: {
3580
3594
  sm: {
3581
- padding: "0.625rem 1.25rem",
3582
- fontSize: "text-xs"
3583
- },
3584
- md: {
3585
- padding: "0.8125rem 1.75rem",
3595
+ padding: "0.625rem 1.125rem",
3586
3596
  fontSize: "text-sm"
3587
3597
  },
3598
+ md: { padding: "0.8125rem 1.375rem" },
3588
3599
  lg: {
3589
- padding: "0.9375rem 2.125rem",
3590
- fontSize: "text-sm"
3600
+ padding: "0.9375rem 1.625rem",
3601
+ fontSize: "text-lg"
3591
3602
  },
3592
3603
  xl: {
3593
- padding: "1.0625rem 2.5rem",
3594
- fontSize: "text-base"
3604
+ padding: "1.0625rem 2rem",
3605
+ fontSize: "text-xl"
3595
3606
  }
3596
3607
  },
3597
- variants: [
3598
- {
3599
- id: "primary",
3600
- name: "Primary",
3601
- enabled: true,
3602
- priority: 1,
3603
- background: {
3604
- type: "solid",
3605
- colorToken: "primary"
3606
- },
3607
- borderRadius: "rounded-xl",
3608
- affordance: { iconId: "ArrowRight" },
3609
- effects: { hover: [{
3610
- effectId: "darken-background",
3611
- options: { amount: 100 }
3612
- }] }
3608
+ roles: {
3609
+ primary: {
3610
+ kind: "complete",
3611
+ appearance: {
3612
+ background: {
3613
+ type: "solid",
3614
+ colorToken: "primary"
3615
+ },
3616
+ borderRadius: "rounded-lg",
3617
+ affordance: { iconId: "ArrowRight" },
3618
+ effects: { hover: [{
3619
+ effectId: "lift",
3620
+ options: { translateY: "-2px" }
3621
+ }, {
3622
+ effectId: "background-on-hover",
3623
+ options: { colorToken: "secondary" }
3624
+ }] }
3625
+ }
3613
3626
  },
3614
- {
3615
- id: "secondary",
3616
- name: "Secondary",
3617
- enabled: true,
3618
- priority: 2,
3619
- background: {
3620
- type: "surface",
3621
- role: "link"
3622
- },
3623
- borderRadius: "rounded-xl",
3624
- border: { widthClass: "border" },
3625
- affordance: { iconId: "ArrowRight" },
3626
- effects: { hover: [{
3627
- effectId: "background-on-hover",
3628
- options: { colorToken: "surfaceAlt" }
3629
- }] }
3627
+ secondary: {
3628
+ kind: "complete",
3629
+ appearance: {
3630
+ background: {
3631
+ type: "surface",
3632
+ role: "link"
3633
+ },
3634
+ borderRadius: "rounded-lg",
3635
+ border: { widthClass: "border" },
3636
+ effects: { hover: [{
3637
+ effectId: "lift",
3638
+ options: { translateY: "-2px" }
3639
+ }, {
3640
+ effectId: "background-on-hover",
3641
+ options: { colorToken: "surfaceAlt" }
3642
+ }] }
3643
+ }
3630
3644
  },
3631
- {
3632
- id: "outline",
3633
- name: "Outline",
3634
- enabled: true,
3635
- priority: 3,
3636
- background: {
3637
- type: "surface",
3638
- role: "link"
3639
- },
3640
- borderRadius: "rounded-xl",
3641
- border: { widthClass: "border" }
3645
+ outline: {
3646
+ kind: "complete",
3647
+ appearance: {
3648
+ background: {
3649
+ type: "surface",
3650
+ role: "link"
3651
+ },
3652
+ borderRadius: "rounded-lg",
3653
+ border: { widthClass: "border" },
3654
+ effects: { hover: [{
3655
+ effectId: "lift",
3656
+ options: { translateY: "-2px" }
3657
+ }, {
3658
+ effectId: "background-on-hover",
3659
+ options: { colorToken: "surfaceAlt" }
3660
+ }] }
3661
+ }
3642
3662
  },
3643
- {
3644
- id: "ghost",
3645
- name: "Ghost",
3646
- enabled: true,
3647
- priority: 3,
3648
- background: {
3649
- type: "surface",
3650
- role: "link"
3651
- },
3652
- borderRadius: "rounded-xl"
3663
+ ghost: {
3664
+ kind: "complete",
3665
+ appearance: {
3666
+ background: {
3667
+ type: "surface",
3668
+ role: "link"
3669
+ },
3670
+ borderRadius: "rounded-lg",
3671
+ effects: { hover: [{
3672
+ effectId: "lift",
3673
+ options: { translateY: "-2px" }
3674
+ }] }
3675
+ }
3676
+ },
3677
+ accent: {
3678
+ kind: "complete",
3679
+ appearance: {
3680
+ background: {
3681
+ type: "solid",
3682
+ colorToken: "accent"
3683
+ },
3684
+ borderRadius: "rounded-lg",
3685
+ affordance: { iconId: "ArrowRight" },
3686
+ effects: { hover: [{
3687
+ effectId: "lift",
3688
+ options: { translateY: "-2px" }
3689
+ }] }
3690
+ }
3653
3691
  }
3654
- ]
3692
+ }
3655
3693
  }
3656
3694
  });
3657
- }));
3658
- //#endregion
3659
- //#region ../theme-core/src/buttons/personalities/showtime-pill.ts
3660
- var showtimePill;
3661
- var init_showtime_pill = __esmMin((() => {
3662
- init_types$16();
3663
- showtimePill = defineButtonPersonality({
3695
+ showtimePillRecipe = defineStaticButtonStyleRecipe({
3664
3696
  id: "showtime-pill",
3665
- name: "Showtime Pill",
3666
- description: "Bold pill buttons with uppercase labels, generous padding, and a playful pop.",
3697
+ accessibilityLabel: "Bold uppercase pill buttons with playful movement",
3667
3698
  tags: {
3668
3699
  tone: "bold",
3669
3700
  energy: "vibrant",
3670
3701
  motion: "expressive",
3671
3702
  era: "modern"
3672
3703
  },
3673
- buttonSystem: {
3704
+ system: {
3674
3705
  global: {
3675
3706
  cornerStyle: "pill",
3676
3707
  shadow: "low",
@@ -3701,300 +3732,399 @@ var init_showtime_pill = __esmMin((() => {
3701
3732
  fontSize: "1.125rem"
3702
3733
  }
3703
3734
  },
3704
- variants: [
3705
- {
3706
- id: "primary",
3707
- name: "Primary",
3708
- enabled: true,
3709
- priority: 1,
3710
- background: {
3711
- type: "solid",
3712
- colorToken: "primary"
3713
- },
3714
- borderRadius: "rounded-full",
3715
- effects: { hover: [{ effectId: "pop" }] }
3716
- },
3717
- {
3718
- id: "secondary",
3719
- name: "Secondary",
3720
- enabled: true,
3721
- priority: 2,
3722
- background: {
3723
- type: "surface",
3724
- role: "link"
3725
- },
3726
- borderRadius: "rounded-full",
3727
- border: { widthClass: "border-2" },
3728
- effects: { hover: [{ effectId: "pop" }] }
3735
+ roles: {
3736
+ primary: {
3737
+ kind: "complete",
3738
+ appearance: {
3739
+ background: {
3740
+ type: "solid",
3741
+ colorToken: "primary"
3742
+ },
3743
+ borderRadius: "rounded-full",
3744
+ effects: { hover: [{ effectId: "pop" }] }
3745
+ }
3729
3746
  },
3730
- {
3731
- id: "hero",
3732
- name: "Hero",
3733
- enabled: true,
3734
- priority: 1,
3735
- background: {
3736
- type: "solid",
3737
- colorToken: "secondary"
3738
- },
3739
- borderRadius: "rounded-full",
3740
- effects: { hover: [{ effectId: "pop" }] }
3747
+ secondary: {
3748
+ kind: "complete",
3749
+ appearance: {
3750
+ background: {
3751
+ type: "surface",
3752
+ role: "link"
3753
+ },
3754
+ borderRadius: "rounded-full",
3755
+ border: { widthClass: "border-2" },
3756
+ effects: { hover: [{ effectId: "pop" }] }
3757
+ }
3741
3758
  },
3742
- {
3743
- id: "header",
3744
- name: "Header",
3745
- enabled: true,
3746
- priority: 2,
3747
- background: {
3748
- type: "solid",
3749
- colorToken: "background"
3750
- },
3751
- borderRadius: "rounded-full",
3752
- border: { widthClass: "border-2" },
3753
- effects: { hover: [{
3754
- effectId: "background-on-hover",
3755
- options: { colorToken: "surface" }
3756
- }] }
3759
+ outline: {
3760
+ kind: "complete",
3761
+ appearance: {
3762
+ background: {
3763
+ type: "surface",
3764
+ role: "link"
3765
+ },
3766
+ borderRadius: "rounded-full",
3767
+ border: { widthClass: "border-2" },
3768
+ effects: { hover: [{
3769
+ effectId: "background-on-hover",
3770
+ options: { colorToken: "background" }
3771
+ }] }
3772
+ }
3757
3773
  },
3758
- {
3759
- id: "outline",
3760
- name: "Outline",
3761
- enabled: true,
3762
- priority: 3,
3763
- background: {
3764
- type: "surface",
3765
- role: "link"
3766
- },
3767
- borderRadius: "rounded-full",
3768
- border: { widthClass: "border-2" },
3769
- effects: { hover: [{
3770
- effectId: "background-on-hover",
3771
- options: { colorToken: "background" }
3772
- }] }
3774
+ ghost: {
3775
+ kind: "complete",
3776
+ appearance: {
3777
+ background: {
3778
+ type: "surface",
3779
+ role: "link"
3780
+ },
3781
+ borderRadius: "rounded-full",
3782
+ effects: { hover: [{
3783
+ effectId: "background-on-hover",
3784
+ options: { colorToken: "surface" }
3785
+ }] }
3786
+ }
3773
3787
  },
3774
- {
3775
- id: "ghost",
3776
- name: "Ghost",
3777
- enabled: true,
3778
- priority: 3,
3779
- background: {
3780
- type: "surface",
3781
- role: "link"
3782
- },
3783
- borderRadius: "rounded-full",
3784
- effects: { hover: [{
3785
- effectId: "background-on-hover",
3786
- options: { colorToken: "surface" }
3787
- }] }
3788
+ accent: {
3789
+ kind: "complete",
3790
+ appearance: {
3791
+ background: {
3792
+ type: "solid",
3793
+ colorToken: "secondary"
3794
+ },
3795
+ borderRadius: "rounded-full",
3796
+ effects: { hover: [{ effectId: "pop" }] }
3797
+ }
3788
3798
  }
3789
- ]
3799
+ }
3790
3800
  }
3791
3801
  });
3792
- }));
3793
- //#endregion
3794
- //#region ../theme-core/src/buttons/personalities/soft-pill.ts
3795
- var softPill;
3796
- var init_soft_pill = __esmMin((() => {
3797
- init_types$16();
3798
- softPill = defineButtonPersonality({
3799
- id: "soft-pill",
3800
- name: "Soft Pill",
3801
- description: "Rounded pills with a gentle lift on hover. Quietly modern.",
3802
+ joyStampRecipe = defineStaticButtonStyleRecipe({
3803
+ id: "joy-stamp",
3804
+ accessibilityLabel: "Bold pill buttons with a hard offset shadow",
3802
3805
  tags: {
3803
- tone: "classic",
3804
- energy: "calm",
3805
- motion: "subtle",
3806
+ tone: "bold",
3807
+ energy: "vibrant",
3808
+ motion: "expressive",
3806
3809
  era: "organic"
3807
3810
  },
3808
- buttonSystem: {
3811
+ system: {
3809
3812
  global: {
3810
3813
  cornerStyle: "pill",
3811
- shadow: "low",
3814
+ shadow: "high",
3812
3815
  textTransform: "none",
3813
- fontWeight: 500,
3816
+ typography: "heading",
3817
+ fontWeight: 700,
3818
+ fontSize: "text-lg",
3814
3819
  borderWidth: 2,
3815
- hoverTransform: "lift",
3820
+ hoverTransform: "none",
3816
3821
  hoverColor: "none"
3817
3822
  },
3818
- variants: [
3819
- {
3820
- id: "primary",
3821
- name: "Primary",
3822
- enabled: true,
3823
- priority: 1,
3824
- background: {
3825
- type: "solid",
3826
- colorToken: "primary"
3827
- },
3828
- borderRadius: "rounded-full",
3829
- shadow: {
3830
- elevation: "low",
3831
- softness: "soft",
3832
- position: "bottom"
3833
- },
3834
- effects: {
3835
- hover: [{
3836
- effectId: "lift",
3837
- options: { translateY: "-1px" }
3838
- }],
3839
- active: [{
3840
- effectId: "scale-down",
3841
- options: { scale: "0.98" }
3842
- }]
3823
+ sizes: {
3824
+ sm: {
3825
+ padding: "0.625rem 1.25rem",
3826
+ fontSize: "text-base"
3827
+ },
3828
+ md: {
3829
+ padding: "0.875rem 1.75rem",
3830
+ fontSize: "text-lg"
3831
+ },
3832
+ lg: {
3833
+ padding: "1.125rem 2.25rem",
3834
+ fontSize: "text-xl"
3835
+ },
3836
+ xl: {
3837
+ padding: "1.25rem 2.75rem",
3838
+ fontSize: "text-2xl"
3839
+ }
3840
+ },
3841
+ roles: {
3842
+ primary: {
3843
+ kind: "complete",
3844
+ appearance: {
3845
+ background: {
3846
+ type: "solid",
3847
+ colorToken: "primary"
3848
+ },
3849
+ borderRadius: "rounded-full",
3850
+ shadow: {
3851
+ elevation: "high",
3852
+ softness: "hard",
3853
+ position: "bottom-right",
3854
+ colorToken: "text"
3855
+ },
3856
+ effects: { hover: [{ effectId: "press-down" }] }
3843
3857
  }
3844
3858
  },
3845
- {
3846
- id: "secondary",
3847
- name: "Secondary",
3848
- enabled: true,
3849
- priority: 2,
3850
- background: {
3851
- type: "surface",
3852
- role: "link"
3853
- },
3854
- borderRadius: "rounded-full",
3855
- border: { widthClass: "border-2" },
3856
- effects: { hover: [{
3857
- effectId: "background-on-hover",
3858
- options: { colorToken: "surface" }
3859
- }] }
3859
+ secondary: {
3860
+ kind: "complete",
3861
+ appearance: {
3862
+ background: {
3863
+ type: "surface",
3864
+ role: "link"
3865
+ },
3866
+ borderRadius: "rounded-full",
3867
+ border: { widthClass: "border-2" },
3868
+ shadow: {
3869
+ elevation: "high",
3870
+ softness: "hard",
3871
+ position: "bottom-right",
3872
+ colorToken: "secondary"
3873
+ },
3874
+ effects: { hover: [{ effectId: "press-down" }] }
3875
+ }
3860
3876
  },
3861
- {
3862
- id: "outline",
3863
- name: "Outline",
3864
- enabled: true,
3865
- priority: 3,
3866
- background: {
3867
- type: "surface",
3868
- role: "link"
3869
- },
3870
- borderRadius: "rounded-full",
3871
- border: { widthClass: "border" },
3872
- effects: { hover: [{
3873
- effectId: "background-on-hover",
3874
- options: { colorToken: "surface" }
3875
- }] }
3877
+ outline: {
3878
+ kind: "derive",
3879
+ from: "secondary"
3876
3880
  },
3877
- {
3878
- id: "ghost",
3879
- name: "Ghost",
3880
- enabled: true,
3881
- priority: 3,
3882
- background: {
3883
- type: "surface",
3884
- role: "link"
3885
- },
3886
- borderRadius: "rounded-full",
3887
- effects: { hover: [{
3888
- effectId: "background-on-hover",
3889
- options: { colorToken: "surface" }
3890
- }] }
3881
+ ghost: {
3882
+ kind: "complete",
3883
+ appearance: {
3884
+ background: {
3885
+ type: "surface",
3886
+ role: "link"
3887
+ },
3888
+ borderRadius: "rounded-full",
3889
+ effects: { hover: [{ effectId: "press-down" }] }
3890
+ }
3891
+ },
3892
+ accent: {
3893
+ kind: "derive",
3894
+ from: "primary",
3895
+ overrides: { background: {
3896
+ type: "solid",
3897
+ colorToken: "accent"
3898
+ } }
3891
3899
  }
3892
- ]
3900
+ }
3893
3901
  }
3894
3902
  });
3895
- }));
3896
- //#endregion
3897
- //#region ../theme-core/src/buttons/personalities/two-tone-pill.ts
3898
- var solidSecondary, twoTonePill;
3899
- var init_two_tone_pill = __esmMin((() => {
3900
- init_types$17();
3901
- init_soft_pill();
3902
- init_types$16();
3903
- solidSecondary = {
3904
- id: "secondary",
3905
- name: "Secondary",
3906
- enabled: true,
3907
- priority: 2,
3908
- background: {
3909
- type: "solid",
3910
- colorToken: unsafeAsOpaqueButtonColourToken("secondary")
3903
+ ornateGhostSizes = {
3904
+ sm: {
3905
+ padding: "0.375rem 0",
3906
+ fontSize: "text-xs"
3911
3907
  },
3912
- borderRadius: "rounded-full",
3913
- shadow: {
3914
- elevation: "none",
3915
- softness: null,
3916
- position: "bottom"
3908
+ md: {
3909
+ padding: "0.5rem 0",
3910
+ fontSize: "text-sm"
3917
3911
  },
3918
- effects: {
3919
- hover: [{
3920
- effectId: "background-on-hover-alpha",
3921
- options: {
3922
- colorToken: "secondary",
3923
- opacity: 88
3912
+ lg: {
3913
+ padding: "0.625rem 0",
3914
+ fontSize: "text-base"
3915
+ },
3916
+ xl: {
3917
+ padding: "0.75rem 0",
3918
+ fontSize: "text-lg"
3919
+ }
3920
+ };
3921
+ ornateRitualRecipe = defineStaticButtonStyleRecipe({
3922
+ id: "ornate-ritual",
3923
+ accessibilityLabel: "Uppercase framed buttons with restrained movement",
3924
+ tags: {
3925
+ tone: "classic",
3926
+ energy: "vibrant",
3927
+ motion: "subtle",
3928
+ era: "organic"
3929
+ },
3930
+ system: {
3931
+ global: {
3932
+ cornerStyle: "rounded",
3933
+ textTransform: "uppercase",
3934
+ fontWeight: 600,
3935
+ borderWidth: 1,
3936
+ hoverTransform: "none",
3937
+ hoverColor: "none",
3938
+ letterSpacing: "loose"
3939
+ },
3940
+ sizes: {
3941
+ sm: {
3942
+ padding: "0.5625rem 1.25rem",
3943
+ fontSize: "text-xs"
3944
+ },
3945
+ md: {
3946
+ padding: "0.75rem 1.75rem",
3947
+ fontSize: "text-xs"
3948
+ },
3949
+ lg: {
3950
+ padding: "0.875rem 2.25rem",
3951
+ fontSize: "text-sm"
3952
+ },
3953
+ xl: {
3954
+ padding: "1rem 2.75rem",
3955
+ fontSize: "text-base"
3924
3956
  }
3925
- }],
3926
- active: [{
3927
- effectId: "scale-down",
3928
- options: { scale: "0.98" }
3929
- }]
3957
+ },
3958
+ roles: {
3959
+ primary: {
3960
+ kind: "complete",
3961
+ appearance: {
3962
+ background: {
3963
+ type: "solid",
3964
+ colorToken: "primary"
3965
+ },
3966
+ borderRadius: "rounded-md",
3967
+ border: { widthClass: "border" },
3968
+ effects: {
3969
+ hover: [{
3970
+ effectId: "background-on-hover",
3971
+ options: { colorToken: "primary-100" }
3972
+ }],
3973
+ active: [{
3974
+ effectId: "scale-down",
3975
+ options: { scale: "0.98" }
3976
+ }]
3977
+ }
3978
+ }
3979
+ },
3980
+ secondary: {
3981
+ kind: "complete",
3982
+ appearance: {
3983
+ background: {
3984
+ type: "solid",
3985
+ colorToken: "secondary"
3986
+ },
3987
+ borderRadius: "rounded-md",
3988
+ border: { widthClass: "border" },
3989
+ effects: { hover: [{
3990
+ effectId: "background-on-hover",
3991
+ options: { colorToken: "surface" }
3992
+ }] }
3993
+ }
3994
+ },
3995
+ outline: {
3996
+ kind: "complete",
3997
+ appearance: {
3998
+ background: {
3999
+ type: "surface",
4000
+ role: "link"
4001
+ },
4002
+ borderRadius: "rounded-md",
4003
+ border: { widthClass: "border" },
4004
+ effects: { hover: [{
4005
+ effectId: "background-on-hover",
4006
+ options: { colorToken: "muted" }
4007
+ }] }
4008
+ }
4009
+ },
4010
+ ghost: {
4011
+ kind: "complete",
4012
+ appearance: {
4013
+ background: {
4014
+ type: "surface",
4015
+ role: "link"
4016
+ },
4017
+ borderRadius: "rounded-none",
4018
+ sizes: ornateGhostSizes,
4019
+ effects: { base: [{
4020
+ effectId: "border-bottom-grow",
4021
+ options: {
4022
+ height: 1,
4023
+ colorToken: "accent",
4024
+ origin: "left"
4025
+ }
4026
+ }] }
4027
+ }
4028
+ },
4029
+ accent: {
4030
+ kind: "derive",
4031
+ from: "primary",
4032
+ overrides: { background: {
4033
+ type: "solid",
4034
+ colorToken: "accent"
4035
+ } }
4036
+ }
4037
+ }
3930
4038
  }
4039
+ });
4040
+ }));
4041
+ //#endregion
4042
+ //#region ../theme-core/src/buttons/styles/registry.ts
4043
+ function findButtonStyleRecipe(id) {
4044
+ const recipe = recipesById.get(id);
4045
+ if (recipe === void 0) throw new Error(`Button style registry is missing known style ${id}`);
4046
+ return recipe;
4047
+ }
4048
+ function resolveButtonStyleSelection(selection) {
4049
+ switch (selection.styleId) {
4050
+ case "soft-pill": return resolveButtonStyleRecipe(softPillRecipe, selection.parameters);
4051
+ case "earth-pill": return resolveButtonStyleRecipe(earthPillRecipe, selection.parameters);
4052
+ case "confident-chip": return resolveButtonStyleRecipe(confidentChipRecipe, selection.parameters);
4053
+ case "editorial-link": return resolveButtonStyleRecipe(editorialLinkRecipe, selection.parameters);
4054
+ case "pebble": return resolveButtonStyleRecipe(pebbleRecipe, selection.parameters);
4055
+ case "ink-stamp": return resolveButtonStyleRecipe(inkStampRecipe, selection.parameters);
4056
+ case "flat-ink": return resolveButtonStyleRecipe(flatInkRecipe, selection.parameters);
4057
+ case "brushed-wash": return resolveButtonStyleRecipe(brushedWashRecipe, selection.parameters);
4058
+ case "showtime-pill": return resolveButtonStyleRecipe(showtimePillRecipe, selection.parameters);
4059
+ case "joy-stamp": return resolveButtonStyleRecipe(joyStampRecipe, selection.parameters);
4060
+ case "ornate-ritual": return resolveButtonStyleRecipe(ornateRitualRecipe, selection.parameters);
4061
+ case "quiet-arrow": return resolveButtonStyleRecipe(quietArrowRecipe, selection.parameters);
4062
+ }
4063
+ }
4064
+ function defaultButtonStyleSelectionFor(styleId) {
4065
+ return {
4066
+ styleId,
4067
+ parameters: findButtonStyleRecipe(styleId).defaultParameters
3931
4068
  };
3932
- twoTonePill = defineButtonPersonality({
3933
- id: "two-tone-pill",
3934
- name: "Two-tone Pill",
3935
- description: "Rounded pills with distinct solid primary and secondary brand colours.",
3936
- tags: softPill.tags,
3937
- buttonSystem: {
3938
- ...softPill.buttonSystem,
3939
- variants: softPill.buttonSystem.variants.map((variant) => variant.id === "secondary" ? solidSecondary : variant)
3940
- }
3941
- });
3942
- })), buttonPersonalities;
3943
- var init_personalities = __esmMin((() => {
3944
- init_brushed_wash();
3945
- init_confident_chip();
3946
- init_earth_pill();
3947
- init_editorial_link();
3948
- init_flat_ink();
3949
- init_ink_stamp();
3950
- init_joy_stamp();
3951
- init_ornate_ritual();
3952
- init_pebble();
3953
- init_quiet_arrow();
3954
- init_showtime_pill();
3955
- init_soft_pill();
3956
- init_two_tone_pill();
3957
- init_types$16();
3958
- buttonPersonalities = [
3959
- softPill,
3960
- twoTonePill,
3961
- earthPill,
3962
- confidentChip,
3963
- editorialLink,
3964
- pebble,
3965
- inkStamp,
3966
- flatInk,
3967
- brushedWash,
3968
- showtimePill,
3969
- joyStamp,
3970
- ornateRitual,
3971
- quietArrow
3972
- ];
3973
- new Map(buttonPersonalities.map((p) => [p.id, p]));
3974
- }));
3975
- function presetCategory(personality) {
3976
- switch (personality.tags.era) {
4069
+ }
4070
+ var buttonStyleRecipes, recipesById, registeredIds;
4071
+ var init_registry$1 = __esmMin((() => {
4072
+ init_domain();
4073
+ init_selection$1();
4074
+ init_quietArrow();
4075
+ init_staticRecipes();
4076
+ buttonStyleRecipes = [
4077
+ softPillRecipe,
4078
+ earthPillRecipe,
4079
+ confidentChipRecipe,
4080
+ editorialLinkRecipe,
4081
+ pebbleRecipe,
4082
+ inkStampRecipe,
4083
+ flatInkRecipe,
4084
+ brushedWashRecipe,
4085
+ showtimePillRecipe,
4086
+ joyStampRecipe,
4087
+ ornateRitualRecipe,
4088
+ quietArrowRecipe
4089
+ ];
4090
+ recipesById = new Map(buttonStyleRecipes.map((recipe) => [recipe.id, recipe]));
4091
+ registeredIds = buttonStyleRecipes.map((recipe) => recipe.id);
4092
+ if (registeredIds.length !== BUTTON_STYLE_IDS.length || BUTTON_STYLE_IDS.some((id) => !recipesById.has(id))) throw new Error("Button style registry and ButtonStyleId catalog are out of sync");
4093
+ }));
4094
+ //#endregion
4095
+ //#region ../theme-core/src/buttons/styles/index.ts
4096
+ var init_styles = __esmMin((() => {
4097
+ init_domain();
4098
+ init_registry$1();
4099
+ init_selection$1();
4100
+ }));
4101
+ function presetCategory(recipe) {
4102
+ switch (recipe.tags.era) {
3977
4103
  case "retro": return "retro";
3978
4104
  case "editorial": return "minimal";
3979
4105
  case "organic": return "artistic";
3980
- case "modern": return personality.tags.tone === "bold" ? "modern" : "technical";
4106
+ case "modern": return recipe.tags.tone === "bold" ? "modern" : "technical";
3981
4107
  case "technical": return "technical";
3982
4108
  case void 0: return "modern";
3983
4109
  }
3984
4110
  }
3985
4111
  var init_presets$2 = __esmMin((() => {
3986
- init_personalities();
3987
- buttonPersonalities.map((personality) => ({
3988
- id: personality.id,
3989
- name: personality.name,
3990
- description: personality.description,
3991
- category: presetCategory(personality),
3992
- buttonSystem: personality.buttonSystem,
3993
- compatibility: {
3994
- ...personality.tags.tone ? { tones: [personality.tags.tone] } : {},
3995
- ...personality.tags.energy ? { energies: [personality.tags.energy] } : {}
3996
- }
3997
- }));
4112
+ init_styles();
4113
+ buttonStyleRecipes.map((recipe) => {
4114
+ const resolved = resolveButtonStyleSelection(defaultButtonStyleSelectionFor(recipe.id));
4115
+ if (resolved.kind === "error") throw new Error(`Invalid registered button style ${recipe.id}: ${resolved.error.issues.join(", ")}`);
4116
+ return {
4117
+ id: recipe.id,
4118
+ name: recipe.accessibilityLabel,
4119
+ description: recipe.accessibilityLabel,
4120
+ category: presetCategory(recipe),
4121
+ buttonSystem: resolved.buttonSystem,
4122
+ compatibility: {
4123
+ ...recipe.tags.tone ? { tones: [recipe.tags.tone] } : {},
4124
+ ...recipe.tags.energy ? { energies: [recipe.tags.energy] } : {}
4125
+ }
4126
+ };
4127
+ });
3998
4128
  }));
3999
4129
  //#endregion
4000
4130
  //#region ../theme-core/src/buttons/effects/types.ts
@@ -4002,12 +4132,12 @@ var init_types$15 = __esmMin((() => {}));
4002
4132
  var init_core$2 = __esmMin((() => {
4003
4133
  init_resolveButtonColourStates();
4004
4134
  init_resolvedButtonCss();
4005
- init_types$17();
4135
+ init_types$16();
4006
4136
  }));
4007
4137
  //#endregion
4008
4138
  //#region ../theme-core/src/buttons/index.ts
4009
4139
  var init_buttons = __esmMin((() => {
4010
- init_types$17();
4140
+ init_types$16();
4011
4141
  init_classNames();
4012
4142
  init_generateButtonCss();
4013
4143
  init_resolveButtonColourStates();
@@ -4015,9 +4145,9 @@ var init_buttons = __esmMin((() => {
4015
4145
  init_generateDefaultButtonSystem();
4016
4146
  init_constants$2();
4017
4147
  init_presets$2();
4018
- init_personalities();
4148
+ init_styles();
4019
4149
  init_types$15();
4020
- init_registry$1();
4150
+ init_registry$2();
4021
4151
  init_transform();
4022
4152
  init_core$2();
4023
4153
  }));
@@ -7967,6 +8097,39 @@ function resolveButtonAffordance(input) {
7967
8097
  }
7968
8098
  return null;
7969
8099
  }
8100
+ //#endregion
8101
+ //#region ../blocks/src/system/constants/buttonRoles.ts
8102
+ /**
8103
+ * Temporary rollout boundary for persisted content written before issue #1220.
8104
+ * Authoring remains strict through `blockButtonRoleSchema`; this parser exists
8105
+ * only until the post-deploy role rewrite has been audited in production.
8106
+ */
8107
+ function canonicalizePersistedBlockButtonRole(value) {
8108
+ return value === "link" || value === "tertiary" ? "ghost" : value;
8109
+ }
8110
+ function isBlockButtonRole(value) {
8111
+ return blockButtonRoleSchema.safeParse(value).success;
8112
+ }
8113
+ var BLOCK_BUTTON_ROLES, blockButtonRoleSchema, persistedBlockButtonRoleSchema, BLOCK_BUTTON_ROLE_LABELS, BLOCK_BUTTON_ROLE_OPTIONS;
8114
+ var init_buttonRoles = __esmMin((() => {
8115
+ BLOCK_BUTTON_ROLES = PUBLIC_BUTTON_ROLES;
8116
+ blockButtonRoleSchema = z$1.enum(BLOCK_BUTTON_ROLES);
8117
+ persistedBlockButtonRoleSchema = z$1.preprocess((value) => typeof value === "string" ? canonicalizePersistedBlockButtonRole(value) : value, blockButtonRoleSchema);
8118
+ BLOCK_BUTTON_ROLE_LABELS = {
8119
+ primary: "Primary",
8120
+ secondary: "Secondary",
8121
+ outline: "Outline",
8122
+ ghost: "Ghost",
8123
+ accent: "Accent"
8124
+ };
8125
+ BLOCK_BUTTON_ROLE_OPTIONS = BLOCK_BUTTON_ROLES.map((value) => ({
8126
+ value,
8127
+ label: BLOCK_BUTTON_ROLE_LABELS[value]
8128
+ }));
8129
+ }));
8130
+ //#endregion
8131
+ //#region ../blocks/src/system/inlineText.ts
8132
+ init_buttonRoles();
7970
8133
  const inlineTextMarkSchema = z$1.discriminatedUnion("kind", [
7971
8134
  z$1.object({ kind: z$1.literal("strong") }),
7972
8135
  z$1.object({ kind: z$1.literal("emphasis") }),
@@ -8258,6 +8421,7 @@ function renderMark(mark, key, child) {
8258
8421
  }
8259
8422
  //#endregion
8260
8423
  //#region ../blocks/src/system/runtime/nodes/basic.tsx
8424
+ init_buttons();
8261
8425
  const TextNode = ({ value, children, blockId: _blockId, blockKind: _blockKind, blockContent, fragmentRegistry: _fragmentRegistry, pathBase: _pathBase, inlineTextFallbackPath, ...rest }) => {
8262
8426
  const inlineText = parseInlineTextFromUnknown(value);
8263
8427
  if (inlineText.ok && !isInlineTextEmpty(inlineText.value)) return /* @__PURE__ */ jsx(Text$1, {
@@ -8316,7 +8480,7 @@ const ButtonNode = ({ value, children, href, variantId = "primary", size = "md",
8316
8480
  return null;
8317
8481
  }
8318
8482
  const extraClassName = affordanceIcon ? [className, AFFORDANCE_SUPPRESS_CLASS].filter(Boolean).join(" ") : className;
8319
- const resolvedVariantId = parseThemeButtonVariantId(variantId);
8483
+ const resolvedVariantId = parseThemeButtonVariantId(canonicalizePersistedBlockButtonRole(variantId));
8320
8484
  const combinedClassName = resolvedVariantId ? themeButtonClassName({
8321
8485
  variant: resolvedVariantId,
8322
8486
  size,
@@ -8789,12 +8953,7 @@ init_colorStyles();
8789
8953
  init_media$1();
8790
8954
  init_buttons();
8791
8955
  init_media$2();
8792
- const FILE_DOWNLOAD_BUTTON_VARIANTS = [
8793
- "primary",
8794
- "secondary",
8795
- "outline",
8796
- "link"
8797
- ];
8956
+ init_buttonRoles();
8798
8957
  function isDownloadableMediaType(type) {
8799
8958
  return typeof type === "string" && PUBLIC_DOWNLOAD_MEDIA_TYPES.includes(type);
8800
8959
  }
@@ -8826,7 +8985,7 @@ function iconForMediaType(type) {
8826
8985
  }
8827
8986
  }
8828
8987
  function normalizeButtonVariant(value) {
8829
- return typeof value === "string" && FILE_DOWNLOAD_BUTTON_VARIANTS.includes(value) ? value : "primary";
8988
+ return isBlockButtonRole(value) ? value : "primary";
8830
8989
  }
8831
8990
  function FileDownloadNode({ value, title, description, buttonLabel, buttonVariant, className }) {
8832
8991
  if (!value || !isDownloadableMediaType(value.type)) return null;
@@ -12791,8 +12950,11 @@ function LocationMapView({ addressText, location, zoom, heightPx, showAddressTex
12791
12950
  href: directionsUrl,
12792
12951
  target: "_blank",
12793
12952
  rel: "noreferrer",
12794
- className: "rb-inline-flex rb-w-fit rb-items-center rb-justify-center rb-rounded-md rb-border rb-px-4 rb-py-2 rb-text-sm rb-font-medium rb-no-underline transition-theme-standard rb-hover-opacity-90",
12795
- style: mergeStyles(borderColorStyle("border"), backgroundColorStyle("surface"), textColorStyle("text")),
12953
+ className: themeButtonClassName({
12954
+ variant: "ghost",
12955
+ size: "sm",
12956
+ extraClassName: "rb-w-fit"
12957
+ }),
12796
12958
  children: directionsLabel
12797
12959
  }) : null
12798
12960
  ]
@@ -12800,6 +12962,7 @@ function LocationMapView({ addressText, location, zoom, heightPx, showAddressTex
12800
12962
  }
12801
12963
  var init_location_map_view = __esmMin((() => {
12802
12964
  init_colorStyles();
12965
+ init_buttons();
12803
12966
  init_location_map_shared();
12804
12967
  }));
12805
12968
  //#endregion
@@ -14234,20 +14397,7 @@ function createButtonVariantField(options = {}) {
14234
14397
  };
14235
14398
  }
14236
14399
  function createButtonGroup(options = {}) {
14237
- const { variants = [
14238
- {
14239
- value: "primary",
14240
- label: "Primary"
14241
- },
14242
- {
14243
- value: "secondary",
14244
- label: "Secondary"
14245
- },
14246
- {
14247
- value: "outline",
14248
- label: "Outline"
14249
- }
14250
- ], defaultVariant, includeSize = true, defaultSize = "md", showGroupLabel = false, groupId = "button", groupLabel = "Button", flattenInRepeater = true } = options;
14400
+ const { variants = BLOCK_BUTTON_ROLE_OPTIONS, defaultVariant, includeSize = true, defaultSize = "md", showGroupLabel = false, groupId = "button", groupLabel = "Button", flattenInRepeater = true } = options;
14251
14401
  const mainFields = [
14252
14402
  {
14253
14403
  id: "label",
@@ -14352,24 +14502,8 @@ function createButtonGroup(options = {}) {
14352
14502
  }
14353
14503
  var DEFAULT_THEME_BUTTON_VARIANTS;
14354
14504
  var init_button = __esmMin((() => {
14355
- DEFAULT_THEME_BUTTON_VARIANTS = [
14356
- {
14357
- value: "primary",
14358
- label: "Primary"
14359
- },
14360
- {
14361
- value: "secondary",
14362
- label: "Secondary"
14363
- },
14364
- {
14365
- value: "outline",
14366
- label: "Outline"
14367
- },
14368
- {
14369
- value: "link",
14370
- label: "Link"
14371
- }
14372
- ];
14505
+ init_buttonRoles();
14506
+ DEFAULT_THEME_BUTTON_VARIANTS = BLOCK_BUTTON_ROLE_OPTIONS;
14373
14507
  }));
14374
14508
  //#endregion
14375
14509
  //#region ../blocks/src/system/blocks/events/shared/fields.ts
@@ -14913,18 +15047,10 @@ var init_events$1 = __esmMin((() => {
14913
15047
  var previewStageSchema, registrationButtonVariantSchema, eventButtonVariantSchema, eventLayoutSchema, eventCalendarDisplayModeSchema, eventCalendarDefaultViewSchema, columnOptionSchema, weekStartSchema, filterAutoShowSchema, calendarTabViewsSchema;
14914
15048
  var init_contract_schemas = __esmMin((() => {
14915
15049
  init_events$1();
15050
+ init_buttonRoles();
14916
15051
  previewStageSchema = z$1.enum(["preview", "published"]);
14917
- registrationButtonVariantSchema = z$1.enum([
14918
- "primary",
14919
- "secondary",
14920
- "outline"
14921
- ]);
14922
- eventButtonVariantSchema = z$1.enum([
14923
- "primary",
14924
- "secondary",
14925
- "outline",
14926
- "link"
14927
- ]);
15052
+ registrationButtonVariantSchema = blockButtonRoleSchema;
15053
+ eventButtonVariantSchema = persistedBlockButtonRoleSchema;
14928
15054
  eventLayoutSchema = z$1.enum(eventCalendarListLayoutValues);
14929
15055
  eventCalendarDisplayModeSchema = z$1.enum(eventCalendarDisplayModeValues);
14930
15056
  eventCalendarDefaultViewSchema = z$1.enum(eventCalendarDefaultViewValues);
@@ -16239,6 +16365,7 @@ function cardTreatmentClass(value) {
16239
16365
  }
16240
16366
  //#endregion
16241
16367
  //#region ../blocks/src/system/runtime/nodes/weekly-slot-availability.view.tsx
16368
+ init_buttons();
16242
16369
  function pluralizeWeeks(count) {
16243
16370
  return count === 1 ? "1 upcoming week" : `${count} upcoming weeks`;
16244
16371
  }
@@ -16314,7 +16441,11 @@ function WeeklySlotAvailabilityView({ availability, loading = false, error, empt
16314
16441
  ]
16315
16442
  }),
16316
16443
  resolvedCtaUrl ? /* @__PURE__ */ jsx("a", {
16317
- className: "weekly-slot-availability__cta",
16444
+ className: themeButtonClassName({
16445
+ variant: "ghost",
16446
+ size: "sm",
16447
+ extraClassName: "weekly-slot-availability__cta"
16448
+ }),
16318
16449
  href: buildSlotCtaUrl(resolvedCtaUrl, slot),
16319
16450
  "aria-label": buildSlotCtaLabel(resolvedCtaText, slot),
16320
16451
  children: resolvedCtaText
@@ -19101,6 +19232,37 @@ var init_colors = __esmMin((() => {
19101
19232
  var init_editorState = __esmMin((() => {}));
19102
19233
  var init_libraryModel = __esmMin((() => {}));
19103
19234
  //#endregion
19235
+ //#region ../theme-core/src/site-styles/styleTags.ts
19236
+ var STYLE_AXIS_VALUES, styleTagsSchema;
19237
+ var init_styleTags = __esmMin((() => {
19238
+ STYLE_AXIS_VALUES = {
19239
+ tone: [
19240
+ "minimal",
19241
+ "classic",
19242
+ "bold"
19243
+ ],
19244
+ energy: ["calm", "vibrant"],
19245
+ motion: [
19246
+ "subtle",
19247
+ "standard",
19248
+ "expressive"
19249
+ ],
19250
+ era: [
19251
+ "editorial",
19252
+ "modern",
19253
+ "organic",
19254
+ "technical",
19255
+ "retro"
19256
+ ]
19257
+ };
19258
+ styleTagsSchema = z$1.object({
19259
+ tone: z$1.enum(STYLE_AXIS_VALUES.tone).optional(),
19260
+ energy: z$1.enum(STYLE_AXIS_VALUES.energy).optional(),
19261
+ motion: z$1.enum(STYLE_AXIS_VALUES.motion).optional(),
19262
+ era: z$1.enum(STYLE_AXIS_VALUES.era).optional()
19263
+ });
19264
+ }));
19265
+ //#endregion
19104
19266
  //#region ../theme-core/src/palette/curated/types.ts
19105
19267
  function asCuratedPaletteAuthoringKey(value) {
19106
19268
  if (value.length === 0) throw new Error("CuratedPaletteAuthoringKey must be a non-empty string");
@@ -22463,25 +22625,9 @@ var init_headerLooks = __esmMin((() => {
22463
22625
  function asFooterLookId(value) {
22464
22626
  return value;
22465
22627
  }
22466
- function asFooterLayoutId(value) {
22467
- return value;
22468
- }
22469
- function asFooterStyleId(value) {
22470
- return value;
22471
- }
22472
- /**
22473
- * No-nav-safe identity footer: brand and legal/supporting copy carry the
22474
- * footer without implying missing navigation.
22475
- */
22476
- function identityQuietFooter(theme) {
22628
+ function quietFooterLinks(theme) {
22477
22629
  return {
22478
22630
  ...theme.footer,
22479
- variant: "simple",
22480
- maxWidth: "container",
22481
- background: {
22482
- type: "color",
22483
- color: "surface"
22484
- },
22485
22631
  navStyle: "minimal",
22486
22632
  navWeight: "regular",
22487
22633
  navColor: "text",
@@ -22494,340 +22640,41 @@ function identityQuietFooter(theme) {
22494
22640
  hoverColorToken: "primary",
22495
22641
  padding: "none",
22496
22642
  borderRadius: "none"
22497
- },
22498
- navLayout: {
22499
- layout: "inline-wrap",
22500
- align: "start",
22501
- gapX: "default",
22502
- gapY: "tight"
22503
- },
22504
- logo: {
22505
- showLogo: true,
22506
- showLogoText: true,
22507
- placement: "left",
22508
- size: "sm",
22509
- align: "start"
22510
- },
22511
- bottomBar: {
22512
- enabled: false,
22513
- fullBleed: false,
22514
- textAlign: "left",
22515
- paddingX: "default",
22516
- paddingY: "compact",
22517
- borderTop: { width: "none" }
22518
22643
  }
22519
22644
  };
22520
22645
  }
22521
- /**
22522
- * Back-compat alias for the previous default footer Look. It keeps existing
22523
- * persisted selections valid while staying hidden from the new layout/style UI.
22524
- */
22525
- function mutedGroundingFooter(theme) {
22526
- return {
22527
- ...identityQuietFooter(theme),
22528
- background: theme.footer.background,
22529
- navStyle: theme.footer.navStyle,
22530
- navColor: theme.footer.navColor,
22531
- navWeight: theme.footer.navWeight,
22532
- navLinkStyle: theme.footer.navLinkStyle,
22533
- bottomTextLinkStyle: theme.footer.bottomTextLinkStyle
22534
- };
22535
- }
22536
- /** Applies a high-contrast brand band with a darker full-bleed bottom bar. */
22537
- function brandTwoBandFooter(theme) {
22646
+ function emphasizedFooterLinks(theme) {
22538
22647
  return {
22539
22648
  ...theme.footer,
22540
- variant: "split",
22541
- maxWidth: "container",
22542
- background: {
22543
- type: "color",
22544
- color: "primary-800"
22545
- },
22546
22649
  navStyle: "minimal",
22547
22650
  navWeight: "medium",
22548
- navColor: "primaryForeground",
22549
- navLinkStyle: {
22550
- typography: "body",
22551
- fontWeight: "medium",
22552
- textTransform: "none",
22553
- italic: false,
22554
- colorToken: "primaryForeground",
22555
- hoverColorToken: "secondary",
22556
- padding: "none",
22557
- borderRadius: "none"
22558
- },
22559
- bottomTextLinkStyle: {
22560
- colorToken: "secondary",
22561
- decorationColorToken: "secondary"
22562
- },
22563
- navLayout: {
22564
- layout: "inline-wrap",
22565
- align: "start",
22566
- gapX: "default",
22567
- gapY: "tight"
22568
- },
22569
- logo: {
22570
- showLogo: true,
22571
- showLogoText: false,
22572
- placement: "left",
22573
- size: "sm",
22574
- align: "start"
22575
- },
22576
- bottomBar: {
22577
- enabled: true,
22578
- fullBleed: true,
22579
- background: {
22580
- type: "color",
22581
- color: "primary-900"
22582
- },
22583
- textColor: "primaryForeground",
22584
- textAlign: "center",
22585
- paddingX: "default",
22586
- paddingY: "compact",
22587
- borderTop: { width: "none" }
22588
- }
22589
- };
22590
- }
22591
- /**
22592
- * Centered stack on a softly tinted band: logo, inline nav, address, and a
22593
- * hairline-topped copyright line, all centered.
22594
- */
22595
- function centeredCalmFooter(theme) {
22596
- return {
22597
- ...theme.footer,
22598
- variant: "simple",
22599
- maxWidth: "container",
22600
- background: {
22601
- type: "color",
22602
- color: "surfaceAlt"
22603
- },
22604
- navStyle: "minimal",
22605
- navWeight: "regular",
22606
- navColor: "text",
22607
- navLinkStyle: {
22608
- typography: "body",
22609
- fontWeight: "regular",
22610
- textTransform: "none",
22611
- italic: false,
22612
- colorToken: "text",
22613
- hoverColorToken: "primary",
22614
- padding: "none",
22615
- borderRadius: "none"
22616
- },
22617
- navLayout: {
22618
- layout: "inline-wrap",
22619
- align: "center",
22620
- gapX: "relaxed",
22621
- gapY: "tight"
22622
- },
22623
- logo: {
22624
- showLogo: true,
22625
- showLogoText: false,
22626
- placement: "above",
22627
- size: "sm",
22628
- align: "center"
22629
- },
22630
- bottomBar: {
22631
- enabled: true,
22632
- fullBleed: false,
22633
- textAlign: "center",
22634
- paddingX: "default",
22635
- paddingY: "compact",
22636
- borderTop: { width: "thin" }
22637
- }
22638
- };
22639
- }
22640
- /** Editorial split footer: compact nav on one side, brand signoff on the other. */
22641
- function splitEditorialFooter(theme) {
22642
- return {
22643
- ...theme.footer,
22644
- variant: "split",
22645
- maxWidth: "container",
22646
- background: {
22647
- type: "color",
22648
- color: "surface"
22649
- },
22650
- navStyle: "minimal",
22651
- navWeight: "regular",
22652
- navColor: "text",
22653
- navLinkStyle: {
22654
- typography: "body",
22655
- fontWeight: "regular",
22656
- textTransform: "none",
22657
- italic: false,
22658
- colorToken: "text",
22659
- hoverColorToken: "primary",
22660
- padding: "none",
22661
- borderRadius: "none"
22662
- },
22663
- navLayout: {
22664
- layout: "inline-wrap",
22665
- align: "start",
22666
- gapX: "relaxed",
22667
- gapY: "tight"
22668
- },
22669
- logo: {
22670
- showLogo: true,
22671
- showLogoText: true,
22672
- placement: "right",
22673
- size: "sm",
22674
- align: "end"
22675
- },
22676
- bottomBar: {
22677
- enabled: true,
22678
- fullBleed: false,
22679
- textAlign: "left",
22680
- paddingX: "default",
22681
- paddingY: "compact",
22682
- borderTop: { width: "thin" }
22683
- }
22684
- };
22685
- }
22686
- /**
22687
- * Editorial columns: site name and supporting copy on the left, inline nav on
22688
- * the right, with a hairline-topped bottom line. Uses the footer block's
22689
- * columns layout.
22690
- */
22691
- function editorialColumnsFooter(theme) {
22692
- return {
22693
- ...theme.footer,
22694
- variant: "columns",
22695
- maxWidth: "container",
22696
- background: {
22697
- type: "color",
22698
- color: "surface"
22699
- },
22700
- navStyle: "minimal",
22701
- navWeight: "regular",
22702
22651
  navColor: "text",
22703
22652
  navLinkStyle: {
22704
22653
  typography: "body",
22705
- fontWeight: "regular",
22654
+ fontWeight: "medium",
22706
22655
  textTransform: "none",
22707
22656
  italic: false,
22708
22657
  colorToken: "text",
22709
22658
  hoverColorToken: "primary",
22710
22659
  padding: "none",
22711
22660
  borderRadius: "none"
22712
- },
22713
- logo: {
22714
- showLogo: true,
22715
- showLogoText: true,
22716
- placement: "left",
22717
- size: "sm",
22718
- align: "start"
22719
- },
22720
- bottomBar: {
22721
- enabled: true,
22722
- fullBleed: false,
22723
- textAlign: "center",
22724
- paddingX: "default",
22725
- paddingY: "compact",
22726
- borderTop: { width: "thin" }
22727
22661
  }
22728
22662
  };
22729
22663
  }
22730
- var footerLayoutCatalog, footerStyleCatalog, footerLookCatalog;
22664
+ var footerLookCatalog;
22731
22665
  var init_footerLooks = __esmMin((() => {
22732
- init_customizableSurfaces();
22733
22666
  init_types$12();
22734
- footerLayoutCatalog = defineExactCatalog()([
22735
- {
22736
- id: asFooterLayoutId("identity"),
22737
- label: "Identity",
22738
- description: "Logo, site text, address, and legal copy without relying on footer navigation."
22739
- },
22740
- {
22741
- id: asFooterLayoutId("centered"),
22742
- label: "Centered",
22743
- description: "A calm centered stack for identity, short copy, and optional compact navigation.",
22744
- maxRecommendedNavDensity: "sparse"
22745
- },
22746
- {
22747
- id: asFooterLayoutId("split"),
22748
- label: "Split",
22749
- description: "Navigation and brand signoff separated into a wider split footer.",
22750
- requiresFooterNav: true,
22751
- maxRecommendedNavDensity: "balanced"
22752
- },
22753
- {
22754
- id: asFooterLayoutId("columns"),
22755
- label: "Columns",
22756
- description: "Grouped footer navigation columns with a supporting bottom line.",
22757
- requiresFooterNav: true,
22758
- requiresFooterNavGroups: true
22759
- }
22760
- ]);
22761
- footerStyleCatalog = defineExactCatalog()([
22762
- {
22763
- id: asFooterStyleId("quiet"),
22764
- label: "Quiet",
22765
- description: "Lightweight, practical footer treatment."
22766
- },
22767
- {
22768
- id: asFooterStyleId("calm"),
22769
- label: "Calm",
22770
- description: "Soft centered treatment with restrained dividers."
22771
- },
22772
- {
22773
- id: asFooterStyleId("editorial"),
22774
- label: "Editorial",
22775
- description: "Text-forward treatment with fine-line structure."
22776
- },
22777
- {
22778
- id: asFooterStyleId("brand-band"),
22779
- label: "Brand band",
22780
- description: "High-contrast brand treatment with a stronger bottom bar."
22781
- }
22782
- ]);
22783
- new Map(footerLayoutCatalog.map((layout) => [layout.id, layout]));
22784
- new Map(footerStyleCatalog.map((style) => [style.id, style]));
22785
- footerLookCatalog = defineExactCatalog()([
22786
- {
22787
- id: asFooterLookId("footer-identity-quiet"),
22788
- label: "Identity footer",
22789
- layoutId: asFooterLayoutId("identity"),
22790
- styleId: asFooterStyleId("quiet"),
22791
- compile: identityQuietFooter
22792
- },
22793
- {
22794
- id: asFooterLookId("footer-muted-grounding"),
22795
- label: "Muted grounding footer",
22796
- layoutId: asFooterLayoutId("identity"),
22797
- styleId: asFooterStyleId("quiet"),
22798
- hiddenFromLayoutStyleControls: true,
22799
- compile: mutedGroundingFooter
22800
- },
22801
- {
22802
- id: asFooterLookId("footer-centered-calm"),
22803
- label: "Centered calm footer",
22804
- layoutId: asFooterLayoutId("centered"),
22805
- styleId: asFooterStyleId("calm"),
22806
- compile: centeredCalmFooter
22807
- },
22808
- {
22809
- id: asFooterLookId("footer-split-editorial"),
22810
- label: "Split editorial footer",
22811
- layoutId: asFooterLayoutId("split"),
22812
- styleId: asFooterStyleId("editorial"),
22813
- compile: splitEditorialFooter
22814
- },
22815
- {
22816
- id: asFooterLookId("footer-editorial-columns"),
22817
- label: "Editorial columns footer",
22818
- layoutId: asFooterLayoutId("columns"),
22819
- styleId: asFooterStyleId("editorial"),
22820
- compile: editorialColumnsFooter
22821
- },
22822
- {
22823
- id: asFooterLookId("site-footer-brand-two-band"),
22824
- label: "Two-band brand footer",
22825
- layoutId: asFooterLayoutId("split"),
22826
- styleId: asFooterStyleId("brand-band"),
22827
- allowedContentPresence: ["default-footer", "default-and-blocks"],
22828
- compile: brandTwoBandFooter
22829
- }
22830
- ]);
22667
+ footerLookCatalog = defineExactCatalog()([{
22668
+ id: asFooterLookId("footer-links-quiet"),
22669
+ label: "Quiet links",
22670
+ description: "Regular-weight footer navigation with a restrained hover.",
22671
+ compile: quietFooterLinks
22672
+ }, {
22673
+ id: asFooterLookId("footer-links-emphasized"),
22674
+ label: "Emphasized links",
22675
+ description: "Medium-weight footer navigation with a clearer emphasis.",
22676
+ compile: emphasizedFooterLinks
22677
+ }]);
22831
22678
  new Map(footerLookCatalog.map((look) => [look.id, look]));
22832
22679
  }));
22833
22680
  var init_curatedChoices = __esmMin((() => {})), generatedContentFrames, userContentFrames, generatedDesignOptionCatalog, userDesignOptionCatalog;
@@ -24893,7 +24740,7 @@ var init_runtimeCompiler = __esmMin((() => {
24893
24740
  init_schema$1();
24894
24741
  init_modern_minimal();
24895
24742
  init_expandPalette();
24896
- init_personalities();
24743
+ init_styles();
24897
24744
  init_colors();
24898
24745
  init_designState();
24899
24746
  init_types$12();
@@ -25135,17 +24982,21 @@ function defineCuratedSiteStyle(input) {
25135
24982
  })),
25136
24983
  recommendedHeaderLookIds: legacyHeaderLookIds.map(asHeaderLookId),
25137
24984
  recommendedFooterLookIds: (input.recommendedFooterLookIds ?? []).map(asFooterLookId),
25138
- buttonPersonalityChoices: input.buttonPersonalityChoices,
24985
+ buttonStyleChoices: input.buttonStyleChoices,
25139
24986
  paletteRecommendations: input.paletteRecommendations,
25140
24987
  typography: input.typography ?? defaultTypographyForRecipe(input.tokenRecipes.typography),
25141
24988
  ...input.heroTypography ? { heroTypography: input.heroTypography } : {}
25142
24989
  };
25143
24990
  }
25144
- function buttonChoice(id, note) {
24991
+ function buttonChoice(styleId, note, parameters) {
24992
+ const selection = parameters === void 0 ? defaultButtonStyleSelectionFor(styleId) : buttonStyleSelectionSchema.parse({
24993
+ styleId,
24994
+ parameters
24995
+ });
25145
24996
  return note ? {
25146
- id: asButtonPersonalityId(id),
24997
+ ...selection,
25147
24998
  note
25148
- } : { id: asButtonPersonalityId(id) };
24999
+ } : selection;
25149
25000
  }
25150
25001
  function paletteRecommendation(authoringKey, note) {
25151
25002
  const valueKey = requireCuratedPaletteValueKey(asCuratedPaletteAuthoringKey(authoringKey));
@@ -25298,7 +25149,7 @@ function inferHeaderCurationFromLegacyLooks(lookIds, recipes) {
25298
25149
  }
25299
25150
  var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, accentLedQuietBudget, balancedBudget, expressiveBudget, kirtanOrnateDesignRuntimeRules, primaryGlowGradientPresetId, fulcrumDesignRuntimeRules, expressiveUnderlineInputs, ornateDarkInputs, generatedContentFrameKinds, curatedSiteStyles;
25300
25151
  var init_curatedSiteStyles = __esmMin((() => {
25301
- init_personalities();
25152
+ init_styles();
25302
25153
  init_curated();
25303
25154
  init_siteStyleDefaults$1();
25304
25155
  init_siteStyleDefaults();
@@ -25532,9 +25383,8 @@ var init_curatedSiteStyles = __esmMin((() => {
25532
25383
  "minimal-transparent",
25533
25384
  "clean-base"
25534
25385
  ],
25535
- buttonPersonalityChoices: [
25386
+ buttonStyleChoices: [
25536
25387
  buttonChoice("soft-pill"),
25537
- buttonChoice("two-tone-pill"),
25538
25388
  buttonChoice("pebble"),
25539
25389
  buttonChoice("editorial-link"),
25540
25390
  buttonChoice("brushed-wash")
@@ -25570,7 +25420,7 @@ var init_curatedSiteStyles = __esmMin((() => {
25570
25420
  "brand-solid",
25571
25421
  "clean-base"
25572
25422
  ],
25573
- buttonPersonalityChoices: [
25423
+ buttonStyleChoices: [
25574
25424
  buttonChoice("confident-chip"),
25575
25425
  buttonChoice("soft-pill"),
25576
25426
  buttonChoice("editorial-link")
@@ -25609,7 +25459,7 @@ var init_curatedSiteStyles = __esmMin((() => {
25609
25459
  "minimal-transparent",
25610
25460
  "centered-calm"
25611
25461
  ],
25612
- buttonPersonalityChoices: [
25462
+ buttonStyleChoices: [
25613
25463
  buttonChoice("editorial-link"),
25614
25464
  buttonChoice("soft-pill"),
25615
25465
  buttonChoice("brushed-wash")
@@ -25649,7 +25499,7 @@ var init_curatedSiteStyles = __esmMin((() => {
25649
25499
  "practical-utility",
25650
25500
  "clean-base"
25651
25501
  ],
25652
- buttonPersonalityChoices: [
25502
+ buttonStyleChoices: [
25653
25503
  buttonChoice("pebble"),
25654
25504
  buttonChoice("brushed-wash"),
25655
25505
  buttonChoice("confident-chip")
@@ -25710,7 +25560,7 @@ var init_curatedSiteStyles = __esmMin((() => {
25710
25560
  "serif-line",
25711
25561
  "clean-base"
25712
25562
  ],
25713
- buttonPersonalityChoices: [
25563
+ buttonStyleChoices: [
25714
25564
  buttonChoice("editorial-link"),
25715
25565
  buttonChoice("confident-chip"),
25716
25566
  buttonChoice("soft-pill")
@@ -25772,7 +25622,7 @@ var init_curatedSiteStyles = __esmMin((() => {
25772
25622
  "brand-solid",
25773
25623
  "clean-base"
25774
25624
  ],
25775
- buttonPersonalityChoices: [
25625
+ buttonStyleChoices: [
25776
25626
  buttonChoice("confident-chip"),
25777
25627
  buttonChoice("pebble"),
25778
25628
  buttonChoice("ink-stamp")
@@ -25811,7 +25661,7 @@ var init_curatedSiteStyles = __esmMin((() => {
25811
25661
  "minimal-transparent",
25812
25662
  "clean-base"
25813
25663
  ],
25814
- buttonPersonalityChoices: [
25664
+ buttonStyleChoices: [
25815
25665
  buttonChoice("soft-pill"),
25816
25666
  buttonChoice("pebble"),
25817
25667
  buttonChoice("confident-chip")
@@ -25884,7 +25734,7 @@ var init_curatedSiteStyles = __esmMin((() => {
25884
25734
  "clean-base",
25885
25735
  "centered-calm"
25886
25736
  ],
25887
- buttonPersonalityChoices: [
25737
+ buttonStyleChoices: [
25888
25738
  buttonChoice("pebble"),
25889
25739
  buttonChoice("soft-pill"),
25890
25740
  buttonChoice("editorial-link")
@@ -26003,12 +25853,8 @@ var init_curatedSiteStyles = __esmMin((() => {
26003
25853
  "serif-line",
26004
25854
  "minimal-transparent"
26005
25855
  ],
26006
- recommendedFooterLookIds: [
26007
- "footer-centered-calm",
26008
- "footer-editorial-columns",
26009
- "footer-muted-grounding"
26010
- ],
26011
- buttonPersonalityChoices: [
25856
+ recommendedFooterLookIds: ["footer-links-quiet"],
25857
+ buttonStyleChoices: [
26012
25858
  buttonChoice("soft-pill"),
26013
25859
  buttonChoice("pebble"),
26014
25860
  buttonChoice("editorial-link")
@@ -26082,7 +25928,7 @@ var init_curatedSiteStyles = __esmMin((() => {
26082
25928
  "centered-calm",
26083
25929
  "minimal-transparent"
26084
25930
  ],
26085
- buttonPersonalityChoices: [
25931
+ buttonStyleChoices: [
26086
25932
  buttonChoice("editorial-link"),
26087
25933
  buttonChoice("soft-pill"),
26088
25934
  buttonChoice("brushed-wash")
@@ -26155,8 +26001,8 @@ var init_curatedSiteStyles = __esmMin((() => {
26155
26001
  "practical-utility",
26156
26002
  "clean-base"
26157
26003
  ],
26158
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
26159
- buttonPersonalityChoices: [
26004
+ recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
26005
+ buttonStyleChoices: [
26160
26006
  buttonChoice("pebble"),
26161
26007
  buttonChoice("confident-chip"),
26162
26008
  buttonChoice("ink-stamp"),
@@ -26277,8 +26123,8 @@ var init_curatedSiteStyles = __esmMin((() => {
26277
26123
  "minimal-transparent",
26278
26124
  "serif-line"
26279
26125
  ],
26280
- recommendedFooterLookIds: ["footer-muted-grounding", "site-footer-brand-two-band"],
26281
- buttonPersonalityChoices: [
26126
+ recommendedFooterLookIds: ["footer-links-quiet", "footer-links-emphasized"],
26127
+ buttonStyleChoices: [
26282
26128
  buttonChoice("earth-pill"),
26283
26129
  buttonChoice("soft-pill"),
26284
26130
  buttonChoice("pebble"),
@@ -26349,7 +26195,7 @@ var init_curatedSiteStyles = __esmMin((() => {
26349
26195
  "floating-glass",
26350
26196
  "brand-solid"
26351
26197
  ],
26352
- buttonPersonalityChoices: [
26198
+ buttonStyleChoices: [
26353
26199
  buttonChoice("ink-stamp"),
26354
26200
  buttonChoice("confident-chip"),
26355
26201
  buttonChoice("brushed-wash"),
@@ -26404,8 +26250,8 @@ var init_curatedSiteStyles = __esmMin((() => {
26404
26250
  "transparent-overlay",
26405
26251
  "practical-utility"
26406
26252
  ],
26407
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
26408
- buttonPersonalityChoices: [
26253
+ recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
26254
+ buttonStyleChoices: [
26409
26255
  buttonChoice("showtime-pill"),
26410
26256
  buttonChoice("confident-chip"),
26411
26257
  buttonChoice("ink-stamp"),
@@ -26486,8 +26332,8 @@ var init_curatedSiteStyles = __esmMin((() => {
26486
26332
  headerStyleChoice("glass")
26487
26333
  ] },
26488
26334
  recommendedHeaderLookIds: ["minimal-transparent"],
26489
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
26490
- buttonPersonalityChoices: [
26335
+ recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
26336
+ buttonStyleChoices: [
26491
26337
  buttonChoice("ornate-ritual"),
26492
26338
  buttonChoice("joy-stamp"),
26493
26339
  buttonChoice("ink-stamp")
@@ -26540,8 +26386,8 @@ var init_curatedSiteStyles = __esmMin((() => {
26540
26386
  headerStyleChoice("glass")
26541
26387
  ] },
26542
26388
  recommendedHeaderLookIds: ["minimal-transparent"],
26543
- recommendedFooterLookIds: ["site-footer-brand-two-band", "footer-muted-grounding"],
26544
- buttonPersonalityChoices: [
26389
+ recommendedFooterLookIds: ["footer-links-emphasized", "footer-links-quiet"],
26390
+ buttonStyleChoices: [
26545
26391
  buttonChoice("joy-stamp"),
26546
26392
  buttonChoice("ink-stamp"),
26547
26393
  buttonChoice("showtime-pill")
@@ -26631,8 +26477,8 @@ var init_curatedSiteStyles = __esmMin((() => {
26631
26477
  "centered-calm",
26632
26478
  "clean-base"
26633
26479
  ],
26634
- recommendedFooterLookIds: ["footer-editorial-columns", "footer-muted-grounding"],
26635
- buttonPersonalityChoices: [
26480
+ recommendedFooterLookIds: ["footer-links-quiet"],
26481
+ buttonStyleChoices: [
26636
26482
  buttonChoice("flat-ink"),
26637
26483
  buttonChoice("confident-chip"),
26638
26484
  buttonChoice("editorial-link")
@@ -26709,14 +26555,9 @@ var init_curatedSiteStyles = __esmMin((() => {
26709
26555
  "serif-line",
26710
26556
  "clean-base"
26711
26557
  ],
26712
- recommendedFooterLookIds: [
26713
- "footer-editorial-columns",
26714
- "footer-muted-grounding",
26715
- "footer-identity-quiet"
26716
- ],
26717
- buttonPersonalityChoices: [
26718
- buttonChoice("quiet-arrow"),
26719
- buttonChoice("two-tone-pill"),
26558
+ recommendedFooterLookIds: ["footer-links-quiet"],
26559
+ buttonStyleChoices: [
26560
+ buttonChoice("quiet-arrow", void 0, { secondaryTreatment: "solid-accent" }),
26720
26561
  buttonChoice("flat-ink"),
26721
26562
  buttonChoice("editorial-link")
26722
26563
  ],
@@ -26772,10 +26613,8 @@ var init_previewCompiler = __esmMin((() => {
26772
26613
  init_schema$1();
26773
26614
  init_onColor();
26774
26615
  init_tokens();
26775
- init_personalities();
26776
26616
  init_curated();
26777
26617
  init_resolveSelection();
26778
- init_curatedChoices();
26779
26618
  init_curatedSiteStyles();
26780
26619
  init_resolver();
26781
26620
  init_types$12();
@@ -26788,6 +26627,7 @@ var init_previewCompiler = __esmMin((() => {
26788
26627
  init_pageDesignEditorModel();
26789
26628
  init_pageDesignIntent();
26790
26629
  init_previewCustomization();
26630
+ init_curatedChoices();
26791
26631
  }));
26792
26632
  var init_contentTemplateRuntimeCompiler = __esmMin((() => {
26793
26633
  init_pageDesignEditorModel();
@@ -29314,29 +29154,7 @@ var init_ctaRow = __esmMin((() => {
29314
29154
  fields: [createCtasRepeater({
29315
29155
  label: "Calls to action",
29316
29156
  itemLabel: "CTA",
29317
- maxItems: 3,
29318
- button: { variants: [
29319
- {
29320
- value: "primary",
29321
- label: "Primary"
29322
- },
29323
- {
29324
- value: "secondary",
29325
- label: "Secondary"
29326
- },
29327
- {
29328
- value: "outline",
29329
- label: "Outline"
29330
- },
29331
- {
29332
- value: "link",
29333
- label: "Link"
29334
- },
29335
- {
29336
- value: "accent",
29337
- label: "Accent"
29338
- }
29339
- ] }
29157
+ maxItems: 3
29340
29158
  })],
29341
29159
  layout: [ctaRow({
29342
29160
  collectionPath: "content.ctas",
@@ -29359,10 +29177,6 @@ var init_heroCtaRow = __esmMin((() => {
29359
29177
  defaultValue: [],
29360
29178
  button: {
29361
29179
  variants: [
29362
- {
29363
- value: "default",
29364
- label: "Default"
29365
- },
29366
29180
  {
29367
29181
  value: "primary",
29368
29182
  label: "Primary"
@@ -29374,9 +29188,17 @@ var init_heroCtaRow = __esmMin((() => {
29374
29188
  {
29375
29189
  value: "outline",
29376
29190
  label: "Outline"
29191
+ },
29192
+ {
29193
+ value: "ghost",
29194
+ label: "Ghost"
29195
+ },
29196
+ {
29197
+ value: "accent",
29198
+ label: "Accent"
29377
29199
  }
29378
29200
  ],
29379
- defaultVariant: "default",
29201
+ defaultVariant: "primary",
29380
29202
  includeSize: true,
29381
29203
  defaultSize: "lg"
29382
29204
  }
@@ -29969,11 +29791,13 @@ var init_blogFeaturedPost = __esmMin((() => {
29969
29791
  as: "p",
29970
29792
  style: textColorStyle("text/80")
29971
29793
  }, bind("post.excerpt", { fallback: "Select a blog post to display its preview." })),
29972
- link({
29973
- className: "rb-inline-flex rb-items-center rb-caption rb-hover-opacity-80",
29974
- style: textColorStyle("primary"),
29975
- href: { $bind: { from: "post.path" } }
29976
- }, [text({ as: "strong" }, props({ value: "Read more →" }))])
29794
+ button({
29795
+ className: "rb-self-start",
29796
+ href: { $bind: { from: "post.path" } },
29797
+ variantId: "ghost",
29798
+ size: "sm",
29799
+ linkRequired: true
29800
+ }, [text({ as: "span" }, props({ value: "Read more" }))])
29977
29801
  ])], when("post")), stack({
29978
29802
  gap: "sm",
29979
29803
  className: "rb-rounded-xl rb-border rb-border-dashed rb-p-6",
@@ -31307,21 +31131,7 @@ var init_newsletterForm$1 = __esmMin((() => {
31307
31131
  createButtonVariantField({
31308
31132
  id: "buttonVariant",
31309
31133
  label: "Button style",
31310
- defaultValue: "primary",
31311
- variants: [
31312
- {
31313
- value: "primary",
31314
- label: "Primary"
31315
- },
31316
- {
31317
- value: "secondary",
31318
- label: "Secondary"
31319
- },
31320
- {
31321
- value: "outline",
31322
- label: "Outline"
31323
- }
31324
- ]
31134
+ defaultValue: "primary"
31325
31135
  }),
31326
31136
  {
31327
31137
  id: "successMessage",
@@ -32181,6 +31991,7 @@ function getShopDisplayForItems(render, items) {
32181
31991
  }
32182
31992
  var shopModeSchema, contentEntrySchema$2, shopSourceSchema, productVariantOptionDisplaySchema, productCardDisplaySchema, productListDisplaySchema, productDetailDisplaySchema, passCardDisplaySchema, membershipCardDisplaySchema, passesMembershipsDisplaySchema, cartLineDisplaySchema, cartDisplaySchema, checkoutDisplaySchema, passesMembershipsHydrationSchema, productListHydrationSchema, productDetailHydrationSchema, cartHydrationSchema, checkoutHydrationSchema, passesMembershipsRenderSchema, productListRenderSchema, productDetailRenderSchema, cartRenderSchema, checkoutRenderSchema, shopIslandMetaCodec, shopIslandMetaKeys, shopBlockRuntime, productListBlockRuntime, productDetailBlockRuntime, cartBlockRuntime, checkoutBlockRuntime, shopInteractiveIslandPropsCodec, productListInteractiveIslandPropsCodec, productDetailInteractiveIslandPropsCodec, cartInteractiveIslandPropsCodec, checkoutInteractiveIslandPropsCodec;
32183
31993
  var init_shop_interactive = __esmMin((() => {
31994
+ init_buttonRoles();
32184
31995
  init_shop_shared();
32185
31996
  init_shared$1();
32186
31997
  init_display();
@@ -32218,12 +32029,7 @@ var init_shop_interactive = __esmMin((() => {
32218
32029
  showPrices: z$1.boolean().optional(),
32219
32030
  showValidityPeriod: z$1.boolean().optional(),
32220
32031
  showPricePerCredit: z$1.boolean().nullable().optional(),
32221
- buttonVariant: z$1.enum([
32222
- "primary",
32223
- "secondary",
32224
- "outline",
32225
- "link"
32226
- ]).optional(),
32032
+ buttonVariant: blockButtonRoleSchema.optional(),
32227
32033
  passesHeading: z$1.string().optional(),
32228
32034
  membershipsHeading: z$1.string().optional(),
32229
32035
  buyButtonText: z$1.string().optional(),
@@ -32368,12 +32174,7 @@ var init_shop_interactive = __esmMin((() => {
32368
32174
  passes: z$1.array(publicPassProductSchema),
32369
32175
  memberships: z$1.array(publicMembershipProductSchema),
32370
32176
  passPurchaseMode: z$1.enum(["add_to_cart", "buy_now"]),
32371
- buttonVariant: z$1.enum([
32372
- "primary",
32373
- "secondary",
32374
- "outline",
32375
- "link"
32376
- ])
32177
+ buttonVariant: blockButtonRoleSchema
32377
32178
  });
32378
32179
  productListHydrationSchema = z$1.object({
32379
32180
  products: z$1.array(publicProductSchema),
@@ -33147,23 +32948,7 @@ const courseRegistrationBlockDefinition = {
33147
32948
  defaultValue: "Sign up",
33148
32949
  maxLength: 40
33149
32950
  },
33150
- createButtonVariantField({
33151
- description: "Choose a button style from your theme",
33152
- variants: [
33153
- {
33154
- value: "primary",
33155
- label: "Primary"
33156
- },
33157
- {
33158
- value: "secondary",
33159
- label: "Secondary"
33160
- },
33161
- {
33162
- value: "outline",
33163
- label: "Outline"
33164
- }
33165
- ]
33166
- })
32951
+ createButtonVariantField()
33167
32952
  ],
33168
32953
  layout: [styledSection({
33169
32954
  baseClass: "",
@@ -33942,23 +33727,7 @@ const eventRegistrationBlockDefinition = {
33942
33727
  defaultValue: "Complete Registration",
33943
33728
  maxLength: 40
33944
33729
  },
33945
- createButtonVariantField({
33946
- description: "Choose a button style from your theme",
33947
- variants: [
33948
- {
33949
- value: "primary",
33950
- label: "Primary"
33951
- },
33952
- {
33953
- value: "secondary",
33954
- label: "Secondary"
33955
- },
33956
- {
33957
- value: "outline",
33958
- label: "Outline"
33959
- }
33960
- ]
33961
- })
33730
+ createButtonVariantField()
33962
33731
  ],
33963
33732
  layout: [styledSection({
33964
33733
  baseClass: "",
@@ -36255,6 +36024,7 @@ var init_newsletter_form_interactive = __esmMin((() => {
36255
36024
  init_runtime();
36256
36025
  init_newsletter_signup_destination();
36257
36026
  init_newsletter_form_types();
36027
+ init_buttonRoles();
36258
36028
  newsletterPresetSchema = z$1.enum([
36259
36029
  "emailOnly",
36260
36030
  "emailName",
@@ -36262,11 +36032,7 @@ var init_newsletter_form_interactive = __esmMin((() => {
36262
36032
  "emailNameCompany"
36263
36033
  ]);
36264
36034
  newsletterDestinationProviderSchema = z$1.enum(["riverbank", "mailchimp"]);
36265
- newsletterButtonVariantSchema = z$1.enum([
36266
- "primary",
36267
- "secondary",
36268
- "outline"
36269
- ]);
36035
+ newsletterButtonVariantSchema = blockButtonRoleSchema;
36270
36036
  newsletterFieldSchema = z$1.object({
36271
36037
  id: z$1.string(),
36272
36038
  type: z$1.enum(["email", "text"]),
@@ -42317,7 +42083,7 @@ function discountCodeUiReducer(state, event) {
42317
42083
  }
42318
42084
  var initialDiscountCodeUiState;
42319
42085
  var init_useDiscountCodeUi_state = __esmMin((() => {
42320
- init_types$18();
42086
+ init_types$17();
42321
42087
  initialDiscountCodeUiState = {
42322
42088
  discountUiOpen: false,
42323
42089
  discountCode: "",
@@ -105693,7 +105459,7 @@ function resolveHasCoursePayment(pricing) {
105693
105459
  if (pricing.selectedOption) return pricing.selectedRequiresPayment;
105694
105460
  return pricing.hasPaidSelection;
105695
105461
  }
105696
- function useCourseRegistrationWizard(props) {
105462
+ function useCourseRegistrationWizard(props, options = {}) {
105697
105463
  const api = useBlockApi();
105698
105464
  const { contentEntry, courses, entrySubrouteContext, subject } = props;
105699
105465
  const scopedCourses = useMemo(() => {
@@ -105940,21 +105706,34 @@ function useCourseRegistrationWizard(props) {
105940
105706
  setStep("enter-details");
105941
105707
  };
105942
105708
  const handleSubmit = async () => {
105943
- if (!selectedCourse) return;
105944
- if (!handleValidateForm()) return;
105709
+ if (!selectedCourse) return {
105710
+ kind: "blocked",
105711
+ message: "Choose an available set of dates to continue."
105712
+ };
105713
+ if (!handleValidateForm()) return { kind: "validation-failed" };
105945
105714
  if (missingPricingSelectionMessage) {
105946
105715
  setErrorMessage(missingPricingSelectionMessage);
105947
105716
  setStep("error");
105948
- return;
105717
+ return {
105718
+ kind: "blocked",
105719
+ message: missingPricingSelectionMessage
105720
+ };
105949
105721
  }
105950
105722
  const requiresPayment = selectedCoursePricing?.selectedRequiresPayment ?? false;
105951
105723
  const canUseMembership = requiresPayment && selectedCourse.acceptsMemberships && portalAuthState === "authenticated" && eligibleMemberships.length > 0;
105952
105724
  if (showSpamProtection && !altchaSolution) {
105953
- setErrorMessage("Please complete the verification check.");
105725
+ const message = "Please complete the verification check.";
105726
+ setErrorMessage(message);
105954
105727
  setStep("error");
105955
- return;
105728
+ return {
105729
+ kind: "blocked",
105730
+ message
105731
+ };
105956
105732
  }
105957
- if (!waitlistClaim.claim && courseEligibility?.isFull && !courseEligibility.canJoinWaitlist && showSoldOutCourseError()) return;
105733
+ if (!waitlistClaim.claim && courseEligibility?.isFull && !courseEligibility.canJoinWaitlist && showSoldOutCourseError()) return {
105734
+ kind: "blocked",
105735
+ message: courseEligibility.reason ?? "This course is fully booked."
105736
+ };
105958
105737
  if (courseEligibility?.canJoinWaitlist) {
105959
105738
  setStep("submitting");
105960
105739
  try {
@@ -105975,15 +105754,20 @@ function useCourseRegistrationWizard(props) {
105975
105754
  usedMembership: false
105976
105755
  });
105977
105756
  setStep(result.status === "waitlist" ? "waitlist" : "success");
105757
+ return { kind: "state-updated" };
105978
105758
  } catch (error) {
105979
- setErrorMessage(error instanceof Error ? error.message : "Booking failed");
105759
+ const message = error instanceof Error ? error.message : "Booking failed";
105760
+ setErrorMessage(message);
105980
105761
  setStep("error");
105762
+ return {
105763
+ kind: "failed",
105764
+ message
105765
+ };
105981
105766
  }
105982
- return;
105983
105767
  }
105984
105768
  if (requiresPayment && canUseMembership) {
105985
105769
  setStep("select-payment");
105986
- return;
105770
+ return { kind: "state-updated" };
105987
105771
  }
105988
105772
  if (requiresPayment) {
105989
105773
  setStep("submitting");
@@ -106009,16 +105793,24 @@ function useCourseRegistrationWizard(props) {
106009
105793
  usedMembership: false
106010
105794
  });
106011
105795
  setStep("success");
106012
- return;
105796
+ return { kind: "state-updated" };
106013
105797
  }
106014
105798
  if (!checkoutResult.checkoutUrl) throw new Error("Checkout URL missing");
106015
105799
  setStep("redirecting");
106016
- window.location.href = checkoutResult.checkoutUrl;
106017
- return;
105800
+ if (options.onCheckoutRedirect) options.onCheckoutRedirect(checkoutResult.checkoutUrl);
105801
+ else window.location.href = checkoutResult.checkoutUrl;
105802
+ return {
105803
+ kind: "checkout-redirect",
105804
+ checkoutUrl: checkoutResult.checkoutUrl
105805
+ };
106018
105806
  } catch (error) {
106019
- setErrorMessage(error instanceof Error ? error.message : "Checkout failed");
105807
+ const message = error instanceof Error ? error.message : "Checkout failed";
105808
+ setErrorMessage(message);
106020
105809
  setStep("error");
106021
- return;
105810
+ return {
105811
+ kind: "failed",
105812
+ message
105813
+ };
106022
105814
  }
106023
105815
  }
106024
105816
  setStep("submitting");
@@ -106040,35 +105832,58 @@ function useCourseRegistrationWizard(props) {
106040
105832
  usedMembership: result.paymentMethod === "membership"
106041
105833
  });
106042
105834
  setStep(result.status === "waitlist" ? "waitlist" : "success");
105835
+ return { kind: "state-updated" };
106043
105836
  } catch (error) {
106044
- setErrorMessage(error instanceof Error ? error.message : "Booking failed");
105837
+ const message = error instanceof Error ? error.message : "Booking failed";
105838
+ setErrorMessage(message);
106045
105839
  setStep("error");
105840
+ return {
105841
+ kind: "failed",
105842
+ message
105843
+ };
106046
105844
  }
106047
105845
  };
106048
105846
  const handlePaymentContinue = async () => {
106049
- if (!selectedCourse) return;
106050
- if (!handleValidateForm()) return;
105847
+ if (!selectedCourse) return {
105848
+ kind: "blocked",
105849
+ message: "Choose an available set of dates to continue."
105850
+ };
105851
+ if (!handleValidateForm()) return { kind: "validation-failed" };
106051
105852
  if (missingPricingSelectionMessage) {
106052
105853
  setErrorMessage(missingPricingSelectionMessage);
106053
105854
  setStep("error");
106054
- return;
105855
+ return {
105856
+ kind: "blocked",
105857
+ message: missingPricingSelectionMessage
105858
+ };
106055
105859
  }
106056
105860
  const requiresPayment = selectedCoursePricing?.selectedRequiresPayment ?? false;
106057
- if (!waitlistClaim.claim && courseEligibility?.isFull && !courseEligibility.canJoinWaitlist && showSoldOutCourseError()) return;
105861
+ if (!waitlistClaim.claim && courseEligibility?.isFull && !courseEligibility.canJoinWaitlist && showSoldOutCourseError()) return {
105862
+ kind: "blocked",
105863
+ message: courseEligibility.reason ?? "This course is fully booked."
105864
+ };
106058
105865
  if (!requiresPayment) {
106059
105866
  setStep("enter-details");
106060
- return;
105867
+ return { kind: "state-updated" };
106061
105868
  }
106062
105869
  if (showSpamProtection && !altchaSolution) {
106063
- setErrorMessage("Please complete the verification check.");
105870
+ const message = "Please complete the verification check.";
105871
+ setErrorMessage(message);
106064
105872
  setStep("error");
106065
- return;
105873
+ return {
105874
+ kind: "blocked",
105875
+ message
105876
+ };
106066
105877
  }
106067
105878
  if (paymentChoice === "membership") {
106068
105879
  if (!selectedMembershipId) {
106069
- setErrorMessage("Select a membership to enroll.");
105880
+ const message = "Select a membership to sign up.";
105881
+ setErrorMessage(message);
106070
105882
  setStep("error");
106071
- return;
105883
+ return {
105884
+ kind: "blocked",
105885
+ message
105886
+ };
106072
105887
  }
106073
105888
  setStep("submitting");
106074
105889
  try {
@@ -106090,11 +105905,16 @@ function useCourseRegistrationWizard(props) {
106090
105905
  usedMembership: true
106091
105906
  });
106092
105907
  setStep(result.status === "waitlist" ? "waitlist" : "success");
105908
+ return { kind: "state-updated" };
106093
105909
  } catch (error) {
106094
- setErrorMessage(error instanceof Error ? error.message : "Booking failed");
105910
+ const message = error instanceof Error ? error.message : "Booking failed";
105911
+ setErrorMessage(message);
106095
105912
  setStep("error");
105913
+ return {
105914
+ kind: "failed",
105915
+ message
105916
+ };
106096
105917
  }
106097
- return;
106098
105918
  }
106099
105919
  setStep("submitting");
106100
105920
  try {
@@ -106119,14 +105939,24 @@ function useCourseRegistrationWizard(props) {
106119
105939
  usedMembership: false
106120
105940
  });
106121
105941
  setStep("success");
106122
- return;
105942
+ return { kind: "state-updated" };
106123
105943
  }
106124
105944
  if (!checkoutResult.checkoutUrl) throw new Error("Checkout URL missing");
106125
105945
  setStep("redirecting");
106126
- window.location.href = checkoutResult.checkoutUrl;
105946
+ if (options.onCheckoutRedirect) options.onCheckoutRedirect(checkoutResult.checkoutUrl);
105947
+ else window.location.href = checkoutResult.checkoutUrl;
105948
+ return {
105949
+ kind: "checkout-redirect",
105950
+ checkoutUrl: checkoutResult.checkoutUrl
105951
+ };
106127
105952
  } catch (error) {
106128
- setErrorMessage(error instanceof Error ? error.message : "Checkout failed");
105953
+ const message = error instanceof Error ? error.message : "Checkout failed";
105954
+ setErrorMessage(message);
106129
105955
  setStep("error");
105956
+ return {
105957
+ kind: "failed",
105958
+ message
105959
+ };
106130
105960
  }
106131
105961
  };
106132
105962
  const handleRetry = () => {
@@ -107268,7 +107098,7 @@ function checkoutFormForDiscountUiState(form, discountUiState) {
107268
107098
  var EMAIL_PATTERN;
107269
107099
  var init_shop_checkout_form = __esmMin((() => {
107270
107100
  init_src$3();
107271
- init_types$18();
107101
+ init_types$17();
107272
107102
  EMAIL_PATTERN = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
107273
107103
  }));
107274
107104
  //#endregion
@@ -116344,8 +116174,16 @@ init_useEventRegistrationWizard();
116344
116174
  init_event_registration_headless_state();
116345
116175
  init_ticketSelectionLines();
116346
116176
  init_eventPaymentOptions();
116177
+ var init_whole_series_registration_headless_planning = __esmMin((() => {}));
116178
+ var init_useHeadlessWholeSeriesRegistrationFlow = __esmMin((() => {
116179
+ init_src();
116180
+ init_api();
116181
+ init_useCourseRegistrationWizard();
116182
+ init_whole_series_registration_headless_planning();
116183
+ }));
116347
116184
  //#endregion
116348
116185
  //#region ../blocks/src/system/runtime/hooks/useBookingFormConfig.state.ts
116186
+ init_useHeadlessWholeSeriesRegistrationFlow();
116349
116187
  init_dist$1();
116350
116188
  Object.freeze({
116351
116189
  formConfig: null,
@@ -117272,6 +117110,8 @@ var init_locationMap = __esmMin((() => {
117272
117110
  var init_course_registration = __esmMin((() => {
117273
117111
  init_api();
117274
117112
  init_course_registration_client();
117113
+ init_useHeadlessWholeSeriesRegistrationFlow();
117114
+ init_client();
117275
117115
  }));
117276
117116
  //#endregion
117277
117117
  //#region src/rendering/islands/enhancers/courseRegistration.tsx