@cascivo/react 1.0.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (646) hide show
  1. package/README.md +5 -4
  2. package/dist/accordion/accordion.js +1 -114
  3. package/dist/accordion/accordion.module.js +1 -10
  4. package/dist/action-sheet/action-sheet.css +1 -1
  5. package/dist/action-sheet/action-sheet.js +1 -91
  6. package/dist/action-sheet/action-sheet.module.js +1 -12
  7. package/dist/alert/alert.js +1 -55
  8. package/dist/alert/alert.module.js +1 -11
  9. package/dist/alert-dialog/alert-dialog.css +1 -1
  10. package/dist/alert-dialog/alert-dialog.js +1 -66
  11. package/dist/alert-dialog/alert-dialog.module.js +1 -11
  12. package/dist/app-shell/app-shell.css +1 -1
  13. package/dist/app-shell/app-shell.js +1 -85
  14. package/dist/app-shell/app-shell.module.js +1 -12
  15. package/dist/aspect-ratio/aspect-ratio.js +1 -20
  16. package/dist/aspect-ratio/aspect-ratio.module.js +1 -6
  17. package/dist/avatar/avatar.js +1 -57
  18. package/dist/avatar/avatar.module.js +1 -8
  19. package/dist/avatar-group/avatar-group.js +1 -24
  20. package/dist/avatar-group/avatar-group.module.js +1 -6
  21. package/dist/badge/badge.js +1 -22
  22. package/dist/badge/badge.module.js +1 -3
  23. package/dist/blockquote/blockquote.js +1 -16
  24. package/dist/blockquote/blockquote.module.js +1 -6
  25. package/dist/bottom-sheet/bottom-sheet.js +1 -111
  26. package/dist/bottom-sheet/bottom-sheet.module.js +1 -14
  27. package/dist/brand/logo/logo.css +1 -0
  28. package/dist/brand/logo/logo.js +1 -0
  29. package/dist/brand/logo/logo.module.js +2 -0
  30. package/dist/breadcrumb/breadcrumb.js +1 -28
  31. package/dist/breadcrumb/breadcrumb.module.js +1 -3
  32. package/dist/button/button.css +1 -1
  33. package/dist/button/button.js +1 -35
  34. package/dist/button/button.module.js +1 -6
  35. package/dist/button-group/button-group.js +1 -39
  36. package/dist/button-group/button-group.module.js +1 -3
  37. package/dist/calendar/calendar-date.js +1 -0
  38. package/dist/calendar/calendar.css +1 -1
  39. package/dist/calendar/calendar.js +1 -199
  40. package/dist/calendar/calendar.module.js +1 -14
  41. package/dist/card/card.js +1 -53
  42. package/dist/card/card.module.js +1 -12
  43. package/dist/carousel/carousel.css +1 -1
  44. package/dist/carousel/carousel.js +1 -138
  45. package/dist/carousel/carousel.module.js +1 -13
  46. package/dist/chat-bubble/chat-bubble.js +1 -31
  47. package/dist/chat-bubble/chat-bubble.module.js +1 -11
  48. package/dist/checkbox/checkbox.js +1 -39
  49. package/dist/checkbox/checkbox.module.js +1 -8
  50. package/dist/checkbox-card/checkbox-card.css +1 -1
  51. package/dist/checkbox-card/checkbox-card.js +1 -50
  52. package/dist/checkbox-card/checkbox-card.module.js +1 -11
  53. package/dist/code/code.js +1 -14
  54. package/dist/code/code.module.js +1 -3
  55. package/dist/code-snippet/code-snippet.js +2 -121
  56. package/dist/code-snippet/code-snippet.module.js +1 -17
  57. package/dist/code-snippet/highlight.js +1 -67
  58. package/dist/collapsible/collapsible.js +1 -47
  59. package/dist/collapsible/collapsible.module.js +1 -7
  60. package/dist/color-picker/color-picker.css +1 -1
  61. package/dist/color-picker/color-picker.js +1 -272
  62. package/dist/color-picker/color-picker.module.js +1 -18
  63. package/dist/color-picker/color.js +1 -0
  64. package/dist/combobox/combobox.css +1 -1
  65. package/dist/combobox/combobox.js +1 -170
  66. package/dist/combobox/combobox.module.js +1 -19
  67. package/dist/combobox/list-nav.js +1 -0
  68. package/dist/combobox/option-list.js +1 -0
  69. package/dist/command-menu/command-menu.js +1 -421
  70. package/dist/command-menu/command-menu.module.js +1 -34
  71. package/dist/comparison/comparison.js +1 -69
  72. package/dist/comparison/comparison.module.js +1 -9
  73. package/dist/contained-list/contained-list.js +1 -41
  74. package/dist/contained-list/contained-list.module.js +1 -11
  75. package/dist/context-menu/context-menu.js +1 -93
  76. package/dist/context-menu/context-menu.module.js +1 -7
  77. package/dist/copy-button/copy-button.js +1 -60
  78. package/dist/copy-button/copy-button.module.js +1 -6
  79. package/dist/data-list/data-list.js +1 -25
  80. package/dist/data-list/data-list.module.js +1 -8
  81. package/dist/data-table/column-filter.js +1 -0
  82. package/dist/data-table/column-layout.js +1 -0
  83. package/dist/data-table/data-table.css +1 -1
  84. package/dist/data-table/data-table.js +1 -398
  85. package/dist/data-table/data-table.module.js +1 -33
  86. package/dist/data-table/grid-keys.js +1 -0
  87. package/dist/data-table/row-group.js +1 -0
  88. package/dist/data-table/row-search.js +1 -0
  89. package/dist/data-table/row-sort.js +1 -0
  90. package/dist/data-table/to-csv.js +3 -0
  91. package/dist/data-table/virtual-window.js +1 -0
  92. package/dist/date-picker/date-picker.css +1 -1
  93. package/dist/date-picker/date-picker.js +1 -224
  94. package/dist/date-picker/date-picker.module.js +1 -23
  95. package/dist/date-picker/parse-date.js +1 -0
  96. package/dist/date-range-picker/date-range-picker.js +1 -196
  97. package/dist/date-range-picker/date-range-picker.module.js +1 -18
  98. package/dist/dock/dock.css +1 -1
  99. package/dist/dock/dock.js +1 -34
  100. package/dist/dock/dock.module.js +1 -8
  101. package/dist/drawer/drawer.js +1 -96
  102. package/dist/drawer/drawer.module.js +1 -13
  103. package/dist/dropdown/dropdown.css +1 -1
  104. package/dist/dropdown/dropdown.js +1 -110
  105. package/dist/dropdown/dropdown.module.js +1 -9
  106. package/dist/editable/editable.js +1 -76
  107. package/dist/editable/editable.module.js +1 -11
  108. package/dist/empty-state/empty-state.js +1 -32
  109. package/dist/empty-state/empty-state.module.js +1 -9
  110. package/dist/fab/fab.css +1 -1
  111. package/dist/fab/fab.js +1 -93
  112. package/dist/fab/fab.module.js +1 -12
  113. package/dist/field/field.css +1 -1
  114. package/dist/field/field.js +1 -53
  115. package/dist/field/field.module.js +1 -7
  116. package/dist/file-uploader/file-uploader.css +1 -1
  117. package/dist/file-uploader/file-uploader.js +1 -123
  118. package/dist/file-uploader/file-uploader.module.js +1 -18
  119. package/dist/filter/filter.css +1 -1
  120. package/dist/filter/filter.js +1 -35
  121. package/dist/filter/filter.module.js +1 -6
  122. package/dist/form/form.js +1 -95
  123. package/dist/form/form.module.js +1 -3
  124. package/dist/header/header.js +1 -44
  125. package/dist/header/header.module.js +1 -11
  126. package/dist/header-panel/header-panel.js +1 -72
  127. package/dist/header-panel/header-panel.module.js +1 -9
  128. package/dist/heading/heading.css +1 -1
  129. package/dist/heading/heading.js +1 -22
  130. package/dist/heading/heading.module.js +1 -3
  131. package/dist/hover-card/hover-card.css +1 -1
  132. package/dist/hover-card/hover-card.js +1 -84
  133. package/dist/hover-card/hover-card.module.js +1 -6
  134. package/dist/icon-button/icon-button.js +1 -19
  135. package/dist/icon-button/icon-button.module.js +1 -3
  136. package/dist/image/image.css +1 -1
  137. package/dist/image/image.js +1 -64
  138. package/dist/image/image.module.js +1 -9
  139. package/dist/index.d.ts +1521 -38
  140. package/dist/indicator/indicator.js +1 -16
  141. package/dist/indicator/indicator.module.js +1 -6
  142. package/dist/infinite-scroll/infinite-scroll.js +1 -49
  143. package/dist/infinite-scroll/infinite-scroll.module.js +1 -7
  144. package/dist/inline-loading/inline-loading.js +1 -74
  145. package/dist/inline-loading/inline-loading.module.js +1 -9
  146. package/dist/input/input.css +1 -1
  147. package/dist/input/input.js +1 -56
  148. package/dist/input/input.module.js +1 -9
  149. package/dist/input-group/input-group.css +1 -1
  150. package/dist/input-group/input-group.js +1 -39
  151. package/dist/input-group/input-group.module.js +1 -9
  152. package/dist/item/item.js +1 -50
  153. package/dist/item/item.module.js +1 -10
  154. package/dist/join/join.js +1 -12
  155. package/dist/join/join.module.js +1 -3
  156. package/dist/kbd/kbd.js +1 -14
  157. package/dist/kbd/kbd.module.js +1 -3
  158. package/dist/label/label.js +1 -23
  159. package/dist/label/label.module.js +1 -7
  160. package/dist/large-title-header/large-title-header.js +1 -38
  161. package/dist/large-title-header/large-title-header.module.js +1 -12
  162. package/dist/layouts/src/auto-grid/auto-grid.js +1 -17
  163. package/dist/layouts/src/auto-grid/auto-grid.module.js +1 -4
  164. package/dist/layouts/src/center/center.js +1 -16
  165. package/dist/layouts/src/center/center.module.js +1 -3
  166. package/dist/layouts/src/columns/columns.js +1 -21
  167. package/dist/layouts/src/columns/columns.module.js +1 -6
  168. package/dist/layouts/src/flex/flex.css +1 -1
  169. package/dist/layouts/src/flex/flex.js +1 -20
  170. package/dist/layouts/src/flex/flex.module.js +1 -3
  171. package/dist/layouts/src/grid/grid.css +1 -1
  172. package/dist/layouts/src/grid/grid.js +1 -55
  173. package/dist/layouts/src/grid/grid.module.js +1 -7
  174. package/dist/layouts/src/page-header/page-header.js +1 -31
  175. package/dist/layouts/src/page-header/page-header.module.js +1 -10
  176. package/dist/layouts/src/spacer/spacer.js +1 -17
  177. package/dist/layouts/src/spacer/spacer.module.js +1 -3
  178. package/dist/link/link.css +1 -1
  179. package/dist/link/link.js +1 -22
  180. package/dist/link/link.module.js +1 -3
  181. package/dist/list/list.js +1 -21
  182. package/dist/list/list.module.js +1 -6
  183. package/dist/log-viewer/log-viewer.css +1 -1
  184. package/dist/log-viewer/log-viewer.js +2 -184
  185. package/dist/log-viewer/log-viewer.module.js +1 -16
  186. package/dist/menu/menu.js +1 -126
  187. package/dist/menu/menu.module.js +1 -8
  188. package/dist/menu-button/menu-button.js +1 -92
  189. package/dist/menu-button/menu-button.module.js +1 -8
  190. package/dist/menubar/menubar.js +1 -103
  191. package/dist/menubar/menubar.module.js +1 -8
  192. package/dist/modal/modal.css +1 -1
  193. package/dist/modal/modal.js +1 -76
  194. package/dist/modal/modal.module.js +1 -12
  195. package/dist/multi-select/list-nav.js +1 -0
  196. package/dist/multi-select/multi-select.css +1 -1
  197. package/dist/multi-select/multi-select.js +1 -106
  198. package/dist/multi-select/multi-select.module.js +1 -15
  199. package/dist/multi-select/option-list.js +1 -0
  200. package/dist/native-select/native-select.css +1 -1
  201. package/dist/native-select/native-select.js +1 -37
  202. package/dist/native-select/native-select.module.js +1 -7
  203. package/dist/navigation-menu/navigation-menu.js +1 -99
  204. package/dist/navigation-menu/navigation-menu.module.js +1 -10
  205. package/dist/node/accordion/accordion.js +1 -114
  206. package/dist/node/accordion/accordion.module.js +1 -10
  207. package/dist/node/action-sheet/action-sheet.js +1 -91
  208. package/dist/node/action-sheet/action-sheet.module.js +1 -12
  209. package/dist/node/alert/alert.js +1 -55
  210. package/dist/node/alert/alert.module.js +1 -11
  211. package/dist/node/alert-dialog/alert-dialog.js +1 -66
  212. package/dist/node/alert-dialog/alert-dialog.module.js +1 -11
  213. package/dist/node/app-shell/app-shell.js +1 -85
  214. package/dist/node/app-shell/app-shell.module.js +1 -12
  215. package/dist/node/aspect-ratio/aspect-ratio.js +1 -20
  216. package/dist/node/aspect-ratio/aspect-ratio.module.js +1 -6
  217. package/dist/node/avatar/avatar.js +1 -57
  218. package/dist/node/avatar/avatar.module.js +1 -8
  219. package/dist/node/avatar-group/avatar-group.js +1 -24
  220. package/dist/node/avatar-group/avatar-group.module.js +1 -6
  221. package/dist/node/badge/badge.js +1 -22
  222. package/dist/node/badge/badge.module.js +1 -3
  223. package/dist/node/blockquote/blockquote.js +1 -16
  224. package/dist/node/blockquote/blockquote.module.js +1 -6
  225. package/dist/node/bottom-sheet/bottom-sheet.js +1 -111
  226. package/dist/node/bottom-sheet/bottom-sheet.module.js +1 -14
  227. package/dist/node/brand/logo/logo.js +1 -0
  228. package/dist/node/brand/logo/logo.module.js +1 -0
  229. package/dist/node/breadcrumb/breadcrumb.js +1 -28
  230. package/dist/node/breadcrumb/breadcrumb.module.js +1 -3
  231. package/dist/node/button/button.js +1 -35
  232. package/dist/node/button/button.module.js +1 -6
  233. package/dist/node/button-group/button-group.js +1 -39
  234. package/dist/node/button-group/button-group.module.js +1 -3
  235. package/dist/node/calendar/calendar-date.js +1 -0
  236. package/dist/node/calendar/calendar.js +1 -199
  237. package/dist/node/calendar/calendar.module.js +1 -14
  238. package/dist/node/card/card.js +1 -53
  239. package/dist/node/card/card.module.js +1 -12
  240. package/dist/node/carousel/carousel.js +1 -138
  241. package/dist/node/carousel/carousel.module.js +1 -13
  242. package/dist/node/chat-bubble/chat-bubble.js +1 -31
  243. package/dist/node/chat-bubble/chat-bubble.module.js +1 -11
  244. package/dist/node/checkbox/checkbox.js +1 -39
  245. package/dist/node/checkbox/checkbox.module.js +1 -8
  246. package/dist/node/checkbox-card/checkbox-card.js +1 -50
  247. package/dist/node/checkbox-card/checkbox-card.module.js +1 -11
  248. package/dist/node/code/code.js +1 -14
  249. package/dist/node/code/code.module.js +1 -3
  250. package/dist/node/code-snippet/code-snippet.js +2 -121
  251. package/dist/node/code-snippet/code-snippet.module.js +1 -17
  252. package/dist/node/code-snippet/highlight.js +1 -67
  253. package/dist/node/collapsible/collapsible.js +1 -47
  254. package/dist/node/collapsible/collapsible.module.js +1 -7
  255. package/dist/node/color-picker/color-picker.js +1 -272
  256. package/dist/node/color-picker/color-picker.module.js +1 -18
  257. package/dist/node/color-picker/color.js +1 -0
  258. package/dist/node/combobox/combobox.js +1 -170
  259. package/dist/node/combobox/combobox.module.js +1 -19
  260. package/dist/node/combobox/list-nav.js +1 -0
  261. package/dist/node/combobox/option-list.js +1 -0
  262. package/dist/node/command-menu/command-menu.js +1 -421
  263. package/dist/node/command-menu/command-menu.module.js +1 -34
  264. package/dist/node/comparison/comparison.js +1 -69
  265. package/dist/node/comparison/comparison.module.js +1 -9
  266. package/dist/node/contained-list/contained-list.js +1 -41
  267. package/dist/node/contained-list/contained-list.module.js +1 -11
  268. package/dist/node/context-menu/context-menu.js +1 -93
  269. package/dist/node/context-menu/context-menu.module.js +1 -7
  270. package/dist/node/copy-button/copy-button.js +1 -60
  271. package/dist/node/copy-button/copy-button.module.js +1 -6
  272. package/dist/node/data-list/data-list.js +1 -25
  273. package/dist/node/data-list/data-list.module.js +1 -8
  274. package/dist/node/data-table/column-filter.js +1 -0
  275. package/dist/node/data-table/column-layout.js +1 -0
  276. package/dist/node/data-table/data-table.js +1 -398
  277. package/dist/node/data-table/data-table.module.js +1 -33
  278. package/dist/node/data-table/grid-keys.js +1 -0
  279. package/dist/node/data-table/row-group.js +1 -0
  280. package/dist/node/data-table/row-search.js +1 -0
  281. package/dist/node/data-table/row-sort.js +1 -0
  282. package/dist/node/data-table/to-csv.js +3 -0
  283. package/dist/node/data-table/virtual-window.js +1 -0
  284. package/dist/node/date-picker/date-picker.js +1 -224
  285. package/dist/node/date-picker/date-picker.module.js +1 -23
  286. package/dist/node/date-picker/parse-date.js +1 -0
  287. package/dist/node/date-range-picker/date-range-picker.js +1 -196
  288. package/dist/node/date-range-picker/date-range-picker.module.js +1 -18
  289. package/dist/node/dock/dock.js +1 -34
  290. package/dist/node/dock/dock.module.js +1 -8
  291. package/dist/node/drawer/drawer.js +1 -96
  292. package/dist/node/drawer/drawer.module.js +1 -13
  293. package/dist/node/dropdown/dropdown.js +1 -110
  294. package/dist/node/dropdown/dropdown.module.js +1 -9
  295. package/dist/node/editable/editable.js +1 -76
  296. package/dist/node/editable/editable.module.js +1 -11
  297. package/dist/node/empty-state/empty-state.js +1 -32
  298. package/dist/node/empty-state/empty-state.module.js +1 -9
  299. package/dist/node/fab/fab.js +1 -93
  300. package/dist/node/fab/fab.module.js +1 -12
  301. package/dist/node/field/field.js +1 -53
  302. package/dist/node/field/field.module.js +1 -7
  303. package/dist/node/file-uploader/file-uploader.js +1 -123
  304. package/dist/node/file-uploader/file-uploader.module.js +1 -18
  305. package/dist/node/filter/filter.js +1 -35
  306. package/dist/node/filter/filter.module.js +1 -6
  307. package/dist/node/form/form.js +1 -95
  308. package/dist/node/form/form.module.js +1 -3
  309. package/dist/node/header/header.js +1 -44
  310. package/dist/node/header/header.module.js +1 -11
  311. package/dist/node/header-panel/header-panel.js +1 -72
  312. package/dist/node/header-panel/header-panel.module.js +1 -9
  313. package/dist/node/heading/heading.js +1 -22
  314. package/dist/node/heading/heading.module.js +1 -3
  315. package/dist/node/hover-card/hover-card.js +1 -84
  316. package/dist/node/hover-card/hover-card.module.js +1 -6
  317. package/dist/node/icon-button/icon-button.js +1 -19
  318. package/dist/node/icon-button/icon-button.module.js +1 -3
  319. package/dist/node/image/image.js +1 -64
  320. package/dist/node/image/image.module.js +1 -9
  321. package/dist/node/indicator/indicator.js +1 -16
  322. package/dist/node/indicator/indicator.module.js +1 -6
  323. package/dist/node/infinite-scroll/infinite-scroll.js +1 -49
  324. package/dist/node/infinite-scroll/infinite-scroll.module.js +1 -7
  325. package/dist/node/inline-loading/inline-loading.js +1 -74
  326. package/dist/node/inline-loading/inline-loading.module.js +1 -9
  327. package/dist/node/input/input.js +1 -56
  328. package/dist/node/input/input.module.js +1 -9
  329. package/dist/node/input-group/input-group.js +1 -39
  330. package/dist/node/input-group/input-group.module.js +1 -9
  331. package/dist/node/item/item.js +1 -50
  332. package/dist/node/item/item.module.js +1 -10
  333. package/dist/node/join/join.js +1 -12
  334. package/dist/node/join/join.module.js +1 -3
  335. package/dist/node/kbd/kbd.js +1 -14
  336. package/dist/node/kbd/kbd.module.js +1 -3
  337. package/dist/node/label/label.js +1 -23
  338. package/dist/node/label/label.module.js +1 -7
  339. package/dist/node/large-title-header/large-title-header.js +1 -38
  340. package/dist/node/large-title-header/large-title-header.module.js +1 -12
  341. package/dist/node/layouts/src/auto-grid/auto-grid.js +1 -17
  342. package/dist/node/layouts/src/auto-grid/auto-grid.module.js +1 -4
  343. package/dist/node/layouts/src/center/center.js +1 -16
  344. package/dist/node/layouts/src/center/center.module.js +1 -3
  345. package/dist/node/layouts/src/columns/columns.js +1 -21
  346. package/dist/node/layouts/src/columns/columns.module.js +1 -6
  347. package/dist/node/layouts/src/flex/flex.js +1 -20
  348. package/dist/node/layouts/src/flex/flex.module.js +1 -3
  349. package/dist/node/layouts/src/grid/grid.js +1 -55
  350. package/dist/node/layouts/src/grid/grid.module.js +1 -7
  351. package/dist/node/layouts/src/page-header/page-header.js +1 -31
  352. package/dist/node/layouts/src/page-header/page-header.module.js +1 -10
  353. package/dist/node/layouts/src/spacer/spacer.js +1 -17
  354. package/dist/node/layouts/src/spacer/spacer.module.js +1 -3
  355. package/dist/node/link/link.js +1 -22
  356. package/dist/node/link/link.module.js +1 -3
  357. package/dist/node/list/list.js +1 -21
  358. package/dist/node/list/list.module.js +1 -6
  359. package/dist/node/log-viewer/log-viewer.js +2 -184
  360. package/dist/node/log-viewer/log-viewer.module.js +1 -16
  361. package/dist/node/menu/menu.js +1 -126
  362. package/dist/node/menu/menu.module.js +1 -8
  363. package/dist/node/menu-button/menu-button.js +1 -92
  364. package/dist/node/menu-button/menu-button.module.js +1 -8
  365. package/dist/node/menubar/menubar.js +1 -103
  366. package/dist/node/menubar/menubar.module.js +1 -8
  367. package/dist/node/modal/modal.js +1 -76
  368. package/dist/node/modal/modal.module.js +1 -12
  369. package/dist/node/multi-select/list-nav.js +1 -0
  370. package/dist/node/multi-select/multi-select.js +1 -106
  371. package/dist/node/multi-select/multi-select.module.js +1 -15
  372. package/dist/node/multi-select/option-list.js +1 -0
  373. package/dist/node/native-select/native-select.js +1 -37
  374. package/dist/node/native-select/native-select.module.js +1 -7
  375. package/dist/node/navigation-menu/navigation-menu.js +1 -99
  376. package/dist/node/navigation-menu/navigation-menu.module.js +1 -10
  377. package/dist/node/notification/notification.js +1 -140
  378. package/dist/node/notification/notification.module.js +1 -11
  379. package/dist/node/number-input/number-input.js +1 -148
  380. package/dist/node/number-input/number-input.module.js +1 -12
  381. package/dist/node/otp-input/otp-input.js +1 -70
  382. package/dist/node/otp-input/otp-input.module.js +1 -6
  383. package/dist/node/overflow-menu/overflow-menu.js +1 -70
  384. package/dist/node/overflow-menu/overflow-menu.module.js +1 -7
  385. package/dist/node/pagination/pagination.js +1 -92
  386. package/dist/node/pagination/pagination.module.js +1 -11
  387. package/dist/node/password-input/password-input.js +1 -81
  388. package/dist/node/password-input/password-input.module.js +1 -11
  389. package/dist/node/popover/popover.js +1 -51
  390. package/dist/node/popover/popover.module.js +1 -6
  391. package/dist/node/popover/use-popover.js +1 -55
  392. package/dist/node/progress/progress.js +1 -16
  393. package/dist/node/progress/progress.module.js +1 -6
  394. package/dist/node/progress-bar/progress-bar.js +1 -42
  395. package/dist/node/progress-bar/progress-bar.module.js +1 -11
  396. package/dist/node/progress-circle/progress-circle.js +1 -46
  397. package/dist/node/progress-circle/progress-circle.module.js +1 -9
  398. package/dist/node/progress-indicator/progress-indicator.js +1 -34
  399. package/dist/node/progress-indicator/progress-indicator.module.js +1 -10
  400. package/dist/node/prose/prose.js +1 -13
  401. package/dist/node/prose/prose.module.js +1 -3
  402. package/dist/node/pull-to-refresh/pull-to-refresh.js +1 -82
  403. package/dist/node/pull-to-refresh/pull-to-refresh.module.js +1 -9
  404. package/dist/node/qr-code/encode.js +1 -583
  405. package/dist/node/qr-code/qr-code.js +1 -41
  406. package/dist/node/qr-code/qr-code.module.js +1 -6
  407. package/dist/node/radial-progress/radial-progress.js +1 -27
  408. package/dist/node/radial-progress/radial-progress.module.js +1 -6
  409. package/dist/node/radio/radio.js +1 -49
  410. package/dist/node/radio/radio.module.js +1 -9
  411. package/dist/node/radio-card/radio-card.js +1 -64
  412. package/dist/node/radio-card/radio-card.module.js +1 -11
  413. package/dist/node/rating-group/rating-group.js +1 -37
  414. package/dist/node/rating-group/rating-group.module.js +1 -6
  415. package/dist/node/react/src/index.js +1 -141
  416. package/dist/node/relative-time/relative-time.js +1 -66
  417. package/dist/node/relative-time/relative-time.module.js +1 -3
  418. package/dist/node/reorder-list/reorder-list.js +1 -143
  419. package/dist/node/reorder-list/reorder-list.module.js +1 -11
  420. package/dist/node/resizable/resizable.js +1 -80
  421. package/dist/node/resizable/resizable.module.js +1 -8
  422. package/dist/node/scroll-area/scroll-area.js +1 -38
  423. package/dist/node/scroll-area/scroll-area.module.js +1 -3
  424. package/dist/node/search/search.js +1 -96
  425. package/dist/node/search/search.module.js +1 -9
  426. package/dist/node/segmented-control/segmented-control.js +1 -43
  427. package/dist/node/segmented-control/segmented-control.module.js +1 -6
  428. package/dist/node/select/select.js +1 -73
  429. package/dist/node/select/select.module.js +1 -11
  430. package/dist/node/separator/separator.js +1 -19
  431. package/dist/node/separator/separator.module.js +1 -3
  432. package/dist/node/sheet/sheet.js +1 -49
  433. package/dist/node/sheet/sheet.module.js +1 -9
  434. package/dist/node/shell-header/shell-header.js +1 -169
  435. package/dist/node/shell-header/shell-header.module.js +1 -24
  436. package/dist/node/side-nav/side-nav.js +1 -334
  437. package/dist/node/side-nav/side-nav.module.js +1 -31
  438. package/dist/node/skeleton/skeleton.js +1 -23
  439. package/dist/node/skeleton/skeleton.module.js +1 -7
  440. package/dist/node/skip-nav/skip-nav.js +1 -28
  441. package/dist/node/skip-nav/skip-nav.module.js +1 -3
  442. package/dist/node/slider/slider.js +1 -30
  443. package/dist/node/slider/slider.module.js +1 -7
  444. package/dist/node/spinner/spinner.js +1 -18
  445. package/dist/node/spinner/spinner.module.js +1 -6
  446. package/dist/node/stack/stack.js +1 -17
  447. package/dist/node/stack/stack.module.js +1 -6
  448. package/dist/node/stat/stat.js +1 -41
  449. package/dist/node/stat/stat.module.js +1 -11
  450. package/dist/node/status/status.js +1 -25
  451. package/dist/node/status/status.module.js +1 -7
  452. package/dist/node/steps/steps.js +1 -35
  453. package/dist/node/steps/steps.module.js +1 -8
  454. package/dist/node/structured-list/structured-list.js +1 -102
  455. package/dist/node/structured-list/structured-list.module.js +1 -12
  456. package/dist/node/swap/swap.js +1 -36
  457. package/dist/node/swap/swap.module.js +1 -7
  458. package/dist/node/swipe-item/swipe-item.js +1 -62
  459. package/dist/node/swipe-item/swipe-item.module.js +1 -12
  460. package/dist/node/switcher/switcher.js +1 -32
  461. package/dist/node/switcher/switcher.module.js +1 -8
  462. package/dist/node/tabs/tabs.js +1 -98
  463. package/dist/node/tabs/tabs.module.js +1 -8
  464. package/dist/node/tag/tag.js +1 -33
  465. package/dist/node/tag/tag.module.js +1 -6
  466. package/dist/node/tags-input/tags-input.js +1 -68
  467. package/dist/node/tags-input/tags-input.module.js +1 -8
  468. package/dist/node/text/text.js +1 -16
  469. package/dist/node/text/text.module.js +1 -3
  470. package/dist/node/textarea/textarea.js +1 -58
  471. package/dist/node/textarea/textarea.module.js +1 -9
  472. package/dist/node/tile/tile.js +1 -39
  473. package/dist/node/tile/tile.module.js +1 -7
  474. package/dist/node/time-picker/time-picker.js +1 -64
  475. package/dist/node/time-picker/time-picker.module.js +1 -9
  476. package/dist/node/timeline/timeline.js +1 -55
  477. package/dist/node/timeline/timeline.module.js +1 -11
  478. package/dist/node/toast/toast.js +1 -85
  479. package/dist/node/toast/toast.module.js +1 -11
  480. package/dist/node/toc/toc.js +1 -43
  481. package/dist/node/toc/toc.module.js +1 -3
  482. package/dist/node/toc/use-toc-from-region.js +1 -18
  483. package/dist/node/toggle/toggle.js +1 -42
  484. package/dist/node/toggle/toggle.module.js +1 -8
  485. package/dist/node/toggle-group/toggle-group.js +1 -55
  486. package/dist/node/toggle-group/toggle-group.module.js +1 -6
  487. package/dist/node/toggletip/toggletip.js +1 -49
  488. package/dist/node/toggletip/toggletip.module.js +1 -7
  489. package/dist/node/tooltip/tooltip.js +1 -58
  490. package/dist/node/tooltip/tooltip.module.js +1 -6
  491. package/dist/node/tree-view/tree-view.js +1 -201
  492. package/dist/node/tree-view/tree-view.module.js +1 -13
  493. package/dist/node/user/user.js +1 -35
  494. package/dist/node/user/user.module.js +1 -9
  495. package/dist/node/virtual-list/virtual-list.js +1 -40
  496. package/dist/node/virtual-list/virtual-list.module.js +1 -7
  497. package/dist/node/visually-hidden/visually-hidden.js +1 -2
  498. package/dist/node/wheel-picker/wheel-picker.js +1 -84
  499. package/dist/node/wheel-picker/wheel-picker.module.js +1 -8
  500. package/dist/notification/notification.js +1 -140
  501. package/dist/notification/notification.module.js +1 -11
  502. package/dist/number-input/number-input.js +1 -148
  503. package/dist/number-input/number-input.module.js +1 -12
  504. package/dist/otp-input/otp-input.js +1 -70
  505. package/dist/otp-input/otp-input.module.js +1 -6
  506. package/dist/overflow-menu/overflow-menu.js +1 -70
  507. package/dist/overflow-menu/overflow-menu.module.js +1 -7
  508. package/dist/pagination/pagination.js +1 -92
  509. package/dist/pagination/pagination.module.js +1 -11
  510. package/dist/password-input/password-input.js +1 -81
  511. package/dist/password-input/password-input.module.js +1 -11
  512. package/dist/popover/popover.js +1 -51
  513. package/dist/popover/popover.module.js +1 -6
  514. package/dist/popover/use-popover.js +1 -55
  515. package/dist/progress/progress.css +1 -1
  516. package/dist/progress/progress.js +1 -16
  517. package/dist/progress/progress.module.js +1 -6
  518. package/dist/progress-bar/progress-bar.css +1 -1
  519. package/dist/progress-bar/progress-bar.js +1 -42
  520. package/dist/progress-bar/progress-bar.module.js +1 -11
  521. package/dist/progress-circle/progress-circle.js +1 -46
  522. package/dist/progress-circle/progress-circle.module.js +1 -9
  523. package/dist/progress-indicator/progress-indicator.css +1 -1
  524. package/dist/progress-indicator/progress-indicator.js +1 -34
  525. package/dist/progress-indicator/progress-indicator.module.js +1 -10
  526. package/dist/prose/prose.css +1 -1
  527. package/dist/prose/prose.js +1 -13
  528. package/dist/prose/prose.module.js +1 -3
  529. package/dist/pull-to-refresh/pull-to-refresh.js +1 -82
  530. package/dist/pull-to-refresh/pull-to-refresh.module.js +1 -9
  531. package/dist/qr-code/encode.js +1 -583
  532. package/dist/qr-code/qr-code.js +1 -41
  533. package/dist/qr-code/qr-code.module.js +1 -6
  534. package/dist/radial-progress/radial-progress.js +1 -27
  535. package/dist/radial-progress/radial-progress.module.js +1 -6
  536. package/dist/radio/radio.js +1 -49
  537. package/dist/radio/radio.module.js +1 -9
  538. package/dist/radio-card/radio-card.css +1 -1
  539. package/dist/radio-card/radio-card.js +1 -64
  540. package/dist/radio-card/radio-card.module.js +1 -11
  541. package/dist/rating-group/rating-group.js +1 -37
  542. package/dist/rating-group/rating-group.module.js +1 -6
  543. package/dist/react/src/index.js +1 -141
  544. package/dist/relative-time/relative-time.js +1 -66
  545. package/dist/relative-time/relative-time.module.js +1 -3
  546. package/dist/reorder-list/reorder-list.css +1 -1
  547. package/dist/reorder-list/reorder-list.js +1 -143
  548. package/dist/reorder-list/reorder-list.module.js +1 -11
  549. package/dist/resizable/resizable.js +1 -80
  550. package/dist/resizable/resizable.module.js +1 -8
  551. package/dist/scroll-area/scroll-area.css +1 -1
  552. package/dist/scroll-area/scroll-area.js +1 -38
  553. package/dist/scroll-area/scroll-area.module.js +1 -3
  554. package/dist/search/search.js +1 -96
  555. package/dist/search/search.module.js +1 -9
  556. package/dist/segmented-control/segmented-control.js +1 -43
  557. package/dist/segmented-control/segmented-control.module.js +1 -6
  558. package/dist/select/select.js +1 -73
  559. package/dist/select/select.module.js +1 -11
  560. package/dist/separator/separator.js +1 -19
  561. package/dist/separator/separator.module.js +1 -3
  562. package/dist/sheet/sheet.js +1 -49
  563. package/dist/sheet/sheet.module.js +1 -9
  564. package/dist/shell-header/shell-header.css +1 -1
  565. package/dist/shell-header/shell-header.js +1 -169
  566. package/dist/shell-header/shell-header.module.js +1 -24
  567. package/dist/side-nav/side-nav.css +1 -1
  568. package/dist/side-nav/side-nav.js +1 -334
  569. package/dist/side-nav/side-nav.module.js +1 -31
  570. package/dist/skeleton/skeleton.css +1 -1
  571. package/dist/skeleton/skeleton.js +1 -23
  572. package/dist/skeleton/skeleton.module.js +1 -7
  573. package/dist/skip-nav/skip-nav.js +1 -28
  574. package/dist/skip-nav/skip-nav.module.js +1 -3
  575. package/dist/slider/slider.js +1 -30
  576. package/dist/slider/slider.module.js +1 -7
  577. package/dist/spinner/spinner.css +1 -1
  578. package/dist/spinner/spinner.js +1 -18
  579. package/dist/spinner/spinner.module.js +1 -6
  580. package/dist/stack/stack.js +1 -17
  581. package/dist/stack/stack.module.js +1 -6
  582. package/dist/stat/stat.js +1 -41
  583. package/dist/stat/stat.module.js +1 -11
  584. package/dist/status/status.css +1 -1
  585. package/dist/status/status.js +1 -25
  586. package/dist/status/status.module.js +1 -7
  587. package/dist/steps/steps.css +1 -1
  588. package/dist/steps/steps.js +1 -35
  589. package/dist/steps/steps.module.js +1 -8
  590. package/dist/structured-list/structured-list.js +1 -102
  591. package/dist/structured-list/structured-list.module.js +1 -12
  592. package/dist/styles.css +401 -55
  593. package/dist/swap/swap.css +1 -1
  594. package/dist/swap/swap.js +1 -36
  595. package/dist/swap/swap.module.js +1 -7
  596. package/dist/swipe-item/swipe-item.js +1 -62
  597. package/dist/swipe-item/swipe-item.module.js +1 -12
  598. package/dist/switcher/switcher.js +1 -32
  599. package/dist/switcher/switcher.module.js +1 -8
  600. package/dist/tabs/tabs.js +1 -98
  601. package/dist/tabs/tabs.module.js +1 -8
  602. package/dist/tag/tag.js +1 -33
  603. package/dist/tag/tag.module.js +1 -6
  604. package/dist/tags-input/tags-input.js +1 -68
  605. package/dist/tags-input/tags-input.module.js +1 -8
  606. package/dist/text/text.css +1 -1
  607. package/dist/text/text.js +1 -16
  608. package/dist/text/text.module.js +1 -3
  609. package/dist/textarea/textarea.css +1 -1
  610. package/dist/textarea/textarea.js +1 -58
  611. package/dist/textarea/textarea.module.js +1 -9
  612. package/dist/tile/tile.css +1 -1
  613. package/dist/tile/tile.js +1 -39
  614. package/dist/tile/tile.module.js +1 -7
  615. package/dist/time-picker/time-picker.js +1 -64
  616. package/dist/time-picker/time-picker.module.js +1 -9
  617. package/dist/timeline/timeline.js +1 -55
  618. package/dist/timeline/timeline.module.js +1 -11
  619. package/dist/toast/toast.css +1 -1
  620. package/dist/toast/toast.js +1 -85
  621. package/dist/toast/toast.module.js +1 -11
  622. package/dist/toc/toc.css +1 -1
  623. package/dist/toc/toc.js +1 -43
  624. package/dist/toc/toc.module.js +1 -3
  625. package/dist/toc/use-toc-from-region.js +1 -18
  626. package/dist/toggle/toggle.js +1 -42
  627. package/dist/toggle/toggle.module.js +1 -8
  628. package/dist/toggle-group/toggle-group.js +1 -55
  629. package/dist/toggle-group/toggle-group.module.js +1 -6
  630. package/dist/toggletip/toggletip.js +1 -49
  631. package/dist/toggletip/toggletip.module.js +1 -7
  632. package/dist/tooltip/tooltip.css +1 -1
  633. package/dist/tooltip/tooltip.js +1 -58
  634. package/dist/tooltip/tooltip.module.js +1 -6
  635. package/dist/tree-view/tree-view.css +1 -1
  636. package/dist/tree-view/tree-view.js +1 -201
  637. package/dist/tree-view/tree-view.module.js +1 -13
  638. package/dist/user/user.js +1 -35
  639. package/dist/user/user.module.js +1 -9
  640. package/dist/virtual-list/virtual-list.js +1 -40
  641. package/dist/virtual-list/virtual-list.module.js +1 -7
  642. package/dist/visually-hidden/visually-hidden.js +1 -2
  643. package/dist/wheel-picker/wheel-picker.js +1 -84
  644. package/dist/wheel-picker/wheel-picker.module.js +1 -8
  645. package/package.json +4 -4
  646. package/readme.body.md +3 -2
