@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
@@ -0,0 +1,17 @@
1
+ import type { ThemeHeader } from '../schema';
2
+ import { type NavLinkContrastTreatment, type NavLinkStyle } from '../navigation/types';
3
+ import { type SurfaceForegroundInput } from '../surfaces';
4
+ import { type ForegroundHoverInput } from '../surfaces/foregroundInteraction';
5
+ export declare function effectiveHeaderNavLinkStyle(header: Partial<ThemeHeader> | undefined, contrastTreatment?: NavLinkContrastTreatment | null, navTextSize?: NavLinkStyle['textSize'] | null): NavLinkStyle | null;
6
+ export declare function headerForegroundCandidates(header: Partial<ThemeHeader> | undefined): {
7
+ text?: undefined;
8
+ link?: undefined;
9
+ linkHover?: undefined;
10
+ } | {
11
+ text: string | null | undefined;
12
+ link: string | null | undefined;
13
+ linkHover: import("../../../blocks/src/index").ThemeColorToken | null;
14
+ };
15
+ export declare function headerLeafTextColor(header: Partial<ThemeHeader> | undefined): NonNullable<ThemeHeader['textColor']>;
16
+ /** Transparent chrome must reset the whole contract on its own root. */
17
+ export declare function transparentHeaderForegroundInput(header: Partial<ThemeHeader> | undefined, palette: ForegroundHoverInput['palette']): SurfaceForegroundInput;
@@ -0,0 +1,15 @@
1
+ import type { LogoStyle, Theme } from '../schema';
2
+ import type { TokenResolver } from '../tokens/resolver';
3
+ import type { NavLinkStyle } from '../navigation/types';
4
+ type HeaderLogoStyleInput = Readonly<{
5
+ logo: LogoStyle | undefined;
6
+ themeId: string;
7
+ tokens: TokenResolver;
8
+ theme: Theme;
9
+ textColor?: string | null;
10
+ fallbackTextColor?: string | null;
11
+ contrastTreatment?: NavLinkStyle['contrastTreatment'];
12
+ useSurfaceTextColor: boolean;
13
+ }>;
14
+ export declare function generateHeaderLogoStyles(input: HeaderLogoStyleInput): string;
15
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { Theme, ThemeHeader } from '../schema';
2
+ import type { TokenResolver } from '../tokens/resolver';
3
+ import type { NavLinkContrastTreatment, NavLinkStyle } from '../navigation/types';
4
+ export declare function generateHeaderNavLinkStyles(header: ThemeHeader, themeId: string, tokens: TokenResolver, theme: Theme, contrastTreatment: NavLinkContrastTreatment | null, navTextSize: NavLinkStyle['textSize'] | null): string;
@@ -1 +1,4 @@
1
1
  export { generateHeaderCss } from './generateHeaderCss';
2
+ export { headerRootPaint, type HeaderRootPaint } from './rootPaint';
3
+ export { effectiveHeaderNavLinkStyle, headerForegroundCandidates, headerLeafTextColor, transparentHeaderForegroundInput, } from './effectiveNavLinkStyle';
4
+ export { readOpeningForegroundProjection } from './openingForegroundProjection';
@@ -1,3 +1,3 @@
1
1
  import type { NavLinkContrastTreatment, NavLinkStyle } from '../navigation/types';
2
2
  import type { ThemeHeader } from '../schema';
