@riverbankcms/sdk 0.108.0 → 0.109.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 (189) hide show
  1. package/README.md +21 -1
  2. package/dist/{PreviewEditorSidebar-BBT-kZAM.mjs → PreviewEditorSidebar-DWqwfy3_.mjs} +7 -22
  3. package/dist/{PreviewEditorUI-D69xNKT2.mjs → PreviewEditorUI-B7OL4sfR.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-RRu7wyQ5.mjs → PreviewQueryProvider-D0y2l8JN.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-CuDjXH6o.mjs → SdkPreviewModeRuntime-D8Gt9Gbe.mjs} +212 -153
  6. package/dist/{SiteChromeCustomizeContext-BQUY2dEk.mjs → SiteChromeCustomizeContext-DUpalEdL.mjs} +1919 -1032
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +11244 -10741
  8. package/dist/_dts/api/src/bookingAdjustments.d.ts +5 -0
  9. package/dist/_dts/api/src/bookingOperations.d.ts +4 -0
  10. package/dist/_dts/api/src/bookingRecords.d.ts +2 -17
  11. package/dist/_dts/api/src/bookingRefundOutcomes.d.ts +6 -6
  12. package/dist/_dts/api/src/common/envelope.d.ts +7 -0
  13. package/dist/_dts/api/src/courses.d.ts +1 -0
  14. package/dist/_dts/api/src/customerMembershipOutcomes.d.ts +5 -5
  15. package/dist/_dts/api/src/endpoints.d.ts +35 -0
  16. package/dist/_dts/api/src/index.d.ts +2 -2
  17. package/dist/_dts/api/src/participantMessaging.d.ts +18 -12
  18. package/dist/_dts/api/src/publicExperienceEndpoints.d.ts +1 -0
  19. package/dist/_dts/api/src/sdkContracts.d.ts +247 -1
  20. package/dist/_dts/api/src/siteInfrastructure.d.ts +13 -0
  21. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +1 -5
  22. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +29 -1
  23. package/dist/_dts/api/src/siteRuntimeEndpoints.d.ts +33 -27
  24. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientField.d.ts +9 -0
  25. package/dist/_dts/block-form/src/widgets/BackgroundGradientWidget/BackgroundGradientWidget.d.ts +3 -4
  26. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +4 -4
  27. package/dist/_dts/blocks/src/index.d.ts +1 -1
  28. package/dist/_dts/blocks/src/system/blocks/audio-player.d.ts +3 -0
  29. package/dist/_dts/blocks/src/system/blocks/body-text.d.ts +3 -0
  30. package/dist/_dts/blocks/src/system/blocks/contact-newsletter.d.ts +3 -0
  31. package/dist/_dts/blocks/src/system/blocks/course-registration.d.ts +1 -22
  32. package/dist/_dts/blocks/src/system/blocks/cta-full.d.ts +3 -0
  33. package/dist/_dts/blocks/src/system/blocks/event-registration.d.ts +1 -22
  34. package/dist/_dts/blocks/src/system/blocks/file-download.d.ts +3 -0
  35. package/dist/_dts/blocks/src/system/blocks/form.d.ts +3 -0
  36. package/dist/_dts/blocks/src/system/blocks/image-gallery.d.ts +3 -0
  37. package/dist/_dts/blocks/src/system/blocks/media-text.d.ts +3 -0
  38. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +3 -0
  39. package/dist/_dts/blocks/src/system/blocks/site-header.d.ts +3 -0
  40. package/dist/_dts/blocks/src/system/blocks/team-members.d.ts +3 -0
  41. package/dist/_dts/blocks/src/system/blocks/testimonials.d.ts +3 -0
  42. package/dist/_dts/blocks/src/system/blocks/video-grid.d.ts +3 -0
  43. package/dist/_dts/blocks/src/system/constants/background.d.ts +1 -1
  44. package/dist/_dts/blocks/src/system/customize/backgrounds.d.ts +16 -6
  45. package/dist/_dts/blocks/src/system/defineBlock.d.ts +9 -1
  46. package/dist/_dts/blocks/src/system/fields/ctas.d.ts +8 -0
  47. package/dist/_dts/blocks/src/system/manifest/schema.d.ts +31 -0
  48. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +6 -6
  49. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +3 -3
  50. package/dist/_dts/blocks/src/system/runtime/nodes/shared/contract-schemas.d.ts +1 -1
  51. package/dist/_dts/content-model/src/content-types/entryValidation.d.ts +31 -0
  52. package/dist/_dts/content-model/src/content-types/scaffold.d.ts +58 -0
  53. package/dist/_dts/content-model/src/content-types/sentinels.d.ts +36 -0
  54. package/dist/_dts/content-model/src/index.d.ts +3 -0
  55. package/dist/_dts/core/src/booking-date-time.d.ts +8 -0
  56. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +3071 -3157
  57. package/dist/_dts/media-core/src/fileMimeDetection.d.ts +16 -0
  58. package/dist/_dts/media-core/src/fileStorage.d.ts +8 -0
  59. package/dist/_dts/media-core/src/storagePathDomain.d.ts +2 -0
  60. package/dist/_dts/media-core/src/uploadVerificationContract.d.ts +3 -0
  61. package/dist/_dts/preview-next/src/client/blocks/BlockToolbar.d.ts +2 -0
  62. package/dist/_dts/preview-next/src/client/preview/StyleConfigurator.state.d.ts +1 -0
  63. package/dist/_dts/preview-next/src/client/preview/styleConfiguratorApplyPayload.d.ts +1 -1
  64. package/dist/_dts/sdk/src/cli/commands/audit.d.ts +1 -1
  65. package/dist/_dts/sdk/src/cli/commands/compare.d.ts +1 -1
  66. package/dist/_dts/sdk/src/cli/commands/deploy.d.ts +1 -1
  67. package/dist/_dts/sdk/src/cli/commands/drafts.d.ts +18 -0
  68. package/dist/_dts/sdk/src/cli/commands/entry.d.ts +15 -0
  69. package/dist/_dts/sdk/src/cli/commands/init-docs.d.ts +2 -2
  70. package/dist/_dts/sdk/src/cli/commands/publish-all.d.ts +1 -1
  71. package/dist/_dts/sdk/src/cli/commands/pull.d.ts +1 -0
  72. package/dist/_dts/sdk/src/cli/commands/push/execute/diff.d.ts +1 -1
  73. package/dist/_dts/sdk/src/cli/commands/push/options.d.ts +3 -0
  74. package/dist/_dts/sdk/src/cli/commands/push-execute.d.ts +12 -1
  75. package/dist/_dts/sdk/src/cli/commands/setup.d.ts +1 -0
  76. package/dist/_dts/sdk/src/cli/commands/verify.d.ts +1 -0
  77. package/dist/_dts/sdk/src/cli/helpers.d.ts +22 -1
  78. package/dist/_dts/sdk/src/cli/index.d.ts +4 -0
  79. package/dist/_dts/sdk/src/cli/output.d.ts +88 -0
  80. package/dist/_dts/sdk/src/cli/program.d.ts +29 -0
  81. package/dist/_dts/sdk/src/cli/push-config.d.ts +1 -1
  82. package/dist/_dts/sdk/src/client/management/catalog.d.ts +10 -0
  83. package/dist/_dts/sdk/src/client/management/http.d.ts +7 -1
  84. package/dist/_dts/sdk/src/client/management/index.d.ts +1 -1
  85. package/dist/_dts/sdk/src/client/management/types.d.ts +43 -19
  86. package/dist/_dts/sdk/src/date-time/index.d.ts +68 -0
  87. package/dist/_dts/sdk/src/public-api/contracts.d.ts +2 -0
  88. package/dist/_dts/sdk/src/version.d.ts +1 -1
  89. package/dist/_dts/site-commands/src/commands.d.ts +893 -823
  90. package/dist/_dts/theme-core/src/accordions/types.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/buttons/core.d.ts +15 -46
  92. package/dist/_dts/theme-core/src/buttons/effectClassification.d.ts +147 -0
  93. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +2 -3
  94. package/dist/_dts/theme-core/src/buttons/generateDefaultButtonSystem.d.ts +1 -1
  95. package/dist/_dts/theme-core/src/buttons/index.d.ts +1 -0
  96. package/dist/_dts/theme-core/src/buttons/personalities/types.d.ts +44 -32
  97. package/dist/_dts/theme-core/src/buttons/presets.d.ts +4 -25
  98. package/dist/_dts/theme-core/src/buttons/resolveButtonColourStates.d.ts +100 -0
  99. package/dist/_dts/theme-core/src/buttons/resolvedButtonCss.d.ts +16 -0
  100. package/dist/_dts/theme-core/src/buttons/types.d.ts +101 -83
  101. package/dist/_dts/theme-core/src/cards/types.d.ts +16 -16
  102. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  103. package/dist/_dts/theme-core/src/gradients/presets.d.ts +200 -8
  104. package/dist/_dts/theme-core/src/gradients/utils.d.ts +6 -2
  105. package/dist/_dts/theme-core/src/mock-themes/all.d.ts +87 -126
  106. package/dist/_dts/theme-core/src/mock-themes/modern-minimal.d.ts +1 -1
  107. package/dist/_dts/theme-core/src/navigation/types.d.ts +2 -2
  108. package/dist/_dts/theme-core/src/palette/curated/index.d.ts +2 -2
  109. package/dist/_dts/theme-core/src/palette/curated/types.d.ts +5 -8
  110. package/dist/_dts/theme-core/src/palette/index.d.ts +0 -1
  111. package/dist/_dts/theme-core/src/schema.d.ts +112 -138
  112. package/dist/_dts/theme-core/src/site-styles/backgroundAppearance.d.ts +2 -2
  113. package/dist/_dts/theme-core/src/site-styles/designState.d.ts +10 -10
  114. package/dist/_dts/theme-core/src/site-styles/pageDesignEditorModel.d.ts +3 -2
  115. package/dist/_dts/theme-core/src/site-styles/pageDesignIntent.d.ts +13 -6
  116. package/dist/_dts/theme-core/src/site-styles/runtimeCompiler.d.ts +29 -8
  117. package/dist/_dts/theme-core/src/site-styles/styleTags.d.ts +2 -2
  118. package/dist/cli/index.mjs +67956 -66745
  119. package/dist/cli/init-docs/content/cli-reference.md +50 -7
  120. package/dist/cli/init-docs/content/content-management.md +7 -4
  121. package/dist/cli/init-docs/content/workflow-publish.md +5 -1
  122. package/dist/client/{DiscountCodeDisclosure-D6TOf6Hi.mjs → DiscountCodeDisclosure-DU1ygxU2.mjs} +1 -1
  123. package/dist/client/{EventCombined.client-Dao3zxRk.mjs → EventCombined.client-DB5zagCo.mjs} +3 -3
  124. package/dist/client/{EventListing.client-B2NNt4y1.mjs → EventListing.client-CTX9JHBL.mjs} +2 -2
  125. package/dist/client/{LeafletStaticMap-BhwFo16w.mjs → LeafletStaticMap-BYImhgiB.mjs} +1 -1
  126. package/dist/client/{MagicLinkForm-BWnB7cMR.mjs → MagicLinkForm-CRkw_M3l.mjs} +2 -2
  127. package/dist/client/{StepIndicator-TzRiQ0BY.mjs → StepIndicator-BnmVBJJh.mjs} +2 -2
  128. package/dist/client/{accordion-BPy-AJ4_.mjs → accordion-CeGreumd.mjs} +1 -1
  129. package/dist/client/{bookingForm-BL4PGZds.mjs → bookingForm-CSzFNrpN.mjs} +6 -6
  130. package/dist/client/bookings.mjs +512 -252
  131. package/dist/client/{buttons-EBjyslaX.mjs → buttons-DoFV7KDL.mjs} +493 -230
  132. package/dist/client/{carousel-C2b7Cn9-.mjs → carousel-B2jDtogf.mjs} +1 -1
  133. package/dist/client/{cart-BQcbXIVD.mjs → cart-D-jZ-vaY.mjs} +3 -3
  134. package/dist/client/{checkout-DEmpGRJu.mjs → checkout-Dza-LA7N.mjs} +3 -3
  135. package/dist/client/client.mjs +1673 -785
  136. package/dist/client/{colorStyles-jZS6KfkP.mjs → colorStyles-CrgzoXsm.mjs} +1 -30
  137. package/dist/client/{courseRegistration-BqRZPmsq.mjs → courseRegistration-TYkNychb.mjs} +7 -7
  138. package/dist/client/{eventCalendar-B8N_tSl5.mjs → eventCalendar-BI_90SsT.mjs} +5 -5
  139. package/dist/client/{eventCombined-Gjn6gtq7.mjs → eventCombined-mNrpryE9.mjs} +2 -2
  140. package/dist/client/{eventDetails-M-VCxA-r.mjs → eventDetails-D4GVlCIY.mjs} +3 -3
  141. package/dist/client/{eventListing-DR19hqYi.mjs → eventListing-YhKN018y.mjs} +2 -2
  142. package/dist/client/{eventRegistration-BR02a0k3.mjs → eventRegistration-CdHGtilr.mjs} +7 -7
  143. package/dist/client/foregroundContract-xICPq59x.mjs +31 -0
  144. package/dist/client/{form-LY2xIbwg.mjs → form-AcAL45rA.mjs} +2 -2
  145. package/dist/client/{headerSection-CYwwXJfh.mjs → headerSection-uEC52ueD.mjs} +3 -3
  146. package/dist/client/hooks.mjs +890 -497
  147. package/dist/client/{locationMap-DWnBXrFq.mjs → locationMap-_wJDSUYe.mjs} +3 -3
  148. package/dist/client/{media-DHtSxS5V.mjs → media-BK0O3b-U.mjs} +3 -2
  149. package/dist/client/{newsletterForm-D9s-fQ2P.mjs → newsletterForm-DrArsb2B.mjs} +2 -2
  150. package/dist/client/{pricing-DDq80oYc.mjs → pricing-BSYVghwo.mjs} +1 -1
  151. package/dist/client/{productDetail-B0SbWd45.mjs → productDetail-Dyk90sMs.mjs} +3 -3
  152. package/dist/client/{productList-PwYlZn0y.mjs → productList-BCKThwAI.mjs} +3 -3
  153. package/dist/client/{propsDecoder-BRWBiH7i.mjs → propsDecoder-CkXxkdSR.mjs} +63 -24
  154. package/dist/client/rendering/client.mjs +1034 -486
  155. package/dist/client/rendering/islands.mjs +19 -19
  156. package/dist/client/rendering.mjs +1832 -760
  157. package/dist/client/{shop-CMwZPYME.mjs → shop-DeltVH10.mjs} +6 -6
  158. package/dist/client/{shop-commerce-BuxsFate.mjs → shop-commerce-BD9Jsm2Z.mjs} +6 -6
  159. package/dist/client/{shop-commerce-store-boYlEJ91.mjs → shop-commerce-store-CmXD6FDS.mjs} +1 -1
  160. package/dist/client/{shopShared-D2naaOes.mjs → shopShared-B8v-lH_F.mjs} +2 -2
  161. package/dist/client/{useDiscountCodeUi-D9RHpVoj.mjs → useDiscountCodeUi-DbWJN8ld.mjs} +1 -1
  162. package/dist/client/{useEventFilters-igGiK1re.mjs → useEventFilters-EJIMUnqT.mjs} +46 -69
  163. package/dist/client/{usePolling-CI7MbsFB.mjs → usePolling-Cmh14fc7.mjs} +2 -2
  164. package/dist/preview-next/before-render.mjs +35 -0
  165. package/dist/preview-next/client/runtime.mjs +4 -4
  166. package/dist/preview-next/middleware.mjs +35 -0
  167. package/dist/{previewAuthStore-a_cBD28m.mjs → previewAuthStore-CTO7CRPk.mjs} +35 -0
  168. package/dist/{sdk-runtime-MBzD-GmP.mjs → sdk-runtime-Dou0GAav.mjs} +2 -2
  169. package/dist/{separator-5ahRBC85.mjs → separator-CI5wZNXT.mjs} +1 -1
  170. package/dist/server/components.mjs +1832 -784
  171. package/dist/server/config-validation.mjs +890 -497
  172. package/dist/server/config.mjs +890 -497
  173. package/dist/server/data.mjs +890 -497
  174. package/dist/server/date-time.mjs +386 -0
  175. package/dist/server/index.mjs +36 -1
  176. package/dist/server/next.mjs +1868 -785
  177. package/dist/server/page-converter.mjs +849 -285
  178. package/dist/server/prebuild.mjs +1 -1
  179. package/dist/server/rendering/server.mjs +1553 -718
  180. package/dist/server/rendering.mjs +1832 -784
  181. package/dist/server/routing.mjs +933 -522
  182. package/dist/server/server.mjs +929 -501
  183. package/dist/server/theme-bridge.mjs +1408 -392
  184. package/dist/server/theme.mjs +471 -228
  185. package/dist/styles/index.css +5 -0
  186. package/package.json +7 -1
  187. package/dist/_dts/theme-core/src/buttons/presets/types.d.ts +0 -88
  188. package/dist/_dts/theme-core/src/buttons/utils/contrast.d.ts +0 -38
  189. package/dist/_dts/theme-core/src/palette/themePaletteCompatibility.d.ts +0 -57
@@ -1629,7 +1629,108 @@ const InlineNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _b
1629
1629
  const GridNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx(Grid, { ...props });
1630
1630
  const DivNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("div", { ...props });
