@riverbankcms/sdk 0.146.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 (195) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/{PreviewEditorSidebar-kg2r2Fyi.mjs → PreviewEditorSidebar-DtpB3_sS.mjs} +51 -33
  3. package/dist/{PreviewEditorUI-sWMLp5dT.mjs → PreviewEditorUI-DxTLgaHo.mjs} +3 -3
  4. package/dist/{PreviewQueryProvider-Cg51xq1w.mjs → PreviewQueryProvider-Dd4dxOiU.mjs} +1 -1
  5. package/dist/{SdkPreviewModeRuntime-h2ti3Hch.mjs → SdkPreviewModeRuntime-DMMNCngt.mjs} +39 -12
  6. package/dist/{SiteChromeCustomizeContext-DEACFH9m.mjs → SiteChromeCustomizeContext-DQXZXiqS.mjs} +2499 -1682
  7. package/dist/_dts/ai/src/contracts/proposals.d.ts +198 -0
  8. package/dist/_dts/ai/src/contracts/siteStyleProposalSchemas.d.ts +18 -0
  9. package/dist/_dts/api/src/accountApi.d.ts +5 -5
  10. package/dist/_dts/api/src/bookingConfig.d.ts +16 -0
  11. package/dist/_dts/api/src/bookingManagementEndpoints.d.ts +4 -13
  12. package/dist/_dts/api/src/bookingOperations.d.ts +2 -44
  13. package/dist/_dts/api/src/bookingPeople.d.ts +92 -0
  14. package/dist/_dts/api/src/bookingPeopleEndpointDefinitions.d.ts +38 -0
  15. package/dist/_dts/api/src/bookingRecords.d.ts +11 -49
  16. package/dist/_dts/api/src/bookingSettingsSections.d.ts +1 -1
  17. package/dist/_dts/api/src/bookings.d.ts +1 -0
  18. package/dist/_dts/api/src/endpoints.d.ts +587 -561
  19. package/dist/_dts/api/src/eventManagementContracts.d.ts +23 -8
  20. package/dist/_dts/api/src/eventManagementEndpointDefinitions.d.ts +1 -1
  21. package/dist/_dts/api/src/index.d.ts +3 -2
  22. package/dist/_dts/api/src/indexCoreTypes.d.ts +1 -1
  23. package/dist/_dts/api/src/launchReadiness.d.ts +1 -6
  24. package/dist/_dts/api/src/mailingListIntegration.d.ts +6 -0
  25. package/dist/_dts/api/src/navigation/dashboardBookingsNav.d.ts +1 -1
  26. package/dist/_dts/api/src/newsletterEndpointDefinitions.d.ts +15 -0
  27. package/dist/_dts/api/src/occurrenceScheduling.d.ts +19 -0
  28. package/dist/_dts/api/src/publicAppointmentBookingContracts.d.ts +48 -0
  29. package/dist/_dts/api/src/publicExperience/eventEndpoints.d.ts +7 -0
  30. package/dist/_dts/api/src/sdk-event-upsert.d.ts +15 -0
  31. package/dist/_dts/api/src/sdkCourseBooking.d.ts +4 -4
  32. package/dist/_dts/api/src/siteLifecycleEndpoints.d.ts +61 -0
  33. package/dist/_dts/api/src/siteManagementEndpoints.d.ts +5 -18
  34. package/dist/_dts/api/src/siteOnboarding.d.ts +2 -14
  35. package/dist/_dts/blocks/src/PageRenderer.d.ts +3 -4
  36. package/dist/_dts/blocks/src/contracts/proof-block-islands.d.ts +8 -0
  37. package/dist/_dts/blocks/src/index.d.ts +1 -1
  38. package/dist/_dts/blocks/src/pageRenderAdmission.d.ts +22 -4
  39. package/dist/_dts/blocks/src/pageRendererContracts.d.ts +2 -0
  40. package/dist/_dts/blocks/src/system/blocks/newsletter-signup.d.ts +4 -1
  41. package/dist/_dts/blocks/src/system/runtime/api/types/appointments.d.ts +4 -0
  42. package/dist/_dts/blocks/src/system/runtime/api/types/events.d.ts +12 -0
  43. package/dist/_dts/blocks/src/system/runtime/components/registry.client.d.ts +12 -0
  44. package/dist/_dts/blocks/src/system/runtime/components/runtime-backed-blocks.d.ts +6 -0
  45. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessBookingFlow.d.ts +8 -0
  46. package/dist/_dts/blocks/src/system/runtime/hooks/useHeadlessEventRegistrationFlow.d.ts +2 -0
  47. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.completion.d.ts +9 -0
  48. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.headless.state.d.ts +9 -0
  49. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.interactive.d.ts +19 -0
  50. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-choice.d.ts +5 -0
  51. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-note.d.ts +3 -0
  52. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.mailing-list-state.d.ts +9 -0
  53. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.reserved-fields.d.ts +1 -1
  54. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.server.d.ts +1 -1
  55. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.state.d.ts +2 -0
  56. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-handler.d.ts +8 -0
  57. package/dist/_dts/blocks/src/system/runtime/nodes/booking-form.submit-success.d.ts +9 -0
  58. package/dist/_dts/blocks/src/system/runtime/nodes/booking-runtime-sources.d.ts +3 -0
  59. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/AttendeeDetailsStep.d.ts +3 -0
  60. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/SuccessStep.d.ts +3 -0
  61. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/event-registration.headless.contract.d.ts +3 -0
  62. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/sessionStorage.d.ts +2 -0
  63. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/types.d.ts +6 -0
  64. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationSubmit.d.ts +3 -0
  65. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration/useEventRegistrationWizard.d.ts +8 -0
  66. package/dist/_dts/blocks/src/system/runtime/nodes/event-registration.interactive.d.ts +9 -0
  67. package/dist/_dts/blocks/src/system/runtime/nodes/newsletter-form.block-submission.d.ts +2 -4
  68. package/dist/_dts/blocks/src/system/runtime/resolver.d.ts +2 -0
  69. package/dist/_dts/blocks/src/system/runtime/shared/components/BookingMailingListNote.d.ts +6 -0
  70. package/dist/_dts/blocks/src/system/runtime/shared/mailingListSignupCopy.d.ts +6 -0
  71. package/dist/_dts/blocks/src/system/runtime/shared/types.d.ts +1 -0
  72. package/dist/_dts/blocks/src/system/transforms/registry/_utils/surfaceForegroundStyles.d.ts +3 -2
  73. package/dist/_dts/blocks/src/system/transforms/registry/core.d.ts +2 -0
  74. package/dist/_dts/blocks/src/system/transforms/registry/layout.d.ts +1 -3
  75. package/dist/_dts/core/src/index.d.ts +1 -1
  76. package/dist/_dts/core/src/mailing-list-runtime.d.ts +15 -0
  77. package/dist/_dts/core/src/mailing-list-setup.d.ts +2 -0
  78. package/dist/_dts/core/src/mailing-list-submission.d.ts +6 -0
  79. package/dist/_dts/core/src/navigation-portal-labels.d.ts +9 -0
  80. package/dist/_dts/core/src/participants.d.ts +0 -38
  81. package/dist/_dts/db/src/generated/supabase/database.types.d.ts +102 -22
  82. package/dist/_dts/editor-blocks/src/block-editor/actionPresentation.d.ts +1 -0
  83. package/dist/_dts/preview-next/src/client/blocks/EditablePageRenderer.d.ts +7 -1
  84. package/dist/_dts/preview-next/src/client/blocks/composer/types.d.ts +4 -3
  85. package/dist/_dts/sdk/src/rendering/blocks-page-renderer.d.ts +1 -0
  86. package/dist/_dts/sdk/src/rendering/components/pageShared.d.ts +1 -0
  87. package/dist/_dts/sdk/src/rendering/helpers/loadPage.d.ts +1 -1
  88. package/dist/_dts/sdk/src/rendering/helpers/pageRuntimeSupport.d.ts +2 -2
  89. package/dist/_dts/sdk/src/version.d.ts +1 -1
  90. package/dist/_dts/theme-core/src/buttons/effects/types.d.ts +1 -1
  91. package/dist/_dts/theme-core/src/footer/effectiveNavLinkStyle.d.ts +13 -0
  92. package/dist/_dts/theme-core/src/footer/index.d.ts +1 -0
  93. package/dist/_dts/theme-core/src/generated/containerResponsiveThemeCss.d.ts +1 -1
  94. package/dist/_dts/theme-core/src/header/effectiveNavLinkStyle.d.ts +17 -0
  95. package/dist/_dts/theme-core/src/header/generateHeaderLogoStyles.d.ts +15 -0
  96. package/dist/_dts/theme-core/src/header/generateHeaderNavLinkStyles.d.ts +4 -0
  97. package/dist/_dts/theme-core/src/header/index.d.ts +3 -0
  98. package/dist/_dts/theme-core/src/header/legacyNavLinkStyle.d.ts +1 -1
  99. package/dist/_dts/theme-core/src/header/openingForegroundProjection.d.ts +7 -0
  100. package/dist/_dts/theme-core/src/header/rootPaint.d.ts +4 -0
  101. package/dist/_dts/theme-core/src/navigation/effectPolicy.d.ts +38 -0
  102. package/dist/_dts/theme-core/src/navigation/generateNavLinkCSS.d.ts +4 -0
  103. package/dist/_dts/theme-core/src/navigation/types.d.ts +4 -0
  104. package/dist/_dts/theme-core/src/site-styles/accessibleSurfaces.d.ts +1 -1
  105. package/dist/_dts/theme-core/src/surfaces/foregroundContract.d.ts +7 -0
  106. package/dist/_dts/theme-core/src/surfaces/foregroundInteraction.d.ts +29 -22
  107. package/dist/_dts/theme-core/src/surfaces/foregroundRoles.d.ts +10 -2
  108. package/dist/_dts/theme-core/src/surfaces/resolveSurfaceForeground.d.ts +9 -0
  109. package/dist/_dts/theme-core/src/utils/cssDeclarations.d.ts +2 -0
  110. package/dist/_dts/ui/src/badge.d.ts +2 -1
  111. package/dist/_dts/ui/src/button.d.ts +1 -1
  112. package/dist/_dts/ui/src/combobox-keys.d.ts +23 -0
  113. package/dist/_dts/ui/src/combobox-rows.d.ts +34 -0
  114. package/dist/_dts/ui/src/combobox.d.ts +26 -1
  115. package/dist/_dts/ui/src/date-picker.d.ts +5 -8
  116. package/dist/_dts/ui/src/editor-item-card.d.ts +1 -0
  117. package/dist/_dts/ui/src/field-trigger.d.ts +39 -0
  118. package/dist/_dts/ui/src/fieldControl.d.ts +27 -0
  119. package/dist/_dts/ui/src/index.d.ts +4 -1
  120. package/dist/_dts/ui/src/native-select.d.ts +8 -0
  121. package/dist/_dts/ui/src/popover.d.ts +7 -1
  122. package/dist/_dts/ui/src/segmented-control.d.ts +4 -0
  123. package/dist/_dts/ui/src/surface.d.ts +1 -1
  124. package/dist/client/{BookingConsentAgreement-BQKL045f.mjs → BookingMailingListNote-1n4Ch_u_.mjs} +15 -4
  125. package/dist/client/{CheckboxChoice--W2n6yKs.mjs → CheckboxChoice-B33MqoUo.mjs} +1 -1
  126. package/dist/client/{DiscountCodeDisclosure-CsOtjFY7.mjs → DiscountCodeDisclosure-CKJtz0mY.mjs} +1 -1
  127. package/dist/client/{EventCombined.client-BdRjVbhH.mjs → EventCombined.client-C0pgma9y.mjs} +7 -7
  128. package/dist/client/{EventListing.client-DBxC6xOU.mjs → EventListing.client-4fhLOvHP.mjs} +2 -2
  129. package/dist/client/{LeafletStaticMap-mHEJKrTs.mjs → LeafletStaticMap-DScC4F3w.mjs} +1 -1
  130. package/dist/client/{scrollToBlock-BNgaEUpo.mjs → TerminalPanel-B5ZUsYhe.mjs} +77 -77
  131. package/dist/client/{ThemedButton-CE5KYT6z.mjs → ThemedButton-DoVIV1Ao.mjs} +2 -2
  132. package/dist/client/{accordion-BEQNSptH.mjs → accordion-CoT5g7zo.mjs} +1 -1
  133. package/dist/client/{bookingForm-AMr-s5vw.mjs → bookingForm-BWxB46xD.mjs} +226 -106
  134. package/dist/client/bookings.mjs +367 -188
  135. package/dist/client/{carousel-Bbt_QgJy.mjs → carousel-DtNYWFd3.mjs} +2 -2
  136. package/dist/client/{carousel.client-jahpU9Vz.mjs → carousel.client-A2lG-9od.mjs} +1 -1
  137. package/dist/client/{cart-CnWi30zJ.mjs → cart-z4qZih1Y.mjs} +3 -3
  138. package/dist/client/{checkout-f3nkWgd4.mjs → checkout-DpL7euFH.mjs} +3 -3
  139. package/dist/client/{checkoutUrls-CW3-78uu.mjs → checkoutUrls-BEfR7kVu.mjs} +1 -1
  140. package/dist/client/client.mjs +2125 -1420
  141. package/dist/client/{colorStyles-CuJBiS-1.mjs → colorStyles-j5U9v5JA.mjs} +5 -1
  142. package/dist/client/{context-Bc8T6pCe.mjs → context-C8TinPJc.mjs} +1 -1
  143. package/dist/client/{dates-DUsCEzLb.mjs → dates-vwwxTeB0.mjs} +2 -2
  144. package/dist/client/{eventCalendar-CKwgXui5.mjs → eventCalendar-DIbHfJXO.mjs} +10 -10
  145. package/dist/client/{eventCombined-CBAOSTGR.mjs → eventCombined-DoGMJ6cg.mjs} +4 -4
  146. package/dist/client/{eventDetails-Dh-_WiBD.mjs → eventDetails-BjN9v6a1.mjs} +4 -4
  147. package/dist/client/{eventListing-CA3frIH5.mjs → eventListing-DajjWgOv.mjs} +4 -4
  148. package/dist/client/{eventRegistration-BHtsgdcg.mjs → eventRegistration-DMq9gMA-.mjs} +109 -41
  149. package/dist/client/{form-C2h3YAcg.mjs → form-Qf6qTbos.mjs} +5 -5
  150. package/dist/client/{headerSection-lwMuMTH9.mjs → headerSection-D7qJrqFX.mjs} +3 -3
  151. package/dist/client/hooks.mjs +661 -116
  152. package/dist/client/{locationMap-DJ2bLODV.mjs → locationMap-CCF9-t_0.mjs} +4 -4
  153. package/dist/client/{FieldValidationMessage-AYanWFb-.mjs → mailingListSignupCopy-DZSHZrm6.mjs} +14 -1
  154. package/dist/client/{media-BtJ37tzS.mjs → media-CwBGetqC.mjs} +1 -1
  155. package/dist/client/{newsletterForm-8Pu5K32g.mjs → newsletterForm-DzCLSP4S.mjs} +6 -6
  156. package/dist/client/{pricing-HHx3IgBz.mjs → pricing-Cgxv2KLC.mjs} +1 -1
  157. package/dist/client/{productDetail-C_1odnAf.mjs → productDetail-ru9w5GHx.mjs} +3 -3
  158. package/dist/client/{productList-CtCv-Nmx.mjs → productList-zaapKSl-.mjs} +3 -3
  159. package/dist/client/{propsDecoder-Dcgsncxb.mjs → propsDecoder-CwvvNOHx.mjs} +52 -6
  160. package/dist/client/rendering/client.mjs +951 -369
  161. package/dist/client/rendering/islands.mjs +19 -19
  162. package/dist/client/rendering.mjs +2153 -1393
  163. package/dist/client/{routeIslandApiConfig-CWLP7wu3.mjs → routeIslandApiConfig-BwVFo0Y4.mjs} +1 -1
  164. package/dist/client/{shop-commerce-B88zmWWo.mjs → shop-commerce-De7gEnkA.mjs} +8 -8
  165. package/dist/client/{shop-commerce-store-DtSfkKuX.mjs → shop-commerce-store-B3MCxIBW.mjs} +1 -1
  166. package/dist/client/{shop-DQXrQ8kJ.mjs → shop-mktkXvbV.mjs} +7 -7
  167. package/dist/client/{shopShared-cuaONpkJ.mjs → shopShared-TqExh235.mjs} +5 -5
  168. package/dist/client/{useEventFilters-Bukew6Gb.mjs → useEventFilters-n_OjkIjX.mjs} +8 -8
  169. package/dist/preview-next/before-render.mjs +122 -50
  170. package/dist/preview-next/client/runtime.mjs +4 -4
  171. package/dist/preview-next/editor-base.css +53 -2
  172. package/dist/preview-next/editor-chrome.css +7 -4
  173. package/dist/preview-next/keepAlive.mjs +122 -50
  174. package/dist/preview-next/middleware.mjs +122 -50
  175. package/dist/{previewAuthStore-h5IgbSp4.mjs → previewAuthStore-C_EHQ5XA.mjs} +122 -50
  176. package/dist/{sdk-runtime-DTc1uIXn.mjs → sdk-runtime-BIkJg5y1.mjs} +2 -2
  177. package/dist/{separator-BpHS1KZK.mjs → separator-C9qDP95Z.mjs} +1 -1
  178. package/dist/server/components.mjs +25345 -24942
  179. package/dist/server/config-validation.mjs +711 -163
  180. package/dist/server/config.mjs +711 -163
  181. package/dist/server/data.mjs +709 -162
  182. package/dist/server/index.mjs +123 -51
  183. package/dist/server/navigation.mjs +13 -2
  184. package/dist/server/next.mjs +4538 -4169
  185. package/dist/server/page-converter.mjs +107 -64
  186. package/dist/server/prebuild.mjs +1 -1
  187. package/dist/server/rendering/server.mjs +2509 -2104
  188. package/dist/server/rendering.mjs +25526 -25104
  189. package/dist/server/routing.mjs +750 -289
  190. package/dist/server/server.mjs +671 -148
  191. package/dist/server/theme-bridge.mjs +66 -17
  192. package/dist/server/theme.mjs +5 -1
  193. package/dist/styles/index.css +32 -4
  194. package/package.json +1 -1
  195. 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,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 };
