@cube-dev/ui-kit 0.155.0 → 0.157.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 (652) hide show
  1. package/dist/CHANGELOG.md +284 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.d.ts +10 -1
  24. package/dist/components/actions/CommandMenu/CommandMenu.js +4 -3
  25. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  26. package/dist/components/actions/CommandMenu/styled.js +1 -1
  27. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  28. package/dist/components/actions/ItemActionContext.js +1 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  30. package/dist/components/actions/Link/Link.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/index.js +1 -1
  40. package/dist/components/actions/use-action.js +1 -1
  41. package/dist/components/actions/use-anchored-menu.js +1 -1
  42. package/dist/components/actions/use-context-menu.js +42 -44
  43. package/dist/components/actions/use-context-menu.js.map +1 -1
  44. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  45. package/dist/components/content/Alert/Alert.js +1 -1
  46. package/dist/components/content/Alert/use-alert.js +1 -1
  47. package/dist/components/content/Avatar/Avatar.js +1 -1
  48. package/dist/components/content/Badge/Badge.js +1 -1
  49. package/dist/components/content/Card/Card.js +1 -1
  50. package/dist/components/content/Content.js +1 -1
  51. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  52. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  53. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  54. package/dist/components/content/Divider.js +1 -1
  55. package/dist/components/content/Footer.js +1 -1
  56. package/dist/components/content/Header.js +1 -1
  57. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  58. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  59. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  60. package/dist/components/content/Item/Item.js +1 -1
  61. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  62. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  63. package/dist/components/content/Layout/GridLayout.js +1 -1
  64. package/dist/components/content/Layout/Layout.js +1 -1
  65. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  66. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  67. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  68. package/dist/components/content/Layout/LayoutContent.js +1 -1
  69. package/dist/components/content/Layout/LayoutContext.js +1 -1
  70. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  71. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  72. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  73. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  74. package/dist/components/content/Layout/LayoutPane.js +1 -1
  75. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  76. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  78. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  79. package/dist/components/content/Layout/index.js +1 -1
  80. package/dist/components/content/Layout/utils.js +1 -1
  81. package/dist/components/content/Paragraph.js +1 -1
  82. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  83. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  84. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  85. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  86. package/dist/components/content/Result/Result.js +1 -1
  87. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  88. package/dist/components/content/Tag/Tag.js +2 -2
  89. package/dist/components/content/Tag/Tag.js.map +1 -1
  90. package/dist/components/content/Text.d.ts +14 -14
  91. package/dist/components/content/Text.js +1 -1
  92. package/dist/components/content/TextItem/TextItem.js +1 -1
  93. package/dist/components/content/Title.js +1 -1
  94. package/dist/components/content/Tree/Tree.js +1 -1
  95. package/dist/components/content/Tree/TreeNode.js +1 -1
  96. package/dist/components/content/Tree/styled.js +1 -1
  97. package/dist/components/content/Tree/tree-index.js +1 -1
  98. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  99. package/dist/components/content/Tree/use-load-data.js +1 -1
  100. package/dist/components/content/highlightText.js +1 -1
  101. package/dist/components/content/use-auto-tooltip.js +1 -1
  102. package/dist/components/data/DataTable/DataTable.d.ts +13 -0
  103. package/dist/components/data/DataTable/DataTable.js +246 -0
  104. package/dist/components/data/DataTable/DataTable.js.map +1 -0
  105. package/dist/components/data/DataTable/index.d.ts +3 -0
  106. package/dist/components/data/DataTable/types.d.ts +145 -0
  107. package/dist/components/data/ItemTable/ItemTable.d.ts +19 -0
  108. package/dist/components/data/ItemTable/ItemTable.js +350 -0
  109. package/dist/components/data/ItemTable/ItemTable.js.map +1 -0
  110. package/dist/components/data/ItemTable/ItemTableBulkBar.d.ts +23 -0
  111. package/dist/components/data/ItemTable/ItemTableBulkBar.js +131 -0
  112. package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -0
  113. package/dist/components/data/ItemTable/ItemTableDragPreview.js +46 -0
  114. package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +1 -0
  115. package/dist/components/data/ItemTable/ItemTableFooter.js +79 -0
  116. package/dist/components/data/ItemTable/ItemTableFooter.js.map +1 -0
  117. package/dist/components/data/ItemTable/ItemTableToolbar.d.ts +34 -0
  118. package/dist/components/data/ItemTable/ItemTableToolbar.js +91 -0
  119. package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -0
  120. package/dist/components/data/ItemTable/index.d.ts +4 -0
  121. package/dist/components/data/ItemTable/types.d.ts +327 -0
  122. package/dist/components/data/TableBase/ColumnResizer.js +70 -0
  123. package/dist/components/data/TableBase/ColumnResizer.js.map +1 -0
  124. package/dist/components/data/TableBase/RowCollection.js +99 -0
  125. package/dist/components/data/TableBase/RowCollection.js.map +1 -0
  126. package/dist/components/data/TableBase/TableRow.js +89 -0
  127. package/dist/components/data/TableBase/TableRow.js.map +1 -0
  128. package/dist/components/data/TableBase/TableView.d.ts +22 -0
  129. package/dist/components/data/TableBase/TableView.js +921 -0
  130. package/dist/components/data/TableBase/TableView.js.map +1 -0
  131. package/dist/components/data/TableBase/index.d.ts +5 -0
  132. package/dist/components/data/TableBase/row-menu.js +40 -0
  133. package/dist/components/data/TableBase/row-menu.js.map +1 -0
  134. package/dist/components/data/TableBase/styled.d.ts +5 -0
  135. package/dist/components/data/TableBase/styled.js +532 -0
  136. package/dist/components/data/TableBase/styled.js.map +1 -0
  137. package/dist/components/data/TableBase/types.d.ts +160 -0
  138. package/dist/components/data/TableBase/types.js +31 -0
  139. package/dist/components/data/TableBase/types.js.map +1 -0
  140. package/dist/components/data/TableBase/use-cell-selection.d.ts +3 -0
  141. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  142. package/dist/components/data/TableBase/use-cell-selection.js.map +1 -0
  143. package/dist/components/data/TableBase/use-container-width.js +35 -0
  144. package/dist/components/data/TableBase/use-container-width.js.map +1 -0
  145. package/dist/components/data/TableBase/use-row-move-animation.js +90 -0
  146. package/dist/components/data/TableBase/use-row-move-animation.js.map +1 -0
  147. package/dist/components/data/TableBase/use-scrollability.js +49 -0
  148. package/dist/components/data/TableBase/use-scrollability.js.map +1 -0
  149. package/dist/components/data/TableBase/use-table-columns.d.ts +2 -0
  150. package/dist/components/data/TableBase/use-table-columns.js +166 -0
  151. package/dist/components/data/TableBase/use-table-columns.js.map +1 -0
  152. package/dist/components/data/TableBase/use-table-search.js +64 -0
  153. package/dist/components/data/TableBase/use-table-search.js.map +1 -0
  154. package/dist/components/data/TableBase/use-table-selection.d.ts +4 -0
  155. package/dist/components/data/TableBase/use-table-selection.js +233 -0
  156. package/dist/components/data/TableBase/use-table-selection.js.map +1 -0
  157. package/dist/components/data/TableBase/use-table-sort.js +91 -0
  158. package/dist/components/data/TableBase/use-table-sort.js.map +1 -0
  159. package/dist/components/data/TableBase/use-table-sorts.js +97 -0
  160. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -0
  161. package/dist/components/data/TableBase/use-table-storage.d.ts +8 -0
  162. package/dist/components/data/TableBase/use-table-storage.js +58 -0
  163. package/dist/components/data/TableBase/use-table-storage.js.map +1 -0
  164. package/dist/components/data/index.d.ts +10 -0
  165. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  166. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  167. package/dist/components/fields/Checkbox/context.js +1 -1
  168. package/dist/components/fields/ColorInput/ColorInput.d.ts +67 -0
  169. package/dist/components/fields/ColorInput/ColorInput.js +230 -0
  170. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -0
  171. package/dist/components/fields/ColorInput/index.d.ts +2 -0
  172. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +64 -0
  173. package/dist/components/fields/ColorPicker/ColorPicker.js +189 -0
  174. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -0
  175. package/dist/components/fields/ColorPicker/index.d.ts +2 -0
  176. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +50 -0
  177. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +269 -0
  178. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -0
  179. package/dist/components/fields/ColorSwatchGroup/index.d.ts +2 -0
  180. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  181. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  182. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  183. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  184. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  185. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  186. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  187. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  188. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  189. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  190. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  191. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  192. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  193. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  194. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  195. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  196. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  197. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  198. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  199. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  200. package/dist/components/fields/DatePicker/period.js +1 -1
  201. package/dist/components/fields/DatePicker/props.js +1 -1
  202. package/dist/components/fields/DatePicker/utils.js +1 -1
  203. package/dist/components/fields/FileInput/FileInput.js +1 -1
  204. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +3 -3
  205. package/dist/components/fields/FilterListBox/FilterListBox.js +8 -6
  206. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  207. package/dist/components/fields/FilterPicker/FilterPicker.js +6 -1
  208. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  209. package/dist/components/fields/Input/Input.js +2 -2
  210. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  211. package/dist/components/fields/ListBox/ListBox.d.ts +7 -0
  212. package/dist/components/fields/ListBox/ListBox.js +4 -3
  213. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  214. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  215. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  216. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  217. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  218. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  219. package/dist/components/fields/PasswordInput/PasswordInput.d.ts +2 -2
  220. package/dist/components/fields/PasswordInput/PasswordInput.js +12 -2
  221. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  222. package/dist/components/fields/Picker/Picker.js +6 -1
  223. package/dist/components/fields/Picker/Picker.js.map +1 -1
  224. package/dist/components/fields/RadioGroup/Radio.d.ts +2 -2
  225. package/dist/components/fields/RadioGroup/Radio.js +4 -4
  226. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  227. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  228. package/dist/components/fields/RadioGroup/context.js +1 -1
  229. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  230. package/dist/components/fields/SearchInput/SearchInput.d.ts +2 -2
  231. package/dist/components/fields/SearchInput/SearchInput.js +17 -4
  232. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  233. package/dist/components/fields/Select/Select.js +1 -1
  234. package/dist/components/fields/Slider/Gradation.js +1 -1
  235. package/dist/components/fields/Slider/HueSlider.js +1 -1
  236. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  237. package/dist/components/fields/Slider/Slider.js +1 -1
  238. package/dist/components/fields/Slider/SliderBase.js +1 -1
  239. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  240. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  241. package/dist/components/fields/Slider/elements.js +1 -1
  242. package/dist/components/fields/Slider/index.js +1 -1
  243. package/dist/components/fields/Switch/Switch.js +1 -1
  244. package/dist/components/fields/TextArea/TextArea.d.ts +2 -2
  245. package/dist/components/fields/TextArea/TextArea.js +12 -5
  246. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  247. package/dist/components/fields/TextInput/TextInput.d.ts +2 -2
  248. package/dist/components/fields/TextInput/TextInput.js +15 -3
  249. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  250. package/dist/components/fields/TextInput/TextInputBase.d.ts +17 -1
  251. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  252. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  253. package/dist/components/fields/TextInput/index.d.ts +1 -1
  254. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  255. package/dist/components/fields/color/ColorPanel.js +152 -0
  256. package/dist/components/fields/color/ColorPanel.js.map +1 -0
  257. package/dist/components/fields/color/ColorSwatch.d.ts +22 -0
  258. package/dist/components/fields/color/ColorSwatch.js +58 -0
  259. package/dist/components/fields/color/ColorSwatch.js.map +1 -0
  260. package/dist/components/fields/color/channels.d.ts +13 -0
  261. package/dist/components/fields/color/channels.js +194 -0
  262. package/dist/components/fields/color/channels.js.map +1 -0
  263. package/dist/components/fields/color/color.d.ts +21 -0
  264. package/dist/components/fields/color/color.js +282 -0
  265. package/dist/components/fields/color/color.js.map +1 -0
  266. package/dist/components/fields/color/context.js +20 -0
  267. package/dist/components/fields/color/context.js.map +1 -0
  268. package/dist/components/fields/color/index.d.ts +4 -0
  269. package/dist/components/fields/index.d.ts +11 -1
  270. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  271. package/dist/components/form/Form/Field.js +1 -1
  272. package/dist/components/form/Form/Form.js +1 -1
  273. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  274. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  275. package/dist/components/form/Form/SubmitError.js +1 -1
  276. package/dist/components/form/Form/index.js +1 -1
  277. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  278. package/dist/components/form/Form/use-field/use-field.js +1 -1
  279. package/dist/components/form/Form/use-form.js +1 -1
  280. package/dist/components/form/Form/validation.js +1 -1
  281. package/dist/components/form/Label.js +1 -1
  282. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  283. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  284. package/dist/components/form/validation/use-validation-props.js +1 -1
  285. package/dist/components/form/wrapper.js +1 -1
  286. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  287. package/dist/components/helpers/IconSwitch/IconSwitch.d.ts +26 -0
  288. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  289. package/dist/components/layout/Board/Board.d.ts +55 -1
  290. package/dist/components/layout/Board/Board.js +278 -75
  291. package/dist/components/layout/Board/Board.js.map +1 -1
  292. package/dist/components/layout/Board/BoardProvider.js +1 -1
  293. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  294. package/dist/components/layout/Board/Widget.d.ts +16 -0
  295. package/dist/components/layout/Board/Widget.js +6 -3
  296. package/dist/components/layout/Board/Widget.js.map +1 -1
  297. package/dist/components/layout/Board/WidgetHost.js +81 -14
  298. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  299. package/dist/components/layout/Board/board-context.js +1 -1
  300. package/dist/components/layout/Board/board-context.js.map +1 -1
  301. package/dist/components/layout/Board/board-store.js +2 -2
  302. package/dist/components/layout/Board/board-store.js.map +1 -1
  303. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  304. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  305. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  306. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  307. package/dist/components/layout/Board/grid-core/group-move.js +132 -0
  308. package/dist/components/layout/Board/grid-core/group-move.js.map +1 -0
  309. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  310. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  311. package/dist/components/layout/Board/index.d.ts +2 -1
  312. package/dist/components/layout/Board/index.js +2 -2
  313. package/dist/components/layout/Board/index.js.map +1 -1
  314. package/dist/components/layout/Board/responsive-utils.js +1 -1
  315. package/dist/components/layout/Board/use-board-layout.js +17 -12
  316. package/dist/components/layout/Board/use-board-layout.js.map +1 -1
  317. package/dist/components/layout/Board/use-board-registry.js +139 -20
  318. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  319. package/dist/components/layout/Board/use-board-select-modifier-key.js +24 -0
  320. package/dist/components/layout/Board/use-board-select-modifier-key.js.map +1 -0
  321. package/dist/components/layout/Board/use-board-selection.d.ts +8 -0
  322. package/dist/components/layout/Board/use-board-selection.js +113 -0
  323. package/dist/components/layout/Board/use-board-selection.js.map +1 -0
  324. package/dist/components/layout/Flex.js +1 -1
  325. package/dist/components/layout/Flow.js +1 -1
  326. package/dist/components/layout/Grid.js +1 -1
  327. package/dist/components/layout/Panel.js +1 -1
  328. package/dist/components/layout/Prefix.js +1 -1
  329. package/dist/components/layout/ResizablePanel.js +1 -1
  330. package/dist/components/layout/Space.js +1 -1
  331. package/dist/components/layout/Suffix.js +1 -1
  332. package/dist/components/navigation/Pagination/Pagination.d.ts +9 -0
  333. package/dist/components/navigation/Pagination/Pagination.js +258 -0
  334. package/dist/components/navigation/Pagination/Pagination.js.map +1 -0
  335. package/dist/components/navigation/Pagination/index.d.ts +4 -0
  336. package/dist/components/navigation/Pagination/types.d.ts +81 -0
  337. package/dist/components/navigation/Pagination/use-pagination.d.ts +52 -0
  338. package/dist/components/navigation/Pagination/use-pagination.js +83 -0
  339. package/dist/components/navigation/Pagination/use-pagination.js.map +1 -0
  340. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  341. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  342. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  343. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  344. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  345. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  346. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  347. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  348. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  349. package/dist/components/navigation/Tabs/styled.js +1 -1
  350. package/dist/components/navigation/Tabs/types.js +1 -1
  351. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  352. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  353. package/dist/components/navigation/index.d.ts +5 -1
  354. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  355. package/dist/components/other/Calendar/Calendar.js +1 -1
  356. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  357. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  358. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  359. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  360. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  361. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  362. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  363. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  364. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  365. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  366. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  367. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  368. package/dist/components/overlays/Dialog/context.js +1 -1
  369. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  370. package/dist/components/overlays/Modal/Modal.js +1 -1
  371. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  372. package/dist/components/overlays/Modal/Overlay.js +1 -1
  373. package/dist/components/overlays/Modal/Popover.js +1 -1
  374. package/dist/components/overlays/Modal/Tray.js +1 -1
  375. package/dist/components/overlays/Modal/Underlay.js +1 -1
  376. package/dist/components/overlays/Notifications/Notification.js +1 -1
  377. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  378. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  379. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  380. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  381. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  382. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  383. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  384. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  385. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  386. package/dist/components/overlays/Notifications/index.js +1 -1
  387. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  388. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  389. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  390. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  391. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  392. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  393. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  394. package/dist/components/overlays/Toast/index.js +1 -1
  395. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  396. package/dist/components/overlays/Toast/useToast.js +1 -1
  397. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  398. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  399. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  400. package/dist/components/overlays/Tooltip/context.js +1 -1
  401. package/dist/components/portal/Portal.js +1 -1
  402. package/dist/components/portal/PortalProvider.js +1 -1
  403. package/dist/components/portal/usePortal.js +1 -1
  404. package/dist/components/shared/DraggableCollection.js +24 -8
  405. package/dist/components/shared/DraggableCollection.js.map +1 -1
  406. package/dist/components/shared/InvalidIcon.js +1 -1
  407. package/dist/components/shared/ValidIcon.js +1 -1
  408. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  409. package/dist/components/status/Spin/Cube.js +1 -1
  410. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  411. package/dist/components/status/Spin/Spin.js +1 -1
  412. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  413. package/dist/data/item-themes.js +1 -1
  414. package/dist/data/themes.js +1 -1
  415. package/dist/eslint-plugin/defaults.generated.js +227 -5
  416. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  417. package/dist/eslint-plugin/index.js +1 -1
  418. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  419. package/dist/i18n/I18nProvider.js +1 -1
  420. package/dist/i18n/createFormatter.js +1 -1
  421. package/dist/i18n/index.js +1 -1
  422. package/dist/i18n/instance.js +1 -1
  423. package/dist/i18n/locales/de-DE/uikit.js +44 -1
  424. package/dist/i18n/locales/en-US/uikit.js +44 -1
  425. package/dist/i18n/locales/en-US/uikit.json.d.ts +49 -1
  426. package/dist/i18n/locales/es-ES/uikit.js +44 -1
  427. package/dist/i18n/locales/es-MX/uikit.js +44 -1
  428. package/dist/i18n/locales/fr-FR/uikit.js +44 -1
  429. package/dist/i18n/locales/it-IT/uikit.js +44 -1
  430. package/dist/i18n/locales/ja-JP/uikit.js +44 -1
  431. package/dist/i18n/locales/nb-NO/uikit.js +44 -1
  432. package/dist/i18n/locales/pt-BR/uikit.js +44 -1
  433. package/dist/i18n/locales/pt-PT/uikit.js +44 -1
  434. package/dist/i18n/locales/sv-SE/uikit.js +44 -1
  435. package/dist/i18n/locales/vi-VN/uikit.js +44 -1
  436. package/dist/i18n/locales.js +1 -1
  437. package/dist/i18n/useFormatter.js +1 -1
  438. package/dist/i18n/useI18n.js +1 -1
  439. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  440. package/dist/icons/AdjustmentsIcon.js +1 -1
  441. package/dist/icons/AiIcon.js +1 -1
  442. package/dist/icons/AreaChartIcon.js +1 -1
  443. package/dist/icons/BackwardIcon.js +1 -1
  444. package/dist/icons/BarChartIcon.js +1 -1
  445. package/dist/icons/BellFilledIcon.js +1 -1
  446. package/dist/icons/BellIcon.js +1 -1
  447. package/dist/icons/BooleanIcon.js +1 -1
  448. package/dist/icons/CalendarEditIcon.js +1 -1
  449. package/dist/icons/CalendarIcon.js +1 -1
  450. package/dist/icons/CaretDownIcon.js +1 -1
  451. package/dist/icons/CaretUpIcon.js +1 -1
  452. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  453. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  454. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  455. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  456. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  457. package/dist/icons/ChartBarLineIcon.js +1 -1
  458. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  459. package/dist/icons/ChartBarStackedIcon.js +1 -1
  460. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  461. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  462. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  463. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  464. package/dist/icons/ChartBubbleIcon.js +1 -1
  465. package/dist/icons/ChartDonut2Icon.js +1 -1
  466. package/dist/icons/ChartFunnelIcon.js +1 -1
  467. package/dist/icons/ChartHeatmapIcon.js +1 -1
  468. package/dist/icons/ChartKPIIcon.js +1 -1
  469. package/dist/icons/ChartPie2Icon.js +1 -1
  470. package/dist/icons/ChartScatterIcon.js +1 -1
  471. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  472. package/dist/icons/CheckCircleIcon.js +1 -1
  473. package/dist/icons/CheckIcon.js +1 -1
  474. package/dist/icons/CircleFilledIcon.js +1 -1
  475. package/dist/icons/ClearIcon.js +1 -1
  476. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  477. package/dist/icons/CloseCircleIcon.js +1 -1
  478. package/dist/icons/CloseIcon.js +1 -1
  479. package/dist/icons/CodeIcon.js +1 -1
  480. package/dist/icons/ColumnTotalIcon.js +1 -1
  481. package/dist/icons/CopyIcon.js +1 -1
  482. package/dist/icons/CountIcon.js +1 -1
  483. package/dist/icons/CubeIcon.js +1 -1
  484. package/dist/icons/CubePauseIcon.js +1 -1
  485. package/dist/icons/CubePlayIcon.js +1 -1
  486. package/dist/icons/CurrencyDollarIcon.js +1 -1
  487. package/dist/icons/DangerIcon.js +1 -1
  488. package/dist/icons/DashboardIcon.js +1 -1
  489. package/dist/icons/DatabaseIcon.js +1 -1
  490. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  491. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  492. package/dist/icons/DirectionIcon.js +1 -1
  493. package/dist/icons/DonutIcon.js +1 -1
  494. package/dist/icons/DownIcon.js +1 -1
  495. package/dist/icons/EditIcon.js +1 -1
  496. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  497. package/dist/icons/ExclamationCircleIcon.js +1 -1
  498. package/dist/icons/ExclamationIcon.js +1 -1
  499. package/dist/icons/EyeIcon.js +1 -1
  500. package/dist/icons/EyeInvisibleIcon.js +1 -1
  501. package/dist/icons/FilterIcon.js +1 -1
  502. package/dist/icons/FolderFilledIcon.js +1 -1
  503. package/dist/icons/FolderIcon.js +1 -1
  504. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  505. package/dist/icons/FolderOpenIcon.js +1 -1
  506. package/dist/icons/ForwardIcon.js +1 -1
  507. package/dist/icons/GripVerticalIcon.js +1 -1
  508. package/dist/icons/HierarchyIcon.js +1 -1
  509. package/dist/icons/HierarchyOpenIcon.js +1 -1
  510. package/dist/icons/Icon.js +1 -1
  511. package/dist/icons/InfoCircleIcon.js +1 -1
  512. package/dist/icons/InfoIcon.js +1 -1
  513. package/dist/icons/KeyIcon.js +1 -1
  514. package/dist/icons/LeftIcon.js +1 -1
  515. package/dist/icons/LineChartIcon.js +1 -1
  516. package/dist/icons/LoadingIcon.js +1 -1
  517. package/dist/icons/LockFilledIcon.js +1 -1
  518. package/dist/icons/LockIcon.js +1 -1
  519. package/dist/icons/MoreIcon.js +1 -1
  520. package/dist/icons/NotAllowedIcon.js +1 -1
  521. package/dist/icons/Number123Icon.js +1 -1
  522. package/dist/icons/NumberIcon.js +1 -1
  523. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  524. package/dist/icons/PauseCircleIcon.js +1 -1
  525. package/dist/icons/PauseIcon.js +1 -1
  526. package/dist/icons/PercentageIcon.js +1 -1
  527. package/dist/icons/PieChartIcon.js +1 -1
  528. package/dist/icons/PipetteIcon.d.ts +12 -0
  529. package/dist/icons/PipetteIcon.js +11 -0
  530. package/dist/icons/PipetteIcon.js.map +1 -0
  531. package/dist/icons/PlayCircleIcon.js +1 -1
  532. package/dist/icons/PlayIcon.js +1 -1
  533. package/dist/icons/PlusIcon.js +1 -1
  534. package/dist/icons/ProgressBarIcon.js +1 -1
  535. package/dist/icons/ReloadIcon.js +1 -1
  536. package/dist/icons/ReportIcon.js +1 -1
  537. package/dist/icons/ReturnIcon.js +1 -1
  538. package/dist/icons/RightIcon.js +1 -1
  539. package/dist/icons/RowTotalsIcon.js +1 -1
  540. package/dist/icons/SchemeIcon.js +1 -1
  541. package/dist/icons/SearchIcon.js +1 -1
  542. package/dist/icons/SemanticQueryIcon.js +1 -1
  543. package/dist/icons/SettingsIcon.js +1 -1
  544. package/dist/icons/ShieldFilledIcon.js +1 -1
  545. package/dist/icons/ShieldIcon.js +1 -1
  546. package/dist/icons/SlashIcon.js +1 -1
  547. package/dist/icons/SparklesIcon.js +1 -1
  548. package/dist/icons/SqlIcon.js +1 -1
  549. package/dist/icons/StatsIcon.js +1 -1
  550. package/dist/icons/StopIcon.js +1 -1
  551. package/dist/icons/StringIcon.js +1 -1
  552. package/dist/icons/SubtotalsIcon.js +1 -1
  553. package/dist/icons/SwitchIcon.js +1 -1
  554. package/dist/icons/TableIcon.js +1 -1
  555. package/dist/icons/ThumbsDownIcon.js +1 -1
  556. package/dist/icons/ThumbsUpIcon.js +1 -1
  557. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  558. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  559. package/dist/icons/ThunderboltIcon.js +1 -1
  560. package/dist/icons/TimeIcon.js +1 -1
  561. package/dist/icons/TrashIcon.js +1 -1
  562. package/dist/icons/UnlockIcon.js +1 -1
  563. package/dist/icons/UpIcon.js +1 -1
  564. package/dist/icons/UserGroupIcon.js +1 -1
  565. package/dist/icons/UserIcon.js +1 -1
  566. package/dist/icons/UserLockIcon.js +1 -1
  567. package/dist/icons/ViewIcon.js +1 -1
  568. package/dist/icons/WarningFilledIcon.js +1 -1
  569. package/dist/icons/WarningIcon.js +1 -1
  570. package/dist/icons/index.d.ts +1 -0
  571. package/dist/icons/wrap-icon.js +1 -1
  572. package/dist/index.d.ts +31 -12
  573. package/dist/index.js +24 -11
  574. package/dist/index.js.map +1 -1
  575. package/dist/provider.js +1 -1
  576. package/dist/providers/TrackingProvider.js +1 -1
  577. package/dist/providers/navigationAdapter.default.js +1 -1
  578. package/dist/tokens/base.js +1 -1
  579. package/dist/tokens/colors.js +1 -1
  580. package/dist/tokens/index.js +1 -1
  581. package/dist/tokens/layout.js +1 -1
  582. package/dist/tokens/lazy-styles.js +1 -1
  583. package/dist/tokens/palette-config.js +1 -1
  584. package/dist/tokens/palette.js +1 -1
  585. package/dist/tokens/shadows.js +1 -1
  586. package/dist/tokens/sizes.js +1 -1
  587. package/dist/tokens/spacing.js +1 -1
  588. package/dist/tokens/typography.d.ts +1 -1
  589. package/dist/tokens/typography.js +11 -2
  590. package/dist/tokens/typography.js.map +1 -1
  591. package/dist/utils/ResizeSensor.js +1 -1
  592. package/dist/utils/index.d.ts +1 -0
  593. package/dist/utils/is-dev-env.js +1 -1
  594. package/dist/utils/modules.js +1 -1
  595. package/dist/utils/promise.js +1 -1
  596. package/dist/utils/raf.js +1 -1
  597. package/dist/utils/random.js +1 -1
  598. package/dist/utils/range.js +1 -1
  599. package/dist/utils/react/RenderCache.js +1 -1
  600. package/dist/utils/react/Slots.js +1 -1
  601. package/dist/utils/react/chain.js +1 -1
  602. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  603. package/dist/utils/react/index.d.ts +1 -0
  604. package/dist/utils/react/index.js +2 -1
  605. package/dist/utils/react/interactions.js +1 -1
  606. package/dist/utils/react/isTextOnly.js +1 -1
  607. package/dist/utils/react/mapProps.js +1 -1
  608. package/dist/utils/react/mergeProps.js +1 -1
  609. package/dist/utils/react/nullableValue.js +1 -1
  610. package/dist/utils/react/resolveIcon.js +1 -1
  611. package/dist/utils/react/sharedStore.js +1 -1
  612. package/dist/utils/react/useBufferedValue.d.ts +56 -0
  613. package/dist/utils/react/useBufferedValue.js +86 -0
  614. package/dist/utils/react/useBufferedValue.js.map +1 -0
  615. package/dist/utils/react/useCombinedRefs.js +1 -1
  616. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  617. package/dist/utils/react/useEventBus.js +1 -1
  618. package/dist/utils/react/useId.js +1 -1
  619. package/dist/utils/react/useIsDarwin.js +1 -1
  620. package/dist/utils/react/useKeySymbols.js +1 -1
  621. package/dist/utils/react/useLayoutEffect.js +1 -1
  622. package/dist/utils/react/useLocalStorage.js +1 -1
  623. package/dist/utils/react/useMergeStyles.js +1 -1
  624. package/dist/utils/react/usePopoverSync.js +1 -1
  625. package/dist/utils/react/useQaProps.js +1 -1
  626. package/dist/utils/react/useViewportSize.js +1 -1
  627. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  628. package/dist/utils/selection.js +1 -1
  629. package/dist/utils/styles.js +1 -1
  630. package/dist/utils/tree.js +1 -1
  631. package/dist/utils/warnings.js +1 -1
  632. package/dist/version.js +2 -2
  633. package/docs/components/actions/ButtonGroup.md +1 -1
  634. package/docs/components/data/DataTable.md +298 -0
  635. package/docs/components/data/ItemTable.md +984 -0
  636. package/docs/components/fields/ColorInput.md +284 -0
  637. package/docs/components/fields/ColorPicker.md +212 -0
  638. package/docs/components/fields/ColorSwatchGroup.md +206 -0
  639. package/docs/components/fields/FilterPicker.md +1 -1
  640. package/docs/components/fields/ListBox.md +4 -0
  641. package/docs/components/fields/PasswordInput.md +1 -0
  642. package/docs/components/fields/Picker.md +1 -1
  643. package/docs/components/fields/SearchInput.md +1 -0
  644. package/docs/components/fields/TextArea.md +1 -0
  645. package/docs/components/fields/TextInput.md +1 -0
  646. package/docs/components/layout/Board.md +154 -6
  647. package/docs/components/navigation/Pagination.md +245 -0
  648. package/package.json +8 -3
  649. package/dist/components/organisms/FileTabs/FileTabs.d.ts +0 -54
  650. package/dist/components/organisms/FileTabs/FileTabs.js +0 -282
  651. package/dist/components/organisms/FileTabs/FileTabs.js.map +0 -1
  652. package/docs/components/organisms/FileTabs.md +0 -51