package/dist/index.d.ts CHANGED
@@ -368,6 +368,45 @@ declare function Separator({
368
368
  className,
369
369
  ...props
370
370
  }: SeparatorProps): import("react").JSX.Element;
371
+ type LogoVariant = 'mark' | 'mark-accent' | 'horizontal' | 'stacked' | 'nav';
372
+ interface LogoProps extends HTMLAttributes<HTMLSpanElement> {
373
+ /**
374
+ * The logo renders the mark and, in a lockup, the wordmark — there is no slot for
375
+ * anything else. `never` rather than `Omit<>` because omitting a key off
376
+ * `HTMLAttributes` loses the `style` widening that the signals JSX augmentation
377
+ * applies in an adopter's project, and the spread below then fails to compile there.
378
+ */
379
+ children?: never;
380
+ /**
381
+ * `mark` and `mark-accent` render the square alone; `horizontal`, `stacked` and `nav`
382
+ * add the wordmark. `nav` is the only lockup permitted below 24px.
383
+ *
384
+ * @defaultValue `mark`
385
+ * @see the component manifest
386
+ */
387
+ variant?: LogoVariant;
388
+ /**
389
+ * Mark height in px. Clamped to a 16px floor — below that the notch closes optically.
390
+ *
391
+ * @defaultValue `18` for `nav`, `32` otherwise
392
+ * @see the component manifest
393
+ */
394
+ size?: number;
395
+ }
396
+ /**
397
+ * The cascivo logo: the mark on its own, or one of the three sanctioned lockups.
398
+ *
399
+ * Renders inline SVG rather than an `<img>` on purpose — `currentColor` and
400
+ * `--cascivo-color-accent` only resolve when the SVG is part of the document, which is
401
+ * what lets the logo repaint with whatever `data-theme` subtree it is dropped into.
402
+ */
403
+ declare function Logo({
404
+ variant,
405
+ size,
406
+ className,
407
+ style,
408
+ ...props
409
+ }: LogoProps): import("react").JSX.Element;
371
410
  interface AlertProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {
372
411
  /**
373
412
  * Severity tone: `default` (neutral), `info`, `success`, `warning` or `destructive`. Sets
@@ -556,6 +595,16 @@ interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {
556
595
  hint?: string;
557
596
  error?: string;
558
597
  resize?: 'none' | 'vertical' | 'both';
598
+ /**
599
+ * Grow the control with its content instead of holding the fixed rows height. rows becomes
600
+ * the minimum and --cascivo-textarea-max-block-size (default 20lh) the ceiling. Pure CSS
601
+ * (field-sizing: content) — no measurement and no listener; where unsupported the fixed
602
+ * rows height is kept.
603
+ *
604
+ * @defaultValue `false`
605
+ * @see the component manifest
606
+ */
607
+ autosize?: boolean;
559
608
  }