@@ -6,4 +6,10 @@ declare const PopoverAnchor: React.ForwardRefExoticComponent<PopoverPrimitive.Po
6
6
  declare const PopoverContent: React.ForwardRefExoticComponent<Omit<PopoverPrimitive.PopoverContentProps & React.RefAttributes<HTMLDivElement>, "ref"> & {
7
7
  container?: HTMLElement | null;
8
8
  } & React.RefAttributes<HTMLDivElement>>;
9
- export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor };
9
+ /**
10
+ * The modal dialog a popover's trigger sits in, if any. A popover opened from
11
+ * inside a dialog portals into it, or the dialog's scroll lock and modal
12
+ * boundary treat the list as outside content.
13
+ */
14
+ declare function findOwningDialog(trigger: Element | null | undefined): HTMLElement | null;
15
+ export { Popover, PopoverTrigger, PopoverContent, PopoverAnchor, findOwningDialog };
@@ -13,4 +13,8 @@ export type SegmentedControlProps<T extends string = string> = {
13
13
  className?: string;
14
14
  'aria-label'?: string;
15
15
  };
16
+ /**
17
+ * A pale track with the chosen option raised on it as a pill. The options
18
+ * share the track's width equally when the caller makes it wider (`w-full`).
19
+ */
16
20
  export declare function SegmentedControl<T extends string = string>({ options, value, onValueChange, size, className, ...aria }: SegmentedControlProps<T>): React.ReactElement;