@@ -32,7 +32,7 @@ Choose a different component when the interaction has another shape:
32
32
  - **`allowsCustomValue`** `boolean` (default: `false`) — Whether to allow entering custom values that are not present in the predefined options
33
33
  - **`isClearable`** `boolean` (default: `false`) — Whether the filter picker is clearable using a clear button in the rightIcon slot
34
34
  - **`isLoadingItems`** `boolean` (default: `false`) — Whether items are currently loading. Shows a loading spinner in the search input suffix inside the popover. Unlike `isLoading`, does not disable the trigger.
35
- - **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection
35
+ - **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection. In single selection mode, re-selecting the current item becomes a no-op: `onSelectionChange` is not fired and the popover closes
36
36
  - **`disabledKeys`** `Key[]` — Array of keys for disabled items
37
37
  - **`items`** `Iterable<T>` — Array of items to render when using the render function pattern for large datasets with dynamic content
38
38
  - **`placeholder`** `string` — Placeholder text when no selection is made
@@ -147,6 +147,10 @@ The `mods` property accepts the following modifiers you can override:
147
147
  - When `true`, prevents the user from deselecting the last selected item
148
148
  - Ensures at least one item is always selected in single selection mode
149
149
 
150
+ **allowDuplicateSelectionEvents** (`boolean`, default: `false`)
151
+ - When `true`, `onSelectionChange` fires even when the new selection equals the current one (React Stately suppresses such duplicate events by default)
152
+ - Used by popover-based wrappers (Picker, FilterPicker) together with `disallowEmptySelection` to close the popover when the user re-selects the current item
153
+
150
154
  **disableSelectionToggle** (`boolean`, default: `false`)