3
- export declare function buildLegacyHeaderNavLinkStyle(header: ThemeHeader, contrastTreatment: NavLinkContrastTreatment | null, navTextSize: NavLinkStyle['textSize'] | null): NavLinkStyle | null;
3
+ export declare function buildLegacyHeaderNavLinkStyle(header: Partial<ThemeHeader>, contrastTreatment: NavLinkContrastTreatment | null, navTextSize: NavLinkStyle['textSize'] | null): NavLinkStyle | null;
@@ -0,0 +1,7 @@
1
+ import type { ThemeHeader } from '../schema';
2
+ import type { ResolvedSurfaceForeground } from '../surfaces';
3
+ type OpeningForeground = ResolvedSurfaceForeground;
4
+ /** Page-scoped render data. It is deliberately absent from the persisted theme schema. */
5
+ export declare function withOpeningForegroundProjection(header: ThemeHeader, foreground: OpeningForeground): ThemeHeader;
6
+ export declare function readOpeningForegroundProjection(header: Partial<ThemeHeader> | undefined): OpeningForeground | null;
7
+ export {};
@@ -0,0 +1,4 @@
1
+ import type { ThemeHeader } from '../schema';
2
+ export type HeaderRootPaint = 'own-surface' | 'contained-nav' | 'overlay';
3
+ /** The nav container takes precedence when a floating header also has one. */
4
+ export declare function headerRootPaint(header: Partial<ThemeHeader> | null | undefined): HeaderRootPaint;
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Checkbox and radio CSS shared by the full theme generator and the SDK
3
+ * theme bridge, so both render the same customer-facing controls.
4
+ *
5
+ * Emits:
6
+ * - .form-checkbox / .form-radio: the controls themselves. The tick and dot
7
+ * are drawn with ::before so their colour comes from theme tokens rather
8
+ * than a baked-in SVG.
9
+ * - .form-check: a label row holding a control and its text. The control
10
+ * lines up with the first line of text, so long labels wrap cleanly.
11
+ * - .form-check--tile: a bordered, fully clickable panel for agreements
12
+ * (booking consent, consent fields) that tints when ticked.
13
+ */
14
+ export type CheckableCorners = 'square' | 'soft' | 'rounded' | 'pill';
15
+ export type CheckableCssInput = Readonly<{
16
+ /** Scoped root selector, e.g. `:where([data-theme-scope="x"])`. */
17
+ root: string;
18
+ /** Resolved CSS border width, e.g. `1px`. */
19
+ borderWidth: string;
20
+ /** Resolved CSS colour for the unchecked border. */
21
+ borderColor: string;
22
+ /** Resolved CSS colour for the unchecked fill. */
23
+ background: string;
24
+ /** Input corner style; checkboxes and tiles scale their radius from it. */
25
+ corners: CheckableCorners;
26
+ /**
27
+ * Theme colour token for the checked fill, tile tint and focus outline.
28
+ * Any opacity suffix is dropped (`primary/70` fills with solid primary):
29
+ * the tick's on-token only contrasts with the solid colour.
30
+ */
31
+ accentToken: string;
32
+ /** Resolved CSS colour for an invalid agreement tile. */
33
+ errorColor: string;
34
+ }>;
35
+ /**
36
+ * Colour for the tick/dot drawn on top of the accent fill. Uses the palette's
37
+ * matching "on" token where there is one, falling back to white.
38
+ */
39
+ /** The accent at full strength: `primary/70` becomes `primary`. */
40
+ export declare function solidAccentToken(accentToken: string): string;
41
+ export declare function checkableMarkColor(accentToken: string): string;
42
+ export declare function generateCheckableCss(input: CheckableCssInput): string;
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Input group: a field and an action (usually a themed button) sharing one
3
+ * input-styled shell, e.g. the newsletter email + Sign up row.
4
+ *
5
+ * The shell `.form-input-group` takes the theme's `.form-input` rules (the
6
+ * generators add it to that selector list, plus focus and error), so it
7
+ * follows the site's input background, border, corners and shadow. This file
8
+ * only adds the layout overrides and the borderless inner field.
9
+ */
10
+ export declare const INPUT_GROUP_SELECTOR = ".form-input-group";
11
+ /** Shell focus ring follows the field only, not the button beside it. */
12
+ export declare const INPUT_GROUP_FOCUS_SELECTOR = ".form-input-group:has(> .form-input-group-field:focus-visible)";
13
+ export declare const INPUT_GROUP_ERROR_SELECTOR = ".form-input-group:has(> .form-input-group-field[aria-invalid=\"true\"])";
14
+ /**
15
+ * @param root - scoped root selector
16
+ * @param padding - the theme's input padding shorthand (`block inline`), so the
17
+ * inner field's text sits where a plain input's text would.
18
+ */
19
+ export declare function generateInputGroupCss(root: string, padding: string): string;
@@ -0,0 +1,38 @@
1
+ type NavEffectPolicy = 'paired-hover' | 'text-colour' | 'underline' | 'other';
2
+ /** Every registered effect has one meaning for surface-owned nav hover. */
3
+ export declare const NAV_EFFECT_POLICIES: {
4
+ readonly 'darken-background': "other";
5
+ readonly 'lighten-background': "other";
6
+ readonly 'fade-background': "other";
7
+ readonly 'opacity-reduce': "other";
8
+ readonly 'animated-gradient': "other";
9
+ readonly 'background-on-hover': "paired-hover";
10
+ readonly 'background-on-hover-alpha': "paired-hover";
11
+ readonly 'border-glow': "other";
12
+ readonly 'drop-shadow': "other";
13
+ readonly 'inner-shadow': "other";
14
+ readonly 'neumorphic-shadow': "other";
15
+ readonly 'outer-glow': "other";
16
+ readonly 'retro-3d-shadow': "other";
17
+ readonly 'scale-up': "other";
18
+ readonly 'scale-down': "other";
19
+ readonly lift: "other";
20
+ readonly 'press-down': "other";
21
+ readonly pop: "other";
22
+ readonly 'aurora-glow': "other";
23
+ readonly 'cosmic-stardust': "other";
24
+ readonly 'gradient-border-fill': "other";
25
+ readonly 'animated-gradient-border-fill': "other";
26
+ readonly 'border-bottom-grow': "other";
27
+ readonly 'gradient-text': "other";
28
+ readonly 'text-color-change': "text-colour";
29
+ readonly 'border-color-change': "other";
30
+ readonly 'sketchy-border': "other";
31
+ readonly 'pulse-animation': "other";
32
+ readonly 'nav-underline': "underline";
33
+ readonly 'nav-frosted-base': "other";
34
+ readonly 'nav-frosted-hover': "other";
35
+ readonly 'nav-frosted-active': "other";
36
+ };
37
+ export declare function navEffectPolicy(effectId: string): NavEffectPolicy | null;
38
+ export {};
@@ -18,6 +18,10 @@ export interface GenerateNavLinkCSSOptions {
18
18
  style: NavLinkStyle;
19
19
  /** CSS class name for the nav link (e.g., 'header-nav-link', 'footer-nav-link') */
20
20
  className: string;
21
+ /** Text links whose colours come from the owning background surface. */
22
+ surfaceDependent?: boolean;
23
+ /** Use the owning surface at rest while preserving the style's painted hover. */
24
+ surfaceRestingColor?: boolean;
21
25
  }