560
609
  /**
561
610
  * `forwardRef` so `ref` reaches the underlying `<textarea>` — and so it is TYPED.
@@ -1283,6 +1332,11 @@ interface SideNavGroup {
1283
1332
  label?: string;
1284
1333
  items: SideNavItem[];
1285
1334
  }
1335
+ /** What the `header` / `footer` render functions receive. */
1336
+ interface SideNavSlotContext {
1337
+ /** `true` while the nav is collapsed to its icon rail. */
1338
+ collapsed: boolean;
1339
+ }
1286
1340
  interface SideNavProps {
1287
1341
  items?: SideNavItem[];
1288
1342
  groups?: SideNavGroup[];
@@ -1338,11 +1392,20 @@ interface SideNavProps {
1338
1392
  * @see the component manifest
1339
1393
  */
1340
1394
  showCollapseToggle?: boolean;
1341
- /** Content rendered above the items, inside the item padding context. */
1342
- header?: ReactNode;
1395
+ /**
1396
+ * Content rendered above the items, inside the item padding context.
1397
+ *
1398
+ * Accepts a render function as well as a node: `header={({ collapsed }) => …}` receives
1399
+ * the live rail state, so a team switcher can shrink to its avatar on the rail instead of
1400
+ * being clipped. `SideNavItem.render` already worked this way; the slots did not, which is
1401
+ * what forced an adopter to control `collapsed` from outside purely to read it
1402
+ * (2026-08-31 report §18).
1403
+ */
1404
+ header?: ReactNode | ((ctx: SideNavSlotContext) => ReactNode);
1343
1405
  /** Content rendered above the collapse toggle, inside the item padding context —
1344
- * it lines up with the nav items above it, exactly as `header` does. */
1345
- footer?: ReactNode;
1406
+ * it lines up with the nav items above it, exactly as `header` does. Accepts the same
1407
+ * `({ collapsed }) => …` render function. */
1408
+ footer?: ReactNode | ((ctx: SideNavSlotContext) => ReactNode);
1346
1409
  className?: string;
1347
1410
  }
1348
1411
  declare function SideNav({
@@ -1641,7 +1704,19 @@ interface OverflowMenuProps {
1641
1704
  */
1642
1705
  label?: string;
1643
1706
  size?: 'sm' | 'md';
1707
+ /**
1708
+ * When true, disables the control and removes it from the tab order.
1709
+ *
1710
+ * @defaultValue `false`
1711
+ * @see the component manifest
1712
+ */
1644
1713
  disabled?: boolean;
1714
+ /**
1715
+ * Tab-order position of the trigger. A composite widget that manages its own focus (a
1716
+ * `DataTable` in grid keyboard mode) passes `-1` so the menu stays reachable by Enter on
1717
+ * its cell without becoming an extra Tab stop.
1718
+ */
1719
+ tabIndex?: number;
1645
1720
  className?: string;
1646
1721
  }
1647
1722
  declare function OverflowMenu({
@@ -1652,6 +1727,7 @@ declare function OverflowMenu({
1652
1727
  label,
1653
1728
  size,
1654
1729
  disabled,
1730
+ tabIndex,
1655
1731
  className
1656
1732
  }: OverflowMenuProps): import("react").JSX.Element;
1657
1733
  interface SearchProps {
@@ -1698,13 +1774,18 @@ interface SearchProps {
1698
1774
  */
1699
1775
  label?: string;
1700
1776
  /**
1701
- * Invisible accessible name, for when a visible element outside this component already
1702
- * labels it and `label` would render that text a second time.
1777
+ * Accessible name set through `aria-label` instead of a rendered `<label>` element.
1703
1778
  *
1704
- * `label` on this component is **visible**. `IconButton.label` and `Sparkline.label` are
1705
- * invisible names, so an adopter arriving with that prior writes `label` here and gets the
1706
- * text twice (2026-08-22 report item 13). Both props are listed side by side, each saying
1707
- * which it is.
1779
+ * ⚠ On `Search`, **both** props give an invisible name — `label` renders a real `<label>`
1780
+ * that the stylesheet visually hides (see it above). The two differ in mechanism, not in
1781
+ * what you see: `label` names the control through a `<label for>` association, `ariaLabel`
1782
+ * through the attribute. Use `ariaLabel` when a visible element outside the component
1783
+ * already labels the field, so nothing is announced twice; use `label` otherwise.
1784
+ *
1785
+ * This docblock previously read "`label` on this component is **visible**", copied from
1786
+ * `Input`/`Select`/`Toggle` where that is true. It is not true here, and the contradiction
1787
+ * sat inside the `.d.ts` the docs tell you to trust over everything else (2026-08-31
1788
+ * report §20).
1708
1789
  */
1709
1790
  ariaLabel?: string;
1710
1791
  /**
@@ -1798,12 +1879,94 @@ interface NumberInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>, '
1798
1879
  * incomplete, which is why the rule is a guard and not a checklist.
1799
1880
  */
1800
1881
  declare const NumberInput: import("react").ForwardRefExoticComponent<NumberInputProps & import("react").RefAttributes<HTMLInputElement>>;
1882
+ /**
1883
+ * Per-column filtering, kept pure so the table's filter pipeline is testable without a DOM
1884
+ * and stays O(rows) per change — never per render.
1885
+ *
1886
+ * Three filter shapes cover what dashboards actually ask for (the same three TanStack's
1887
+ * column-filtering guide leads with): a substring on text, a set of allowed values on an
1888
+ * enumerated column, and a numeric range. Values arrive from the table's own inputs or from
1889
+ * a controlled `filters` prop, so the shape is a plain serialisable object — it round-trips
1890
+ * through a URL or storage unchanged.
1891
+ */
1892
+ /** The kind of filter control a column offers. */
1893
+ type ColumnFilterKind = 'text' | 'select' | 'range';
1894
+ /** The current value of one column's filter. An inactive filter is simply absent. */
1895
+ type ColumnFilterValue = {
1896
+ kind: 'text';
1897
+ value: string;
1898
+ } | {
1899
+ kind: 'select';
1900
+ values: string[];
1901
+ } | {
1902
+ kind: 'range';
1903
+ min?: number;
1904
+ max?: number;
1905
+ };
1906
+ /** Active filters by column key. */
1907
+ type ColumnFilters = Record<string, ColumnFilterValue>;
1908
+ /**
1909
+ * Column layout as data: which columns show, in what order, how wide, and which stick to
1910
+ * an edge. Every transition the header menu and the resize handle perform is a pure
1911
+ * function here, so the table never reasons about layout in JSX and each rule is
1912
+ * testable on its own.
1913
+ *
1914
+ * The shape is deliberately a plain object of keys (`ColumnState`): it round-trips through
1915
+ * storage or a URL, and it survives the column definitions changing underneath it — a key
1916
+ * that no longer exists is ignored, a new column simply takes its definition position.
1917
+ */
1918
+ /** Which edge a pinned column sticks to. */
1919
+ type PinSide = 'start' | 'end';
1920
+ /** User-adjustable column layout. All fields optional; an absent field means "as defined". */
1921
+ interface ColumnState {
1922
+ /** Keys of hidden columns. At least one column always stays visible. */
1923
+ hidden?: string[];
1924
+ /** Display order of column keys; keys not listed follow in definition order. */
1925
+ order?: string[];
1926
+ /** Explicit widths in px, by key — what the resize handle writes. */
1927
+ widths?: Record<string, number>;
1928
+ /** Pinned columns by key. Pinned-start columns render first, pinned-end last. */
1929
+ pinned?: Record<string, PinSide>;
1930
+ }
1931
+ /**
1932
+ * Row grouping, aggregation and column-group spans as data. The table's body is a flat
1933
+ * list either way — grouping just interleaves group rows with the leaf rows they own, so
1934
+ * paging, the virtual window and the grid keyboard model need no notion of a tree.
1935
+ */
1936
+ /** Built-in aggregations for `Column.aggregate`. */
1937
+ type AggregateKind = 'sum' | 'avg' | 'min' | 'max' | 'count';
1938
+ /** A band of columns under one header (`columnGroups`). */
1939
+ interface ColumnGroup {
1940
+ header: string;
1941
+ /** Column keys in the band. Non-adjacent keys render as separate spans. */
1942
+ columns: string[];
1943
+ }
1801
1944
  interface Column<Row> {
1802
1945
  key: string;
1803
1946
  header: string;
1804
1947
  sortable?: boolean;
1805
1948
  render?: (row: Row) => ReactNode;
1806
1949
  align?: 'start' | 'end';
1950
+ /**
1951
+ * Offer a per-column filter in a row under the header: `'text'` is a substring input,
1952
+ * `'select'` a faceted checklist of the column's distinct values with counts, `'range'` a
1953
+ * numeric min/max pair. Filters AND together and combine with the global search; the
1954
+ * current values are readable and controllable through the `filters` props.
1955
+ */
1956
+ filter?: ColumnFilterKind;
1957
+ /**
1958
+ * Let the user edit this column's cells in place. Each cell renders an `Editable`
1959
+ * (click, Enter or F2 to start; Enter commits, Escape cancels) and commits through the
1960
+ * table's `onCellEdit`. Ignored when the column has a `render` — a custom cell brings its
1961
+ * own control — or the table has no `onCellEdit`.
1962
+ */
1963
+ editable?: boolean;
1964
+ /**
1965
+ * What a group row and the `totals` row show for this column: a built-in reduction over
1966
+ * the numeric cell values (`'count'` counts rows), or a function of the rows for anything
1967
+ * else — a formatted currency, a distinct count, a sparkline.
1968
+ */
1969
+ aggregate?: AggregateKind | ((rows: Row[]) => ReactNode);
1807
1970
  /**
1808
1971
  * Preferred column width, any CSS length (`'8rem'`, `'120px'`, `'12%'`). Set it on
1809
1972
  * identifier-shaped columns (ids, statuses, dates) so they stop stealing space from the
@@ -1841,10 +2004,64 @@ interface Column<Row> {
1841
2004
  minWidth?: string;
1842
2005
  }
1843
2006
  type SortDirection = 'asc' | 'desc';
1844
- interface SortState {
2007
+ /** One sorted column. */
2008
+ interface SortKey {
1845
2009
  key: string;
1846
2010
  direction: SortDirection;
1847
2011
  }
2012
+ /**
2013
+ * The active sort. `thenBy` lists the secondary columns that break ties, in order — set
2014
+ * by Shift-clicking headers when `multiSort` is on, or passed directly.
2015
+ */
2016
+ interface SortState extends SortKey {
2017
+ thenBy?: SortKey[];
2018
+ }
2019
+ /** One entry in a row's actions menu (`rowActions`). */
2020
+ interface RowAction<Row> {
2021
+ id: string;
2022
+ label: string;
2023
+ /** Activation handler; receives the row the menu belongs to. */
2024
+ onSelect: (row: Row) => void;
2025
+ destructive?: boolean;
2026
+ disabled?: boolean;
2027
+ icon?: ReactNode;
2028
+ }
2029
+ /** Everything the table needs the server to apply, when `server` is set. */
2030
+ interface TableQuery {
2031
+ sort: SortState | undefined;
2032
+ /** Trimmed global search text; empty when the box is blank. */
2033
+ search: string;
2034
+ filters: ColumnFilters;
2035
+ /** 1-based page. */
2036
+ page: number;
2037
+ pageSize: number;
2038
+ }
2039
+ /**
2040
+ * Server-driven mode: the table renders `rows` as the current page verbatim and asks the
2041
+ * server for anything that would change them. Sort, search, per-column filters and paging
2042
+ * all stop running on the client at once — one switch, not four.
2043
+ */
2044
+ interface DataTableServer {
2045
+ /** Total rows across every page; drives the pager and the range label. */
2046
+ totalItems?: number;
2047
+ /**
2048
+ * Called with the full query whenever sort, search, a filter, the page or the page size
2049
+ * changes. Not called on mount: the rows you passed for the initial render are the first
2050
+ * page.
2051
+ */
2052
+ onQueryChange: (query: TableQuery) => void;
2053
+ }
2054
+ /** Which column-layout controls the table offers. All off by default. */
2055
+ interface ColumnSettings {
2056
+ /** A "Columns" menu in the toolbar that shows and hides columns. */
2057
+ visibility?: boolean;
2058
+ /** A drag handle on each header's trailing edge; arrow keys nudge it, Home resets to auto. */
2059
+ resizable?: boolean;
2060
+ /** "Move left" / "Move right" in each column's header menu. */
2061
+ reorderable?: boolean;
2062
+ /** "Pin to start" / "Pin to end" in each column's header menu; pinned columns stay put while the rest scroll. */
2063
+ pinnable?: boolean;
2064
+ }
1848
2065
  interface DataTableLabels {
1849
2066
  search?: string;
1850
2067
  empty?: string;
@@ -1854,6 +2071,31 @@ interface DataTableLabels {
1854
2071
  expandRow?: string;
1855
2072
  previousPage?: string;
1856
2073
  nextPage?: string;
2074
+ columns?: string;
2075
+ actions?: string;
2076
+ noResults?: string;
2077
+ clearFilters?: string;
2078
+ filterColumn?: (column: string) => string;
2079
+ min?: string;
2080
+ max?: string;
2081
+ all?: string;
2082
+ columnMenu?: (column: string) => string;
2083
+ sortAscending?: string;
2084
+ sortDescending?: string;
2085
+ clearSort?: string;
2086
+ moveLeft?: string;
2087
+ moveRight?: string;
2088
+ pinStart?: string;
2089
+ pinEnd?: string;
2090
+ unpin?: string;
2091
+ hideColumn?: string;
2092
+ resizeColumn?: (column: string) => string;
2093
+ /** Accessible name of an editable cell's control; receives the column header. */
2094
+ editCell?: (column: string) => string;
2095
+ /** Label of the `totals` row. */
2096
+ totals?: string;
2097
+ /** The export button. */
2098
+ exportCsv?: string;
1857
2099
  }
1858
2100
  interface DataTableProps<Row> {
1859
2101
  columns: Column<Row>[];
@@ -1870,9 +2112,15 @@ interface DataTableProps<Row> {
1870
2112
  * @see the component manifest
1871
2113
  */
1872
2114
  searchable?: boolean;
2115
+ /**
2116
+ * Client-side paging, or the pager for a `server`-driven table. `page` makes the current
2117
+ * page controlled; with `server`, `pageSize`/`page` are echoed back in every `TableQuery`.
2118
+ */
1873
2119
  pagination?: {
1874
2120
  pageSize: number;
1875
2121
  pageSizeOptions?: number[];
2122
+ page?: number;
2123
+ onPageChange?: (page: number) => void;
1876
2124
  };
1877
2125
  selection?: {
1878
2126
  mode: 'single' | 'multi';
@@ -1885,6 +2133,109 @@ interface DataTableProps<Row> {
1885
2133
  onClick: (selectedIds: string[]) => void;
1886
2134
  }[];
1887
2135
  renderExpandedRow?: (row: Row) => ReactNode;
2136
+ /** Per-column filter values (controlled). Columns opt in with `Column.filter`. */
2137
+ filters?: ColumnFilters;
2138
+ /** Initial per-column filter values (uncontrolled). */
2139
+ defaultFilters?: ColumnFilters;
2140
+ /** Called with the full filter map whenever any column filter changes. */
2141
+ onFiltersChange?: (filters: ColumnFilters) => void;
2142
+ /**
2143
+ * Shown instead of `emptyState` when there ARE rows but the search or filters match none
2144
+ * of them — a different message from "no data", and the moment to offer a reset.
2145
+ */
2146
+ noResultsState?: ReactNode;
2147
+ /** Extra controls rendered in the toolbar, next to the search box (exports, primary actions). */
2148
+ toolbar?: ReactNode;
2149
+ /**
2150
+ * Per-row actions. Returns the menu entries for a row; the table renders them as a
2151
+ * trailing "⋯" overflow menu column, keyboard-reachable like every other cell control.
2152
+ */
2153
+ rowActions?: (row: Row) => RowAction<Row>[];
2154
+ /** Column layout (controlled): hidden, order, widths, pinned. See {@link ColumnState}. */
2155
+ columnState?: ColumnState;
2156
+ /** Initial column layout (uncontrolled). */
2157
+ defaultColumnState?: ColumnState;
2158
+ /** Called with the full column layout whenever the user changes it. */
2159
+ onColumnStateChange?: (state: ColumnState) => void;
2160
+ /** Which column-layout controls to offer; see {@link ColumnSettings}. */
2161
+ columnSettings?: ColumnSettings;
2162
+ /** Hand sort, search, filters and paging to the server; see {@link DataTableServer}. */
2163
+ server?: DataTableServer;
2164
+ /**
2165
+ * Allow sorting by more than one column: Shift-click a header adds it as a tie-breaker
2166
+ * (`SortState.thenBy`); a plain click replaces the whole sort. Sorted headers show their
2167
+ * level.
2168
+ *
2169
+ * @defaultValue `false`
2170
+ * @see the component manifest
2171
+ */
2172
+ multiSort?: boolean;
2173
+ /**
2174
+ * Remember the user's column layout and sort across reloads, in local storage under this
2175
+ * key. Applies when the corresponding props are uncontrolled; a controlled `columnState`
2176
+ * or `sort` still wins. Two tables with the same key share the preference.
2177
+ */
2178
+ stateKey?: string;
2179
+ /**
2180
+ * How the keyboard moves through the table. `'row'` keeps every control in the Tab order
2181
+ * and lets the arrows step between them. `'grid'` is the APG data-grid pattern: the table
2182
+ * is ONE Tab stop, the arrows move a focused cell, Home/End jump within the row,
2183
+ * Ctrl+Home/End to the corners, PageUp/PageDown by a screenful, Enter or F2 enters the
2184
+ * cell's control and Escape returns to the cell. Cells outside the virtualized window are
2185
+ * scrolled to. Prefer `'grid'` for wide or editable tables, where tabbing through every
2186
+ * control is the complaint.
2187
+ *
2188
+ * @defaultValue `row`
2189
+ * @see the component manifest
2190
+ */
2191
+ keyboardNavigation?: 'row' | 'grid';
2192
+ /**
2193
+ * Commits an inline edit: the row, the edited column's key and the new text. Enables
2194
+ * editing for every column marked `editable`; the table does not mutate `rows` itself.
2195
+ */
2196
+ onCellEdit?: (row: Row, key: string, value: string) => void;
2197
+ /**
2198
+ * Group the rows by one or more columns, in order. Each group is a collapsible row
2199
+ * showing its value, its row count and every `aggregate` column's reduction; leaves keep
2200
+ * the current sort inside their group. Groups appear in order of first occurrence, so
2201
+ * sort by the grouped column to order them.
2202
+ */
2203
+ groupBy?: string | string[];
2204
+ /**
2205
+ * Show a totals row under the body with each `aggregate` column's reduction over every
2206
+ * row that passes the search and filters (not just the page). Sticks to the bottom of
2207
+ * the scroller.
2208
+ *
2209
+ * @defaultValue `false`
2210
+ * @see the component manifest
2211
+ */
2212
+ totals?: boolean;
2213
+ /**
2214
+ * Rows kept in view outside sort, search, filters, paging and the virtual window: `top`
2215
+ * rows sit under the header (stuck there with `stickyHeader`), `bottom` rows above the
2216
+ * totals. Rendered with the same columns as the body.
2217
+ */
2218
+ pinnedRows?: {
2219
+ top?: Row[];
2220
+ bottom?: Row[];
2221
+ };
2222
+ /**
2223
+ * Bands of columns under a shared header, rendered as a row above the column headers.
2224
+ * A band's columns should be adjacent; reordering them apart splits the band.
2225
+ */
2226
+ columnGroups?: ColumnGroup[];
2227
+ /**
2228
+ * An "Export CSV" button in the toolbar: every row passing the search and filters (all
2229
+ * pages; with `server`, the rows given), in the current sort, visible columns as headers,
2230
+ * raw cell values as fields (RFC 4180, UTF-8 with BOM). Pass `{ filename }` to name the
2231
+ * file; it defaults to the `title`.
2232
+ *
2233
+ * @defaultValue `false`
2234
+ * @see the component manifest
2235
+ */
2236
+ exportable?: boolean | {
2237
+ filename?: string;
2238
+ };
1888
2239
  /**
1889
2240
  * Row height preset.
1890
2241
  *
@@ -1941,17 +2292,16 @@ interface DataTableProps<Row> {
1941
2292
  */
1942
2293
  virtualized?: boolean;
1943
2294
  /**
1944
- * Fixed row height in px, used to compute the virtualized window.
2295
+ * Row height in px for the virtualized window.
1945
2296
  *
1946
- * @defaultValue `40`
1947
- * @see the component manifest
2297
+ * Measured from the first rendered row when omitted, so the density presets stay correct
2298
+ * the old fixed default of 40 never matched them (rows are 36/48/60 px plus a border),
2299
+ * and a wrong value scales the whole scrollbar. Set it only for custom-sized rows.
1948
2300
  */
1949
2301
  rowHeight?: number;
1950
2302
  /**
1951
- * Number of rows rendered in the virtualized window.
1952
- *
1953
- * @defaultValue `20`
1954
- * @see the component manifest
2303
+ * Rows rendered per window. Derived from the scroller's height when omitted; set it only
2304
+ * to render a fixed count regardless of height.
1955
2305
  */
1956
2306
  windowSize?: number;
1957
2307
  /**
@@ -1975,6 +2325,26 @@ declare function DataTable<Row>({
1975
2325
  selection,
1976
2326
  batchActions,
1977
2327
  renderExpandedRow,
2328
+ filters,
2329
+ defaultFilters,
2330
+ onFiltersChange,
2331
+ noResultsState,
2332
+ toolbar,
2333
+ rowActions,
2334
+ columnState,
2335
+ defaultColumnState,
2336
+ onColumnStateChange,
2337
+ columnSettings,
2338
+ server,
2339
+ multiSort,
2340
+ stateKey,
2341
+ keyboardNavigation,
2342
+ onCellEdit,
2343
+ groupBy,
2344
+ totals,
2345
+ pinnedRows,
2346
+ columnGroups,
2347
+ exportable,
1978
2348
  density,
1979
2349
  zebra,
1980
2350
  stickyHeader,
@@ -2050,6 +2420,12 @@ interface CommandMenuProps {
2050
2420
  open: boolean;
2051
2421
  onOpenChange: (open: boolean) => void;
2052
2422
  groups: CommandGroup[];
2423
+ /**
2424
+ * Placeholder text shown when the field is empty.
2425
+ *
2426
+ * @defaultValue `Type a command or search…`
2427
+ * @see the component manifest
2428
+ */
2053
2429
  placeholder?: string;
2054
2430
  /**
2055
2431
  * Text shown when no commands match the query.
@@ -2196,22 +2572,49 @@ declare function Form<T extends Record<string, unknown>>({
2196
2572
  className,
2197
2573
  ...props
2198
2574
  }: FormProps<T>): import("react").JSX.Element;
2575
+ /**
2576
+ * Option filtering, grouping and match highlighting for `Combobox`, kept pure so the list
2577
+ * pipeline is testable without a DOM and runs once per query change rather than per render.
2578
+ *
2579
+ * Matching folds diacritics: a user typing `zurich` expects `Zürich`, and a filtered option
2580
+ * list is exactly where that gap bites, because the user cannot see why their query returns
2581
+ * nothing. Folding is done per code point so the folded string stays index-aligned with the
2582
+ * original — that alignment is what lets `highlightSegments` mark the match on the label the
2583
+ * user actually reads rather than on a normalised copy of it.
2584
+ *
2585
+ * `MultiSelect` carries the same four operations against its own option type. They are
2586
+ * deliberately not shared: a registry component is copied into an adopter's project as a
2587
+ * self-contained folder, so a cross-component import would make `cascivo add combobox`
2588
+ * drag in a sibling component's files. The catalog already accepts this for the menu /
2589
+ * context-menu navigation pair.
2590
+ */
2591
+ /** One selectable option. A list mixing grouped and ungrouped options renders the ungrouped ones first. */
2199
2592
  interface ComboboxOption {
2200
- value: string;
2201
2593
  label: string;
2594
+ value: string;
2202
2595
  /**
2203
- * When true, disables the control and removes it from the tab order.
2596
+ * When true, the option cannot be selected and is skipped by keyboard navigation.
2204
2597
  *
2205
2598
  * @defaultValue `false`
2206
2599
  * @see the component manifest
2207
2600
  */
2208
2601
  disabled?: boolean;
2602
+ /** Optional group heading this option belongs to. */
2603
+ group?: string;
2209
2604
  }
2210
2605
  interface ComboboxLabels {
2211
2606
  placeholder?: string;
2212
2607
  empty?: string;
2213
2608
  clear?: string;
2609
+ /**
2610
+ * @deprecated Named the in-popup search input, which no longer exists — the field itself is
2611
+ * the combobox. Ignored; removed in 2.0.
2612
+ */
2214
2613
  search?: string;
2614
+ /** Text shown in place of the empty message while `loading` is true. */
2615
+ loading?: string;
2616
+ /** Template for the "create" row; `{label}` is replaced with the typed text. */
2617
+ create?: string;
2215
2618
  }
2216
2619
  interface ComboboxProps {
2217
2620
  /**
@@ -2240,7 +2643,9 @@ interface ComboboxProps {
2240
2643
  */
2241
2644
  clearable?: boolean;
2242
2645
  /**
2243
- * When true, shows a search/filter input.
2646
+ * When true the field is a text input that filters the list as the user types (the APG
2647
+ * editable combobox). When false it is a button that opens the list, and type-to-select
2648
+ * jumps to a matching option (the APG select-only combobox).
2244
2649
  *
2245
2650
  * @defaultValue `true`
2246
2651
  * @see the component manifest
@@ -2260,7 +2665,49 @@ interface ComboboxProps {
2260
2665
  hint?: string;
2261
2666
  error?: string;
2262
2667
  size?: 'sm' | 'md' | 'lg';
2668
+ /**
2669
+ * When true, disables the control and removes it from the tab order.
2670
+ *
2671
+ * @defaultValue `false`
2672
+ * @see the component manifest
2673
+ */
2263
2674
  disabled?: boolean;
2675
+ /**
2676
+ * When true, the list reports itself as busy and shows a loading row instead of the empty
2677
+ * message.
2678
+ *
2679
+ * @defaultValue `false`
2680
+ * @see the component manifest
2681
+ */
2682
+ loading?: boolean;
2683
+ /** Called with the search text on every keystroke. Pair it with `filter={() => true}` for a server-driven list. */
2684
+ onSearchChange?: (query: string) => void;
2685
+ /** Replaces the built-in diacritic-insensitive matcher. */
2686
+ filter?: (option: ComboboxOption, query: string) => boolean;
2687
+ /**
2688
+ * When true, offers the current search text as a new option.
2689
+ *
2690
+ * @defaultValue `false`
2691
+ * @see the component manifest
2692
+ */
2693
+ creatable?: boolean;
2694
+ /** Called with the typed label when the user picks the "create" row. */
2695
+ onCreate?: (label: string) => void;
2696
+ /** Submitted with a surrounding form — a hidden input carrying the selected value. */
2697
+ name?: string;
2698
+ /** Marks the control as required for assistive technology. */
2699
+ required?: boolean;
2700
+ /** Controlled open state of the listbox. */
2701
+ open?: boolean;
2702
+ /**
2703
+ * The initial open state when uncontrolled.
2704
+ *
2705
+ * @defaultValue `false`
2706
+ * @see the component manifest
2707
+ */
2708
+ defaultOpen?: boolean;
2709
+ /** Called when the listbox opens or closes. */
2710
+ onOpenChange?: (open: boolean) => void;
2264
2711
  labels?: ComboboxLabels;
2265
2712
  className?: string;
2266
2713
  id?: string;
@@ -2278,6 +2725,16 @@ declare function Combobox({
2278
2725
  error,
2279
2726
  size,
2280
2727
  disabled,
2728
+ loading,
2729
+ onSearchChange,
2730
+ filter,
2731
+ creatable,
2732
+ onCreate,
2733
+ name,
2734
+ required,
2735
+ open,
2736
+ defaultOpen,
2737
+ onOpenChange,
2281
2738
  labels,
2282
2739
  className,
2283
2740
  id,
@@ -2290,6 +2747,8 @@ interface DatePickerLabels {
2290
2747
  previousMonth?: string;
2291
2748
  nextMonth?: string;
2292
2749
  clear?: string;
2750
+ open?: string;
2751
+ today?: string;
2293
2752
  }
2294
2753
  interface DatePickerProps {
2295
2754
  /**
@@ -2311,6 +2770,8 @@ interface DatePickerProps {
2311
2770
  onValueChange?: (value: string | undefined) => void;
2312
2771
  min?: string;
2313
2772
  max?: string;
2773
+ /** Rejects individual dates the bounds allow — holidays, weekends, taken slots. */
2774
+ disabledDate?: (date: Date) => boolean;
2314
2775
  /**
2315
2776
  * Shows a clear button
2316
2777
  *
@@ -2345,6 +2806,30 @@ interface DatePickerProps {
2345
2806
  * @see the component manifest
2346
2807
  */
2347
2808
  disabled?: boolean;
2809
+ /**
2810
+ * When true, the field accepts a typed date as well as one picked from the calendar.
2811
+ *
2812
+ * @defaultValue `true`
2813
+ * @see the component manifest
2814
+ */
2815
+ typeable?: boolean;
2816
+ /** Formatting options for the displayed date. Defaults to the locale's numeric form. */
2817
+ format?: Intl.DateTimeFormatOptions;
2818
+ /**
2819
+ * When true, the calendar offers a button that jumps to the current month.
2820
+ *
2821
+ * @defaultValue `false`
2822
+ * @see the component manifest
2823
+ */
2824
+ showToday?: boolean;
2825
+ /** Submitted with a surrounding form — a hidden input carrying the ISO value. */
2826
+ name?: string;
2827
+ /** Marks the control as required for assistive technology. */
2828
+ required?: boolean;
2829
+ /** Controlled open state of the calendar popup. */
2830
+ open?: boolean;
2831
+ /** Called when the popup opens or closes. */
2832
+ onOpenChange?: (open: boolean) => void;
2348
2833
  labels?: DatePickerLabels;
2349
2834
  className?: string;
2350
2835
  id?: string;
@@ -2355,6 +2840,7 @@ declare function DatePicker({
2355
2840
  onValueChange,
2356
2841
  min,
2357
2842
  max,
2843
+ disabledDate,
2358
2844
  clearable,
2359
2845
  label,
2360
2846
  ariaLabel,
@@ -2362,6 +2848,13 @@ declare function DatePicker({
2362
2848
  error,
2363
2849
  size,
2364
2850
  disabled,
2851
+ typeable,
2852
+ format,
2853
+ showToday,
2854
+ name,
2855
+ required,
2856
+ open,
2857
+ onOpenChange,
2365
2858
  labels,
2366
2859
  className,
2367
2860
  id,
@@ -2793,16 +3286,29 @@ interface PasswordInputProps extends Omit<InputHTMLAttributes<HTMLInputElement>,
2793
3286
  * incomplete, which is why the rule is a guard and not a checklist.
2794
3287
  */
2795
3288
  declare const PasswordInput: import("react").ForwardRefExoticComponent<PasswordInputProps & import("react").RefAttributes<HTMLInputElement>>;
3289
+ /**
3290
+ * Option filtering, grouping and match highlighting, kept pure so the list pipeline is
3291
+ * testable without a DOM and runs once per query change rather than per render.
3292
+ *
3293
+ * Matching folds diacritics because a German user typing `zurich` expects `Zürich`, and an
3294
+ * option list is exactly where that gap bites: the user cannot see why their query returns
3295
+ * nothing. Folding is done per code point so the folded string stays index-aligned with the
3296
+ * original — that alignment is what lets `highlightSegments` mark the match on the label the
3297
+ * user actually reads rather than on a normalised copy of it.
3298
+ */
3299
+ /** One selectable option. `group` is optional; a list mixing grouped and ungrouped options renders the ungrouped ones first. */
2796
3300
  interface MultiSelectOption {
2797
3301
  label: string;
2798
3302
  value: string;
2799
3303
  /**
2800
- * When true, disables the control and removes it from the tab order.
3304
+ * When true, the option cannot be selected and is skipped by keyboard navigation.
2801
3305
  *
2802
3306
  * @defaultValue `false`
2803
3307
  * @see the component manifest
2804
3308
  */
2805
3309
  disabled?: boolean;
3310
+ /** Optional group heading this option belongs to. */
3311
+ group?: string;
2806
3312
  }
2807
3313
  interface MultiSelectLabels {
2808
3314
  label?: string;
@@ -2810,23 +3316,155 @@ interface MultiSelectLabels {
2810
3316
  selected?: (count: number) => string;
2811
3317
  search?: string;
2812
3318
  noResults?: string;
3319
+ /** Text shown in place of the no-results message while `loading` is true. */
3320
+ loading?: string;
3321
+ clear?: string;
3322
+ remove?: string;
3323
+ /** Text on the select-all row while nothing is selected. */
3324
+ selectAll?: string;
3325
+ clearAll?: string;
3326
+ create?: string;
2813
3327
  }
2814
- interface MultiSelectProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
3328
+ interface MultiSelectProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'defaultValue'> {
3329
+ /**
3330
+ * Wired automatically by a wrapping `Field` — its label id. Forwarded to the focusable
3331
+ * control so the Field's label names it.
3332
+ */
3333
+ 'aria-labelledby'?: string;
3334
+ /**
3335
+ * Wired automatically by a wrapping `Field` — the ids of its hint/error text. **Merged**
3336
+ * with this component's own `hint`/`error` ids rather than replacing them, so both are
3337
+ * announced.
3338
+ */
3339
+ 'aria-describedby'?: string;
3340
+ /** Wired automatically by a wrapping `Field` when it is in an error state. */
3341
+ 'aria-invalid'?: boolean;
2815
3342
  options: MultiSelectOption[];
2816
- value: string[];
2817
- onValueChange: (v: string[]) => void;
3343
+ /** The controlled value. Omit it and pass `defaultValue` to let the component own the selection. */
3344
+ value?: string[];
3345
+ /**
3346
+ * The initial value when uncontrolled.
3347
+ *
3348
+ * @defaultValue `[]`
3349
+ * @see the component manifest
3350
+ */
3351
+ defaultValue?: string[];
3352
+ /** Called with the new value when it changes. */
3353
+ onValueChange?: (value: string[]) => void;
2818
3354
  placeholder?: string;
3355
+ /** Visible field label. */
3356
+ label?: string;
3357
+ /**
3358
+ * Invisible accessible name, for when a visible element outside this component already
3359
+ * labels it and `label` would render that text a second time.
3360
+ *
3361
+ * `label` on this component is **visible**. `IconButton.label` and `Sparkline.label` are
3362
+ * invisible names, so an adopter arriving with that prior writes `label` here and gets the
3363
+ * text twice (2026-08-22 report item 13). Both props are listed side by side, each saying
3364
+ * which it is.
3365
+ */
3366
+ ariaLabel?: string;
3367
+ hint?: string;
3368
+ error?: string;
3369
+ /**
3370
+ * How the trigger summarises the selection: a count, or one removable chip per value.
3371
+ *
3372
+ * @defaultValue `'count'`
3373
+ * @see the component manifest
3374
+ */
3375
+ display?: 'count' | 'chips';
3376
+ /**
3377
+ * When true, disables the control and removes it from the tab order.
3378
+ *
3379
+ * @defaultValue `false`
3380
+ * @see the component manifest
3381
+ */
2819
3382
  disabled?: boolean;
3383
+ /**
3384
+ * When true, shows a control that clears every selected value.
3385
+ *
3386
+ * @defaultValue `false`
3387
+ * @see the component manifest
3388
+ */
3389
+ clearable?: boolean;
3390
+ /**
3391
+ * When true, shows a row that selects or clears every enabled option at once.
3392
+ *
3393
+ * @defaultValue `false`
3394
+ * @see the component manifest
3395
+ */
3396
+ selectAll?: boolean;
3397
+ /** Maximum number of values that may be selected. Further options become unselectable once reached. */
3398
+ max?: number;
3399
+ /**
3400
+ * When true, offers the current search text as a new option.
3401
+ *
3402
+ * @defaultValue `false`
3403
+ * @see the component manifest
3404
+ */
3405
+ creatable?: boolean;
3406
+ /** Called with the typed label when the user picks the "create" row. */
3407
+ onCreate?: (label: string) => void;
3408
+ /**
3409
+ * When true, the list reports itself as busy and shows a loading row instead of the
3410
+ * no-results message.
3411
+ *
3412
+ * @defaultValue `false`
3413
+ * @see the component manifest
3414
+ */
3415
+ loading?: boolean;
3416
+ /** Called with the search text on every keystroke. Pair it with `filter={() => true}` for a server-driven list. */
3417
+ onSearchChange?: (query: string) => void;
3418
+ /** Replaces the built-in diacritic-insensitive matcher. */
3419
+ filter?: (option: MultiSelectOption, query: string) => boolean;
3420
+ /**
3421
+ * When true, shows the search field. The list is keyboard-navigable either way.
3422
+ *
3423
+ * @defaultValue `true`
3424
+ * @see the component manifest
3425
+ */
3426
+ searchable?: boolean;
3427
+ /**
3428
+ * Field height.
3429
+ *
3430
+ * @defaultValue `'md'`
3431
+ * @see the component manifest
3432
+ */
3433
+ size?: 'sm' | 'md' | 'lg';
3434
+ /** Submitted with a surrounding form — one hidden input per selected value. */
3435
+ name?: string;
2820
3436
  labels?: MultiSelectLabels;
3437
+ id?: string;
2821
3438
  }
2822
3439
  declare function MultiSelect({
2823
3440
  options,
2824
3441
  value,
3442
+ defaultValue,
2825
3443
  onValueChange,
2826
3444
  placeholder,
3445
+ label,
3446
+ ariaLabel,
3447
+ hint,
3448
+ error,
3449
+ display,
2827
3450
  disabled,
3451
+ clearable,
3452
+ selectAll,
3453
+ max,
3454
+ creatable,
3455
+ onCreate,
3456
+ loading,
3457
+ onSearchChange,
3458
+ filter,
3459
+ searchable,
3460
+ size,
3461
+ name,
2828
3462
  labels,
2829
3463
  className,
3464
+ id,
3465
+ 'aria-labelledby': ariaLabelledBy,
3466
+ 'aria-describedby': ariaDescribedBy,
3467
+ 'aria-invalid': ariaInvalid,
2830
3468
  ...props
2831
3469
  }: MultiSelectProps): import("react").JSX.Element;
2832
3470
  interface TagsInputProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {
@@ -2925,6 +3563,24 @@ interface SegmentedControlProps extends Omit<HTMLAttributes<HTMLDivElement>, 'on
2925
3563
  value: string;
2926
3564
  onValueChange: (v: string) => void;
2927
3565
  size?: 'sm' | 'md' | 'lg';
3566
+ /**
3567
+ * Accessible name for the group. Invisible — it names the `role="group"`, it renders
3568
+ * nothing.
3569
+ *
3570
+ * This component extended `HTMLAttributes` and nothing else, so it took the raw DOM
3571
+ * `aria-label` while every sibling in the catalog took `ariaLabel` — the one control in an
3572
+ * adopter's filter toolbar where the catalog spelling was a type error (2026-08-31 report
3573
+ * §21). Both spellings work now; the raw `aria-label` still wins if you pass both.
3574
+ */
3575
+ ariaLabel?: string;
3576
+ /** Alias of `ariaLabel` — same invisible accessible name, the other spelling. Not rendered. */
3577
+ label?: string;
3578
+ /**
3579
+ * When true, disables the control and removes it from the tab order.
3580
+ *
3581
+ * @defaultValue `false`
3582
+ * @see the component manifest
3583
+ */
2928
3584
  disabled?: boolean;
2929
3585
  }
2930
3586
  declare function SegmentedControl({
@@ -2933,6 +3589,8 @@ declare function SegmentedControl({
2933
3589
  onValueChange,
2934
3590
  size,
2935
3591
  disabled,
3592
+ ariaLabel,
3593
+ label,
2936
3594
  className,
2937
3595
  ...props
2938
3596
  }: SegmentedControlProps): import("react").JSX.Element;
@@ -3042,9 +3700,11 @@ declare function Editable({
3042
3700
  onCancel,
3043
3701
  className,
3044
3702
  id,
3703
+ 'aria-label': ariaLabel,
3045
3704
  'aria-labelledby': ariaLabelledBy,
3046
3705
  'aria-describedby': ariaDescribedBy,
3047
3706
  'aria-invalid': ariaInvalid,
3707
+ tabIndex,
3048
3708
  ...props
3049
3709
  }: EditableProps): import("react").JSX.Element;
3050
3710
  interface RadioCardGroupProps {
@@ -3558,6 +4218,19 @@ interface LogLine {
3558
4218
  text: string;
3559
4219
  /** Semantic level driving the row color when `ansi` is off. */
3560
4220
  level?: LogLevel;
4221
+ /**
4222
+ * Timestamp for the line, rendered in its own dimmed, column-aligned gutter.
4223
+ *
4224
+ * Pass it here rather than prefixing `text` by hand. A timestamp inside `text` cannot be
4225
+ * dimmed or aligned independently and pollutes the built-in search — typing `08:59` matched
4226
+ * every line of a build log (2026-08-31 report §23). This gutter is excluded from both
4227
+ * search and the match count, and from the text the copy button writes; `timestampWidth`
4228
+ * sizes it.
4229
+ *
4230
+ * Pre-formatted on purpose: every console formats its clock differently (relative offsets,
4231
+ * ISO, locale time), and `@cascivo/i18n`'s formatters already cover that.
4232
+ */
4233
+ timestamp?: string;
3561
4234
  }
3562
4235
  interface LogViewerLabels {
3563
4236
  searchPlaceholder?: string;
@@ -3602,6 +4275,14 @@ interface LogViewerProps extends Omit<HTMLAttributes<HTMLDivElement>, 'children'
3602
4275
  search?: string;
3603
4276
  /** Max block size of the scroll region (CSS length). Default '24rem'. */
3604
4277
  maxHeight?: string;
4278
+ /**
4279
+ * Width of the `LogLine.timestamp` gutter (CSS length). Widen it for an ISO stamp, narrow
4280
+ * it for a relative offset.
4281
+ *
4282
+ * @defaultValue `'6.5rem'`
4283
+ * @see the component manifest
4284
+ */
4285
+ timestampWidth?: string;
3605
4286
  labels?: LogViewerLabels;
3606
4287
  }
3607
4288
  /**
@@ -3619,6 +4300,7 @@ declare function LogViewer({
3619
4300
  ansi,
3620
4301
  search,
3621
4302
  maxHeight,
4303
+ timestampWidth,
3622
4304
  labels,
3623
4305
  className,
3624
4306
  ...props
@@ -4008,6 +4690,12 @@ interface ToggleGroupProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChang
4008
4690
  */
4009
4691
  orientation?: 'horizontal' | 'vertical';
4010
4692
  size?: 'sm' | 'md' | 'lg';
4693
+ /**
4694
+ * When true, disables the control and removes it from the tab order.
4695
+ *
4696
+ * @defaultValue `false`
4697
+ * @see the component manifest
4698
+ */
4011
4699
  disabled?: boolean;
4012
4700
  }
4013
4701
  declare const ToggleGroup: import("react").ForwardRefExoticComponent<ToggleGroupProps & import("react").RefAttributes<HTMLDivElement>>;
@@ -4167,6 +4855,12 @@ interface MenuButtonProps {
4167
4855
  items: MenuButtonItem[];
4168
4856
  variant?: 'primary' | 'secondary' | 'ghost';
4169
4857
  size?: 'sm' | 'md' | 'lg';
4858
+ /**
4859
+ * Disables the trigger
4860
+ *
4861
+ * @defaultValue `false`
4862
+ * @see the component manifest
4863
+ */
4170
4864
  disabled?: boolean;
4171
4865
  align?: 'start' | 'end';
4172
4866
  labels?: {
@@ -4294,13 +4988,34 @@ interface TreeNode {
4294
4988
  label: ReactNode;
4295
4989
  icon?: ReactNode;
4296
4990
  children?: TreeNode[];
4991
+ /**
4992
+ * When true, the node cannot be selected and is skipped by keyboard navigation and
4993
+ * type-to-select.
4994
+ *
4995
+ * @defaultValue `false`
4996
+ * @see the component manifest
4997
+ */
4998
+ disabled?: boolean;
4999
+ /**
5000
+ * Plain-text form of `label`, for type-to-select when the label is JSX.
5001
+ *
5002
+ * Typeahead matched `typeof label === 'string'`, so it silently did nothing for any node
5003
+ * rendering an icon beside its text — the common case.
5004
+ */
5005
+ textValue?: string;
4297
5006
  }
4298
5007
  interface TreeViewProps {
4299
5008
  items: TreeNode[];
4300
5009
  selectionMode?: 'single' | 'multi';
4301
5010
  selected?: string | string[];
4302
5011
  defaultSelected?: string | string[];
5012
+ /**
5013
+ * @deprecated Use `onValueChange`. The catalog names a value-carrying handler
5014
+ * `onValueChange`; `onSelectChange` appears on this component alone. Still honoured.
5015
+ */
4303
5016
  onSelectChange?: (selected: string | string[]) => void;
5017
+ /** Called with the new selection. */
5018
+ onValueChange?: (selected: string | string[]) => void;
4304
5019
  expanded?: string[];
4305
5020
  defaultExpanded?: string[];
4306
5021
  onExpandedChange?: (expanded: string[]) => void;
@@ -4326,6 +5041,7 @@ declare function TreeView({
4326
5041
  selected,
4327
5042
  defaultSelected,
4328
5043
  onSelectChange,
5044
+ onValueChange,
4329
5045
  expanded,
4330
5046
  defaultExpanded,
4331
5047
  onExpandedChange,
@@ -4410,13 +5126,30 @@ declare function ContainedListItem({
4410
5126
  children,
4411
5127
  ...props
4412
5128
  }: ContainedListItemProps): import("react").JSX.Element;
4413
- interface DataListItem {
5129
+ /** One label/value pair in a config-driven `DataList`. */
5130
+ interface DataListEntry {
4414
5131
  id?: string;
4415
5132
  label: ReactNode;
4416
5133
  value: ReactNode;
4417
5134
  }
5135
+ /**
5136
+ * The label/value pair shape.
5137
+ *
5138
+ * @deprecated Use `DataListEntry`. `DataListItem` is now also the **component** — every
5139
+ * structural sibling in the catalog is one (`AccordionItem`, `ContextMenuItem`,
5140
+ * `TimelineItem`, `ListItem`, `ContainedListItem`, `StructuredListItem`, `SwipeItem`), so an
5141
+ * adopter wrote `<DataList><DataListItem label="Domain">…</DataListItem></DataList>` and hit
5142
+ * a type where a component belonged (2026-08-31 report §22). TypeScript keeps a type and a
5143
+ * function of the same name in separate spaces, so this alias holds existing
5144
+ * `DataListItem[]` annotations compiling while the JSX now works; it is removed at 2.0.
5145
+ */
5146
+ type DataListItem = DataListEntry;
4418
5147
  interface DataListProps extends HTMLAttributes<HTMLDListElement> {
4419
- items: DataListItem[];
5148
+ /**
5149
+ * The pairs to render. Omit it and pass `<DataListItem>` children instead when a value
5150
+ * needs surrounding JSX (a `Status`, a `CopyButton`) that reads better inline.
5151
+ */
5152
+ items?: DataListEntry[];
4420
5153
  /**
4421
5154
  * Where each **value** sits relative to its own label — not the axis of the list.
4422
5155
  *
@@ -4438,6 +5171,8 @@ interface DataListProps extends HTMLAttributes<HTMLDListElement> {
4438
5171
  */
4439
5172
  dividers?: boolean;
4440
5173
  size?: 'sm' | 'md';
5174
+ /** `<DataListItem>` rows, as an alternative to `items`. */
5175
+ children?: ReactNode;
4441
5176
  }
4442
5177
  declare function DataList({
4443
5178
  items,
@@ -4445,8 +5180,26 @@ declare function DataList({
4445
5180
  dividers,
4446
5181
  size,
4447
5182
  className,
5183
+ children,
4448
5184
  ...props
4449
5185
  }: DataListProps): import("react").JSX.Element;
5186
+ interface DataListItemProps {
5187
+ /** The term. Rendered as the row's `<dt>`. */
5188
+ label: ReactNode;
5189
+ /** The value. Rendered as the row's `<dd>`. */
5190
+ children: ReactNode;
5191
+ }
5192
+ /**
5193
+ * One row of a `DataList`, for when a value needs surrounding JSX that reads better inline
5194
+ * than inside an `items` array.
5195
+ *
5196
+ * Must be a direct child of `DataList` — it renders the `<dt>`/`<dd>` pair that a `<dl>`
5197
+ * expects, and inherits every layout token (`orientation`, `size`, `dividers`) from it.
5198
+ */
5199
+ declare function DataListItem({
5200
+ label,
5201
+ children
5202
+ }: DataListItemProps): import("react").JSX.Element;
4450
5203
  interface TimelineItem {
4451
5204
  id: string;
4452
5205
  title: ReactNode;
@@ -4554,6 +5307,8 @@ declare function ItemActions({
4554
5307
  interface CalendarLabels {
4555
5308
  previousMonth?: string;
4556
5309
  nextMonth?: string;
5310
+ today?: string;
5311
+ weekNumber?: string;
4557
5312
  }
4558
5313
  interface CalendarProps {
4559
5314
  value?: Date | null;
@@ -4572,6 +5327,15 @@ interface CalendarProps {
4572
5327
  size?: 'sm' | 'md' | 'lg';
4573
5328
  labels?: CalendarLabels;
4574
5329
  className?: string;
5330
+ /**
5331
+ * Accessible name for the grid. Defaults to the visible month label.
5332
+ *
5333
+ * Calendar has no visible label slot — the month heading is its own — so `label` and
5334
+ * `ariaLabel` are aliases for the same invisible name. `ariaLabel` wins if both are given.
5335
+ */
5336
+ ariaLabel?: string;
5337
+ /** Alias for `ariaLabel`. See the note there. */
5338
+ label?: string;
4575
5339
  /** Highlight predicate for range previews (date-range-picker). */
4576
5340
  isInRange?: (date: Date) => boolean;
4577
5341
  /** Range endpoint markers for styling. */
@@ -4595,6 +5359,20 @@ interface CalendarProps {
4595
5359
  * @see the component manifest
4596
5360
  */
4597
5361
  hideNav?: boolean;
5362
+ /**
5363
+ * When true, shows a button that jumps the view to the current month and focuses today.
5364
+ *
5365
+ * @defaultValue `false`
5366
+ * @see the component manifest
5367
+ */
5368
+ showToday?: boolean;
5369
+ /**
5370
+ * When true, prefixes each row with its ISO-8601 week number.
5371
+ *
5372
+ * @defaultValue `false`
5373
+ * @see the component manifest
5374
+ */
5375
+ showWeekNumbers?: boolean;
4598
5376
  }
4599
5377
  declare function Calendar({
4600
5378
  value,
@@ -4607,6 +5385,8 @@ declare function Calendar({
4607
5385
  size,
4608
5386
  labels,
4609
5387
  className,
5388
+ ariaLabel,
5389
+ label,
4610
5390
  isInRange,
4611
5391
  isRangeStart,
4612
5392
  isRangeEnd,
@@ -4614,7 +5394,9 @@ declare function Calendar({
4614
5394
  month,
4615
5395
  year,
4616
5396
  onViewChange,
4617
- hideNav
5397
+ hideNav,
5398
+ showToday,
5399
+ showWeekNumbers
4618
5400
  }: CalendarProps): import("react").JSX.Element;
4619
5401
  interface DateRange {
4620
5402
  start: Date;
@@ -4675,17 +5457,18 @@ declare function DateRangePicker({
4675
5457
  labels,
4676
5458
  className
4677
5459
  }: DateRangePickerProps): import("react").JSX.Element;
5460
+ /** The output formats an adopter can ask for. */
5461
+ type ColorFormat = 'hex' | 'rgb' | 'hsl';
4678
5462
  interface ColorPickerLabels {
4679
5463
  hue?: string;
4680
- /**
4681
- * When true, enables alpha (opacity) selection.
4682
- *
4683
- * @defaultValue `true`
4684
- * @see the component manifest
4685
- */
5464
+ /** Accessible name for the alpha slider. */
4686
5465
  alpha?: string;
4687
5466
  colorArea?: string;
5467
+ saturation?: string;
5468
+ brightness?: string;
4688
5469
  eyedropper?: string;
5470
+ presets?: string;
5471
+ hex?: string;
4689
5472
  }
4690
5473
  interface ColorPickerProps {
4691
5474
  /**
@@ -4712,7 +5495,21 @@ interface ColorPickerProps {
4712
5495
  defaultValue?: string;
4713
5496
  onValueChange?: (value: string) => void;
4714
5497
  presets?: string[];
5498
+ /**
5499
+ * When true, enables alpha (opacity) selection.
5500
+ *
5501
+ * @defaultValue `true`
5502
+ * @see the component manifest
5503
+ */
4715
5504
  alpha?: boolean;
5505
+ /**
5506
+ * Notation for the emitted value. Alpha is included whenever `alpha` is on, so the width
5507
+ * of the emitted string is stable.
5508
+ *
5509
+ * @defaultValue `'hex'`
5510
+ * @see the component manifest
5511
+ */
5512
+ format?: ColorFormat;
4716
5513
  label?: string;
4717
5514
  /**
4718
5515
  * Invisible accessible name, for when a visible element outside this component already
@@ -4731,23 +5528,27 @@ interface ColorPickerProps {
4731
5528
  * @see the component manifest
4732
5529
  */
4733
5530
  disabled?: boolean;
5531
+ /** Submitted with a surrounding form — a hidden input carrying the current value. */
5532
+ name?: string;
4734
5533
  size?: 'sm' | 'md' | 'lg';
4735
5534
  className?: string;
4736
5535
  labels?: ColorPickerLabels;
4737
5536
  }
4738
5537
  declare function ColorPicker({
5538
+ id,
4739
5539
  value,
4740
5540
  defaultValue,
4741
5541
  onValueChange,
4742
5542
  presets,
4743
5543
  alpha,
5544
+ format,
4744
5545
  label,
4745
5546
  ariaLabel,
4746
5547
  disabled,
5548
+ name,
4747
5549
  size,
4748
5550
  className,
4749
5551
  labels,
4750
- id,
4751
5552
  'aria-labelledby': ariaLabelledBy,
4752
5553
  'aria-describedby': ariaDescribedBy,
4753
5554
  'aria-invalid': ariaInvalid
@@ -4756,6 +5557,8 @@ interface CarouselLabels {
4756
5557
  region?: string;
4757
5558
  previous?: string;
4758
5559
  next?: string;
5560
+ play?: string;
5561
+ pause?: string;
4759
5562
  }
4760
5563
  interface CarouselProps {
4761
5564
  children?: ReactNode;
@@ -4776,6 +5579,14 @@ interface CarouselProps {
4776
5579
  * @see the component manifest
4777
5580
  */
4778
5581
  loop?: boolean;
5582
+ /**
5583
+ * Milliseconds between automatic advances. Omit or set 0 to leave rotation off.
5584
+ *
5585
+ * Auto-rotation pauses on hover, on focus within the carousel, while the tab is hidden and
5586
+ * under `prefers-reduced-motion`, and always renders a play/pause control — APG requires
5587
+ * one for any carousel that rotates on its own.
5588
+ */
5589
+ autoplay?: number;
4779
5590
  className?: string;
4780
5591
  labels?: CarouselLabels;
4781
5592
  }
@@ -4786,6 +5597,7 @@ declare function Carousel({
4786
5597
  defaultIndex,
4787
5598
  onIndexChange,
4788
5599
  loop,
5600
+ autoplay,
4789
5601
  className,
4790
5602
  labels
4791
5603
  }: CarouselProps): import("react").JSX.Element;
@@ -5186,6 +5998,10 @@ interface NativeSelectProps extends Omit<SelectHTMLAttributes<HTMLSelectElement>
5186
5998
  * A styled native `<select>` — keeps the platform's open/close, keyboard, and form behavior, and
5187
5999
  * layers on a custom chevron and focus/invalid rings via CSS only. No JS interactivity, so no
5188
6000
  * signals: the browser owns all state. Distinct from the custom-rendered `Select` listbox.
6001
+ *
6002
+ * Where `appearance: base-select` is supported the dropdown surface is themed from
6003
+ * `[data-theme]` too, matching `Dropdown` — see the `@supports` block in the stylesheet. It is
6004
+ * progressive enhancement: elsewhere the OS draws the option list, exactly as before.
5189
6005
  */
5190
6006
  /**
5191
6007
  * `forwardRef` so `ref` reaches the underlying `<select>` — and so it is TYPED. See
@@ -5676,12 +6492,22 @@ interface GridProps extends HTMLAttributes<HTMLDivElement> {
5676
6492
  align?: GridAlign;
5677
6493
  /** Inline-axis alignment of items within their cells (`justify-items`). Defaults to `stretch`. */
5678
6494
  justify?: GridAlign;
6495
+ /**
6496
+ * Align the internal bands of adjacent children via CSS subgrid — every CardHeader in a
6497
+ * row shares one row track, every CardContent the next, every CardFooter the last. Where
6498
+ * subgrid is unsupported the grid renders as it does without this prop.
6499
+ *
6500
+ * @defaultValue `false`
6501
+ * @see the component manifest
6502
+ */
6503
+ alignRows?: boolean;
5679
6504
  }
5680
6505
  declare function Grid({
5681
6506
  cols,
5682
6507
  gap,
5683
6508
  align,
5684
6509
  justify,
6510
+ alignRows,
5685
6511
  className,
5686
6512
  style,
5687
6513
  children,
@@ -5734,6 +6560,59 @@ declare function Flex({
5734
6560
  style,
5735
6561
  ...props
5736
6562
  }: FlexProps): import("react").JSX.Element;
6563
+ /**
6564
+ * How a `Flex` child sizes itself along the main axis.
6565
+ *
6566
+ * `'auto'` grows and shrinks (`flex: 1 1 auto`); `'fixed'` does neither (`flex: 0 0 auto`),
6567
+ * which is what a fixed-width child like `Sparkline` needs; `'grow'` takes the leftover space
6568
+ * without shrinking below its content; `'shrink'` gives way but never grows.
6569
+ */
6570
+ type FlexItemSize = 'auto' | 'fixed' | 'grow' | 'shrink';
6571
+ interface FlexItemProps extends HTMLAttributes<HTMLDivElement> {
6572
+ /**
6573
+ * Main-axis sizing behaviour.
6574
+ *
6575
+ * `Flex` had no item-level control at all, so the documented fix for a fixed-width child —
6576
+ * pull it out of flex sizing — was unwritable in cascivo and every dashboard reached for a
6577
+ * raw `style={{ flex: '0 0 auto' }}` wrapper. All four raw-CSS escapes in one 1,500-line
6578
+ * app were this (2026-08-31 report §24).
6579
+ *
6580
+ * @defaultValue `auto`
6581
+ * @see the component manifest
6582
+ */
6583
+ size?: FlexItemSize;
6584
+ /**
6585
+ * `flex-basis` — the child's size before free space is distributed. Any CSS length; `0`
6586
+ * with `size="grow"` gives equal-width columns regardless of content.
6587
+ */
6588
+ basis?: string;
6589
+ /**
6590
+ * Allow the child to shrink below its intrinsic content width.
6591
+ *
6592
+ * A flex item defaults to `min-width: auto`, so a long unbreakable string (a deployment
6593
+ * URL, a commit sha) refuses to shrink and pushes its siblings out of the row. This is the
6594
+ * `minWidth: 0` every layout eventually writes by hand.
6595
+ *
6596
+ * @defaultValue `false`
6597
+ * @see the component manifest
6598
+ */
6599
+ truncate?: boolean;
6600
+ }
6601
+ /**
6602
+ * A `Flex` child with main-axis sizing, the counterpart to `GridItem`.
6603
+ *
6604
+ * Only needed for a child that must NOT size like the rest — a fixed-width `Sparkline`, the
6605
+ * one field in a toolbar that should absorb the leftover width, a cell whose text must be
6606
+ * allowed to ellipsize. Children with no special sizing need no wrapper.
6607
+ */
6608
+ declare function FlexItem({
6609
+ size,
6610
+ basis,
6611
+ truncate,
6612
+ className,
6613
+ style,
6614
+ ...props
6615
+ }: FlexItemProps): import("react").JSX.Element;
5737
6616
  interface ColumnsProps extends HTMLAttributes<HTMLDivElement> {
5738
6617
  /**
5739
6618
  * Number of equal columns
@@ -5856,6 +6735,7 @@ export {
5856
6735
  ActionSheet,
5857
6736
  ActionSheetAction,
5858
6737
  ActionSheetProps,
6738
+ type AggregateKind,
5859
6739
  Alert,
5860
6740
  AlertDialog,
5861
6741
  AlertDialogLabels,
@@ -5917,15 +6797,19 @@ export {
5917
6797
  CodeSnippetProps,
5918
6798
  Collapsible,
5919
6799
  CollapsibleProps,
6800
+ type ColorFormat,
5920
6801
  ColorPicker,
5921
6802
  ColorPickerLabels,
5922
6803
  ColorPickerProps,
5923
6804
  Column,
6805
+ type ColumnGroup,
6806
+ ColumnSettings,
6807
+ type ColumnState,
5924
6808
  Columns,
5925
6809
  ColumnsProps,
5926
6810
  Combobox,
5927
6811
  ComboboxLabels,
5928
- ComboboxOption,
6812
+ type ComboboxOption,
5929
6813
  ComboboxProps,
5930
6814
  CommandAction,
5931
6815
  CommandGroup,
@@ -5948,11 +6832,14 @@ export {
5948
6832
  CopyButton,
5949
6833
  CopyButtonProps,
5950
6834
  DataList,
6835
+ DataListEntry,
5951
6836
  DataListItem,
6837
+ DataListItemProps,
5952
6838
  DataListProps,
5953
6839
  DataTable,
5954
6840
  DataTableLabels,
5955
6841
  DataTableProps,
6842
+ DataTableServer,
5956
6843
  DatePicker,
5957
6844
  DatePickerLabels,
5958
6845
  DatePickerProps,
@@ -5991,6 +6878,9 @@ export {
5991
6878
  FilterProps,
5992
6879
  FilterVariant,
5993
6880
  Flex,
6881
+ FlexItem,
6882
+ FlexItemProps,
6883
+ FlexItemSize,
5994
6884
  FlexProps,
5995
6885
  FocusScope,
5996
6886
  Form,
@@ -6072,6 +6962,9 @@ export {
6072
6962
  LogViewer,
6073
6963
  LogViewerLabels,
6074
6964
  LogViewerProps,
6965
+ Logo,
6966
+ LogoProps,
6967
+ LogoVariant,
6075
6968
  type Machine,
6076
6969
  type MachineConfig,
6077
6970
  Menu,
@@ -6093,7 +6986,7 @@ export {
6093
6986
  ModalProps,
6094
6987
  MultiSelect,
6095
6988
  MultiSelectLabels,
6096
- MultiSelectOption,
6989
+ type MultiSelectOption,
6097
6990
  MultiSelectProps,
6098
6991
  NativeSelect,
6099
6992
  NativeSelectOption,
@@ -6119,6 +7012,7 @@ export {
6119
7012
  PasswordInput,
6120
7013
  PasswordInputLabels,
6121
7014
  PasswordInputProps,
7015
+ type PinSide,
6122
7016
  Popover,
6123
7017
  PopoverContent,
6124
7018
  PopoverContentProps,
@@ -6167,6 +7061,7 @@ export {
6167
7061
  Resizable,
6168
7062
  ResizableProps,
6169
7063
  Responsive,
7064
+ RowAction,
6170
7065
  ScrollArea,
6171
7066
  ScrollAreaProps,
6172
7067
  Search,
@@ -6196,6 +7091,7 @@ export {
6196
7091
  SideNavLinkProps,
6197
7092
  SideNavLinkSubItem,
6198
7093
  SideNavProps,
7094
+ SideNavSlotContext,
6199
7095
  SideNavSubItem,
6200
7096
  SideNavTone,
6201
7097
  Skeleton,
@@ -6209,6 +7105,7 @@ export {
6209
7105
  Slot,
6210
7106
  type SlotProps,
6211
7107
  SortDirection,
7108
+ SortKey,
6212
7109
  SortState,
6213
7110
  Spacer,
6214
7111
  SpacerProps,
@@ -6243,6 +7140,7 @@ export {
6243
7140
  SwitcherEntry,
6244
7141
  SwitcherLink,
6245
7142
  SwitcherProps,
7143
+ TableQuery,
6246
7144
  Tabs,
6247
7145
  TabsContent,
6248
7146
  TabsContentProps,
@@ -6346,4 +7244,589 @@ export {
6346
7244
  useToast,
6347
7245
  useTocFromRegion,
6348
7246
  useTypeahead,
6349
- };
7247
+ };
7248
+ // ════ Re-exported from `@cascivo/core` ═══════════════════════════════════════════
7249
+ //
7250
+ // The declarations below live in `@cascivo/core`, a TRANSITIVE dependency on this path —
7251
+ // do not add it to your package.json. Their docblocks are reproduced here so this file
7252
+ // stays the one place to read, and to grep, for every name it exports.
7253
+ //
7254
+ // ── applyTheme ──────────────────────────────────────────────────────────────────
7255
+ // /**
7256
+ // * Write a theme onto an element directly, with no provider and no React.
7257
+ // *
7258
+ // * The escape hatch for imperative setups: a theme toggle in a non-React shell, a
7259
+ // * pre-hydration inline script, a Storybook decorator, an e2e test. Also updates the theme
7260
+ // * signal, so a React tree reading {@link useTheme} stays in sync.
7261
+ // *
7262
+ // * `setTheme` deliberately does **not** do this itself: it is SSR-callable, and
7263
+ // * `ThemeProvider` can scope a theme to any subtree via its `target` ref. A direct document
7264
+ // * write inside `setTheme` would break scoped theming and touch `document` on the server.
7265
+ // *
7266
+ // * ```ts
7267
+ // * applyTheme('midnight') // <html data-theme="midnight">
7268
+ // * applyTheme('warm', panelRef.current) // scope to a subtree
7269
+ // * ```
7270
+ // *
7271
+ // * No-op on the server (no `document`).
7272
+ // */
7273
+ // declare function applyTheme(next: string, target?: HTMLElement | null): void;
7274
+ //
7275
+ // ── cn ──────────────────────────────────────────────────────────────────────────
7276
+ // declare function cn(...classes: (string | undefined | null | false | 0)[]): string;
7277
+ //
7278
+ // ── composeRefs ─────────────────────────────────────────────────────────────────
7279
+ // declare function composeRefs<T>(...refs: (Ref<T> | undefined)[]): RefCallback<T>;
7280
+ //
7281
+ // ── computePosition ─────────────────────────────────────────────────────────────
7282
+ // declare function computePosition(anchor: {
7283
+ //
7284
+ // ── createMachine ───────────────────────────────────────────────────────────────
7285
+ // declare function createMachine<S extends string, I extends S = S>(config: MachineConfig<S, I>): Machine<S>;
7286
+ //
7287
+ // ── createScope ─────────────────────────────────────────────────────────────────
7288
+ // /**
7289
+ // * A disposable owner for a set of signals/computeds/effects. Use one scope per
7290
+ // * tenant boundary — a workspace, an org, a repository group. When the user
7291
+ // * switches scope, call `dispose()` and create a fresh scope: every effect the
7292
+ // * old scope started stops firing at once, with no orphaned subscriptions or
7293
+ // * stale state left running against unmounted UI.
7294
+ // *
7295
+ // * This is a thin ownership wrapper over `@cascivo/core` signals — not a store,
7296
+ // * not a context, not a DI container. Prefer it over accumulating per-workspace
7297
+ // * state in a single global signal root, which leaks effects across switches.
7298
+ // */
7299
+ // declare function createScope(): SignalScope;
7300
+ //
7301
+ // ── createStreamBuffer ──────────────────────────────────────────────────────────
7302
+ // /**
7303
+ // * A fixed-capacity ring buffer with O(1) append and once-per-frame flushing —
7304
+ // * the primitive for high-frequency streams (build logs, live metrics).
7305
+ // *
7306
+ // * Memory is O(capacity), not O(total appended): the backing array is allocated
7307
+ // * once and overwritten in place. A burst of N appends within one animation
7308
+ // * frame produces a single `signal` write (one render), so ingestion rate is
7309
+ // * decoupled from render rate.
7310
+ // *
7311
+ // * This replaces the O(n)-per-line anti-pattern
7312
+ // * `logsSignal.value = [...logsSignal.value.slice(1), line]`, which reallocates
7313
+ // * and re-copies the whole array on every append and renders once per line.
7314
+ // */
7315
+ // declare function createStreamBuffer<T>(options: StreamBufferOptions): StreamBuffer<T>;
7316
+ //
7317
+ // ── DismissableLayer ────────────────────────────────────────────────────────────
7318
+ // /**
7319
+ // * Wraps its children and dismisses on an outside pointer press or Escape. One tested implementation
7320
+ // * of the dismissal logic every overlay reinvents. Nested layers form a stack — only the top-most
7321
+ // * responds to Escape and outside pointers. All listeners run inside `useSignalEffect`.
7322
+ // */
7323
+ // declare function DismissableLayer( {
7324
+ //
7325
+ // ── DismissableLayerProps ───────────────────────────────────────────────────────
7326
+ // interface DismissableLayerProps {
7327
+ // children: ReactNode;
7328
+ // /** Called when an outside pointer lands or Escape is pressed (when this is the top-most layer). */
7329
+ // onDismiss?: () => void;
7330
+ // /** Disable the outside-pointer dismissal (Escape still works unless escapeDismisses is false). */
7331
+ // disableOutsidePointer?: boolean;
7332
+ // /** Whether Escape dismisses the top-most layer. Default true. */
7333
+ // escapeDismisses?: boolean;
7334
+ // }
7335
+ //
7336
+ // ── ErrorBoundary ───────────────────────────────────────────────────────────────
7337
+ // declare class ErrorBoundary extends Component<ErrorBoundaryProps, State> {
7338
+ //
7339
+ // ── FocusScope ──────────────────────────────────────────────────────────────────
7340
+ // declare function FocusScope( {
7341
+ //
7342
+ // ── getLinkComponent ────────────────────────────────────────────────────────────
7343
+ // declare function getLinkComponent(): LinkComponent;
7344
+ //
7345
+ // ── LinkComponent ───────────────────────────────────────────────────────────────
7346
+ // /**
7347
+ // * A component (or intrinsic tag) that renders a navigation link. It receives a
7348
+ // * {@link LinkComponentProps} bag (an `href` plus anchor passthrough) and must
7349
+ // * render an actual `<a>` (or equivalent) so the browser and the router see a real
7350
+ // * link. `'a'` is the default.
7351
+ // */
7352
+ // type LinkComponent = ElementType;
7353
+ //
7354
+ // ── LinkComponentProps ──────────────────────────────────────────────────────────
7355
+ // /**
7356
+ // * The prop bag cascivo's config-driven nav components spread onto the link they
7357
+ // * render — the exact contract a custom {@link LinkComponent} receives. Map `href`
7358
+ // * to your router's destination prop (TanStack Router uses `to`) and spread the
7359
+ // * rest so active-state and accessibility attributes carry over. Because navigation
7360
+ // * stays a real `<a>`, middle-click / open-in-new-tab keep working — you do not need
7361
+ // * to intercept `onClick`.
7362
+ // */
7363
+ // interface LinkComponentProps {
7364
+ // /** Destination URL. Undefined for a disabled item. Map to your router's prop. */
7365
+ // href?: string | undefined;
7366
+ // /** Class names cascivo computes (layout + active-state styling). */
7367
+ // className?: string | undefined;
7368
+ // /** Rendered link content — cascivo's computed icon + label + trailing nodes. */
7369
+ // children?: ReactNode;
7370
+ // /**
7371
+ // * Click handler cascivo attaches. It only calls `preventDefault()` for a disabled
7372
+ // * item; otherwise it is inert. Spread it onto your router `<Link>` — routers
7373
+ // * compose their own click handling with a passed-through `onClick`.
7374
+ // */
7375
+ // onClick?: (e: MouseEvent<HTMLAnchorElement>) => void;
7376
+ // /** `'page'` on the active item (assistive tech + active styling). */
7377
+ // 'aria-current'?: 'page' | undefined;
7378
+ // 'aria-label'?: string | undefined;
7379
+ // 'aria-disabled'?: boolean | undefined;
7380
+ // /** `'active'` on the current item — a style hook mirroring `aria-current`. */
7381
+ // 'data-state'?: 'active' | undefined;
7382
+ // tabIndex?: number | undefined;
7383
+ // /**
7384
+ // * Additional computed `data-*` attributes cascivo may attach (e.g. `data-tone`).
7385
+ // * Spread the whole bag so future attributes carry over without an adapter change.
7386
+ // */
7387
+ // [dataAttr: `data-${string}`]: string | undefined;
7388
+ // }
7389
+ //
7390
+ // ── Machine ─────────────────────────────────────────────────────────────────────
7391
+ // interface Machine<S extends string = string> {
7392
+ // initial: S;
7393
+ // states: Record<S, StateConfig>;
7394
+ // }
7395
+ //
7396
+ // ── MachineConfig ───────────────────────────────────────────────────────────────
7397
+ // interface MachineConfig<S extends string = string, I extends S = S> {
7398
+ // initial: I;
7399
+ // states: Record<S, StateConfig>;
7400
+ // }
7401
+ //
7402
+ // ── mergeProps ──────────────────────────────────────────────────────────────────
7403
+ // declare function mergeProps<T extends Record<string, unknown>>(...propsList: Partial<T>[]): T;
7404
+ //
7405
+ // ── Portal ──────────────────────────────────────────────────────────────────────
7406
+ // declare function Portal( {
7407
+ //
7408
+ // ── Presence ────────────────────────────────────────────────────────────────────
7409
+ // /**
7410
+ // * The return type is declared rather than inferred. Inferred, it widened to
7411
+ // * `ReactElement<…, string | JSXElementConstructor<any>>`, which leaked React's internal
7412
+ // * `any` into cascivo's published `.d.ts` — the only such leak the surface had that was
7413
+ // * cascivo's own to fix.
7414
+ // */
7415
+ // declare function Presence( {
7416
+ //
7417
+ // ── ProgressInput ───────────────────────────────────────────────────────────────
7418
+ // type ProgressInput = Progress | ProgressAlias;
7419
+ //
7420
+ // ── RovingOrientation ───────────────────────────────────────────────────────────
7421
+ // type RovingOrientation = 'horizontal' | 'vertical' | 'both';
7422
+ //
7423
+ // ── setLinkComponent ────────────────────────────────────────────────────────────
7424
+ // /**
7425
+ // * Register the component cascivo's config-driven nav components (SideNav,
7426
+ // * ShellHeader, Header, Breadcrumb, Switcher, Dock) use to render links. Call once
7427
+ // * at app startup. The component receives the full {@link LinkComponentProps} bag —
7428
+ // * spread it so active-state and a11y attributes carry over, and so middle-click /
7429
+ // * open-in-new-tab keep working (no `onClick` interception needed). Framework recipes:
7430
+ // *
7431
+ // * ```tsx
7432
+ // * // TanStack Router — its Link takes `to`, so map href → to and spread the rest:
7433
+ // * import { Link } from '@tanstack/react-router'
7434
+ // * import type { LinkComponentProps } from '@cascivo/react' // or '@cascivo/core' for copied source
7435
+ // * setLinkComponent(({ href, ...rest }: LinkComponentProps) => <Link to={href} {...rest} />)
7436
+ // *
7437
+ // * // React Router — its Link takes `to`, and `to` is REQUIRED, so supply a fallback
7438
+ // * // for the disabled-item case where cascivo passes `href: undefined`:
7439
+ // * import { Link } from 'react-router'
7440
+ // * import type { LinkComponentProps } from '@cascivo/react' // or '@cascivo/core' for copied source
7441
+ // * setLinkComponent(({ href, ...rest }: LinkComponentProps) => <Link to={href ?? '#'} {...rest} />)
7442
+ // *
7443
+ // * // Next.js — its Link takes `href` directly:
7444
+ // * import Link from 'next/link'
7445
+ // * setLinkComponent(Link)
7446
+ // * ```
7447
+ // *
7448
+ // * Full guide: https://cascivo.com/docs/using-with-a-router.md — offline:
7449
+ // * `npx -y @cascivo/docs guide using-with-a-router`.
7450
+ // */
7451
+ // declare function setLinkComponent(component: (props: LinkComponentProps) => ReactElement | null): void;
7452
+ //
7453
+ // ── setTheme ────────────────────────────────────────────────────────────────────
7454
+ // /**
7455
+ // * Set the active theme imperatively, from anywhere. Persists the choice and
7456
+ // * drives the `data-theme` attribute through the mounted {@link ThemeProvider}.
7457
+ // *
7458
+ // * Requires a mounted {@link ThemeProvider} — this writes the signal, the provider writes
7459
+ // * the DOM. Without one, nothing restyles (dev builds warn). To write the attribute
7460
+ // * directly, with no provider and no React, use {@link applyTheme}.
7461
+ // */
7462
+ // declare function setTheme(next: string): void;
7463
+ //
7464
+ // ── Signal ──────────────────────────────────────────────────────────────────────
7465
+ // /**
7466
+ // * The base class for plain and computed signals.
7467
+ // */
7468
+ // declare class Signal<T = any> {
7469
+ //
7470
+ // ── Slot ────────────────────────────────────────────────────────────────────────
7471
+ // /**
7472
+ // * Slot renders its single child element while merging the Slot's own props and ref onto it —
7473
+ // * the Radix-style `asChild` composition primitive, built on cascivo's existing
7474
+ // * `mergeProps`/`composeRefs`/`cn`.
7475
+ // *
7476
+ // * - Non-handler props: child wins (so the consumer's element controls its own identity).
7477
+ // * - `on*` handlers: chained (Slot's runs, then the child's) via `mergeProps`.
7478
+ // * - `className`: unioned via `cn`. `style`: shallow-merged (child wins on conflicts).
7479
+ // * - `ref`: composed so both the Slot consumer's ref and the child's own ref receive the node.
7480
+ // *
7481
+ // * Fails fast if `children` is not exactly one valid React element.
7482
+ // */
7483
+ // declare const Slot: import("react").ForwardRefExoticComponent<Omit<SlotProps, "ref"> & import("react").RefAttributes<unknown>>;
7484
+ //
7485
+ // ── SlotProps ───────────────────────────────────────────────────────────────────
7486
+ // interface SlotProps {
7487
+ // children?: ReactNode;
7488
+ // className?: string;
7489
+ // style?: CSSProperties;
7490
+ // [key: string]: unknown;
7491
+ // }
7492
+ //
7493
+ // ── SpaceStep ───────────────────────────────────────────────────────────────────
7494
+ // /**
7495
+ // * A step on cascivo's spacing scale, mapping to the `--cascivo-space-*` design
7496
+ // * tokens. Used by the `gap` (and related) props of the layout primitives.
7497
+ // *
7498
+ // * The scale is deliberately non-linear and **skips 7** — it mirrors the token
7499
+ // * scale (`--cascivo-space-1 … -6, -8, -10, -12`), which has no `space-7`. So
7500
+ // * `gap={7}` is a type error by design; use `6` or `8`.
7501
+ // *
7502
+ // * Note the props take a **number**, not a string: write `gap={4}`, not `gap="4"`
7503
+ // * (a string is not assignable to `SpaceStep`).
7504
+ // *
7505
+ // * Lives in `@cascivo/core` (a dependency every layout primitive already has) as a
7506
+ // * single shared declaration, so the published `@cascivo/react` types name it
7507
+ // * `SpaceStep` everywhere — never the dts bundler's deduped `SpaceStep$N` aliases —
7508
+ // * and each copied layout component resolves it from its `@cascivo/core` dep.
7509
+ // */
7510
+ // type SpaceStep = 1 | 2 | 3 | 4 | 5 | 6 | 8 | 10 | 12;
7511
+ //
7512
+ // ── SuspenseBoundary ────────────────────────────────────────────────────────────
7513
+ // declare function SuspenseBoundary( {
7514
+ //
7515
+ // ── themePreloadScript ──────────────────────────────────────────────────────────
7516
+ // /**
7517
+ // * A tiny script to inline in your document `<head>` (before the app bundle) so
7518
+ // * the persisted theme paints on the first byte — no flash of the wrong theme on
7519
+ // * SSR or a hard reload. Pass the same `storageKey`/`attribute`/`defaultTheme`
7520
+ // * you give {@link ThemeProvider}.
7521
+ // *
7522
+ // * Precedence matches {@link ThemeProvider}: persisted value > `defaultTheme`
7523
+ // * (if set) > OS `prefers-color-scheme` > `'light'`. Passing `defaultTheme`
7524
+ // * suppresses the OS check, so a "dark by default" app stays dark on a light-OS
7525
+ // * visitor.
7526
+ // *
7527
+ // * The script sets `data-theme` **before** React hydrates, so add
7528
+ // * `suppressHydrationWarning` to the element that carries the attribute (usually
7529
+ // * `<html>`) — the mutation is intentional, and without the flag React 19 logs a
7530
+ // * hydration mismatch.
7531
+ // *
7532
+ // * ```tsx
7533
+ // * // Next.js app/layout.tsx
7534
+ // * <html suppressHydrationWarning>
7535
+ // * <head>
7536
+ // * <script dangerouslySetInnerHTML={{ __html: themePreloadScript({ defaultTheme: 'dark' }) }} />
7537
+ // * </head>
7538
+ // * </html>
7539
+ // * ```
7540
+ // */
7541
+ // declare function themePreloadScript(options?: {
7542
+ //
7543
+ // ── ThemeProvider ───────────────────────────────────────────────────────────────
7544
+ // /**
7545
+ // * Binds the active theme signal to a `data-theme` attribute and persists the
7546
+ // * choice — the reusable, SSR-safe form of the wiring apps otherwise hand-roll.
7547
+ // *
7548
+ // * - No flash of the wrong theme: pair with {@link themePreloadScript} in your
7549
+ // * document `<head>` so the correct theme paints on first byte.
7550
+ // * - No banned React hooks: the DOM write happens in `useSignalEffect`, not
7551
+ // * `useEffect`; there is no `useState`/`useContext`.
7552
+ // * - Uncontrolled by default (persists to localStorage); pass `value` to control.
7553
+ // * - SSR-safe when controlled: with a `value` (and no scoped `target`), the
7554
+ // * provider renders a tiny inline script that sets `data-theme` during HTML
7555
+ // * parsing, so the server-rendered first paint is themed — no flash, no
7556
+ // * hydration mismatch (the same markup renders on both sides; the client effect
7557
+ // * owns every update after hydration). For the uncontrolled/persisted flow, pair
7558
+ // * with {@link themePreloadScript} in `<head>` instead.
7559
+ // */
7560
+ // declare function ThemeProvider( {
7561
+ //
7562
+ // ── ThemeProviderProps ──────────────────────────────────────────────────────────
7563
+ // interface ThemeProviderProps {
7564
+ // /**
7565
+ // * Theme to use when nothing is persisted yet. When set, it **wins over** the
7566
+ // * visitor's OS `prefers-color-scheme` — pass it for a "dark by default" or
7567
+ // * custom-theme (`'midnight'`, …) app. Omit it to follow the OS (light/dark),
7568
+ // * falling back to `'light'`. Precedence: persisted value > `defaultTheme` (if
7569
+ // * set) > OS preference > `'light'`.
7570
+ // */
7571
+ // defaultTheme?: string;
7572
+ // /**
7573
+ // * Controlled theme. When set, the provider mirrors it on every render and the
7574
+ // * persisted value is ignored — the parent owns the state (React semantics).
7575
+ // */
7576
+ // value?: string;
7577
+ // /** localStorage key for the persisted choice. Defaults to `cascivo-theme`. */
7578
+ // storageKey?: string;
7579
+ // /** Attribute written to the target element. Defaults to `data-theme`. */
7580
+ // attribute?: string;
7581
+ // /**
7582
+ // * Element to theme. Omit to theme the whole document (`<html>`). Pass a ref to
7583
+ // * a container to scope the theme to a subtree — cascivo themes resolve against
7584
+ // * the nearest `data-theme`, so a scoped subtree can differ from the page.
7585
+ // */
7586
+ // target?: RefObject<HTMLElement | null>;
7587
+ // /** Called whenever the active theme changes. */
7588
+ // onChange?: (theme: string) => void;
7589
+ // /**
7590
+ // * CSP nonce forwarded to the inline attribute-setter script emitted for the
7591
+ // * controlled ({@link ThemeProviderProps.value}) SSR flow. Set it to match your
7592
+ // * Content-Security-Policy `script-src 'nonce-…'`.
7593
+ // */
7594
+ // nonce?: string;
7595
+ // children?: ReactNode;
7596
+ // }
7597
+ //
7598
+ // ── themeSignal ─────────────────────────────────────────────────────────────────
7599
+ // /**
7600
+ // * The underlying theme signal, for signal-native code — `computed()`, `effect()`,
7601
+ // * or a Preact app where signals are natively reactive. Most React apps want
7602
+ // * {@link useTheme}, which hands back a plain string and handles subscription.
7603
+ // */
7604
+ // declare function themeSignal(): Signal<string>;
7605
+ //
7606
+ // ── ToneInput ───────────────────────────────────────────────────────────────────
7607
+ // type ToneInput = Tone | ToneAlias;
7608
+ //
7609
+ // ── useAnchorPosition ───────────────────────────────────────────────────────────
7610
+ // /**
7611
+ // * Positions a floating element relative to an anchor. Primary path: CSS anchor positioning
7612
+ // * (Chrome-leading) — emits `anchor-name`/`position-anchor` + `anchor()` insets. Fallback (behind
7613
+ // * `CSS.supports`): JS `getBoundingClientRect` placement recomputed on scroll/resize inside
7614
+ // * `useSignalEffect`. Small by design — not a collision/flip engine (deferred).
7615
+ // */
7616
+ // declare function useAnchorPosition(options: UseAnchorPositionOptions): UseAnchorPositionReturn;
7617
+ //
7618
+ // ── useClipboard ────────────────────────────────────────────────────────────────
7619
+ // /**
7620
+ // * Copy-to-clipboard helper that de-dupes the inline logic in `copy-button`.
7621
+ // * `copy(text)` writes via `navigator.clipboard.writeText`; `copied` flips true then resets after
7622
+ // * `timeout`. The reset timer is cleared on unmount via `useSignalEffect` (no `useEffect`).
7623
+ // */
7624
+ // declare function useClipboard(options?: UseClipboardOptions): UseClipboardReturn;
7625
+ //
7626
+ // ── UseClipboardOptions ─────────────────────────────────────────────────────────
7627
+ // interface UseClipboardOptions {
7628
+ // /** How long `copied` stays true after a successful copy, in ms. */
7629
+ // timeout?: number;
7630
+ // }
7631
+ //
7632
+ // ── UseClipboardReturn ──────────────────────────────────────────────────────────
7633
+ // interface UseClipboardReturn {
7634
+ // copied: ReadonlySignal<boolean>;
7635
+ // copy: (text: string) => Promise<void>;
7636
+ // }
7637
+ //
7638
+ // ── useComputed ─────────────────────────────────────────────────────────────────
7639
+ // /**
7640
+ // * Derived reactive state (use instead of a `useMemo`/`useState` pair). Recomputes only when a
7641
+ // * signal it reads changes.
7642
+ // *
7643
+ // * Calls `useSignals()` internally — same contract and same tracking-window caveat as
7644
+ // * {@link useSignal}.
7645
+ // */
7646
+ // declare function useComputed<T>(compute: () => T): ReadonlySignal<T>;
7647
+ //
7648
+ // ── useControllableSignal ───────────────────────────────────────────────────────
7649
+ // /**
7650
+ // * Codifies the controlled/uncontrolled pattern documented by hand in CLAUDE.md
7651
+ // * (`const x = useSignal(open); x.value = open`).
7652
+ // *
7653
+ // * Returns a `[signal, setValue]` pair:
7654
+ // * - **Controlled** (`value` provided): the signal mirrors `value` on every render; `setValue`
7655
+ // * does not mutate the signal locally — it only routes the request through `onChange` so the
7656
+ // * parent owns the state (React semantics).
7657
+ // * - **Uncontrolled** (`value` undefined): the signal owns the state seeded from `defaultValue`;
7658
+ // * `setValue` updates it locally and also calls `onChange`.
7659
+ // *
7660
+ // * Whether a component is controlled is fixed for its life, exactly like React.
7661
+ // */
7662
+ // declare function useControllableSignal<T>(options: UseControllableSignalOptions<T>): [Signal<T>, (next: T) => void];
7663
+ //
7664
+ // ── UseControllableSignalOptions ────────────────────────────────────────────────
7665
+ // interface UseControllableSignalOptions<T> {
7666
+ // /** Controlled value. When provided, the component is controlled for its whole life. */
7667
+ // value?: T | undefined;
7668
+ // /** Initial value for uncontrolled use. */
7669
+ // defaultValue?: T | undefined;
7670
+ // /** Called on every write, in both controlled and uncontrolled modes. */
7671
+ // onChange?: ((value: T) => void) | undefined;
7672
+ // }
7673
+ //
7674
+ // ── useDisclosure ───────────────────────────────────────────────────────────────
7675
+ // /**
7676
+ // * Open/close state for overlays (modal, drawer, popover, …), replacing the
7677
+ // * per-component `useSignal(open)` boilerplate. Backed by `useControllableSignal`
7678
+ // * so it is controlled when `isOpen` is passed and uncontrolled otherwise.
7679
+ // * Replaces HeroUI's `@heroui/use-disclosure`. No `useState`/`useEffect`.
7680
+ // */
7681
+ // declare function useDisclosure(options?: UseDisclosureOptions): UseDisclosureReturn;
7682
+ //
7683
+ // ── UseDisclosureOptions ────────────────────────────────────────────────────────
7684
+ // interface UseDisclosureOptions {
7685
+ // /** Initial open state for uncontrolled use. */
7686
+ // defaultOpen?: boolean;
7687
+ // /** Controlled open state. When provided, the parent owns the state. */
7688
+ // isOpen?: boolean;
7689
+ // /** Called whenever open/close/toggle is requested. */
7690
+ // onOpenChange?: (open: boolean) => void;
7691
+ // }
7692
+ //
7693
+ // ── UseDisclosureReturn ─────────────────────────────────────────────────────────
7694
+ // interface UseDisclosureReturn {
7695
+ // isOpen: ReadonlySignal<boolean>;
7696
+ // open: () => void;
7697
+ // close: () => void;
7698
+ // toggle: () => void;
7699
+ // }
7700
+ //
7701
+ // ── useEffectPropSignal ─────────────────────────────────────────────────────────
7702
+ // /**
7703
+ // * Mirror a controlled React prop into a signal that is read **inside effects**, not in
7704
+ // * render. The write is deferred to a microtask, so a prop change never runs a subscribed
7705
+ // * `useSignalEffect` body during React's render phase.
7706
+ // *
7707
+ // * ## Which mirror do I want?
7708
+ // *
7709
+ // * | The signal is read… | Use | Why |
7710
+ // * | --- | --- | --- |
7711
+ // * | in render (JSX, a `data-*` attribute, a derived value) | `useControllableSignal` — or the plain `const s = useSignal(prop); s.value = prop` idiom | The write must be synchronous or the component renders one tick stale. A render-phase write that only notifies the *writing* component's own subscription is a legal same-fiber render-phase update. |
7712
+ // * | only inside `useSignalEffect` | **this** | Preact signals run effects **synchronously on write**, so a render-phase write executes effect bodies mid-render — imperative DOM calls (`showModal()`), listener registration against a pre-commit ref, and parent `setState` callbacks, all inside React's render phase. React warns `Cannot update a component while rendering a different component`; the behavior is wrong even when it doesn't. |
7713
+ // *
7714
+ // * That distinction is the rule; it is documented in `CLAUDE.md` ("Syncing a controlled React
7715
+ // * prop into a signal"), `docs/HEADLESS.md`, and `docs/AI-RULES.md`.
7716
+ // *
7717
+ // * ## Constraints
7718
+ // *
7719
+ // * - **Do not read the returned signal in render.** It lags the prop by one microtask by
7720
+ // * design. Read the prop itself, or use `useControllableSignal`.
7721
+ // * - **Pass a primitive.** A value with a new identity every render (an inline object or
7722
+ // * array literal) never compares equal, so the effect would re-run every render. Mirror
7723
+ // * its identity-stable parts instead.
7724
+ // * - SSR-safe: on the server the first render's value already matches, so nothing is ever
7725
+ // * scheduled and no work can leak between requests.
7726
+ // */
7727
+ // declare function useEffectPropSignal<T>(value: T): ReadonlySignal<T>;
7728
+ //
7729
+ // ── useId ───────────────────────────────────────────────────────────────────────
7730
+ // /**
7731
+ // * SSR-safe stable id for aria wiring (Label/Field). Wraps React's `useId` and strips the
7732
+ // * non-selector-safe colons React emits, prefixing for readability (default `cascivo`).
7733
+ // */
7734
+ // declare function useId(prefix?: string): string;
7735
+ //
7736
+ // ── useMachine ──────────────────────────────────────────────────────────────────
7737
+ // declare function useMachine<S extends string>(machine: Machine<S>): readonly [Signal<S>, (event: string) => void];
7738
+ //
7739
+ // ── useMediaQuery ───────────────────────────────────────────────────────────────
7740
+ // /**
7741
+ // * `useMediaQuery(query)` → a `ReadonlySignal<boolean>` that tracks whether the media query matches.
7742
+ // * SSR-safe (defaults to `false` when `window`/`matchMedia` is unavailable). Subscribes to changes
7743
+ // * inside `useSignalEffect`; the listener is cleaned up on teardown.
7744
+ // */
7745
+ // declare function useMediaQuery(query: string): ReadonlySignal<boolean>;
7746
+ //
7747
+ // ── useRovingFocus ──────────────────────────────────────────────────────────────
7748
+ // /**
7749
+ // * Roving tabindex without context. The parent calls `useRovingFocus(...)` and spreads
7750
+ // * `getItemProps(i)` onto each item. Only the active item is tabbable (`tabIndex={0}`); arrow keys
7751
+ // * move focus (Home/End jump; `loop` wraps). State lives in a signal; this hook calls `useSignals()`
7752
+ // * for you, so a plain React consumer that reads the active index in render stays reactive.
7753
+ // */
7754
+ // declare function useRovingFocus(options?: UseRovingFocusOptions): UseRovingFocusReturn;
7755
+ //
7756
+ // ── useScope ────────────────────────────────────────────────────────────────────
7757
+ // /**
7758
+ // * Bind a {@link createScope} to a component's lifetime: created once on mount,
7759
+ // * disposed on unmount. The scope's effects stop when the component unmounts.
7760
+ // */
7761
+ // declare function useScope(): SignalScope;
7762
+ //
7763
+ // ── useScrollLock ───────────────────────────────────────────────────────────────
7764
+ // /**
7765
+ // * Locks `document.body` scroll while `locked` is true, compensating for the scrollbar width to
7766
+ // * avoid a layout shift. Accepts a plain boolean or a `Signal<boolean>` (reactive). The previous
7767
+ // * inline styles are restored on unlock/teardown. DOM work runs inside `useSignalEffect`.
7768
+ // */
7769
+ // declare function useScrollLock(locked: Signal<boolean> | boolean): void;
7770
+ //
7771
+ // ── useSignal ───────────────────────────────────────────────────────────────────
7772
+ // /**
7773
+ // * Local reactive state — the signal IS the state (use instead of `useState`).
7774
+ // *
7775
+ // * Calls `useSignals()` internally, so a component that reads the returned signal during
7776
+ // * render re-renders on writes **without** the Babel signals transform and without calling
7777
+ // * `useSignals()` itself.
7778
+ // *
7779
+ // * Caveat: the tracking window opens where this hook is called. A signal read that happens
7780
+ // * *earlier* in the render body than the first `useSignal`/`useComputed` call is not tracked —
7781
+ // * so call these before any signal read, or call `useSignals()` first. (Reading a signal before
7782
+ // * any hook runs is unusual; the case is locked by a test.)
7783
+ // */
7784
+ // declare function useSignal<T>(initial: T): Signal<T>;
7785
+ //
7786
+ // ── useStreamBuffer ─────────────────────────────────────────────────────────────
7787
+ // /**
7788
+ // * Component-scoped {@link createStreamBuffer}. Created once and stable across
7789
+ // * renders; cancels any pending flush on unmount. Read `buffer.signal.value` in
7790
+ // * render to subscribe the component to the stream.
7791
+ // */
7792
+ // declare function useStreamBuffer<T>(options: StreamBufferOptions): StreamBuffer<T>;
7793
+ //
7794
+ // ── useTheme ────────────────────────────────────────────────────────────────────
7795
+ // /**
7796
+ // * Read and set the active theme. Returns the current theme **name** (a plain
7797
+ // * string) and a setter — the component re-renders when the theme changes with no
7798
+ // * signal handling on your part (this hook calls `useSignals()` for you, so it
7799
+ // * works in React apps with no Babel transform). This is the React-idiomatic shape;
7800
+ // * for signal-native code (`computed()`, `effect()`, Preact) use {@link themeSignal}.
7801
+ // *
7802
+ // * ```tsx
7803
+ // * const [theme, setTheme] = useTheme()
7804
+ // * return <button onClick={() => setTheme(theme === 'dark' ? 'light' : 'dark')}>
7805
+ // * {theme}
7806
+ // * </button>
7807
+ // * ```
7808
+ // */
7809
+ // declare function useTheme(): readonly [string, (next: string) => void];
7810
+ //
7811
+ // ── useTypeahead ────────────────────────────────────────────────────────────────
7812
+ // /**
7813
+ // * Type-to-select buffer, without context. The consumer calls `useTypeahead({ onMatch })`
7814
+ // * and spreads `onKeyDown` onto the focusable list container; each printable key extends
7815
+ // * the query and fires `onMatch(query)`. The buffer resets after `resetMs` of inactivity.
7816
+ // *
7817
+ // * Space is treated as a query character only while a query is already in progress, so a
7818
+ // * leading Space stays available for activation (WAI-ARIA menu/listbox convention). Repeated
7819
+ // * identical characters are passed through verbatim (e.g. "aa"); consumers that want the
7820
+ // * "press 'a' repeatedly to cycle A-items" behavior can detect an all-same-char query.
7821
+ // */
7822
+ // declare function useTypeahead(options: UseTypeaheadOptions): UseTypeaheadReturn;
7823
+ //
7824
+ // ── VisuallyHidden ──────────────────────────────────────────────────────────────
7825
+ // declare function VisuallyHidden( {
7826
+ //
7827
+ // ── VisuallyHiddenProps ─────────────────────────────────────────────────────────
7828
+ // interface VisuallyHiddenProps extends HTMLAttributes<HTMLSpanElement> {
7829
+ // children: ReactNode;
7830
+ // showOnFocus?: boolean;
7831
+ // }
7832
+ //