151
155
  - When `true`, clicking an already-selected item keeps it selected instead of toggling it off
152
156
  - Useful when embedding ListBox inside components like ComboBox
@@ -18,6 +18,7 @@ A password input is a specialized text field that masks user input to protect se
18
18
 
19
19
  - **`value`** `string` — The password value in controlled mode
20
20
  - **`defaultValue`** `string` — The default password value in uncontrolled mode
21
+ - **`isBuffered`** `boolean` (default: `true`) — Whether typed text is held locally until the controlled `value` catches up. This is what keeps the caret in place when the value round-trips through a store that re-renders a pass late; `onChange` still fires on every keystroke. Set to `false` for a caller that must see the field snap back to its own `value` the moment it declines a keystroke.
21
22
  - **`placeholder`** `string` — Placeholder text when input is empty
22
23
  - **`icon`** — Icon element rendered before the input
23
24
  - **`prefix`** — Input decoration before the main input
@@ -45,7 +45,7 @@ Choose a different component when the interaction has another shape:
45
45
  - **`isCheckable`** `boolean` (default: `false`) — Whether to show checkboxes for multiple selection mode
46
46
  - **`showSelectAll`** `boolean` (default: `false`) — Whether to show "Select All" option in multiple selection mode
47
47
  - **`selectAllLabel`** `ReactNode` (default: `Select All`) — Label for the "Select All" option