22
26
  /**
23
27
  * Generate complete CSS for nav links from a NavLinkStyle configuration
@@ -4,6 +4,7 @@
4
4
  * Schema and types for composable nav link styling used by header and footer.
5
5
  */
6
6
  import { z } from 'zod';
7
+ import { type ThemeColorToken } from '../tokens/themeColorTokens';
7
8
  /**
8
9
  * Padding preset options for nav links
9
10
  */
@@ -146,6 +147,9 @@ export type NavLinkTextSize = z.infer<typeof navLinkTextSizeSchema>;
146
147
  export type NavLinkLetterSpacing = z.infer<typeof navLinkLetterSpacingSchema>;
147
148
  export type NavLinkContrastTreatment = z.infer<typeof navLinkContrastTreatmentSchema>;
148
149
  export type NavLinkStyle = z.infer<typeof navLinkStyleSchema>;
150
+ export declare function navLinkHoverColorCandidate(style: Pick<NavLinkStyle, 'hoverColorToken' | 'effects'> | null | undefined): ThemeColorToken | null;
151
+ export declare function navLinkOwnsHoverForeground(style: Pick<NavLinkStyle, 'effects'> | null | undefined): boolean;
152
+ export declare function navLinkOwnsUnderline(style: Pick<NavLinkStyle, 'effects'> | null | undefined): boolean;
149
153
  /**
150
154
  * Padding values for nav link padding presets
151
155
  */
@@ -3,7 +3,7 @@ import type { SurfaceForegroundRole } from '../surfaces/foregroundRoles';
3
3
  import type { SiteStyleSurfaceIntent } from './types';
4
4
  export type AccessibleColorSurfaceIntent = Exclude<SiteStyleSurfaceIntent, 'hero-image'>;
5
5
  export type ContrastPolicy = 'body-aa' | 'large-text-aa' | 'decorative';
6
- export type ForegroundRole = SurfaceForegroundRole;
6
+ export type ForegroundRole = Exclude<SurfaceForegroundRole, 'linkHover'>;
7
7
  export type AccessibleSurfaceToken = string & {
8
8
  readonly __brand: 'AccessibleSurfaceToken';
9
9
  };
@@ -1,13 +1,17 @@
1
1
  import { type SurfaceForegroundInput, type SurfaceForegroundRole, type SurfaceForegrounds } from './foregroundRoles';
2
+ import type { ThemeColorToken } from '../tokens/themeColorTokens';
3
+ import type { ResolvedSurfaceForeground } from './resolveSurfaceForeground';
2
4
  export declare const SURFACE_FOREGROUND_CSS_VARS: {
3
5
  readonly text: "--rb-surface-text-color";
4
6
  readonly heading: "--rb-surface-heading-color";
5
7
  readonly link: "--rb-surface-link-color";
8
+ readonly linkHover: "--rb-surface-link-hover-color";
6
9
  readonly supporting: "--rb-surface-supporting-color";
7
10
  };
8
11
  export type SurfaceForegroundCssVariable = (typeof SURFACE_FOREGROUND_CSS_VARS)[SurfaceForegroundRole];
