@riverbankcms/sdk 0.145.0 → 0.147.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 (254) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/dist/{PreviewEditorSidebar-O-V6Pl5a.mjs → PreviewEditorSidebar-DtpB3_sS.mjs} +51 -33
  3. package/dist/{PreviewEditorUI-1UlX_9cw.mjs → PreviewEditorUI-DxTLgaHo.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-BxGwdOCV.mjs → PreviewQueryProvider-Dd4dxOiU.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-DYbA_4iv.mjs → SdkPreviewModeRuntime-DMMNCngt.mjs} +311 -186
  6. package/dist/{SiteChromeCustomizeContext-CNTKQ9nx.mjs → SiteChromeCustomizeContext-DQXZXiqS.mjs} +3808 -2395
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +1122 -0
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +102 -0
  9. package/dist/_dts/api/src/accountApi.d.ts +5 -5
  10. package/dist/_dts/api/src/bookingConfig.d.ts +24 -1
  11. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +11 -26
  12. package/dist/_dts/api/src/bookingManagementEventEndpointTypes.d.ts +45 -1
  13. package/dist/_dts/api/src/bookingOperations.d.ts +2 -44
  14. package/dist/_dts/api/src/bookingPeople.d.ts +92 -0
  15. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +38 -0
  16. package/dist/_dts/api/src/bookingRecords.d.ts +11 -49
  17. package/dist/_dts/api/src/bookingSettingsSections.d.ts +1 -1
  18. package/dist/_dts/api/src/bookings.d.ts +1 -0
  19. package/dist/_dts/api/src/clientErrorReporting.d.ts +50 -0
  20. package/dist/_dts/api/src/communications.d.ts +20 -4
  21. package/dist/_dts/api/src/contentRuntime.d.ts +3 -7
  22. package/dist/_dts/api/src/endpoints.d.ts +816 -655
  23. package/dist/_dts/api/src/event-visibility.d.ts +20 -0
  24. package/dist/_dts/api/src/eventManagementContracts.d.ts +72 -4
  25. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +24 -0
  26. package/dist/_dts/api/src/eventPageWords.d.ts +19 -0
  27. package/dist/_dts/api/src/eventSeriesRegistrationEndpointDefinitions.d.ts +14 -0
  28. package/dist/_dts/api/src/index.d.ts +9 -2
  29. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  30. package/dist/_dts/api/src/indexExtendedTypes.d.ts +1 -1
  31. package/dist/_dts/api/src/launchReadiness.d.ts +19 -6
  32. package/dist/_dts/api/src/launchRequirementPriority.d.ts +3 -0
  33. package/dist/_dts/api/src/mailingListIntegration.d.ts +6 -0
  34. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +1 -1
  35. package/dist/_dts/api/src/newsletterCampaignCommandEndpoints.d.ts +13 -0
  36. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +57 -0
  37. package/dist/_dts/api/src/occurrenceScheduling.d.ts +29 -0
  38. package/dist/_dts/api/src/pageSurfaceEndpoints.d.ts +44 -0
  39. package/dist/_dts/api/src/participantMessaging.d.ts +11 -1
  40. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +48 -0
  41. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +7 -0
  42. package/dist/_dts/api/src/sdk-event-upsert.d.ts +55 -1
  43. package/dist/_dts/api/src/sdkContracts.d.ts +3 -42
  44. package/dist/_dts/api/src/sdkCourseBooking.d.ts +30 -0
  45. package/dist/_dts/api/src/sdkEventEndpointDefinitions.d.ts +76 -0
  46. package/dist/_dts/api/src/sdkEventLifecycle.d.ts +37 -0
  47. package/dist/_dts/api/src/sdkManagedEventContracts.d.ts +18 -0
  48. package/dist/_dts/api/src/sdkPageDesign.d.ts +388 -0
  49. package/dist/_dts/api/src/sdkPageDesignEndpointDefinitions.d.ts +22 -0
  50. package/dist/_dts/api/src/sdkPullEventContracts.d.ts +46 -0
  51. package/dist/_dts/api/src/siteAddressEndpoints.d.ts +29 -0
  52. package/dist/_dts/api/src/siteLifecycleEndpoints.d.ts +61 -0
  53. package/dist/_dts/api/src/siteManagementEndpointDefinitions.d.ts +49 -0
  54. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +6 -49
  55. package/dist/_dts/api/src/siteOnboarding.d.ts +72 -18
  56. package/dist/_dts/api/src/sitePlatformEndpoints.d.ts +1 -1
  57. package/dist/_dts/api/src/types.d.ts +7 -1
  58. package/dist/_dts/api/src/wholeSeriesRuns.d.ts +14 -0
  59. package/dist/_dts/blocks/src/PageRenderer.d.ts +3 -4
  60. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -0
  61. package/dist/_dts/blocks/src/index.d.ts +2 -0
  62. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +29 -1
  63. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +5 -1
  64. package/dist/_dts/blocks/src/system/blocks/events/shared/schemas.d.ts +27 -5
  65. package/dist/_dts/blocks/src/system/blocks/events/shared/types.d.ts +14 -1
  66. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +4 -1
  67. package/dist/_dts/blocks/src/system/icons/social.d.ts +1 -1
  68. package/dist/_dts/blocks/src/system/registry.d.ts +1 -1
  69. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +4 -0
  70. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +12 -0
  71. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +12 -0
  72. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +6 -0
  73. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -0
  74. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +2 -0
  75. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +9 -0
  76. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +9 -0
  77. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +19 -0
  78. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.d.ts +5 -0
  79. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-note.d.ts +3 -0
  80. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-state.d.ts +9 -0
  81. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.reserved-fields.d.ts +1 -1
  82. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +1 -1
  83. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +2 -0
  84. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +8 -0
  85. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-success.d.ts +9 -0
  86. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +3 -0
  87. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +3 -0
  88. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +3 -0
  89. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +3 -0
  90. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/eventSourceRecovery.d.ts +1 -0
  91. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +2 -0
  92. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +6 -0
  93. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +3 -0
  94. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +8 -0
  95. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +9 -0
  96. package/dist/_dts/blocks/src/system/runtime/nodes/events/shared/eventCollectionContract.d.ts +20 -4
  97. package/dist/_dts/blocks/src/system/runtime/nodes/form.fields.d.ts +5 -0
  98. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +34 -0
  99. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.client.d.ts +1 -1
  100. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.interactive.d.ts +6 -1
  101. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.parts.d.ts +46 -0
  102. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.types.d.ts +2 -1
  103. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +4 -1
  104. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingMailingListNote.d.ts +6 -0
  105. package/dist/_dts/blocks/src/system/runtime/shared/components/CheckboxChoice.d.ts +18 -0
  106. package/dist/_dts/blocks/src/system/runtime/shared/components/index.d.ts +1 -0
  107. package/dist/_dts/blocks/src/system/runtime/shared/mailingListSignupCopy.d.ts +6 -0
  108. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -0
  109. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -2
  110. package/dist/_dts/blocks/src/system/transforms/registry/core.d.ts +2 -0
  111. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +1 -3
  112. package/dist/_dts/content-editor/src/index.d.ts +1 -0
  113. package/dist/_dts/content-editor/src/primitives/previewEditableOutline.d.ts +2 -0
  114. package/dist/_dts/content-editor/src/ui/editorBlockEquality.d.ts +3 -0
  115. package/dist/_dts/content-editor/src/ui/editorSnapshot.d.ts +3 -5
  116. package/dist/_dts/core/src/block-content-identity.d.ts +5 -0
  117. package/dist/_dts/core/src/editor-state.d.ts +2 -7
  118. package/dist/_dts/core/src/index.d.ts +2 -1
  119. package/dist/_dts/core/src/mailing-list-runtime.d.ts +15 -0
  120. package/dist/_dts/core/src/mailing-list-setup.d.ts +2 -0
  121. package/dist/_dts/core/src/mailing-list-submission.d.ts +9 -1
  122. package/dist/_dts/core/src/navigation-portal-labels.d.ts +9 -0
  123. package/dist/_dts/core/src/participants.d.ts +0 -38
  124. package/dist/_dts/core/src/public-event-booking-availability.d.ts +20 -1
  125. package/dist/_dts/core/src/public-profile.d.ts +3 -1
  126. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +151 -24
  127. package/dist/_dts/editor-blocks/src/BlockEditor.d.ts +3 -0
  128. package/dist/_dts/editor-blocks/src/block-editor/EmptyState.d.ts +13 -1
  129. package/dist/_dts/editor-blocks/src/block-editor/actionPresentation.d.ts +1 -0
  130. package/dist/_dts/editor-blocks/src/block-editor/types.d.ts +2 -8
  131. package/dist/_dts/editor-blocks/src/index.d.ts +1 -0
  132. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +7 -1
  133. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +5 -5
  134. package/dist/_dts/preview-next/src/client/preview/PreviewEntryControllerProvider.d.ts +1 -2
  135. package/dist/_dts/sdk/src/next/renderSdkContent.d.ts +0 -1
  136. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +3 -2
  137. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +3 -2
  138. package/dist/_dts/sdk/src/rendering/helpers/loadContent.d.ts +6 -1
  139. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +5 -2
  140. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +6 -1
  141. package/dist/_dts/sdk/src/rendering/helpers/templateContent.d.ts +2 -0
  142. package/dist/_dts/sdk/src/rendering/hooks/useContent.d.ts +5 -1
  143. package/dist/_dts/sdk/src/rendering/hooks/usePage.d.ts +5 -1
  144. package/dist/_dts/sdk/src/version.d.ts +1 -1
  145. package/dist/_dts/surfaces/src/index.d.ts +9 -0
  146. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +1 -1
  147. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +13 -0
  148. package/dist/_dts/theme-core/src/footer/index.d.ts +1 -0
  149. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  150. package/dist/_dts/theme-core/src/header/effectiveNavLinkStyle.d.ts +17 -0
  151. package/dist/_dts/theme-core/src/header/generateHeaderLogoStyles.d.ts +15 -0
  152. package/dist/_dts/theme-core/src/header/generateHeaderNavLinkStyles.d.ts +4 -0
  153. package/dist/_dts/theme-core/src/header/index.d.ts +3 -0
  154. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +1 -1
  155. package/dist/_dts/theme-core/src/header/openingForegroundProjection.d.ts +7 -0
  156. package/dist/_dts/theme-core/src/header/rootPaint.d.ts +4 -0
  157. package/dist/_dts/theme-core/src/inputs/checkable.d.ts +42 -0
  158. package/dist/_dts/theme-core/src/inputs/inputGroup.d.ts +19 -0
  159. package/dist/_dts/theme-core/src/navigation/effectPolicy.d.ts +38 -0
  160. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +4 -0
  161. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -0
  162. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +1 -1
  163. package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +7 -0
  164. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +29 -22
  165. package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +10 -2
  166. package/dist/_dts/theme-core/src/surfaces/resolveSurfaceForeground.d.ts +9 -0
  167. package/dist/_dts/theme-core/src/utils/cssDeclarations.d.ts +2 -0
  168. package/dist/_dts/ui/src/badge.d.ts +2 -1
  169. package/dist/_dts/ui/src/button.d.ts +1 -1
  170. package/dist/_dts/ui/src/combobox-keys.d.ts +23 -0
  171. package/dist/_dts/ui/src/combobox-rows.d.ts +34 -0
  172. package/dist/_dts/ui/src/combobox.d.ts +26 -1
  173. package/dist/_dts/ui/src/date-picker.d.ts +5 -8
  174. package/dist/_dts/ui/src/editor-item-card.d.ts +1 -0
  175. package/dist/_dts/ui/src/field-trigger.d.ts +39 -0
  176. package/dist/_dts/ui/src/fieldControl.d.ts +27 -0
  177. package/dist/_dts/ui/src/index.d.ts +4 -1
  178. package/dist/_dts/ui/src/native-select.d.ts +8 -0
  179. package/dist/_dts/ui/src/navigation-tabs.d.ts +2 -1
  180. package/dist/_dts/ui/src/popover.d.ts +7 -1
  181. package/dist/_dts/ui/src/segmented-control.d.ts +4 -0
  182. package/dist/_dts/ui/src/surface.d.ts +1 -1
  183. package/dist/client/{BookingConsentAgreement-DlVOmpW4.mjs → BookingMailingListNote-1n4Ch_u_.mjs} +15 -4
  184. package/dist/client/CheckboxChoice-B33MqoUo.mjs +24 -0
  185. package/dist/client/{DiscountCodeDisclosure-T9q623PQ.mjs → DiscountCodeDisclosure-CKJtz0mY.mjs} +1 -1
  186. package/dist/client/{EventCombined.client-DnsUeONl.mjs → EventCombined.client-C0pgma9y.mjs} +7 -7
  187. package/dist/client/{EventListing.client-CNBFqJS4.mjs → EventListing.client-4fhLOvHP.mjs} +2 -2
  188. package/dist/client/{LeafletStaticMap-C7higg52.mjs → LeafletStaticMap-DScC4F3w.mjs} +1 -1
  189. package/dist/client/{scrollToBlock-CWs8EIdo.mjs → TerminalPanel-B5ZUsYhe.mjs} +77 -77
  190. package/dist/client/{ThemedButton-LAJTNrS8.mjs → ThemedButton-DoVIV1Ao.mjs} +2 -2
  191. package/dist/client/{accordion-BcNF9TjX.mjs → accordion-CoT5g7zo.mjs} +1 -1
  192. package/dist/client/{bookingForm-BUaQ3S03.mjs → bookingForm-BWxB46xD.mjs} +251 -150
  193. package/dist/client/bookings.mjs +415 -234
  194. package/dist/client/{carousel-CTdF6e0V.mjs → carousel-DtNYWFd3.mjs} +2 -2
  195. package/dist/client/{carousel.client-jahpU9Vz.mjs → carousel.client-A2lG-9od.mjs} +1 -1
  196. package/dist/client/{cart-pGtyf_XU.mjs → cart-z4qZih1Y.mjs} +3 -3
  197. package/dist/client/{checkout-Da9WSn7Y.mjs → checkout-DpL7euFH.mjs} +3 -3
  198. package/dist/client/{checkoutUrls-CW3-78uu.mjs → checkoutUrls-BEfR7kVu.mjs} +1 -1
  199. package/dist/client/client.mjs +3721 -2220
  200. package/dist/client/{colorStyles-CuJBiS-1.mjs → colorStyles-j5U9v5JA.mjs} +5 -1
  201. package/dist/client/{context-BFeY_Wbm.mjs → context-C8TinPJc.mjs} +1 -1
  202. package/dist/client/{dates-BhwVSxDg.mjs → dates-vwwxTeB0.mjs} +2 -3
  203. package/dist/client/{eventCalendar-BAtdnR4s.mjs → eventCalendar-DIbHfJXO.mjs} +10 -10
  204. package/dist/client/{eventCombined-RksA3tRC.mjs → eventCombined-DoGMJ6cg.mjs} +4 -4
  205. package/dist/client/{eventDetails-BB9hB4wR.mjs → eventDetails-BjN9v6a1.mjs} +4 -4
  206. package/dist/client/{eventListing-BpJBkviM.mjs → eventListing-DajjWgOv.mjs} +4 -4
  207. package/dist/client/{eventRegistration-B18jFq_o.mjs → eventRegistration-DMq9gMA-.mjs} +121 -54
  208. package/dist/client/{form-Dodt8Y8t.mjs → form-Qf6qTbos.mjs} +136 -105
  209. package/dist/client/{headerSection-B0qj9ttg.mjs → headerSection-D7qJrqFX.mjs} +3 -3
  210. package/dist/client/hooks.mjs +1148 -179
  211. package/dist/client/{locationMap-gn-iMk7a.mjs → locationMap-CCF9-t_0.mjs} +4 -4
  212. package/dist/client/{FieldValidationMessage-AYanWFb-.mjs → mailingListSignupCopy-DZSHZrm6.mjs} +14 -1
  213. package/dist/client/{media-BtJ37tzS.mjs → media-CwBGetqC.mjs} +1 -1
  214. package/dist/client/{newsletterForm-oByLdFkr.mjs → newsletterForm-DzCLSP4S.mjs} +206 -104
  215. package/dist/client/{pricing-BOU0_Hai.mjs → pricing-Cgxv2KLC.mjs} +1 -1
  216. package/dist/client/{productDetail-D9v1zH2j.mjs → productDetail-ru9w5GHx.mjs} +3 -3
  217. package/dist/client/{productList-D-mItx1n.mjs → productList-zaapKSl-.mjs} +3 -3
  218. package/dist/client/{propsDecoder-C3TP_z4x.mjs → propsDecoder-CwvvNOHx.mjs} +91 -28
  219. package/dist/client/rendering/client.mjs +1441 -826
  220. package/dist/client/rendering/islands.mjs +19 -19
  221. package/dist/client/rendering.mjs +3652 -2005
  222. package/dist/client/{routeIslandApiConfig-DzN1W0sq.mjs → routeIslandApiConfig-BwVFo0Y4.mjs} +1 -1
  223. package/dist/client/{shop-commerce-gklw_hLF.mjs → shop-commerce-De7gEnkA.mjs} +8 -8
  224. package/dist/client/{shop-commerce-store-Sf1eyTaZ.mjs → shop-commerce-store-B3MCxIBW.mjs} +1 -1
  225. package/dist/client/{shop-Dufw7N7o.mjs → shop-mktkXvbV.mjs} +7 -7
  226. package/dist/client/{shopShared-B5nyA41S.mjs → shopShared-TqExh235.mjs} +5 -5
  227. package/dist/client/{useEventFilters-CLL829vy.mjs → useEventFilters-n_OjkIjX.mjs} +8 -8
  228. package/dist/preview-next/before-render.mjs +490 -153
  229. package/dist/preview-next/client/runtime.mjs +4 -4
  230. package/dist/preview-next/editor-base.css +64 -2
  231. package/dist/preview-next/editor-chrome.css +7 -4
  232. package/dist/preview-next/keepAlive.mjs +450 -153
  233. package/dist/preview-next/middleware.mjs +451 -153
  234. package/dist/{previewAuthStore-BxAFlu-j.mjs → previewAuthStore-C_EHQ5XA.mjs} +475 -153
  235. package/dist/{sdk-runtime-D0uZFev7.mjs → sdk-runtime-BIkJg5y1.mjs} +2 -2
  236. package/dist/{separator-EvdCAn4V.mjs → separator-C9qDP95Z.mjs} +1 -1
  237. package/dist/server/components.mjs +4957 -3509
  238. package/dist/server/config-validation.mjs +1115 -189
  239. package/dist/server/config.mjs +1115 -189
  240. package/dist/server/data.mjs +1113 -188
  241. package/dist/server/index.mjs +492 -154
  242. package/dist/server/navigation.mjs +13 -2
  243. package/dist/server/next.mjs +4798 -3462
  244. package/dist/server/page-converter.mjs +143 -89
  245. package/dist/server/prebuild.mjs +1 -1
  246. package/dist/server/rendering/server.mjs +3862 -2414
  247. package/dist/server/rendering.mjs +5648 -4154
  248. package/dist/server/routing.mjs +1223 -329
  249. package/dist/server/server.mjs +1172 -314
  250. package/dist/server/theme-bridge.mjs +533 -128
  251. package/dist/server/theme.mjs +5 -1
  252. package/dist/styles/index.css +218 -69
  253. package/package.json +1 -1
  254. package/dist/_dts/core/src/participant-identity.d.ts +0 -135