48
- - **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection
48
+ - **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection. In single selection mode, re-selecting the current item becomes a no-op: `onSelectionChange` is not fired and the popover closes
49
49
  - **`disabledKeys`** `Key[]` — Array of keys for disabled items
50
50
  - **`isClearable`** `boolean` (default: `false`) — Whether the picker shows a clear button when a selection is made
51
51
  - **`onClear`** `() => void` — Callback called when the clear button is pressed
@@ -18,6 +18,7 @@ A search input provides a specialized text field for search functionality, featu
18
18
 
19
19
  - **`value`** `string` — The search value in controlled mode
20
20
  - **`defaultValue`** `string` — The default search value in uncontrolled mode
21
+ - **`isBuffered`** `boolean` (default: `true`) — Whether typed text is held locally until the controlled `value` catches up. This is what keeps the caret in place when the value round-trips through a store that re-renders a pass late; `onChange` still fires on every keystroke. Set to `false` for a caller that must see the field snap back to its own `value` the moment it declines a keystroke.
21
22
  - **`placeholder`** `string` — Placeholder text when input is empty
22
23
  - **`icon`** `ReactElement` — Icon element rendered before the input (default: search icon)
23
24
  - **`prefix`** `ReactNode` — Content rendered before the input
@@ -39,6 +39,7 @@ These properties allow direct style application without using the `styles` prop:
39
39
  - **`rows`** `number` (default: `3`) — Number of visible text rows
