@cube-dev/ui-kit 0.202.0 → 0.204.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 (645) hide show
  1. package/dist/CHANGELOG.md +24 -0
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  27. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  28. package/dist/components/actions/Link/Link.js +1 -1
  29. package/dist/components/actions/Menu/Menu.js +1 -1
  30. package/dist/components/actions/Menu/MenuCollectionItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuItem.js +1 -1
  32. package/dist/components/actions/Menu/MenuSection.js +1 -1
  33. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  36. package/dist/components/actions/Menu/context.js +1 -1
  37. package/dist/components/actions/Menu/styled.js +1 -1
  38. package/dist/components/actions/actions-run.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 +1 -1
  43. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  44. package/dist/components/content/Alert/Alert.js +1 -1
  45. package/dist/components/content/Alert/use-alert.js +1 -1
  46. package/dist/components/content/Avatar/Avatar.js +1 -1
  47. package/dist/components/content/Badge/Badge.js +1 -1
  48. package/dist/components/content/Card/Card.js +1 -1
  49. package/dist/components/content/Content.js +1 -1
  50. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  51. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  53. package/dist/components/content/Divider/Divider.js +1 -1
  54. package/dist/components/content/Footer.js +1 -1
  55. package/dist/components/content/Header.js +1 -1
  56. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  57. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  58. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  59. package/dist/components/content/Item/Item.js +1 -1
  60. package/dist/components/content/Item/ItemWithNativeLinks.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 +2 -2
  76. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  77. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  78. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  79. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  80. package/dist/components/content/Layout/index.js +1 -1
  81. package/dist/components/content/Layout/utils.js +1 -1
  82. package/dist/components/content/Paragraph.js +1 -1
  83. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  84. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  85. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  86. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  87. package/dist/components/content/Result/Result.js +1 -1
  88. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  89. package/dist/components/content/Tag/Tag.js +1 -1
  90. package/dist/components/content/Text.js +1 -1
  91. package/dist/components/content/TextItem/TextItem.js +1 -1
  92. package/dist/components/content/Title.js +1 -1
  93. package/dist/components/content/Tree/Tree.js +1 -1
  94. package/dist/components/content/Tree/TreeNode.js +1 -1
  95. package/dist/components/content/Tree/checked-keys.js +1 -1
  96. package/dist/components/content/Tree/rowId.js +1 -1
  97. package/dist/components/content/Tree/styled.js +1 -1
  98. package/dist/components/content/Tree/tree-index.js +1 -1
  99. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  100. package/dist/components/content/Tree/use-load-data.js +1 -1
  101. package/dist/components/content/highlightText.js +1 -1
  102. package/dist/components/content/use-auto-tooltip.js +1 -1
  103. package/dist/components/data/DataTable/DataTable.js +1 -1
  104. package/dist/components/data/ItemTable/ItemTable.js +233 -178
  105. package/dist/components/data/ItemTable/ItemTable.js.map +1 -1
  106. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  108. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  109. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  110. package/dist/components/data/ItemTable/index.d.ts +2 -2
  111. package/dist/components/data/ItemTable/item-table-sections.js +68 -0
  112. package/dist/components/data/ItemTable/item-table-sections.js.map +1 -0
  113. package/dist/components/data/ItemTable/types.d.ts +12 -0
  114. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  115. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  116. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  117. package/dist/components/data/ItemTable/use-item-table-selection.js +31 -27
  118. package/dist/components/data/ItemTable/use-item-table-selection.js.map +1 -1
  119. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  120. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  121. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  122. package/dist/components/data/TableBase/RowCollection.js +1 -1
  123. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  124. package/dist/components/data/TableBase/TableRow.js +1 -1
  125. package/dist/components/data/TableBase/TableRowLink.js +1 -1
  126. package/dist/components/data/TableBase/TableView.d.ts +1 -0
  127. package/dist/components/data/TableBase/TableView.js +86 -21
  128. package/dist/components/data/TableBase/TableView.js.map +1 -1
  129. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  130. package/dist/components/data/TableBase/column-header.js +1 -1
  131. package/dist/components/data/TableBase/column-menu.js +1 -1
  132. package/dist/components/data/TableBase/column-styles.js +1 -1
  133. package/dist/components/data/TableBase/column-tint.js +1 -1
  134. package/dist/components/data/TableBase/row-menu.js +1 -1
  135. package/dist/components/data/TableBase/styled.js +25 -1
  136. package/dist/components/data/TableBase/styled.js.map +1 -1
  137. package/dist/components/data/TableBase/table-body-sections.d.ts +3 -0
  138. package/dist/components/data/TableBase/table-body-sections.js +30 -0
  139. package/dist/components/data/TableBase/table-body-sections.js.map +1 -0
  140. package/dist/components/data/TableBase/table-tree.js +1 -1
  141. package/dist/components/data/TableBase/types.js +1 -1
  142. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  143. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  144. package/dist/components/data/TableBase/use-column-order.js +1 -1
  145. package/dist/components/data/TableBase/use-column-window.js +1 -1
  146. package/dist/components/data/TableBase/use-container-width.js +1 -1
  147. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  148. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  149. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  150. package/dist/components/data/TableBase/use-table-search.js +1 -1
  151. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  152. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  153. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  154. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  155. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +1 -1
  156. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  157. package/dist/components/data/index.d.ts +2 -2
  158. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  159. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  160. package/dist/components/fields/Checkbox/context.js +1 -1
  161. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  162. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  163. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  164. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  165. package/dist/components/fields/ComboBox/ComboBox.d.ts +1 -1
  166. package/dist/components/fields/ComboBox/ComboBox.js +382 -344
  167. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  168. package/dist/components/fields/ComboBox/comboBoxOptions.js +1 -1
  169. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  170. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  171. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  172. package/dist/components/fields/DatePicker/DateInput.js +3 -4
  173. package/dist/components/fields/DatePicker/DateInput.js.map +1 -1
  174. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  175. package/dist/components/fields/DatePicker/DatePicker.js +3 -4
  176. package/dist/components/fields/DatePicker/DatePicker.js.map +1 -1
  177. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  178. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  179. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  180. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  181. package/dist/components/fields/DatePicker/DateRangePicker.js +3 -4
  182. package/dist/components/fields/DatePicker/DateRangePicker.js.map +1 -1
  183. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +3 -4
  184. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  185. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  186. package/dist/components/fields/DatePicker/PeriodPicker.js +3 -3
  187. package/dist/components/fields/DatePicker/PeriodPicker.js.map +1 -1
  188. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  189. package/dist/components/fields/DatePicker/TimeInput.js +4 -5
  190. package/dist/components/fields/DatePicker/TimeInput.js.map +1 -1
  191. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  192. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  193. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  194. package/dist/components/fields/DatePicker/period.js +1 -1
  195. package/dist/components/fields/DatePicker/props.js +1 -1
  196. package/dist/components/fields/DatePicker/utils.js +1 -1
  197. package/dist/components/fields/FileInput/FileInput.js +77 -79
  198. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  199. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  200. package/dist/components/fields/FilterListBox/styled.js +1 -1
  201. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  202. package/dist/components/fields/FilterPicker/FilterTree.js +1 -1
  203. package/dist/components/fields/Input/Input.js +1 -1
  204. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  205. package/dist/components/fields/ListBox/ListBox.js +1 -1
  206. package/dist/components/fields/ListBox/optionId.js +1 -1
  207. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  208. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  209. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  210. package/dist/components/fields/NumberInput/NumberInput.js +36 -19
  211. package/dist/components/fields/NumberInput/NumberInput.js.map +1 -1
  212. package/dist/components/fields/NumberInput/StepButton.js +52 -37
  213. package/dist/components/fields/NumberInput/StepButton.js.map +1 -1
  214. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  215. package/dist/components/fields/Picker/Picker.js +1 -1
  216. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  217. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  218. package/dist/components/fields/RadioGroup/context.js +1 -1
  219. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  220. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  221. package/dist/components/fields/Select/Select.js +1 -1
  222. package/dist/components/fields/Slider/Gradation.js +1 -1
  223. package/dist/components/fields/Slider/HueSlider.js +1 -1
  224. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  225. package/dist/components/fields/Slider/Slider.js +1 -1
  226. package/dist/components/fields/Slider/SliderBase.js +1 -1
  227. package/dist/components/fields/Slider/SliderBase.js.map +1 -1
  228. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  229. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  230. package/dist/components/fields/Slider/elements.js +1 -1
  231. package/dist/components/fields/Slider/index.js +1 -1
  232. package/dist/components/fields/Slider/types.d.ts +0 -1
  233. package/dist/components/fields/Switch/Switch.js +1 -1
  234. package/dist/components/fields/TagInput/TagInput.js +1 -1
  235. package/dist/components/fields/TagInput/TagList.js +1 -1
  236. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  237. package/dist/components/fields/TagInput/useTagError.js +1 -1
  238. package/dist/components/fields/TextArea/TextArea.js +1 -1
  239. package/dist/components/fields/TextInput/TextInput.js +1 -1
  240. package/dist/components/fields/TextInput/TextInputBase.d.ts +10 -0
  241. package/dist/components/fields/TextInput/TextInputBase.js +67 -55
  242. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  243. package/dist/components/fields/TextInput/displayed-validation.js +1 -1
  244. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  245. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  246. package/dist/components/fields/TriggerActions.js +1 -1
  247. package/dist/components/fields/color/ColorPanel.js +1 -1
  248. package/dist/components/fields/color/channels.js +1 -1
  249. package/dist/components/fields/color/color.js +1 -1
  250. package/dist/components/fields/color/context.js +1 -1
  251. package/dist/components/fields/option-origin-press.js +1 -1
  252. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  253. package/dist/components/form/FieldWrapper/field-description.js +1 -1
  254. package/dist/components/form/Form/Field.js +1 -1
  255. package/dist/components/form/Form/Form.js +1 -1
  256. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  257. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  258. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  259. package/dist/components/form/Form/SubmitError.js +1 -1
  260. package/dist/components/form/Form/backend.js +1 -1
  261. package/dist/components/form/Form/index.js +1 -1
  262. package/dist/components/form/Form/modern/actions.js +1 -1
  263. package/dist/components/form/Form/modern/context.js +1 -1
  264. package/dist/components/form/Form/modern/controller.js +1 -1
  265. package/dist/components/form/Form/modern/field-binding.js +1 -1
  266. package/dist/components/form/Form/modern/field.js +1 -1
  267. package/dist/components/form/Form/modern/react.js +1 -1
  268. package/dist/components/form/Form/modern/store.js +18 -2
  269. package/dist/components/form/Form/modern/store.js.map +1 -1
  270. package/dist/components/form/Form/modern/types.d.ts +5 -0
  271. package/dist/components/form/Form/modern/validation.js +1 -1
  272. package/dist/components/form/Form/modern/values.js +1 -1
  273. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  274. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  275. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  276. package/dist/components/form/Form/use-field/use-field.js +1 -1
  277. package/dist/components/form/Form/use-form.js +1 -1
  278. package/dist/components/form/Form/validation.js +1 -1
  279. package/dist/components/form/Label.js +1 -1
  280. package/dist/components/form/field-chrome.js +1 -1
  281. package/dist/components/form/field-layout.d.ts +12 -2
  282. package/dist/components/form/field-layout.js +29 -11
  283. package/dist/components/form/field-layout.js.map +1 -1
  284. package/dist/components/form/legacy-tooltip.js +1 -1
  285. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  286. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  287. package/dist/components/form/validation/use-validation-props.js +1 -1
  288. package/dist/components/form/wrapper.js +1 -1
  289. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  290. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  291. package/dist/components/layout/Flex.js +1 -1
  292. package/dist/components/layout/Flow.js +1 -1
  293. package/dist/components/layout/Grid.js +1 -1
  294. package/dist/components/layout/Panel.js +1 -1
  295. package/dist/components/layout/Prefix.js +1 -1
  296. package/dist/components/layout/ResizablePanel.js +1 -1
  297. package/dist/components/layout/Space.js +1 -1
  298. package/dist/components/layout/Suffix.js +1 -1
  299. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  300. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  301. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  302. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  303. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  304. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  305. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  306. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  307. package/dist/components/navigation/Tabs/Tabs.js +7 -3
  308. package/dist/components/navigation/Tabs/Tabs.js.map +1 -1
  309. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  310. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  311. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  312. package/dist/components/navigation/Tabs/styled.js +18 -18
  313. package/dist/components/navigation/Tabs/styled.js.map +1 -1
  314. package/dist/components/navigation/Tabs/types.js +1 -1
  315. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  316. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  317. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  318. package/dist/components/other/Calendar/Calendar.js +1 -1
  319. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  320. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  321. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  322. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  323. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  324. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  325. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  326. package/dist/components/other/Calendar/styled.js +1 -1
  327. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  328. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  329. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  330. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  331. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +2 -2
  332. package/dist/components/overlays/AlertDialog/types.d.ts +1 -1
  333. package/dist/components/overlays/Dialog/Dialog.js +9 -4
  334. package/dist/components/overlays/Dialog/Dialog.js.map +1 -1
  335. package/dist/components/overlays/Dialog/DialogContainer.d.ts +7 -0
  336. package/dist/components/overlays/Dialog/DialogContainer.js +61 -32
  337. package/dist/components/overlays/Dialog/DialogContainer.js.map +1 -1
  338. package/dist/components/overlays/Dialog/DialogForm.d.ts +7 -0
  339. package/dist/components/overlays/Dialog/DialogForm.js +10 -3
  340. package/dist/components/overlays/Dialog/DialogForm.js.map +1 -1
  341. package/dist/components/overlays/Dialog/DialogTrigger.d.ts +8 -0
  342. package/dist/components/overlays/Dialog/DialogTrigger.js +24 -11
  343. package/dist/components/overlays/Dialog/DialogTrigger.js.map +1 -1
  344. package/dist/components/overlays/Dialog/ModernDialogForm.js +213 -185
  345. package/dist/components/overlays/Dialog/ModernDialogForm.js.map +1 -1
  346. package/dist/components/overlays/Dialog/context.js +1 -1
  347. package/dist/components/overlays/Dialog/context.js.map +1 -1
  348. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  349. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  350. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  351. package/dist/components/overlays/Dialog/use-dialog-open-sync.js +1 -1
  352. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js +211 -0
  353. package/dist/components/overlays/Dialog/use-dismiss-confirmation.js.map +1 -0
  354. package/dist/components/overlays/Dialog/use-retained-dialog-focus.js +1 -1
  355. package/dist/components/overlays/Modal/Modal.js +1 -1
  356. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  357. package/dist/components/overlays/Modal/Overlay.js +1 -1
  358. package/dist/components/overlays/Modal/Popover.js +1 -1
  359. package/dist/components/overlays/Modal/Tray.js +1 -1
  360. package/dist/components/overlays/Modal/Underlay.js +1 -1
  361. package/dist/components/overlays/Modal/modal-containment.js +1 -1
  362. package/dist/components/overlays/Notifications/Notification.js +1 -1
  363. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  364. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  365. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  366. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  367. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  368. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  369. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  370. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  371. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  372. package/dist/components/overlays/Notifications/index.js +1 -1
  373. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  374. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  375. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  376. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  377. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  378. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  379. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  380. package/dist/components/overlays/Toast/index.js +1 -1
  381. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  382. package/dist/components/overlays/Toast/useToast.js +1 -1
  383. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  384. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  385. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  386. package/dist/components/overlays/Tooltip/context.js +1 -1
  387. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  388. package/dist/components/portal/Portal.js +1 -1
  389. package/dist/components/portal/PortalProvider.js +1 -1
  390. package/dist/components/portal/usePortal.js +1 -1
  391. package/dist/components/shared/DraggableCollection.js +1 -1
  392. package/dist/components/shared/InvalidIcon.js +1 -1
  393. package/dist/components/shared/ValidIcon.js +1 -1
  394. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  395. package/dist/components/status/Spin/Cube.js +1 -1
  396. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  397. package/dist/components/status/Spin/Spin.js +1 -1
  398. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  399. package/dist/data/item-themes.js +1 -1
  400. package/dist/data/themes.js +1 -1
  401. package/dist/eslint-plugin/defaults.generated.js +25 -1
  402. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  403. package/dist/eslint-plugin/index.js +1 -1
  404. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  405. package/dist/i18n/I18nProvider.js +1 -1
  406. package/dist/i18n/createFormatter.js +1 -1
  407. package/dist/i18n/index.js +1 -1
  408. package/dist/i18n/instance.js +1 -1
  409. package/dist/i18n/locales/de-DE/uikit.js +10 -2
  410. package/dist/i18n/locales/en-US/uikit.js +10 -2
  411. package/dist/i18n/locales/en-US/uikit.json.d.ts +11 -4
  412. package/dist/i18n/locales/es-ES/uikit.js +10 -2
  413. package/dist/i18n/locales/es-MX/uikit.js +10 -2
  414. package/dist/i18n/locales/fr-FR/uikit.js +10 -2
  415. package/dist/i18n/locales/it-IT/uikit.js +10 -2
  416. package/dist/i18n/locales/ja-JP/uikit.js +10 -2
  417. package/dist/i18n/locales/nb-NO/uikit.js +10 -2
  418. package/dist/i18n/locales/pt-BR/uikit.js +10 -2
  419. package/dist/i18n/locales/pt-PT/uikit.js +10 -2
  420. package/dist/i18n/locales/sv-SE/uikit.js +10 -2
  421. package/dist/i18n/locales/vi-VN/uikit.js +10 -2
  422. package/dist/i18n/locales.js +1 -1
  423. package/dist/i18n/namespace.js +1 -1
  424. package/dist/i18n/useFormatter.js +1 -1
  425. package/dist/i18n/useI18n.js +1 -1
  426. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  427. package/dist/icons/AdjustmentsIcon.js +1 -1
  428. package/dist/icons/AiIcon.js +1 -1
  429. package/dist/icons/AreaChartIcon.js +1 -1
  430. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  431. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  432. package/dist/icons/BackwardIcon.js +1 -1
  433. package/dist/icons/BarChartIcon.js +1 -1
  434. package/dist/icons/BellFilledIcon.js +1 -1
  435. package/dist/icons/BellIcon.js +1 -1
  436. package/dist/icons/BooleanIcon.js +1 -1
  437. package/dist/icons/CalendarEditIcon.js +1 -1
  438. package/dist/icons/CalendarIcon.js +1 -1
  439. package/dist/icons/CaretDownIcon.js +1 -1
  440. package/dist/icons/CaretUpIcon.js +1 -1
  441. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  442. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  443. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  444. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  445. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  446. package/dist/icons/ChartBarLineIcon.js +1 -1
  447. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  448. package/dist/icons/ChartBarStackedIcon.js +1 -1
  449. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  450. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  451. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  452. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  453. package/dist/icons/ChartBubbleIcon.js +1 -1
  454. package/dist/icons/ChartDonut2Icon.js +1 -1
  455. package/dist/icons/ChartFunnelIcon.js +1 -1
  456. package/dist/icons/ChartHeatmapIcon.js +1 -1
  457. package/dist/icons/ChartKPIIcon.js +1 -1
  458. package/dist/icons/ChartPie2Icon.js +1 -1
  459. package/dist/icons/ChartScatterIcon.js +1 -1
  460. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  461. package/dist/icons/CheckCircleIcon.js +1 -1
  462. package/dist/icons/CheckIcon.js +1 -1
  463. package/dist/icons/CircleFilledIcon.js +1 -1
  464. package/dist/icons/ClearIcon.js +1 -1
  465. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  466. package/dist/icons/CloseCircleIcon.js +1 -1
  467. package/dist/icons/CloseIcon.js +1 -1
  468. package/dist/icons/CodeIcon.js +1 -1
  469. package/dist/icons/ColumnTotalIcon.js +1 -1
  470. package/dist/icons/CopyIcon.js +1 -1
  471. package/dist/icons/CountIcon.js +1 -1
  472. package/dist/icons/CubeIcon.js +1 -1
  473. package/dist/icons/CubePauseIcon.js +1 -1
  474. package/dist/icons/CubePlayIcon.js +1 -1
  475. package/dist/icons/CurrencyDollarIcon.js +1 -1
  476. package/dist/icons/DangerIcon.js +1 -1
  477. package/dist/icons/DashboardIcon.js +1 -1
  478. package/dist/icons/DatabaseIcon.js +1 -1
  479. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  480. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  481. package/dist/icons/DirectionIcon.js +1 -1
  482. package/dist/icons/DonutIcon.js +1 -1
  483. package/dist/icons/DownIcon.js +1 -1
  484. package/dist/icons/EditIcon.js +1 -1
  485. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  486. package/dist/icons/ExclamationCircleIcon.js +1 -1
  487. package/dist/icons/ExclamationIcon.js +1 -1
  488. package/dist/icons/EyeIcon.js +1 -1
  489. package/dist/icons/EyeInvisibleIcon.js +1 -1
  490. package/dist/icons/FilterIcon.js +1 -1
  491. package/dist/icons/FolderFilledIcon.js +1 -1
  492. package/dist/icons/FolderIcon.js +1 -1
  493. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  494. package/dist/icons/FolderOpenIcon.js +1 -1
  495. package/dist/icons/ForwardIcon.js +1 -1
  496. package/dist/icons/GripVerticalIcon.js +1 -1
  497. package/dist/icons/HierarchyIcon.js +1 -1
  498. package/dist/icons/HierarchyOpenIcon.js +1 -1
  499. package/dist/icons/Icon.js +1 -1
  500. package/dist/icons/InfoCircleIcon.js +1 -1
  501. package/dist/icons/InfoIcon.js +1 -1
  502. package/dist/icons/KeyIcon.js +1 -1
  503. package/dist/icons/LeftIcon.js +1 -1
  504. package/dist/icons/LineChartIcon.js +1 -1
  505. package/dist/icons/LoadingIcon.js +1 -1
  506. package/dist/icons/LockFilledIcon.js +1 -1
  507. package/dist/icons/LockIcon.js +1 -1
  508. package/dist/icons/MoreIcon.js +1 -1
  509. package/dist/icons/NotAllowedIcon.js +1 -1
  510. package/dist/icons/Number123Icon.js +1 -1
  511. package/dist/icons/NumberIcon.js +1 -1
  512. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  513. package/dist/icons/PauseCircleIcon.js +1 -1
  514. package/dist/icons/PauseIcon.js +1 -1
  515. package/dist/icons/PercentageIcon.js +1 -1
  516. package/dist/icons/PieChartIcon.js +1 -1
  517. package/dist/icons/PipetteIcon.js +1 -1
  518. package/dist/icons/PlayCircleIcon.js +1 -1
  519. package/dist/icons/PlayIcon.js +1 -1
  520. package/dist/icons/PlusIcon.js +1 -1
  521. package/dist/icons/ProgressBarIcon.js +1 -1
  522. package/dist/icons/ReloadIcon.js +1 -1
  523. package/dist/icons/ReportIcon.js +1 -1
  524. package/dist/icons/ReturnIcon.js +1 -1
  525. package/dist/icons/RightIcon.js +1 -1
  526. package/dist/icons/RowTotalsIcon.js +1 -1
  527. package/dist/icons/SchemeIcon.js +1 -1
  528. package/dist/icons/SearchIcon.js +1 -1
  529. package/dist/icons/SemanticQueryIcon.js +1 -1
  530. package/dist/icons/SettingsIcon.js +1 -1
  531. package/dist/icons/ShieldFilledIcon.js +1 -1
  532. package/dist/icons/ShieldIcon.js +1 -1
  533. package/dist/icons/SlashIcon.js +1 -1
  534. package/dist/icons/SparklesIcon.js +1 -1
  535. package/dist/icons/SqlIcon.js +1 -1
  536. package/dist/icons/StatsIcon.js +1 -1
  537. package/dist/icons/StopIcon.js +1 -1
  538. package/dist/icons/StringIcon.js +1 -1
  539. package/dist/icons/SubtotalsIcon.js +1 -1
  540. package/dist/icons/SwitchIcon.js +1 -1
  541. package/dist/icons/TableIcon.js +1 -1
  542. package/dist/icons/ThumbsDownIcon.js +1 -1
  543. package/dist/icons/ThumbsUpIcon.js +1 -1
  544. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  545. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  546. package/dist/icons/ThunderboltIcon.js +1 -1
  547. package/dist/icons/TimeIcon.js +1 -1
  548. package/dist/icons/TrashIcon.js +1 -1
  549. package/dist/icons/UnlockIcon.js +1 -1
  550. package/dist/icons/UpIcon.js +1 -1
  551. package/dist/icons/UserGroupIcon.js +1 -1
  552. package/dist/icons/UserIcon.js +1 -1
  553. package/dist/icons/UserLockIcon.js +1 -1
  554. package/dist/icons/ViewIcon.js +1 -1
  555. package/dist/icons/WarningFilledIcon.js +1 -1
  556. package/dist/icons/WarningIcon.js +1 -1
  557. package/dist/icons/wrap-icon.js +1 -1
  558. package/dist/index.d.ts +2 -2
  559. package/dist/index.js +2 -2
  560. package/dist/probe/canonicalize.js +1 -1
  561. package/dist/probe/css.js +1 -1
  562. package/dist/probe/index.js +1 -1
  563. package/dist/provider.js +1 -1
  564. package/dist/providers/TrackingProvider.js +1 -1
  565. package/dist/providers/navigation-url.js +1 -1
  566. package/dist/providers/navigationAdapter.default.js +1 -1
  567. package/dist/providers/use-navigation.js +1 -1
  568. package/dist/tokens/all-tokens.js +1 -1
  569. package/dist/tokens/base.js +1 -1
  570. package/dist/tokens/color-seed.js +1 -1
  571. package/dist/tokens/color-theme.js +1 -1
  572. package/dist/tokens/colors.js +1 -1
  573. package/dist/tokens/layout.js +1 -1
  574. package/dist/tokens/lazy-styles.js +1 -1
  575. package/dist/tokens/legacy-color.js +1 -1
  576. package/dist/tokens/palette-config.js +1 -1
  577. package/dist/tokens/palette.js +1 -1
  578. package/dist/tokens/resolve.js +1 -1
  579. package/dist/tokens/shadows.js +1 -1
  580. package/dist/tokens/sizes.js +1 -1
  581. package/dist/tokens/spacing.js +1 -1
  582. package/dist/tokens/typography.js +1 -1
  583. package/dist/utils/ResizeSensor.js +1 -1
  584. package/dist/utils/colors.js +1 -1
  585. package/dist/utils/dotize.js +1 -1
  586. package/dist/utils/is-dev-env.js +1 -1
  587. package/dist/utils/modules.js +1 -1
  588. package/dist/utils/promise.js +1 -1
  589. package/dist/utils/raf.js +1 -1
  590. package/dist/utils/random.js +1 -1
  591. package/dist/utils/range.js +1 -1
  592. package/dist/utils/react/RenderCache.js +1 -1
  593. package/dist/utils/react/Slots.js +1 -1
  594. package/dist/utils/react/chain.js +1 -1
  595. package/dist/utils/react/disabledProps.js +1 -1
  596. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  597. package/dist/utils/react/index.js +1 -1
  598. package/dist/utils/react/interactions.js +1 -1
  599. package/dist/utils/react/isTextOnly.js +1 -1
  600. package/dist/utils/react/mapProps.js +1 -1
  601. package/dist/utils/react/mergeProps.js +1 -1
  602. package/dist/utils/react/nullableValue.js +1 -1
  603. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  604. package/dist/utils/react/programmaticFocus.js +1 -1
  605. package/dist/utils/react/resolveIcon.js +1 -1
  606. package/dist/utils/react/sharedStore.js +1 -1
  607. package/dist/utils/react/useBufferedValue.js +1 -1
  608. package/dist/utils/react/useCombinedRefs.js +1 -1
  609. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  610. package/dist/utils/react/useEventBus.js +1 -1
  611. package/dist/utils/react/useId.js +1 -1
  612. package/dist/utils/react/useIsDarwin.js +1 -1
  613. package/dist/utils/react/useKeySymbols.js +1 -1
  614. package/dist/utils/react/useLayoutEffect.js +1 -1
  615. package/dist/utils/react/useLocalStorage.js +1 -1
  616. package/dist/utils/react/useMergeStyles.js +1 -1
  617. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  618. package/dist/utils/react/usePopoverSync.js +1 -1
  619. package/dist/utils/react/useQaProps.js +1 -1
  620. package/dist/utils/react/useScheme.js +1 -1
  621. package/dist/utils/react/useViewportSize.js +1 -1
  622. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  623. package/dist/utils/selection.js +1 -1
  624. package/dist/utils/styles.js +1 -1
  625. package/dist/utils/tree.js +1 -1
  626. package/dist/utils/warnings.js +1 -1
  627. package/dist/version.js +2 -2
  628. package/docs/FieldProperties.md +16 -4
  629. package/docs/Usage.md +1 -1
  630. package/docs/components/data/ItemTable.md +25 -0
  631. package/docs/components/fields/ComboBox.md +8 -4
  632. package/docs/components/fields/CommandTextArea.md +1 -0
  633. package/docs/components/fields/HueSlider.md +0 -1
  634. package/docs/components/fields/NumberInput.md +4 -0
  635. package/docs/components/fields/PasswordInput.md +2 -0
  636. package/docs/components/fields/SearchInput.md +13 -0
  637. package/docs/components/fields/Slider.md +0 -1
  638. package/docs/components/fields/TextArea.md +1 -0
  639. package/docs/components/fields/TextInput.md +14 -1
  640. package/docs/components/navigation/Tabs.md +47 -0
  641. package/docs/components/overlays/Dialog.md +2 -2
  642. package/docs/components/overlays/DialogContainer.md +1 -0
  643. package/docs/components/overlays/DialogForm.md +3 -1
  644. package/docs/components/overlays/DialogTrigger.md +31 -1
  645. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.202.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.204.0 | Cube Dev Team */