@@ -902,26 +902,21 @@ function isOnColorBackgroundCandidateToken(token) {
902
902
  return BACKGROUND_ROLE_NAMES.has(role);
903
903
  }
904
904
  //#endregion
905
- //#region ../theme-core/src/surfaces/foregroundRoles.ts
906
- const SURFACE_FOREGROUND_ROLES = [
907
- "text",
908
- "heading",
909
- "link",
910
- "supporting"
911
- ];
912
- //#endregion
913
905
  //#region ../theme-core/src/surfaces/foregroundContract.ts
914
906
  const SURFACE_FOREGROUND_CSS_VARS = {
915
907
  text: "--rb-surface-text-color",
916
908
  heading: "--rb-surface-heading-color",
917
909
  link: "--rb-surface-link-color",
910
+ linkHover: "--rb-surface-link-hover-color",
918
911
  supporting: "--rb-surface-supporting-color"
919
912
  };
920
913
  const DEFAULT_SURFACE_TEXT_COLOR = "rgb(var(--tb-text, 17 24 39))";
914
+ const DEFAULT_SURFACE_LINK_COLOR = "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))";
921
915
  const DEFAULT_ROLE_FALLBACKS = {
922
916
  text: DEFAULT_SURFACE_TEXT_COLOR,
923
917
  heading: DEFAULT_SURFACE_TEXT_COLOR,
924
- link: "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))",
918
+ link: DEFAULT_SURFACE_LINK_COLOR,
919
+ linkHover: DEFAULT_SURFACE_LINK_COLOR,
925
920
  supporting: "rgb(var(--tb-mutedText, 100 116 139))"
926
921
  };