40
40
  - **`value`** `string` — The text value in controlled mode
41
41
  - **`defaultValue`** `string` — The default text value in uncontrolled mode
42
+ - **`isBuffered`** `boolean` (default: `true`) — Whether typed text is held locally until the controlled `value` catches up. This is what keeps the caret in place when the value round-trips through a store that re-renders a pass late; `onChange` still fires on every keystroke. Set to `false` for a caller that must see the field snap back to its own `value` the moment it declines a keystroke.
42
43
  - **`placeholder`** `string` — Placeholder text when input is empty
43
44
  - **`icon`** `ReactElement` — Icon element rendered before the input
44
45
  - **`prefix`** `ReactNode` — Input decoration before the main input
@@ -18,6 +18,7 @@ A text input component that allows users to input custom text entries with a key
18
18
 
19
19
  - **`value`** `string` — The text value in controlled mode
20
20
  - **`defaultValue`** `string` — The default text value in uncontrolled mode
21
+ - **`isBuffered`** `boolean` (default: `true`) — Whether typed text is held locally until the controlled `value` catches up. This is what keeps the caret in place when the value round-trips through a store that re-renders a pass late; `onChange` still fires on every keystroke. Set to `false` for a caller that must see the field snap back to its own `value` the moment it declines a keystroke.
21
22
  - **`placeholder`** `string` — Placeholder text when input is empty
22
23
  - **`icon`** — Icon element rendered before the input
23
24
  - **`prefix`** — Input decoration before the main input
@@ -32,6 +32,16 @@ clipped by an ancestor's `overflow: hidden`.
32
32
  widget is placed exactly where you drop it and its neighbours are never pushed
33
33
  or swapped; without `allowOverlap` a drop onto an occupied cell is blocked, and
34
34
  with `allowOverlap` widgets may stack for a fully free canvas.
35
+ - **Selection** — off by default. Pressing a widget selects it and arms a drag
36
+ of the selection: selecting and grabbing are one gesture, so move the pointer
37
+ and it drags, stay still and it was just a selection. <kbd>Shift</kbd> (or
38
+ <kbd>Cmd</kbd>/<kbd>Ctrl</kbd>) toggles a widget's membership. Keys are layout
39
+ item ids, scoped to a single board, and always reported in layout order.
40
+ - **Selection is focus-like** — it tracks what the user is working with, and
41
+ touching anything else moves it on: pressing another widget makes *that* the
42
+ selection, pressing a control inside a widget drops it, and so does focus
43
+ leaving the board. With `'multiple'`, pressing an already-selected widget
44
+ keeps the selection so a drag moves the whole block.
35
45
 
36
46
  ## Properties
37
47
 
@@ -58,6 +68,13 @@ clipped by an ancestor's `overflow: hidden`.
58
68
  - **`dragHandle`** `string` — CSS selector for the only elements from which a pointer drag may start. Can be overridden per widget.
59
69
  - **`showGridLines`** `boolean | 'drag'` (default: `false`) — Show grid lines behind the widgets. `true` always, `'drag'` only while a widget is being dragged or resized. A nested board that does not set this inherits an enabled ancestor's grid lines, showing its own while a drag is in progress.
60
70
  - **`isAligned`** `boolean` (default: `false`) — Align a nested board with its ancestor `Board`'s layout. Only takes effect when the board is nested inside another `Board`'s widget. When set, every cell matches the parent's cell size exactly: the board inherits the parent's column pitch (deriving its own column count from its measured width so cells stay parent-sized as the container is resized) and uses the parent's row height verbatim. It never shrinks rows to fit — pair it with an `isAutoHeight` container so the widget grows to fit its rows at that height. `cols`/`rowHeight` then act as fallbacks used only until the parent metrics resolve.
71
+ - **`selectionMode`** `'none' | 'single' | 'multiple'` (default: `'none'`) — Whether widgets can be selected, and how many at a time. `'multiple'` also enables the marquee and rigid group movement.
72
+ - **`selectedKeys`** `string[]` — Controlled selection. Keys are layout item ids (`LayoutItem.i`).
73
+ - **`defaultSelectedKeys`** `string[]` — Initial selection for uncontrolled usage.
74
+ - **`onSelectionChange`** `(keys: string[]) => void` — Called when the selection changes. Keys are deduped and returned in the board's layout order, never in click order.
75
+ - **`selectionCancel`** `string` (default: `BOARD_SELECTION_CANCEL`) — CSS selector marking interactive descendants. A press on one never selects and never starts a drag, so the control keeps its own click *and* its native focus; it also drops the selection, since interacting with a widget's content means the user has moved on. On a selectable board this doubles as the drag guard, so form controls stay usable without also configuring `dragCancel`. The default covers native form controls, links, and the common ARIA widget roles, plus `[data-no-select]` as an escape hatch. Pass `''` to disable the guard. Can be overridden per widget.
76
+ - **`allowMarqueeSelection`** `boolean` (default: `selectionMode === 'multiple'`) — Draw a rubber-band selection when a drag starts on empty board space. A press on a widget selects and drags instead, so the lasso owns empty canvas only. Hold <kbd>Shift</kbd> or <kbd>Cmd</kbd>/<kbd>Ctrl</kbd> to add to the existing selection rather than replacing it.
77
+ - **`onWidgetsDelete`** `(keys: string[]) => void` — Called when <kbd>Delete</kbd>/<kbd>Backspace</kbd> is pressed with a non-empty selection and focus is not in an editable field. **Board never mutates the layout itself** — removing the widgets is yours to do, which is what lets you make it undoable. Board only handles these keys when this handler is set.
61
78
  - **`constraints`** `LayoutConstraint[]` — Grid/item layout constraints.