@@ -1,7 +1,7 @@
1
1
  import * as React from 'react';
2
2
  import { type VariantProps } from 'class-variance-authority';
3
3
  export declare const surfaceVariants: (props?: ({
4
- variant?: "default" | "background" | null | undefined;
4
+ variant?: "default" | "background" | "inverse" | null | undefined;
5
5
  radius?: "none" | "sm" | "md" | "lg" | "xl" | "flushMobile" | null | undefined;
6
6
  padding?: "none" | "sm" | "md" | "lg" | null | undefined;
7
7
  } & import("class-variance-authority/types").ClassProp) | undefined) => string;
@@ -1,7 +1,8 @@
1
1
  "use client";
2
- import { Vt as assertNever$2, yn as formatCurrencyAmount } from "./propsDecoder-Dcgsncxb.mjs";
3
- import { a as CheckIcon } from "./scrollToBlock-BNgaEUpo.mjs";
4
- import { n as RichText } from "./checkoutUrls-CW3-78uu.mjs";
2
+ import { Vt as assertNever$2, bn as formatCurrencyAmount } from "./propsDecoder-CwvvNOHx.mjs";
3
+ import { i as CheckIcon } from "./TerminalPanel-B5ZUsYhe.mjs";
4
+ import { n as getBookingMailingListNoteCopy } from "./mailingListSignupCopy-DZSHZrm6.mjs";
5
+ import { n as RichText } from "./checkoutUrls-BEfR7kVu.mjs";
5
6
  import { useCallback, useEffect, useReducer, useRef } from "react";