1631
1631
  const FigureNode = ({ blockId: _blockId, blockKind: _blockKind, blockContent: _blockContent, fragmentRegistry: _fragmentRegistry, previewAuthoring: _previewAuthoring, pathBase: _pathBase, ...props }) => /* @__PURE__ */ jsx("figure", { ...props });
1632
- var blockColorTokenNames;
1632
+ //#endregion
1633
+ //#region ../theme-core/src/buttons/effectClassification.ts
1634
+ function getButtonEffectPolicy(effectId) {
1635
+ return Object.prototype.hasOwnProperty.call(BUTTON_EFFECT_POLICIES, effectId) ? BUTTON_EFFECT_POLICIES[effectId] : null;
1636
+ }
1637
+ function classifyButtonEffectId(effectId) {
1638
+ return getButtonEffectPolicy(effectId)?.classification ?? "unknown";
1639
+ }
1640
+ var BUTTON_EFFECT_POLICIES;
1641
+ var init_effectClassification = __esmMin((() => {
1642
+ BUTTON_EFFECT_POLICIES = {
1643
+ "darken-background": {
1644
+ classification: "colour-transition",
1645
+ transition: {
1646
+ kind: "adjust-shade",
1647
+ direction: "darker"
1648
+ }
1649
+ },
1650
+ "lighten-background": {
1651
+ classification: "colour-transition",
1652
+ transition: {
1653
+ kind: "adjust-shade",
1654
+ direction: "lighter"
1655
+ }
1656
+ },
1657
+ "background-on-hover": {
1658
+ classification: "colour-transition",
1659
+ transition: { kind: "replace-background" }
1660
+ },
1661
+ "background-on-hover-alpha": {
1662
+ classification: "unsupported-colour",
1663
+ reason: "alpha_requires_surface"
1664
+ },
1665
+ "fade-background": {
1666
+ classification: "unsupported-colour",
1667
+ reason: "changes_element_opacity"
1668
+ },
1669
+ "opacity-reduce": {
1670
+ classification: "unsupported-colour",
1671
+ reason: "changes_element_opacity"
1672
+ },
1673
+ "gradient-text": {
1674
+ classification: "unsupported-colour",
1675
+ reason: "changes_foreground"
1676
+ },
1677
+ "text-color-change": {
1678
+ classification: "unsupported-colour",
1679
+ reason: "changes_foreground"
1680
+ },
1681
+ "border-color-change": {
1682
+ classification: "unsupported-colour",
1683
+ reason: "changes_border"
1684
+ },
1685
+ "aurora-glow": {
1686
+ classification: "unsupported-background-overlay",
1687
+ reason: "unresolved_background_overlay"
1688
+ },
1689
+ "cosmic-stardust": {
1690
+ classification: "unsupported-background-overlay",
1691
+ reason: "unresolved_background_overlay"
1692
+ },
1693
+ "gradient-border-fill": {
1694
+ classification: "unsupported-background-overlay",
1695
+ reason: "unresolved_background_overlay"
1696
+ },
1697
+ "animated-gradient-border-fill": {
1698
+ classification: "unsupported-background-overlay",
1699
+ reason: "unresolved_background_overlay"
1700
+ },
1701
+ "nav-underline": {
1702
+ classification: "not-button",
1703
+ reason: "not_button_effect"
1704
+ },
1705
+ "nav-frosted-base": {
1706
+ classification: "not-button",
1707
+ reason: "not_button_effect"
1708
+ },
1709
+ "nav-frosted-hover": {
1710
+ classification: "not-button",
1711
+ reason: "not_button_effect"
1712
+ },
1713
+ "nav-frosted-active": {
1714
+ classification: "not-button",
1715
+ reason: "not_button_effect"
1716
+ },
1717
+ "animated-gradient": { classification: "non-colour" },
1718
+ "border-glow": { classification: "non-colour" },
1719
+ "drop-shadow": { classification: "non-colour" },
1720
+ "inner-shadow": { classification: "non-colour" },
1721
+ "neumorphic-shadow": { classification: "non-colour" },
1722
+ "outer-glow": { classification: "non-colour" },
1723
+ "retro-3d-shadow": { classification: "non-colour" },
1724
+ "scale-up": { classification: "non-colour" },
1725
+ "scale-down": { classification: "non-colour" },
1726
+ lift: { classification: "non-colour" },
1727
+ "press-down": { classification: "non-colour" },
1728
+ pop: { classification: "non-colour" },
1729
+ "border-bottom-grow": { classification: "non-colour" },
1730
+ "sketchy-border": { classification: "non-colour" },
1731
+ "pulse-animation": { classification: "non-colour" }
1732
+ };
1733
+ })), blockColorTokenNames;
1633
1734
  var init_blockColorTokens = __esmMin((() => {
1634
1735
  init_colorTokenParts();
1635
1736
  blockColorTokenNames = [
@@ -1740,9 +1841,155 @@ function asSpecialVariantId(value) {
1740
1841
  if (value.length === 0) throw new Error("SpecialVariantId must be a non-empty string");
1741
1842
  return value;
1742
1843
  }
1743
- var VARIANT_ROLES, DEFAULT_VARIANT_ALIAS_ID, cornerStyleSchema, shadowSizeSchema, textTransformSchema, fontWeightSchema, buttonTypographySchema, letterSpacingSchema, hoverTransformSchema, hoverColorSchema, buttonPaddingPresetSchema, gradientStyleSchema, gradientSharpnessSchema, prioritySchema, buttonSizeNameSchema, PADDING_TOKEN_PATTERN, paddingShorthandSchema, buttonSizeConfigSchema, buttonSizesSchema, buttonGlobalSettingsSchema, gradientDirectionSchema$1, buttonBackgroundSchema, effectApplicationSchema$1, buttonBorderSchema, buttonVariantAffordanceSchema, variantShadowSchema, variantEffectsSchema, variantSizeOverridesSchema, buttonVariantSchema, buttonSystemSchema;
1844
+ function parseOpaqueButtonColourToken(value) {
1845
+ const token = parseThemeColorToken(value);
1846
+ if (token === null) return null;
1847
+ const parts = parseColorTokenParts(token);
1848
+ return parts.kind === "token" && parts.opacityPercent === null ? token : null;
1849
+ }
1850
+ function unsafeAsOpaqueButtonColourToken(value) {
1851
+ return value;
1852
+ }
1853
+ function normalizeLegacyButtonVariantInput(input) {
1854
+ if (!isUnknownRecord(input)) return input;
1855
+ const background = input.background;
1856
+ if (!isUnknownRecord(background)) return input;
1857
+ if (!(background.type === "transparent" || Object.prototype.hasOwnProperty.call(input, "textColorToken") || isUnknownRecord(input.border) && Object.prototype.hasOwnProperty.call(input.border, "colorToken") || hasLegacyButtonEffects(input.effects) || hasLegacyAlphaToken(input, background))) return input;
1858
+ const { textColorToken, ...withoutLegacyText } = input;
1859
+ const normalizedBorder = isUnknownRecord(input.border) && typeof input.border.widthClass === "string" ? { widthClass: input.border.widthClass } : input.border;
1860
+ const normalizedAffordance = isUnknownRecord(input.affordance) && typeof input.affordance.iconId === "string" ? { iconId: input.affordance.iconId } : input.affordance;
1861
+ const normalizedEffects = normalizeLegacyButtonEffects(input.effects, background.type);
1862
+ const hoverBackgroundToken = stripLegacyTokenAlpha(input.hoverBackgroundToken);
1863
+ if (background.type === "transparent") return {
1864
+ ...withoutLegacyText,
1865
+ background: {
1866
+ type: "surface",
1867
+ role: "link"
1868
+ },
1869
+ border: normalizedBorder,
1870
+ affordance: normalizedAffordance,
1871
+ effects: normalizedEffects,
1872
+ hoverBackgroundToken
1873
+ };
1874
+ if (background.type === "gradient") {
1875
+ const stops = Array.isArray(background.stops) ? background.stops.map(stripLegacyTokenAlpha) : background.stops;
1876
+ return {
1877
+ ...withoutLegacyText,
1878
+ background: {
1879
+ ...background,
1880
+ stops,
1881
+ foregroundToken: stripLegacyTokenAlpha(background.foregroundToken ?? textColorToken)
1882
+ },
1883
+ border: normalizedBorder,
1884
+ affordance: normalizedAffordance,
1885
+ effects: normalizedEffects,
1886
+ hoverBackgroundToken
1887
+ };
1888
+ }
1889
+ return {
1890
+ ...withoutLegacyText,
1891
+ background: background.type === "solid" ? {
1892
+ ...background,
1893
+ colorToken: stripLegacyTokenAlpha(background.colorToken)
1894
+ } : background,
1895
+ border: normalizedBorder,
1896
+ affordance: normalizedAffordance,
1897
+ effects: normalizedEffects,
1898
+ hoverBackgroundToken
1899
+ };
1900
+ }
1901
+ function normalizeLegacyButtonGlobalInput(input) {
1902
+ if (!isUnknownRecord(input)) return input;
1903
+ const hoverColorToken = stripLegacyTokenAlpha(input.hoverColorToken);
1904
+ return hoverColorToken === input.hoverColorToken ? input : {
1905
+ ...input,
1906
+ hoverColorToken
1907
+ };
1908
+ }
1909
+ function hasLegacyAlphaToken(input, background) {
1910
+ const stops = isUnknownArray$2(background.stops) ? background.stops : [];
1911
+ return [
1912
+ input.hoverBackgroundToken,
1913
+ background.colorToken,
1914
+ background.foregroundToken,
1915
+ ...stops
1916
+ ].some((token) => stripLegacyTokenAlpha(token) !== token);
1917
+ }
1918
+ function stripLegacyTokenAlpha(value) {
1919
+ if (typeof value !== "string") return value;
1920
+ const slashIndex = value.indexOf("/");
1921
+ return slashIndex < 0 ? value : value.slice(0, slashIndex);
1922
+ }
1923
+ function hasLegacyButtonEffects(input) {
1924
+ if (!isUnknownRecord(input)) return false;
1925
+ return [
1926
+ "base",
1927
+ "hover",
1928
+ "active",
1929
+ "focus"
1930
+ ].some((state) => {
1931
+ const effects = input[state];
1932
+ return Array.isArray(effects) && effects.some((effect) => {
1933
+ if (!isUnknownRecord(effect) || typeof effect.effectId !== "string") return true;
1934
+ const classification = classifyButtonEffectId(effect.effectId);
1935
+ if (classification !== "colour-transition" && classification !== "non-colour") return true;
1936
+ return effect.effectId === "background-on-hover" && isUnknownRecord(effect.options) && stripLegacyTokenAlpha(effect.options.colorToken) !== effect.options.colorToken;
1937
+ });
1938
+ });
1939
+ }
1940
+ function normalizeLegacyButtonEffects(input, backgroundType) {
1941
+ if (!isUnknownRecord(input)) return input;
1942
+ const normalized = {};
1943
+ for (const state of [
1944
+ "base",
1945
+ "hover",
1946
+ "active",
1947
+ "focus"
1948
+ ]) {
1949
+ const effects = input[state];
1950
+ if (!Array.isArray(effects)) continue;
1951
+ const safeEffects = effects.flatMap((effect) => {
1952
+ if (!isUnknownRecord(effect) || typeof effect.effectId !== "string") return [];
1953
+ const classification = classifyButtonEffectId(effect.effectId);
1954
+ if (classification === "non-colour") return [effect];
1955
+ if (classification !== "colour-transition") return [];
1956
+ if (effect.effectId === "background-on-hover") {
1957
+ const options = isUnknownRecord(effect.options) ? effect.options : null;
1958
+ const colorToken = options === null ? null : parseOpaqueButtonColourToken(stripLegacyTokenAlpha(options.colorToken));
1959
+ return colorToken === null ? [] : [{
1960
+ ...effect,
1961
+ options: {
1962
+ ...options,
1963
+ colorToken
1964
+ }
1965
+ }];
1966
+ }
1967
+ if (backgroundType !== "solid") return [];
1968
+ const rawAmount = isUnknownRecord(effect.options) ? effect.options.amount : void 0;
1969
+ const amount = typeof rawAmount === "number" && rawAmount > 0 ? Math.max(100, Math.round(rawAmount / 100) * 100) : 100;
1970
+ return [{
1971
+ ...effect,
1972
+ options: {
1973
+ ...isUnknownRecord(effect.options) ? effect.options : {},
1974
+ amount
1975
+ }
1976
+ }];
1977
+ });
1978
+ if (safeEffects.length > 0) normalized[state] = safeEffects;
1979
+ }
1980
+ return Object.keys(normalized).length === 0 ? void 0 : normalized;
1981
+ }
1982
+ function isUnknownRecord(value) {
1983
+ return typeof value === "object" && value !== null && !Array.isArray(value);
1984
+ }
1985
+ function isUnknownArray$2(value) {
1986
+ return Array.isArray(value);
1987
+ }
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;
1744
1989
  var init_types$17 = __esmMin((() => {
1990
+ init_effectClassification();
1745
1991
  init_themeColorTokens();
1992
+ init_colorTokenParts();
1746
1993
  VARIANT_ROLES = [
1747
1994
  "primary",
1748
1995
  "secondary",
@@ -1753,6 +2000,11 @@ var init_types$17 = __esmMin((() => {
1753
2000
  "accent"
1754
2001
  ];
1755
2002
  DEFAULT_VARIANT_ALIAS_ID = "default";
2003
+ opaqueButtonColourTokenSchema = themeColorTokenSchema.refine((value) => parseOpaqueButtonColourToken(value) !== null, "Button colour tokens must be opaque").transform((value) => {
2004
+ const token = parseOpaqueButtonColourToken(value);
2005
+ if (token === null) throw new Error("Invariant: opaque button token passed its schema");
2006
+ return token;
2007
+ });
1756
2008
  cornerStyleSchema = z$1.enum([
1757
2009
  "square",
1758
2010
  "rounded",
@@ -1841,7 +2093,7 @@ var init_types$17 = __esmMin((() => {
1841
2093
  lg,
1842
2094
  xl: xl ?? lg
1843
2095
  }));
1844
- buttonGlobalSettingsSchema = z$1.object({
2096
+ canonicalButtonGlobalSettingsSchema = z$1.object({
1845
2097
  cornerStyle: cornerStyleSchema,
1846
2098
  cornerRadius: z$1.number().min(0).max(24).optional(),
1847
2099
  /**
@@ -1872,11 +2124,12 @@ var init_types$17 = __esmMin((() => {
1872
2124
  paddingPreset: buttonPaddingPresetSchema.optional(),
1873
2125
  hoverTransform: hoverTransformSchema,
1874
2126
  hoverColor: hoverColorSchema,
1875
- hoverColorToken: themeColorTokenSchema.optional(),
2127
+ hoverColorToken: opaqueButtonColourTokenSchema.optional(),
1876
2128
  gradientStyle: gradientStyleSchema.optional(),
1877
2129
  gradientAngle: z$1.number().min(0).max(360).optional(),
1878
2130
  gradientSharpness: gradientSharpnessSchema.optional()
1879
2131
  });
2132
+ buttonGlobalSettingsSchema = z$1.preprocess(normalizeLegacyButtonGlobalInput, canonicalButtonGlobalSettingsSchema);
1880
2133
  gradientDirectionSchema$1 = z$1.enum([
1881
2134
  "to-r",
1882
2135
  "to-l",
@@ -1887,30 +2140,37 @@ var init_types$17 = __esmMin((() => {
1887
2140
  "to-br",
1888
2141
  "to-bl"
1889
2142
  ]);
1890
- buttonBackgroundSchema = z$1.discriminatedUnion("type", [
2143
+ buttonColourTreatmentSchema = z$1.discriminatedUnion("type", [
1891
2144
  z$1.object({
1892
2145
  type: z$1.literal("solid"),
1893
- colorToken: themeColorTokenSchema
2146
+ colorToken: opaqueButtonColourTokenSchema
1894
2147
  }),
1895
2148
  z$1.object({
1896
2149
  type: z$1.literal("gradient"),
1897
- stops: z$1.array(themeColorTokenSchema).min(2),
1898
- direction: gradientDirectionSchema$1
2150
+ stops: z$1.array(opaqueButtonColourTokenSchema).min(2).transform((stops) => {
2151
+ const [first, second, ...rest] = stops;
2152
+ if (first === void 0 || second === void 0) throw new Error("Invariant: gradient stops passed the minimum length schema");
2153
+ return [
2154
+ first,
2155
+ second,
2156
+ ...rest
2157
+ ];
2158
+ }),
2159
+ direction: gradientDirectionSchema$1,
2160
+ foregroundToken: opaqueButtonColourTokenSchema
1899
2161
  }),
1900
- z$1.object({ type: z$1.literal("transparent") })
2162
+ z$1.object({
2163
+ type: z$1.literal("surface"),
2164
+ role: z$1.literal("link")
2165
+ })
1901
2166
  ]);
2167
+ buttonBackgroundSchema = buttonColourTreatmentSchema;
1902
2168
  effectApplicationSchema$1 = z$1.object({
1903
2169
  effectId: z$1.string(),
1904
- options: z$1.record(z$1.string(), z$1.any()).optional()
1905
- });
1906
- buttonBorderSchema = z$1.object({
1907
- widthClass: z$1.string(),
1908
- colorToken: themeColorTokenSchema
1909
- });
1910
- buttonVariantAffordanceSchema = z$1.object({
1911
- iconId: z$1.string().min(1),
1912
- colorToken: themeColorTokenSchema.optional()
2170
+ options: z$1.record(z$1.string(), z$1.json()).optional()
1913
2171
  });
2172
+ buttonBorderSchema = z$1.object({ widthClass: z$1.string() });
2173
+ buttonVariantAffordanceSchema = z$1.object({ iconId: z$1.string().min(1) });
1914
2174
  variantShadowSchema = z$1.object({
1915
2175
  elevation: z$1.enum([
1916
2176
  "none",
@@ -1938,22 +2198,22 @@ var init_types$17 = __esmMin((() => {
1938
2198
  lg: buttonSizeConfigSchema.optional(),
1939
2199
  xl: buttonSizeConfigSchema.optional()
1940
2200
  });
1941
- buttonVariantSchema = z$1.object({
2201
+ canonicalButtonVariantSchema = z$1.object({
1942
2202
  id: z$1.string(),
1943
2203
  name: z$1.string().min(1).max(20),
1944
2204
  enabled: z$1.boolean(),
1945
2205
  priority: prioritySchema,
1946
2206
  background: buttonBackgroundSchema,
1947
- textColorToken: themeColorTokenSchema,
1948
2207
  /** Tailwind radius token (e.g. `'rounded-md'`). Omit to inherit from `global.cornerStyle`. */
1949
2208
  borderRadius: z$1.string().optional(),
1950
2209
  shadow: variantShadowSchema.optional(),
1951
2210
  border: buttonBorderSchema.optional(),
1952
- hoverBackgroundToken: z$1.string().optional(),
2211
+ hoverBackgroundToken: opaqueButtonColourTokenSchema.optional(),
1953
2212
  effects: variantEffectsSchema.optional(),
1954
2213
  sizes: variantSizeOverridesSchema.optional(),
1955
2214
  affordance: buttonVariantAffordanceSchema.optional()
1956
2215
  });
2216
+ buttonVariantSchema = z$1.preprocess(normalizeLegacyButtonVariantInput, canonicalButtonVariantSchema);
1957
2217
  buttonSystemSchema = z$1.object({
1958
2218
  global: buttonGlobalSettingsSchema,
1959
2219
  variants: z$1.array(buttonVariantSchema).min(1).max(6),
@@ -1992,8 +2252,7 @@ var init_classNames = __esmMin((() => {
1992
2252
  }));
1993
2253
  var init_resolver$1 = __esmMin((() => {}));
1994
2254
  var init_generateBaseCSS = __esmMin((() => {}));
1995
- var init_background$2 = __esmMin((() => {}));
1996
- var STATE_SELECTORS, init_cssUtils = __esmMin((() => {
2255
+ var init_background$2 = __esmMin((() => {})), STATE_SELECTORS, init_cssUtils = __esmMin((() => {
1997
2256
  STATE_SELECTORS = {
1998
2257
  hover: ":hover, [data-force-hover=\"true\"]",
1999
2258
  active: ":active",
@@ -2029,13 +2288,130 @@ var init_registry$1 = __esmMin((() => {
2029
2288
  init_border();
2030
2289
  init_animation();
2031
2290
  init_effects();
2032
- }));
2033
- var init_generateEffectsCSS = __esmMin((() => {
2291
+ })), init_generateEffectsCSS = __esmMin((() => {
2034
2292
  init_registry$1();
2035
- })), init_contrast$2 = __esmMin((() => {}));
2293
+ }));
2036
2294
  var init_generateDefaultButtonSystem = __esmMin((() => {
2037
- init_contrast$2();
2038
- })), init_affordanceIcons = __esmMin((() => {})), AFFORDANCE_SUPPRESS_CLASS;
2295
+ init_types$17();
2296
+ }));
2297
+ var init_affordanceIcons = __esmMin((() => {}));
2298
+ //#endregion
2299
+ //#region ../theme-core/src/palette/utils/colorConversion.ts
2300
+ function hexToRgb$1(hex) {
2301
+ const h = hex.replace(/^#/, "");
2302
+ const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
2303
+ if (m.length !== 6) throw new Error("Bad hex");
2304
+ const int = parseInt(m, 16);
2305
+ return {
2306
+ r: int >> 16 & 255,
2307
+ g: int >> 8 & 255,
2308
+ b: int & 255
2309
+ };
2310
+ }
2311
+ function srgbToLinear(u) {
2312
+ const x = u / 255;
2313
+ return x <= .04045 ? x / 12.92 : Math.pow((x + .055) / 1.055, 2.4);
2314
+ }
2315
+ function linearToSrgb(x) {
2316
+ const y = x <= .0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - .055;
2317
+ return clamp01$2(y) * 255;
2318
+ }
2319
+ var clamp01$2, mod, deg;
2320
+ var init_colorConversion = __esmMin((() => {
2321
+ clamp01$2 = (x) => Math.max(0, Math.min(1, x));
2322
+ mod = (a, n) => (a % n + n) % n;
2323
+ deg = (x) => mod(x, 360);
2324
+ }));
2325
+ var init_generateShades = __esmMin((() => {
2326
+ init_colorConversion();
2327
+ }));
2328
+ var init_neutralScale = __esmMin((() => {
2329
+ init_colorConversion();
2330
+ }));
2331
+ //#endregion
2332
+ //#region ../theme-core/src/palette/utils/contrast.ts
2333
+ function relativeLuminance(r, g, b) {
2334
+ const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
2335
+ return .2126 * R + .7152 * G + .0722 * B;
2336
+ }
2337
+ function contrastRatio(hex1, hex2) {
2338
+ const { r: r1, g: g1, b: b1 } = hexToRgb$1(hex1);
2339
+ const { r: r2, g: g2, b: b2 } = hexToRgb$1(hex2);
2340
+ const L1 = relativeLuminance(r1, g1, b1);
2341
+ const L2 = relativeLuminance(r2, g2, b2);
2342
+ const [hi, lo] = L1 >= L2 ? [L1, L2] : [L2, L1];
2343
+ return (hi + .05) / (lo + .05);
2344
+ }
2345
+ var init_contrast$1 = __esmMin((() => {
2346
+ init_colorConversion();
2347
+ }));
2348
+ //#endregion
2349
+ //#region ../theme-core/src/palette/utils/textColor.ts
2350
+ /**
2351
+ * Pick the better of black/white text for a given background using actual
2352
+ * contrast ratios, not a simple luminance cutoff.
2353
+ *
2354
+ * @param background - Background color in hex or rgb/rgba format (e.g., '#FFFFFF' or 'rgb(255, 255, 255)')
2355
+ * @param minContrast - Preferred minimum contrast ratio for body-sized text
2356
+ * @returns '#000000' for light backgrounds, '#FFFFFF' for dark backgrounds
2357
+ */
2358
+ function pickBlackOrWhiteTextColor(background, minContrast = 4.5) {
2359
+ const { r, g, b } = parseColorToRgb(background);
2360
+ const luminance = relativeLuminance(r, g, b);
2361
+ const blackContrast = (luminance + .05) / .05;
2362
+ const whiteContrast = 1.05 / (luminance + .05);
2363
+ if (blackContrast >= minContrast && whiteContrast < minContrast) return "#000000";
2364
+ if (whiteContrast >= minContrast && blackContrast < minContrast) return "#FFFFFF";
2365
+ return blackContrast >= whiteContrast ? "#000000" : "#FFFFFF";
2366
+ }
2367
+ /**
2368
+ * Backwards-compatible alias for callers that want the best black/white text
2369
+ * color for a background.
2370
+ */
2371
+ function getTextColorForBackground(background) {
2372
+ return pickBlackOrWhiteTextColor(background);
2373
+ }
2374
+ function parseColorToRgb(input) {
2375
+ const trimmed = input.trim();
2376
+ if (trimmed.startsWith("#")) return hexToRgb$1(trimmed);
2377
+ const rgbMatch = trimmed.match(/^rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})(?:\s*,\s*(?:0|1|0?\.\d+))?\s*\)$/i);
2378
+ if (rgbMatch?.[1] && rgbMatch[2] && rgbMatch[3]) return {
2379
+ r: clamp255(Number(rgbMatch[1])),
2380
+ g: clamp255(Number(rgbMatch[2])),
2381
+ b: clamp255(Number(rgbMatch[3]))
2382
+ };
2383
+ throw new Error("Unsupported color format");
2384
+ }
2385
+ function clamp255(value) {
2386
+ if (Number.isNaN(value)) return 0;
2387
+ return Math.max(0, Math.min(255, value));
2388
+ }
2389
+ var init_textColor = __esmMin((() => {
2390
+ init_colorConversion();
2391
+ init_contrast$1();
2392
+ }));
2393
+ //#endregion
2394
+ //#region ../theme-core/src/palette/utils/onColor.ts
2395
+ function onColorTokenName(backgroundToken) {
2396
+ return `on${backgroundToken.split("-").filter((part) => part.length > 0).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("")}`;
2397
+ }
2398
+ var init_onColor = __esmMin((() => {}));
2399
+ var init_expandPalette = __esmMin((() => {
2400
+ init_generateShades();
2401
+ init_neutralScale();
2402
+ init_colorConversion();
2403
+ init_textColor();
2404
+ init_onColor();
2405
+ }));
2406
+ var init_resolveButtonColourStates = __esmMin((() => {
2407
+ init_contrast$1();
2408
+ init_colorConversion();
2409
+ init_onColor();
2410
+ init_foregroundContract();
2411
+ init_types$17();
2412
+ init_constants$2();
2413
+ init_effectClassification();
2414
+ })), init_resolvedButtonCss = __esmMin((() => {})), AFFORDANCE_SUPPRESS_CLASS;
2039
2415
  var init_generateButtonCss = __esmMin((() => {
2040
2416
  init_types$17();
2041
2417
  init_classNames();
@@ -2045,10 +2421,13 @@ var init_generateButtonCss = __esmMin((() => {
2045
2421
  init_constants$2();
2046
2422
  init_generateDefaultButtonSystem();
2047
2423
  init_affordanceIcons();
2424
+ init_expandPalette();
2425
+ init_foregroundContract();
2426
+ init_resolveButtonColourStates();
2427
+ init_resolvedButtonCss();
2048
2428
  AFFORDANCE_SUPPRESS_CLASS = "rb-affordance-off";
2049
2429
  buttonSizeNameSchema.options;
2050
2430
  }));
2051
- var init_presets$1 = __esmMin((() => {}));
2052
2431
  //#endregion
2053
2432
  //#region ../theme-core/src/site-styles/styleTags.ts
2054
2433
  var STYLE_AXIS_VALUES, styleTagsSchema;
@@ -2097,7 +2476,7 @@ function defineButtonPersonality(input) {
2097
2476
  name: input.name,
2098
2477
  description: input.description,
2099
2478
  tags: input.tags,
2100
- buttonSystem: input.buttonSystem
2479
+ buttonSystem: buttonSystemSchema.parse(input.buttonSystem)
2101
2480
  };
2102
2481
  }
2103
2482
  var buttonPersonalityIdSchema;
@@ -2162,19 +2541,15 @@ var init_brushed_wash = __esmMin((() => {
2162
2541
  background: {
2163
2542
  type: "gradient",
2164
2543
  stops: ["primary", "accent"],
2165
- direction: "to-r"
2544
+ direction: "to-r",
2545
+ foregroundToken: "primaryForeground"
2166
2546
  },
2167
- textColorToken: "primaryForeground",
2168
2547
  borderRadius: "rounded-lg",
2169
2548
  shadow: {
2170
2549
  elevation: "low",
2171
2550
  softness: "soft",
2172
2551
  position: "bottom"
2173
- },
2174
- effects: { hover: [{
2175
- effectId: "opacity-reduce",
2176
- options: { reduction: -15 }
2177
- }] }
2552
+ }
2178
2553
  },
2179
2554
  {
2180
2555
  id: "secondary",
@@ -2184,32 +2559,27 @@ var init_brushed_wash = __esmMin((() => {
2184
2559
  background: {
2185
2560
  type: "gradient",
2186
2561
  stops: ["secondary", "accent"],
2187
- direction: "to-br"
2562
+ direction: "to-br",
2563
+ foregroundToken: "primaryForeground"
2188
2564
  },
2189
- textColorToken: "primaryForeground",
2190
2565
  borderRadius: "rounded-lg",
2191
2566
  shadow: {
2192
2567
  elevation: "low",
2193
2568
  softness: "soft",
2194
2569
  position: "bottom"
2195
- },
2196
- effects: { hover: [{
2197
- effectId: "opacity-reduce",
2198
- options: { reduction: -15 }
2199
- }] }
2570
+ }
2200
2571
  },
2201
2572
  {
2202
2573
  id: "outline",
2203
2574
  name: "Outline",
2204
2575
  enabled: true,
2205
2576
  priority: 3,
2206
- background: { type: "transparent" },
2207
- textColorToken: "primary",
2208
- borderRadius: "rounded-lg",
2209
- border: {
2210
- widthClass: "border",
2211
- colorToken: "primary"
2577
+ background: {
2578
+ type: "surface",
2579
+ role: "link"
2212
2580
  },
2581
+ borderRadius: "rounded-lg",
2582
+ border: { widthClass: "border" },
2213
2583
  effects: { hover: [{
2214
2584
  effectId: "background-on-hover",
2215
2585
  options: { colorToken: "surface" }
@@ -2220,8 +2590,10 @@ var init_brushed_wash = __esmMin((() => {
2220
2590
  name: "Ghost",
2221
2591
  enabled: true,
2222
2592
  priority: 3,
2223
- background: { type: "transparent" },
2224
- textColorToken: "text",
2593
+ background: {
2594
+ type: "surface",
2595
+ role: "link"
2596
+ },
2225
2597
  borderRadius: "rounded-lg",
2226
2598
  effects: { hover: [{
2227
2599
  effectId: "background-on-hover",
@@ -2267,7 +2639,6 @@ var init_confident_chip = __esmMin((() => {
2267
2639
  type: "solid",
2268
2640
  colorToken: "primary"
2269
2641
  },
2270
- textColorToken: "primaryForeground",
2271
2642
  borderRadius: "rounded-md",
2272
2643
  shadow: {
2273
2644
  elevation: "medium",
@@ -2277,7 +2648,7 @@ var init_confident_chip = __esmMin((() => {
2277
2648
  effects: {
2278
2649
  hover: [{
2279
2650
  effectId: "darken-background",
2280
- options: { amount: 60 }
2651
+ options: { amount: 100 }
2281
2652
  }],
2282
2653
  active: [{
2283
2654
  effectId: "scale-down",
@@ -2294,12 +2665,8 @@ var init_confident_chip = __esmMin((() => {
2294
2665
  type: "solid",
2295
2666
  colorToken: "surface"
2296
2667
  },
2297
- textColorToken: "text",
2298
2668
  borderRadius: "rounded-md",
2299
- border: {
2300
- widthClass: "border",
2301
- colorToken: "border"
2302
- },
2669
+ border: { widthClass: "border" },
2303
2670
  effects: { hover: [{
2304
2671
  effectId: "background-on-hover",
2305
2672
  options: { colorToken: "background" }
@@ -2310,13 +2677,12 @@ var init_confident_chip = __esmMin((() => {
2310
2677
  name: "Outline",
2311
2678
  enabled: true,
2312
2679
  priority: 3,
2313
- background: { type: "transparent" },
2314
- textColorToken: "primary",
2315
- borderRadius: "rounded-md",
2316
- border: {
2317
- widthClass: "border",
2318
- colorToken: "primary"
2680
+ background: {
2681
+ type: "surface",
2682
+ role: "link"
2319
2683
  },
2684
+ borderRadius: "rounded-md",
2685
+ border: { widthClass: "border" },
2320
2686
  effects: { hover: [{
2321
2687
  effectId: "background-on-hover",
2322
2688
  options: { colorToken: "surface" }
@@ -2327,8 +2693,10 @@ var init_confident_chip = __esmMin((() => {
2327
2693
  name: "Ghost",
2328
2694
  enabled: true,
2329
2695
  priority: 3,
2330
- background: { type: "transparent" },
2331
- textColorToken: "primary",
2696
+ background: {
2697
+ type: "surface",
2698
+ role: "link"
2699
+ },
2332
2700
  borderRadius: "rounded-md",
2333
2701
  effects: { hover: [{
2334
2702
  effectId: "background-on-hover",
@@ -2391,7 +2759,6 @@ var init_earth_pill = __esmMin((() => {
2391
2759
  type: "solid",
2392
2760
  colorToken: "primary"
2393
2761
  },
2394
- textColorToken: "primaryForeground",
2395
2762
  borderRadius: "rounded-full",
2396
2763
  shadow: {
2397
2764
  elevation: "low",
@@ -2417,13 +2784,12 @@ var init_earth_pill = __esmMin((() => {
2417
2784
  name: "Secondary",
2418
2785
  enabled: true,
2419
2786
  priority: 2,
2420
- background: { type: "transparent" },
2421
- textColorToken: "primary",
2422
- borderRadius: "rounded-full",
2423
- border: {
2424
- widthClass: "border",
2425
- colorToken: "primary"
2787
+ background: {
2788
+ type: "surface",
2789
+ role: "link"
2426
2790
  },
2791
+ borderRadius: "rounded-full",
2792
+ border: { widthClass: "border" },
2427
2793
  effects: { hover: [{
2428
2794
  effectId: "background-on-hover",
2429
2795
  options: { colorToken: "muted" }
@@ -2434,13 +2800,12 @@ var init_earth_pill = __esmMin((() => {
2434
2800
  name: "Outline",
2435
2801
  enabled: true,
2436
2802
  priority: 3,
2437
- background: { type: "transparent" },
2438
- textColorToken: "text",
2439
- borderRadius: "rounded-full",
2440
- border: {
2441
- widthClass: "border",
2442
- colorToken: "border"
2803
+ background: {
2804
+ type: "surface",
2805
+ role: "link"
2443
2806
  },
2807
+ borderRadius: "rounded-full",
2808
+ border: { widthClass: "border" },
2444
2809
  effects: { hover: [{
2445
2810
  effectId: "background-on-hover",
2446
2811
  options: { colorToken: "surfaceAlt" }
@@ -2451,8 +2816,10 @@ var init_earth_pill = __esmMin((() => {
2451
2816
  name: "Ghost",
2452
2817
  enabled: true,
2453
2818
  priority: 3,
2454
- background: { type: "transparent" },
2455
- textColorToken: "primary",
2819
+ background: {
2820
+ type: "surface",
2821
+ role: "link"
2822
+ },
2456
2823
  borderRadius: "rounded-full",
2457
2824
  shadow: {
2458
2825
  elevation: "none",
@@ -2473,11 +2840,7 @@ var init_earth_pill = __esmMin((() => {
2473
2840
  padding: "0.625rem 0",
2474
2841
  fontSize: "text-xl"
2475
2842
  }
2476
- },
2477
- effects: { hover: [{
2478
- effectId: "opacity-reduce",
2479
- options: { reduction: 25 }
2480
- }] }
2843
+ }
2481
2844
  }
2482
2845
  ]
2483
2846
  }
@@ -2513,8 +2876,10 @@ var init_editorial_link = __esmMin((() => {
2513
2876
  name: "Primary",
2514
2877
  enabled: true,
2515
2878
  priority: 1,
2516
- background: { type: "transparent" },
2517
- textColorToken: "text",
2879
+ background: {
2880
+ type: "surface",
2881
+ role: "link"
2882
+ },
2518
2883
  borderRadius: "rounded-none",
2519
2884
  sizes: {
2520
2885
  sm: { padding: "0.25rem 0" },
@@ -2536,8 +2901,10 @@ var init_editorial_link = __esmMin((() => {
2536
2901
  name: "Secondary",
2537
2902
  enabled: true,
2538
2903
  priority: 2,
2539
- background: { type: "transparent" },
2540
- textColorToken: "mutedText",
2904
+ background: {
2905
+ type: "surface",
2906
+ role: "link"
2907
+ },
2541
2908
  borderRadius: "rounded-none",
2542
2909
  sizes: {
2543
2910
  sm: { padding: "0.25rem 0" },
@@ -2559,8 +2926,10 @@ var init_editorial_link = __esmMin((() => {
2559
2926
  name: "Outline",
2560
2927
  enabled: true,
2561
2928
  priority: 3,
2562
- background: { type: "transparent" },
2563
- textColorToken: "accent",
2929
+ background: {
2930
+ type: "surface",
2931
+ role: "link"
2932
+ },
2564
2933
  borderRadius: "rounded-none",
2565
2934
  sizes: {
2566
2935
  sm: { padding: "0.25rem 0" },
@@ -2582,19 +2951,17 @@ var init_editorial_link = __esmMin((() => {
2582
2951
  name: "Ghost",
2583
2952
  enabled: true,
2584
2953
  priority: 3,
2585
- background: { type: "transparent" },
2586
- textColorToken: "mutedText",
2954
+ background: {
2955
+ type: "surface",
2956
+ role: "link"
2957
+ },
2587
2958
  borderRadius: "rounded-none",
2588
2959
  sizes: {
2589
2960
  sm: { padding: "0.25rem 0" },
2590
2961
  md: { padding: "0.5rem 0" },
2591
2962
  lg: { padding: "0.625rem 0" },
2592
2963
  xl: { padding: "0.75rem 0" }
2593
- },
2594
- effects: { hover: [{
2595
- effectId: "opacity-reduce",
2596
- options: { reduction: -20 }
2597
- }] }
2964
+ }
2598
2965
  }
2599
2966
  ]
2600
2967
  }
@@ -2652,12 +3019,8 @@ var init_flat_ink = __esmMin((() => {
2652
3019
  type: "solid",
2653
3020
  colorToken: "primary"
2654
3021
  },
2655
- textColorToken: "primaryForeground",
2656
3022
  borderRadius: "rounded-lg",
2657
- affordance: {
2658
- iconId: "ArrowRight",
2659
- colorToken: "accent"
2660
- },
3023
+ affordance: { iconId: "ArrowRight" },
2661
3024
  effects: { hover: [{
2662
3025
  effectId: "lift",
2663
3026
  options: { translateY: "-2px" }
@@ -2671,13 +3034,12 @@ var init_flat_ink = __esmMin((() => {
2671
3034
  name: "Secondary",
2672
3035
  enabled: true,
2673
3036
  priority: 2,
2674
- background: { type: "transparent" },
2675
- textColorToken: "primary",
2676
- borderRadius: "rounded-lg",
2677
- border: {
2678
- widthClass: "border",
2679
- colorToken: "border"
3037
+ background: {
3038
+ type: "surface",
3039
+ role: "link"
2680
3040
  },
3041
+ borderRadius: "rounded-lg",
3042
+ border: { widthClass: "border" },
2681
3043
  effects: { hover: [{
2682
3044
  effectId: "lift",
2683
3045
  options: { translateY: "-2px" }
@@ -2695,12 +3057,8 @@ var init_flat_ink = __esmMin((() => {
2695
3057
  type: "solid",
2696
3058
  colorToken: "accent"
2697
3059
  },
2698
- textColorToken: "accentForeground",
2699
3060
  borderRadius: "rounded-lg",
2700
- affordance: {
2701
- iconId: "ArrowRight",
2702
- colorToken: "accentForeground"
2703
- },
3061
+ affordance: { iconId: "ArrowRight" },
2704
3062
  effects: { hover: [{
2705
3063
  effectId: "lift",
2706
3064
  options: { translateY: "-2px" }
@@ -2763,7 +3121,6 @@ var init_ink_stamp = __esmMin((() => {
2763
3121
  type: "solid",
2764
3122
  colorToken: "primary"
2765
3123
  },
2766
- textColorToken: "primaryForeground",
2767
3124
  borderRadius: "rounded-md",
2768
3125
  effects: {
2769
3126
  hover: [{
@@ -2784,13 +3141,12 @@ var init_ink_stamp = __esmMin((() => {
2784
3141
  name: "Secondary",
2785
3142
  enabled: true,
2786
3143
  priority: 2,
2787
- background: { type: "transparent" },
2788
- textColorToken: "primary",
2789
- borderRadius: "rounded-md",
2790
- border: {
2791
- widthClass: "border-2",
2792
- colorToken: "primary"
3144
+ background: {
3145
+ type: "surface",
3146
+ role: "link"
2793
3147
  },
3148
+ borderRadius: "rounded-md",
3149
+ border: { widthClass: "border-2" },
2794
3150
  effects: { hover: [{
2795
3151
  effectId: "background-on-hover",
2796
3152
  options: { colorToken: "surface" }
@@ -2801,13 +3157,12 @@ var init_ink_stamp = __esmMin((() => {
2801
3157
  name: "Outline",
2802
3158
  enabled: true,
2803
3159
  priority: 3,
2804
- background: { type: "transparent" },
2805
- textColorToken: "text",
2806
- borderRadius: "rounded-md",
2807
- border: {
2808
- widthClass: "border-2",
2809
- colorToken: "border"
3160
+ background: {
3161
+ type: "surface",
3162
+ role: "link"
2810
3163
  },
3164
+ borderRadius: "rounded-md",
3165
+ border: { widthClass: "border-2" },
2811
3166
  effects: { hover: [{
2812
3167
  effectId: "background-on-hover",
2813
3168
  options: { colorToken: "surface" }
@@ -2818,8 +3173,10 @@ var init_ink_stamp = __esmMin((() => {
2818
3173
  name: "Ghost",
2819
3174
  enabled: true,
2820
3175
  priority: 3,
2821
- background: { type: "transparent" },
2822
- textColorToken: "accent",
3176
+ background: {
3177
+ type: "surface",
3178
+ role: "link"
3179
+ },
2823
3180
  borderRadius: "rounded-none",
2824
3181
  sizes: {
2825
3182
  sm: {
@@ -2906,7 +3263,6 @@ var init_joy_stamp = __esmMin((() => {
2906
3263
  type: "solid",
2907
3264
  colorToken: "primary"
2908
3265
  },
2909
- textColorToken: "primaryForeground",
2910
3266
  borderRadius: "rounded-full",
2911
3267
  shadow: {
2912
3268
  elevation: "high",
@@ -2920,13 +3276,12 @@ var init_joy_stamp = __esmMin((() => {
2920
3276
  name: "Secondary",
2921
3277
  enabled: true,
2922
3278
  priority: 2,
2923
- background: { type: "transparent" },
2924
- textColorToken: "text",
2925
- borderRadius: "rounded-full",
2926
- border: {
2927
- widthClass: "border-2",
2928
- colorToken: "text"
3279
+ background: {
3280
+ type: "surface",
3281
+ role: "link"
2929
3282
  },
3283
+ borderRadius: "rounded-full",
3284
+ border: { widthClass: "border-2" },
2930
3285
  shadow: {
2931
3286
  elevation: "high",
2932
3287
  softness: "hard",
@@ -2991,12 +3346,8 @@ var init_ornate_ritual = __esmMin((() => {
2991
3346
  type: "solid",
2992
3347
  colorToken: "primary"
2993
3348
  },
2994
- textColorToken: "primaryForeground",
2995
3349
  borderRadius: "rounded-md",
2996
- border: {
2997
- widthClass: "border",
2998
- colorToken: "primary"
2999
- },
3350
+ border: { widthClass: "border" },
3000
3351
  effects: {
3001
3352
  hover: [{
3002
3353
  effectId: "background-on-hover",
@@ -3017,12 +3368,8 @@ var init_ornate_ritual = __esmMin((() => {
3017
3368
  type: "solid",
3018
3369
  colorToken: "secondary"
3019
3370
  },
3020
- textColorToken: "primaryForeground",
3021
3371
  borderRadius: "rounded-md",
3022
- border: {
3023
- widthClass: "border",
3024
- colorToken: "primary"
3025
- },
3372
+ border: { widthClass: "border" },
3026
3373
  effects: { hover: [{
3027
3374
  effectId: "background-on-hover",
3028
3375
  options: { colorToken: "surface" }
@@ -3033,13 +3380,12 @@ var init_ornate_ritual = __esmMin((() => {
3033
3380
  name: "Outline",
3034
3381
  enabled: true,
3035
3382
  priority: 3,
3036
- background: { type: "transparent" },
3037
- textColorToken: "primary",
3038
- borderRadius: "rounded-md",
3039
- border: {
3040
- widthClass: "border",
3041
- colorToken: "primary"
3383
+ background: {
3384
+ type: "surface",
3385
+ role: "link"
3042
3386
  },
3387
+ borderRadius: "rounded-md",
3388
+ border: { widthClass: "border" },
3043
3389
  effects: { hover: [{
3044
3390
  effectId: "background-on-hover",
3045
3391
  options: { colorToken: "muted" }
@@ -3050,8 +3396,10 @@ var init_ornate_ritual = __esmMin((() => {
3050
3396
  name: "Ghost",
3051
3397
  enabled: true,
3052
3398
  priority: 3,
3053
- background: { type: "transparent" },
3054
- textColorToken: "accent",
3399
+ background: {
3400
+ type: "surface",
3401
+ role: "link"
3402
+ },
3055
3403
  borderRadius: "rounded-none",
3056
3404
  sizes: {
3057
3405
  sm: {
@@ -3133,14 +3481,10 @@ var init_pebble = __esmMin((() => {
3133
3481
  type: "solid",
3134
3482
  colorToken: "primary"
3135
3483
  },
3136
- textColorToken: "primaryForeground",
3137
3484
  borderRadius: "rounded-full",
3138
3485
  effects: { hover: [{
3139
- effectId: "background-on-hover-alpha",
3140
- options: {
3141
- colorToken: "primary",
3142
- opacity: 88
3143
- }
3486
+ effectId: "darken-background",
3487
+ options: { amount: 100 }
3144
3488
  }] }
3145
3489
  },
3146
3490
  {
@@ -3148,13 +3492,12 @@ var init_pebble = __esmMin((() => {
3148
3492
  name: "Secondary",
3149
3493
  enabled: true,
3150
3494
  priority: 2,
3151
- background: { type: "transparent" },
3152
- textColorToken: "primary",
3153
- borderRadius: "rounded-full",
3154
- border: {
3155
- widthClass: "border-2",
3156
- colorToken: "accent"
3495
+ background: {
3496
+ type: "surface",
3497
+ role: "link"
3157
3498
  },
3499
+ borderRadius: "rounded-full",
3500
+ border: { widthClass: "border-2" },
3158
3501
  effects: { hover: [{
3159
3502
  effectId: "background-on-hover",
3160
3503
  options: { colorToken: "accent" }
@@ -3165,13 +3508,12 @@ var init_pebble = __esmMin((() => {
3165
3508
  name: "Outline",
3166
3509
  enabled: true,
3167
3510
  priority: 3,
3168
- background: { type: "transparent" },
3169
- textColorToken: "text",
3170
- borderRadius: "rounded-full",
3171
- border: {
3172
- widthClass: "border",
3173
- colorToken: "border"
3511
+ background: {
3512
+ type: "surface",
3513
+ role: "link"
3174
3514
  },
3515
+ borderRadius: "rounded-full",
3516
+ border: { widthClass: "border" },
3175
3517
  effects: { hover: [{
3176
3518
  effectId: "background-on-hover",
3177
3519
  options: { colorToken: "surface" }
@@ -3182,8 +3524,10 @@ var init_pebble = __esmMin((() => {
3182
3524
  name: "Ghost",
3183
3525
  enabled: true,
3184
3526
  priority: 3,
3185
- background: { type: "transparent" },
3186
- textColorToken: "primary",
3527
+ background: {
3528
+ type: "surface",
3529
+ role: "link"
3530
+ },
3187
3531
  borderRadius: "rounded-full",
3188
3532
  sizes: {
3189
3533
  sm: {
@@ -3199,11 +3543,7 @@ var init_pebble = __esmMin((() => {
3199
3543
  padding: "0.75rem 1.5rem",
3200
3544
  fontSize: "text-xl"
3201
3545
  }
3202
- },
3203
- effects: { hover: [{
3204
- effectId: "opacity-reduce",
3205
- options: { reduction: 30 }
3206
- }] }
3546
+ }
3207
3547
  }
3208
3548
  ]
3209
3549
  }
@@ -3264,15 +3604,11 @@ var init_quiet_arrow = __esmMin((() => {
3264
3604
  type: "solid",
3265
3605
  colorToken: "primary"
3266
3606
  },
3267
- textColorToken: "primaryForeground",
3268
3607
  borderRadius: "rounded-xl",
3269
3608
  affordance: { iconId: "ArrowRight" },
3270
3609
  effects: { hover: [{
3271
- effectId: "background-on-hover-alpha",
3272
- options: {
3273
- colorToken: "primary",
3274
- opacity: 90
3275
- }
3610
+ effectId: "darken-background",
3611
+ options: { amount: 100 }
3276
3612
  }] }
3277
3613
  },
3278
3614
  {
@@ -3280,13 +3616,12 @@ var init_quiet_arrow = __esmMin((() => {
3280
3616
  name: "Secondary",
3281
3617
  enabled: true,
3282
3618
  priority: 2,
3283
- background: { type: "transparent" },
3284
- textColorToken: "primary",
3285
- borderRadius: "rounded-xl",
3286
- border: {
3287
- widthClass: "border",
3288
- colorToken: "primary"
3619
+ background: {
3620
+ type: "surface",
3621
+ role: "link"
3289
3622
  },
3623
+ borderRadius: "rounded-xl",
3624
+ border: { widthClass: "border" },
3290
3625
  affordance: { iconId: "ArrowRight" },
3291
3626
  effects: { hover: [{
3292
3627
  effectId: "background-on-hover",
@@ -3298,21 +3633,22 @@ var init_quiet_arrow = __esmMin((() => {
3298
3633
  name: "Outline",
3299
3634
  enabled: true,
3300
3635
  priority: 3,
3301
- background: { type: "transparent" },
3302
- textColorToken: "primary",
3636
+ background: {
3637
+ type: "surface",
3638
+ role: "link"
3639
+ },
3303
3640
  borderRadius: "rounded-xl",
3304
- border: {
3305
- widthClass: "border",
3306
- colorToken: "primary"
3307
- }
3641
+ border: { widthClass: "border" }
3308
3642
  },
3309
3643
  {
3310
3644
  id: "ghost",
3311
3645
  name: "Ghost",
3312
3646
  enabled: true,
3313
3647
  priority: 3,
3314
- background: { type: "transparent" },
3315
- textColorToken: "primary",
3648
+ background: {
3649
+ type: "surface",
3650
+ role: "link"
3651
+ },
3316
3652
  borderRadius: "rounded-xl"
3317
3653
  }
3318
3654
  ]
@@ -3375,7 +3711,6 @@ var init_showtime_pill = __esmMin((() => {
3375
3711
  type: "solid",
3376
3712
  colorToken: "primary"
3377
3713
  },
3378
- textColorToken: "background",
3379
3714
  borderRadius: "rounded-full",
3380
3715
  effects: { hover: [{ effectId: "pop" }] }
3381
3716
  },
@@ -3384,13 +3719,12 @@ var init_showtime_pill = __esmMin((() => {
3384
3719
  name: "Secondary",
3385
3720
  enabled: true,
3386
3721
  priority: 2,
3387
- background: { type: "transparent" },
3388
- textColorToken: "primary",
3389
- borderRadius: "rounded-full",
3390
- border: {
3391
- widthClass: "border-2",
3392
- colorToken: "primary"
3722
+ background: {
3723
+ type: "surface",
3724
+ role: "link"
3393
3725
  },
3726
+ borderRadius: "rounded-full",
3727
+ border: { widthClass: "border-2" },
3394
3728
  effects: { hover: [{ effectId: "pop" }] }
3395
3729
  },
3396
3730
  {
@@ -3402,7 +3736,6 @@ var init_showtime_pill = __esmMin((() => {
3402
3736
  type: "solid",
3403
3737
  colorToken: "secondary"
3404
3738
  },
3405
- textColorToken: "primary",
3406
3739
  borderRadius: "rounded-full",
3407
3740
  effects: { hover: [{ effectId: "pop" }] }
3408
3741
  },
@@ -3415,12 +3748,8 @@ var init_showtime_pill = __esmMin((() => {
3415
3748
  type: "solid",
3416
3749
  colorToken: "background"
3417
3750
  },
3418
- textColorToken: "primary",
3419
3751
  borderRadius: "rounded-full",
3420
- border: {
3421
- widthClass: "border-2",
3422
- colorToken: "primary"
3423
- },
3752
+ border: { widthClass: "border-2" },
3424
3753
  effects: { hover: [{
3425
3754
  effectId: "background-on-hover",
3426
3755
  options: { colorToken: "surface" }
@@ -3431,13 +3760,12 @@ var init_showtime_pill = __esmMin((() => {
3431
3760
  name: "Outline",
3432
3761
  enabled: true,
3433
3762
  priority: 3,
3434
- background: { type: "transparent" },
3435
- textColorToken: "primary",
3436
- borderRadius: "rounded-full",
3437
- border: {
3438
- widthClass: "border-2",
3439
- colorToken: "primary"
3763
+ background: {
3764
+ type: "surface",
3765
+ role: "link"
3440
3766
  },
3767
+ borderRadius: "rounded-full",
3768
+ border: { widthClass: "border-2" },
3441
3769
  effects: { hover: [{
3442
3770
  effectId: "background-on-hover",
3443
3771
  options: { colorToken: "background" }
@@ -3448,8 +3776,10 @@ var init_showtime_pill = __esmMin((() => {
3448
3776
  name: "Ghost",
3449
3777
  enabled: true,
3450
3778
  priority: 3,
3451
- background: { type: "transparent" },
3452
- textColorToken: "primary",
3779
+ background: {
3780
+ type: "surface",
3781
+ role: "link"
3782
+ },
3453
3783
  borderRadius: "rounded-full",
3454
3784
  effects: { hover: [{
3455
3785
  effectId: "background-on-hover",
@@ -3495,7 +3825,6 @@ var init_soft_pill = __esmMin((() => {
3495
3825
  type: "solid",
3496
3826
  colorToken: "primary"
3497
3827
  },
3498
- textColorToken: "primaryForeground",
3499
3828
  borderRadius: "rounded-full",
3500
3829
  shadow: {
3501
3830
  elevation: "low",
@@ -3518,13 +3847,12 @@ var init_soft_pill = __esmMin((() => {
3518
3847
  name: "Secondary",
3519
3848
  enabled: true,
3520
3849
  priority: 2,
3521
- background: { type: "transparent" },
3522
- textColorToken: "primary",
3523
- borderRadius: "rounded-full",
3524
- border: {
3525
- widthClass: "border-2",
3526
- colorToken: "primary"
3850
+ background: {
3851
+ type: "surface",
3852
+ role: "link"
3527
3853
  },
3854
+ borderRadius: "rounded-full",
3855
+ border: { widthClass: "border-2" },
3528
3856
  effects: { hover: [{
3529
3857
  effectId: "background-on-hover",
3530
3858
  options: { colorToken: "surface" }
@@ -3535,13 +3863,12 @@ var init_soft_pill = __esmMin((() => {
3535
3863
  name: "Outline",
3536
3864
  enabled: true,
3537
3865
  priority: 3,
3538
- background: { type: "transparent" },
3539
- textColorToken: "text",
3540
- borderRadius: "rounded-full",
3541
- border: {
3542
- widthClass: "border",
3543
- colorToken: "border"
3866
+ background: {
3867
+ type: "surface",
3868
+ role: "link"
3544
3869
  },
3870
+ borderRadius: "rounded-full",
3871
+ border: { widthClass: "border" },
3545
3872
  effects: { hover: [{
3546
3873
  effectId: "background-on-hover",
3547
3874
  options: { colorToken: "surface" }
@@ -3552,8 +3879,10 @@ var init_soft_pill = __esmMin((() => {
3552
3879
  name: "Ghost",
3553
3880
  enabled: true,
3554
3881
  priority: 3,
3555
- background: { type: "transparent" },
3556
- textColorToken: "text",
3882
+ background: {
3883
+ type: "surface",
3884
+ role: "link"
3885
+ },
3557
3886
  borderRadius: "rounded-full",
3558
3887
  effects: { hover: [{
3559
3888
  effectId: "background-on-hover",
@@ -3568,6 +3897,7 @@ var init_soft_pill = __esmMin((() => {
3568
3897
  //#region ../theme-core/src/buttons/personalities/two-tone-pill.ts
3569
3898
  var solidSecondary, twoTonePill;
3570
3899
  var init_two_tone_pill = __esmMin((() => {
3900
+ init_types$17();
3571
3901
  init_soft_pill();
3572
3902
  init_types$16();
3573
3903
  solidSecondary = {
@@ -3577,9 +3907,8 @@ var init_two_tone_pill = __esmMin((() => {
3577
3907
  priority: 2,
3578
3908
  background: {
3579
3909
  type: "solid",
3580
- colorToken: "secondary"
3910
+ colorToken: unsafeAsOpaqueButtonColourToken("secondary")
3581
3911
  },
3582
- textColorToken: "onSecondary",
3583
3912
  borderRadius: "rounded-full",
3584
3913
  shadow: {
3585
3914
  elevation: "none",
@@ -3643,20 +3972,49 @@ var init_personalities = __esmMin((() => {
3643
3972
  ];
3644
3973
  new Map(buttonPersonalities.map((p) => [p.id, p]));
3645
3974
  }));
3975
+ function presetCategory(personality) {
3976
+ switch (personality.tags.era) {
3977
+ case "retro": return "retro";
3978
+ case "editorial": return "minimal";
3979
+ case "organic": return "artistic";
3980
+ case "modern": return personality.tags.tone === "bold" ? "modern" : "technical";
3981
+ case "technical": return "technical";
3982
+ case void 0: return "modern";
3983
+ }
3984
+ }
3985
+ 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
+ }));
3998
+ }));
3646
3999
  //#endregion
3647
4000
  //#region ../theme-core/src/buttons/effects/types.ts
3648
4001
  var init_types$15 = __esmMin((() => {}));
3649
- var init_core$2 = __esmMin((() => {}));
4002
+ var init_core$2 = __esmMin((() => {
4003
+ init_resolveButtonColourStates();
4004
+ init_resolvedButtonCss();
4005
+ init_types$17();
4006
+ }));
3650
4007
  //#endregion
3651
4008
  //#region ../theme-core/src/buttons/index.ts
3652
4009
  var init_buttons = __esmMin((() => {
3653
4010
  init_types$17();
3654
4011
  init_classNames();
3655
4012
  init_generateButtonCss();
4013
+ init_resolveButtonColourStates();
3656
4014
  init_affordanceIcons();
3657
4015
  init_generateDefaultButtonSystem();
3658
4016
  init_constants$2();
3659
- init_presets$1();
4017
+ init_presets$2();
3660
4018
  init_personalities();
3661
4019
  init_types$15();
3662
4020
  init_registry$1();
@@ -4141,18 +4499,25 @@ var init_booking_instalments = __esmMin((() => {}));
4141
4499
  //#endregion
4142
4500
  //#region ../core/src/booking-date-time.ts
4143
4501
  function isValidTimeZone$1(timeZone) {
4502
+ const cached = timeZoneValidityCache.get(timeZone);
4503
+ if (cached !== void 0) return cached;
4504
+ let isValid;
4144
4505
  try {
4145
4506
  new Intl.DateTimeFormat(DEFAULT_LOCALE, { timeZone }).format(/* @__PURE__ */ new Date());
4146
- return true;
4507
+ isValid = true;
4147
4508
  } catch {
4148
- return false;
4509
+ isValid = false;
4149
4510
  }
4511
+ if (timeZoneValidityCache.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) timeZoneValidityCache.clear();
4512
+ timeZoneValidityCache.set(timeZone, isValid);
4513
+ return isValid;
4150
4514
  }
4151
4515
  function getSafeTimeZone(timeZone) {
4152
4516
  const normalized = typeof timeZone === "string" ? timeZone.trim() : "";
4153
4517
  return normalized.length > 0 && isValidTimeZone$1(normalized) ? normalized : FALLBACK_TIMEZONE;
4154
4518
  }
4155
4519
  function parseStrictBookingTimeZone(timeZone) {
4520
+ if (typeof timeZone !== "string") return null;
4156
4521
  const normalized = timeZone.trim();
4157
4522
  if (normalized.length === 0 || !isValidTimeZone$1(normalized)) return null;
4158
4523
  return normalized;
@@ -4165,10 +4530,19 @@ function formatParseError(error) {
4165
4530
  }
4166
4531
  }
4167
4532
  function formatToPartsLookup(date, locale, timeZone, format) {
4168
- return new Map(new Intl.DateTimeFormat(locale, {
4533
+ return new Map(getCachedDateTimeFormatter(locale, timeZone, format).formatToParts(date).map((part) => [part.type, part.value]));
4534
+ }
4535
+ function getCachedDateTimeFormatter(locale, timeZone, format) {
4536
+ const key = `${locale}\u0000${timeZone}\u0000${JSON.stringify(Object.entries(format).sort(([left], [right]) => left.localeCompare(right)))}`;
4537
+ const cached = dateTimeFormatterCache.get(key);
4538
+ if (cached !== void 0) return cached;
4539
+ const formatter = new Intl.DateTimeFormat(locale, {
4169
4540
  ...format,
4170
4541
  timeZone
4171
- }).formatToParts(date).map((part) => [part.type, part.value]));
4542
+ });
4543
+ if (dateTimeFormatterCache.size >= DATE_TIME_FORMATTER_CACHE_LIMIT) dateTimeFormatterCache.clear();
4544
+ dateTimeFormatterCache.set(key, formatter);
4545
+ return formatter;
4172
4546
  }
4173
4547
  function getZonedDateTimeParts(date, timeZone) {
4174
4548
  const parts = formatToPartsLookup(date, "en-GB", timeZone, {
@@ -4221,23 +4595,9 @@ function toUtcIsoDateTimeString(value) {
4221
4595
  return parsed.value;
4222
4596
  }
4223
4597
  function parseScheduledBookingDateTime(input) {
4598
+ let startsAt;
4224
4599
  try {
4225
- const startsAt = toUtcIsoDateTimeString(input.startsAt);
4226
- const timeZone = parseStrictBookingTimeZone(input.timeZone);
4227
- if (timeZone === null) return {
4228
- ok: false,
4229
- field: "timeZone",
4230
- reason: "invalid_time_zone",
4231
- value: input.timeZone
4232
- };
4233
- return {
4234
- ok: true,
4235
- value: {
4236
- startsAt,
4237
- timeZone,
4238
- locale: input.locale
4239
- }
4240
- };
4600
+ startsAt = toUtcIsoDateTimeString(input.startsAt);
4241
4601
  } catch {
4242
4602
  return {
4243
4603
  ok: false,
@@ -4246,6 +4606,21 @@ function parseScheduledBookingDateTime(input) {
4246
4606
  value: input.startsAt
4247
4607
  };
4248
4608
  }
4609
+ const timeZone = parseStrictBookingTimeZone(input.timeZone);
4610
+ if (timeZone === null) return {
4611
+ ok: false,
4612
+ field: "timeZone",
4613
+ reason: "invalid_time_zone",
4614
+ value: typeof input.timeZone === "string" ? input.timeZone : ""
4615
+ };
4616
+ return {
4617
+ ok: true,
4618
+ value: {
4619
+ startsAt,
4620
+ timeZone,
4621
+ locale: input.locale
4622
+ }
4623
+ };
4249
4624
  }
4250
4625
  function parseScheduledBookingDateRange(input) {
4251
4626
  const start = parseScheduledBookingDateTime(input);
@@ -4284,10 +4659,7 @@ function toScheduledBookingDateRange(input) {
4284
4659
  function formatBookingInstant(isoString, options) {
4285
4660
  const date = new Date(isoString);
4286
4661
  if (Number.isNaN(date.getTime())) return isoString;
4287
- return new Intl.DateTimeFormat(options.locale ?? DEFAULT_LOCALE, {
4288
- ...options.format,
4289
- timeZone: getSafeTimeZone(options.timeZone)
4290
- }).format(date);
4662
+ return getCachedDateTimeFormatter(options.locale ?? DEFAULT_LOCALE, getSafeTimeZone(options.timeZone), options.format).format(date);
4291
4663
  }
4292
4664
  function formatBookingDate(input, format = {
4293
4665
  weekday: "long",
@@ -4375,7 +4747,7 @@ function addLocalScheduleDays(date, days) {
4375
4747
  day: utcDate.getUTCDate()
4376
4748
  };
4377
4749
  }
4378
- var DEFAULT_LOCALE, FALLBACK_TIMEZONE, DEFAULT_BOOKING_DATE_TIME_FORMAT, LOCAL_DATE_PATTERN;
4750
+ var DEFAULT_LOCALE, FALLBACK_TIMEZONE, DEFAULT_BOOKING_DATE_TIME_FORMAT, LOCAL_DATE_PATTERN, DATE_TIME_FORMATTER_CACHE_LIMIT, dateTimeFormatterCache, timeZoneValidityCache;
4379
4751
  var init_booking_date_time = __esmMin((() => {
4380
4752
  init_result();
4381
4753
  DEFAULT_LOCALE = "en-US";
@@ -4388,6 +4760,9 @@ var init_booking_date_time = __esmMin((() => {
4388
4760
  minute: "2-digit"
4389
4761
  };
4390
4762
  LOCAL_DATE_PATTERN = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/u;
4763
+ DATE_TIME_FORMATTER_CACHE_LIMIT = 100;
4764
+ dateTimeFormatterCache = /* @__PURE__ */ new Map();
4765
+ timeZoneValidityCache = /* @__PURE__ */ new Map();
4391
4766
  })), init_dated_offering_settlement = __esmMin((() => {
4392
4767
  init_result();
4393
4768
  }));
@@ -4683,7 +5058,8 @@ function validateRelativeStoragePath(value) {
4683
5058
  if (value.startsWith("sites/")) return fail({ tag: "SITE_SCOPED_PATH" });
4684
5059
  if (value.startsWith("/")) return fail({ tag: "LEADING_SLASH" });
4685
5060
  if (value.includes("//")) return fail({ tag: "DOUBLE_SLASH" });
4686
- if (value.split("/").some((segment) => segment === "..")) return fail({ tag: "TRAVERSAL" });
5061
+ if (value.includes("%")) return fail({ tag: "PERCENT_ENCODING" });
5062
+ if (value.split("/").some((segment) => segment === "." || segment === "..")) return fail({ tag: "TRAVERSAL" });
4687
5063
  return ok$1(value);
4688
5064
  }
4689
5065
  function brandRelativeStoragePath(value) {
@@ -7470,12 +7846,12 @@ function getSemanticIconComponent(name) {
7470
7846
  return SEMANTIC_ICON_COMPONENTS[name] ?? null;
7471
7847
  }
7472
7848
  var ICON_PICKER_PRESETS;
7473
- var init_presets = __esmMin((() => {
7849
+ var init_presets$1 = __esmMin((() => {
7474
7850
  ICON_PICKER_PRESETS = ["cta", "feature"];
7475
7851
  }));
7476
7852
  //#endregion
7477
7853
  //#region ../blocks/src/system/icons/social.tsx
7478
- init_presets();
7854
+ init_presets$1();
7479
7855
  init_svg();
7480
7856
  const SOCIAL_ICON_NAMES = [
7481
7857
  "SocialFacebook",
@@ -8239,7 +8615,7 @@ function shouldReserveFeatureCardIconZone(cards) {
8239
8615
  }
8240
8616
  //#endregion
8241
8617
  //#region ../blocks/src/system/icons/index.ts
8242
- init_presets();
8618
+ init_presets$1();
8243
8619
  init_svg();
8244
8620
  //#endregion
8245
8621
  //#region ../blocks/src/system/runtime/nodes/feature-card-icon.tsx
@@ -11914,7 +12290,7 @@ function resolveEventCta(event, buttonText) {
11914
12290
  };
11915
12291
  }
11916
12292
  var COLUMN_CLASSES;
11917
- var init_utils$5 = __esmMin((() => {
12293
+ var init_utils$6 = __esmMin((() => {
11918
12294
  init_src$3();
11919
12295
  init_src$1();
11920
12296
  init_eventCapacity();
@@ -11950,7 +12326,7 @@ function DateTimeTile({ startsAt, endsAt, timeZone }) {
11950
12326
  });
11951
12327
  }
11952
12328
  var init_DateTimeTile = __esmMin((() => {
11953
- init_utils$5();
12329
+ init_utils$6();
11954
12330
  }));
11955
12331
  //#endregion
11956
12332
  //#region ../blocks/src/system/runtime/nodes/event-details/CoursePricingDisplay.tsx
@@ -12161,7 +12537,7 @@ var init_view$2 = __esmMin((() => {
12161
12537
  init_src$3();
12162
12538
  init_shared$5();
12163
12539
  init_pricing();
12164
- init_utils$5();
12540
+ init_utils$6();
12165
12541
  init_DateTimeTile();
12166
12542
  init_CoursePricingDisplay();
12167
12543
  }));
@@ -12894,95 +13270,6 @@ function CourseDetailsSSR({ courses, contentEntry, entrySubrouteContext, subject
12894
13270
  });
12895
13271
  }
12896
13272
  //#endregion
12897
- //#region ../theme-core/src/palette/utils/colorConversion.ts
12898
- function hexToRgb$1(hex) {
12899
- const h = hex.replace(/^#/, "");
12900
- const m = h.length === 3 ? h.split("").map((c) => c + c).join("") : h;
12901
- if (m.length !== 6) throw new Error("Bad hex");
12902
- const int = parseInt(m, 16);
12903
- return {
12904
- r: int >> 16 & 255,
12905
- g: int >> 8 & 255,
12906
- b: int & 255
12907
- };
12908
- }
12909
- function srgbToLinear(u) {
12910
- const x = u / 255;
12911
- return x <= .04045 ? x / 12.92 : Math.pow((x + .055) / 1.055, 2.4);
12912
- }
12913
- function linearToSrgb(x) {
12914
- const y = x <= .0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - .055;
12915
- return clamp01$2(y) * 255;
12916
- }
12917
- var clamp01$2, mod, deg;
12918
- var init_colorConversion = __esmMin((() => {
12919
- clamp01$2 = (x) => Math.max(0, Math.min(1, x));
12920
- mod = (a, n) => (a % n + n) % n;
12921
- deg = (x) => mod(x, 360);
12922
- }));
12923
- //#endregion
12924
- //#region ../theme-core/src/palette/utils/contrast.ts
12925
- function relativeLuminance(r, g, b) {
12926
- const R = srgbToLinear(r), G = srgbToLinear(g), B = srgbToLinear(b);
12927
- return .2126 * R + .7152 * G + .0722 * B;
12928
- }
12929
- function contrastRatio(hex1, hex2) {
12930
- const { r: r1, g: g1, b: b1 } = hexToRgb$1(hex1);
12931
- const { r: r2, g: g2, b: b2 } = hexToRgb$1(hex2);
12932
- const L1 = relativeLuminance(r1, g1, b1);
12933
- const L2 = relativeLuminance(r2, g2, b2);
12934
- const [hi, lo] = L1 >= L2 ? [L1, L2] : [L2, L1];
12935
- return (hi + .05) / (lo + .05);
12936
- }
12937
- var init_contrast$1 = __esmMin((() => {
12938
- init_colorConversion();
12939
- }));
12940
- //#endregion
12941
- //#region ../theme-core/src/palette/utils/textColor.ts
12942
- /**
12943
- * Pick the better of black/white text for a given background using actual
12944
- * contrast ratios, not a simple luminance cutoff.
12945
- *
12946
- * @param background - Background color in hex or rgb/rgba format (e.g., '#FFFFFF' or 'rgb(255, 255, 255)')
12947
- * @param minContrast - Preferred minimum contrast ratio for body-sized text
12948
- * @returns '#000000' for light backgrounds, '#FFFFFF' for dark backgrounds
12949
- */
12950
- function pickBlackOrWhiteTextColor(background, minContrast = 4.5) {
12951
- const { r, g, b } = parseColorToRgb(background);
12952
- const luminance = relativeLuminance(r, g, b);
12953
- const blackContrast = (luminance + .05) / .05;
12954
- const whiteContrast = 1.05 / (luminance + .05);
12955
- if (blackContrast >= minContrast && whiteContrast < minContrast) return "#000000";
12956
- if (whiteContrast >= minContrast && blackContrast < minContrast) return "#FFFFFF";
12957
- return blackContrast >= whiteContrast ? "#000000" : "#FFFFFF";
12958
- }
12959
- /**
12960
- * Backwards-compatible alias for callers that want the best black/white text
12961
- * color for a background.
12962
- */
12963
- function getTextColorForBackground(background) {
12964
- return pickBlackOrWhiteTextColor(background);
12965
- }
12966
- function parseColorToRgb(input) {
12967
- const trimmed = input.trim();
12968
- if (trimmed.startsWith("#")) return hexToRgb$1(trimmed);
12969
- const rgbMatch = trimmed.match(/^rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})(?:\s*,\s*(?:0|1|0?\.\d+))?\s*\)$/i);
12970
- if (rgbMatch?.[1] && rgbMatch[2] && rgbMatch[3]) return {
12971
- r: clamp255(Number(rgbMatch[1])),
12972
- g: clamp255(Number(rgbMatch[2])),
12973
- b: clamp255(Number(rgbMatch[3]))
12974
- };
12975
- throw new Error("Unsupported color format");
12976
- }
12977
- function clamp255(value) {
12978
- if (Number.isNaN(value)) return 0;
12979
- return Math.max(0, Math.min(255, value));
12980
- }
12981
- var init_textColor = __esmMin((() => {
12982
- init_colorConversion();
12983
- init_contrast$1();
12984
- }));
12985
- //#endregion
12986
13273
  //#region ../theme-core/src/utils/tokenOrColor.ts
12987
13274
  function isCssColorLiteral(value) {
12988
13275
  const trimmed = value.trim();
@@ -13326,7 +13613,7 @@ var init_EventCard = __esmMin((() => {
13326
13613
  init_media$2();
13327
13614
  init_EventCardIcons();
13328
13615
  init_eventCapacity();
13329
- init_utils$5();
13616
+ init_utils$6();
13330
13617
  init_buttons();
13331
13618
  EventCard = ({ event, cardVariant = "default", buttonVariant = "primary", buttonText, showVenue = true, showMap = true, mapSlot, allowMap = true, showCapacity = true, showImage = true, showCategory = true, showSummary = true, orientation = "vertical" }) => {
13332
13619
  const timeZone = event.timeZone ?? null;
@@ -13441,7 +13728,7 @@ var EventCompactRow;
13441
13728
  var init_EventCompactRow = __esmMin((() => {
13442
13729
  init_buttons();
13443
13730
  init_svg();
13444
- init_utils$5();
13731
+ init_utils$6();
13445
13732
  init_EventCardIcons();
13446
13733
  EventCompactRow = ({ event, buttonVariant = "primary", buttonText }) => {
13447
13734
  const timeZone = event.timeZone ?? null;
@@ -13547,7 +13834,7 @@ var init_EmptyState = __esmMin((() => {
13547
13834
  //#endregion
13548
13835
  //#region ../blocks/src/system/runtime/nodes/events/shared/index.ts
13549
13836
  var init_shared$4 = __esmMin((() => {
13550
- init_utils$5();
13837
+ init_utils$6();
13551
13838
  init_EventCard();
13552
13839
  init_EventCompactRow();
13553
13840
  init_EmptyState();
@@ -15479,7 +15766,7 @@ init_src$3();
15479
15766
  init_buttons();
15480
15767
  init_cards();
15481
15768
  init_shared$4();
15482
- init_utils$5();
15769
+ init_utils$6();
15483
15770
  init_shared$5();
15484
15771
  init_svg();
15485
15772
  function OfferingsPreviewNode(props) {
@@ -16595,12 +16882,6 @@ var init_footerNav = __esmMin((() => {
16595
16882
  init_builder$2();
16596
16883
  }));
16597
16884
  var init_core = __esmMin((() => {}));
16598
- //#endregion
16599
- //#region ../theme-core/src/palette/utils/onColor.ts
16600
- function onColorTokenName(backgroundToken) {
16601
- return `on${backgroundToken.split("-").filter((part) => part.length > 0).map((part) => part.charAt(0).toUpperCase() + part.slice(1)).join("")}`;
16602
- }
16603
- var init_onColor = __esmMin((() => {}));
16604
16885
  function expandForegroundCandidates(candidates, backgroundToken) {
16605
16886
  const seen = /* @__PURE__ */ new Set();
16606
16887
  const expanded = [];
@@ -17449,9 +17730,6 @@ var init_vibrant_creative = __esmMin((() => {}));
17449
17730
  var init_generateCssVars = __esmMin((() => {
17450
17731
  init_colorConversion();
17451
17732
  }));
17452
- var init_neutralScale = __esmMin((() => {
17453
- init_colorConversion();
17454
- }));
17455
17733
  var init_colorPlacement = __esmMin((() => {
17456
17734
  init_colorConversion();
17457
17735
  init_contrast$1();
@@ -17460,42 +17738,42 @@ var init_backgroundGeneration = __esmMin((() => {
17460
17738
  init_colorConversion();
17461
17739
  }));
17462
17740
  var init_analogous_harmony = __esmMin((() => {
17463
- init_utils$4();
17741
+ init_utils$5();
17464
17742
  init_colorConversion();
17465
17743
  }));
17466
17744
  var init_complementary_contrast = __esmMin((() => {
17467
- init_utils$4();
17745
+ init_utils$5();
17468
17746
  }));
17469
17747
  var init_earthy_natural = __esmMin((() => {
17470
17748
  init_colorConversion();
17471
17749
  }));
17472
17750
  var init_high_contrast_modern = __esmMin((() => {
17473
- init_utils$4();
17751
+ init_utils$5();
17474
17752
  }));
17475
17753
  var init_jewel_dark = __esmMin((() => {
17476
17754
  init_colorConversion();
17477
17755
  }));
17478
17756
  var init_minimal_monochrome = __esmMin((() => {
17479
- init_utils$4();
17757
+ init_utils$5();
17480
17758
  }));
17481
17759
  var init_neon_pop = __esmMin((() => {
17482
- init_utils$4();
17760
+ init_utils$5();
17483
17761
  }));
17484
17762
  var init_pastel_light = __esmMin((() => {
17485
- init_utils$4();
17763
+ init_utils$5();
17486
17764
  init_colorConversion();
17487
17765
  }));
17488
17766
  var init_soft_modern = __esmMin((() => {
17489
17767
  init_colorConversion();
17490
17768
  }));
17491
17769
  var init_split_complementary = __esmMin((() => {
17492
- init_utils$4();
17770
+ init_utils$5();
17493
17771
  }));
17494
17772
  var init_tetradic = __esmMin((() => {
17495
- init_utils$4();
17773
+ init_utils$5();
17496
17774
  }));
17497
17775
  var init_triadic_balance = __esmMin((() => {
17498
- init_utils$4();
17776
+ init_utils$5();
17499
17777
  })), init_allRecipes = __esmMin((() => {
17500
17778
  init_analogous_harmony();
17501
17779
  init_complementary_contrast();
@@ -17538,7 +17816,7 @@ var init_legibility = __esmMin((() => {
17538
17816
  }));
17539
17817
  //#endregion
17540
17818
  //#region ../theme-core/src/palette/utils/index.ts
17541
- var init_utils$4 = __esmMin((() => {
17819
+ var init_utils$5 = __esmMin((() => {
17542
17820
  init_colorConversion();
17543
17821
  init_contrast$1();
17544
17822
  init_colorPlacement();
@@ -17552,21 +17830,11 @@ var init_utils$4 = __esmMin((() => {
17552
17830
  var init_paletteAccess = __esmMin((() => {
17553
17831
  init_colorConversion();
17554
17832
  }));
17555
- var init_generateShades = __esmMin((() => {
17556
- init_colorConversion();
17557
- }));
17558
- var init_expandPalette = __esmMin((() => {
17559
- init_generateShades();
17560
- init_neutralScale();
17561
- init_colorConversion();
17562
- init_textColor();
17563
- init_onColor();
17564
- }));
17565
17833
  var init_swatch = __esmMin((() => {}));
17566
17834
  var init_PaletteCard = __esmMin((() => {
17567
17835
  init_generateCssVars();
17568
17836
  init_neutralScale();
17569
- init_utils$4();
17837
+ init_utils$5();
17570
17838
  init_paletteAccess();
17571
17839
  init_expandPalette();
17572
17840
  init_swatch();
@@ -17798,7 +18066,7 @@ function assignDeep(target, ...sources) {
17798
18066
  });
17799
18067
  return target;
17800
18068
  }
17801
- var init_utils$3 = __esmMin((() => {}));
18069
+ var init_utils$4 = __esmMin((() => {}));
17802
18070
  //#endregion
17803
18071
  //#region ../../node_modules/.pnpm/@vibrant+core@4.0.4/node_modules/@vibrant/core/dist/esm/options.js
17804
18072
  function buildProcessOptions(opts, override) {
@@ -17816,13 +18084,13 @@ function buildProcessOptions(opts, override) {
17816
18084
  }, override);
17817
18085
  }
17818
18086
  var init_options = __esmMin((() => {
17819
- init_utils$3();
18087
+ init_utils$4();
17820
18088
  }));
17821
18089
  //#endregion
17822
18090
  //#region ../../node_modules/.pnpm/@vibrant+core@4.0.4/node_modules/@vibrant/core/dist/esm/builder.js
17823
18091
  var Builder;
17824
18092
  var init_builder$1 = __esmMin((() => {
17825
- init_utils$3();
18093
+ init_utils$4();
17826
18094
  init_esm$2();
17827
18095
  Builder = class {
17828
18096
  /**
@@ -18184,7 +18452,7 @@ var init_esm$3 = __esmMin((() => {
18184
18452
  var init_client$1 = __esmMin((() => {
18185
18453
  init_esm$4();
18186
18454
  init_esm$3();
18187
- init_utils$3();
18455
+ init_utils$4();
18188
18456
  }));
18189
18457
  var init_host = __esmMin((() => {
18190
18458
  init_esm$4();
@@ -18195,7 +18463,7 @@ var _Vibrant, Vibrant;
18195
18463
  var init_esm$2 = __esmMin((() => {
18196
18464
  init_options();
18197
18465
  init_builder$1();
18198
- init_utils$3();
18466
+ init_utils$4();
18199
18467
  init_pipeline$1();
18200
18468
  init_client$1();
18201
18469
  init_host();
@@ -20242,12 +20510,8 @@ var init_sitePalettePersistence = __esmMin((() => {
20242
20510
  init_colors();
20243
20511
  init_selection();
20244
20512
  }));
20245
- var init_themePaletteCompatibility = __esmMin((() => {
20246
- init_themeColorTokens();
20247
- init_colors();
20248
- }));
20249
20513
  var init_fromVibrant = __esmMin((() => {
20250
- init_utils$4();
20514
+ init_utils$5();
20251
20515
  })), init_palette$1 = __esmMin((() => {
20252
20516
  init_all();
20253
20517
  init_classifyColor();
@@ -20256,7 +20520,7 @@ var init_fromVibrant = __esmMin((() => {
20256
20520
  init_generateShades();
20257
20521
  init_neutralScale();
20258
20522
  init_types$7();
20259
- init_utils$4();
20523
+ init_utils$5();
20260
20524
  init_paletteAccess();
20261
20525
  init_extractPalette();
20262
20526
  init_colors();
@@ -20266,7 +20530,6 @@ var init_fromVibrant = __esmMin((() => {
20266
20530
  init_resolveSelection();
20267
20531
  init_selection();
20268
20532
  init_sitePalettePersistence();
20269
- init_themePaletteCompatibility();
20270
20533
  init_fromVibrant();
20271
20534
  init_suggestRecipes();
20272
20535
  init_allRecipes();
@@ -20842,6 +21105,249 @@ var init_testimonialQuotePresets = __esmMin((() => {
20842
21105
  serifDisplayQuote = { style: "serif-display" };
20843
21106
  accentGlyphQuote = { style: "accent-glyph" };
20844
21107
  }));
21108
+ //#endregion
21109
+ //#region ../theme-core/src/gradients/types.ts
21110
+ /**
21111
+ * Gradient configuration types and schemas
21112
+ */
21113
+ var gradientStopSchema, radialGradientShapeSchema, gradientConfigSchema;
21114
+ var init_types$5 = __esmMin((() => {
21115
+ init_themeColorTokens();
21116
+ gradientStopSchema = z$1.object({
21117
+ color: themeColorTokenSchema,
21118
+ position: z$1.number().min(0).max(100)
21119
+ });
21120
+ radialGradientShapeSchema = z$1.enum(["circle", "ellipse"]);
21121
+ gradientConfigSchema = z$1.object({
21122
+ type: z$1.enum([
21123
+ "linear",
21124
+ "radial",
21125
+ "conic"
21126
+ ]).default("linear"),
21127
+ angle: z$1.number().min(0).max(360).optional(),
21128
+ shape: radialGradientShapeSchema.optional(),
21129
+ position: z$1.string().optional(),
21130
+ stops: z$1.array(gradientStopSchema).min(2)
21131
+ });
21132
+ }));
21133
+ //#endregion
21134
+ //#region ../theme-core/src/gradients/presets.ts
21135
+ function parseGradientPresetId(value) {
21136
+ if (typeof value !== "string") return null;
21137
+ const normalized = value.trim();
21138
+ if (!gradientPresetIdSet.has(normalized)) return null;
21139
+ return normalized;
21140
+ }
21141
+ var rawGradientPresets, GRADIENT_PRESETS, GRADIENT_PRESET_IDS, gradientPresetIdSet;
21142
+ var init_presets = __esmMin((() => {
21143
+ rawGradientPresets = [
21144
+ {
21145
+ id: "primary-secondary",
21146
+ name: "Primary to Secondary",
21147
+ description: "Blend your primary and secondary brand colors",
21148
+ type: "linear",
21149
+ angle: 135,
21150
+ stops: [{
21151
+ color: "primary-500",
21152
+ position: 0
21153
+ }, {
21154
+ color: "secondary-500",
21155
+ position: 100
21156
+ }]
21157
+ },
21158
+ {
21159
+ id: "primary-accent",
21160
+ name: "Primary to Accent",
21161
+ description: "Energetic gradient from primary to accent",
21162
+ type: "linear",
21163
+ angle: 135,
21164
+ stops: [{
21165
+ color: "primary-500",
21166
+ position: 0
21167
+ }, {
21168
+ color: "accent-500",
21169
+ position: 100
21170
+ }]
21171
+ },
21172
+ {
21173
+ id: "secondary-accent",
21174
+ name: "Secondary to Accent",
21175
+ description: "Vibrant secondary to accent blend",
21176
+ type: "linear",
21177
+ angle: 135,
21178
+ stops: [{
21179
+ color: "secondary-500",
21180
+ position: 0
21181
+ }, {
21182
+ color: "accent-500",
21183
+ position: 100
21184
+ }]
21185
+ },
21186
+ {
21187
+ id: "primary-light-dark",
21188
+ name: "Primary Light to Dark",
21189
+ description: "Subtle primary color fade",
21190
+ type: "linear",
21191
+ angle: 180,
21192
+ stops: [{
21193
+ color: "primary-500",
21194
+ position: 0
21195
+ }, {
21196
+ color: "primary-900",
21197
+ position: 100
21198
+ }]
21199
+ },
21200
+ {
21201
+ id: "primary-dark-light",
21202
+ name: "Primary Dark to Light",
21203
+ description: "Reverse primary fade",
21204
+ type: "linear",
21205
+ angle: 180,
21206
+ stops: [{
21207
+ color: "primary-900",
21208
+ position: 0
21209
+ }, {
21210
+ color: "primary-50",
21211
+ position: 100
21212
+ }]
21213
+ },
21214
+ {
21215
+ id: "secondary-light-dark",
21216
+ name: "Secondary Light to Dark",
21217
+ description: "Subtle secondary color fade",
21218
+ type: "linear",
21219
+ angle: 180,
21220
+ stops: [{
21221
+ color: "secondary-500",
21222
+ position: 0
21223
+ }, {
21224
+ color: "secondary-900",
21225
+ position: 100
21226
+ }]
21227
+ },
21228
+ {
21229
+ id: "accent-light-dark",
21230
+ name: "Accent Light to Dark",
21231
+ description: "Accent color depth fade",
21232
+ type: "linear",
21233
+ angle: 180,
21234
+ stops: [{
21235
+ color: "accent-500",
21236
+ position: 0
21237
+ }, {
21238
+ color: "accent-900",
21239
+ position: 100
21240
+ }]
21241
+ },
21242
+ {
21243
+ id: "background-surface",
21244
+ name: "Background to Surface",
21245
+ description: "Subtle depth using base colors",
21246
+ type: "linear",
21247
+ angle: 180,
21248
+ stops: [{
21249
+ color: "background",
21250
+ position: 0
21251
+ }, {
21252
+ color: "surface",
21253
+ position: 100
21254
+ }]
21255
+ },
21256
+ {
21257
+ id: "neutral-fade",
21258
+ name: "Neutral Gradient",
21259
+ description: "Elegant neutral color fade",
21260
+ type: "linear",
21261
+ angle: 180,
21262
+ stops: [{
21263
+ color: "neutral-900",
21264
+ position: 0
21265
+ }, {
21266
+ color: "neutral-50",
21267
+ position: 100
21268
+ }]
21269
+ },
21270
+ {
21271
+ id: "primary-glow",
21272
+ name: "Primary glow",
21273
+ description: "A soft top-centred glow using your primary palette",
21274
+ type: "radial",
21275
+ shape: "ellipse",
21276
+ position: "top center",
21277
+ stops: [{
21278
+ color: "primary-900",
21279
+ position: 0
21280
+ }, {
21281
+ color: "primary-950",
21282
+ position: 100
21283
+ }],
21284
+ foreground: {
21285
+ textColor: "onPrimary900",
21286
+ headingColor: "onPrimary900",
21287
+ linkColor: "onPrimary900",
21288
+ supportingColor: "onPrimary900"
21289
+ }
21290
+ },
21291
+ {
21292
+ id: "accent-glow",
21293
+ name: "Accent glow",
21294
+ description: "A soft top-centred glow using your accent palette",
21295
+ type: "radial",
21296
+ shape: "ellipse",
21297
+ position: "top center",
21298
+ stops: [{
21299
+ color: "accent-900",
21300
+ position: 0
21301
+ }, {
21302
+ color: "accent-950",
21303
+ position: 100
21304
+ }],
21305
+ foreground: {
21306
+ textColor: "onAccent900",
21307
+ headingColor: "onAccent900",
21308
+ linkColor: "onAccent900",
21309
+ supportingColor: "onAccent900"
21310
+ }
21311
+ },
21312
+ {
21313
+ id: "primary-secondary-accent",
21314
+ name: "Brand Trio",
21315
+ description: "All three brand colors in harmony",
21316
+ type: "linear",
21317
+ angle: 135,
21318
+ stops: [
21319
+ {
21320
+ color: "primary-500",
21321
+ position: 0
21322
+ },
21323
+ {
21324
+ color: "secondary-500",
21325
+ position: 50
21326
+ },
21327
+ {
21328
+ color: "accent-500",
21329
+ position: 100
21330
+ }
21331
+ ]
21332
+ }
21333
+ ];
21334
+ GRADIENT_PRESETS = rawGradientPresets.map((preset) => ({
21335
+ ...preset,
21336
+ id: preset.id,
21337
+ stops: preset.stops
21338
+ }));
21339
+ GRADIENT_PRESET_IDS = GRADIENT_PRESETS.map((preset) => preset.id);
21340
+ gradientPresetIdSet = new Set(GRADIENT_PRESET_IDS);
21341
+ Object.fromEntries(GRADIENT_PRESETS.map((preset) => [preset.id, preset]));
21342
+ }));
21343
+ var init_utils$3 = __esmMin((() => {}));
21344
+ //#endregion
21345
+ //#region ../theme-core/src/gradients/index.ts
21346
+ var init_gradients = __esmMin((() => {
21347
+ init_types$5();
21348
+ init_presets();
21349
+ init_utils$3();
21350
+ }));
20845
21351
  var init_customizableSurfaces = __esmMin((() => {
20846
21352
  init_types$12();
20847
21353
  })), logoTextConfidenceValues, logoAssetShapeValues, logoKindValues, logoDensityValues, logoContainsTextSchema, logoAnalysisSourceSchema, brandDisplayModeValues, logoAccommodationPatternValues, logoSizePolicyValues;
@@ -22910,7 +23416,7 @@ var init_media = __esmMin((() => {
22910
23416
  transform: transformSchema.optional()
22911
23417
  });
22912
23418
  })), inputSystemSchema;
22913
- var init_types$5 = __esmMin((() => {
23419
+ var init_types$4 = __esmMin((() => {
22914
23420
  init_themeColorTokens();
22915
23421
  inputSystemSchema = z$1.object({
22916
23422
  base: z$1.object({
@@ -23005,31 +23511,6 @@ var init_types$5 = __esmMin((() => {
23005
23511
  });
23006
23512
  }));
23007
23513
  //#endregion
23008
- //#region ../theme-core/src/gradients/types.ts
23009
- /**
23010
- * Gradient configuration types and schemas
23011
- */
23012
- var gradientStopSchema, radialGradientShapeSchema, gradientConfigSchema;
23013
- var init_types$4 = __esmMin((() => {
23014
- init_themeColorTokens();
23015
- gradientStopSchema = z$1.object({
23016
- color: themeColorTokenSchema,
23017
- position: z$1.number().min(0).max(100)
23018
- });
23019
- radialGradientShapeSchema = z$1.enum(["circle", "ellipse"]);
23020
- gradientConfigSchema = z$1.object({
23021
- type: z$1.enum([
23022
- "linear",
23023
- "radial",
23024
- "conic"
23025
- ]).default("linear"),
23026
- angle: z$1.number().min(0).max(360).optional(),
23027
- shape: radialGradientShapeSchema.optional(),
23028
- position: z$1.string().optional(),
23029
- stops: z$1.array(gradientStopSchema).min(2)
23030
- });
23031
- }));
23032
- //#endregion
23033
23514
  //#region ../theme-core/src/interactive/baseSchema.ts
23034
23515
  /**
23035
23516
  * Shared Base Schemas for Interactive Elements
@@ -23372,8 +23853,8 @@ var init_schema$1 = __esmMin((() => {
23372
23853
  init_buttons();
23373
23854
  init_cards();
23374
23855
  init_types$13();
23375
- init_types$5();
23376
23856
  init_types$4();
23857
+ init_types$5();
23377
23858
  init_types$3();
23378
23859
  init_validation$2();
23379
23860
  init_atRuleValidation();
@@ -24378,6 +24859,21 @@ var init_designState = __esmMin((() => {
24378
24859
  styleAuthorities: z$1.array(blockRuntimeStyleAuthoritySchema)
24379
24860
  }).strict();
24380
24861
  }));
24862
+ //#endregion
24863
+ //#region ../theme-core/src/site-styles/runtimeCompiler.ts
24864
+ function defineSectionForegroundRuntimeTokens(input) {
24865
+ return {
24866
+ textColor: requireThemeColorToken(input.textColor),
24867
+ headingColor: requireThemeColorToken(input.headingColor),
24868
+ linkColor: requireThemeColorToken(input.linkColor),
24869
+ supportingColor: requireThemeColorToken(input.supportingColor)
24870
+ };
24871
+ }
24872
+ function requireThemeColorToken(value) {
24873
+ const token = parseThemeColorToken(value);
24874
+ if (!token) throw new Error(`Invalid section foreground Theme color token: ${String(value)}`);
24875
+ return token;
24876
+ }
24381
24877
  function defineDesignRuntimeRules(rules) {
24382
24878
  return rules;
24383
24879
  }
@@ -24403,6 +24899,8 @@ var init_runtimeCompiler = __esmMin((() => {
24403
24899
  init_types$12();
24404
24900
  init_accessibleSurfaces();
24405
24901
  init_sectionTransitions();
24902
+ init_tokens();
24903
+ init_gradients();
24406
24904
  defaultDesignRuntimeRules = defineDesignRuntimeRules({
24407
24905
  sectionSurfaces: {
24408
24906
  base: {},
@@ -24798,13 +25296,14 @@ function inferHeaderCurationFromLegacyLooks(lookIds, recipes) {
24798
25296
  recommendedHeaderStyleChoicesByLayout: stylesByLayout
24799
25297
  };
24800
25298
  }
24801
- var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, accentLedQuietBudget, balancedBudget, expressiveBudget, kirtanOrnateDesignRuntimeRules, expressiveUnderlineInputs, ornateDarkInputs, generatedContentFrameKinds, curatedSiteStyles;
25299
+ var SOFT_EARTH_SITE_STYLE_ID_VALUE, SOFT_EARTH_SITE_STYLE_ID, curatedSiteStyleIdValues, quietBudget, accentLedQuietBudget, balancedBudget, expressiveBudget, kirtanOrnateDesignRuntimeRules, primaryGlowGradientPresetId, fulcrumDesignRuntimeRules, expressiveUnderlineInputs, ornateDarkInputs, generatedContentFrameKinds, curatedSiteStyles;
24802
25300
  var init_curatedSiteStyles = __esmMin((() => {
24803
25301
  init_personalities();
24804
25302
  init_curated();
24805
25303
  init_siteStyleDefaults$1();
24806
25304
  init_siteStyleDefaults();
24807
25305
  init_testimonialQuotePresets();
25306
+ init_gradients();
24808
25307
  init_headerLooks();
24809
25308
  init_footerLooks();
24810
25309
  init_curatedChoices();
@@ -24872,24 +25371,24 @@ var init_curatedSiteStyles = __esmMin((() => {
24872
25371
  type: "color",
24873
25372
  color: "muted"
24874
25373
  },
24875
- foreground: {
25374
+ foreground: defineSectionForegroundRuntimeTokens({
24876
25375
  textColor: "text",
24877
25376
  headingColor: "primary",
24878
25377
  linkColor: "primary",
24879
25378
  supportingColor: "text"
24880
- }
25379
+ })
24881
25380
  },
24882
25381
  "brand-depth-band": {
24883
25382
  background: {
24884
25383
  type: "color",
24885
25384
  color: "primary-800"
24886
25385
  },
24887
- foreground: {
25386
+ foreground: defineSectionForegroundRuntimeTokens({
24888
25387
  textColor: "text",
24889
25388
  headingColor: "primary",
24890
25389
  linkColor: "primary",
24891
25390
  supportingColor: "text"
24892
- }
25391
+ })
24893
25392
  },
24894
25393
  "hero-image": {
24895
25394
  background: {
@@ -24897,12 +25396,32 @@ var init_curatedSiteStyles = __esmMin((() => {
24897
25396
  opacity: 1,
24898
25397
  position: "center center"
24899
25398
  },
24900
- foreground: {
25399
+ foreground: defineSectionForegroundRuntimeTokens({
24901
25400
  textColor: "text",
24902
25401
  headingColor: "primary",
24903
25402
  linkColor: "primary",
24904
25403
  supportingColor: "text"
24905
- }
25404
+ })
25405
+ }
25406
+ }
25407
+ });
25408
+ primaryGlowGradientPresetId = parseGradientPresetId("primary-glow");
25409
+ if (!primaryGlowGradientPresetId) throw new Error("Expected primary-glow in the Theme Core gradient catalog");
25410
+ fulcrumDesignRuntimeRules = defineDesignRuntimeRules({
25411
+ ...defaultDesignRuntimeRules,
25412
+ sectionSurfaces: {
25413
+ ...defaultDesignRuntimeRules.sectionSurfaces,
25414
+ "accent-band": {
25415
+ background: {
25416
+ type: "gradient",
25417
+ gradientPresetId: primaryGlowGradientPresetId
25418
+ },
25419
+ foreground: defineSectionForegroundRuntimeTokens({
25420
+ textColor: "primaryForeground",
25421
+ headingColor: "primaryForeground",
25422
+ linkColor: "primaryForeground",
25423
+ supportingColor: "primaryForeground"
25424
+ })
24906
25425
  }
24907
25426
  }
24908
25427
  });
@@ -26079,6 +26598,8 @@ var init_curatedSiteStyles = __esmMin((() => {
26079
26598
  },
26080
26599
  compositionBudget: quietBudget,
26081
26600
  typography: fulcrumTypography,
26601
+ designRuntimeRules: fulcrumDesignRuntimeRules,
26602
+ recommendedAppearancePresetIds: ["cta-accent-band"],
26082
26603
  themeOverrides: {
26083
26604
  shadow: { colorToken: "primary" },
26084
26605
  accordions: {
@@ -27778,12 +28299,12 @@ function createSiteOptionSelectField(input) {
27778
28299
  }
27779
28300
  }));
27780
28301
  }
27781
- var visibilityLevels, MEDIA_KINDS, DISPLAY_MEDIA_KINDS, PUBLIC_FILE_FIELD_KINDS, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, visibleWhenPredicateSchema, visibleWhenSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, inlineTextFieldSchema, mediaFieldSchema, fileFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens, colorTokens, spacingTokens, radiusTokens, styleTokenSchema, behaviourSchema, quickFieldPrioritySchema, previewCustomizeManifestCurationSchema, blockCategoryEnum;
28302
+ var visibilityLevels, MEDIA_KINDS, DISPLAY_MEDIA_KINDS, PUBLIC_FILE_FIELD_KINDS, siteOptionSources, mediaDeliverySchema, selectOptionSchema, selectSourceSchema, visibleWhenPredicateSchema, visibleWhenSchema, uiSchema, baseFieldSchema, textFieldSchema, richTextFieldSchema, inlineTextFieldSchema, mediaFieldSchema, fileFieldSchema, booleanFieldSchema, dateFieldSchema, timeFieldSchema, dateTimeFieldSchema, slugFieldSchema, urlFieldSchema, linkFieldSchema, selectFieldSchema, referenceFieldSchema, itemTypeSchema, repeaterFieldSchema, groupFieldSchema, modalFieldSchema, numberFieldSchema, tabDefinitionSchema, tabGroupFieldSchema, presetOptionSchema, presetOrCustomFieldSchema, contentTypeSelectFieldSchema, entryPickerFieldSchema, _fieldSchemaInternal, fieldSchema, slotSchema, typographyTokens, colorTokens, spacingTokens, radiusTokens, styleTokenSchema, behaviourSchema, quickFieldPrioritySchema, previewCustomizeManifestCurationSchema, blockCategoryEnum, blockContentSourceKinds, blockContentSourceSchema;
27782
28303
  var init_schema = __esmMin((() => {
27783
28304
  init_src$2();
27784
28305
  init_node();
27785
28306
  init_repeaterGrid();
27786
- init_presets();
28307
+ init_presets$1();
27787
28308
  visibilityLevels = [
27788
28309
  "admin",
27789
28310
  "designer",
@@ -28309,6 +28830,21 @@ var init_schema = __esmMin((() => {
28309
28830
  "layout",
28310
28831
  "interactive"
28311
28832
  ]);
28833
+ blockContentSourceKinds = [
28834
+ "inline",
28835
+ "entries",
28836
+ "mixed"
28837
+ ];
28838
+ blockContentSourceSchema = z$1.object({
28839
+ kind: z$1.enum(blockContentSourceKinds),
28840
+ contentType: z$1.string().min(1).optional()
28841
+ }).superRefine((value, ctx) => {
28842
+ if (value.kind === "inline" && value.contentType) ctx.addIssue({
28843
+ code: z$1.ZodIssueCode.custom,
28844
+ path: ["contentType"],
28845
+ message: "contentType is not allowed when contentSource.kind is \"inline\""
28846
+ });
28847
+ });
28312
28848
  z$1.object({
28313
28849
  name: z$1.string().min(1),
28314
28850
  version: z$1.string().min(1),
@@ -28339,6 +28875,12 @@ var init_schema = __esmMin((() => {
28339
28875
  }).optional()).optional(),
28340
28876
  category: blockCategoryEnum.optional(),
28341
28877
  contentTypes: z$1.array(z$1.string()).optional(),
28878
+ /**
28879
+ * Explicit content-source classification (inline / entries / mixed). Optional at the
28880
+ * schema level for backward compatibility with SDK-defined custom blocks, but every
28881
+ * registered SYSTEM block must declare it (enforced by a registry-wide test).
28882
+ */
28883
+ contentSource: blockContentSourceSchema.optional(),
28342
28884
  tags: z$1.array(z$1.string()).optional(),
28343
28885
  icon: z$1.string().optional()
28344
28886
  });
@@ -28734,9 +29276,15 @@ var init_heroCopy = __esmMin((() => {
28734
29276
  //#endregion
28735
29277
  //#region ../blocks/src/system/fields/ctas.ts
28736
29278
  function createCtasRepeater(options = {}) {
28737
- const { id = "ctas", label = "Calls to action", itemLabel = "CTA", minItems = 0, maxItems, button } = options;
29279
+ const { id = "ctas", label = "Calls to action", itemLabel = "CTA", minItems = 0, maxItems, button, defaultValue } = options;
29280
+ const fieldId = id;
29281
+ const buttonField = createButtonGroup({
29282
+ showGroupLabel: false,
29283
+ ...button ?? {},
29284
+ flattenInRepeater: true
29285
+ });
28738
29286
  return {
28739
- id,
29287
+ id: fieldId,
28740
29288
  type: "repeater",
28741
29289
  label,
28742
29290
  itemLabel,
@@ -28745,11 +29293,8 @@ function createCtasRepeater(options = {}) {
28745
29293
  maxItems,
28746
29294
  required: false,
28747
29295
  allowConversion: true,
28748
- schema: { fields: [createButtonGroup({
28749
- showGroupLabel: false,
28750
- ...button ?? {},
28751
- flattenInRepeater: true
28752
- })] }
29296
+ ...defaultValue !== void 0 ? { defaultValue: [...defaultValue] } : {},
29297
+ schema: { fields: [buttonField] }
28753
29298
  };
28754
29299
  }
28755
29300
  var init_ctas = __esmMin((() => {
@@ -28811,6 +29356,7 @@ var init_heroCtaRow = __esmMin((() => {
28811
29356
  label: "Calls to action",
28812
29357
  itemLabel: "CTA",
28813
29358
  maxItems: 3,
29359
+ defaultValue: [],
28814
29360
  button: {
28815
29361
  variants: [
28816
29362
  {
@@ -28889,7 +29435,7 @@ var init_ctaCopy = __esmMin((() => {
28889
29435
  eyebrowPath: "content.eyebrow",
28890
29436
  titlePath: "content.title",
28891
29437
  className: "cta-heading"
28892
- }), richText({ className: "cta-content rb-prose rb-mx-auto rb-max-w-none" }, when("content.content"), bind("content.content"))]
29438
+ }), richText({ className: "cta-content rb-prose rb-mx-auto rb-max-w-none" }, when("content"), bind("content"))]
28893
29439
  });
28894
29440
  }));
28895
29441
  //#endregion
@@ -31060,6 +31606,7 @@ function createBlockManifest(config) {
31060
31606
  previewCustomize: config.previewCustomize,
31061
31607
  category: config.category,
31062
31608
  contentTypes: config.contentTypes ? [...config.contentTypes] : void 0,
31609
+ contentSource: config.contentSource,
31063
31610
  tags: config.tags ? [...config.tags] : [],
31064
31611
  icon: config.icon ?? "Box",
31065
31612
  layout,
@@ -32105,6 +32652,7 @@ const cartBlockDefinition = {
32105
32652
  paletteHidden: false
32106
32653
  },
32107
32654
  category: "interactive",
32655
+ contentSource: { kind: "inline" },
32108
32656
  tags: [
32109
32657
  "shop",
32110
32658
  "cart",
@@ -32196,6 +32744,7 @@ const checkoutBlockDefinition = {
32196
32744
  paletteHidden: false
32197
32745
  },
32198
32746
  category: "interactive",
32747
+ contentSource: { kind: "inline" },
32199
32748
  tags: [
32200
32749
  "shop",
32201
32750
  "checkout",
@@ -32471,6 +33020,7 @@ var init_course_registration_interactive = __esmMin((() => {
32471
33020
  init_builder$2();
32472
33021
  init_styledSection();
32473
33022
  init_fragments$1();
33023
+ init_button();
32474
33024
  init_api_bindings();
32475
33025
  init_shared$5();
32476
33026
  init_defineBlock();
@@ -32483,6 +33033,7 @@ const courseRegistrationBlockDefinition = {
32483
33033
  titleSource: "heading",
32484
33034
  description: "Enrollment form for multi-session courses",
32485
33035
  category: "interactive",
33036
+ contentSource: { kind: "inline" },
32486
33037
  tags: [
32487
33038
  "courses",
32488
33039
  "enrollment",
@@ -32596,15 +33147,9 @@ const courseRegistrationBlockDefinition = {
32596
33147
  defaultValue: "Sign up",
32597
33148
  maxLength: 40
32598
33149
  },
32599
- {
32600
- id: "buttonVariant",
32601
- type: "select",
32602
- label: "Button style",
33150
+ createButtonVariantField({
32603
33151
  description: "Choose a button style from your theme",
32604
- required: false,
32605
- multiple: false,
32606
- defaultValue: "primary",
32607
- options: [
33152
+ variants: [
32608
33153
  {
32609
33154
  value: "primary",
32610
33155
  label: "Primary"
@@ -32617,9 +33162,8 @@ const courseRegistrationBlockDefinition = {
32617
33162
  value: "outline",
32618
33163
  label: "Outline"
32619
33164
  }
32620
- ],
32621
- ui: { intent: "style" }
32622
- }
33165
+ ]
33166
+ })
32623
33167
  ],
32624
33168
  layout: [styledSection({
32625
33169
  baseClass: "",
@@ -32891,6 +33435,7 @@ const giftingBlockDefinition = {
32891
33435
  paletteHidden: false
32892
33436
  },
32893
33437
  category: "interactive",
33438
+ contentSource: { kind: "entries" },
32894
33439
  tags: [
32895
33440
  "gifting",
32896
33441
  "gift cards",
@@ -33275,6 +33820,7 @@ var init_event_registration_interactive = __esmMin((() => {
33275
33820
  init_builder$2();
33276
33821
  init_styledSection();
33277
33822
  init_fragments$1();
33823
+ init_button();
33278
33824
  init_api_bindings();
33279
33825
  init_shared$3();
33280
33826
  init_shop_shared();
@@ -33289,6 +33835,7 @@ const eventRegistrationBlockDefinition = {
33289
33835
  titleSource: "heading",
33290
33836
  description: "Multi-step event registration form",
33291
33837
  category: "interactive",
33838
+ contentSource: { kind: "inline" },
33292
33839
  tags: [
33293
33840
  "events",
33294
33841
  "registration",
@@ -33395,15 +33942,9 @@ const eventRegistrationBlockDefinition = {
33395
33942
  defaultValue: "Complete Registration",
33396
33943
  maxLength: 40
33397
33944
  },
33398
- {
33399
- id: "buttonVariant",
33400
- type: "select",
33401
- label: "Button style",
33945
+ createButtonVariantField({
33402
33946
  description: "Choose a button style from your theme",
33403
- required: false,
33404
- multiple: false,
33405
- defaultValue: "primary",
33406
- options: [
33947
+ variants: [
33407
33948
  {
33408
33949
  value: "primary",
33409
33950
  label: "Primary"
@@ -33416,9 +33957,8 @@ const eventRegistrationBlockDefinition = {
33416
33957
  value: "outline",
33417
33958
  label: "Outline"
33418
33959
  }
33419
- ],
33420
- ui: { intent: "style" }
33421
- }
33960
+ ]
33961
+ })
33422
33962
  ],
33423
33963
  layout: [styledSection({
33424
33964
  baseClass: "",
@@ -33736,6 +34276,7 @@ const formBlockDefinition = {
33736
34276
  paletteHidden: false
33737
34277
  },
33738
34278
  category: "interactive",
34279
+ contentSource: { kind: "inline" },
33739
34280
  tags: [
33740
34281
  "form",
33741
34282
  "contact",
@@ -34894,6 +35435,7 @@ const eventCalendarBlockDefinition = {
34894
35435
  paletteHidden: false
34895
35436
  },
34896
35437
  category: "interactive",
35438
+ contentSource: { kind: "entries" },
34897
35439
  tags: [
34898
35440
  "events",
34899
35441
  "calendar",
@@ -35399,6 +35941,7 @@ const eventListingBlockDefinition = {
35399
35941
  paletteHidden: true
35400
35942
  },
35401
35943
  category: "interactive",
35944
+ contentSource: { kind: "entries" },
35402
35945
  tags: [
35403
35946
  "events",
35404
35947
  "listing",
@@ -35858,6 +36401,7 @@ const newsletterSignupBlockDefinition = {
35858
36401
  titleSource: "title",
35859
36402
  description: "Newsletter subscription form with configurable field presets.",
35860
36403
  category: "interactive",
36404
+ contentSource: { kind: "inline" },
35861
36405
  fragments: [{
35862
36406
  fragment: newsletterCopyFragment,
35863
36407
  fieldPriority: 0
@@ -35996,6 +36540,7 @@ const productDetailBlockDefinition = {
35996
36540
  paletteHidden: false
35997
36541
  },
35998
36542
  category: "interactive",
36543
+ contentSource: { kind: "entries" },
35999
36544
  tags: [
36000
36545
  "shop",
36001
36546
  "product",
@@ -36173,6 +36718,7 @@ const productListBlockDefinition = {
36173
36718
  paletteHidden: false
36174
36719
  },
36175
36720
  category: "interactive",
36721
+ contentSource: { kind: "entries" },
36176
36722
  tags: [
36177
36723
  "shop",
36178
36724
  "products",
@@ -36445,6 +36991,7 @@ const shopBlockDefinition = {
36445
36991
  paletteHidden: false
36446
36992
  },
36447
36993
  category: "interactive",
36994
+ contentSource: { kind: "entries" },
36448
36995
  tags: [
36449
36996
  "shop",
36450
36997
  "passes",
@@ -37156,7 +37703,7 @@ var init_EventListing_view = __esmMin((() => {
37156
37703
  var AgendaEventCard;
37157
37704
  var init_AgendaEventCard = __esmMin((() => {
37158
37705
  init_eventCapacity();
37159
- init_utils$5();
37706
+ init_utils$6();
37160
37707
  AgendaEventCard = ({ event, showCapacity, onClick }) => {
37161
37708
  const eventLinkProps = resolveEventLinkProps(event);
37162
37709
  const categoryColor = event.eventCategory?.color || "rgb(var(--tb-accent))";
@@ -37245,7 +37792,7 @@ function formatAgendaDayHeader(date) {
37245
37792
  var FULL_DAY_NAMES$1, WeekAgendaView;
37246
37793
  var init_WeekAgendaView = __esmMin((() => {
37247
37794
  init_AgendaEventCard();
37248
- init_utils$5();
37795
+ init_utils$6();
37249
37796
  FULL_DAY_NAMES$1 = [
37250
37797
  "Sunday",
37251
37798
  "Monday",
@@ -37312,7 +37859,7 @@ var init_WeekBoardView = __esmMin((() => {
37312
37859
  init_clsx();
37313
37860
  init_buttons();
37314
37861
  init_eventCapacity();
37315
- init_utils$5();
37862
+ init_utils$6();
37316
37863
  SHORT_DAY_NAMES = [
37317
37864
  "Sun",
37318
37865
  "Mon",
@@ -37519,7 +38066,7 @@ var DEFAULT_EVENT_CELL_COLOR, FULL_DAY_NAMES;
37519
38066
  var init_timetableModel = __esmMin((() => {
37520
38067
  init_src$1();
37521
38068
  init_eventCapacity();
37522
- init_utils$5();
38069
+ init_utils$6();
37523
38070
  DEFAULT_EVENT_CELL_COLOR = "rgb(var(--tb-accent))";
37524
38071
  FULL_DAY_NAMES = [
37525
38072
  "Sunday",
@@ -37538,7 +38085,7 @@ init_EventListing_view();
37538
38085
  init_EventCalendar_interactive();
37539
38086
  init_WeekAgendaView();
37540
38087
  init_WeekBoardView();
37541
- init_utils$5();
38088
+ init_utils$6();
37542
38089
  init_timetableModel();
37543
38090
  init_buttons();
37544
38091
  function assertNeverDisplayMode(value) {
@@ -104097,7 +104644,7 @@ var init_EventRegistrationWizard = __esmMin((() => {
104097
104644
  init_EventRegistrationSummaryBar();
104098
104645
  init_EventSelectionStep();
104099
104646
  init_useEventRegistrationWizard();
104100
- init_utils$5();
104647
+ init_utils$6();
104101
104648
  init_themePortalRoot();
104102
104649
  init_ModalShell();
104103
104650
  init_MagicLinkForm();
@@ -113045,7 +113592,7 @@ function useCalendarEvents({ siteId: _siteId, initialEvents = [], view = "month"
113045
113592
  }
113046
113593
  var CALENDAR_FETCH_LIMIT;
113047
113594
  var init_useCalendarEvents = __esmMin((() => {
113048
- init_utils$5();
113595
+ init_utils$6();
113049
113596
  init_api();
113050
113597
  init_listOptions();
113051
113598
  init_useCalendarEvents_state();
@@ -113104,7 +113651,7 @@ var init_EventModalContext = __esmMin((() => {
113104
113651
  //#region ../blocks/src/system/runtime/nodes/events/shared/CalendarDayCell.tsx
113105
113652
  var CalendarDayCell;
113106
113653
  var init_CalendarDayCell = __esmMin((() => {
113107
- init_utils$5();
113654
+ init_utils$6();
113108
113655
  init_EventModalContext();
113109
113656
  CalendarDayCell = ({ date, events, isCurrentMonth }) => {
113110
113657
  const { openEventModal, openDayModal } = useEventModal();
@@ -113284,7 +113831,7 @@ function DayEventsModal({ date, events, showCapacity, onClose, onSelectEvent, po
113284
113831
  }
113285
113832
  var init_DayEventsModal = __esmMin((() => {
113286
113833
  init_AgendaEventCard();
113287
- init_utils$5();
113834
+ init_utils$6();
113288
113835
  init_ModalShell();
113289
113836
  }));
113290
113837
  //#endregion
@@ -113418,7 +113965,7 @@ var init_EventCombined_client = __esmMin((() => {
113418
113965
  init_WeekAgendaView();
113419
113966
  init_EventModalContext();
113420
113967
  init_EventModals();
113421
- init_utils$5();
113968
+ init_utils$6();
113422
113969
  init_buttons();
113423
113970
  init_listOptions();
113424
113971
  init_calendarViewOptions();
@@ -113904,7 +114451,7 @@ var init_EventCalendar_client = __esmMin((() => {
113904
114451
  init_useEventFilters();
113905
114452
  init_CalendarDayCell();
113906
114453
  init_EventFilters();
113907
- init_utils$5();
114454
+ init_utils$6();
113908
114455
  init_EventModalContext();
113909
114456
  init_EventModals();
113910
114457
  init_WeekAgendaView();
@@ -115027,7 +115574,7 @@ init_surfaces();
115027
115574
  init_curatedSiteStyles();
115028
115575
  //#endregion
115029
115576
  //#region ../theme-core/src/inputs/generateInputCss.ts
115030
- init_types$5();
115577
+ init_types$4();
115031
115578
  init_constants$2();
115032
115579
  init_colorStyles();
115033
115580
  //#endregion
@@ -115925,6 +116472,7 @@ var init_event_details = __esmMin((() => {
115925
116472
  titleSource: "heading",
115926
116473
  description: "Date/time, venue, map, and other dates for an event",
115927
116474
  category: "content",
116475
+ contentSource: { kind: "entries" },
115928
116476
  tags: [
115929
116477
  "events",
115930
116478
  "venue",