927
922
  function requireSurfaceColorValue(role, value) {
@@ -931,10 +926,12 @@ function requireSurfaceColorValue(role, value) {
931
926
  }
932
927
  function completeSurfaceForegrounds(input) {
933
928
  const text = requireSurfaceColorValue("text", input.text);
929
+ const link = input.link === void 0 ? text : requireSurfaceColorValue("link", input.link);
934
930
  return {
935
931
  text,
936
932
  heading: input.heading === void 0 ? text : requireSurfaceColorValue("heading", input.heading),
937
- link: input.link === void 0 ? text : requireSurfaceColorValue("link", input.link),
933
+ link,
934
+ linkHover: input.linkHover === void 0 ? link : requireSurfaceColorValue("linkHover", input.linkHover),
938
935
  supporting: input.supporting === void 0 ? text : requireSurfaceColorValue("supporting", input.supporting)
939
936
  };
940
937
  }
@@ -942,15 +939,30 @@ function surfaceForegroundValue(role, outsideProviderFallback = DEFAULT_ROLE_FAL
942
939
  const roleVariable = SURFACE_FOREGROUND_CSS_VARS[role];
943
940
  const fallback = requireSurfaceColorValue("fallback", outsideProviderFallback);
944
941
  if (role === "text") return `var(${roleVariable}, ${fallback})`;
942
+ if (role === "linkHover") return `var(${roleVariable}, ${surfaceForegroundValue("link", fallback)})`;
945
943
  return `var(${roleVariable}, var(${SURFACE_FOREGROUND_CSS_VARS.text}, ${fallback}))`;
946
944
  }
947
945
  function surfaceForegroundValueWithOpacity(role, opacityPercent) {
948
946
  if (!Number.isFinite(opacityPercent) || opacityPercent < 0 || opacityPercent > 100) throw new RangeError("Surface foreground opacity must be between 0 and 100.");
949
947
  return `color-mix(in srgb, ${surfaceForegroundValue(role)} ${opacityPercent}%, transparent)`;
950
948
  }
951
- function surfaceForegroundDeclarations(input) {
949
+ function surfaceForegroundStyle(input) {
952
950
  const foregrounds = completeSurfaceForegrounds(input);
953
- return [`color: ${foregrounds.text}`, ...SURFACE_FOREGROUND_ROLES.map((role) => `${SURFACE_FOREGROUND_CSS_VARS[role]}: ${foregrounds[role]}`)];
951
+ return {
952
+ color: foregrounds.text,
953
+ [SURFACE_FOREGROUND_CSS_VARS.text]: foregrounds.text,
954
+ [SURFACE_FOREGROUND_CSS_VARS.heading]: foregrounds.heading,
955
+ [SURFACE_FOREGROUND_CSS_VARS.link]: foregrounds.link,
956
+ [SURFACE_FOREGROUND_CSS_VARS.linkHover]: foregrounds.linkHover,
957
+ [SURFACE_FOREGROUND_CSS_VARS.supporting]: foregrounds.supporting,
958
+ "--rb-surface-link-hover-decoration": hoverDecoration(input)
959
+ };
960
+ }
961
+ function surfaceForegroundDeclarations(input) {
962
+ return Object.entries(surfaceForegroundStyle(input)).map(([property, value]) => `${property}: ${value};`);
963
+ }
964
+ function hoverDecoration(input) {
965
+ return input.hoverDecoration ?? "underline";
954
966
  }
955
967
  //#endregion
956
968
  //#region ../theme-core/src/buttons/constants.ts
@@ -3902,6 +3914,12 @@ function cardDecorationPseudoRules(containerSelectors, decorations, resolveColor
3902
3914
  });
3903
3915
  }
3904
3916
  //#endregion
3917
+ //#region ../theme-core/src/utils/cssDeclarations.ts
3918
+ /** Render CSS declarations whether callers provide terminators or fragments. */
3919
+ function renderCssDeclarations(declarations) {
3920
+ return declarations.map((declaration) => declaration.endsWith(";") ? declaration : `${declaration};`).join("\n ");
3921
+ }
3922
+ //#endregion
3905
3923
  //#region ../theme-core/src/cards/core.ts
3906
3924
  /**
3907
3925
  * Core Card CSS Generator
@@ -4004,6 +4022,9 @@ function generateCardCoreCss(scopeId, variants, settings, scope = "all") {
4004
4022
  * A variant's background and, when it owns one, the complete foreground
4005
4023
  * contract that goes with it. Opaque cards are surface providers; transparent
4006
4024
  * variants inherit the nearest outer surface atomically and declare nothing.
4025
+ * The SDK bridge has token references but no resolved palette or global prose
4026
+ * preference. It therefore publishes the conservative resting hover plus
4027
+ * underline through the shared contract instead of claiming measured contrast.
4007
4028
  */