9
12
  export type SurfaceForegroundStyle = Readonly<{
10
13
  color: string;
14
+ '--rb-surface-link-hover-decoration': string;
11
15
  } & Record<SurfaceForegroundCssVariable, string>>;
12
16
  export declare const DEFAULT_SURFACE_TEXT_COLOR = "rgb(var(--tb-text, 17 24 39))";
13
17
  export declare const DEFAULT_SURFACE_LINK_COLOR = "rgb(var(--tb-primary, var(--tb-text, 17 24 39)))";
@@ -17,3 +21,6 @@ export declare function surfaceForegroundValue(role: SurfaceForegroundRole, outs
17
21
  export declare function surfaceForegroundValueWithOpacity(role: SurfaceForegroundRole, opacityPercent: number): string;
18
22
  export declare function surfaceForegroundStyle(input: SurfaceForegroundInput): SurfaceForegroundStyle;
19
23
  export declare function surfaceForegroundDeclarations(input: SurfaceForegroundInput): readonly string[];
24
+ export declare function surfaceForegroundInputFromResolved(foreground: Extract<ResolvedSurfaceForeground, {
25
+ kind: 'known';
26
+ }>, color: (token: ThemeColorToken) => string): SurfaceForegroundInput;
@@ -46,32 +46,39 @@ export declare const FOREGROUND_HOVER_OPACITY_PERCENT = 85;
46
46
  * should leave hover alone rather than guess.
47
47
  */
48
48
  export declare function deriveForegroundHoverToken(restingToken: ThemeColorToken): ThemeColorToken | null;
49
+ /**
50
+ * The extreme backdrop a glass tone can present, whatever page content happens
51
+ * to be underneath it.
52
+ *
53
+ * A 60% tint clamps the composite into a known band, which is what makes a
54
+ * conservative check possible at compile time even though the content passing
55
+ * under a sticky header is not knowable. For a dark glass the composite is
56
+ * lightest over white; for a light glass it is darkest over black. Those are
57
+ * the two ends that a foreground has to survive.
58
+ */
59
+ export declare function worstCaseGlassBackdrop(tone: 'light' | 'dark'): string;
49
60
  /** Flatten `foreground` at `alpha` over `background` into an opaque hex. */
50
61
  export declare function compositeHex(foreground: string, background: string, alpha: number): string;
51
- export type ForegroundHoverPlan =
52
- /** Soften the resting colour; the derived token clears the conservative bound. */
53
- Readonly<{
54
- kind: 'softened';
62
+ export type ForegroundHoverPlan = Readonly<{
63
+ kind: 'candidate' | 'softened';
55
64
  token: ThemeColorToken;
56
- }>
57
- /**
58
- * Keep the resting colour. Softening it would drop below the ordinary-text
59
- * ratio somewhere the glass can reach, so the hover affordance has to come
60
- * from something other than colour.
61
- */
62
- | Readonly<{
65
+ decoration: 'initial';
66
+ }> | Readonly<{
63
67
  kind: 'resting';
68
+ token: ThemeColorToken;
69
+ decoration: 'underline';
70
+ }>;
71
+ export type ForegroundHoverInput = Readonly<{
72
+ restingToken: ThemeColorToken;
73
+ candidate?: ThemeColorToken | null;
74
+ palette: Readonly<Record<string, string>>;
75
+ /** Null means the complete backdrop cannot be measured. */
76
+ backdrops: readonly string[] | null;
64
77
  }>;
65
78
  /**
66
- * Decide whether the resting foreground can safely be softened for hover.
67
- *
68
- * `glassTone` is the scroll treatment's compiled tone, or `null` when the style
69
- * has no glass. Without one there is no bound on what the header can end up
70
- * over, so this declines to soften rather than guess.
71
- *
72
- * The light-glass end cannot be satisfied by any softening: against `#999999`
73
- * a dark resting foreground is already close to the 4.5:1 line, so every step
74
- * away from it fails. That is why this returns a plan rather than a colour —
75
- * the caller has to have a non-colour affordance to fall back on.
79
+ * Prefer an authored hover that survives every measured backdrop, then a
80
+ * checked softening of the resting colour. A null backdrop set represents a
81
+ * trusted treatment: only an explicit authored hover may change the colour.
82
+ * When neither option works, retain the resting colour and underline it.
76
83
  */
77
- export declare function planForegroundHover(restingToken: ThemeColorToken, restingHex: string | null, glassTone: 'light' | 'dark' | null): ForegroundHoverPlan;
84
+ export declare function planForegroundHover(input: ForegroundHoverInput): ForegroundHoverPlan;
@@ -1,9 +1,17 @@
1
- export declare const SURFACE_FOREGROUND_ROLES: readonly ["text", "heading", "link", "supporting"];
1
+ export declare const SURFACE_FOREGROUND_ROLES: readonly ["text", "heading", "link", "linkHover", "supporting"];
2
2
  export type SurfaceForegroundRole = (typeof SURFACE_FOREGROUND_ROLES)[number];
3
3
  export type SurfaceForegrounds = Readonly<Record<SurfaceForegroundRole, string>>;
4
- export type SurfaceForegroundInput = Readonly<{
4
+ type SurfaceForegroundBaseInput = Readonly<{
5
5
  text: string;
6
6
  heading?: string;
7
7
  link?: string;
8
8
  supporting?: string;
9
9
  }>;
10
+ export type SurfaceForegroundInput = SurfaceForegroundBaseInput & (Readonly<{
11
+ linkHover?: never;
12
+ hoverDecoration?: never;
13
+ }> | Readonly<{
14
+ linkHover: string;
15
+ hoverDecoration: 'underline' | 'initial';
16
+ }>);
17
+ export {};
@@ -4,10 +4,18 @@ export { ORDINARY_TEXT_MIN_CONTRAST_RATIO } from '../palette/utils/contrast';
4
4
  export type ResolvedSurfaceForegroundTokens = Readonly<Record<SurfaceForegroundRole, ThemeColorToken>>;
5
5
  export type ResolvedSurfaceForeground = Readonly<{
6
6
  kind: 'known';
7
+ provenance: SurfaceForegroundProvenance;
7
8
  roles: ResolvedSurfaceForegroundTokens;
9
+ hoverDecoration: 'underline' | 'initial';
8
10
  }> | Readonly<{
9
11
  kind: 'unknown';
10
12
  }>;
13
+ export type SurfaceForegroundProvenance = Readonly<{
14
+ kind: 'measured';
15
+ backdropHex: string;
16
+ }> | Readonly<{
17
+ kind: 'trusted-treatment';
18
+ }>;
11
19
  export type SurfaceForegroundBackground = Readonly<{
12
20
  type: 'color' | 'gradient' | 'image' | 'video';
13
21
  color?: string | null;
@@ -20,6 +28,7 @@ export type SurfaceForegroundCandidates = Readonly<{
20
28
  text?: string | null;
21
29
  heading?: string | null;
22
30
  link?: string | null;
31
+ linkHover?: string | null;
23
32
  supporting?: string | null;
24
33
  }>;
25
34
  export type SurfaceForegroundResolutionOptions = Readonly<{
@@ -0,0 +1,2 @@
1
+ /** Render CSS declarations whether callers provide terminators or fragments. */
2
+ export declare function renderCssDeclarations(declarations: readonly string[]): string;
@@ -2,8 +2,9 @@ import * as React from "react";
2
2
  import { type VariantProps } from "class-variance-authority";
3
3
  declare const badgeVariants: (props?: ({
4
4
  variant?: "success" | "default" | "warning" | "secondary" | "destructive" | "outline" | null | undefined;
5
+ dot?: boolean | "bare" | null | undefined;
5
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
6
7
  export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> {
7
8
  }
8
- declare function Badge({ className, variant, ...props }: BadgeProps): React.JSX.Element;
9
+ declare function Badge({ className, variant, dot, ...props }: BadgeProps): React.JSX.Element;
9
10
  export { Badge, badgeVariants };
@@ -1,7 +1,7 @@
1
1
  import { type VariantProps } from 'class-variance-authority';
2
2
  import * as React from 'react';
3
3
  declare const buttonVariants: (props?: ({
4
- variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | "onDark" | "onDarkOutline" | "heroGlass" | null | undefined;
4
+ variant?: "link" | "default" | "secondary" | "destructive" | "outline" | "ghost" | "onDark" | "heroGlass" | null | undefined;
5
5
  size?: "default" | "sm" | "lg" | "icon" | null | undefined;
6
6
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
7
7
  export interface ButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement>, VariantProps<typeof buttonVariants> {
@@ -0,0 +1,23 @@
1
+ /**
2
+ * What a key press means to a `Combobox`, from the trigger or from its search
3
+ * input. Pure tables, so the component only has to carry an intent out.
4
+ */
5
+ export type ComboboxKeyIntent = Readonly<{
6
+ tag: 'open';
7
+ fallback: 'first' | 'last';
8
+ }> | Readonly<{
9
+ tag: 'move';
10
+ by: 1 | -1;
11
+ }> | Readonly<{
12
+ tag: 'choose';
13
+ }> | Readonly<{
14
+ tag: 'close';
15
+ }> | Readonly<{
16
+ tag: 'none';
17
+ }>;
18
+ export type ComboboxKeyResult = Readonly<{
19
+ intent: ComboboxKeyIntent;
20
+ preventDefault: boolean;
21
+ }>;
22
+ export declare function triggerKeyIntent(key: string, open: boolean, search: boolean): ComboboxKeyResult;
23
+ export declare function searchKeyIntent(key: string): ComboboxKeyResult;
@@ -0,0 +1,34 @@
1
+ /**
2
+ * The rows a `Combobox` list shows for a search: an optional "none" row, the
3
+ * matching items in the order given, and an optional "Create …" row. Pure, so
4
+ * the list and its keyboard handling agree on one sequence of rows.
5
+ */
6
+ export type ComboboxRowItem = Readonly<{
7
+ id: string;
8
+ label: string;
9
+ searchText?: string;
10
+ }>;
11
+ export type ComboboxRow<TEntry extends ComboboxRowItem> = Readonly<{
12
+ kind: 'none';
13
+ id: string;
14
+ }> | Readonly<{
15
+ kind: 'item';
16
+ id: string;
17
+ entry: TEntry;
18
+ }> | Readonly<{
19
+ kind: 'create';
20
+ id: string;
21
+ name: string;
22
+ }>;
23
+ export declare const COMBOBOX_NONE_ROW_ID = "__none__";
24
+ export declare const COMBOBOX_CREATE_ROW_ID = "__create__";
25
+ /** Trims and collapses inner whitespace, so " Morning yoga " is "Morning yoga". */
26
+ export declare function normalizeComboboxQuery(query: string): string;
27
+ export declare function buildComboboxRows<TEntry extends ComboboxRowItem>(input: Readonly<{
28
+ items: readonly TEntry[];
29
+ query: string;
30
+ /** Search off means every item shows and nothing can be created. */
31
+ search: boolean;
32
+ hasNoneOption: boolean;
33
+ canCreate: boolean;
34
+ }>): ComboboxRow<TEntry>[];
@@ -5,13 +5,31 @@ export type ComboboxItem<T = unknown> = Readonly<{
5
5
  searchText?: string;
6
6
  item: T;
7
7
  }>;
8
+ export type ComboboxCreateResult<T = unknown> = Readonly<{
9
+ ok: true;
10
+ item: ComboboxItem<T>;
11
+ }> | Readonly<{
12
+ ok: false;
13
+ message: string;
14
+ }>;
15
+ /**
16
+ * Offers "Create …" for a search that no item is named exactly. The created
17
+ * item is selected as soon as `onCreate` resolves with it; a failure keeps
18
+ * the list open and shows the message under the search.
19
+ */
20
+ export type ComboboxCreate<T = unknown> = Readonly<{
21
+ label: (name: string) => string;
22
+ onCreate: (name: string) => Promise<ComboboxCreateResult<T>>;
23
+ }>;
8
24
  export type ComboboxProps<T = unknown> = Readonly<{
9
25
  items: readonly ComboboxItem<T>[];
10
26
  value?: string;
11
27
  onSelect: (item: ComboboxItem<T> | undefined) => void;
12
28
  id?: string;
13
29
  'aria-describedby'?: string;
30
+ 'aria-invalid'?: boolean;
14
31
  searchInputAriaLabel?: string;
32
+ searchPlaceholder?: string;
15
33
  placeholder?: string;
16
34
  emptyMessage?: string;
17
35
  clearLabel?: string;
@@ -19,6 +37,13 @@ export type ComboboxProps<T = unknown> = Readonly<{
19
37
  className?: string;
20
38
  disabled?: boolean;
21
39
  renderItem?: (entry: ComboboxItem<T>, selected: boolean) => ReactNode;
40
+ /** Shown before the label in the list and on the field, such as a colour swatch. */
41
+ renderLeading?: (entry: ComboboxItem<T>) => ReactNode;
22
42
  showClear?: boolean;
43
+ /** A first row that clears the value, labelled like "No category". */
44
+ noneOption?: Readonly<{
45
+ label: string;
46
+ }>;
47
+ create?: ComboboxCreate<T>;
23
48
  }>;
24
- export declare function Combobox<T = unknown>({ items, value, onSelect, id, 'aria-describedby': ariaDescribedby, searchInputAriaLabel, placeholder, emptyMessage, clearLabel, search, className, disabled, renderItem, showClear, }: ComboboxProps<T>): import("react").JSX.Element;
49
+ export declare function Combobox<T = unknown>(props: ComboboxProps<T>): import("react").JSX.Element;
@@ -1,16 +1,13 @@
1
- import { type ReactNode, type MouseEventHandler } from 'react';
2
- import { type ButtonProps } from './button';
3
- export type DatePickerTriggerButtonProps = Omit<ButtonProps, 'children'> & {
1
+ import { type ReactNode } from 'react';
2
+ import { type FieldTriggerProps } from './field-trigger';
3
+ export type DatePickerTriggerButtonProps = Omit<FieldTriggerProps, 'children' | 'isPlaceholder' | 'leading' | 'trailing'> & {
4
4
  selected: boolean;
5
- active?: boolean;
6
5
  label: ReactNode;
7
6
  placeholder: ReactNode;
8
- onClick?: MouseEventHandler<HTMLButtonElement>;
9
7
  };
10
- export declare const DatePickerTriggerButton: import("react").ForwardRefExoticComponent<Omit<ButtonProps, "children"> & {
8
+ /** The field that opens a calendar: a `FieldTrigger` led by a calendar icon. */
9
+ export declare const DatePickerTriggerButton: import("react").ForwardRefExoticComponent<Omit<FieldTriggerProps, "children" | "isPlaceholder" | "leading" | "trailing"> & {
11
10
  selected: boolean;
12
- active?: boolean;
13
11
  label: ReactNode;
14
12
  placeholder: ReactNode;
15
- onClick?: MouseEventHandler<HTMLButtonElement>;
16
13
  } & import("react").RefAttributes<HTMLButtonElement>>;
@@ -35,6 +35,7 @@ export type EditorItemCardMenu = Readonly<{
35
35
  label: string;
36
36
  disabled?: boolean;
37
37
  ref?: React.Ref<HTMLButtonElement>;
38
+ onCloseAutoFocus?: (event: Event) => void;
38
39
  groups: readonly EditorItemCardMenuGroup[];
39
40
  }>;
40
41
  export type EditorItemCardActionsProps = Readonly<{
@@ -0,0 +1,39 @@
1
+ import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
+ /**
3
+ * A field that opens a list or calendar: the shared field surface (see
4
+ * fieldControl.ts), laid out as a button with a value and an icon, so a
5
+ * picker reads as a field beside the inputs around it rather than as a
6
+ * button. `SelectTrigger` and `FieldTrigger` both build on it.
7
+ */
8
+ export declare const fieldTriggerClassName: string;
9
+ export type FieldTriggerProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, 'children'> & Readonly<{
10
+ /** What the field currently shows: the chosen value, or the placeholder. */
11
+ children: ReactNode;
12
+ /** True while nothing is chosen, so the text reads as a placeholder. */
13
+ isPlaceholder?: boolean;
14
+ /** Shown before the value, such as a calendar icon or a colour swatch. */
15
+ leading?: ReactNode;
16
+ /** Pass null to drop the chevron, as the date picker does. */
17
+ trailing?: ReactNode;
18
+ /** Kept open-state styling while the popover it controls is showing. */
19
+ active?: boolean;
20
+ size?: 'sm' | 'default';
21
+ }>;
22
+ /**
23
+ * The button that opens a popover picker (a combobox, a multi-select, a date
24
+ * picker), styled as a field. Spreads the props and ref a Radix trigger passes
25
+ * through `asChild`.
26
+ */
27
+ export declare const FieldTrigger: import("react").ForwardRefExoticComponent<Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children"> & Readonly<{
28
+ /** What the field currently shows: the chosen value, or the placeholder. */
29
+ children: ReactNode;
30
+ /** True while nothing is chosen, so the text reads as a placeholder. */
31
+ isPlaceholder?: boolean;
32
+ /** Shown before the value, such as a calendar icon or a colour swatch. */
33
+ leading?: ReactNode;
34
+ /** Pass null to drop the chevron, as the date picker does. */
35
+ trailing?: ReactNode;
36
+ /** Kept open-state styling while the popover it controls is showing. */
37
+ active?: boolean;
38
+ size?: "sm" | "default";
39
+ }> & import("react").RefAttributes<HTMLButtonElement>>;
@@ -0,0 +1,27 @@
1
+ /**
2
+ * The one field shape, as class strings, so Input, Textarea, SelectTrigger
3
+ * and the date picker's trigger cannot drift apart. The sizes come from the
4
+ * `--field-*` tokens in styles/editor-base.css (compact by default, roomy
5
+ * under `data-field-size="roomy"`); the colours come from the surface's
6
+ * palette.
7
+ *
8
+ * The focus glow and the placeholder are mixed from palette tokens here,
9
+ * rather than in derived tokens on `:root`, so they follow a surface that
10
+ * retunes its colours on an inner element.
11
+ */
12
+ /** Keyboard focus on a field-like control: the focus border and a soft glow in its colour, no outline. */
13
+ export declare const FIELD_FOCUS_CLASS = "focus-visible:outline-none focus-visible:border-field-border-focus focus-visible:shadow-[0_0_0_4px_color-mix(in_srgb,var(--field-border-strong)_18%,transparent)]";
14
+ /** The same focus for a wrapper that draws the border around an inner input (a composite field). */
15
+ export declare const FIELD_FOCUS_WITHIN_CLASS = "focus-within:border-field-border-focus focus-within:shadow-[0_0_0_4px_color-mix(in_srgb,var(--field-border-strong)_18%,transparent)]";
16
+ /**
17
+ * A native checkbox or radio, for the few places the shared Checkbox and
18
+ * RadioGroup can't go (native `required`, a radio group split across
19
+ * sections, packages/ui itself).
20
+ */
21
+ export declare const NATIVE_CHOICE_CLASS = "size-[1.125rem] shrink-0 cursor-pointer accent-[var(--primary)]";
22
+ /** Border, fill, radius, type, focus glow and the invalid state. No height or padding. */
23
+ export declare const FIELD_SURFACE_CLASS: string;
24
+ /** A single-line control: the surface at the field height. */
25
+ export declare const FIELD_CONTROL_CLASS: string;
26
+ /** A multi-line control: the surface with room to grow. */
27
+ export declare const FIELD_TEXTAREA_CLASS: string;
@@ -13,7 +13,10 @@ export { TabbedScrollableDialogContent, type TabbedScrollableDialogContentProps,
13
13
  export { menuHoverInteractionClassName, menuItemInteractionClassName, menuTriggerInteractionClassName, DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuGroup, DropdownMenuPortal, DropdownMenuSub, DropdownMenuSubTrigger, DropdownMenuSubContent, } from './dropdown-menu';
14
14
  export { Form, FormField, FormItem, FormLabel, FormControl, FormDescription, FormMessage, useFormField, } from './form';
15
15
  export { Input } from './input';
16
- export { Combobox, type ComboboxItem, type ComboboxProps } from './combobox';
16
+ export { NativeSelect, type NativeSelectProps } from './native-select';
17
+ export { Combobox, type ComboboxCreate, type ComboboxCreateResult, type ComboboxItem, type ComboboxProps, } from './combobox';
18
+ export { FieldTrigger, fieldTriggerClassName, type FieldTriggerProps } from './field-trigger';
19
+ export { normalizeComboboxQuery } from './combobox-rows';
17
20
  export { NumberInput, type NumberInputProps } from './number-input';
18
21
  export { SearchInput, type SearchInputProps } from './search-input';
19
22
  export { MultiSelect, type MultiSelectOption, type MultiSelectProps } from './multi-select';
@@ -0,0 +1,8 @@
1
+ import * as React from "react";
2
+ type NativeSelectProps = React.ComponentProps<"select"> & {
3
+ /** Classes for the positioning wrapper (width, margins, grid placement). */
4
+ containerClassName?: string;
5
+ };
6
+ /** A native `<select>` in the shared field shape, with a chevron in place of the browser arrow. */
7
+ declare const NativeSelect: React.ForwardRefExoticComponent<Omit<NativeSelectProps, "ref"> & React.RefAttributes<HTMLSelectElement>>;
8
+ export { NativeSelect, type NativeSelectProps };
@@ -15,6 +15,7 @@ export type NavigationTabsProps = {
15
15
  variant?: NavigationTabsVariant;
16
16
  urlParam?: string;
17
17
  className?: string;
18
+ tabClassName?: string;
18
19
  trailingActions?: React.ReactNode;
19
20
  };
20
21
  /**
@@ -27,7 +28,7 @@ export type NavigationTabsProps = {
27
28
  * - URL synchronization via query param or hash
28
29
  * - Keyboard navigation and ARIA support
29
30
  */
30
- export declare function NavigationTabs({ tabs, activeTab: controlledActiveTab, onTabChange, variant: _variant, urlParam, className, trailingActions, }: NavigationTabsProps): import("react").JSX.Element | null;
31
+ export declare function NavigationTabs({ tabs, activeTab: controlledActiveTab, onTabChange, variant: _variant, urlParam, className, tabClassName, trailingActions, }: NavigationTabsProps): import("react").JSX.Element | null;
31
32
  export type NavigationTabPanelsProps = {
32
33
  tabs: NavigationTab[];
33
34
  activeTab: string;