2
2
  import { isDevEnvOrTest } from "./is-dev-env.js";
3
3
  //#region src/utils/warnings.ts
4
4
  const SUGGESTED_PROP_MAP = {
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.202.0 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.204.0 | Cube Dev Team */
2
2
  //#region src/version.ts
3
- const VERSION = "0.202.0";
3
+ const VERSION = "0.204.0";
4
4
  const TASTY_VERSION = "3.15.0";
5
5
  if (typeof window !== "undefined") {
6
6
  const version = VERSION;
@@ -53,19 +53,30 @@ The field wrapper stays in place when a description or message appears or disapp
53
53
 
54
54
  An input's style props (`width`, `height`, `flex*`, `gridArea`, `margin`, `inset`, `position`, …) place and size its outer element: the field wrapper when it renders, the input itself otherwise. Adding a label never changes where they apply. When they size a wrapped field, the input stretches to fill it as it would in a grid cell of that size. Inputs with a fixed or capped size keep it: `Checkbox` and `Switch` their content width, single-line inputs and a vertical `Slider` their height. A side label's column is part of the width, and a split label keeps the input at its content width.
55
55
 
56
- `styles` always styles the input and `fieldStyles` always styles the wrapper. To size them apart, use a style prop for the field and `styles` for the input:
56
+ `width` is the space an input takes in the layout, label included. `controlWidth` is the control's own width: it sizes the element `width` sizes when the input renders bare, in every label position. On a bare input, with no label, description or form binding, the two reach the same element, so use `width` there; `controlWidth` wins when both are set. Beside a side label, `controlWidth` sizes the control alone, fixed, capped or following its value, however long the label is in a given language:
57
57
 
58
58
  ```jsx
59
59
  // The field is 40x wide, label column included; the input fills it.
60
60
  <TextInput label="Name" labelPosition="side" width="40x" />
61
61
 
62
+ // The select is 100px wide beside its label.
63
+ <Select label="Limit" labelPosition="side" controlWidth="100px">…</Select>
64
+
65
+ // The select fills the space beside its label, up to 30x.
66
+ <Select label="Compare with" labelPosition="side" controlWidth="max 30x">…</Select>
67
+
68
+ // The select follows its value, up to 30x.
69
+ <Select label="Compare with" labelPosition="side" controlWidth="initial max-content 30x">…</Select>
70
+
62
71
  // The field is 40x wide; the input inside it stays 20x.
63
- <TextInput label="Name" width="40x" styles={{ width: '20x' }} />
72
+ <TextInput label="Name" width="40x" controlWidth="20x" />
64
73
  ```
65
74
 
66
- A style prop wins over `fieldStyles` for the same key. `fieldStyles` keeps working for everything else, but it never makes the input fill the field. Field-level inputs take only these style props; restyle the input through `styles` and its part props (`inputStyles`, `triggerStyles`, …).
75
+ In a `Form`, a side label's column is the Form's `labelWidth` (25x by default) plus 1x, so the control starts `labelWidth` + 1x from the field's edge and is `controlWidth` wide. `controlWidth` wins over `styles.width`. `styles` always styles the input and `fieldStyles` always styles the wrapper: keep `styles` for restyling the input itself.
76
+
77
+ A style prop wins over `fieldStyles` for the same key. `fieldStyles` keeps working for everything else, but it never makes the input fill the field. Field-level inputs take only these style props and `controlWidth`; restyle the input through `styles` and its part props (`inputStyles`, `triggerStyles`, …).
67
78
 
68
- A state map on a style prop resolves against the element it lands on, which is the wrapper on a labelled field. Use media, container or root states there, not the input's own states such as `focused`. `className`, `style`, `qa` and `ref` never move to the wrapper.
79
+ A state map on a style prop resolves against the element it lands on, which is the wrapper on a labelled field. Use media, container or root states there, not the input's own states such as `focused`. A state map on `controlWidth` resolves against the control. `className`, `style`, `qa` and `ref` never move to the wrapper.
69
80
 
70
81
  Fields without labels no longer reserve an empty side or split label column. If a row should intentionally align with neighbouring side labels, add `fieldStyles={{ padding: '$full-label-width left' }}`. For a nameless legacy `Form.Item`, put that padding on the item's `styles` instead; it owns the wrapper. Remove deprecated `forceField` when migrating these rows.
71
82
 
@@ -123,6 +134,7 @@ Fields without labels no longer reserve an empty side or split label column. If
123
134
 
124
135
  ## Styling
125
136
 
137
+ - **`controlWidth`** `Styles['width']` — The control's own width, in every label position: the element `width` sizes when the input renders bare. Beside a side label it sizes the control alone. It wins over `width` on a bare input and over `styles.width`; see _Field sizing and alignment_.
126
138
  - **`fieldStyles`** `Styles` — Tasty styles for the field wrapper. A style prop for the same key wins over it.
127
139
  - **`messageStyles`** `Styles` — Tasty styles for the message/error text.
128
140
 
package/docs/Usage.md CHANGED
@@ -415,7 +415,7 @@ The package's `tasty.config.ts` lists the other components as `protectedComponen
415
415
  - style props other than the ones that place or size the component (`width`, `height`, `gridArea`, `margin`, `inset`, …). Containers (`Card`, `Panel`, `ResizablePanel`, `Content`, `Header`, `Footer`, and `Layout` and `GridLayout` with their sub-components) also keep the ones that lay out their content: `padding`, `gap`, `flow`, `place*`, `align*`, `justify*`, `grid*`, `overflow` and `scrollbar`. Root `styles` that sets only allowed props passes too;
416
416
  - `tasty()` wrappers that restyle a protected component, and wrappers of those wrappers.
417
417
 
418
- On an input, the style props that place or size it act on its outer element: the field wrapper when it renders (see [Field properties](./FieldProperties.md)), the input itself otherwise. Its `styles` always style the input, so a root `styles` that only sizes it passes the rule but sizes the input inside the field, not the field. Input components take no other style props.
418
+ On an input, the style props that place or size it act on its outer element: the field wrapper when it renders (see [Field properties](./FieldProperties.md)), the input itself otherwise. Its `styles` always style the input, so a root `styles` that only sizes it passes the rule but sizes the input inside the field, not the field. To size the input alone, beside a side label for example, use its `controlWidth` prop. Input components take no other style props.
419
419
 
420
420
  A component's own prop that shares a name with a style passes, such as a field's `direction` and `filter`, a text field's `resize`, `ColorSwatch`'s `color` or `AlertDialog`'s `content`.
421
421
 
@@ -22,6 +22,8 @@ Use `DataTable` instead when a _cell_ is the unit of interest — query results,
22
22
  - **`columns`** `CubeItemTableColumn<T>[]` — Column definitions. See below.
23
23
  - **`rowKey`** `string` (default: `'id'`) — Property used as the row key.
24
24
  - **`getRowKey`** `(row: T, index: number) => Key` — Wins over `rowKey`.
25
+ - **`sections`** `readonly CubeItemTableSection[]` — Ordered `{ key, title }` captions for a flat list. Empty sections are omitted. Requires `getSectionKey`.
26
+ - **`getSectionKey`** `(row: T) => Key` — Assigns every displayed record to a declared section key.
25
27
  - **`getRowChildren`** `(row: T) => readonly T[] | undefined` — Enables tree mode. `data` then contains top-level rows and children are read recursively.
26
28
  - **`treeColumnKey`** `string` — Column containing indentation and the disclosure control. Defaults to the first visible data column.
27
29
  - **`expandedKeys`** `Key[]` — Controlled expanded rows.
@@ -201,6 +203,7 @@ Customizes the root frame. Every internal part of the table is a **sub-element**
201
203
  - `TreeContent`, `TreeToggle`, `TreeValue` — indentation, disclosure/leaf placeholder, and the consumer-rendered value in the tree column
202
204
  - `SortIndicator` — the sort arrow, inside the header `Item`'s suffix
203
205
  - `Foot`, `FootRow`, `FootCell` — pinned totals
206
+ - `SectionRow`, `SectionCell`, `SectionContent`, `SectionLabel` — full-width list section captions, separate from record hover/selection styles; labels stay visible while scrolling horizontally
204
207
  - `StateContent` — the empty / no-results / error content
205
208
 
206
209
  ```jsx
@@ -579,6 +582,28 @@ Deliberately distinct, and not interchangeable:
579
582
 
580
583
  Unselectable rows are excluded from every scope. Pressing the header checkbox while everything in scope is selected clears the **whole** selection, not just the scope — leaving keys selected on other pages behind an unchecked-looking box is how people delete things they did not mean to.
581
584
 
585
+ ### Section Headers
586
+
587
+ Use `sections` to divide a flat list into labeled zones while sharing its column headers, column widths and scroll area:
588
+
589
+ ```jsx
590
+ <ItemTable
591
+ data={items}
592
+ columns={columns}
593
+ sections={[
594
+ { key: 'favorites', title: 'Favorites' },
595
+ { key: 'other', title: 'Other items' },
596
+ ]}
597
+ getSectionKey={(item) => item.isFavorite ? 'favorites' : 'other'}
598
+ />
599
+ ```
600
+
601
+ The array defines section order. Client sorting applies within each section; clearing the sort restores source order within each section. Search filters records, then empty sections disappear. Captions do not consume page slots or affect footer counts, selection, bulk actions, links or row actions. A section continuing onto another client page repeats its caption there. Keyboard row navigation skips captions, and virtualization measures them separately from records. Accessible captions are structural grid rows, so `aria-rowcount` and document-absolute row indices include them; pagination summaries still count records only. Sectioned records keep keys resolved from their source positions, including when `getRowKey` uses its index argument.
602
+
603
+ `title` accepts a React node. Captions scroll with the list and can be customized with `styles.SectionCell` and `styles.SectionRow`. For example, `styles={{ SectionCell: { preset: 't3m' } }}` changes their typography without changing column headers or record cells.
604
+
605
+ This first version applies to flat tables with client, infinite or no pagination. Infinite mode groups the currently loaded records; the caller still owns loading. Tree mode, row drag/drop and server pagination keep their existing behavior and ignore section props with a development warning. These modes need hierarchy, drop-boundary or unseen-section metadata that ordinary captions do not provide. Missing paired props, duplicate section keys or a displayed record returning an undeclared key also warn and fall back to the ordinary list, preserving all records.
606
+
582
607
  ### Row Links and Row Actions
583
608
 
584
609
  `rowLink` turns the row-header cell into a stretched anchor covering the whole row:
@@ -28,7 +28,7 @@ A combobox component that combines a text input with a dropdown list, allowing u
28
28
  - **`defaultSelectedKey`** `string` — The key of the initially selected item (uncontrolled)
29
29
  - **`allowsCustomValue`** `boolean` (default: `false`) — Whether the combo box allows custom values to be entered
30
30
  - **`shouldCommitOnBlur`** `boolean` (default: `true`) — Whether to commit custom value on blur in allowsCustomValue mode. When `false`, blur discards the uncommitted text
31
- - **`clearOnBlur`** `boolean` (default: `false`) — Whether to clear selection and input on blur when the text names no selectable item (only applies to non-custom-value mode)
31
+ - **`clearOnBlur`** `boolean` (default: `false`) — Whether to clear selection and input on blur, or on `Enter` with the popover closed, when the text names no selectable item (only applies to non-custom-value mode)
32
32
  - **`isClearable`** `boolean` (default: `false`) — Whether the combo box is clearable using ESC keyboard button or clear button inside the input
33
33
  - **`sortSelectedToTop`** `boolean` (default: `true when items provided, false otherwise`) — Whether to sort selected item to the top when popover opens (only works with items prop)
34
34
  - **`popoverTrigger`** `'focus' | 'input' | 'manual'` (default: `input`) — When the list opens on its own, see **popoverTrigger** below
@@ -56,7 +56,7 @@ A combobox component that combines a text input with a dropdown list, allowing u
56
56
 
57
57
  #### Notable Properties
58
58
 
59
- **onKeyDown** - Runs before ComboBox's own key handling, listed under [Keyboard Navigation](#keyboard-navigation). Calling `e.preventDefault()` takes the key over: ComboBox skips its handling for that event, so a prevented `ArrowDown` does not open the popover or move focus, and a prevented `Enter` does not select the focused option or commit a custom value. Without `preventDefault()` the built-in handling runs as usual after your handler. The event is React Aria's keyboard event (`KeyboardEvent` from `@react-types/shared`). `Escape` and `Tab` go on to ancestors, so a surrounding `Dialog` still closes on `Escape` and moves focus on `Tab`, unless ComboBox acts on them or you prevent them: `Escape` that closes the list or clears the value stops at the input, and so does an `Escape` or `Tab` you prevent. Other keys stop at the input unless you call `e.continuePropagation()`.
59
+ **onKeyDown** - Runs before ComboBox's own key handling, listed under [Keyboard Navigation](#keyboard-navigation). Calling `e.preventDefault()` takes the key over: ComboBox skips its handling for that event, so a prevented `ArrowDown` does not open the popover or move focus, and a prevented `Enter` does not select the focused option, settle the typed text or commit a custom value. Without `preventDefault()` the built-in handling runs as usual after your handler. The event is React Aria's keyboard event (`KeyboardEvent` from `@react-types/shared`). `Escape` and `Tab` go on to ancestors, so a surrounding `Dialog` still closes on `Escape` and moves focus on `Tab`, unless ComboBox acts on them or you prevent them: `Escape` that closes the list or clears the value stops at the input, and so does an `Escape` or `Tab` you prevent. Other keys stop at the input unless you call `e.continuePropagation()`.
60
60
 
61
61
  ```jsx
62
62
  <ComboBox
@@ -102,6 +102,8 @@ const [selectedKey, setSelectedKey] = useState(null);
102
102
  </ComboBox>;
103
103
  ```
104
104
 
105
+ Without `allowsCustomValue`, the built-in `Enter` on a closed popover settles text that matches an option, or names the selection, as blur does, then lets the form submit (see `Enter` under [Keyboard Navigation](#keyboard-navigation)). A handler that prevents it leaves the text unsettled until blur.
106
+
105
107
  **defaultInputValue** - Sets the initial input value in uncontrolled mode. This is useful when you want to display a specific text in the input field on mount without selecting any option. When both `defaultInputValue` and `defaultSelectedKey` are provided, `defaultInputValue` takes priority. The value can be changed by the user and is not enforced after initial render.
106
108
 
107
109
  **sortSelectedToTop** - When using the `items` prop (data-driven mode), the selected item will automatically appear at the top of the list when the popover opens. This is enabled by default when using `items`, but disabled when using JSX children. Set to `false` to maintain the original order.
@@ -112,7 +114,7 @@ const [selectedKey, setSelectedKey] = useState(null);
112
114
 
113
115
  **isReadOnly** - The list doesn't open, from the chevron, the arrow keys, a press in the input or focus, and neither keys nor blur change the value or the text. The clear button is hidden.
114
116
 
115
- **clearOnBlur** - When `true`, text that names no selectable item clears both the selection and the input when the input loses focus. When `false` (default), the input reverts to showing the current selection, and empty text still clears it. Only applies to non-custom-value mode. Useful for search-like scenarios where you want to reset after each interaction.
117
+ **clearOnBlur** - When `true`, text that names no selectable item clears both the selection and the input when the input loses focus, or on `Enter` with the popover closed. When `false` (default), the input reverts to showing the current selection, and empty text still clears it. Only applies to non-custom-value mode. Useful for search-like scenarios where you want to reset after each interaction.
116
118
 
117
119
  **Blur** - Without `allowsCustomValue`, leaving the input selects the item the text names exactly, or else the only item it still matches, unless that item is in `disabledKeys`. The exact match follows the filter's rules for case, accents and locale. Among items sharing the label, the selected one wins, then the first enabled one. Empty text clears the selection. Other text reverts to the selection, or clears with `clearOnBlur`; a disabled item that is already selected stays selected. Blur reports only what it changes: leaving a field without editing it calls neither `onSelectionChange` nor `onInputChange`.
118
120
 
@@ -572,7 +574,7 @@ const [selectedKey, setSelectedKey] = useState(null);
572
574
  - `Tab` - Moves focus to/from the combobox input and closes the popover. The chevron and clear buttons are not Tab stops
573
575
  - `ArrowDown` - Opens popover (if closed) or moves focus to next option
574
576
  - `ArrowUp` - Opens popover (if closed) or moves focus to previous option
575
- - `Enter` - Selects the focused option and closes popover. Pressed right after typing, it picks the first match. With `allowsCustomValue` and the popover closed, commits the typed text. Ignored while an input method (IME) is composing text
577
+ - `Enter` - Selects the focused option and closes popover. With the popover open, pressed right after typing, it picks the first match. With the popover closed and without `allowsCustomValue`, settles the typed text as leaving the input does (see **Blur**) and lets a surrounding form submit the result; text that matches no option and does not name the selection, or no text, clears the selection instead and does not submit. With `allowsCustomValue` and the popover closed, commits the typed text. Ignored while an input method (IME) is composing text
576
578
  - `Escape` - Closes popover (if open) or clears input (if clearable and popover closed); otherwise it goes on, so a surrounding dialog closes
577
579
  - `Home` - Moves focus to the first option (when popover is open)
578
580
  - `End` - Moves focus to the last option (when popover is open)
@@ -718,6 +720,8 @@ An `onKeyDown` handler runs before all of these and can skip any of them for a k
718
720
 
719
721
  This component supports all [Field properties](../../FieldProperties.md) when used within a Form. It integrates seamlessly with the form validation system and supports both controlled and uncontrolled modes.
720
722
 
723
+ When the browser submits the form itself, as a plain `<form>` or a Form with `action` does,, `name` submits the selected key through a hidden input, not the label the input shows. With `allowsCustomValue` that is the committed text. Nothing selected submits an empty string, and a disabled ComboBox submits nothing.
724
+
721
725
  ### Form Example
722
726
 
723
727
  ```jsx
@@ -37,6 +37,7 @@ Choose a different component when the interaction has another outcome:
37
37
  - **`autoSize`** `boolean` (default: `false`) — Resize to fit content.
38
38
  - **`rows`** `number` (default: `3`) — Visible rows.
39
39
  - **`maxRows`** `number` (default: `10`) — Max visible rows when `autoSize` is true.
40
+ - **`shape`** `'default' | 'plain'` (default: `default`) — Shape of the field box. `plain` is square with no border at rest, for a field set flush in a container that draws its edges, such as a toolbar or a panel header. Its border keeps its width and shows on focus and in a valid or invalid state, so nothing shifts
40
41
  - **`tooltip`** `string | TooltipProviderProps` — The input's own tooltip, opened on hover over the field box and on keyboard focus. It closes on the first key, so it never covers the suggestions. See [TextInput](./TextInput.md#with-a-tooltip) for the behaviour
41
42
 
42
43
  Each option's value is the **literal string to insert**. For commands, set the item's `textValue` (and `key`) to the full `/clear` — the slash is part of both the active token and the inserted value, so `/cle` becomes `/clear ` with no duplication. This decouples insertion from the trigger, so non-command autocomplete (e.g. a `@mention` resolving to `@john`) works the same way.
@@ -21,7 +21,6 @@ The HueSlider component allows users to select a hue value (0-359 degrees) from
21
21
  - **`orientation`** `'horizontal' | 'vertical'` (default: `horizontal`) — The orientation of the slider
22
22
  - **`gradation`** `string[]` — Labels to display at gradation marks along the slider track
23
23
  - **`formatOptions`** `Intl.NumberFormatOptions` — Options for formatting the displayed value label
24
- - **`inputWidth`** `string` — Width of the slider input area
25
24
  - **`showValueLabel`** `boolean` (default: `true`) — Whether to show the current value label
26
25
  - **`getValueLabel`** — Function to format the value label
27
26
  - **`onChange`** `function` — Callback fired when the hue value changes
@@ -31,6 +31,7 @@ A number input component that allows users to enter numeric values and increment
31
31
  - **`step`** `number` — Amount to increment or decrement the value
32
32
  - **`formatOptions`** `Intl.NumberFormatOptions` — Options for formatting the displayed number value
33
33
  - **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — Input size
34
+ - **`shape`** `'default' | 'plain'` (default: `default`) — Shape of the field box. `plain` is square with no border at rest, for a field set flush in a container that draws its edges, such as a toolbar or a panel header. Its border keeps its width and shows on focus and in a valid or invalid state, so nothing shifts
34
35
  - **`autoComplete`** `string` (default: `off`) — HTML [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete) token that tells the browser what to autofill (`cc-number`, `one-time-code`, …). A number field opts out of autofill by default.
35
36
  - **`isWheelDisabled`** `boolean` — Whether scrolling the mouse wheel changes the value
36
37
  - **`decrementAriaLabel`** `string` — Custom aria-label for the decrement button, in place of the translated "Decrease {label}"
@@ -113,6 +114,7 @@ The `mods` prop accepts the following modifiers you can override:
113
114
  - **`hovered`** `boolean` — Forces hover appearance.
114
115
  - **`prefix`** `boolean` — Indicates presence of prefix content.
115
116
  - **`suffix`** `boolean` — Indicates presence of suffix content.
117
+ - **`shape`** `'default' | 'plain'` — Set from `shape`: `plain` drops the radius, and the border colour at rest.
116
118
 
117
119
  ## Variants
118
120
 
@@ -214,6 +216,8 @@ A unit sits between the number and the steppers. Pass `suffixPosition="after"` t
214
216
 
215
217
  This component supports all [Field properties](../../FieldProperties.md) when used within a Form.
216
218
 
219
+ When the browser submits the form itself, as a plain `<form>` or a Form with `action` does,, `name` submits the number through a hidden input: `1234.5`, not the formatted `1,234.5` the input shows. An empty field submits an empty string, and a disabled NumberInput submits nothing.
220
+
217
221
  ## Suggested Improvements
218
222
 
219
223
  - Provide `maxValue`/`minValue` indicator with value range
@@ -26,6 +26,7 @@ A password input is a specialized text field that masks user input to protect se
26
26
  - **`tooltip`** `string | TooltipProviderProps` — The input's own tooltip, opened on hover over the field box and on keyboard focus. A disabled input with a tooltip stays focusable, so the keyboard reaches it too. See [TextInput](./TextInput.md#with-a-tooltip) for the behaviour.
27
27
  - **`suffixPosition`** `'before' | 'after'` (default: `after`) — Position of suffix relative to validation/loading icons
28
28
  - **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — Input size
29
+ - **`shape`** `'default' | 'plain'` (default: `default`) — Shape of the field box. `plain` is square with no border at rest, for a field set flush in a container that draws its edges, such as a toolbar or a panel header. Its border keeps its width and shows on focus and in a valid or invalid state, so nothing shifts
29
30
  - **`autoComplete`** `string` — HTML [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete) token that tells the browser what to autofill (`current-password`, `new-password`, `off`, …). The lowercase `autocomplete` alias is deprecated.
30
31
  - **`inputProps`** `Props` — Direct props passed to the native input element, merged over the props React Aria generates: a key you set wins, and event handlers are chained rather than replaced. The explicit `isDisabled`, `maxLength`, `minLength`, `autoFocus` and `autoComplete` props win over the same attributes in `inputProps` when they are set; one left unset keeps the `inputProps` value
31
32
  - **`wrapperProps`** `Props` — Direct props passed to the input wrapper element
@@ -101,6 +102,7 @@ The `mods` property accepts the following modifiers you can override:
101
102
  - **`valid`** `boolean` — Whether the password input is valid
102
103
  - **`hovered`** `boolean` — Whether the password input is being hovered
103
104
  - **`inside-form`** `boolean` — Whether the password input is inside a form field
105
+ - **`shape`** `'default' | 'plain'` — Set from `shape`: `plain` drops the radius, and the border colour at rest.
104
106
 
105
107
  ## Variants
106
108
 
@@ -27,6 +27,7 @@ A search input provides a specialized text field for search functionality, featu
27
27
  - **`suffixPosition`** `'before' | 'after'` (default: `after`) — Position of suffix relative to validation/loading state icons
28
28
  - **`isClearable`** `boolean` (default: `false`) — Whether the search input shows a clear button while it has text. `Escape` clears the input either way
29
29
  - **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — Input size
30
+ - **`shape`** `'default' | 'plain'` (default: `default`) — Shape of the field box. `plain` is square with no border at rest, for a field set flush in a container that draws its edges, such as a toolbar or a panel header. Its border keeps its width and shows on focus and in a valid or invalid state, so nothing shifts
30
31
  - **`autoComplete`** `string` — HTML [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete) token that tells the browser what to autofill (`off` to suppress autofill on a filter field). The lowercase `autocomplete` alias is deprecated.
31
32
  - **`inputProps`** `Props` — Direct props passed to the native input element, merged over the props React Aria generates: a key you set wins, and event handlers are chained rather than replaced
32
33
  - **`wrapperProps`** `Props` — Direct props passed to the input wrapper element
@@ -81,6 +82,7 @@ The `mods` property accepts the following modifiers you can override:
81
82
  - **`valid`** `boolean` — Whether the search input is valid
82
83
  - **`hovered`** `boolean` — Whether the search input is being hovered
83
84
  - **`inside-form`** `boolean` — Whether the search input is inside a form field
85
+ - **`shape`** `'default' | 'plain'` — Set from `shape`: `plain` drops the radius, and the border colour at rest.
84
86
 
85
87
  ## Variants
86
88
 
@@ -90,6 +92,17 @@ The `mods` property accepts the following modifiers you can override:
90
92
  - `medium` - Standard size
91
93
  - `large` - Emphasized size for prominent search functionality
92
94
 
95
+ ### Shapes
96
+
97
+ - `default` - A rounded field box with a border
98
+ - `plain` - A square field box with no border at rest, for a field set flush in a container that draws its edges, such as a toolbar or a panel header. The border still marks focus and validity.
99
+
100
+ ```jsx
101
+ <Block styles={{ border: 'bottom', fill: '#surface' }}>
102
+ <SearchInput shape="plain" width="100%" aria-label="Search models" placeholder="Search models" />
103
+ </Block>
104
+ ```
105
+
93
106
  ## Examples
94
107
 
95
108
  ### Basic Usage
@@ -39,7 +39,6 @@ Pass `isValid` or `isInvalid` to tint the track fill and the thumb.
39
39
  - **`showValueLabel`** `boolean` — Whether the value label is displayed (defaults to `true` when `label` is present)
40
40
  - **`getValueLabel`** `(value: number) => string` — Custom function to format the value label
41
41
  - **`formatOptions`** `Intl.NumberFormatOptions` — Number format options for the value label display
42
- - **`inputWidth`** `string` — Width of the input area
43
42
  - **`trackStyles`** `Styles` — Custom styles for the track element
44
43
  - **`thumbStyles`** `Styles` — Custom styles for the thumb element
45
44
  - **`thumbTokens`** `Tokens` — Custom tokens for the thumb element (e.g., `#slider-thumb` for fill color)
@@ -45,6 +45,7 @@ These properties allow direct style application without using the `styles` prop:
45
45
  - **`suffixPosition`** `'before' | 'after'` (default: `'before'`) — Position of suffix relative to validation/loading state icons
46
46
  - **`resize`** `string` — CSS resize value (e.g. `'vertical'`, `'none'`)
47
47
  - **`size`** `'small' | 'medium' | 'large'` (default: `'medium'`) — Input size
48
+ - **`shape`** `'default' | 'plain'` (default: `default`) — Shape of the field box. `plain` is square with no border at rest, for a field set flush in a container that draws its edges, such as a toolbar or a panel header. Its border keeps its width and shows on focus and in a valid or invalid state, so nothing shifts
48
49
  - **`autoComplete`** `string` — HTML [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete) token that tells the browser what to autofill (`street-address`, `off`, …). The lowercase `autocomplete` alias is deprecated.
49
50
  - **`maxLength`** `number` — Maximum number of characters allowed
50
51
  - **`minLength`** `number` — Minimum number of characters required
@@ -30,6 +30,7 @@ A text input component that allows users to input custom text entries with a key
30
30
  - **`rows`** `number` — Number of visible rows for multiline input
31
31
  - **`resize`** `string` — CSS resize value for multiline input (e.g. `'vertical'`, `'none'`)
32
32
  - **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — Input size
33
+ - **`shape`** `'default' | 'plain'` (default: `default`) — Shape of the field box. `plain` is square with no border at rest, for a field set flush in a container that draws its edges, such as a toolbar or a panel header. Its border keeps its width and shows on focus and in a valid or invalid state, so nothing shifts
33
34
  - **`autoComplete`** `string` — HTML [`autocomplete`](https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete) token that tells the browser what to autofill (`email`, `username`, `off`, …). The lowercase `autocomplete` alias is deprecated.
34
35
  - **`maxLength`** `number` — Maximum number of characters allowed
35
36
  - **`minLength`** `number` — Minimum number of characters required
@@ -121,6 +122,7 @@ The `mods` prop accepts the following modifiers you can override:
121
122
  - **`multiline`** `boolean` — Set for a multiline input.
122
123
  - **`prefix`** `boolean` — Indicates presence of prefix content.
123
124
  - **`suffix`** `boolean` — Indicates presence of suffix content.
125
+ - **`shape`** `'default' | 'plain'` — Set from `shape`: `plain` drops the radius, and the border colour at rest.
124
126
 
125
127
  ## Variants
126
128
 
@@ -139,6 +141,17 @@ The `mods` prop accepts the following modifiers you can override:
139
141
  - `medium` – Standard height for most use cases
140
142
  - `large` – Emphasized height for important inputs
141
143
 
144
+ ### Shapes
145
+
146
+ - `default` – A rounded field box with a border
147
+ - `plain` – A square field box with no border at rest, for a field set flush in a container that draws its edges, such as a toolbar or a panel header. The border still marks focus and validity. See `SearchInput`'s Plain story.
148
+
149
+ ```jsx
150
+ <Block styles={{ border: 'bottom' }}>
151
+ <TextInput shape="plain" width="100%" aria-label="Title" placeholder="Untitled" />
152
+ </Block>
153
+ ```
154
+
142
155
  ## Examples
143
156
 
144
157
  ### Basic Usage
@@ -181,7 +194,7 @@ import { IconMail } from '@tabler/icons-react';
181
194
  | `Escape` while it is open | Closes the tooltip only. The key goes no further, so it doesn't clear a `SearchInput` or close a surrounding dialog |
182
195
  | The input loses focus, or the pointer leaves | Closes |
183
196
 
184
- A disabled field still shows its tooltip, which makes it the place to say why it can't be changed. While it has a tooltip it stays focusable, marked `aria-disabled` and read-only instead of natively disabled, so keyboard users can read the reason too. It takes no text, `NumberInput` doesn't step, `Enter` submits nothing, and a click on it or on its label doesn't focus it, as with a natively disabled field. Screen readers announce it as disabled and read-only. Not being natively disabled, its value is part of a plain `<form>`'s submitted data; ui-kit's `Form` is not affected. Without a tooltip, a disabled input is natively disabled and `Tab` skips it.
197
+ A disabled field still shows its tooltip, which makes it the place to say why it can't be changed. While it has a tooltip it stays focusable, marked `aria-disabled` and read-only instead of natively disabled, so keyboard users can read the reason too. It takes no text, `NumberInput` doesn't step, `Enter` submits nothing, and a click on it or on its label doesn't focus it, as with a natively disabled field. Screen readers announce it as disabled and read-only. Not being natively disabled, its value is part of a plain `<form>`'s submitted data, except `NumberInput`'s, which submits through a hidden input that is disabled with the field. A ui-kit `Form` that handles its own submission is not affected. Without a tooltip, a disabled input is natively disabled and `Tab` skips it.
185
198
 
186
199
  ```jsx
187
200
  <NumberInput isDisabled aria-label="Font size" tooltip="Turn data labels on to change this" />
@@ -105,6 +105,53 @@ For individual tabs:
105
105
  - **`draggable`** `boolean` — True when tab can be dragged (reorderable)
106
106
  - **`dragging`** `boolean` — True when tab is being dragged
107
107
 
108
+ ### Theming
109
+
110
+ Tabs has no theming props. To dress the tabs in your own colors and font, re-declare the tokens they read through `tabListStyles`, `styles` or `tokens`:
111
+
112
+ - **Title** — `#surface-text-soft`. A disabled title keeps `#disabled-surface-text`.
113
+ - **Active title** of a `default` or `narrow` tab, and a hovered `narrow` title — `#primary-accent-text`
114
+ - **Selection indicator** — `#primary-accent-surface`: the line a `default` or `narrow` tab draws on the edge facing the panels, and the same edge of a selected `file` tab
115
+ - **Title font** — `$font-sans`, which the tab's typography preset takes its font family from
116
+
117
+ Tabs read these names directly, so overriding the legacy aliases they replaced (`#dark-02`, `#primary-text`, `#primary`) no longer reaches them.
118
+
119
+ Put the tokens in `tabListStyles` to keep them to the tabs. In `tokens` or `styles` on `Tabs` they are declared on its outer wrapper, so they reach everything inside that reads them, the panels included: there `#primary-accent-surface` also fills primary buttons and `$font-sans` sets the body text. Use them there for a `Tabs` without panels, or when the panels should take the theme too. A `font` in a tab's own `styles` wins over the preset for that tab alone. The same tokens also color the tab's focus and editing ring (`#primary-accent-text`), the drag-and-drop indicator and the spring-load hint (`#primary-accent-surface`), so an override recolors those too.
120
+
121
+ ```jsx
122
+ <Tabs
123
+ defaultActiveKey="overview"
124
+ tabListStyles={{
125
+ '#surface-text-soft': '#success-accent-text-soft',
126
+ '#primary-accent-text': '#success-accent-text',
127
+ '#primary-accent-surface': '#success-accent-surface',
128
+ '$font-sans': 'Georgia, serif',
129
+ }}
130
+ >
131
+ <Tab key="overview" title="Overview" />
132
+ <Tab key="activity" title="Activity" />
133
+ <Tab key="query" title="Query" styles={{ font: 'monospace' }} />
134
+ </Tabs>
135
+ ```
136
+
137
+ A navigation strip with no panels, themed with your own tokens:
138
+
139
+ ```jsx
140
+ <Tabs
141
+ activeKey={activeKey}
142
+ tokens={{
143
+ '#surface-text-soft': '#widget-text-secondary',
144
+ '#primary-accent-text': '#widget-title',
145
+ '#primary-accent-surface': '#widget-title',
146
+ '$font-sans': '$widget-title-font',
147
+ }}
148
+ onChange={setActiveKey}
149
+ >
150
+ <Tab key="sales" title="Sales" />
151
+ <Tab key="marketing" title="Marketing" />
152
+ </Tabs>
153
+ ```
154
+
108
155
  ## Variants
109
156
 
110
157
  ### Types
@@ -21,7 +21,7 @@ Dialogs are windows containing contextual information, tasks, or workflows that
21
21
  - **`styles`** — Custom styles for the dialog root
22
22
  - **`closeButtonStyles`** — Custom styles for the close button
23
23
  - **`isDismissable`** `boolean` (default: from its `DialogTrigger` or `DialogContainer`) — Whether the dialog shows its close button. Inside a `DialogTrigger` or `DialogContainer` it takes their `isDismissable` (default `true`), except in a popover. A popover or a standalone dialog shows no close button unless you set this prop. `Escape` and outside presses follow the trigger's or container's `isDismissable`, not this one
24
- - **`onDismiss`** `function` — Callback fired when the dialog is dismissed
24
+ - **`onDismiss`** `function` — Callback fired when the dialog is dismissed. The close button calls it, after "Discard changes?" when its trigger or container asks first (`confirmDismiss`)
25
25
  - **`closeIcon`** — Custom close icon element
26
26
  - **`role`** `'dialog' | 'alertdialog'` (default: `dialog`) — ARIA role for the dialog
27
27
 
@@ -194,7 +194,7 @@ To clamp the width yourself, set `styles.width` (`styles={{ width: 'initial 520p
194
194
 
195
195
  - `Tab` - Moves focus between interactive elements within the dialog
196
196
  - `Shift + Tab` - Moves focus backward between interactive elements
197
- - `Escape` - Closes the dialog when its `DialogTrigger` or `DialogContainer` is dismissable (`isDismissable`, on by default) and `isKeyboardDismissDisabled` is not set. If a control inside already prevents the key's default, the dialog stays open and keeps the handled Escape from reaching an enclosing dialog
197
+ - `Escape` - Closes the dialog when its `DialogTrigger` or `DialogContainer` is dismissable (`isDismissable`, on by default) and `isKeyboardDismissDisabled` is not set. A dialog with unsaved edits asks "Discard changes?" first (`confirmDismiss`). If a control inside already prevents the key's default, the dialog stays open and keeps the handled Escape from reaching an enclosing dialog
198
198
  - `Enter/Space` - Activates focused buttons or interactive elements
199
199
 
200
200
  ### Screen Reader Support
@@ -21,6 +21,7 @@ A DialogContainer accepts a single Dialog as a child, and manages to show and hi
21
21
  - **`styles`** `Styles` — Styles for the overlay content shell
22
22
  - **`isDismissable`** `boolean` (default: `true`) — Whether the Dialog is dismissible
23
23
  - **`isKeyboardDismissDisabled`** `boolean` (default: `false`) — Whether pressing the escape key to close the dialog should be disabled
24
+ - **`confirmDismiss`** `boolean` — Whether Escape, an outside click and the close button ask "Discard changes?" before they call `onDismiss`. Unset, they ask while a `DialogForm` inside has unsaved edits; `true` always asks, `false` never does. Closing it from code (`isOpen`, removing the child) never asks. See [Unsaved edits](./DialogTrigger.md#unsaved-edits)
24
25
  - **`isOpen`** `boolean` — Whether the modal is open or not
25
26
  - **`onDismiss`** `function` — Handler called when the x button of a dismissible Dialog is clicked
26
27
  - **`hideOnClose`** `boolean` (default: `false`) — Whether the dialog should be hidden when closed. Focus moves as for a dialog that mounts on open: in on every open, and on close back to the element that opened it, or to the trigger of the menu or popover it sat in once that has closed. [Focus with `hideOnClose`](#focus-with-hideonclose) lists what still differs
@@ -24,9 +24,10 @@ The examples below use modern controllers. See [Modern Form](../form/ModernForm.
24
24
  - **`submitProps`** `CubeButtonProps` (legacy) / `Omit<CubeSubmitButtonProps<T>, 'form'>` (modern) — Customize the submit button, including its text (`children`) and modern `disableOnInvalid`
25
25
  - **`cancelProps`** `CubeButtonProps` — Customize the cancel button, including its text (`children`)
26
26
  - **`preserve`** `boolean` (default: `false`) — Retain values when the editing session ends. Keep the controller mounted above the dialog to retain a draft across dialog unmounts.
27
+ - **`confirmDismiss`** `boolean` — Whether Escape, an outside click and the close button ask "Discard changes?" before they close the dialog. Unset, they ask while a field the user edited differs from its default, unless `preserve` is set. Set `false` for a confirmation, such as typing a name to delete, where backing out loses nothing. An explicit `confirmDismiss` on the `DialogTrigger` or `DialogContainer` wins. See [Unsaved edits](./DialogTrigger.md#unsaved-edits)
27
28
  - **`noActions`** `boolean` — Hide the default submit/cancel buttons
28
29
  - **`children`** `ReactNode | ((dismiss: () => void) => ReactNode)` — Fields, or a render function for custom actions
29
- - **`onDismiss`** `() => void` — Called by the built-in Cancel/close button or the render function's `dismiss`. Handle Escape, outside clicks, and externally controlled closing on `DialogTrigger` or `DialogContainer`.
30
+ - **`onDismiss`** `() => void` — Called by the built-in Cancel/close button or the render function's `dismiss`. Handle Escape, outside clicks, and externally controlled closing on `DialogTrigger` or `DialogContainer`. With unsaved edits, the close button calls it only after the user discards them.
30
31
  - **`onSubmit`** `(values: FormValues<T>, context: ModernSubmitContext) => void | Promise<void>` — Modern submit callback. Resolve to close; throw/reject to keep the dialog open. The context supplies an `AbortSignal`.
31
32
  - **`onSubmitFailed`** `(failure: ModernSubmitFailure) => void | Promise<void>` — Distinguishes invalid fields from a failed save
32
33
  - **`onValuesChange`** `(values: FormValues<T>, change: FormChange) => void | Promise<void>` — Modern value-change callback
@@ -154,6 +155,7 @@ The parent owns `form` in this example. `preserve` keeps its draft on dismissal
154
155
  - Invalid fields and rejected saves leave the dialog open. Include `Form.SubmitError` to display save failures. Submit stays enabled after validation errors by default so the user can retry.
155
156
  - In a popover, modern form actions keep the dialog open while validating or saving. This also covers custom actions inside the form; successful submission and explicit dismissal control when it closes.
156
157
  - Explicit Submit/Cancel actions can close a dialog even when its trigger disables passive dismissal with `isDismissable={false}`. Escape and outside-click dismissal remain disabled.
158
+ - While a field the user edited differs from its default, Escape, a click outside and the close button ask "Discard changes?" before they close the dialog ([Unsaved edits](./DialogTrigger.md#unsaved-edits)); Submit, Cancel and the render function's `dismiss` close it at once. A value set from code (`setValue`, `setFieldsValue`) is not an edit, even once the user has visited that field, so filling the form on open doesn't ask. A custom input that writes with the modern `setValue` passes `{ source: 'user' }`, so its changes count. With `preserve` the edits survive the close, so it never asks, and neither does a popover. Set `confirmDismiss={false}` to close at once.
157
159
  - Modern dismissal cancels pending submission even with `preserve`. The submitted callback receives an aborted signal; a late completion cannot close a reopened dialog. Pass the signal to abortable API work.
158
160
  - Modern values reset when the editing session ends unless `preserve` is set. This includes Cancel, the close button, Escape/outside closing, and removal of the dialog. Hidden dialogs also end the session when closed. A close followed by an immediate reopen has no delayed reset that can erase new edits.
159
161
  - Replacing the modern controller ends the detached controller's session using its last committed `preserve` setting. The new controller keeps its own values and editing session.
@@ -23,6 +23,7 @@ DialogTrigger serves as a wrapper around a Dialog and its associated trigger, li
23
23
  - **`mobileViewport`** `number` (default: `700`) — The screen breakpoint for the mobile type
24
24
  - **`isDismissable`** `boolean` (default: `true`) — Whether passive dismissal (Escape or an outside click) can close the dialog. Explicit dialog actions, such as Submit and Cancel, can still close it. A popover that is not dismissable leaves outside presses alone: the control pressed still receives the press, and a text field there can take focus, because such a popover does not hold focus. It stays open when another popover opens, and closes when a modal, tray, fullscreen or panel dialog opens from another `DialogTrigger`.
25
25
  - **`isKeyboardDismissDisabled`** `boolean` (default: `false`) — Whether pressing the escape key to close the dialog should be disabled
26
+ - **`confirmDismiss`** `boolean` — Whether Escape, an outside click and the close button ask "Discard changes?" before they close the dialog. Unset, they ask while a `DialogForm` inside has unsaved edits; `true` always asks, `false` never does. Explicit actions (Submit, Cancel, the `close` function) never ask, and neither does a popover. See [Unsaved edits](#unsaved-edits)
26
27
  - **`isOpen`** `boolean` — Whether the dialog is open (controlled)
27
28
  - **`defaultOpen`** `boolean` (default: `false`) — Whether the dialog is open by default (uncontrolled)
28
29
  - **`offset`** `number` (default: `8`) — The gap between the trigger and a popover, along the main axis. `0` places the popover flush against the trigger
@@ -128,6 +129,35 @@ These properties allow direct style application without using the `styles` prop:
128
129
  </DialogTrigger>
129
130
  ```
130
131
 
132
+ ### Unsaved edits
133
+
134
+ A dialog that holds unsaved edits asks before a passive dismissal discards them: Escape from any control, a click outside the dialog, or its close button opens a "Discard changes?" confirmation instead of closing. **Discard** closes the dialog and calls `onDismiss`; **Keep editing**, Escape or a click outside the confirmation returns to the dialog with its edits and focus where they were.
135
+
136
+ A `DialogForm` turns this on while a field the user edited differs from its default, so a form dialog needs no wiring; a value set from code doesn't count. For any other dialog, bind `confirmDismiss` to its own state:
137
+
138
+ ```jsx
139
+ <DialogTrigger confirmDismiss={notes !== savedNotes}>
140
+ <Button>Edit notes</Button>
141
+ {(close) => (
142
+ <Dialog isDismissable>
143
+ <Header>
144
+ <Title>Notes</Title>
145
+ </Header>
146
+ <Content>
147
+ <TextArea label="Notes" value={notes} onChange={setNotes} />
148
+ </Content>
149
+ <Footer>
150
+ <Button type="primary" onPress={() => save(notes).then(close)}>
151
+ Save
152
+ </Button>
153
+ </Footer>
154
+ </Dialog>
155
+ )}
156
+ </DialogTrigger>
157
+ ```
158
+
159
+ `confirmDismiss={false}`, on the `DialogForm` or here, keeps a form dialog closing at once: a confirmation such as typing a name to delete loses nothing when the user backs out. A value set here wins over the form's. `isDismissable={false}` still turns passive dismissal off altogether. A popover never asks: it also closes when another popover opens or a button inside it is pressed, and its edits are often applied as they are made.
160
+
131
161
  ### Controlled State
132
162
 
133
163
  ```jsx
@@ -152,7 +182,7 @@ function ControlledDialog() {
152
182
  ### Keyboard Navigation
153
183
 
154
184
  - `Enter/Space` - Opens the dialog when trigger is focused
155
- - `Escape` - Closes the dialog (unless disabled)
185
+ - `Escape` - Closes the dialog (unless disabled). While the dialog holds unsaved edits, it asks first; see [Unsaved edits](#unsaved-edits)
156
186
  - `Tab` - Cycles through focusable elements within the dialog
157
187
 
158
188
  ### Screen Reader Support
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cube-dev/ui-kit",
3
- "version": "0.202.0",
3
+ "version": "0.204.0",
4
4
  "type": "module",
5
5
  "description": "UIKit for Cube Projects",
6
6
  "repository": {