4008
4029
  function cardSurfaceDeclarations(variant) {
4009
4030
  if (variant.background === "solid" && variant.backgroundToken) return [`background: rgb(var(--tb-${variant.backgroundToken}))`, ...surfaceForegroundDeclarations({ text: `rgb(var(--tb-${variant.foregroundToken ?? "text"}))` })];
@@ -4039,7 +4060,7 @@ function generateVariantCss$1(scopeId, variant, settings, scope = "all") {
4039
4060
  const mediaRules = mediaCornerRules(variant.cornerRadii, settings.corners);
4040
4061
  const contentRules = [`padding: ${SPACING_MAP[variant.spacing]}`];
4041
4062
  return [
4042
- `${containerSelector} {\n ${containerRules.join(";\n ")};\n}`,
4063
+ `${containerSelector} {\n ${renderCssDeclarations(containerRules)}\n}`,
4043
4064
  ...cardDecorationPseudoRules(containerSelectors, decorations, coreColor),
4044
4065
  `${fallbackBackgroundSelector} {\n background: transparent;\n}`,
4045
4066
  `${mediaSelector} {\n ${mediaRules.join(";\n ")};\n}`,
@@ -11911,6 +11932,270 @@ const curatedSiteStyles = [
11911
11932
  ];
11912
11933
  new Map(curatedSiteStyles.map((style) => [style.id, style]));
11913
11934
  //#endregion
11935
+ //#region ../theme-core/src/inputs/checkable.ts
11936
+ /**
11937
+ * Checkbox and radio CSS shared by the full theme generator and the SDK
11938
+ * theme bridge, so both render the same customer-facing controls.
11939
+ *
11940
+ * Emits:
11941
+ * - .form-checkbox / .form-radio: the controls themselves. The tick and dot
11942
+ * are drawn with ::before so their colour comes from theme tokens rather
11943
+ * than a baked-in SVG.
11944
+ * - .form-check: a label row holding a control and its text. The control
11945
+ * lines up with the first line of text, so long labels wrap cleanly.
11946
+ * - .form-check--tile: a bordered, fully clickable panel for agreements
11947
+ * (booking consent, consent fields) that tints when ticked.
11948
+ */
11949
+ const CHECKABLE_SIZE = "1.375rem";
11950
+ /** Never fully round: a round checkbox reads as a radio. */
11951
+ const CHECKBOX_RADIUS = {
11952
+ square: "0",
11953
+ soft: "0.25rem",
11954
+ rounded: "0.375rem",
11955
+ pill: "0.375rem"
11956
+ };
11957
+ /** Tiles hold wrapping text, so pill themes get a generous radius, not a capsule. */
11958
+ const TILE_RADIUS = {
11959
+ square: "0",
11960
+ soft: "0.5rem",
11961
+ rounded: "0.75rem",
11962
+ pill: "1rem"
11963
+ };
11964
+ const ON_ACCENT_TOKENS = {
11965
+ primary: "onPrimary",
11966
+ secondary: "onSecondary",
11967
+ accent: "onAccent"
11968
+ };
11969
+ /**
11970
+ * Colour for the tick/dot drawn on top of the accent fill. Uses the palette's
11971
+ * matching "on" token where there is one, falling back to white.
11972
+ */
11973
+ /** The accent at full strength: `primary/70` becomes `primary`. */
11974
+ function solidAccentToken(accentToken) {
11975
+ const parsed = parseColorTokenParts(accentToken);
11976
+ return parsed.kind === "token" ? parsed.token : accentToken;
11977
+ }
11978
+ function checkableMarkColor(accentToken) {
11979
+ const parsed = parseColorTokenParts(accentToken);
11980
+ const onToken = parsed.kind === "token" ? ON_ACCENT_TOKENS[parsed.token] : void 0;
11981
+ return onToken ? `rgb(var(--tb-${onToken}, 255 255 255))` : "rgb(255 255 255)";
11982
+ }
11983
+ function checkableSelectors(root) {
11984
+ return {
11985
+ checkbox: `${root} .form-checkbox`,
11986
+ radio: `${root} .form-radio`,
11987
+ check: `${root} .form-check`,
11988
+ tile: `${root} .form-check--tile`
11989
+ };
11990
+ }
11991
+ /** The box and circle themselves, unchecked. */
11992
+ function controlBaseCss(sel, input) {
11993
+ const border = input.borderWidth === "0" ? "1px" : input.borderWidth;
11994
+ return [
11995
+ `${sel.checkbox},
11996
+ ${sel.radio} {
11997
+ appearance: none;
11998
+ display: inline-grid;
11999
+ place-content: center;
12000
+ width: ${CHECKABLE_SIZE};
12001
+ height: ${CHECKABLE_SIZE};
12002
+ margin: 0;
12003
+ flex-shrink: 0;
12004
+ border: ${border} solid ${input.borderColor};
12005
+ background-color: ${input.background};
12006
+ color: inherit;
12007
+ cursor: pointer;
12008
+ transition: background-color 0.15s ease, border-color 0.15s ease, box-shadow 0.15s ease;
12009
+ }`,
12010
+ `${sel.checkbox} {
12011
+ border-radius: ${CHECKBOX_RADIUS[input.corners]};
12012
+ }`,
12013
+ `${sel.radio} {
12014
+ border-radius: 9999px;
12015
+ }`
12016
+ ];
12017
+ }
12018
+ /** The tick and dot, drawn with ::before so their colour is a theme token. */
12019
+ function controlMarkCss(sel, accentToken) {
12020
+ return [
12021
+ `${sel.checkbox}::before,
12022
+ ${sel.radio}::before {
12023
+ content: "";
12024
+ background-color: ${checkableMarkColor(accentToken)};
12025
+ transform: scale(0);
12026
+ transition: transform 0.12s ease;
12027
+ }`,
12028
+ `${sel.checkbox}::before {
12029
+ width: 0.75rem;
12030
+ height: 0.75rem;
12031
+ clip-path: polygon(14% 52%, 0 67%, 38% 100%, 100% 22%, 85% 8%, 37% 70%);
12032
+ }`,
12033
+ `${sel.radio}::before {
12034
+ width: 0.5rem;
12035
+ height: 0.5rem;
12036
+ border-radius: 9999px;
12037
+ }`
12038
+ ];
12039
+ }
12040
+ function controlStateCss(sel, input) {
12041
+ const accent = rgbColorValue(solidAccentToken(input.accentToken));
12042
+ return [
12043
+ `${sel.checkbox}:hover,
12044
+ ${sel.radio}:hover,
12045
+ ${sel.check}:hover > .form-checkbox,
12046
+ ${sel.check}:hover > .form-radio {
12047
+ border-color: ${accent};
12048
+ }`,
12049
+ `${sel.checkbox}:checked,
12050
+ ${sel.radio}:checked {
12051
+ background-color: ${accent};
12052
+ border-color: ${accent};
12053
+ }`,
12054
+ `${sel.checkbox}:checked::before,
12055
+ ${sel.radio}:checked::before {
12056
+ transform: scale(1);
12057
+ }`,
12058
+ `${sel.checkbox}:focus-visible,
12059
+ ${sel.radio}:focus-visible {
12060
+ outline: 2px solid ${accent};
12061
+ outline-offset: 2px;
12062
+ }`,
12063
+ `${sel.checkbox}:disabled,
12064
+ ${sel.radio}:disabled {
12065
+ opacity: 0.5;
12066
+ cursor: not-allowed;
12067
+ }`
12068
+ ];
12069
+ }
12070
+ /** Label row: control lined up with the first line of wrapping text. */
12071
+ function checkRowCss(sel) {
12072
+ return [
12073
+ `${sel.check} {
12074
+ display: flex;
12075
+ align-items: flex-start;
12076
+ gap: 0.75rem;
12077
+ line-height: 1.5;
12078
+ cursor: pointer;
12079
+ }`,
12080
+ `${sel.check} > .form-checkbox,
12081
+ ${sel.check} > .form-radio {
12082
+ margin-top: 0.0625rem;
12083
+ margin-top: max(0px, calc((1lh - ${CHECKABLE_SIZE}) / 2));
12084
+ }`,
12085
+ `${sel.check}:has(> :disabled) {
12086
+ cursor: not-allowed;
12087
+ }`
12088
+ ];
12089
+ }
12090
+ function agreementTileCss(sel, input) {
12091
+ const accent = rgbColorValue(solidAccentToken(input.accentToken));
12092
+ return [
12093
+ `${sel.tile} {
12094
+ padding: 0.875rem 1rem;
12095
+ border: 1px solid color-mix(in srgb, currentColor 22%, transparent);
12096
+ border-radius: ${TILE_RADIUS[input.corners]};
12097
+ transition: border-color 0.15s ease, background-color 0.15s ease;
12098
+ }`,
12099
+ `${sel.tile}:hover {
12100
+ border-color: color-mix(in srgb, ${accent} 55%, transparent);
12101
+ }`,
12102
+ `${sel.tile}:has(> .form-checkbox:checked) {
12103
+ border-color: ${accent};
12104
+ background-color: color-mix(in srgb, ${accent} 7%, transparent);
12105
+ }`,
12106
+ `${sel.tile}:has(> .form-checkbox[aria-invalid="true"]) {
12107
+ border-color: ${input.errorColor};
12108
+ }`
12109
+ ];
12110
+ }
12111
+ function checkableMediaCss(sel) {
12112
+ return [`@media (prefers-reduced-motion: reduce) {
12113
+ ${sel.checkbox}, ${sel.radio}, ${sel.checkbox}::before, ${sel.radio}::before, ${sel.tile} {
12114
+ transition: none;
12115
+ }
12116
+ }`, `@media (forced-colors: active) {
12117
+ ${sel.checkbox}::before,
12118
+ ${sel.radio}::before {
12119
+ background-color: CanvasText;
12120
+ }
12121
+ }`];
12122
+ }
12123
+ /**
12124
+ * Exposes the accent and mark colours so other choice controls (newsletter
12125
+ * topic chips) match the checkboxes without re-deriving the theme tokens.
12126
+ */
12127
+ function checkableVarsCss(input) {
12128
+ return [`${input.root} {
12129
+ --rb-check-accent: ${rgbColorValue(solidAccentToken(input.accentToken))};
12130
+ --rb-check-mark: ${checkableMarkColor(input.accentToken)};
12131
+ }`];
12132
+ }
12133
+ function generateCheckableCss(input) {
12134
+ const sel = checkableSelectors(input.root);
12135
+ return [
12136
+ ...checkableVarsCss(input),
12137
+ ...controlBaseCss(sel, input),
12138
+ ...controlMarkCss(sel, input.accentToken),
12139
+ ...controlStateCss(sel, input),
12140
+ ...checkRowCss(sel),
12141
+ ...agreementTileCss(sel, input),
12142
+ ...checkableMediaCss(sel)
12143
+ ].join("\n\n");
12144
+ }
12145
+ //#endregion
12146
+ //#region ../theme-core/src/inputs/inputGroup.ts
12147
+ /**
12148
+ * Input group: a field and an action (usually a themed button) sharing one
12149
+ * input-styled shell, e.g. the newsletter email + Sign up row.
12150
+ *
12151
+ * The shell `.form-input-group` takes the theme's `.form-input` rules (the
12152
+ * generators add it to that selector list, plus focus and error), so it
12153
+ * follows the site's input background, border, corners and shadow. This file
12154
+ * only adds the layout overrides and the borderless inner field.
12155
+ */
12156
+ const INPUT_GROUP_SELECTOR = ".form-input-group";
12157
+ /** Shell focus ring follows the field only, not the button beside it. */
12158
+ const INPUT_GROUP_FOCUS_SELECTOR = ".form-input-group:has(> .form-input-group-field:focus-visible)";
12159
+ const INPUT_GROUP_ERROR_SELECTOR = ".form-input-group:has(> .form-input-group-field[aria-invalid=\"true\"])";
12160
+ const GROUP_INSET = "0.25rem";
12161
+ /**
12162
+ * @param root - scoped root selector
12163
+ * @param padding - the theme's input padding shorthand (`block inline`), so the
12164
+ * inner field's text sits where a plain input's text would.
12165
+ */
12166
+ function generateInputGroupCss(root, padding) {
12167
+ const [block = padding, inline = block] = padding.trim().split(/\s+/);
12168
+ return `${root} .form-input-group {
12169
+ display: flex;
12170
+ align-items: stretch;
12171
+ gap: ${GROUP_INSET};
12172
+ padding: ${GROUP_INSET};
12173
+ }
12174
+
12175
+ ${root} .form-input-group-field {
12176
+ flex: 1 1 auto;
12177
+ min-width: 0;
12178
+ margin: 0;
12179
+ border: 0;
12180
+ border-radius: 0;
12181
+ background: transparent;
12182
+ box-shadow: none;
12183
+ outline: none;
12184
+ color: inherit;
12185
+ font: inherit;
12186
+ padding: calc(${block} - ${GROUP_INSET}) calc(${inline} - ${GROUP_INSET});
12187
+ }
12188
+
12189
+ ${root} .form-input-group-field::placeholder {
12190
+ color: inherit;
12191
+ opacity: 0.6;
12192
+ }
12193
+
12194
+ ${root} .form-input-group > :not(.form-input-group-field) {
12195
+ flex-shrink: 0;
12196
+ }`;
12197
+ }
12198
+ //#endregion
11914
12199
  //#region ../theme-core/src/status/generateStatusCss.ts
11915
12200
  /**
11916
12201
  * Corner radius map - derives alert border-radius from theme.corners
@@ -13213,6 +13498,9 @@ const containerResponsiveThemeCss = `/*
13213
13498
  .rb-h-4 {
13214
13499
  height: 1rem;
13215
13500
  }
13501
+ .rb-h-5 {
13502
+ height: 1.25rem;
13503
+ }
13216
13504
  .rb-h-8 {
13217
13505
  height: 2rem;
13218
13506
  }
@@ -14763,6 +15051,8 @@ const containerResponsiveThemeCss = `/*
14763
15051
  --rb-surface-text-color: var(--rb-modal-text, rgb(var(--tb-text, 17 24 39)));
14764
15052
  --rb-surface-heading-color: var(--rb-modal-heading, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
14765
15053
  --rb-surface-link-color: var(--rb-modal-link, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
15054
+ --rb-surface-link-hover-color: var(--rb-modal-link, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
15055
+ --rb-surface-link-hover-decoration: underline;
14766
15056
  --rb-surface-supporting-color: var(--rb-modal-supporting, var(--rb-modal-text, rgb(var(--tb-text, 17 24 39))));
14767
15057
  border: 1px solid var(--rb-modal-border, rgb(var(--tb-border)));
14768
15058
  border-radius: var(--rb-modal-radius, var(--radius-card));
@@ -15192,14 +15482,18 @@ const containerResponsiveThemeCss = `/*
15192
15482
 
15193
15483
  :where(.theme-scope) .rb-prose a:hover {
15194
15484
  color: var(
15195
- --rb-prose-link-hover-color,
15196
- var(--rb-prose-effective-link-color)
15485
+ --rb-surface-link-hover-color,
15486
+ var(--rb-prose-link-hover-color, var(--rb-prose-effective-link-color))
15487
+ );
15488
+ text-decoration-line: var(
15489
+ --rb-surface-link-hover-decoration,
15490
+ var(--rb-prose-link-decoration-line, underline)
15197
15491
  );
15198
15492
  text-decoration-color: var(
15199
15493
  --rb-prose-link-hover-decoration-color,
15200
15494
  var(
15201
- --rb-prose-link-hover-color,
15202
- var(--rb-prose-effective-link-color)
15495
+ --rb-surface-link-hover-color,
15496
+ var(--rb-prose-link-hover-color, var(--rb-prose-effective-link-color))
15203
15497
  )
15204
15498
  );
15205
15499
  }
@@ -16243,6 +16537,8 @@ const containerResponsiveThemeCss = `/*
16243
16537
  --rb-surface-text-color: rgb(var(--tb-onSurface, var(--tb-text)));
16244
16538
  --rb-surface-heading-color: rgb(var(--tb-onSurface, var(--tb-text)));
16245
16539
  --rb-surface-link-color: rgb(var(--tb-onSurface, var(--tb-text)));
16540
+ --rb-surface-link-hover-color: rgb(var(--tb-onSurface, var(--tb-text)));
16541
+ --rb-surface-link-hover-decoration: underline;
16246
16542
  --rb-surface-supporting-color: rgb(var(--tb-onSurface, var(--tb-text)));
16247
16543
  border: 1px solid rgb(var(--tb-border));
16248
16544
  border-radius: var(--radius-card);
@@ -16390,6 +16686,8 @@ const containerResponsiveThemeCss = `/*
16390
16686
  --rb-surface-text-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
16391
16687
  --rb-surface-heading-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
16392
16688
  --rb-surface-link-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
16689
+ --rb-surface-link-hover-color: var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42))));
16690
+ --rb-surface-link-hover-decoration: underline;
16393
16691
  --rb-surface-supporting-color: var(--rb-reg-on-surface-muted, var(--rb-reg-on-surface, rgb(var(--tb-onSurface, var(--tb-text, 15 23 42)))));
16394
16692
  transition: border-color var(--rb-block-transition, 150ms) ease;
16395
16693
  width: 100%;
@@ -17178,6 +17476,10 @@ const containerResponsiveThemeCss = `/*
17178
17476
  margin-bottom: 0.25rem;
17179
17477
  }
17180
17478
 
17479
+ :where(.theme-scope) :where([data-block='event-registration']) .er-consent-check {
17480
+ margin-top: 0.75rem;
17481
+ }
17482
+
17181
17483
  :where(.theme-scope) :where([data-block='event-registration']) .er-required {
17182
17484
  color: var(--er-required);
17183
17485
  }
@@ -21897,13 +22199,6 @@ const containerResponsiveThemeCss = `/*
21897
22199
  margin: 0;
21898
22200
  }
21899
22201
 
21900
- /* Inline field (checkbox, radio with label) */
21901
- :where(.theme-scope) :where([data-block="form"]) .fb-inline {
21902
- display: flex;
21903
- align-items: center;
21904
- gap: 0.5rem;
21905
- }
21906
-
21907
22202
  /* Success state */
21908
22203
  :where(.theme-scope) :where([data-block="form"]) .fb-success {
21909
22204
  background-color: var(--fb-success-bg);
@@ -22372,6 +22667,8 @@ const containerResponsiveThemeCss = `/*
22372
22667
  --rb-surface-text-color: inherit;
22373
22668
  --rb-surface-heading-color: inherit;
22374
22669
  --rb-surface-link-color: inherit;
22670
+ --rb-surface-link-hover-color: inherit;
22671
+ --rb-surface-link-hover-decoration: inherit;
22375
22672
  --rb-surface-supporting-color: inherit;
22376
22673
  }
22377
22674
 
@@ -22469,6 +22766,8 @@ const containerResponsiveThemeCss = `/*
22469
22766
  --rb-surface-text-color: rgb(var(--tb-text, 17 24 39));
22470
22767
  --rb-surface-heading-color: rgb(var(--tb-text, 17 24 39));
22471
22768
  --rb-surface-link-color: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
22769
+ --rb-surface-link-hover-color: var(--rb-prose-link-hover-color, rgb(var(--tb-primary, var(--tb-text, 17 24 39))));
22770
+ --rb-surface-link-hover-decoration: initial;
22472
22771
  --rb-surface-supporting-color: rgb(var(--tb-mutedText, 100 116 139));
22473
22772
  border: 1px solid rgb(var(--tb-border));
22474
22773
  border-radius: var(--shop-card-radius);
@@ -22635,6 +22934,8 @@ const containerResponsiveThemeCss = `/*
22635
22934
  --rb-surface-text-color: rgb(var(--tb-text, 17 24 39));
22636
22935
  --rb-surface-heading-color: rgb(var(--tb-text, 17 24 39));
22637
22936
  --rb-surface-link-color: rgb(var(--tb-primary, var(--tb-text, 17 24 39)));
22937
+ --rb-surface-link-hover-color: var(--rb-prose-link-hover-color, rgb(var(--tb-primary, var(--tb-text, 17 24 39))));
22938
+ --rb-surface-link-hover-decoration: initial;
22638
22939
  --rb-surface-supporting-color: rgb(var(--tb-mutedText, 100 116 139));
22639
22940
  }
22640
22941
 
@@ -22712,6 +23013,8 @@ const containerResponsiveThemeCss = `/*
22712
23013
  --rb-surface-text-color: var(--cp-text);
22713
23014
  --rb-surface-heading-color: var(--cp-text);
22714
23015
  --rb-surface-link-color: var(--cp-primary);
23016
+ --rb-surface-link-hover-color: var(--rb-prose-link-hover-color, var(--cp-primary));
23017
+ --rb-surface-link-hover-decoration: initial;
22715
23018
  --rb-surface-supporting-color: var(--cp-muted);
22716
23019
  border: 1px solid var(--cp-card-border);
22717
23020
  border-radius: var(--cp-card-radius);
@@ -22861,6 +23164,8 @@ const containerResponsiveThemeCss = `/*
22861
23164
  --rb-surface-text-color: var(--cp-text);
22862
23165
  --rb-surface-heading-color: var(--cp-text);
22863
23166
  --rb-surface-link-color: var(--cp-primary);
23167
+ --rb-surface-link-hover-color: var(--rb-prose-link-hover-color, var(--cp-primary));
23168
+ --rb-surface-link-hover-decoration: initial;
22864
23169
  --rb-surface-supporting-color: var(--cp-muted);
22865
23170
  border: 1px dashed var(--cp-card-border);
22866
23171
  border-radius: var(--cp-card-radius);
@@ -22878,6 +23183,8 @@ const containerResponsiveThemeCss = `/*
22878
23183
  --rb-surface-text-color: var(--cp-text);
22879
23184
  --rb-surface-heading-color: var(--cp-text);
22880
23185
  --rb-surface-link-color: var(--cp-primary);
23186
+ --rb-surface-link-hover-color: var(--rb-prose-link-hover-color, var(--cp-primary));
23187
+ --rb-surface-link-hover-decoration: initial;
22881
23188
  --rb-surface-supporting-color: var(--cp-muted);
22882
23189
  border: 1px solid var(--cp-card-border);
22883
23190
  border-radius: var(--cp-card-radius);
@@ -23118,6 +23425,8 @@ const containerResponsiveThemeCss = `/*
23118
23425
  --rb-surface-text-color: var(--cp-text);
23119
23426
  --rb-surface-heading-color: var(--cp-text);
23120
23427
  --rb-surface-link-color: var(--cp-primary);
23428
+ --rb-surface-link-hover-color: var(--rb-prose-link-hover-color, var(--cp-primary));
23429
+ --rb-surface-link-hover-decoration: initial;
23121
23430
  --rb-surface-supporting-color: var(--cp-muted);
23122
23431
  border: 1px solid var(--cp-card-border);
23123
23432
  border-radius: var(--cp-card-radius);
@@ -24020,9 +24329,11 @@ const containerResponsiveThemeCss = `/*
24020
24329
  */
24021
24330
 
24022
24331
  /* Newsletter copy styling */
24332
+ /* Size only: weight, family and colour come from the theme's heading styles */
24023
24333
  :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-title {
24024
- font-size: 1.5rem;
24025
- font-weight: 600;
24334
+ font-size: clamp(1.75rem, 1.35rem + 1.6vw, 2.5rem);
24335
+ line-height: 1.15;
24336
+ text-wrap: balance;
24026
24337
  }
24027
24338
 
24028
24339
  :where(.theme-scope) :where([data-block="newsletter-signup"]) .newsletter-copy-subtitle {
@@ -24046,37 +24357,150 @@ const containerResponsiveThemeCss = `/*
24046
24357
  gap: var(--rb-gap-sm, 0.75rem);
24047
24358
  }
24048
24359
 
24049
- /* Individual field styling */
24360
+ /* Extra preset fields (name, company...). Labels are visually hidden, so
24361
+ these sit in a row above the email entry. */
24362
+ :where(.theme-scope) .newsletter-extra-fields {
24363
+ display: grid;
24364
+ grid-template-columns: repeat(auto-fit, minmax(min(12rem, 100%), 1fr));
24365
+ gap: 0.5rem;
24366
+ }
24367
+
24050
24368
  :where(.theme-scope) .newsletter-field {
24051
24369
  display: flex;
24052
24370
  flex-direction: column;
24053
24371
  gap: 0.25rem;
24372
+ text-align: left;
24054
24373
  }
24055
24374
 
24056
- /* Topic choices (visitor picks what to hear about). Same treatment as the
24057
- form block's .fb-fieldset / .fb-inline, defined here because the newsletter
24058
- form also renders inside contact-newsletter and the site footer. */
24059
- :where(.theme-scope) .newsletter-topics {
24375
+ /* Email entry: the email field and the themed submit button share one shell.
24376
+ The shell's look (background, border, corners, focus ring) comes from the
24377
+ theme's input system via .form-input-group; this only handles layout. */
24378
+ :where(.theme-scope) .newsletter-entry {
24379
+ container-type: inline-size;
24060
24380
  display: flex;
24061
24381
  flex-direction: column;
24062
- gap: 0.5rem;
24382
+ gap: 0.375rem;
24383
+ text-align: left;
24384
+ }
24385
+
24386
+ :where(.theme-scope) .newsletter-entry-group > button {
24387
+ white-space: nowrap;
24388
+ }
24389
+
24390
+ /* Too narrow for field and button side by side (phones, footer columns):
24391
+ stack them inside the shell and keep pill themes from turning the taller
24392
+ shell into a capsule. */
24393
+ @container (max-width: 22rem) {
24394
+ :where(.theme-scope) .newsletter-entry .newsletter-entry-group {
24395
+ flex-direction: column;
24396
+ border-radius: min(var(--rb-input-radius, 0.5rem), 1rem);
24397
+ }
24398
+
24399
+ :where(.theme-scope) .newsletter-entry .newsletter-entry-group > button {
24400
+ width: 100%;
24401
+ justify-content: center;
24402
+ }
24403
+ }
24404
+
24405
+ /* Topic choices (visitor picks what to hear about) as toggle chips. Each chip
24406
+ is a real checkbox underneath; the chip is its visible face. */
24407
+ :where(.theme-scope) .newsletter-topics {
24063
24408
  border: none;
24064
24409
  padding: 0;
24065
24410
  margin: 0;
24066
24411
  min-width: 0;
24067
24412
  }
24068
24413
 
24069
- :where(.theme-scope) .newsletter-topics > legend {
24414
+ :where(.theme-scope) .newsletter-topics-legend {
24070
24415
  padding: 0;
24071
- margin-bottom: 0.25rem;
24416
+ margin-bottom: 0.625rem;
24417
+ font-size: 0.9375rem;
24418
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
24072
24419
  }
24073
24420
 
24074
- :where(.theme-scope) .newsletter-topic-choice {
24421
+ :where(.theme-scope) .newsletter-topic-chips {
24075
24422
  display: flex;
24076
- align-items: center;
24423
+ flex-wrap: wrap;
24077
24424
  gap: 0.5rem;
24078
24425
  }
24079
24426
 
24427
+ :where(.theme-scope) .newsletter-stacked .newsletter-topics-legend {
24428
+ width: 100%;
24429
+ }
24430
+
24431
+ :where(.theme-scope) .newsletter-stacked .newsletter-topic-chips {
24432
+ justify-content: center;
24433
+ }
24434
+
24435
+ :where(.theme-scope) .newsletter-topic-chip {
24436
+ position: relative;
24437
+ display: inline-flex;
24438
+ }
24439
+
24440
+ :where(.theme-scope) .newsletter-topic-chip > input {
24441
+ position: absolute;
24442
+ inset: 0;
24443
+ width: 100%;
24444
+ height: 100%;
24445
+ margin: 0;
24446
+ opacity: 0;
24447
+ cursor: pointer;
24448
+ }
24449
+
24450
+ :where(.theme-scope) .newsletter-topic-chip > span {
24451
+ display: inline-flex;
24452
+ align-items: center;
24453
+ gap: 0.375rem;
24454
+ padding: 0.4375rem 0.9375rem;
24455
+ border: 1px solid color-mix(in srgb, currentColor 35%, transparent);
24456
+ border-radius: var(--rb-button-radius, var(--rb-input-radius, 9999px));
24457
+ font-size: 0.9375rem;
24458
+ line-height: 1.3;
24459
+ color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
24460
+ transition: background-color 0.15s ease, border-color 0.15s ease, color 0.15s ease;
24461
+ }
24462
+
24463
+ /* Tick that grows in when the chip is on */
24464
+ :where(.theme-scope) .newsletter-topic-chip > span::before {
24465
+ content: "";
24466
+ width: 0;
24467
+ height: 0.7em;
24468
+ background-color: currentColor;
24469
+ clip-path: polygon(14% 52%, 0 67%, 38% 100%, 100% 22%, 85% 8%, 37% 70%);
24470
+ transition: width 0.15s ease;
24471
+ }
24472
+
24473
+ :where(.theme-scope) .newsletter-topic-chip:hover > span {
24474
+ border-color: currentColor;
24475
+ }
24476
+
24477
+ /* Same accent and mark colours as the theme's checkboxes */
24478
+ :where(.theme-scope) .newsletter-topic-chip > input:checked + span {
24479
+ background-color: var(--rb-check-accent, rgb(var(--tb-primary)));
24480
+ border-color: var(--rb-check-accent, rgb(var(--tb-primary)));
24481
+ color: var(--rb-check-mark, rgb(var(--tb-onPrimary, 255 255 255)));
24482
+ }
24483
+
24484
+ :where(.theme-scope) .newsletter-topic-chip > input:checked + span::before {
24485
+ width: 0.7em;
24486
+ }
24487
+
24488
+ :where(.theme-scope) .newsletter-topic-chip > input:focus-visible + span {
24489
+ outline: 2px solid var(--rb-check-accent, rgb(var(--tb-primary)));
24490
+ outline-offset: 2px;
24491
+ }
24492
+
24493
+ :where(.theme-scope) .newsletter-topic-chip > input:disabled + span {
24494
+ opacity: 0.6;
24495
+ }
24496
+
24497
+ @media (prefers-reduced-motion: reduce) {
24498
+ :where(.theme-scope) .newsletter-topic-chip > span,
24499
+ :where(.theme-scope) .newsletter-topic-chip > span::before {
24500
+ transition: none;
24501
+ }
24502
+ }
24503
+
24080
24504
  /* Error panel and field notes. The form block scopes these to its own
24081
24505
  data-block, so the newsletter form (which also renders in the footer)
24082
24506
  needs its own copy of the treatment. */
@@ -24094,13 +24518,7 @@ const containerResponsiveThemeCss = `/*
24094
24518
  color: var(--fb-error-text);
24095
24519
  }
24096
24520
 
24097
- /* Required indicator */
24098
- :where(.theme-scope) .newsletter-required {
24099
- color: rgb(var(--tb-primary));
24100
- margin-left: 0.125rem;
24101
- }
24102
-
24103
- /* Submit button container */
24521
+ /* Submit button container (only when a preset has no email field) */
24104
24522
  :where(.theme-scope) .newsletter-submit {
24105
24523
  margin-top: 0.5rem;
24106
24524
  }
@@ -24112,52 +24530,29 @@ const containerResponsiveThemeCss = `/*
24112
24530
  justify-content: center;
24113
24531
  }
24114
24532
 
24115
- /* Privacy note */
24533
+ /* Privacy note: quieter than the intro so the entry row leads */
24116
24534
  :where(.theme-scope) .newsletter-privacy-note {
24117
24535
  margin-top: 0.75rem;
24118
- font-size: 1rem;
24119
- line-height: 1.6;
24120
- color: var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39)));
24536
+ font-size: 0.8125rem;
24537
+ line-height: 1.5;
24538
+ color: var(--rb-surface-supporting-color, var(--rb-surface-text-color, rgb(var(--tb-text, 17 24 39))));
24539
+ opacity: 0.85;
24121
24540
  text-align: center;
24122
24541
  }
24123
24542
 
24124
24543
  /* =============================================================================
24125
- * Inline Variant - Horizontal layout
24544
+ * Inline Variant - left-aligned, wider entry row
24126
24545
  * =============================================================================
24127
24546
  */
24128
24547
 
24129
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
24130
- flex-direction: row;
24131
- align-items: flex-end;
24132
- flex-wrap: wrap;
24133
- gap: var(--rb-gap-sm, 0.75rem);
24134
- }
24135
-
24136
- :where(.theme-scope) .newsletter-inline .newsletter-field {
24137
- flex: 1 1 auto;
24138
- min-width: 10rem;
24139
- }
24140
-
24141
- :where(.theme-scope) .newsletter-inline .newsletter-submit {
24142
- margin-top: 0;
24143
- flex-shrink: 0;
24144
- }
24145
-
24146
- :where(.theme-scope) .newsletter-inline .newsletter-topics {
24147
- flex-basis: 100%;
24548
+ :where(.theme-scope) .newsletter-inline .newsletter-form {
24549
+ max-width: 40rem;
24550
+ margin-left: 0;
24551
+ margin-right: 0;
24148
24552
  }
24149
24553
 
24150
- /* Mobile fallback for inline variant */
24151
- @container rb-site (max-width: 640px) {
24152
- @scope ([data-rb-responsive-mode="container"]) to (:scope [data-rb-responsive-mode]) {
24153
- :where(.theme-scope) .newsletter-inline .newsletter-form-fields {
24154
- flex-direction: column;
24155
- }
24156
-
24157
- :where(.theme-scope) .newsletter-inline .newsletter-field {
24158
- min-width: 100%;
24159
- }
24160
- }
24554
+ :where(.theme-scope) .newsletter-inline .newsletter-privacy-note {
24555
+ text-align: left;
24161
24556
  }
24162
24557
 
24163
24558
  /* =============================================================================
@@ -24295,12 +24690,6 @@ const containerResponsiveThemeCss = `/*
24295
24690
  margin: 0;
24296
24691
  }
24297
24692
 
24298
- :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-inline {
24299
- display: flex;
24300
- align-items: center;
24301
- gap: 0.5rem;
24302
- }
24303
-
24304
24693
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-success,
24305
24694
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-error,
24306
24695
  :where(.theme-scope) :where([data-block="contact-newsletter"]) .fb-empty {
@@ -25701,6 +26090,8 @@ const containerResponsiveThemeCss = `/*
25701
26090
  --rb-surface-text-color: rgb(var(--tb-onSecondary));
25702
26091
  --rb-surface-heading-color: rgb(var(--tb-onSecondary));
25703
26092
  --rb-surface-link-color: rgb(var(--tb-onSecondary));
26093
+ --rb-surface-link-hover-color: rgb(var(--tb-onSecondary));
26094
+ --rb-surface-link-hover-decoration: underline;
25704
26095
  --rb-surface-supporting-color: rgb(var(--tb-onSecondary));
25705
26096
  }
25706
26097
 
@@ -25832,6 +26223,8 @@ const containerResponsiveThemeCss = `/*
25832
26223
  --rb-surface-text-color: rgb(var(--tb-onPrimary));
25833
26224
  --rb-surface-heading-color: rgb(var(--tb-onPrimary));
25834
26225
  --rb-surface-link-color: rgb(var(--tb-onPrimary));
26226
+ --rb-surface-link-hover-color: rgb(var(--tb-onPrimary));
26227
+ --rb-surface-link-hover-decoration: underline;
25835
26228
  --rb-surface-supporting-color: color-mix(in oklab, rgb(var(--tb-onPrimary)), transparent 18%);
25836
26229
  }
25837
26230
 
@@ -26197,6 +26590,44 @@ const containerResponsiveThemeCss = `/*
26197
26590
  flex: 0 0 auto;
26198
26591
  }
26199
26592
  }
26593
+ }
26594
+
26595
+ /* =============================================================================
26596
+ * Site footer: social links
26597
+ *
26598
+ * Icon links get a 40px tap target with a hairline ring drawn from the link's
26599
+ * own colour, so it follows the footer's text colour on any surface. Links
26600
+ * without an icon (unknown platforms) stay plain text.
26601
+ * =============================================================================
26602
+ */
26603
+
26604
+ :where(.theme-scope) .rb-footer-socials {
26605
+ display: flex;
26606
+ flex-wrap: wrap;
26607
+ align-items: center;
26608
+ gap: 0.75rem 1.25rem;
26609
+ }
26610
+
26611
+ :where(.theme-scope) .rb-footer-social-link:has(> .rb-footer-social-icon) {
26612
+ display: inline-grid;
26613
+ place-items: center;
26614
+ width: 2.5rem;
26615
+ height: 2.5rem;
26616
+ border: 1px solid color-mix(in srgb, currentColor 22%, transparent);
26617
+ border-radius: 9999px;
26618
+ }
26619
+
26620
+ :where(.theme-scope) .rb-footer-socials:has(.rb-footer-social-icon) {
26621
+ gap: 0.5rem;
26622
+ }
26623
+
26624
+ :where(.theme-scope) .rb-footer-social-link:has(> .rb-footer-social-icon):hover {
26625
+ border-color: currentColor;
26626
+ }
26627
+
26628
+ :where(.theme-scope) .rb-footer-social-icon {
26629
+ width: 1.5rem;
26630
+ height: 1.5rem;
26200
26631
  }`;
26201
26632
  //#endregion
26202
26633
  //#region ../theme-core/src/ThemeScopeCore.tsx
@@ -26446,6 +26877,7 @@ const BORDER_WIDTH_MAP = {
26446
26877
  medium: "2px",
26447
26878
  thick: "4px"
26448
26879
  };
26880
+ const INPUT_PADDING = "0.5rem 0.75rem";
26449
26881
  const SHADOW_VALUES = {
26450
26882
  none: "none",
26451
26883
  low: "0 1px 2px rgba(0,0,0,0.04)",
@@ -26479,16 +26911,18 @@ function generateInputCoreCss(scopeId, settings) {
26479
26911
  color: rgb(var(--tb-${settings.textToken}));
26480
26912
  border: ${borderWidth} solid rgb(var(--tb-${settings.borderToken}));
26481
26913
  border-radius: ${borderRadius};
26482
- padding: 0.5rem 0.75rem;
26914
+ padding: ${INPUT_PADDING};
26483
26915
  font-size: 1rem;
26484
26916
  width: 100%;
26485
26917
  outline: none;
26486
26918
  transition: border-color 0.2s ease, box-shadow 0.2s ease;
26487
26919
  ${settings.shadow !== "none" ? `box-shadow: ${SHADOW_VALUES[settings.shadow]};` : ""}
26488
26920
  `.trim();
26489
- cssBlocks.push(`${root} .form-input {
26921
+ cssBlocks.push(`${root} .form-input,
26922
+ ${root} ${INPUT_GROUP_SELECTOR} {
26490
26923
  ${sharedInputRules}
26491
26924
  }`);
26925
+ cssBlocks.push(generateInputGroupCss(root, INPUT_PADDING));
26492
26926
  cssBlocks.push(`${root} .form-textarea {
26493
26927
  ${sharedInputRules}
26494
26928
  resize: vertical;
@@ -26505,14 +26939,16 @@ function generateInputCoreCss(scopeId, settings) {
26505
26939
  }`);
26506
26940
  cssBlocks.push(`${root} .form-input:focus-visible,
26507
26941
  ${root} .form-textarea:focus-visible,
26508
- ${root} .form-select:focus-visible {
26942
+ ${root} .form-select:focus-visible,
26943
+ ${root} ${INPUT_GROUP_FOCUS_SELECTOR} {
26509
26944
  outline: none;
26510
26945
  box-shadow: 0 0 0 ${settings.focusRingWidth}px rgb(var(--tb-${settings.focusRingToken}));
26511
26946
  border-color: rgb(var(--tb-${settings.focusRingToken}));
26512
26947
  }`);
26513
26948
  cssBlocks.push(`${root} .form-input[aria-invalid="true"],
26514
26949
  ${root} .form-textarea[aria-invalid="true"],
26515
- ${root} .form-select[aria-invalid="true"] {
26950
+ ${root} .form-select[aria-invalid="true"],
26951
+ ${root} ${INPUT_GROUP_ERROR_SELECTOR} {
26516
26952
  border-color: rgb(var(--tb-${settings.errorBorderToken}));
26517
26953
  color: rgb(var(--tb-${settings.errorTextToken}));
26518
26954
  }`);
@@ -26524,46 +26960,15 @@ ${root} .form-select:disabled {
26524
26960
  opacity: 0.6;
26525
26961
  cursor: not-allowed;
26526
26962
  }`);
26527
- cssBlocks.push(`${root} .form-checkbox {
26528
- appearance: none;
26529
- width: 1.125rem;
26530
- height: 1.125rem;
26531
- flex-shrink: 0;
26532
- border: ${borderWidth} solid rgb(var(--tb-${settings.borderToken}));
26533
- border-radius: 0.25rem;
26534
- background-color: rgb(var(--tb-${settings.backgroundToken}));
26535
- cursor: pointer;
26536
- transition: background-color 0.2s ease, border-color 0.2s ease;
26537
- }`);
26538
- cssBlocks.push(`${root} .form-radio {
26539
- appearance: none;
26540
- width: 1.125rem;
26541
- height: 1.125rem;
26542
- flex-shrink: 0;
26543
- border: ${borderWidth} solid rgb(var(--tb-${settings.borderToken}));
26544
- border-radius: 9999px;
26545
- background-color: rgb(var(--tb-${settings.backgroundToken}));
26546
- cursor: pointer;
26547
- transition: background-color 0.2s ease, border-color 0.2s ease;
26548
- }`);
26549
- cssBlocks.push(`${root} .form-checkbox:checked {
26550
- background-color: rgb(var(--tb-${settings.focusRingToken}));
26551
- border-color: rgb(var(--tb-${settings.focusRingToken}));
26552
- background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e");
26553
- background-size: 100% 100%;
26554
- background-position: center;
26555
- background-repeat: no-repeat;
26556
- }`);
26557
- cssBlocks.push(`${root} .form-radio:checked {
26558
- background-color: rgb(var(--tb-${settings.focusRingToken}));
26559
- border-color: rgb(var(--tb-${settings.focusRingToken}));
26560
- background-image: radial-gradient(circle, white 40%, transparent 40%);
26561
- }`);
26562
- cssBlocks.push(`${root} .form-checkbox:focus-visible,
26563
- ${root} .form-radio:focus-visible {
26564
- outline: none;
26565
- box-shadow: 0 0 0 ${settings.focusRingWidth}px rgb(var(--tb-${settings.focusRingToken}));
26566
- }`);
26963
+ cssBlocks.push(generateCheckableCss({
26964
+ root,
26965
+ borderWidth,
26966
+ borderColor: `rgb(var(--tb-${settings.borderToken}))`,
26967
+ background: `rgb(var(--tb-${settings.backgroundToken}))`,
26968
+ corners: settings.corners,
26969
+ accentToken: settings.focusRingToken,
26970
+ errorColor: `rgb(var(--tb-${settings.errorBorderToken}))`
26971
+ }));
26567
26972
  return cssBlocks.join("\n\n");
26568
26973
  }
26569
26974
  /**