@raydenui/ui 0.9.7 → 0.10.1

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 (309) hide show
  1. package/README.md +124 -49
  2. package/dist/Table-DCNSxua1.d.cts +31 -0
  3. package/dist/Table-DCNSxua1.d.ts +31 -0
  4. package/dist/blocks/ApplicationShellBlock.cjs +157 -0
  5. package/dist/blocks/ApplicationShellBlock.js +154 -0
  6. package/dist/blocks/CheckoutReviewBlock.cjs +16 -0
  7. package/dist/blocks/CheckoutReviewBlock.js +13 -0
  8. package/dist/blocks/CommandPaletteBlock.cjs +334 -0
  9. package/dist/blocks/CommandPaletteBlock.js +331 -0
  10. package/dist/blocks/CreateAccountBlock.cjs +147 -0
  11. package/dist/blocks/CreateAccountBlock.js +143 -0
  12. package/dist/blocks/EmptyStateBlock.cjs +19 -0
  13. package/dist/blocks/EmptyStateBlock.js +16 -0
  14. package/dist/blocks/FeatureOverviewBlock.cjs +54 -0
  15. package/dist/blocks/FeatureOverviewBlock.js +51 -0
  16. package/dist/blocks/HeaderBlock.cjs +230 -0
  17. package/dist/blocks/HeaderBlock.js +227 -0
  18. package/dist/blocks/KpiOverviewBlock.cjs +63 -0
  19. package/dist/blocks/KpiOverviewBlock.js +60 -0
  20. package/dist/blocks/LoginBlock.cjs +66 -0
  21. package/dist/blocks/LoginBlock.js +63 -0
  22. package/dist/blocks/NotificationsBlock.cjs +17 -0
  23. package/dist/blocks/NotificationsBlock.js +14 -0
  24. package/dist/blocks/PageHeaderBlock.cjs +121 -0
  25. package/dist/blocks/PageHeaderBlock.js +118 -0
  26. package/dist/blocks/PricingPlansBlock.cjs +146 -0
  27. package/dist/blocks/PricingPlansBlock.js +143 -0
  28. package/dist/blocks/ProductCollectionBlock.cjs +37 -0
  29. package/dist/blocks/ProductCollectionBlock.js +34 -0
  30. package/dist/blocks/ProductDetailBlock.cjs +30 -0
  31. package/dist/blocks/ProductDetailBlock.js +27 -0
  32. package/dist/blocks/ProductHeroBlock.cjs +83 -0
  33. package/dist/blocks/ProductHeroBlock.js +80 -0
  34. package/dist/blocks/ProfileSettingsBlock.cjs +130 -0
  35. package/dist/blocks/ProfileSettingsBlock.js +126 -0
  36. package/dist/blocks/QuickSendBlock.cjs +11 -0
  37. package/dist/blocks/QuickSendBlock.js +8 -0
  38. package/dist/blocks/RecentTransactionsBlock.cjs +13 -0
  39. package/dist/blocks/RecentTransactionsBlock.js +10 -0
  40. package/dist/blocks/SearchableTableBlock.cjs +91 -0
  41. package/dist/blocks/SearchableTableBlock.js +88 -0
  42. package/dist/blocks/ShoppingCartBlock.cjs +16 -0
  43. package/dist/blocks/ShoppingCartBlock.js +13 -0
  44. package/dist/blocks/SiteFooterBlock.cjs +69 -0
  45. package/dist/blocks/SiteFooterBlock.js +66 -0
  46. package/dist/blocks/TableBlock.cjs +20 -0
  47. package/dist/blocks/TableBlock.js +17 -0
  48. package/dist/blocks/TaskListBlock.cjs +198 -0
  49. package/dist/blocks/TaskListBlock.js +195 -0
  50. package/dist/blocks/WorkspaceSwitcherBlock.cjs +291 -0
  51. package/dist/blocks/WorkspaceSwitcherBlock.js +288 -0
  52. package/dist/blocks/commerce.cjs +44 -0
  53. package/dist/blocks/commerce.js +35 -0
  54. package/dist/blocks/index.cjs +53 -0
  55. package/dist/blocks/index.js +24 -0
  56. package/dist/blocks.d.cts +1820 -0
  57. package/dist/blocks.d.ts +1820 -0
  58. package/dist/chart.cjs +13 -0
  59. package/dist/chart.d.cts +59 -0
  60. package/dist/chart.d.ts +59 -0
  61. package/dist/chart.js +5 -0
  62. package/dist/components/Accordion/Accordion.cjs +94 -0
  63. package/dist/components/Accordion/Accordion.js +91 -0
  64. package/dist/components/Accordion/index.cjs +8 -0
  65. package/dist/components/Accordion/index.js +1 -0
  66. package/dist/components/ActivityFeed/ActivityContent.cjs +40 -0
  67. package/dist/components/ActivityFeed/ActivityContent.js +37 -0
  68. package/dist/components/ActivityFeed/ActivityItem.cjs +19 -0
  69. package/dist/components/ActivityFeed/ActivityItem.js +16 -0
  70. package/dist/components/ActivityFeed/index.cjs +7 -0
  71. package/dist/components/ActivityFeed/index.js +2 -0
  72. package/dist/components/Alert/Alert.cjs +42 -0
  73. package/dist/components/Alert/Alert.js +39 -0
  74. package/dist/components/Alert/index.cjs +5 -0
  75. package/dist/components/Alert/index.js +1 -0
  76. package/dist/components/Avatar/Avatar.cjs +101 -0
  77. package/dist/components/Avatar/Avatar.js +98 -0
  78. package/dist/components/Avatar/index.cjs +6 -0
  79. package/dist/components/Avatar/index.js +1 -0
  80. package/dist/components/Badge/Badge.cjs +53 -0
  81. package/dist/components/Badge/Badge.js +50 -0
  82. package/dist/components/Badge/index.cjs +5 -0
  83. package/dist/components/Badge/index.js +1 -0
  84. package/dist/components/Banner/Banner.cjs +83 -0
  85. package/dist/components/Banner/Banner.js +80 -0
  86. package/dist/components/Banner/index.cjs +5 -0
  87. package/dist/components/Banner/index.js +1 -0
  88. package/dist/components/Breadcrumb/Breadcrumb.cjs +31 -0
  89. package/dist/components/Breadcrumb/Breadcrumb.js +28 -0
  90. package/dist/components/Breadcrumb/index.cjs +5 -0
  91. package/dist/components/Breadcrumb/index.js +1 -0
  92. package/dist/components/Button/Button.cjs +88 -0
  93. package/dist/components/Button/Button.js +85 -0
  94. package/dist/components/Button/index.cjs +5 -0
  95. package/dist/components/Button/index.js +1 -0
  96. package/dist/components/ButtonGroup/ButtonGroup.cjs +8 -0
  97. package/dist/components/ButtonGroup/ButtonGroup.js +5 -0
  98. package/dist/components/ButtonGroup/ButtonGroupItem.cjs +15 -0
  99. package/dist/components/ButtonGroup/ButtonGroupItem.js +12 -0
  100. package/dist/components/ButtonGroup/index.cjs +7 -0
  101. package/dist/components/ButtonGroup/index.js +2 -0
  102. package/dist/components/Card/Card.cjs +94 -0
  103. package/dist/components/Card/Card.js +91 -0
  104. package/dist/components/Card/index.cjs +9 -0
  105. package/dist/components/Card/index.js +1 -0
  106. package/dist/components/Chart/Chart.cjs +160 -0
  107. package/dist/components/Chart/Chart.js +153 -0
  108. package/dist/components/Chart/index.cjs +10 -0
  109. package/dist/components/Chart/index.js +2 -0
  110. package/dist/components/Chart/theme.cjs +67 -0
  111. package/dist/components/Chart/theme.js +62 -0
  112. package/dist/components/Chip/Chip.cjs +18 -0
  113. package/dist/components/Chip/Chip.js +15 -0
  114. package/dist/components/Chip/index.cjs +5 -0
  115. package/dist/components/Chip/index.js +1 -0
  116. package/dist/components/Counter/Counter.cjs +74 -0
  117. package/dist/components/Counter/Counter.js +71 -0
  118. package/dist/components/Counter/index.cjs +6 -0
  119. package/dist/components/Counter/index.js +1 -0
  120. package/dist/components/DatePicker/DatePicker.cjs +343 -0
  121. package/dist/components/DatePicker/DatePicker.js +340 -0
  122. package/dist/components/DatePicker/index.cjs +5 -0
  123. package/dist/components/DatePicker/index.js +1 -0
  124. package/dist/components/Divider/Divider.cjs +31 -0
  125. package/dist/components/Divider/Divider.js +28 -0
  126. package/dist/components/Divider/index.cjs +5 -0
  127. package/dist/components/Divider/index.js +1 -0
  128. package/dist/components/DropdownMenu/DropdownMenu.cjs +108 -0
  129. package/dist/components/DropdownMenu/DropdownMenu.js +105 -0
  130. package/dist/components/DropdownMenu/index.cjs +11 -0
  131. package/dist/components/DropdownMenu/index.js +1 -0
  132. package/dist/components/EmptyStateIllustration/EmptyStateIllustration.cjs +42 -0
  133. package/dist/components/EmptyStateIllustration/EmptyStateIllustration.js +39 -0
  134. package/dist/components/EmptyStateIllustration/illustrations.cjs +3322 -0
  135. package/dist/components/EmptyStateIllustration/illustrations.js +3319 -0
  136. package/dist/components/EmptyStateIllustration/index.cjs +7 -0
  137. package/dist/components/EmptyStateIllustration/index.js +2 -0
  138. package/dist/components/FileUpload/FileUpload.cjs +116 -0
  139. package/dist/components/FileUpload/FileUpload.js +113 -0
  140. package/dist/components/FileUpload/FileUploadDropZone.cjs +58 -0
  141. package/dist/components/FileUpload/FileUploadDropZone.js +55 -0
  142. package/dist/components/FileUpload/FileUploadIcons.cjs +55 -0
  143. package/dist/components/FileUpload/FileUploadIcons.js +50 -0
  144. package/dist/components/FileUpload/FileUploadItem.cjs +34 -0
  145. package/dist/components/FileUpload/FileUploadItem.js +31 -0
  146. package/dist/components/FileUpload/index.cjs +9 -0
  147. package/dist/components/FileUpload/index.js +3 -0
  148. package/dist/components/FormControl/Checkbox.cjs +27 -0
  149. package/dist/components/FormControl/Checkbox.js +24 -0
  150. package/dist/components/FormControl/Radio.cjs +15 -0
  151. package/dist/components/FormControl/Radio.js +12 -0
  152. package/dist/components/FormControl/Toggle.cjs +15 -0
  153. package/dist/components/FormControl/Toggle.js +12 -0
  154. package/dist/components/FormControl/index.cjs +9 -0
  155. package/dist/components/FormControl/index.js +3 -0
  156. package/dist/components/Icon/Icon.cjs +70 -0
  157. package/dist/components/Icon/Icon.js +34 -0
  158. package/dist/components/Icon/catalog.cjs +1672 -0
  159. package/dist/components/Icon/catalog.js +1669 -0
  160. package/dist/components/Icon/icons.cjs +5621 -0
  161. package/dist/components/Icon/icons.js +5610 -0
  162. package/dist/components/Icon/index.cjs +8 -0
  163. package/dist/components/Icon/index.js +2 -0
  164. package/dist/components/Input/Input.cjs +64 -0
  165. package/dist/components/Input/Input.js +61 -0
  166. package/dist/components/Input/index.cjs +5 -0
  167. package/dist/components/Input/index.js +1 -0
  168. package/dist/components/MetricsCard/MetricsCard.cjs +107 -0
  169. package/dist/components/MetricsCard/MetricsCard.js +104 -0
  170. package/dist/components/MetricsCard/index.cjs +5 -0
  171. package/dist/components/MetricsCard/index.js +1 -0
  172. package/dist/components/Modal/Modal.cjs +126 -0
  173. package/dist/components/Modal/Modal.js +123 -0
  174. package/dist/components/Modal/index.cjs +5 -0
  175. package/dist/components/Modal/index.js +1 -0
  176. package/dist/components/Pagination/Pagination.cjs +42 -0
  177. package/dist/components/Pagination/Pagination.js +39 -0
  178. package/dist/components/Pagination/index.cjs +5 -0
  179. package/dist/components/Pagination/index.js +1 -0
  180. package/dist/components/ProgressBar/ProgressBar.cjs +34 -0
  181. package/dist/components/ProgressBar/ProgressBar.js +31 -0
  182. package/dist/components/ProgressBar/index.cjs +5 -0
  183. package/dist/components/ProgressBar/index.js +1 -0
  184. package/dist/components/ProgressCircle/ProgressCircle.cjs +34 -0
  185. package/dist/components/ProgressCircle/ProgressCircle.js +31 -0
  186. package/dist/components/ProgressCircle/index.cjs +5 -0
  187. package/dist/components/ProgressCircle/index.js +1 -0
  188. package/dist/components/Select/Select.cjs +84 -0
  189. package/dist/components/Select/Select.js +80 -0
  190. package/dist/components/Select/SelectOption.cjs +26 -0
  191. package/dist/components/Select/SelectOption.js +23 -0
  192. package/dist/components/Select/index.cjs +7 -0
  193. package/dist/components/Select/index.js +2 -0
  194. package/dist/components/SidebarMenu/SidebarMenu.cjs +85 -0
  195. package/dist/components/SidebarMenu/SidebarMenu.js +81 -0
  196. package/dist/components/SidebarMenu/SidebarMenuItem.cjs +126 -0
  197. package/dist/components/SidebarMenu/SidebarMenuItem.js +122 -0
  198. package/dist/components/SidebarMenu/SidebarMenuSection.cjs +14 -0
  199. package/dist/components/SidebarMenu/SidebarMenuSection.js +11 -0
  200. package/dist/components/SidebarMenu/index.cjs +12 -0
  201. package/dist/components/SidebarMenu/index.js +4 -0
  202. package/dist/components/Slider/Slider.cjs +161 -0
  203. package/dist/components/Slider/Slider.js +158 -0
  204. package/dist/components/Slider/index.cjs +6 -0
  205. package/dist/components/Slider/index.js +1 -0
  206. package/dist/components/Spinner/Spinner.cjs +93 -0
  207. package/dist/components/Spinner/Spinner.js +90 -0
  208. package/dist/components/Spinner/index.cjs +5 -0
  209. package/dist/components/Spinner/index.js +1 -0
  210. package/dist/components/Stepper/Stepper.cjs +82 -0
  211. package/dist/components/Stepper/Stepper.js +79 -0
  212. package/dist/components/Stepper/index.cjs +7 -0
  213. package/dist/components/Stepper/index.js +1 -0
  214. package/dist/components/Table/Table.cjs +25 -0
  215. package/dist/components/Table/Table.js +22 -0
  216. package/dist/components/Table/index.cjs +10 -0
  217. package/dist/components/Table/index.js +1 -0
  218. package/dist/components/Table/useTableSelection.cjs +60 -0
  219. package/dist/components/Table/useTableSelection.js +57 -0
  220. package/dist/components/Tabs/Tab.cjs +70 -0
  221. package/dist/components/Tabs/Tab.js +67 -0
  222. package/dist/components/Tabs/Tabs.cjs +133 -0
  223. package/dist/components/Tabs/Tabs.js +129 -0
  224. package/dist/components/Tabs/index.cjs +7 -0
  225. package/dist/components/Tabs/index.js +2 -0
  226. package/dist/components/Tooltip/Tooltip.cjs +101 -0
  227. package/dist/components/Tooltip/Tooltip.js +98 -0
  228. package/dist/components/Tooltip/index.cjs +5 -0
  229. package/dist/components/Tooltip/index.js +1 -0
  230. package/dist/context/ThemeContext.cjs +97 -0
  231. package/dist/context/ThemeContext.js +92 -0
  232. package/dist/fonts/README.md +13 -0
  233. package/dist/fonts/hanken-grotesk-cyrillic-ext-italic.woff2 +0 -0
  234. package/dist/fonts/hanken-grotesk-cyrillic-ext-normal.woff2 +0 -0
  235. package/dist/fonts/hanken-grotesk-latin-ext-italic.woff2 +0 -0
  236. package/dist/fonts/hanken-grotesk-latin-ext-normal.woff2 +0 -0
  237. package/dist/fonts/hanken-grotesk-latin-italic.woff2 +0 -0
  238. package/dist/fonts/hanken-grotesk-latin-normal.woff2 +0 -0
  239. package/dist/fonts/hanken-grotesk-vietnamese-italic.woff2 +0 -0
  240. package/dist/fonts/hanken-grotesk-vietnamese-normal.woff2 +0 -0
  241. package/dist/fonts/hankengrotesk-LICENSE.txt +94 -0
  242. package/dist/fonts/manrope-LICENSE.txt +93 -0
  243. package/dist/fonts/manrope-cyrillic-ext-normal.woff2 +0 -0
  244. package/dist/fonts/manrope-cyrillic-normal.woff2 +0 -0
  245. package/dist/fonts/manrope-greek-normal.woff2 +0 -0
  246. package/dist/fonts/manrope-latin-ext-normal.woff2 +0 -0
  247. package/dist/fonts/manrope-latin-normal.woff2 +0 -0
  248. package/dist/fonts/manrope-vietnamese-normal.woff2 +0 -0
  249. package/dist/fonts.css +148 -0
  250. package/dist/hooks/form/index.cjs +11 -0
  251. package/dist/hooks/form/index.js +3 -0
  252. package/dist/hooks/form/useRaydenFormControl.cjs +81 -0
  253. package/dist/hooks/form/useRaydenFormControl.js +76 -0
  254. package/dist/hooks/form/useRaydenInput.cjs +38 -0
  255. package/dist/hooks/form/useRaydenInput.js +35 -0
  256. package/dist/hooks/form/useRaydenSelect.cjs +45 -0
  257. package/dist/hooks/form/useRaydenSelect.js +42 -0
  258. package/dist/hooks/index.cjs +17 -0
  259. package/dist/hooks/index.js +1 -0
  260. package/dist/hooks/useBodyScrollLock.cjs +24 -0
  261. package/dist/hooks/useBodyScrollLock.js +21 -0
  262. package/dist/hooks/useCollisionAwareSide.cjs +72 -0
  263. package/dist/hooks/useCollisionAwareSide.js +69 -0
  264. package/dist/hooks/useControllableValue.cjs +16 -0
  265. package/dist/hooks/useControllableValue.js +13 -0
  266. package/dist/hooks/useDismissableLayer.cjs +100 -0
  267. package/dist/hooks/useDismissableLayer.js +97 -0
  268. package/dist/hooks/usePopupList.cjs +101 -0
  269. package/dist/hooks/usePopupList.js +98 -0
  270. package/dist/icons-8yD7I5jO.d.cts +430 -0
  271. package/dist/icons-8yD7I5jO.d.ts +430 -0
  272. package/dist/icons.cjs +2111 -418
  273. package/dist/icons.d.cts +1256 -429
  274. package/dist/icons.d.ts +1256 -429
  275. package/dist/icons.js +2089 -1
  276. package/dist/index.cjs +128 -15046
  277. package/dist/index.d.cts +697 -662
  278. package/dist/index.d.ts +697 -662
  279. package/dist/index.js +43 -14962
  280. package/dist/motion/Collapse.cjs +28 -0
  281. package/dist/motion/Collapse.js +25 -0
  282. package/dist/motion/MotionProvider.cjs +43 -0
  283. package/dist/motion/MotionProvider.js +38 -0
  284. package/dist/motion/Pressable.cjs +46 -0
  285. package/dist/motion/Pressable.js +43 -0
  286. package/dist/motion/Reveal.cjs +19 -0
  287. package/dist/motion/Reveal.js +16 -0
  288. package/dist/motion/SharedLayout.cjs +46 -0
  289. package/dist/motion/SharedLayout.js +43 -0
  290. package/dist/motion/index.cjs +19 -0
  291. package/dist/motion/index.js +6 -0
  292. package/dist/motion/presence.cjs +58 -0
  293. package/dist/motion/presence.js +55 -0
  294. package/dist/motion/presets.cjs +88 -0
  295. package/dist/motion/presets.js +84 -0
  296. package/dist/motion.d.cts +51 -0
  297. package/dist/motion.d.ts +51 -0
  298. package/dist/preset.cjs +356 -195
  299. package/dist/preset.d.cts +111 -32
  300. package/dist/preset.d.ts +111 -32
  301. package/dist/preset.js +353 -187
  302. package/dist/presets-Ba5QndHg.d.cts +144 -0
  303. package/dist/presets-Ba5QndHg.d.ts +144 -0
  304. package/dist/styles.css +1 -1
  305. package/dist/utils/cn.cjs +38 -0
  306. package/dist/utils/cn.js +35 -0
  307. package/dist/utils/resolveIcon.cjs +18 -0
  308. package/dist/utils/resolveIcon.js +15 -0
  309. package/package.json +79 -21