6
7
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
8
  //#region ../core/src/date-math.ts
@@ -697,4 +698,14 @@ function BookingConsentAgreement({ agreement, showTitle = true, title, titleId }
697
698
  })] });
698
699
  }
699
700
  //#endregion
700
- export { resolveBookingPaymentDueNowCents as a, buildBookingPaymentSelectionViewModel as i, StepIndicator as n, formatPrice as o, usePolling as r, BookingConsentAgreement as t };
701
+ //#region ../blocks/src/system/runtime/shared/components/BookingMailingListNote.tsx
702
+ function BookingMailingListNote(props) {
703
+ const copy = getBookingMailingListNoteCopy(props.note, props.context);
704
+ return /* @__PURE__ */ jsxs("div", {
705
+ role: "status",
706
+ className: props.className,
707
+ children: [/* @__PURE__ */ jsx("p", { children: copy.title }), copy.detail ? /* @__PURE__ */ jsx("p", { children: copy.detail }) : null]
708
+ });
709
+ }
710
+ //#endregion
711
+ export { buildBookingPaymentSelectionViewModel as a, usePolling as i, BookingConsentAgreement as n, resolveBookingPaymentDueNowCents as o, StepIndicator as r, formatPrice as s, BookingMailingListNote as t };
@@ -1,4 +1,4 @@
1
- import { O as clsx } from "./colorStyles-CuJBiS-1.mjs";
1
+ import { O as clsx } from "./colorStyles-j5U9v5JA.mjs";
2
2
  import "react";
3
3
  import { jsx, jsxs } from "react/jsx-runtime";
4
4
  //#region ../blocks/src/system/runtime/shared/components/CheckboxChoice.tsx
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { t as ThemedButton } from "./ThemedButton-CE5KYT6z.mjs";
2
+ import { t as ThemedButton } from "./ThemedButton-DoVIV1Ao.mjs";
3
3
  import { useId } from "react";
4
4
  import { jsx, jsxs } from "react/jsx-runtime";
5
5
  //#region ../blocks/src/system/runtime/api/types/discounts.ts