62
79
  - **`width`** `number` — Explicit width (disables measurement; useful for SSR/tests).
63
80
  - **`widgetProps`** `Partial<Board.Widget props>` — Default props applied to every widget this board hosts (per-widget `Board.Widget` props override these). Use it to add a card border to every widget (`widgetProps={{ isCard: true }}`) or set shared `styles`/sizing defaults without repeating them on each widget.
@@ -82,6 +99,16 @@ clipped by an ancestor's `overflow: hidden`.
82
99
  - **`isAutoHeight`** `boolean` (default: `false`) — Grow this widget's height in its board to fit its content (only ever increases, never shrinks). Pair it with a nested `Board isAligned` so the container expands until the inner board's rows fit at the parent's row height. It also pins the widget's resize floor: you cannot drag the widget shorter than the height its content currently needs.
83
100
  - **`dragCancel`** `string` — Override the board's `dragCancel` selector for this widget.
84
101
  - **`dragHandle`** `string` — Override the board's `dragHandle` selector for this widget.
102
+ - **`isSelectable`** `boolean` — Disable selection for this widget while the board's `selectionMode` is on.
103
+ - **`selectionCancel`** `string` — Override the board's `selectionCancel` selector for this widget.
104
+ - **`aria-label`** `string` — Accessible name for the widget. Falls back to `qa`, then the layout item id — both developer-facing, so set this whenever the widget is user-visible. Also what the selection announcement reads out.
105
+
106
+ A widget clips its content to its grid cell, card or not — otherwise a nested
107
+ board with more rows than currently fit, or a mid-drag reflow, would paint over
108
+ its neighbours. The cost is that a descendant's `outline` is cropped at the edge
109
+ (an outline is clipped by an *ancestor's* overflow, not its own), so a widget
110
+ whose content must paint outside — a control drawing its own active ring — sets
111
+ `overflow="visible"`, or draws the ring inset with a negative `outlineOffset`.
85
112
 
86
113
  ### Board.Provider
87
114
 
@@ -119,6 +146,48 @@ container's measured width, mirroring react-grid-layout's `Responsive` +
119
146
  A breakpoint with no layout is synthesized from the nearest available one,
120
147
  corrected into bounds and compacted for the target column count.
121
148
 
149
+ ### Modifiers
150
+
151
+ Every widget host exposes these as `data-*` attributes, and any style map passed
152
+ through `widgetProps.styles` or a per-widget `styles` resolves against them.
153
+
154
+ - **`selected`** — the widget is in the board's selection.
155
+ - **`card`** — the widget draws a card border (`isCard`).
156
+ - **`draggable`** — the widget can be dragged and no drag is in flight.
157
+ - **`drag`** — the widget is being dragged.
158
+ - **`floating`** — this is the clone floating in the drag overlay.
159
+ - **`resizing`** — the widget is being resized.
160
+ - **`static`** — the layout item is `static`.
161
+ - **`hovered`**, **`focus-visible`** — pointer and keyboard-focus states.
162
+ - **`settled`** — the board has painted its widgets once, so position changes animate.
163
+
164
+ Selection is an *edge* treatment — a `#primary-border` border plus a `#primary`
165
+ ring — because it reads as a focus-like state rather than a fill. `outline` stays
166
+ reserved for the real focus ring, which is what keeps the two legible together:
167
+ they use different tokens and the focus outline sits one border-width further
168
+ out. To restyle it, override the same keys:
169
+
170
+ ```jsx
171
+ <Board
172
+ selectionMode="multiple"
173
+ widgetProps={{
174
+ styles: {
175
+ border: { '': true, selected: '#note-border' },
176
+ shadow: { '': false, selected: '0 0 0 1bw #note' },
177
+ },
178
+ }}
179
+ />
180
+ ```
181
+
182
+ ### Data attributes
183
+
184
+ Supported hooks for tests, E2E, and building your own selection overlay:
185
+
186
+ - **`data-board-id`** on the board element — the board's `id`.
187
+ - **`data-board-widget-host`** on every widget host — presence only, "this is a widget host".
188
+ - **`data-board-widget-id`** on every widget host — which widget.
189
+ - **`data-selected`** on a selected host.
190
+
122
191
  ### Base Properties
123
192
 
124
193
  Supports [Base properties](../../BaseProperties.md).
@@ -221,14 +290,76 @@ mounted so the tab a widget is dragged out of (and the board owning the in-fligh
221
290
  drag) is not unmounted mid-gesture. Spring-loading works with mouse and pen;
222
291
  touch drags capture the pointer, so they do not trigger it.
223
292
 
293
+ ### Selection
294
+
295
+ Click to select, Shift/Cmd/Ctrl-click to add or remove, and drag from empty board
296
+ Press a widget to select it, <kbd>Shift</kbd>-press to add or remove one, and
297
+ drag from empty board space to lasso. Because the press both selects and arms the
298
+ drag, grabbing a widget you have not selected simply makes it the selection and
299
+ moves it; grabbing one that *is* selected moves the whole block rigidly — keeping
300
+ its shape horizontally, clamping against the grid edge as a unit rather than
301
+ collapsing, and committing once.
302
+
303
+ A group reflows exactly like a single widget: it is compacted by the same rules,
304
+ so on a `vertical` board it can no more be parked in empty space than one widget
305
+ can, and the widgets around it close the gap in the same frame. Under
306
+ `compact="free"` (or `null`) nothing compacts, so the block stays precisely where
307
+ it was dropped.
308
+
309
+ ### Interactive content keeps its clicks
310
+
311
+ ### Controlled selection and deleting widgets
312
+
313
+ ### Restyling the selection
314
+
224
315
  ## Accessibility
225
316
 
226
- - Widgets are focusable when draggable. Press <kbd>Tab</kbd> to focus a widget,
227
- then use the arrow keys to move it one cell at a time. Arrow keys only move
228
- the widget when the widget host itself is focused — not when focus is inside
229
- a nested control (e.g. an <kbd>input</kbd> or <kbd>textarea</kbd>).
230
- - Dragging, resizing, and keyboard movement are all handled by React Aria's
231
- `useMove`, which normalizes mouse, touch, and keyboard interactions.
317
+ ### Keyboard Navigation
318
+
319
+ | Key | Action |
320
+ | --- | --- |
321
+ | <kbd>Tab</kbd> | Move focus to the next widget. |
322
+ | <kbd>Arrow</kbd> keys | Move the focused widget one cell. With a selection, moves the whole selection. |
323
+ | <kbd>Space</kbd> | Toggle the focused widget's selection (`selectionMode` only). |
324
+ | <kbd>Shift</kbd> / <kbd>Cmd</kbd> / <kbd>Ctrl</kbd> + press | Add or remove a widget from the selection. |
325
+ | <kbd>Escape</kbd> | Clear the selection. |
326
+ | <kbd>Delete</kbd> / <kbd>Backspace</kbd> | Request deletion of the selection via `onWidgetsDelete`. |
327
+
328
+ Arrow keys and <kbd>Space</kbd> only act when the widget host **itself** is
329
+ focused, never when focus is inside a nested control, so an `input`,
330
+ `textarea`, or `button` inside a widget keeps every key it needs. Board's own
331
+ keys are handled on the board element rather than on `document`, and are only
332
+ consumed when they actually do something — an <kbd>Escape</kbd> with nothing
333
+ selected still reaches an ancestor Dialog, and <kbd>Backspace</kbd> stays
334
+ available for text editing and browser-back.
335
+
336
+ Every draggable or selectable widget is its own tab stop. Roving tabindex would
337
+ be an improvement on a large board, but arrow keys are already claimed for
338
+ movement, so it needs a navigation key set of its own — see below.
339
+
340
+ ### Screen Reader Support
341
+
342
+ Each widget host is a `group` with an accessible name, taken from
343
+ `aria-label`, then `qa`, then the layout item id — set `aria-label` on any
344
+ user-visible widget, since the other two are developer-facing. Draggable widgets
345
+ carry a localized `aria-roledescription`, and selectable ones advertise
346
+ `aria-keyshortcuts="Space"`.
347
+
348
+ Selection state is conveyed two ways: a selected widget is described as
349
+ "Selected" via `aria-describedby`, and every selection change is announced
350
+ through a polite live region owned by the board ("Revenue selected", "3 widgets
351
+ selected", "Selection cleared"). A marquee announces once, on release — not once
352
+ per pointer frame.
353
+
354
+ ### ARIA Properties
355
+
356
+ Board deliberately does **not** use a collection role. `aria-selected` is only
357
+ valid on `option`, `gridcell`, `row`, `treeitem` and friends, and every one of
358
+ those requires presentational children — but a Board widget hosts arbitrary
359
+ interactive content (nested boards, tabs, inputs), and a `grid`'s keyboard model
360
+ would fight `useMove`'s arrow keys. Rather than ship ARIA that lies about the
361
+ structure, selection is exposed through the name, description, and live region
362
+ described above. Set `aria-label` on your widgets and this reads correctly.
232
363
 
233
364
  ## Not yet supported
234
365
 
@@ -240,6 +371,23 @@ touch drags capture the pointer, so they do not trigger it.
240
371
  placeholder, and new `onDrop`/`droppingItem` props). Add widgets
241
372
  programmatically (render a new `Board.Widget` and add its layout item), or drag
242
373
  between boards with `Board.Provider`.
374
+ - **Cross-board group transfer** — a group drag never leaves its source board.
375
+ Cross-board transfer is single-item throughout (`WidgetTransferInfo`, the
376
+ carried preview, the free-slot fallback), and landing a group on a board with a
377
+ different column count has no obvious right answer. Degrading to a
378
+ single-widget transfer would silently split a selection the user made, so the
379
+ gesture is confined instead. Drag widgets across one at a time.
380
+ - **Collection ARIA semantics** — `role="grid"`/`option`, `aria-selected` and
381
+ `aria-multiselectable`, for the reason above.
382
+ - **Roving tabindex** — needs a widget-navigation key set that does not collide
383
+ with `useMove`'s arrow keys.
384
+ - **<kbd>Cmd/Ctrl</kbd>+<kbd>A</kbd>** — select all.
385
+ - **Cross-board marquee and cross-board selection** — selection is per board; a
386
+ `Board.Provider` shares drag, not selection.
387
+ - **Windows High Contrast Mode** — no component in the kit styles for
388
+ `forced-colors` yet. The selected state uses a tint, a border *and* an extra
389
+ ring, so it does not rely on hue alone, but a full forced-colors pass is a
390
+ system-wide change.
243
391
 
244
392
  ## Attribution
245
393
 
@@ -0,0 +1,245 @@
1
+ # Pagination
2
+
3
+ Pagination is the control for moving through a paged collection. It renders a
4
+ bounded run of page buttons, optional first/last jumps, an optional page-size
5
+ selector, and an optional item-range summary.
6
+
7
+ It is a pure control: it owns no data. Client-side slicing lives in the
8
+ companion `usePagination` hook, and `ItemTable` composes the two.
9
+
10
+ ## When to Use
11
+
12
+ - Paging through a list, table, or grid where the user needs to jump around
13
+ rather than scroll.
14
+ - Cursor pagination with an unknown total — supply `hasNextPage` and omit
15
+ `total`/`totalPages`, and the control degrades to prev/next.
16
+ - Anywhere you need a page-size selector wired to the same state.
17
+
18
+ Prefer infinite scroll when the collection is a feed the user skims, and
19
+ pagination when they need stable, addressable positions.
20
+
21
+ ## Component
22
+
23
+ ### Properties
24
+
25
+ - **`page`** `number` — Controlled current page, 1-based. Pair with
26
+ `onPageChange`.
27
+ - **`defaultPage`** `number` (default: `1`) — Initial page for uncontrolled
28
+ usage.
29
+ - **`onPageChange`** `(page: number) => void` — Never fires with a page outside
30
+ `1…totalPages` when the total is known.
31
+ - **`total`** `number` — Total items across all pages. Preferred over
32
+ `totalPages`; it also powers the range summary and the `select` type's range
33
+ labels.
34
+ - **`totalPages`** `number` — Total pages. Only needed when the item count is
35
+ genuinely unavailable. Wins over the value derived from `total` + `pageSize`.
36
+ - **`pageSize`** `number` — Controlled page size.
37
+ - **`defaultPageSize`** `number` (default: `50`) — Initial page size for
38
+ uncontrolled usage.
39
+ - **`onPageSizeChange`** `(pageSize: number) => void` — Changing the size also
40
+ resets to page 1, because the old page index no longer refers to the same
41
+ items.
42
+ - **`pageSizeOptions`** `number[]` — Supplying this **and** `onPageSizeChange`
43
+ renders the size selector.
44
+ - **`type`** `'numbers' | 'select' | 'compact'` (default: `'numbers'`) — How the
45
+ page control is rendered. `numbers` is the default because it is the only mode
46
+ whose rendered element count is independent of the page count; `select`
47
+ materializes one entry per page, so above a safety cap the component falls
48
+ back to `compact` on its own.
49
+ - **`siblingCount`** `number` (default: `1`) — Page buttons either side of the
50
+ current page.
51
+ - **`boundaryCount`** `number` (default: `1`) — Page buttons pinned at each end.
52
+ Together with `siblingCount` this bounds the rendered count at
53
+ `boundaryCount * 2 + siblingCount * 2 + 3`.
54
+ - **`size`** `'small' | 'medium'` (default: `'small'`) — Control size.
55
+ - **`isDisabled`** `boolean` — Disable every control.
56
+ - **`hasNextPage`** `boolean` — Keeps "next" enabled when the total is unknown.
57
+ Ignored once `total` or `totalPages` is supplied — a known total is always
58
+ authoritative.
59
+ - **`isCompact`** `boolean` (default: `false`) — Hide the first/last jump
60
+ buttons.
61
+ - **`summary`** `boolean | ((info: CubeTablePageInfo) => ReactNode)` (default:
62
+ `false`) — `true` renders the localized `1–50 of 1,204`, with numbers
63
+ formatted for the active locale. Pass a function for full control.
64
+ - **`labelFormatter`** `(info: CubeTablePageInfo) => ReactNode` — Labels the
65
+ entries of `type="select"`. Receives the page info with `page` set to the
66
+ entry being labelled.
67
+ - **`ariaLabel`** `string` — Labels the `<nav>` landmark. Defaults to the
68
+ localized "Pagination".
69
+
70
+ #### `CubeTablePageInfo`
71
+
72
+ Handed to `summary` and `labelFormatter`:
73
+
74
+ ```ts
75
+ interface CubeTablePageInfo {
76
+ page: number; // 1-based
77
+ pageSize: number;
78
+ totalPages: number;
79
+ total: number; // 0 when unknown
80
+ from: number; // 1-based index of the first item on this page
81
+ to: number; // 1-based index of the last item on this page
82
+ }
83
+ ```
84
+
85
+ ### Base Properties
86
+
87
+ Supports Base Properties.
88
+
89
+ ### Styling Properties
90
+
91
+ #### styles
92
+
93
+ Customizes the root element.
94
+
95
+ **Sub-elements:**
96
+
97
+ - `Summary` — the range summary and the `compact` page label
98
+ - `Controls` — the row of nav and page buttons
99
+ - `Gap` — the `…` between two runs of page numbers
100
+
101
+ #### pageSizeSelectStyles
102
+
103
+ Customizes the page-size `Select`.
104
+
105
+ ### Style Properties
106
+
107
+ These properties allow direct style application without using the `styles` prop:
108
+
109
+ - **Position:** `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `zIndex`, `margin`, `inset`, `position`, `scrollMargin`
110
+ - **Dimension:** `width`, `height`, `flexBasis`, `flexGrow`, `flexShrink`, `flex`
111
+ - **Block:** `border`, `radius`, `shadow`, `outline`
112
+
113
+ ### Modifiers
114
+
115
+ | Modifier | Type | Description |
116
+ | -------- | ---- | ----------- |
117
+ | `size` | `'small' \| 'medium'` | Control size |
118
+
119
+ ## Examples
120
+
121
+ ### Basic Usage
122
+
123
+ ```jsx
124
+ const [page, setPage] = useState(1);
125
+
126
+ <Pagination page={page} pageSize={50} total={1204} onPageChange={setPage} />;
127
+ ```
128
+
129
+ ### With a Summary
130
+
131
+ ```jsx
132
+ <Pagination page={3} pageSize={50} total={1204} summary onPageChange={setPage} />
133
+ ```
134
+
135
+ ### Many Pages
136
+
137
+ A million rows at 50 per page is 20 000 pages — and still ~7 buttons.
138
+
139
+ ```jsx
140
+ <Pagination page={9421} pageSize={50} total={1000000} summary onPageChange={setPage} />
141
+ ```
142
+
143
+ ### Page Size Selector
144
+
145
+ ```jsx
146
+ const [page, setPage] = useState(1);
147
+ const [pageSize, setPageSize] = useState(50);
148
+
149
+ <Pagination
150
+ page={page}
151
+ pageSize={pageSize}
152
+ total={1204}
153
+ pageSizeOptions={[10, 20, 50, 100, 500]}
154
+ summary
155
+ onPageChange={setPage}
156
+ onPageSizeChange={setPageSize}
157
+ />;
158
+ ```
159
+
160
+ ### Unknown Total (Cursor Pagination)
161
+
162
+ ```jsx
163
+ <Pagination page={page} hasNextPage={hasNextPage} onPageChange={setPage} />
164
+ ```
165
+
166
+ ### Compact
167
+
168
+ ```jsx
169
+ <Pagination type="compact" page={3} pageSize={50} total={1204} summary />
170
+ ```
171
+
172
+ ### Client-side Slicing with `usePagination`
173
+
174
+ ```jsx
175
+ const { pageItems, page, pageSize, total, setPage, setPageSize } =
176
+ usePagination(items, { defaultPageSize: 10 });
177
+
178
+ return (
179
+ <>
180
+ {pageItems.map((item) => (
181
+ <Text key={item}>{item}</Text>
182
+ ))}
183
+ <Pagination
184
+ page={page}
185
+ pageSize={pageSize}
186
+ total={total}
187
+ pageSizeOptions={[5, 10, 25]}
188
+ summary
189
+ onPageChange={setPage}
190
+ onPageSizeChange={setPageSize}
191
+ />
192
+ </>
193
+ );
194
+ ```
195
+
196
+ ## Accessibility
197
+
198
+ ### Keyboard Navigation
199
+
200
+ - `Tab` — moves through the controls in visual order.
201
+ - `Enter` / `Space` — activates the focused button.
202
+
203
+ Every control is a real `<button>`, so there is nothing bespoke to learn.
204
+
205
+ ### Screen Reader Support
206
+
207
+ - The root is a `<nav>` landmark labelled "Pagination" (override with
208
+ `ariaLabel`).
209
+ - The current page button carries `aria-current="page"`.
210
+ - Every button has an explicit `aria-label` — "Page 3", "Next page", and so on
211
+ — so an icon-only button is never announced as unlabelled.
212
+ - The `…` gap is `aria-hidden`; it conveys nothing a screen reader user needs.
213
+
214
+ ### ARIA Properties
215
+
216
+ | Property | Applied to |
217
+ | -------- | ---------- |
218
+ | `aria-label` | The `<nav>` and every button |
219
+ | `aria-current="page"` | The current page button |
220
+ | `aria-hidden="true"` | The `…` gap |
221
+
222
+ ## Best Practices
223
+
224
+ - Do: pass `total` rather than `totalPages` when you know the item count — the
225
+ summary and range labels both need it.
226
+ - Do: use `type="numbers"` (the default) for anything that can grow. It is the
227
+ only mode whose cost does not scale with the page count.
228
+ - Do: reset to page 1 whenever the underlying query changes (a new search term,
229
+ a new filter). A stale page index against a smaller result set shows an empty
230
+ page.
231
+ - Don't: render `type="select"` over a large page count. It builds one
232
+ collection item per page.
233
+ - Don't: pass both `hasNextPage` and a known total and expect the former to win
234
+ — it doesn't.
235
+
236
+ ## Suggested Improvements
237
+
238
+ - A "jump to page" input for very large page counts.
239
+ - Optional URL synchronization, so a page is linkable.
240
+
241
+ ## Related Components
242
+
243
+ - ItemTable — composes `Pagination` in its footer
244
+ - [Select](../fields/Select.md) — used for the page-size selector
245
+ - [Button](../actions/Button.md) — used for every nav and page control
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cube-dev/ui-kit",
3
- "version": "0.155.0",
3
+ "version": "0.157.0",
4
4
  "type": "module",
5
5
  "description": "UIKit for Cube Projects",
6
6
  "repository": {
@@ -48,6 +48,7 @@
48
48
  "@react-aria/ssr": "^3.9.10",
49
49
  "@react-aria/utils": "^3.32.0",
50
50
  "@react-spectrum/utils": "^3.12.10",
51
+ "@react-stately/selection": "^3.20.7",
51
52
  "@react-stately/utils": "^3.11.0",
52
53
  "@react-types/shared": "^3.32.1",
53
54
  "@tabler/icons-react": "^3.31.0",
@@ -104,7 +105,9 @@
104
105
  "@types/react-test-renderer": "^18.0.7",
105
106
  "@uiw/react-codemirror": "^4.25.4",
106
107
  "@vitejs/plugin-react": "^6.0.0",
107
- "@vitest/coverage-v8": "^4.1.0",
108
+ "@vitest/browser": "^4.1.10",
109
+ "@vitest/browser-playwright": "^4.1.10",
110
+ "@vitest/coverage-v8": "^4.1.10",
108
111
  "best-effort-json-parser": "^1.2.1",
109
112
  "bytes": "^3.1.2",
110
113
  "chromatic": "^13.1.4",
@@ -117,6 +120,7 @@
117
120
  "markdown-table": "^3.0.3",
118
121
  "npm-run-all": "^4.1.5",
119
122
  "oxlint": "^1.72.0",
123
+ "playwright": "^1.62.1",
120
124
  "prettier": "^3.2.5",
121
125
  "react": "^19.1.1",
122
126
  "react-dom": "^19.1.1",
@@ -131,7 +135,7 @@
131
135
  "tsdown": "^0.20.3",
132
136
  "typescript": "^5.6.3",
133
137
  "vite": "^8.0.0",
134
- "vitest": "^4.1.0"
138
+ "vitest": "^4.1.10"
135
139
  },
136
140
  "browserslist": [
137
141
  "last 2 Chrome versions",
@@ -148,6 +152,7 @@
148
152
  "build": "tsdown",
149
153
  "watch": "tsdown --watch",
150
154
  "test": "vitest run",
155
+ "test:browser": "vitest run --config vitest.browser.config.ts",
151
156
  "test-cover": "vitest run --coverage",
152
157
  "test-watch": "vitest",
153
158
  "prettier": "prettier --check \"src/**/*.{js,jsx,ts,tsx}\"",
@@ -1,54 +0,0 @@
1
-
2
- import { CubeActionProps } from "../../actions/Action/Action.js";
3
- import "../../actions/index.js";
4
- import { CubeFlexProps } from "../../layout/Flex.js";
5
- import { Styles } from "@tenphi/tasty";
6
- import { ReactNode } from "react";
7
- import * as react_jsx_runtime0 from "react/jsx-runtime";
8
-
9
- //#region src/components/organisms/FileTabs/FileTabs.d.ts
10
- /**
11
- * @deprecated consider using <Tabs /> instead
12
- */
13
- interface FileTabProps extends Omit<CubeActionProps, 'id'> {
14
- isDirty?: boolean;
15
- isDisabled?: boolean;
16
- children?: ReactNode;
17
- isClosable?: boolean;
18
- onClose?: () => void;
19
- }
20
- interface CubeFileTabsProps extends CubeFlexProps {
21
- /** The initial active key in the tabs (uncontrolled). */
22
- defaultActiveKey?: string;
23
- /** The currently active key in the tabs (controlled). */
24
- activeKey?: string | number;
25
- /** Handler that is called when the tab is clicked. */
26
- onTabClick?: (string: any) => void;
27
- /** Handler that is called when the tab is closed. */
28
- onTabClose?: (string: any) => void;
29
- /** Styles for each tab pane */
30
- paneStyles?: Styles;
31
- /** Whether the tabs are closable */
32
- isClosable?: boolean;
33
- children?: ReactNode;
34
- }
35
- declare function FileTabs({
36
- defaultActiveKey,
37
- activeKey: activeKeyProp,
38
- onTabClick,
39
- onTabClose,
40
- paneStyles,
41
- isClosable,
42
- children,
43
- ...props
44
- }: CubeFileTabsProps): react_jsx_runtime0.JSX.Element;
45
- declare namespace FileTabs {
46
- var TabPane: (allProps: CubeFileTabProps) => react_jsx_runtime0.JSX.Element;
47
- }
48
- interface CubeFileTabProps extends FileTabProps {
49
- id: string | number;
50
- title: string;
51
- }
52
- //#endregion
53
- export { CubeFileTabProps, FileTabs };
54
- //# sourceMappingURL=FileTabs.d.ts.map