@@ -0,0 +1,1820 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as react from 'react';
3
+ import { ReactNode, HTMLAttributes, MouseEvent } from 'react';
4
+ import { I as IllustrationName, S as SortDirection } from './Table-DCNSxua1.js';
5
+ import { I as IconName } from './icons-8yD7I5jO.js';
6
+
7
+ type CommerceHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
8
+ interface CommerceImage {
9
+ src: string;
10
+ alt: string;
11
+ }
12
+ interface CommerceProduct {
13
+ id: string;
14
+ name: string;
15
+ description?: string;
16
+ category?: string;
17
+ /** Non-negative integer in the currency's minor unit (pence for GBP, yen for JPY). */
18
+ price: number;
19
+ image?: CommerceImage;
20
+ href?: string;
21
+ badge?: string;
22
+ /** Omit for unlimited availability. Zero means sold out. */
23
+ stock?: number;
24
+ }
25
+ interface CommerceCartItem extends CommerceProduct {
26
+ /** A unique cart-line id, including variant when applicable. */
27
+ id: string;
28
+ quantity: number;
29
+ variant?: string;
30
+ }
31
+ interface CommerceBaseProps {
32
+ title?: string;
33
+ description?: string;
34
+ headingLevel?: CommerceHeadingLevel;
35
+ className?: string;
36
+ /** ISO 4217 currency shared by every price in this block. @default "GBP" */
37
+ currency?: string;
38
+ /** Explicit default keeps server and client formatting consistent. @default "en-GB" */
39
+ locale?: string;
40
+ }
41
+ interface CommerceTotalsProps {
42
+ /** All amounts use the same minor currency unit as item prices. */
43
+ shipping?: number;
44
+ tax?: number;
45
+ discount?: number;
46
+ }
47
+
48
+ interface CheckoutReviewBlockProps extends CommerceBaseProps, CommerceTotalsProps {
49
+ items: CommerceCartItem[];
50
+ /** Display only. Collect and validate the address in the host application. */
51
+ deliveryAddress: string[];
52
+ deliveryMethod: string;
53
+ /** Display only, e.g. "Visa ending in 4242". Never pass full payment credentials. */
54
+ paymentSummary: string;
55
+ onEditDelivery?: () => void;
56
+ onEditPayment?: () => void;
57
+ onEditCart?: () => void;
58
+ onConfirm?: () => void;
59
+ confirmLabel?: string;
60
+ pending?: boolean;
61
+ errorMessage?: string;
62
+ /** Render only after the host application confirms a successful order. */
63
+ confirmation?: {
64
+ title: string;
65
+ description?: string;
66
+ reference?: string;
67
+ };
68
+ terms?: ReactNode;
69
+ totalsNote?: string;
70
+ }
71
+ declare function CheckoutReviewBlock({ title, description, items, deliveryAddress, deliveryMethod, paymentSummary, onEditDelivery, onEditPayment, onEditCart, onConfirm, confirmLabel, pending, errorMessage, confirmation, terms, totalsNote, shipping, tax, discount, currency, locale, ...frame }: CheckoutReviewBlockProps): react_jsx_runtime.JSX.Element;
72
+
73
+ /**
74
+ * Heading element used for the block title. Embedding context varies, so the
75
+ * level is a contract rather than a hard-coded `h3`.
76
+ */
77
+ type CreateAccountHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
78
+ /**
79
+ * Lifecycle reported by the consuming application.
80
+ *
81
+ * - `idle` — the form is ready for input.
82
+ * - `loading` — the app is still fetching the context the form needs
83
+ * (invitation, provider configuration). Fields are not shown yet.
84
+ * - `submitting` — the app is creating the account. Every control that could
85
+ * start a second registration attempt is disabled.
86
+ * - `error` — the app reports a failed attempt. Input is preserved.
87
+ * - `success` — the app has **confirmed** the account exists. The block never
88
+ * sets this itself.
89
+ */
90
+ type CreateAccountStatus = "idle" | "loading" | "submitting" | "error" | "success";
91
+ interface CreateAccountValues {
92
+ firstName: string;
93
+ lastName: string;
94
+ email: string;
95
+ password: string;
96
+ /** True only when the required consent control is checked. */
97
+ consent: boolean;
98
+ }
99
+ type CreateAccountFieldName = "firstName" | "lastName" | "email" | "password" | "confirmPassword" | "consent";
100
+ type CreateAccountFieldErrors = Partial<Record<CreateAccountFieldName, string>>;
101
+ interface CreateAccountPasswordRule {
102
+ id: string;
103
+ /** Shown verbatim in the guidance list. Translate it in the consuming app. */
104
+ label: string;
105
+ test: (password: string) => boolean;
106
+ }
107
+ interface CreateAccountLink {
108
+ label: string;
109
+ href: string;
110
+ }
111
+ interface CreateAccountBlockProps {
112
+ /** Block title. */
113
+ title?: string;
114
+ /** Supporting sentence under the title. */
115
+ description?: string;
116
+ /** Heading element for {@link title}. @default "h2" */
117
+ headingLevel?: CreateAccountHeadingLevel;
118
+ /**
119
+ * Called only when every field passes local validation and no submission is
120
+ * already in flight. Required: the block never renders a submit control with
121
+ * no configured action.
122
+ */
123
+ onSubmit: (values: CreateAccountValues) => void;
124
+ /** Lifecycle owned by the consuming app. @default "idle" */
125
+ status?: CreateAccountStatus;
126
+ /** Message shown when `status` is `"error"`. */
127
+ errorMessage?: string;
128
+ /** Message shown when `status` is `"success"`. */
129
+ successMessage?: string;
130
+ /**
131
+ * Server-reported errors, merged over local validation. They are shown
132
+ * immediately, without waiting for the field to be touched.
133
+ */
134
+ fieldErrors?: CreateAccountFieldErrors;
135
+ /** Initial field contents. The block owns the draft after first render. */
136
+ defaultValues?: Partial<Omit<CreateAccountValues, "consent">>;
137
+ /** Password guidance. Every rule must pass before submission. */
138
+ passwordRules?: CreateAccountPasswordRule[];
139
+ /** Ask the person to type the password twice. @default true */
140
+ requireConfirmPassword?: boolean;
141
+ /**
142
+ * Consent sentence. Links inside it stay independently operable; the whole
143
+ * sentence is the checkbox's accessible name.
144
+ */
145
+ consentLabel?: ReactNode;
146
+ /** Error shown when consent is missing. */
147
+ consentErrorMessage?: string;
148
+ /** Destination for people who already have an account. Rendered as a link. */
149
+ signIn?: CreateAccountLink;
150
+ /** Submit label. @default "Create account" */
151
+ submitLabel?: string;
152
+ /** Label announced while submitting. @default "Creating account…" */
153
+ submittingLabel?: string;
154
+ /**
155
+ * Registration is unavailable (closed, expired invitation, or the viewer
156
+ * lacks permission). Every control is disabled and the reason is shown.
157
+ */
158
+ disabled?: boolean;
159
+ /** Explanation shown when {@link disabled} is true. */
160
+ disabledMessage?: string;
161
+ /** Field labels, so the block can be translated without forking it. */
162
+ labels?: Partial<Record<"firstName" | "lastName" | "email" | "password" | "confirmPassword", string>>;
163
+ className?: string;
164
+ }
165
+ declare const defaultCreateAccountPasswordRules: CreateAccountPasswordRule[];
166
+ declare function CreateAccountBlock({ title, description, headingLevel, onSubmit, status, errorMessage, successMessage, fieldErrors, defaultValues, passwordRules, requireConfirmPassword, consentLabel, consentErrorMessage, signIn, submitLabel, submittingLabel, disabled, disabledMessage, labels, className, }: CreateAccountBlockProps): react_jsx_runtime.JSX.Element;
167
+
168
+ type EmptyStateBlockVariant = "inline" | "card";
169
+ interface EmptyStateBlockAction {
170
+ label: string;
171
+ icon?: ReactNode | IconName;
172
+ onClick?: () => void;
173
+ }
174
+ interface EmptyStateBlockProps {
175
+ /** Which illustration to show */
176
+ illustration: IllustrationName;
177
+ /** Colored or grey/monochrome illustration */
178
+ illustrationColored?: boolean;
179
+ /**
180
+ * Custom color palette for the illustration. This is a customisation surface,
181
+ * not a theme role: values are literal colors and do not follow light/dark
182
+ * mode. Supply mode-appropriate colors yourself, or omit to inherit the
183
+ * flavor's illustration palette.
184
+ */
185
+ illustrationPalette?: string[];
186
+ /** Illustration size in pixels */
187
+ illustrationSize?: number;
188
+ /** Bold title text */
189
+ title: string;
190
+ /** Description text (supports \n for line breaks) */
191
+ description: string;
192
+ /** Optional primary action button */
193
+ action?: EmptyStateBlockAction;
194
+ /** Visual variant: inline (no wrapper) or card (`--color-surface` panel) */
195
+ variant?: EmptyStateBlockVariant;
196
+ /** Additional class names */
197
+ className?: string;
198
+ }
199
+ declare function EmptyStateBlock({ illustration, illustrationColored, illustrationPalette, illustrationSize, title, description, action, variant, className, }: EmptyStateBlockProps): react_jsx_runtime.JSX.Element;
200
+
201
+ type FeatureOverviewHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
202
+ interface FeatureOverviewCtaBase {
203
+ label: string;
204
+ icon?: IconName;
205
+ }
206
+ interface FeatureOverviewLinkCta extends FeatureOverviewCtaBase {
207
+ href: string;
208
+ external?: boolean;
209
+ onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
210
+ }
211
+ interface FeatureOverviewActionCta extends FeatureOverviewCtaBase {
212
+ onClick: () => void;
213
+ href?: never;
214
+ external?: never;
215
+ }
216
+ type FeatureOverviewCta = FeatureOverviewLinkCta | FeatureOverviewActionCta;
217
+ interface FeatureOverviewItem {
218
+ id: string;
219
+ title: ReactNode;
220
+ description?: ReactNode;
221
+ /** Icon rendered in the item's accent tile. */
222
+ icon?: IconName;
223
+ /** Short qualifier, e.g. "Beta" or "Enterprise". */
224
+ badge?: string;
225
+ /**
226
+ * Detail the visitor can follow. Rendered as a native link for a destination
227
+ * and a button for an in-page action. Omitted when not supplied — the block
228
+ * never renders a "Learn more" control that does nothing.
229
+ */
230
+ cta?: FeatureOverviewCta;
231
+ }
232
+ type FeatureOverviewState = "default" | "loading" | "empty" | "error";
233
+ type FeatureOverviewColumns = 2 | 3 | 4;
234
+ type FeatureOverviewVariant = "card" | "plain";
235
+ interface FeatureOverviewEmptyState {
236
+ title: ReactNode;
237
+ description?: ReactNode;
238
+ /** Optional recovery step. Omitted when not supplied. */
239
+ cta?: FeatureOverviewCta;
240
+ }
241
+ interface FeatureOverviewBlockProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
242
+ /** Small label above the section title. Not a heading. */
243
+ eyebrow?: ReactNode;
244
+ /** Section title. */
245
+ title: ReactNode;
246
+ /** Supporting explanation under the title. */
247
+ description?: ReactNode;
248
+ /**
249
+ * Heading element for the section title. Item titles use the next level down.
250
+ * @default "h2"
251
+ */
252
+ headingLevel?: FeatureOverviewHeadingLevel;
253
+ /** Capabilities to scan. */
254
+ features: FeatureOverviewItem[];
255
+ /** Widest column count. Narrow viewports always reduce to one. @default 3 */
256
+ columns?: FeatureOverviewColumns;
257
+ /** `card` draws a bordered surface per item; `plain` is borderless. @default "card" */
258
+ variant?: FeatureOverviewVariant;
259
+ /** Section-level follow-on step rendered under the grid. */
260
+ footerCta?: FeatureOverviewCta;
261
+ /** @default "default" — derived from `features` only when left undefined. */
262
+ state?: FeatureOverviewState;
263
+ /** Number of placeholder items rendered while loading. @default 3 */
264
+ loadingItemCount?: number;
265
+ loadingLabel?: string;
266
+ /** Distinguishes "nothing configured" from "nothing matched" — caller's wording. */
267
+ emptyState?: FeatureOverviewEmptyState;
268
+ errorTitle?: string;
269
+ errorDescription?: ReactNode;
270
+ onRetry?: () => void;
271
+ retryLabel?: string;
272
+ className?: string;
273
+ }
274
+ /**
275
+ * Feature Overview — lets a visitor scan differentiated capabilities and follow
276
+ * the details that matter to them.
277
+ *
278
+ * States: `default`, `loading`, `empty`, `error`. There is no success state:
279
+ * the block submits nothing. When `state` is left undefined it resolves to
280
+ * `empty` for an empty `features` array and `default` otherwise, so an empty
281
+ * source is never silently rendered as a blank grid.
282
+ */
283
+ declare const FeatureOverviewBlock: react.ForwardRefExoticComponent<FeatureOverviewBlockProps & react.RefAttributes<HTMLElement>>;
284
+
285
+ type HeaderBlockVariant = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11;
286
+ interface HeaderBlockLink {
287
+ label: string;
288
+ href?: string;
289
+ onClick?: () => void;
290
+ /** Mark the current destination visually and with aria-current="page". */
291
+ active?: boolean;
292
+ hasDropdown?: boolean;
293
+ /** Show a notification dot next to the label */
294
+ dot?: boolean;
295
+ }
296
+ interface HeaderBlockAction {
297
+ label: string;
298
+ /** Render a normal link for navigation; omit for a callback-driven button. */
299
+ href?: string;
300
+ /** "primary" = solid primary button, "secondary" = secondary styled, "text" = text-only link */
301
+ variant?: "primary" | "secondary" | "text";
302
+ onClick?: () => void;
303
+ }
304
+ interface HeaderBlockAnnouncement {
305
+ text: string;
306
+ linkLabel?: string;
307
+ onLinkClick?: () => void;
308
+ }
309
+ /**
310
+ * Workspace switcher for variants 10 and 11.
311
+ *
312
+ * Controlled and uncontrolled are both supported, and which one applies is decided
313
+ * by whether `activeIndex` is a number:
314
+ *
315
+ * - **Uncontrolled** (`activeIndex` omitted or `undefined`): the header owns the
316
+ * selection. `defaultActiveIndex` seeds it on first render only; changing it
317
+ * afterwards does nothing, as with any React `default*` prop. Clicking a tab moves
318
+ * the selection and then calls `onChange`.
319
+ * - **Controlled** (`activeIndex` is a number): the consumer owns the selection.
320
+ * Clicking a tab does **not** move it; it only calls `onChange`, and the header
321
+ * re-renders when the consumer passes a new `activeIndex`. A controlled switcher
322
+ * with no `onChange` is therefore inert — supply `onChange` whenever you supply
323
+ * `activeIndex`.
324
+ *
325
+ * `onChange` fires only when the index actually changes: clicking the already
326
+ * selected tab is not a change and raises nothing.
327
+ *
328
+ * Both indices are clamped into `0 … tabs.length - 1`, so an out-of-range value
329
+ * selects the nearest tab rather than leaving the group with nothing selected. With
330
+ * an empty `tabs` array the switcher renders nothing.
331
+ *
332
+ * Going from a number to `undefined` on `activeIndex` hands ownership back to the
333
+ * header, which resumes from its own last internal value; do not switch modes
334
+ * mid-life.
335
+ */
336
+ interface HeaderBlockSwitcher {
337
+ /** Visible tab labels, in order. Must be unique. */
338
+ tabs: string[];
339
+ /** Controlled selection. Supply `onChange` with it and update it from there. */
340
+ activeIndex?: number;
341
+ /** Initial selection for uncontrolled use. Read once, on mount. Default `0`. */
342
+ defaultActiveIndex?: number;
343
+ /** Raised with the index the user asked for, in both modes. */
344
+ onChange?: (index: number) => void;
345
+ /** Accessible name for the switcher group. Default `"Workspace"`. */
346
+ label?: string;
347
+ }
348
+ interface HeaderBlockProps {
349
+ /** Visual variant (1-11) */
350
+ variant?: HeaderBlockVariant;
351
+ /** Logo element */
352
+ logo?: ReactNode;
353
+ /** Navigation links (center or left side for centered-logo variants) */
354
+ links?: HeaderBlockLink[];
355
+ /** Right-side navigation links (for centered-logo variants 7, 8 and variant 9) */
356
+ rightLinks?: HeaderBlockLink[];
357
+ /** Action buttons (far right) */
358
+ actions?: HeaderBlockAction[];
359
+ /** Announcement banner (variant 1) */
360
+ announcement?: HeaderBlockAnnouncement;
361
+ /** Search input placeholder (variant 9) */
362
+ searchPlaceholder?: string;
363
+ /** Search handler */
364
+ onSearch?: (query: string) => void;
365
+ /** Switcher tabs (variants 10-11) */
366
+ switcher?: HeaderBlockSwitcher;
367
+ /** Policy / secondary links for variant 11 top row */
368
+ secondaryLinks?: HeaderBlockLink[];
369
+ /** Accessible name for the primary navigation landmark */
370
+ navLabel?: string;
371
+ /** Accessible name for the secondary navigation landmark */
372
+ secondaryNavLabel?: string;
373
+ /** Additional class names */
374
+ className?: string;
375
+ }
376
+ declare function HeaderBlock({ variant, logo, links, rightLinks, actions, announcement, searchPlaceholder, onSearch, switcher, secondaryLinks, navLabel, secondaryNavLabel, className, }: HeaderBlockProps): react_jsx_runtime.JSX.Element;
377
+
378
+ type KpiOverviewHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
379
+ type KpiChangeDirection = "up" | "down" | "flat";
380
+ /**
381
+ * Whether the movement is good, bad, or neither *for this metric*. Direction
382
+ * and sentiment are separate: churn falling is a `down` direction with a
383
+ * `positive` sentiment.
384
+ */
385
+ type KpiChangeSentiment = "positive" | "negative" | "neutral";
386
+ interface KpiChange {
387
+ /** Pre-formatted, e.g. "+12.4%" or "−310". */
388
+ label: string;
389
+ direction: KpiChangeDirection;
390
+ /** @default "neutral" */
391
+ sentiment?: KpiChangeSentiment;
392
+ }
393
+ interface KpiTrend {
394
+ /** One label per point, used for the chart's text equivalent. */
395
+ labels: string[];
396
+ values: number[];
397
+ }
398
+ interface KpiMetric {
399
+ id: string;
400
+ /** What is being counted. */
401
+ label: string;
402
+ /** Pre-formatted by the consuming app, which owns locale and currency. */
403
+ value: string;
404
+ /** The same measure over the comparison period, pre-formatted. */
405
+ comparisonValue?: string;
406
+ change?: KpiChange;
407
+ /** One sentence of plain-language context. */
408
+ description?: string;
409
+ /** Optional sparkline. Rendered with a visually hidden data table. */
410
+ trend?: KpiTrend;
411
+ /**
412
+ * Set when this metric could not be computed. The tile then states why
413
+ * instead of showing a misleading zero.
414
+ */
415
+ unavailableReason?: string;
416
+ icon?: IconName;
417
+ }
418
+ interface KpiPeriod {
419
+ /** The period the values cover, e.g. "1–21 September 2026". */
420
+ label: string;
421
+ /** What they are compared with, e.g. "August 2026". */
422
+ comparisonLabel: string;
423
+ }
424
+ interface KpiPeriodOption {
425
+ id: string;
426
+ label: string;
427
+ }
428
+ type KpiOverviewStatus = "idle" | "loading" | "error";
429
+ interface KpiOverviewBlockProps {
430
+ title?: string;
431
+ description?: string;
432
+ /** Heading element for {@link title}. @default "h2" */
433
+ headingLevel?: KpiOverviewHeadingLevel;
434
+ /** Required: metrics are meaningless without a stated period. */
435
+ period: KpiPeriod;
436
+ metrics: KpiMetric[];
437
+ /**
438
+ * Period choices. The selector renders only when options, a selected id and
439
+ * a change handler are all supplied.
440
+ */
441
+ periodOptions?: KpiPeriodOption[];
442
+ selectedPeriodId?: string;
443
+ onPeriodChange?: (id: string) => void;
444
+ /** Label for the period selector. @default "Reporting period" */
445
+ periodSelectLabel?: string;
446
+ /** @default "idle" */
447
+ status?: KpiOverviewStatus;
448
+ errorMessage?: string;
449
+ /** Retry control renders only when a handler is supplied. */
450
+ onRetry?: () => void;
451
+ /** When supplied, each tile becomes an activating control. */
452
+ onSelectMetric?: (id: string) => void;
453
+ /** Shown when `metrics` is empty. */
454
+ emptyTitle?: string;
455
+ emptyDescription?: string;
456
+ /** Extra content under the grid, e.g. a link to the full report. */
457
+ footer?: ReactNode;
458
+ /** Number of loading placeholders. @default 4 */
459
+ loadingPlaceholderCount?: number;
460
+ className?: string;
461
+ }
462
+ declare function KpiOverviewBlock({ title, description, headingLevel, period, metrics, periodOptions, selectedPeriodId, onPeriodChange, periodSelectLabel, status, errorMessage, onRetry, onSelectMetric, emptyTitle, emptyDescription, footer, loadingPlaceholderCount, className, }: KpiOverviewBlockProps): react_jsx_runtime.JSX.Element;
463
+
464
+ type LoginBlockVariant = "standard" | "card" | "work-email";
465
+ interface LoginBlockSocialProvider {
466
+ name: string;
467
+ icon: ReactNode;
468
+ onClick?: () => void;
469
+ }
470
+ interface LoginBlockProps {
471
+ /** Visual variant */
472
+ variant?: LoginBlockVariant;
473
+ /** Form heading */
474
+ title?: string;
475
+ /** Subtitle / description */
476
+ subtitle?: string;
477
+ /** Submit button label */
478
+ submitLabel?: string;
479
+ /**
480
+ * Password recovery handler. Rendered in every variant that supplies it,
481
+ * independently of `showRememberMe`.
482
+ */
483
+ onForgotPassword?: () => void;
484
+ /** Form submit handler. `rememberMe` reflects the visible checkbox. */
485
+ onSubmit?: (data: {
486
+ email: string;
487
+ password: string;
488
+ rememberMe: boolean;
489
+ }) => void;
490
+ /**
491
+ * Authentication is in flight.
492
+ *
493
+ * While true the block disables every control that could change the
494
+ * credentials being verified, change remembered-session intent, or start a
495
+ * competing authentication route: email, password, remember-me, password
496
+ * recovery, each social provider, submit, and sign-up. Repeat submits are
497
+ * also ignored, so pressing Enter cannot queue a second request.
498
+ *
499
+ * The password visibility toggle stays enabled: it only changes how the
500
+ * already-entered value is displayed.
501
+ */
502
+ pending?: boolean;
503
+ /** Submit label while `pending` is true. */
504
+ pendingLabel?: string;
505
+ /** Error message shown above the submit button, e.g. a rejected sign-in. */
506
+ error?: string;
507
+ /** Social login providers */
508
+ socialProviders?: LoginBlockSocialProvider[];
509
+ /** Sign-up link handler */
510
+ onSignUp?: () => void;
511
+ /** Sign-up prompt text */
512
+ signUpPrompt?: string;
513
+ /** Sign-up link text */
514
+ signUpLabel?: string;
515
+ /** Show remember me checkbox */
516
+ showRememberMe?: boolean;
517
+ /** Label for the remember-me checkbox. Avoid promising a duration the app cannot honour. */
518
+ rememberMeLabel?: string;
519
+ /** Additional class names */
520
+ className?: string;
521
+ }
522
+ declare function LoginBlock({ variant, title, subtitle, submitLabel, onForgotPassword, onSubmit, socialProviders, onSignUp, signUpPrompt, signUpLabel, showRememberMe, rememberMeLabel, pending, pendingLabel, error, className, }: LoginBlockProps): react_jsx_runtime.JSX.Element;
523
+
524
+ interface NotificationItem {
525
+ id: string;
526
+ avatar: ReactNode;
527
+ text: ReactNode;
528
+ date: string;
529
+ time: string;
530
+ unread?: boolean;
531
+ link?: {
532
+ label: string;
533
+ href?: string;
534
+ onClick?: () => void;
535
+ };
536
+ badge?: string;
537
+ content?: {
538
+ type: "file";
539
+ title: string;
540
+ size?: string;
541
+ fileType?: string;
542
+ date?: string;
543
+ } | {
544
+ type: "comment";
545
+ avatar: ReactNode;
546
+ author: string;
547
+ timestamp: string;
548
+ comment: string;
549
+ reactions?: number;
550
+ replies?: number;
551
+ } | {
552
+ type: "cta";
553
+ primaryAction: {
554
+ label: string;
555
+ onClick?: () => void;
556
+ };
557
+ secondaryAction?: {
558
+ label: string;
559
+ onClick?: () => void;
560
+ };
561
+ };
562
+ }
563
+ interface NotificationsBlockProps {
564
+ /** Block title */
565
+ title?: string;
566
+ /** Heading level for the block title, so the block fits a page's outline */
567
+ headingLevel?: 2 | 3 | 4 | 5 | 6;
568
+ /** Unread notification count */
569
+ unreadCount?: number;
570
+ /** Notification items */
571
+ items: NotificationItem[];
572
+ /** Additional class names */
573
+ className?: string;
574
+ }
575
+ declare function NotificationsBlock({ title, headingLevel, unreadCount, items, className, }: NotificationsBlockProps): react_jsx_runtime.JSX.Element;
576
+
577
+ type PricingPlansHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
578
+ interface PricingCtaBase {
579
+ label: string;
580
+ icon?: IconName;
581
+ }
582
+ interface PricingLinkCta extends PricingCtaBase {
583
+ href: string;
584
+ external?: boolean;
585
+ onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
586
+ }
587
+ interface PricingActionCta extends PricingCtaBase {
588
+ onClick: () => void;
589
+ href?: never;
590
+ external?: never;
591
+ }
592
+ type PricingCta = PricingLinkCta | PricingActionCta;
593
+ interface PricingBillingPeriod {
594
+ id: string;
595
+ /** Visible label, e.g. "Monthly". Supplied in the caller's language. */
596
+ label: string;
597
+ /** Optional qualifier shown beside the label, e.g. "Save 20%". */
598
+ badge?: string;
599
+ }
600
+ interface PricingPrice {
601
+ /** Amount in the currency's major unit. Formatted with `locale`. */
602
+ amount?: number;
603
+ /** ISO 4217 code, e.g. "USD". Required alongside `amount`. */
604
+ currency?: string;
605
+ /** Rendered after the amount, e.g. "per editor / month". */
606
+ unit?: ReactNode;
607
+ /** Replaces the amount entirely, e.g. "Custom pricing". Takes precedence. */
608
+ custom?: ReactNode;
609
+ /** Reference amount shown struck through, e.g. the undiscounted price. */
610
+ originalAmount?: number;
611
+ /** Small print under the price, e.g. "billed annually". */
612
+ note?: ReactNode;
613
+ }
614
+ interface PricingFeature {
615
+ id: string;
616
+ label: ReactNode;
617
+ /**
618
+ * Whether the plan includes this feature. Excluded features keep a visible
619
+ * text status as well as an icon, so meaning never rests on colour alone.
620
+ * @default true
621
+ */
622
+ included?: boolean;
623
+ /** Short qualifier, e.g. "add-on". */
624
+ note?: string;
625
+ }
626
+ interface PricingLimit {
627
+ id: string;
628
+ /** e.g. "Included events". */
629
+ label: ReactNode;
630
+ /** e.g. "250,000 / month". Pre-formatted by the caller. */
631
+ value: ReactNode;
632
+ }
633
+ type PricingPlanAvailability = "available" | "current" | "unavailable";
634
+ interface PricingPlan {
635
+ id: string;
636
+ name: ReactNode;
637
+ description?: ReactNode;
638
+ /** Qualifier such as "Most popular". Carries the meaning of `highlighted`. */
639
+ badge?: string;
640
+ /** Adds visual emphasis. Always pair with `badge` so it is not colour-only. */
641
+ highlighted?: boolean;
642
+ /** Price per billing period, keyed by `PricingBillingPeriod.id`. */
643
+ prices: Record<string, PricingPrice>;
644
+ /** Included usage and limits. */
645
+ limits?: PricingLimit[];
646
+ features?: PricingFeature[];
647
+ /**
648
+ * The plan's next step. Required for an `available` plan; omit it for a
649
+ * `current` plan. Without it no control is rendered at all.
650
+ */
651
+ cta?: PricingCta;
652
+ /** @default "available" */
653
+ availability?: PricingPlanAvailability;
654
+ /** Why the plan cannot be chosen. Announced through aria-describedby. */
655
+ unavailableReason?: string;
656
+ /** Replaces the default "Current plan" marker text. */
657
+ currentLabel?: string;
658
+ }
659
+ type PricingPlansState = "default" | "loading" | "empty" | "error";
660
+ interface PricingPlansNotice {
661
+ tone: "success" | "info" | "warning" | "error";
662
+ title: ReactNode;
663
+ description?: ReactNode;
664
+ }
665
+ interface PricingPlansBlockProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
666
+ eyebrow?: ReactNode;
667
+ title: ReactNode;
668
+ description?: ReactNode;
669
+ /** @default "h2" — plan names use the next level down. */
670
+ headingLevel?: PricingPlansHeadingLevel;
671
+ /** Billing periods. Omit or supply one to hide the switcher. */
672
+ periods?: PricingBillingPeriod[];
673
+ /** Controlled selected period id. Pair with `onPeriodChange`. */
674
+ period?: string;
675
+ /** Uncontrolled initial period id. Defaults to the first period. */
676
+ defaultPeriod?: string;
677
+ onPeriodChange?: (periodId: string) => void;
678
+ /** Accessible name for the period switcher. @default "Billing period" */
679
+ periodLegend?: string;
680
+ plans: PricingPlan[];
681
+ /** BCP 47 tag used for currency formatting. @default "en-US" */
682
+ locale?: string;
683
+ /** Merged into the Intl.NumberFormat options used for every price. */
684
+ priceFormatOptions?: Intl.NumberFormatOptions;
685
+ /** Full override of price rendering. */
686
+ formatPrice?: (price: PricingPrice, context: {
687
+ locale: string;
688
+ periodId: string;
689
+ }) => ReactNode;
690
+ /** Heading above each plan's limits list. @default "Included usage" */
691
+ limitsLabel?: string;
692
+ /** Collapse a plan's feature list beyond this count behind a disclosure. */
693
+ featuresVisibleLimit?: number;
694
+ /** Shown when a plan is unavailable and supplies no reason of its own. */
695
+ defaultUnavailableReason?: string;
696
+ /**
697
+ * A consumer-confirmed outcome, e.g. "Your plan change is confirmed". The
698
+ * block never manufactures one: selecting a plan only calls the callback.
699
+ */
700
+ notice?: PricingPlansNotice;
701
+ /** Small print under the grid, e.g. tax treatment. */
702
+ footnote?: ReactNode;
703
+ /** @default "default" — resolves to `empty` for an empty `plans` array. */
704
+ state?: PricingPlansState;
705
+ loadingPlanCount?: number;
706
+ loadingLabel?: string;
707
+ emptyTitle?: ReactNode;
708
+ emptyDescription?: ReactNode;
709
+ errorTitle?: string;
710
+ errorDescription?: ReactNode;
711
+ onRetry?: () => void;
712
+ retryLabel?: string;
713
+ className?: string;
714
+ }
715
+ /**
716
+ * Pricing Plans — compare plans, switch billing period, and understand included
717
+ * usage and limits.
718
+ *
719
+ * States: `default`, `loading`, `empty`, `error`, plus per-plan `available`,
720
+ * `current`, and `unavailable`. Choosing a plan calls `cta.onClick` or follows
721
+ * `cta.href`; the block performs no purchase and never claims one succeeded.
722
+ * Pass `notice` to show an outcome the consuming application has confirmed.
723
+ */
724
+ declare const PricingPlansBlock: react.ForwardRefExoticComponent<PricingPlansBlockProps & react.RefAttributes<HTMLElement>>;
725
+
726
+ interface ProductCollectionBlockProps extends CommerceBaseProps {
727
+ products: CommerceProduct[];
728
+ /** Grid is image-led; list is a compact horizontal catalogue. */
729
+ layout?: "grid" | "list";
730
+ onSelectProduct?: (product: CommerceProduct) => void;
731
+ /** Omit to hide quick-add. Products requiring options should open detail first. */
732
+ onAddToCart?: (product: CommerceProduct) => void;
733
+ pendingProductIds?: string[];
734
+ status?: "ready" | "loading" | "error";
735
+ errorMessage?: string;
736
+ onRetry?: () => void;
737
+ emptyMessage?: string;
738
+ }
739
+ declare function ProductCollectionBlock({ title, description, products, layout, onSelectProduct, onAddToCart, pendingProductIds, status, errorMessage, onRetry, emptyMessage, currency, locale, ...frame }: ProductCollectionBlockProps): react_jsx_runtime.JSX.Element;
740
+
741
+ interface ProductDetailOption {
742
+ id: string;
743
+ label: string;
744
+ /** Additional stock limit for this option. */ stock?: number;
745
+ }
746
+ interface ProductDetailSelection {
747
+ product: CommerceProduct;
748
+ option?: ProductDetailOption;
749
+ quantity: number;
750
+ }
751
+ interface ProductDetailBlockProps extends CommerceBaseProps {
752
+ product: CommerceProduct;
753
+ /** Ordered gallery; falls back to the product image. */
754
+ images?: CommerceImage[];
755
+ /** Stacked is useful for a quick-view panel or a narrow product page. */
756
+ layout?: "split" | "stacked";
757
+ options?: ProductDetailOption[];
758
+ optionLabel?: string;
759
+ details?: {
760
+ label: string;
761
+ value: string;
762
+ }[];
763
+ onAddToCart?: (selection: ProductDetailSelection) => void;
764
+ pending?: boolean;
765
+ errorMessage?: string;
766
+ /** Supplied after the host app confirms the cart update. */
767
+ successMessage?: string;
768
+ deliveryNote?: string;
769
+ }
770
+ /** Reset the selection when switching products. */
771
+ declare function ProductDetailBlock(props: ProductDetailBlockProps): react_jsx_runtime.JSX.Element;
772
+
773
+ type ProductHeroHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
774
+ interface ProductHeroCtaBase {
775
+ label: string;
776
+ /** Optional leading icon. */
777
+ icon?: IconName;
778
+ }
779
+ interface ProductHeroLinkCta extends ProductHeroCtaBase {
780
+ /** Destination. Renders a native anchor. */
781
+ href: string;
782
+ /** Opens in a new tab and adds rel="noreferrer". */
783
+ external?: boolean;
784
+ /** Optional analytics hook. Navigation still belongs to the anchor. */
785
+ onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
786
+ }
787
+ interface ProductHeroActionCta extends ProductHeroCtaBase {
788
+ /** In-page action. Renders a native button. */
789
+ onClick: () => void;
790
+ href?: never;
791
+ external?: never;
792
+ }
793
+ type ProductHeroCta = ProductHeroLinkCta | ProductHeroActionCta;
794
+ interface ProductHeroHighlight {
795
+ id: string;
796
+ /** Short label, e.g. "Uptime" or "Teams onboarded". */
797
+ label: string;
798
+ /** Optional emphasised value, e.g. "99.98%". Pre-formatted by the caller. */
799
+ value?: ReactNode;
800
+ icon?: IconName;
801
+ }
802
+ type ProductHeroMediaRatio = "auto" | "video" | "wide" | "square";
803
+ interface ProductHeroMedia {
804
+ src: string;
805
+ /** Required. Describes the example being shown, not the product. */
806
+ alt: string;
807
+ /**
808
+ * `auto` keeps the image's own proportions so a product screenshot is never
809
+ * cropped. The fixed ratios crop to fill, for art-directed imagery.
810
+ * @default "auto"
811
+ */
812
+ aspectRatio?: ProductHeroMediaRatio;
813
+ width?: number;
814
+ height?: number;
815
+ /** Caption rendered under the media. */
816
+ caption?: ReactNode;
817
+ }
818
+ type ProductHeroState = "default" | "loading" | "error";
819
+ type ProductHeroAlign = "start" | "center";
820
+ interface ProductHeroBlockProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
821
+ /** Small label above the headline. Not a heading. */
822
+ eyebrow?: ReactNode;
823
+ /** Optional badge rendered beside the eyebrow, e.g. a release tag. */
824
+ eyebrowBadge?: string;
825
+ /** The product statement. Required in the default state. */
826
+ headline: ReactNode;
827
+ /** Supporting explanation. */
828
+ description?: ReactNode;
829
+ /**
830
+ * Heading element for the headline. Choose h1 for a page hero and h2 when the
831
+ * page already has an h1. @default "h1"
832
+ */
833
+ headingLevel?: ProductHeroHeadingLevel;
834
+ /** Primary next step. A destination or an action; never both. */
835
+ primaryCta?: ProductHeroCta;
836
+ /** Optional alternative step. */
837
+ secondaryCta?: ProductHeroCta;
838
+ /** Small print under the actions, e.g. "No credit card required". */
839
+ note?: ReactNode;
840
+ /** Scannable proof points rendered as a list. */
841
+ highlights?: ProductHeroHighlight[];
842
+ /** A relevant example image. */
843
+ media?: ProductHeroMedia;
844
+ /**
845
+ * Arbitrary example content (a live demo, a video embed). Takes precedence
846
+ * over `media`.
847
+ */
848
+ mediaSlot?: ReactNode;
849
+ /**
850
+ * Replaces the media when the image fails or `media.src` is empty. A neutral
851
+ * labelled placeholder is used when this is omitted.
852
+ */
853
+ mediaFallback?: ReactNode;
854
+ /** Text-only alignment when there is no media. @default "start" */
855
+ align?: ProductHeroAlign;
856
+ /** @default "default" */
857
+ state?: ProductHeroState;
858
+ /** Announced while `state="loading"`. */
859
+ loadingLabel?: string;
860
+ /** Shown while `state="error"`. */
861
+ errorTitle?: string;
862
+ errorDescription?: ReactNode;
863
+ /** Retry control. Omitted entirely when no handler is supplied. */
864
+ onRetry?: () => void;
865
+ retryLabel?: string;
866
+ className?: string;
867
+ }
868
+ /**
869
+ * Product Hero — explains the product, shows a relevant example, and leads to a
870
+ * primary next step.
871
+ *
872
+ * States: `default`, `loading`, `error`. An "empty" state is not meaningful (a
873
+ * hero without a headline is not a hero); missing media degrades to a labelled
874
+ * placeholder instead. No success state is manufactured — the block performs no
875
+ * submission.
876
+ */
877
+ declare const ProductHeroBlock: react.ForwardRefExoticComponent<ProductHeroBlockProps & react.RefAttributes<HTMLElement>>;
878
+
879
+ type ProfileSettingsHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
880
+ /**
881
+ * Lifecycle reported by the consuming application.
882
+ *
883
+ * - `idle` — editable, nothing in flight.
884
+ * - `loading` — the profile is still being read. Fields are not shown yet.
885
+ * - `saving` — a save is in flight. Every field and both footer actions are
886
+ * disabled so a second save cannot start.
887
+ * - `error` — the save failed. The draft is preserved so nothing is retyped.
888
+ * - `success` — the app has **confirmed** the save. The block never sets this.
889
+ */
890
+ type ProfileSettingsStatus = "idle" | "loading" | "saving" | "error" | "success";
891
+ interface ProfileSettingsValues {
892
+ firstName: string;
893
+ lastName: string;
894
+ email: string;
895
+ jobTitle: string;
896
+ timeZone: string;
897
+ bio: string;
898
+ }
899
+ type ProfileSettingsFieldName = keyof ProfileSettingsValues;
900
+ type ProfileSettingsFieldErrors = Partial<Record<ProfileSettingsFieldName, string>>;
901
+ interface ProfileSettingsAvatar {
902
+ src?: string;
903
+ /** Fallback when `src` is missing or fails to load. */
904
+ initials?: string;
905
+ /** Describes the person, not the act of having a photo. */
906
+ alt?: string;
907
+ }
908
+ interface ProfileSettingsTimeZoneOption {
909
+ value: string;
910
+ label: string;
911
+ }
912
+ interface ProfileSettingsBlockProps {
913
+ title?: string;
914
+ description?: string;
915
+ /** Heading element for {@link title}. @default "h2" */
916
+ headingLevel?: ProfileSettingsHeadingLevel;
917
+ /**
918
+ * The **saved** profile. Unsaved-change tracking compares the working draft
919
+ * against this value, so the block resets its draft whenever the app reports
920
+ * new saved values.
921
+ */
922
+ value: ProfileSettingsValues;
923
+ /** Required: the Save control is never rendered without an action. */
924
+ onSave: (values: ProfileSettingsValues) => void;
925
+ /** Called after the draft is reset to {@link value}. */
926
+ onCancel?: () => void;
927
+ /** Fires whenever the unsaved-change state flips. */
928
+ onDirtyChange?: (dirty: boolean) => void;
929
+ /** Lifecycle owned by the consuming app. @default "idle" */
930
+ status?: ProfileSettingsStatus;
931
+ errorMessage?: string;
932
+ successMessage?: string;
933
+ /** Server-reported errors, shown immediately. */
934
+ fieldErrors?: ProfileSettingsFieldErrors;
935
+ /**
936
+ * Permission-aware editing. When false every field is read-only, the footer
937
+ * actions are omitted, and {@link readOnlyMessage} explains why.
938
+ * @default true
939
+ */
940
+ canEdit?: boolean;
941
+ readOnlyMessage?: string;
942
+ /**
943
+ * Individual fields the viewer may read but not change, e.g. an email
944
+ * address owned by a directory. Each one gets a visible explanation.
945
+ */
946
+ readOnlyFields?: ProfileSettingsFieldName[];
947
+ /** Explanations keyed by field, shown under a field in {@link readOnlyFields}. */
948
+ readOnlyFieldMessages?: Partial<Record<ProfileSettingsFieldName, string>>;
949
+ avatar?: ProfileSettingsAvatar;
950
+ /**
951
+ * Receives the chosen image. The consuming app owns the upload and must
952
+ * report the result back through {@link avatar} and {@link avatarStatus}.
953
+ * When omitted, no upload control is rendered.
954
+ */
955
+ onAvatarChange?: (file: File) => void;
956
+ /** When omitted, no remove control is rendered. */
957
+ onAvatarRemove?: () => void;
958
+ /** Truthful upload state, owned by the app. @default "idle" */
959
+ avatarStatus?: "idle" | "uploading" | "error";
960
+ avatarErrorMessage?: string;
961
+ /** Replaces the built-in avatar control, e.g. with a `FileUpload`. */
962
+ avatarSlot?: ReactNode;
963
+ /** Accepted image types for the built-in control. @default "image/png,image/jpeg,image/webp" */
964
+ avatarAccept?: string;
965
+ timeZones?: ProfileSettingsTimeZoneOption[];
966
+ /** Maximum bio length. A live counter is shown. @default 280 */
967
+ bioMaxLength?: number;
968
+ labels?: Partial<Record<ProfileSettingsFieldName, string>>;
969
+ saveLabel?: string;
970
+ cancelLabel?: string;
971
+ className?: string;
972
+ }
973
+ declare const defaultProfileTimeZones: ProfileSettingsTimeZoneOption[];
974
+ declare function ProfileSettingsBlock({ title, description, headingLevel, value, onSave, onCancel, onDirtyChange, status, errorMessage, successMessage, fieldErrors, canEdit, readOnlyMessage, readOnlyFields, readOnlyFieldMessages, avatar, onAvatarChange, onAvatarRemove, avatarStatus, avatarErrorMessage, avatarSlot, avatarAccept, timeZones, bioMaxLength, labels, saveLabel, cancelLabel, className, }: ProfileSettingsBlockProps): react_jsx_runtime.JSX.Element;
975
+
976
+ interface QuickSendBeneficiary {
977
+ id: string;
978
+ name: string;
979
+ handle: string;
980
+ avatar?: ReactNode;
981
+ initials?: string;
982
+ }
983
+ interface QuickSendBlockProps {
984
+ /** Block title */
985
+ title?: string;
986
+ /** "See all" link label */
987
+ seeAllLabel?: string;
988
+ /** "See all" click handler */
989
+ onSeeAll?: () => void;
990
+ /** Beneficiary list */
991
+ beneficiaries: QuickSendBeneficiary[];
992
+ /** Beneficiary click handler */
993
+ onSelect?: (id: string) => void;
994
+ /** Additional class names */
995
+ className?: string;
996
+ }
997
+ declare function QuickSendBlock({ title, seeAllLabel, onSeeAll, beneficiaries, onSelect, className, }: QuickSendBlockProps): react_jsx_runtime.JSX.Element;
998
+
999
+ type TransactionDirection = "incoming" | "outgoing";
1000
+ interface Transaction {
1001
+ id: string;
1002
+ /** "to" or "from" label */
1003
+ direction: TransactionDirection;
1004
+ /** Recipient or sender name */
1005
+ name: string;
1006
+ /** Transaction category */
1007
+ category: string;
1008
+ /** Amount string (e.g., "$11,000.00") */
1009
+ amount: string;
1010
+ }
1011
+ interface RecentTransactionsBlockProps {
1012
+ /** Block title */
1013
+ title?: string;
1014
+ /** "See all" link label */
1015
+ seeAllLabel?: string;
1016
+ /** "See all" click handler */
1017
+ onSeeAll?: () => void;
1018
+ /** Transaction list */
1019
+ transactions: Transaction[];
1020
+ /** Transaction click handler */
1021
+ onTransactionClick?: (id: string) => void;
1022
+ /** Additional class names */
1023
+ className?: string;
1024
+ }
1025
+ declare function RecentTransactionsBlock({ title, seeAllLabel, onSeeAll, transactions, onTransactionClick, className, }: RecentTransactionsBlockProps): react_jsx_runtime.JSX.Element;
1026
+
1027
+ interface SearchableTableColumn {
1028
+ /** Unique column key — used to look up row values */
1029
+ key: string;
1030
+ /** Column header label */
1031
+ label: string;
1032
+ /** Enable sorting on this column */
1033
+ sortable?: boolean;
1034
+ /** Fixed column width (CSS string, e.g. "300px") */
1035
+ width?: string;
1036
+ /** Custom cell renderer; receives the cell value and full row */
1037
+ render?: (value: unknown, row: Record<string, unknown>) => ReactNode;
1038
+ }
1039
+ type SearchableTableRow = Record<string, unknown> & {
1040
+ id: string;
1041
+ };
1042
+ interface SearchableTableBlockProps {
1043
+ /** When set, renders a title + icon toolbar. When absent, renders a search input toolbar. */
1044
+ title?: string;
1045
+ /** Column definitions */
1046
+ columns: SearchableTableColumn[];
1047
+ /** Row data — each must have an `id` field */
1048
+ rows: SearchableTableRow[];
1049
+ /** Search input placeholder */
1050
+ searchPlaceholder?: string;
1051
+ /**
1052
+ * Called when the search value changes. Supplying this puts search under your
1053
+ * control: the block stops filtering `rows` itself and renders exactly what you
1054
+ * pass. Omit it and the block filters `rows` locally.
1055
+ */
1056
+ onSearch?: (query: string) => void;
1057
+ /**
1058
+ * Called when a sortable header is activated. Supplying this puts ordering under
1059
+ * your control: the block only renders the indicator and expects you to reorder
1060
+ * `rows`. Omit it and the block sorts `rows` locally.
1061
+ */
1062
+ onSort?: (key: string, direction: SortDirection) => void;
1063
+ /** Title-variant toolbar: search action. The button renders only when supplied. */
1064
+ onSearchClick?: () => void;
1065
+ /** Title-variant toolbar: sort action. The button renders only when supplied. */
1066
+ onSortClick?: () => void;
1067
+ /**
1068
+ * Hide the filter button. It appears whenever `onFilter` is supplied; setting this
1069
+ * `true` without a handler does not bring it back, because the block does not render a
1070
+ * control that has nowhere to go.
1071
+ */
1072
+ showFilter?: boolean;
1073
+ /** Filter click handler. Required for the filter button to appear. */
1074
+ onFilter?: () => void;
1075
+ /**
1076
+ * Hide the date selector. It appears whenever `onDateSelect` is supplied; setting this
1077
+ * `true` without a handler does not bring it back.
1078
+ */
1079
+ showDateSelector?: boolean;
1080
+ /** Date selector click handler. Required for the date selector to appear. */
1081
+ onDateSelect?: () => void;
1082
+ /** Enable row selection checkboxes */
1083
+ selectable?: boolean;
1084
+ /**
1085
+ * Controlled selection. Supply it to own selection yourself — the only way to keep a
1086
+ * selection across pages, or across a filter you apply outside the block, since the
1087
+ * block otherwise drops ids that leave `rows`. See `useTableSelection`.
1088
+ */
1089
+ selectedIds?: string[];
1090
+ /** Fired on user interaction with the full resulting selection. */
1091
+ onSelectionChange?: (ids: string[]) => void;
1092
+ /** Row kebab menu action handler */
1093
+ onRowAction?: (rowId: string) => void;
1094
+ /** Current page (1-indexed) */
1095
+ page?: number;
1096
+ /** Total pages */
1097
+ totalPages?: number;
1098
+ /** Page change handler */
1099
+ onPageChange?: (page: number) => void;
1100
+ /** Additional class names */
1101
+ className?: string;
1102
+ }
1103
+ declare function SearchableTableBlock({ title, columns, rows, searchPlaceholder, onSearch, onSort, onSearchClick, onSortClick, showFilter, onFilter, showDateSelector, onDateSelect, selectable, selectedIds, onSelectionChange, onRowAction, page, totalPages, onPageChange, className, }: SearchableTableBlockProps): react_jsx_runtime.JSX.Element;
1104
+
1105
+ interface ShoppingCartBlockProps extends CommerceBaseProps, CommerceTotalsProps {
1106
+ items: CommerceCartItem[];
1107
+ /** Stacked keeps the summary below the items, including in a drawer. */
1108
+ layout?: "split" | "stacked";
1109
+ onQuantityChange?: (id: string, quantity: number) => void;
1110
+ onRemoveItem?: (id: string) => void;
1111
+ onCheckout?: () => void;
1112
+ onContinueShopping?: () => void;
1113
+ pending?: boolean;
1114
+ errorMessage?: string;
1115
+ /** Clarifies whether shipping and tax are estimates or final. */
1116
+ totalsNote?: string;
1117
+ }
1118
+ declare function ShoppingCartBlock({ title, description, items, layout, onQuantityChange, onRemoveItem, onCheckout, onContinueShopping, pending, errorMessage, totalsNote, shipping, tax, discount, currency, locale, ...frame }: ShoppingCartBlockProps): react_jsx_runtime.JSX.Element;
1119
+
1120
+ type SiteFooterHeadingLevel = "h2" | "h3" | "h4" | "h5" | "h6";
1121
+ interface SiteFooterLink {
1122
+ id: string;
1123
+ label: string;
1124
+ /** Destination. Footer entries are destinations, so they are always links. */
1125
+ href: string;
1126
+ /** Opens in a new tab and adds rel="noreferrer" plus a visually hidden note. */
1127
+ external?: boolean;
1128
+ /** Short qualifier, e.g. "New". */
1129
+ badge?: string;
1130
+ /** Optional analytics hook. Navigation still belongs to the anchor. */
1131
+ onClick?: (event: MouseEvent<HTMLAnchorElement>) => void;
1132
+ }
1133
+ interface SiteFooterLinkGroup {
1134
+ id: string;
1135
+ /** Group heading, e.g. "Product". */
1136
+ title: string;
1137
+ links: SiteFooterLink[];
1138
+ }
1139
+ interface SiteFooterSocialLink {
1140
+ id: string;
1141
+ /** Accessible name, e.g. "Citrionus on LinkedIn". */
1142
+ label: string;
1143
+ href: string;
1144
+ /** Library icon. Ignored when `artwork` is supplied. */
1145
+ icon?: IconName;
1146
+ /**
1147
+ * Authentic platform artwork. Brand marks are deliberately exempt from theme
1148
+ * roles, so they are supplied by the consumer rather than recoloured here.
1149
+ */
1150
+ artwork?: ReactNode;
1151
+ /** @default true */
1152
+ external?: boolean;
1153
+ }
1154
+ interface SiteFooterLocaleOption {
1155
+ value: string;
1156
+ label: string;
1157
+ }
1158
+ interface SiteFooterLocaleControl {
1159
+ id: string;
1160
+ /** Visible label, e.g. "Language". */
1161
+ label: string;
1162
+ /** Current value. The consuming application owns persistence. */
1163
+ value: string;
1164
+ options: SiteFooterLocaleOption[];
1165
+ /** Required: a control with no configured handler is never rendered. */
1166
+ onChange: (value: string) => void;
1167
+ /** Small print under the control. */
1168
+ hint?: string;
1169
+ }
1170
+ interface SiteFooterBrand {
1171
+ /** Logo element. Supplied by the consumer so brand artwork stays authentic. */
1172
+ logo?: ReactNode;
1173
+ /** Wordmark text. Rendered when `logo` is absent. */
1174
+ name?: ReactNode;
1175
+ description?: ReactNode;
1176
+ /** Makes the logo/wordmark a link to the site root. */
1177
+ href?: string;
1178
+ }
1179
+ interface SiteFooterBlockProps extends Omit<HTMLAttributes<HTMLElement>, "title"> {
1180
+ /**
1181
+ * Accessible name for the `contentinfo` landmark. Distinguishes this footer
1182
+ * from any other on the page. @default "Site footer"
1183
+ */
1184
+ label?: string;
1185
+ brand?: SiteFooterBrand;
1186
+ /** Grouped destinations. Each group becomes a named navigation landmark. */
1187
+ groups?: SiteFooterLinkGroup[];
1188
+ /** @default "h2" — used for every group heading. */
1189
+ groupHeadingLevel?: SiteFooterHeadingLevel;
1190
+ social?: SiteFooterSocialLink[];
1191
+ /** Accessible name for the social link list. @default "Social media" */
1192
+ socialLabel?: string;
1193
+ /** Copyright or company registration text. */
1194
+ copyright?: ReactNode;
1195
+ /** Privacy, terms, and similar destinations. */
1196
+ legalLinks?: SiteFooterLink[];
1197
+ /** Accessible name for the legal link list. @default "Legal" */
1198
+ legalLabel?: string;
1199
+ /** Language, region, or currency switchers. */
1200
+ localeControls?: SiteFooterLocaleControl[];
1201
+ /** Extra content above the bottom bar, e.g. a compliance statement. */
1202
+ children?: ReactNode;
1203
+ className?: string;
1204
+ }
1205
+ /**
1206
+ * Site Footer — browse grouped site links, legal information, social
1207
+ * destinations, and locale controls.
1208
+ *
1209
+ * Only a default state is meaningful: the footer presents destinations the
1210
+ * consuming application already knows. There is nothing to load, submit, or
1211
+ * confirm, so no loading, error, or success state is offered. Every section is
1212
+ * optional; omitting one removes it rather than rendering an empty shell. A
1213
+ * locale control requires an `onChange` handler, so the footer can never render
1214
+ * a switcher that does nothing.
1215
+ */
1216
+ declare const SiteFooterBlock: react.ForwardRefExoticComponent<SiteFooterBlockProps & react.RefAttributes<HTMLElement>>;
1217
+
1218
+ interface TableBlockRow {
1219
+ id: string;
1220
+ name: string;
1221
+ email: string;
1222
+ initials: string;
1223
+ amount: string;
1224
+ paymentType: string;
1225
+ date: string;
1226
+ time: string;
1227
+ status: string;
1228
+ statusColor?: "success" | "warning" | "error" | "orange" | "blue" | "neutral";
1229
+ }
1230
+ interface TableBlockProps {
1231
+ /** Table rows */
1232
+ rows: TableBlockRow[];
1233
+ /**
1234
+ * Controlled selection. Supply it to own selection yourself — the only way to keep a
1235
+ * selection across pages, since the block otherwise drops ids that leave `rows`.
1236
+ * See the reconciliation contract on `useTableSelection`.
1237
+ */
1238
+ selectedIds?: string[];
1239
+ /** Fired on user interaction with the full resulting selection. */
1240
+ onSelectionChange?: (ids: string[]) => void;
1241
+ /**
1242
+ * Row action handler (kebab menu). The actions column renders only when supplied —
1243
+ * the block does not show a control that has nowhere to go.
1244
+ */
1245
+ onRowAction?: (rowId: string) => void;
1246
+ /** Current page (1-indexed). Pagination needs `page`, `totalPages` and `onPageChange` together. */
1247
+ page?: number;
1248
+ /** Total pages. Pagination needs `page`, `totalPages` and `onPageChange` together. */
1249
+ totalPages?: number;
1250
+ /** Page change handler. Pagination needs `page`, `totalPages` and `onPageChange` together. */
1251
+ onPageChange?: (page: number) => void;
1252
+ /** Additional class names */
1253
+ className?: string;
1254
+ }
1255
+ declare function TableBlock({ rows, selectedIds, onSelectionChange, onRowAction, page, totalPages, onPageChange, className, }: TableBlockProps): react_jsx_runtime.JSX.Element;
1256
+
1257
+ type TaskListHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
1258
+ interface TaskListAssignee {
1259
+ id: string;
1260
+ name: string;
1261
+ avatarSrc?: string;
1262
+ initials?: string;
1263
+ }
1264
+ interface TaskListTask {
1265
+ id: string;
1266
+ title: string;
1267
+ completed: boolean;
1268
+ /** Assignee id. Resolved against {@link TaskListBlockProps.assignees}. */
1269
+ assigneeId?: string;
1270
+ /** Calendar date as `YYYY-MM-DD`. Parsed in local time, never UTC-shifted. */
1271
+ dueDate?: string;
1272
+ /** One line of supporting context shown under the title. */
1273
+ note?: string;
1274
+ }
1275
+ type TaskListStatusFilter = "all" | "active" | "completed";
1276
+ type TaskListStatus = "idle" | "loading" | "error";
1277
+ type TaskListAddStatus = "idle" | "submitting" | "error";
1278
+ interface TaskListAddInput {
1279
+ title: string;
1280
+ assigneeId?: string;
1281
+ dueDate?: string;
1282
+ }
1283
+ /** Everything needed to phrase a due date in the consumer's own words. */
1284
+ interface TaskListDueContext {
1285
+ /** Whole days from today. Negative means overdue. */
1286
+ daysFromToday: number;
1287
+ date: Date;
1288
+ completed: boolean;
1289
+ }
1290
+ interface TaskListBlockProps {
1291
+ title?: string;
1292
+ description?: string;
1293
+ /** Heading element for {@link title}. @default "h2" */
1294
+ headingLevel?: TaskListHeadingLevel;
1295
+ /** The complete task set for the current page. */
1296
+ tasks: TaskListTask[];
1297
+ /** Required: a completion control is never rendered without an action. */
1298
+ onToggleComplete: (id: string, completed: boolean) => void;
1299
+ /** When omitted, the add form is not rendered. */
1300
+ onAddTask?: (input: TaskListAddInput) => void;
1301
+ /** When omitted, no delete control is rendered. */
1302
+ onDeleteTask?: (id: string) => void;
1303
+ /** When omitted, the assignee is shown but cannot be changed. */
1304
+ onAssignTask?: (id: string, assigneeId: string) => void;
1305
+ /** People tasks can be assigned to. Also drives the assignee filter. */
1306
+ assignees?: TaskListAssignee[];
1307
+ /** Controlled selection. Selection controls render only with a handler. */
1308
+ selectedIds?: string[];
1309
+ onSelectionChange?: (ids: string[]) => void;
1310
+ /** Bulk controls render only when their handler is supplied. */
1311
+ onBulkComplete?: (ids: string[]) => void;
1312
+ onBulkDelete?: (ids: string[]) => void;
1313
+ /** @default "idle" */
1314
+ status?: TaskListStatus;
1315
+ errorMessage?: string;
1316
+ onRetry?: () => void;
1317
+ /** @default "idle" */
1318
+ addStatus?: TaskListAddStatus;
1319
+ addErrorMessage?: string;
1320
+ /**
1321
+ * Permission-aware editing. When false, completion controls are disabled and
1322
+ * the add, delete, assign and bulk controls are not rendered.
1323
+ * @default true
1324
+ */
1325
+ canEdit?: boolean;
1326
+ readOnlyMessage?: string;
1327
+ /** Reference date for due-date context. Pass it to make output deterministic. */
1328
+ today?: Date;
1329
+ /** BCP-47 tag used to format absolute dates. @default "en-GB" */
1330
+ locale?: string;
1331
+ /** Replaces the built-in due-date phrasing. */
1332
+ formatDueDate?: (isoDate: string, context: TaskListDueContext) => string;
1333
+ /** Shown when there are no tasks at all. */
1334
+ emptyTitle?: string;
1335
+ emptyDescription?: string;
1336
+ /** Shown when tasks exist but none match the current filters. */
1337
+ noMatchesTitle?: string;
1338
+ noMatchesDescription?: string;
1339
+ /** Extra content below the list. */
1340
+ footer?: ReactNode;
1341
+ className?: string;
1342
+ }
1343
+ declare function TaskListBlock({ title, description, headingLevel, tasks, onToggleComplete, onAddTask, onDeleteTask, onAssignTask, assignees, selectedIds, onSelectionChange, onBulkComplete, onBulkDelete, status, errorMessage, onRetry, addStatus, addErrorMessage, canEdit, readOnlyMessage, today, locale, formatDueDate, emptyTitle, emptyDescription, noMatchesTitle, noMatchesDescription, footer, className, }: TaskListBlockProps): react_jsx_runtime.JSX.Element;
1344
+
1345
+ type AppShellHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
1346
+ /**
1347
+ * How wide the shell's own container must be before the sidebar is shown
1348
+ * beside the workspace instead of inside the collapsed navigation panel.
1349
+ *
1350
+ * The values are container widths, not viewport widths: a shell dropped into
1351
+ * a 400px column collapses there even on a 1440px screen. Tailwind needs the
1352
+ * whole `@min-[…]` class to exist as a literal string, so the tiers are a
1353
+ * fixed set rather than a free number.
1354
+ */
1355
+ type AppShellExpandTier = "sm" | "md" | "lg";
1356
+ interface AppShellNavItemBase {
1357
+ id: string;
1358
+ label: string;
1359
+ icon?: IconName;
1360
+ /** Short supporting line under the label. Omitted in the compact sidebar. */
1361
+ description?: string;
1362
+ /** Short visible count or tag, e.g. "12". */
1363
+ badge?: string;
1364
+ /** Spoken replacement for {@link badge}, e.g. "12 unread messages". */
1365
+ badgeDescription?: string;
1366
+ /** Marks the destination the workspace is currently showing. */
1367
+ current?: boolean;
1368
+ }
1369
+ /**
1370
+ * A destination is an anchor, an action is a button, and an item the viewer may
1371
+ * not open is a disabled button with a visible reason. There is no fourth arm,
1372
+ * so a navigation item with nothing to do cannot be expressed.
1373
+ */
1374
+ type AppShellNavItem = (AppShellNavItemBase & {
1375
+ href: string;
1376
+ external?: boolean;
1377
+ onClick?: () => void;
1378
+ }) | (AppShellNavItemBase & {
1379
+ onClick: () => void;
1380
+ href?: undefined;
1381
+ }) | (AppShellNavItemBase & {
1382
+ /** Why this destination is unavailable to the current viewer. */
1383
+ unavailableReason: string;
1384
+ href?: undefined;
1385
+ onClick?: undefined;
1386
+ });
1387
+ interface AppShellNavSection {
1388
+ id: string;
1389
+ /** Rendered as a heading at {@link ApplicationShellBlockProps.sectionHeadingLevel}. */
1390
+ label?: string;
1391
+ items: AppShellNavItem[];
1392
+ }
1393
+ interface AppShellActionBase {
1394
+ id: string;
1395
+ label: string;
1396
+ /** With an icon the control is icon-only and named by {@link label}. */
1397
+ icon?: IconName;
1398
+ badge?: string;
1399
+ badgeDescription?: string;
1400
+ }
1401
+ type AppShellAction = (AppShellActionBase & {
1402
+ href: string;
1403
+ external?: boolean;
1404
+ onClick?: () => void;
1405
+ }) | (AppShellActionBase & {
1406
+ onClick: () => void;
1407
+ href?: undefined;
1408
+ });
1409
+ type AppShellNavStatus = "idle" | "loading" | "error";
1410
+ /** Who owns the vertical scrollbar. See {@link ApplicationShellBlockProps.mainScroll}. */
1411
+ type AppShellMainScroll = "page" | "region";
1412
+ interface ApplicationShellBlockProps {
1413
+ /** Wordmark or logo. Rendered in the sidebar when expanded, in the top bar when collapsed. */
1414
+ brand?: ReactNode;
1415
+ /** Destination behind the brand. Without it the brand is not a control. */
1416
+ brandHref?: string;
1417
+ onBrandClick?: () => void;
1418
+ navSections?: AppShellNavSection[];
1419
+ /** Accessible name for the primary navigation landmark. @default "Main" */
1420
+ navLabel?: string;
1421
+ /** Heading element for section labels. @default "h2" */
1422
+ sectionHeadingLevel?: AppShellHeadingLevel;
1423
+ /** @default "idle" */
1424
+ navStatus?: AppShellNavStatus;
1425
+ navErrorMessage?: string;
1426
+ /** The retry control is omitted entirely when no handler is supplied. */
1427
+ onRetryNav?: () => void;
1428
+ navLoadingMessage?: string;
1429
+ /**
1430
+ * Shown when `navSections` carries no items and the status is idle. It has
1431
+ * no default: without it a shell with no destinations renders no navigation
1432
+ * rail at all, rather than an empty one. Supply it to state why the rail is
1433
+ * empty instead of leaving the reader to guess.
1434
+ */
1435
+ navEmptyMessage?: string;
1436
+ /**
1437
+ * Search field. A single instance lives in the top bar at every width; on a
1438
+ * narrow shell it wraps onto its own row rather than disappearing.
1439
+ */
1440
+ search?: ReactNode;
1441
+ /**
1442
+ * Workspace switcher. A single instance, in the top bar at every width, so it
1443
+ * is never dropped from the collapsed arrangement.
1444
+ */
1445
+ switcher?: ReactNode;
1446
+ /** Trailing top-bar controls, e.g. notifications or help. */
1447
+ actions?: AppShellAction[];
1448
+ /** Accessible name for the trailing control group. @default "Account and tools" */
1449
+ actionsLabel?: string;
1450
+ /**
1451
+ * Content under the navigation. Rendered in both the sidebar and the
1452
+ * collapsed panel, so keep it stateless or controlled by the consumer.
1453
+ */
1454
+ sidebarFooter?: ReactNode;
1455
+ /** Label for the collapsed navigation toggle when closed. @default "Open navigation" */
1456
+ openMenuLabel?: string;
1457
+ /** Label for the collapsed navigation toggle when open. @default "Close navigation" */
1458
+ closeMenuLabel?: string;
1459
+ /** @default "Skip to main content" */
1460
+ skipLinkLabel?: string;
1461
+ /** Accessible name for the landmark holding the skip link. @default "Skip links" */
1462
+ skipNavLabel?: string;
1463
+ /**
1464
+ * Which container width the sidebar appears at. Read from the shell's own
1465
+ * width, never the viewport. @default "md"
1466
+ */
1467
+ expandAt?: AppShellExpandTier;
1468
+ /**
1469
+ * `"page"` (default) lets the document scroll, so the shell has exactly one
1470
+ * scroll region and an overlay above it cannot fight a second one. `"region"`
1471
+ * gives the workspace its own scrollbar and needs a bounded height on the
1472
+ * shell — pass it through `className`, e.g. `h-[100dvh]`.
1473
+ * @default "page"
1474
+ */
1475
+ mainScroll?: AppShellMainScroll;
1476
+ /** Keeps the top bar in view while the workspace scrolls. @default true */
1477
+ stickyTopBar?: boolean;
1478
+ /** Accessible name for the workspace landmark. @default "Workspace" */
1479
+ mainLabel?: string;
1480
+ /** Workspace content. */
1481
+ children?: ReactNode;
1482
+ /** Lands on the container root, outside the top bar and workspace padding. */
1483
+ className?: string;
1484
+ }
1485
+ declare function ApplicationShellBlock({ brand, brandHref, onBrandClick, navSections, navLabel, sectionHeadingLevel, navStatus, navErrorMessage, onRetryNav, navLoadingMessage, navEmptyMessage, search, switcher, actions, actionsLabel, sidebarFooter, openMenuLabel, closeMenuLabel, skipLinkLabel, skipNavLabel, expandAt, mainScroll, stickyTopBar, mainLabel, children, className, }: ApplicationShellBlockProps): react_jsx_runtime.JSX.Element;
1486
+
1487
+ type PageHeaderHeadingLevel = "h1" | "h2" | "h3" | "h4" | "h5" | "h6";
1488
+ /**
1489
+ * There is no `info` tone: the library's info ramp has only `info-400`/`info-500`
1490
+ * and no ground or text role that inverts for dark mode, so an info badge could
1491
+ * not be made readable in both modes without inventing a token.
1492
+ */
1493
+ type PageHeaderStatusTone = "neutral" | "success" | "warning" | "danger";
1494
+ interface PageHeaderStatus {
1495
+ /** Carries the meaning in words; the tone only tints it. */
1496
+ label: string;
1497
+ /** @default "neutral" */
1498
+ tone?: PageHeaderStatusTone;
1499
+ /** One sentence explaining the status, shown beside it. */
1500
+ description?: string;
1501
+ }
1502
+ interface PageHeaderCrumbBase {
1503
+ id: string;
1504
+ label: string;
1505
+ icon?: IconName;
1506
+ }
1507
+ /**
1508
+ * A crumb is a destination or an action. The last crumb is the current page and
1509
+ * is rendered as plain text with `aria-current="page"`, so it needs neither.
1510
+ */
1511
+ type PageHeaderBreadcrumb = (PageHeaderCrumbBase & {
1512
+ href: string;
1513
+ onClick?: () => void;
1514
+ }) | (PageHeaderCrumbBase & {
1515
+ onClick: () => void;
1516
+ href?: undefined;
1517
+ }) | (PageHeaderCrumbBase & {
1518
+ href?: undefined;
1519
+ onClick?: undefined;
1520
+ });
1521
+ type PageHeaderActionPriority = "primary" | "secondary" | "overflow";
1522
+ interface PageHeaderActionBase {
1523
+ id: string;
1524
+ label: string;
1525
+ icon?: IconName;
1526
+ /** @default "secondary" */
1527
+ priority?: PageHeaderActionPriority;
1528
+ /** Longer spoken name where the visible label is terse. */
1529
+ description?: string;
1530
+ }
1531
+ type PageHeaderAction = (PageHeaderActionBase & {
1532
+ href: string;
1533
+ external?: boolean;
1534
+ onClick?: () => void;
1535
+ }) | (PageHeaderActionBase & {
1536
+ onClick: () => void;
1537
+ href?: undefined;
1538
+ }) | (PageHeaderActionBase & {
1539
+ /** Why the viewer cannot use this action. Rendered next to a disabled control. */
1540
+ unavailableReason: string;
1541
+ href?: undefined;
1542
+ onClick?: undefined;
1543
+ });
1544
+ interface PageHeaderMetaItem {
1545
+ id: string;
1546
+ label: string;
1547
+ value: ReactNode;
1548
+ icon?: IconName;
1549
+ }
1550
+ interface PageHeaderBackAction {
1551
+ label: string;
1552
+ href?: string;
1553
+ onClick?: () => void;
1554
+ }
1555
+ type PageHeaderState = "default" | "loading" | "error";
1556
+ interface PageHeaderBlockProps {
1557
+ /** Required: a page header without a title is not a page header. */
1558
+ title: ReactNode;
1559
+ /**
1560
+ * Heading element for {@link title}. A page header usually owns the page's
1561
+ * only `h1`; drop it to `h2` when the shell already provides one.
1562
+ * @default "h1"
1563
+ */
1564
+ headingLevel?: PageHeaderHeadingLevel;
1565
+ /** Small label above the title. Not a heading. */
1566
+ eyebrow?: ReactNode;
1567
+ description?: ReactNode;
1568
+ breadcrumbs?: PageHeaderBreadcrumb[];
1569
+ /** Accessible name for the breadcrumb landmark. @default "Breadcrumb" */
1570
+ breadcrumbLabel?: string;
1571
+ /**
1572
+ * Trail length before the middle collapses behind a disclosure. The first and
1573
+ * the last two crumbs always stay visible. @default 4
1574
+ */
1575
+ maxVisibleBreadcrumbs?: number;
1576
+ /** Spoken label for the expand toggle. Receives the number of hidden levels. */
1577
+ breadcrumbExpandLabel?: (hiddenCount: number) => string;
1578
+ /** Spoken label for the same toggle once the trail is expanded. */
1579
+ breadcrumbCollapseLabel?: (hiddenCount: number) => string;
1580
+ status?: PageHeaderStatus;
1581
+ meta?: PageHeaderMetaItem[];
1582
+ /** Accessible name for the meta list. @default "Page details" */
1583
+ metaLabel?: string;
1584
+ /** Reveal metadata on demand below 640px of container width. @default true */
1585
+ collapseMetaOnSmallScreens?: boolean;
1586
+ /** Surface includes padding and a background; plain fits an existing page gutter. */
1587
+ variant?: "surface" | "plain";
1588
+ backAction?: PageHeaderBackAction;
1589
+ actions?: PageHeaderAction[];
1590
+ /** Accessible name for the action group. @default "Page actions" */
1591
+ actionsLabel?: string;
1592
+ /**
1593
+ * How many actions stay inline before the remaining secondary ones move into
1594
+ * the overflow disclosure. Primary actions are never moved. @default 3
1595
+ */
1596
+ maxInlineActions?: number;
1597
+ /** @default "More actions" */
1598
+ overflowLabel?: string;
1599
+ /** @default "default" */
1600
+ state?: PageHeaderState;
1601
+ errorTitle?: string;
1602
+ errorDescription?: string;
1603
+ /** The retry control is omitted entirely when no handler is supplied. */
1604
+ onRetry?: () => void;
1605
+ loadingMessage?: string;
1606
+ /** Content under the header row, e.g. a tab bar or a filter row. */
1607
+ children?: ReactNode;
1608
+ /** Lands on the container root, outside the padded surface. */
1609
+ className?: string;
1610
+ }
1611
+ declare function PageHeaderBlock({ title, headingLevel, eyebrow, description, breadcrumbs, breadcrumbLabel, maxVisibleBreadcrumbs, breadcrumbExpandLabel, breadcrumbCollapseLabel, status, meta, metaLabel, collapseMetaOnSmallScreens, variant, backAction, actions, actionsLabel, maxInlineActions, overflowLabel, state, errorTitle, errorDescription, onRetry, loadingMessage, children, className, }: PageHeaderBlockProps): react_jsx_runtime.JSX.Element;
1612
+
1613
+ type WorkspaceSwitcherStatus = "idle" | "loading" | "error";
1614
+ interface WorkspaceBase {
1615
+ id: string;
1616
+ name: string;
1617
+ /** Plan, role, or member count — one short supporting line. */
1618
+ detail?: string;
1619
+ /** Square logo. Falls back to {@link initials}, then to the first character. */
1620
+ logoSrc?: string;
1621
+ initials?: string;
1622
+ icon?: IconName;
1623
+ }
1624
+ /**
1625
+ * Switching workspace is normally an application action, so `onSelect` is the
1626
+ * default path. A workspace that is genuinely a separate address may supply an
1627
+ * `href`; it is then rendered as a real anchor, which keeps middle-click and
1628
+ * open-in-new-tab working.
1629
+ */
1630
+ type WorkspaceSwitcherItem = (WorkspaceBase & {
1631
+ href?: string;
1632
+ unavailableReason?: undefined;
1633
+ }) | (WorkspaceBase & {
1634
+ /** Why the viewer cannot open this workspace. Shown next to the entry. */
1635
+ unavailableReason: string;
1636
+ href?: undefined;
1637
+ });
1638
+ interface WorkspaceSwitcherFooterAction {
1639
+ id: string;
1640
+ label: string;
1641
+ icon?: IconName;
1642
+ href?: string;
1643
+ onClick?: () => void;
1644
+ external?: boolean;
1645
+ }
1646
+ interface WorkspaceSwitcherBlockProps {
1647
+ /** The workspace the application is currently showing. */
1648
+ current?: WorkspaceSwitcherItem;
1649
+ /** Everything the viewer may switch to, including {@link current}. */
1650
+ workspaces?: WorkspaceSwitcherItem[];
1651
+ /**
1652
+ * Required whenever a workspace without an `href` can be chosen: a switcher
1653
+ * that cannot switch is an inert control.
1654
+ */
1655
+ onSelect?: (id: string) => void;
1656
+ /** Explanation for entries with neither a destination nor a selection handler. */
1657
+ unavailableMessage?: string;
1658
+ /** @default "idle" */
1659
+ status?: WorkspaceSwitcherStatus;
1660
+ errorMessage?: string;
1661
+ /** The retry control is omitted entirely when no handler is supplied. */
1662
+ onRetry?: () => void;
1663
+ loadingMessage?: string;
1664
+ /** Accessible name for the trigger. @default "Switch workspace" */
1665
+ triggerLabel?: string;
1666
+ /** Small label above the current name on the trigger, e.g. "Workspace". */
1667
+ triggerHint?: string;
1668
+ /** Shown on the trigger when no workspace is selected. @default "Choose a workspace" */
1669
+ placeholder?: string;
1670
+ /** Accessible name for the popover. @default "Workspaces" */
1671
+ panelLabel?: string;
1672
+ /** @default "Filter workspaces" */
1673
+ filterLabel?: string;
1674
+ filterPlaceholder?: string;
1675
+ /**
1676
+ * Below this many workspaces the filter field is not rendered, because a
1677
+ * filter over three entries is noise. @default 6
1678
+ */
1679
+ filterThreshold?: number;
1680
+ /** Shown when the viewer belongs to no workspace at all. */
1681
+ emptyTitle?: string;
1682
+ emptyDescription?: string;
1683
+ /** Shown when the filter matches nothing — a different situation from empty. */
1684
+ noMatchesTitle?: string;
1685
+ noMatchesDescription?: string;
1686
+ /** "Create workspace" / "Join workspace". Rendered only when supplied. */
1687
+ footerActions?: WorkspaceSwitcherFooterAction[];
1688
+ /** Announced result count. Receives the number of matching workspaces. */
1689
+ resultCountLabel?: (count: number) => string;
1690
+ /** Uncontrolled default. @default false */
1691
+ defaultOpen?: boolean;
1692
+ /** Controlled open state. Pair with {@link onOpenChange}. */
1693
+ open?: boolean;
1694
+ onOpenChange?: (open: boolean) => void;
1695
+ /** Lands on the container root, outside the popover surface. */
1696
+ className?: string;
1697
+ }
1698
+ declare function WorkspaceSwitcherBlock({ current, workspaces, onSelect, unavailableMessage, status, errorMessage, onRetry, loadingMessage, triggerLabel, triggerHint, placeholder, panelLabel, filterLabel, filterPlaceholder, filterThreshold, emptyTitle, emptyDescription, noMatchesTitle, noMatchesDescription, footerActions, resultCountLabel, defaultOpen, open: controlledOpen, onOpenChange, className, }: WorkspaceSwitcherBlockProps): react_jsx_runtime.JSX.Element;
1699
+
1700
+ type CommandPaletteStatus = "idle" | "loading" | "error";
1701
+ interface CommandPaletteItemBase {
1702
+ id: string;
1703
+ label: string;
1704
+ /** One supporting line, e.g. the path a destination leads to. */
1705
+ description?: string;
1706
+ icon?: IconName;
1707
+ /** Extra words the local filter should match, e.g. synonyms or an old name. */
1708
+ keywords?: string[];
1709
+ /** Rendered on the right, e.g. "⌘ N". Presentational only. */
1710
+ shortcut?: string;
1711
+ /** Groups items under a heading. Resolved against {@link CommandPaletteBlockProps.groups}. */
1712
+ groupId?: string;
1713
+ }
1714
+ /**
1715
+ * A destination is an anchor and keeps its `href` at every width, an action is
1716
+ * an activatable option, and an entry the viewer may not use is disabled with a
1717
+ * visible reason. There is no arm with nothing to do.
1718
+ */
1719
+ type CommandPaletteItem = (CommandPaletteItemBase & {
1720
+ href: string;
1721
+ external?: boolean;
1722
+ onSelect?: () => void;
1723
+ }) | (CommandPaletteItemBase & {
1724
+ onSelect: () => void;
1725
+ href?: undefined;
1726
+ }) | (CommandPaletteItemBase & {
1727
+ /** Why this entry is unavailable to the current viewer. */
1728
+ unavailableReason: string;
1729
+ href?: undefined;
1730
+ onSelect?: undefined;
1731
+ });
1732
+ interface CommandPaletteGroup {
1733
+ id: string;
1734
+ label: string;
1735
+ }
1736
+ interface CommandPaletteShortcut {
1737
+ /** Single character, compared case-insensitively. */
1738
+ key: string;
1739
+ /** `"mod"` is Command on Apple platforms and Control elsewhere. @default "mod" */
1740
+ modifier?: "mod" | "none";
1741
+ /** Visible hint on the trigger, e.g. "⌘K". */
1742
+ hint?: string;
1743
+ }
1744
+ type CommandPaletteFilterMode = "local" | "external";
1745
+ interface CommandPaletteBlockProps {
1746
+ /** Everything the palette can offer for the current query. */
1747
+ items?: CommandPaletteItem[];
1748
+ groups?: CommandPaletteGroup[];
1749
+ /** Shown while the query is empty, e.g. recent destinations. */
1750
+ suggestions?: CommandPaletteItem[];
1751
+ /** Heading above {@link suggestions}. @default "Suggestions" */
1752
+ suggestionsLabel?: string;
1753
+ /**
1754
+ * With no suggestions and an empty query the palette prompts for a query
1755
+ * rather than listing everything. Set this to list {@link items} instead.
1756
+ * @default false
1757
+ */
1758
+ showAllWhenEmpty?: boolean;
1759
+ /**
1760
+ * `"local"` filters {@link items} in the browser. `"external"` renders
1761
+ * {@link items} untouched, for an application that searches remotely.
1762
+ * @default "local"
1763
+ */
1764
+ filterMode?: CommandPaletteFilterMode;
1765
+ onQueryChange?: (query: string) => void;
1766
+ /** Fires for every activation, including a destination followed by its href. */
1767
+ onSelect?: (item: CommandPaletteItem) => void;
1768
+ /** @default "idle" */
1769
+ status?: CommandPaletteStatus;
1770
+ errorTitle?: string;
1771
+ errorDescription?: string;
1772
+ /** The retry control is omitted entirely when no handler is supplied. */
1773
+ onRetry?: () => void;
1774
+ loadingMessage?: string;
1775
+ /** Accessible name for the dialog. @default "Command palette" */
1776
+ dialogLabel?: string;
1777
+ /** @default "Search destinations and actions" */
1778
+ searchLabel?: string;
1779
+ searchPlaceholder?: string;
1780
+ /** Hint under the field, associated with it. */
1781
+ searchHint?: string;
1782
+ /** Shown before anything has been typed and nothing else can be offered. */
1783
+ promptTitle?: string;
1784
+ promptDescription?: string;
1785
+ /** Shown when the query matches nothing. Distinct from the prompt. */
1786
+ noResultsTitle?: (query: string) => string;
1787
+ noResultsDescription?: string;
1788
+ /** Shown when the palette has no entries configured at all. */
1789
+ emptySourceTitle?: string;
1790
+ emptySourceDescription?: string;
1791
+ /** Announced and displayed result count. */
1792
+ resultCountLabel?: (count: number) => string;
1793
+ /** Renders the block's own opening control. @default true */
1794
+ showTrigger?: boolean;
1795
+ /** @default "Search" */
1796
+ triggerLabel?: string;
1797
+ /** Extra classes for the built-in trigger. */
1798
+ triggerClassName?: string;
1799
+ /** Keyboard opener. `null` registers no document listener. @default null */
1800
+ shortcut?: CommandPaletteShortcut | null;
1801
+ /** Uncontrolled default. @default false */
1802
+ defaultOpen?: boolean;
1803
+ /** Controlled open state. Pair with {@link onOpenChange}. */
1804
+ open?: boolean;
1805
+ onOpenChange?: (open: boolean) => void;
1806
+ /** @default "Close" */
1807
+ closeLabel?: string;
1808
+ /**
1809
+ * Freezes the page behind the overlay so the shell's workspace and the
1810
+ * palette do not both scroll. @default true
1811
+ */
1812
+ lockScroll?: boolean;
1813
+ /** Extra content along the bottom of the dialog, e.g. keyboard legends. */
1814
+ footer?: ReactNode;
1815
+ /** Lands on the container root that holds the trigger. */
1816
+ className?: string;
1817
+ }
1818
+ declare function CommandPaletteBlock({ items, groups, suggestions, suggestionsLabel, showAllWhenEmpty, filterMode, onQueryChange, onSelect, status, errorTitle, errorDescription, onRetry, loadingMessage, dialogLabel, searchLabel, searchPlaceholder, searchHint, promptTitle, promptDescription, noResultsTitle, noResultsDescription, emptySourceTitle, emptySourceDescription, resultCountLabel, showTrigger, triggerLabel, triggerClassName, shortcut, defaultOpen, open: controlledOpen, onOpenChange, closeLabel, lockScroll, footer, className, }: CommandPaletteBlockProps): react_jsx_runtime.JSX.Element;
1819
+
1820
+ export { type AppShellAction, type AppShellExpandTier, type AppShellHeadingLevel, type AppShellMainScroll, type AppShellNavItem, type AppShellNavSection, type AppShellNavStatus, ApplicationShellBlock, type ApplicationShellBlockProps, CheckoutReviewBlock, type CheckoutReviewBlockProps, CommandPaletteBlock, type CommandPaletteBlockProps, type CommandPaletteFilterMode, type CommandPaletteGroup, type CommandPaletteItem, type CommandPaletteShortcut, type CommandPaletteStatus, type CommerceBaseProps, type CommerceCartItem, type CommerceHeadingLevel, type CommerceImage, type CommerceProduct, type CommerceTotalsProps, CreateAccountBlock, type CreateAccountBlockProps, type CreateAccountFieldErrors, type CreateAccountFieldName, type CreateAccountHeadingLevel, type CreateAccountLink, type CreateAccountPasswordRule, type CreateAccountStatus, type CreateAccountValues, EmptyStateBlock, type EmptyStateBlockAction, type EmptyStateBlockProps, type EmptyStateBlockVariant, type FeatureOverviewActionCta, FeatureOverviewBlock, type FeatureOverviewBlockProps, type FeatureOverviewColumns, type FeatureOverviewCta, type FeatureOverviewEmptyState, type FeatureOverviewHeadingLevel, type FeatureOverviewItem, type FeatureOverviewLinkCta, type FeatureOverviewState, type FeatureOverviewVariant, HeaderBlock, type HeaderBlockAction, type HeaderBlockAnnouncement, type HeaderBlockLink, type HeaderBlockProps, type HeaderBlockSwitcher, type HeaderBlockVariant, type KpiChange, type KpiChangeDirection, type KpiChangeSentiment, type KpiMetric, KpiOverviewBlock, type KpiOverviewBlockProps, type KpiOverviewHeadingLevel, type KpiOverviewStatus, type KpiPeriod, type KpiPeriodOption, type KpiTrend, LoginBlock, type LoginBlockProps, type LoginBlockSocialProvider, type LoginBlockVariant, type NotificationItem, NotificationsBlock, type NotificationsBlockProps, type PageHeaderAction, type PageHeaderActionPriority, type PageHeaderBackAction, PageHeaderBlock, type PageHeaderBlockProps, type PageHeaderBreadcrumb, type PageHeaderHeadingLevel, type PageHeaderMetaItem, type PageHeaderState, type PageHeaderStatus, type PageHeaderStatusTone, type PricingActionCta, type PricingBillingPeriod, type PricingCta, type PricingFeature, type PricingLimit, type PricingLinkCta, type PricingPlan, type PricingPlanAvailability, PricingPlansBlock, type PricingPlansBlockProps, type PricingPlansHeadingLevel, type PricingPlansNotice, type PricingPlansState, type PricingPrice, ProductCollectionBlock, type ProductCollectionBlockProps, ProductDetailBlock, type ProductDetailBlockProps, type ProductDetailOption, type ProductDetailSelection, type ProductHeroActionCta, type ProductHeroAlign, ProductHeroBlock, type ProductHeroBlockProps, type ProductHeroCta, type ProductHeroHeadingLevel, type ProductHeroHighlight, type ProductHeroLinkCta, type ProductHeroMedia, type ProductHeroMediaRatio, type ProductHeroState, type ProfileSettingsAvatar, ProfileSettingsBlock, type ProfileSettingsBlockProps, type ProfileSettingsFieldErrors, type ProfileSettingsFieldName, type ProfileSettingsHeadingLevel, type ProfileSettingsStatus, type ProfileSettingsTimeZoneOption, type ProfileSettingsValues, type QuickSendBeneficiary, QuickSendBlock, type QuickSendBlockProps, RecentTransactionsBlock, type RecentTransactionsBlockProps, SearchableTableBlock, type SearchableTableBlockProps, type SearchableTableColumn, type SearchableTableRow, ShoppingCartBlock, type ShoppingCartBlockProps, SiteFooterBlock, type SiteFooterBlockProps, type SiteFooterBrand, type SiteFooterHeadingLevel, type SiteFooterLink, type SiteFooterLinkGroup, type SiteFooterLocaleControl, type SiteFooterLocaleOption, type SiteFooterSocialLink, TableBlock, type TableBlockProps, type TableBlockRow, type TaskListAddInput, type TaskListAddStatus, type TaskListAssignee, TaskListBlock, type TaskListBlockProps, type TaskListDueContext, type TaskListHeadingLevel, type TaskListStatus, type TaskListStatusFilter, type TaskListTask, type Transaction, type TransactionDirection, WorkspaceSwitcherBlock, type WorkspaceSwitcherBlockProps, type WorkspaceSwitcherFooterAction, type WorkspaceSwitcherItem, type WorkspaceSwitcherStatus, defaultCreateAccountPasswordRules, defaultProfileTimeZones };