@cube-dev/ui-kit 0.193.1 → 0.194.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 (671) hide show
  1. package/dist/CHANGELOG.md +28 -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.d.ts +25 -12
  12. package/dist/components/CollectionItem.js +59 -4
  13. package/dist/components/CollectionItem.js.map +1 -1
  14. package/dist/components/GlobalStyles.js +1 -1
  15. package/dist/components/GridProvider.js +1 -1
  16. package/dist/components/HiddenInput.js +1 -1
  17. package/dist/components/Root.js +2 -2
  18. package/dist/components/actions/Action/Action.js +1 -1
  19. package/dist/components/actions/Banner/Banner.d.ts +1 -1
  20. package/dist/components/actions/Banner/Banner.js +6 -6
  21. package/dist/components/actions/Banner/Banner.js.map +1 -1
  22. package/dist/components/actions/Button/Button.js +1 -1
  23. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  24. package/dist/components/actions/ButtonSplit/ButtonSplit.js +28 -25
  25. package/dist/components/actions/ButtonSplit/ButtonSplit.js.map +1 -1
  26. package/dist/components/actions/ButtonSplit/context.js +1 -1
  27. package/dist/components/actions/CommandMenu/CommandMenu.d.ts +7 -7
  28. package/dist/components/actions/CommandMenu/CommandMenu.js +232 -239
  29. package/dist/components/actions/CommandMenu/CommandMenu.js.map +1 -1
  30. package/dist/components/actions/CommandMenu/styled.js +1 -1
  31. package/dist/components/actions/ItemAction/ItemAction.js +26 -22
  32. package/dist/components/actions/ItemAction/ItemAction.js.map +1 -1
  33. package/dist/components/actions/ItemActionContext.d.ts +3 -0
  34. package/dist/components/actions/ItemActionContext.js +15 -13
  35. package/dist/components/actions/ItemActionContext.js.map +1 -1
  36. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  37. package/dist/components/actions/ItemButton/ItemButton.d.ts +2 -2
  38. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  39. package/dist/components/actions/Link/Link.js +1 -1
  40. package/dist/components/actions/Menu/Menu.d.ts +9 -9
  41. package/dist/components/actions/Menu/Menu.js +88 -64
  42. package/dist/components/actions/Menu/Menu.js.map +1 -1
  43. package/dist/components/actions/Menu/MenuCollectionItem.d.ts +18 -0
  44. package/dist/components/actions/Menu/MenuCollectionItem.js +36 -0
  45. package/dist/components/actions/Menu/MenuCollectionItem.js.map +1 -0
  46. package/dist/components/actions/Menu/MenuItem.d.ts +5 -0
  47. package/dist/components/actions/Menu/MenuItem.js +402 -116
  48. package/dist/components/actions/Menu/MenuItem.js.map +1 -1
  49. package/dist/components/actions/Menu/MenuSection.d.ts +3 -1
  50. package/dist/components/actions/Menu/MenuSection.js +31 -33
  51. package/dist/components/actions/Menu/MenuSection.js.map +1 -1
  52. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  53. package/dist/components/actions/Menu/SubMenuTrigger.d.ts +1 -1
  54. package/dist/components/actions/Menu/SubMenuTrigger.js +2 -2
  55. package/dist/components/actions/Menu/SubMenuTrigger.js.map +1 -1
  56. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  57. package/dist/components/actions/Menu/context.js +1 -1
  58. package/dist/components/actions/Menu/index.d.ts +1 -0
  59. package/dist/components/actions/Menu/styled.js +1 -1
  60. package/dist/components/actions/actions-run.js +1 -1
  61. package/dist/components/actions/index.d.ts +3 -2
  62. package/dist/components/actions/index.js +1 -1
  63. package/dist/components/actions/use-action.js +60 -36
  64. package/dist/components/actions/use-action.js.map +1 -1
  65. package/dist/components/actions/use-anchored-menu.js +1 -1
  66. package/dist/components/actions/use-context-menu.js +1 -1
  67. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  68. package/dist/components/content/Alert/Alert.js +1 -1
  69. package/dist/components/content/Alert/use-alert.js +1 -1
  70. package/dist/components/content/Avatar/Avatar.js +1 -1
  71. package/dist/components/content/Badge/Badge.js +1 -1
  72. package/dist/components/content/Card/Card.js +1 -1
  73. package/dist/components/content/Content.js +1 -1
  74. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  75. package/dist/components/content/CopySnippet/CopySnippet.d.ts +19 -19
  76. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  77. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  78. package/dist/components/content/Divider.js +1 -1
  79. package/dist/components/content/Footer.js +1 -1
  80. package/dist/components/content/Header.js +1 -1
  81. package/dist/components/content/HotKeys/HotKeys.js +44 -33
  82. package/dist/components/content/HotKeys/HotKeys.js.map +1 -1
  83. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  84. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  85. package/dist/components/content/Item/Item.d.ts +7 -7
  86. package/dist/components/content/Item/Item.js +205 -67
  87. package/dist/components/content/Item/Item.js.map +1 -1
  88. package/dist/components/content/Item/ItemWithNativeLinks.js +314 -0
  89. package/dist/components/content/Item/ItemWithNativeLinks.js.map +1 -0
  90. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  91. package/dist/components/content/ItemCard/ItemCard.d.ts +1 -1
  92. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  93. package/dist/components/content/Layout/GridLayout.js +1 -1
  94. package/dist/components/content/Layout/Layout.js +1 -1
  95. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  96. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  97. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  98. package/dist/components/content/Layout/LayoutContent.js +1 -1
  99. package/dist/components/content/Layout/LayoutContext.js +1 -1
  100. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  101. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  102. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  103. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  104. package/dist/components/content/Layout/LayoutPane.js +18 -15
  105. package/dist/components/content/Layout/LayoutPane.js.map +1 -1
  106. package/dist/components/content/Layout/LayoutPanel.js +41 -46
  107. package/dist/components/content/Layout/LayoutPanel.js.map +1 -1
  108. package/dist/components/content/Layout/LayoutPanelHeader.js +2 -2
  109. package/dist/components/content/Layout/LayoutPanelTransition.js +1 -1
  110. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  111. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  112. package/dist/components/content/Layout/index.js +1 -1
  113. package/dist/components/content/Layout/utils.js +1 -1
  114. package/dist/components/content/Paragraph.js +1 -1
  115. package/dist/components/content/Placeholder/Placeholder.js +77 -70
  116. package/dist/components/content/Placeholder/Placeholder.js.map +1 -1
  117. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  118. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  119. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  120. package/dist/components/content/Result/Result.js +5 -5
  121. package/dist/components/content/Result/Result.js.map +1 -1
  122. package/dist/components/content/Skeleton/Skeleton.js +18 -19
  123. package/dist/components/content/Skeleton/Skeleton.js.map +1 -1
  124. package/dist/components/content/Tag/Tag.js +2 -2
  125. package/dist/components/content/Text.d.ts +14 -14
  126. package/dist/components/content/Text.js +1 -1
  127. package/dist/components/content/TextItem/TextItem.js +1 -1
  128. package/dist/components/content/Title.js +66 -48
  129. package/dist/components/content/Title.js.map +1 -1
  130. package/dist/components/content/Tree/Tree.js +6 -3
  131. package/dist/components/content/Tree/Tree.js.map +1 -1
  132. package/dist/components/content/Tree/TreeNode.js +1 -1
  133. package/dist/components/content/Tree/styled.js +1 -1
  134. package/dist/components/content/Tree/tree-index.js +1 -1
  135. package/dist/components/content/Tree/types.d.ts +2 -2
  136. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  137. package/dist/components/content/Tree/use-load-data.js +1 -1
  138. package/dist/components/content/highlightText.js +1 -1
  139. package/dist/components/content/use-auto-tooltip.js +1 -1
  140. package/dist/components/data/DataTable/DataTable.js +1 -1
  141. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  142. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  143. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  144. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  145. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  146. package/dist/components/data/ItemTable/use-item-table-column-widths.js +1 -1
  147. package/dist/components/data/ItemTable/use-item-table-drag-drop.js +1 -1
  148. package/dist/components/data/ItemTable/use-item-table-pagination.js +1 -1
  149. package/dist/components/data/ItemTable/use-item-table-selection.js +1 -1
  150. package/dist/components/data/ItemTable/use-item-table-sort.js +1 -1
  151. package/dist/components/data/ItemTable/use-item-table-tree-model.js +1 -1
  152. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  153. package/dist/components/data/TableBase/RowCollection.js +1 -1
  154. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  155. package/dist/components/data/TableBase/TableRow.js +1 -1
  156. package/dist/components/data/TableBase/TableView.js +39 -19
  157. package/dist/components/data/TableBase/TableView.js.map +1 -1
  158. package/dist/components/data/TableBase/TreeGridTable.js +1 -1
  159. package/dist/components/data/TableBase/column-header.js +1 -1
  160. package/dist/components/data/TableBase/column-menu.js +1 -1
  161. package/dist/components/data/TableBase/column-styles.js +1 -1
  162. package/dist/components/data/TableBase/column-tint.js +1 -1
  163. package/dist/components/data/TableBase/row-menu.js +1 -1
  164. package/dist/components/data/TableBase/styled.d.ts +1 -1
  165. package/dist/components/data/TableBase/styled.js +14 -1
  166. package/dist/components/data/TableBase/styled.js.map +1 -1
  167. package/dist/components/data/TableBase/table-tree.js +1 -1
  168. package/dist/components/data/TableBase/types.js +1 -1
  169. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  170. package/dist/components/data/TableBase/use-column-menu.js +1 -1
  171. package/dist/components/data/TableBase/use-column-order.js +1 -1
  172. package/dist/components/data/TableBase/use-column-window.js +219 -0
  173. package/dist/components/data/TableBase/use-column-window.js.map +1 -0
  174. package/dist/components/data/TableBase/use-container-width.js +1 -1
  175. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  176. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  177. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  178. package/dist/components/data/TableBase/use-table-search.js +1 -1
  179. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  180. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  181. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  182. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  183. package/dist/components/data/TableBase/use-table-tooltip-refresh.js +32 -19
  184. package/dist/components/data/TableBase/use-table-tooltip-refresh.js.map +1 -1
  185. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  186. package/dist/components/fields/Checkbox/Checkbox.js +3 -1
  187. package/dist/components/fields/Checkbox/Checkbox.js.map +1 -1
  188. package/dist/components/fields/Checkbox/CheckboxGroup.js +13 -13
  189. package/dist/components/fields/Checkbox/CheckboxGroup.js.map +1 -1
  190. package/dist/components/fields/Checkbox/context.js +1 -1
  191. package/dist/components/fields/ColorInput/ColorInput.js +32 -29
  192. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -1
  193. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +2 -0
  194. package/dist/components/fields/ColorPicker/ColorPicker.js +8 -5
  195. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  196. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  197. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +6 -3
  198. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -1
  199. package/dist/components/fields/ComboBox/ComboBox.js +41 -30
  200. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  201. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  202. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  203. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  204. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  205. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  206. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  207. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  208. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  209. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  210. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  211. package/dist/components/fields/DatePicker/DateRangePicker.js +2 -2
  212. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +246 -238
  213. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js.map +1 -1
  214. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  215. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  216. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  217. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  218. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  219. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  220. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  221. package/dist/components/fields/DatePicker/period.js +1 -1
  222. package/dist/components/fields/DatePicker/props.js +1 -1
  223. package/dist/components/fields/DatePicker/utils.js +1 -1
  224. package/dist/components/fields/FileInput/FileInput.js +22 -2
  225. package/dist/components/fields/FileInput/FileInput.js.map +1 -1
  226. package/dist/components/fields/FilterListBox/FilterListBox.js +5 -1
  227. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  228. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +4 -2
  229. package/dist/components/fields/FilterPicker/FilterPicker.js +3 -2
  230. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  231. package/dist/components/fields/Input/Input.js +1 -1
  232. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  233. package/dist/components/fields/ListBox/ListBox.js +8 -7
  234. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  235. package/dist/components/fields/ListBox/optionId.js +1 -1
  236. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +36 -32
  237. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  238. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  239. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  240. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  241. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  242. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  243. package/dist/components/fields/Picker/Picker.d.ts +4 -2
  244. package/dist/components/fields/Picker/Picker.js +3 -2
  245. package/dist/components/fields/Picker/Picker.js.map +1 -1
  246. package/dist/components/fields/RadioGroup/Radio.d.ts +24 -24
  247. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  248. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  249. package/dist/components/fields/RadioGroup/context.js +1 -1
  250. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  251. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  252. package/dist/components/fields/Select/Select.d.ts +4 -4
  253. package/dist/components/fields/Select/Select.js +35 -32
  254. package/dist/components/fields/Select/Select.js.map +1 -1
  255. package/dist/components/fields/Slider/Gradation.js +1 -1
  256. package/dist/components/fields/Slider/HueSlider.js +1 -1
  257. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  258. package/dist/components/fields/Slider/Slider.js +1 -1
  259. package/dist/components/fields/Slider/SliderBase.js +1 -1
  260. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  261. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  262. package/dist/components/fields/Slider/elements.js +1 -1
  263. package/dist/components/fields/Slider/index.js +1 -1
  264. package/dist/components/fields/Switch/Switch.js +1 -1
  265. package/dist/components/fields/TagInput/TagInput.js +1 -1
  266. package/dist/components/fields/TagInput/TagList.js +1 -1
  267. package/dist/components/fields/TagInput/useActiveOption.js +1 -1
  268. package/dist/components/fields/TagInput/useTagError.js +1 -1
  269. package/dist/components/fields/TextArea/TextArea.js +1 -1
  270. package/dist/components/fields/TextInput/TextInput.js +1 -1
  271. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  272. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  273. package/dist/components/fields/TextInputMapper/TextInputMapper.js +13 -5
  274. package/dist/components/fields/TextInputMapper/TextInputMapper.js.map +1 -1
  275. package/dist/components/fields/TriggerActions.js +1 -1
  276. package/dist/components/fields/color/ColorPanel.js +62 -53
  277. package/dist/components/fields/color/ColorPanel.js.map +1 -1
  278. package/dist/components/fields/color/channels.js +1 -1
  279. package/dist/components/fields/color/color.js +1 -1
  280. package/dist/components/fields/color/context.js +1 -1
  281. package/dist/components/form/FieldWrapper/FieldWrapper.d.ts +1 -0
  282. package/dist/components/form/FieldWrapper/FieldWrapper.js +133 -109
  283. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  284. package/dist/components/form/FieldWrapper/field-description.js +102 -0
  285. package/dist/components/form/FieldWrapper/field-description.js.map +1 -0
  286. package/dist/components/form/FieldWrapper/types.d.ts +6 -1
  287. package/dist/components/form/Form/Field.js +1 -1
  288. package/dist/components/form/Form/Form.js +1 -1
  289. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  290. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  291. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  292. package/dist/components/form/Form/SubmitError.js +1 -1
  293. package/dist/components/form/Form/backend.js +1 -1
  294. package/dist/components/form/Form/index.js +1 -1
  295. package/dist/components/form/Form/modern/actions.js +1 -1
  296. package/dist/components/form/Form/modern/context.js +1 -1
  297. package/dist/components/form/Form/modern/controller.js +1 -1
  298. package/dist/components/form/Form/modern/field-binding.js +1 -1
  299. package/dist/components/form/Form/modern/field.js +1 -1
  300. package/dist/components/form/Form/modern/react.js +1 -1
  301. package/dist/components/form/Form/modern/store.js +1 -1
  302. package/dist/components/form/Form/modern/validation.js +1 -1
  303. package/dist/components/form/Form/modern/values.js +1 -1
  304. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  305. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  306. package/dist/components/form/Form/use-field/use-field-props.js +17 -4
  307. package/dist/components/form/Form/use-field/use-field-props.js.map +1 -1
  308. package/dist/components/form/Form/use-field/use-field.js +1 -1
  309. package/dist/components/form/Form/use-form.js +1 -1
  310. package/dist/components/form/Form/validation.js +1 -1
  311. package/dist/components/form/Label.js +27 -24
  312. package/dist/components/form/Label.js.map +1 -1
  313. package/dist/components/form/legacy-tooltip.js +1 -1
  314. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  315. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  316. package/dist/components/form/validation/use-validation-props.js +1 -1
  317. package/dist/components/form/wrapper.js +2 -1
  318. package/dist/components/form/wrapper.js.map +1 -1
  319. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  320. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  321. package/dist/components/layout/Flex.js +1 -1
  322. package/dist/components/layout/Flow.js +1 -1
  323. package/dist/components/layout/Grid.js +1 -1
  324. package/dist/components/layout/Panel.js +1 -1
  325. package/dist/components/layout/Prefix.js +1 -1
  326. package/dist/components/layout/ResizablePanel.js +1 -1
  327. package/dist/components/layout/Space.js +1 -1
  328. package/dist/components/layout/Suffix.js +1 -1
  329. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  330. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  331. package/dist/components/navigation/Tabs/BoardDragActiveProvider.js +1 -1
  332. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  333. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  334. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  335. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  336. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  337. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  338. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  339. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  340. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  341. package/dist/components/navigation/Tabs/styled.js +1 -1
  342. package/dist/components/navigation/Tabs/types.d.ts +3 -3
  343. package/dist/components/navigation/Tabs/types.js +1 -1
  344. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  345. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  346. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  347. package/dist/components/other/Calendar/Calendar.js +1 -1
  348. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  349. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  350. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  351. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  352. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  353. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  354. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  355. package/dist/components/other/Calendar/styled.js +1 -1
  356. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  357. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  358. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  359. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  360. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  361. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  362. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  363. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  364. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  365. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  366. package/dist/components/overlays/Dialog/context.js +1 -1
  367. package/dist/components/overlays/Dialog/default-button-text.js +1 -1
  368. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  369. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  370. package/dist/components/overlays/Modal/Modal.js +44 -24
  371. package/dist/components/overlays/Modal/Modal.js.map +1 -1
  372. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  373. package/dist/components/overlays/Modal/Overlay.js +1 -1
  374. package/dist/components/overlays/Modal/Popover.js +34 -24
  375. package/dist/components/overlays/Modal/Popover.js.map +1 -1
  376. package/dist/components/overlays/Modal/Tray.js +45 -25
  377. package/dist/components/overlays/Modal/Tray.js.map +1 -1
  378. package/dist/components/overlays/Modal/Underlay.js +1 -1
  379. package/dist/components/overlays/Modal/modal-containment.js +145 -0
  380. package/dist/components/overlays/Modal/modal-containment.js.map +1 -0
  381. package/dist/components/overlays/Notifications/Notification.js +1 -1
  382. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  383. package/dist/components/overlays/Notifications/NotificationCard.js +2 -2
  384. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  385. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  386. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  387. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  388. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  389. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  390. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  391. package/dist/components/overlays/Notifications/index.js +1 -1
  392. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  393. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  394. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  395. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  396. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  397. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  398. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  399. package/dist/components/overlays/Toast/index.js +1 -1
  400. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  401. package/dist/components/overlays/Toast/useToast.js +1 -1
  402. package/dist/components/overlays/Tooltip/Tooltip.js +50 -47
  403. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  404. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  405. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  406. package/dist/components/overlays/Tooltip/context.js +1 -1
  407. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  408. package/dist/components/portal/Portal.js +1 -1
  409. package/dist/components/portal/PortalProvider.js +1 -1
  410. package/dist/components/portal/usePortal.js +1 -1
  411. package/dist/components/shared/DraggableCollection.js +1 -1
  412. package/dist/components/shared/InvalidIcon.js +1 -1
  413. package/dist/components/shared/ValidIcon.js +1 -1
  414. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  415. package/dist/components/status/Spin/Cube.js +1 -1
  416. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  417. package/dist/components/status/Spin/Spin.js +1 -1
  418. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  419. package/dist/data/item-themes.js +1 -1
  420. package/dist/data/themes.js +1 -1
  421. package/dist/eslint-plugin/defaults.generated.js +2 -2
  422. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  423. package/dist/eslint-plugin/index.js +1 -1
  424. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  425. package/dist/i18n/I18nProvider.js +3 -2
  426. package/dist/i18n/I18nProvider.js.map +1 -1
  427. package/dist/i18n/createFormatter.js +1 -1
  428. package/dist/i18n/index.d.ts +2 -1
  429. package/dist/i18n/index.js +3 -2
  430. package/dist/i18n/index.js.map +1 -1
  431. package/dist/i18n/instance.d.ts +2 -3
  432. package/dist/i18n/instance.js +3 -4
  433. package/dist/i18n/instance.js.map +1 -1
  434. package/dist/i18n/locales/de-DE/uikit.js +36 -5
  435. package/dist/i18n/locales/en-US/uikit.js +36 -5
  436. package/dist/i18n/locales/en-US/uikit.json.d.ts +41 -4
  437. package/dist/i18n/locales/es-ES/uikit.js +36 -5
  438. package/dist/i18n/locales/es-MX/uikit.js +36 -5
  439. package/dist/i18n/locales/fr-FR/uikit.js +36 -5
  440. package/dist/i18n/locales/it-IT/uikit.js +36 -5
  441. package/dist/i18n/locales/ja-JP/uikit.js +36 -5
  442. package/dist/i18n/locales/nb-NO/uikit.js +36 -5
  443. package/dist/i18n/locales/pt-BR/uikit.js +36 -5
  444. package/dist/i18n/locales/pt-PT/uikit.js +36 -5
  445. package/dist/i18n/locales/sv-SE/uikit.js +36 -5
  446. package/dist/i18n/locales/vi-VN/uikit.js +36 -5
  447. package/dist/i18n/locales.js +1 -1
  448. package/dist/i18n/namespace.d.ts +11 -0
  449. package/dist/i18n/namespace.js +12 -0
  450. package/dist/i18n/namespace.js.map +1 -0
  451. package/dist/i18n/useFormatter.js +1 -1
  452. package/dist/i18n/useI18n.js +5 -3
  453. package/dist/i18n/useI18n.js.map +1 -1
  454. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  455. package/dist/icons/AdjustmentsIcon.js +1 -1
  456. package/dist/icons/AiIcon.js +1 -1
  457. package/dist/icons/AreaChartIcon.js +1 -1
  458. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  459. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  460. package/dist/icons/BackwardIcon.js +1 -1
  461. package/dist/icons/BarChartIcon.js +1 -1
  462. package/dist/icons/BellFilledIcon.js +1 -1
  463. package/dist/icons/BellIcon.js +1 -1
  464. package/dist/icons/BooleanIcon.js +1 -1
  465. package/dist/icons/CalendarEditIcon.js +1 -1
  466. package/dist/icons/CalendarIcon.js +1 -1
  467. package/dist/icons/CaretDownIcon.js +1 -1
  468. package/dist/icons/CaretUpIcon.js +1 -1
  469. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  470. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  471. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  472. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  473. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  474. package/dist/icons/ChartBarLineIcon.js +1 -1
  475. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  476. package/dist/icons/ChartBarStackedIcon.js +1 -1
  477. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  478. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  479. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  480. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  481. package/dist/icons/ChartBubbleIcon.js +1 -1
  482. package/dist/icons/ChartDonut2Icon.js +1 -1
  483. package/dist/icons/ChartFunnelIcon.js +1 -1
  484. package/dist/icons/ChartHeatmapIcon.js +1 -1
  485. package/dist/icons/ChartKPIIcon.js +1 -1
  486. package/dist/icons/ChartPie2Icon.js +1 -1
  487. package/dist/icons/ChartScatterIcon.js +1 -1
  488. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  489. package/dist/icons/CheckCircleIcon.js +1 -1
  490. package/dist/icons/CheckIcon.js +1 -1
  491. package/dist/icons/CircleFilledIcon.js +1 -1
  492. package/dist/icons/ClearIcon.js +1 -1
  493. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  494. package/dist/icons/CloseCircleIcon.js +1 -1
  495. package/dist/icons/CloseIcon.js +1 -1
  496. package/dist/icons/CodeIcon.js +1 -1
  497. package/dist/icons/ColumnTotalIcon.js +1 -1
  498. package/dist/icons/CopyIcon.js +1 -1
  499. package/dist/icons/CountIcon.js +1 -1
  500. package/dist/icons/CubeIcon.js +1 -1
  501. package/dist/icons/CubePauseIcon.js +1 -1
  502. package/dist/icons/CubePlayIcon.js +1 -1
  503. package/dist/icons/CurrencyDollarIcon.js +1 -1
  504. package/dist/icons/DangerIcon.js +1 -1
  505. package/dist/icons/DashboardIcon.js +1 -1
  506. package/dist/icons/DatabaseIcon.js +1 -1
  507. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  508. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  509. package/dist/icons/DirectionIcon.js +1 -1
  510. package/dist/icons/DonutIcon.js +1 -1
  511. package/dist/icons/DownIcon.js +1 -1
  512. package/dist/icons/EditIcon.js +1 -1
  513. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  514. package/dist/icons/ExclamationCircleIcon.js +1 -1
  515. package/dist/icons/ExclamationIcon.js +1 -1
  516. package/dist/icons/EyeIcon.js +1 -1
  517. package/dist/icons/EyeInvisibleIcon.js +1 -1
  518. package/dist/icons/FilterIcon.js +1 -1
  519. package/dist/icons/FolderFilledIcon.js +1 -1
  520. package/dist/icons/FolderIcon.js +1 -1
  521. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  522. package/dist/icons/FolderOpenIcon.js +1 -1
  523. package/dist/icons/ForwardIcon.js +1 -1
  524. package/dist/icons/GripVerticalIcon.js +1 -1
  525. package/dist/icons/HierarchyIcon.js +1 -1
  526. package/dist/icons/HierarchyOpenIcon.js +1 -1
  527. package/dist/icons/Icon.js +1 -1
  528. package/dist/icons/InfoCircleIcon.js +1 -1
  529. package/dist/icons/InfoIcon.js +1 -1
  530. package/dist/icons/KeyIcon.js +1 -1
  531. package/dist/icons/LeftIcon.js +1 -1
  532. package/dist/icons/LineChartIcon.js +1 -1
  533. package/dist/icons/LoadingIcon.js +1 -1
  534. package/dist/icons/LockFilledIcon.js +1 -1
  535. package/dist/icons/LockIcon.js +1 -1
  536. package/dist/icons/MoreIcon.js +1 -1
  537. package/dist/icons/NotAllowedIcon.js +1 -1
  538. package/dist/icons/Number123Icon.js +1 -1
  539. package/dist/icons/NumberIcon.js +1 -1
  540. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  541. package/dist/icons/PauseCircleIcon.js +1 -1
  542. package/dist/icons/PauseIcon.js +1 -1
  543. package/dist/icons/PercentageIcon.js +1 -1
  544. package/dist/icons/PieChartIcon.js +1 -1
  545. package/dist/icons/PipetteIcon.js +1 -1
  546. package/dist/icons/PlayCircleIcon.js +1 -1
  547. package/dist/icons/PlayIcon.js +1 -1
  548. package/dist/icons/PlusIcon.js +1 -1
  549. package/dist/icons/ProgressBarIcon.js +1 -1
  550. package/dist/icons/ReloadIcon.js +1 -1
  551. package/dist/icons/ReportIcon.js +1 -1
  552. package/dist/icons/ReturnIcon.js +1 -1
  553. package/dist/icons/RightIcon.js +1 -1
  554. package/dist/icons/RowTotalsIcon.js +1 -1
  555. package/dist/icons/SchemeIcon.js +1 -1
  556. package/dist/icons/SearchIcon.js +1 -1
  557. package/dist/icons/SemanticQueryIcon.js +1 -1
  558. package/dist/icons/SettingsIcon.js +1 -1
  559. package/dist/icons/ShieldFilledIcon.js +1 -1
  560. package/dist/icons/ShieldIcon.js +1 -1
  561. package/dist/icons/SlashIcon.js +1 -1
  562. package/dist/icons/SparklesIcon.js +1 -1
  563. package/dist/icons/SqlIcon.js +1 -1
  564. package/dist/icons/StatsIcon.js +1 -1
  565. package/dist/icons/StopIcon.js +1 -1
  566. package/dist/icons/StringIcon.js +1 -1
  567. package/dist/icons/SubtotalsIcon.js +1 -1
  568. package/dist/icons/SwitchIcon.js +1 -1
  569. package/dist/icons/TableIcon.js +1 -1
  570. package/dist/icons/ThumbsDownIcon.js +1 -1
  571. package/dist/icons/ThumbsUpIcon.js +1 -1
  572. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  573. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  574. package/dist/icons/ThunderboltIcon.js +1 -1
  575. package/dist/icons/TimeIcon.js +1 -1
  576. package/dist/icons/TrashIcon.js +1 -1
  577. package/dist/icons/UnlockIcon.js +1 -1
  578. package/dist/icons/UpIcon.js +1 -1
  579. package/dist/icons/UserGroupIcon.js +1 -1
  580. package/dist/icons/UserIcon.js +1 -1
  581. package/dist/icons/UserLockIcon.js +1 -1
  582. package/dist/icons/ViewIcon.js +1 -1
  583. package/dist/icons/WarningFilledIcon.js +1 -1
  584. package/dist/icons/WarningIcon.js +1 -1
  585. package/dist/icons/wrap-icon.js +1 -1
  586. package/dist/index.d.ts +9 -7
  587. package/dist/index.js +7 -6
  588. package/dist/index.js.map +1 -1
  589. package/dist/probe/canonicalize.js +1 -1
  590. package/dist/probe/css.js +1 -1
  591. package/dist/probe/index.js +1 -1
  592. package/dist/provider.js +2 -2
  593. package/dist/provider.js.map +1 -1
  594. package/dist/providers/TrackingProvider.js +1 -1
  595. package/dist/providers/navigation-url.js +11 -0
  596. package/dist/providers/navigation-url.js.map +1 -0
  597. package/dist/providers/navigationAdapter.default.js +1 -1
  598. package/dist/providers/use-navigation.js +19 -0
  599. package/dist/providers/use-navigation.js.map +1 -0
  600. package/dist/tokens/all-tokens.js +1 -1
  601. package/dist/tokens/base.js +1 -1
  602. package/dist/tokens/color-seed.js +1 -1
  603. package/dist/tokens/color-theme.js +1 -1
  604. package/dist/tokens/colors.js +1 -1
  605. package/dist/tokens/layout.js +1 -1
  606. package/dist/tokens/lazy-styles.js +1 -1
  607. package/dist/tokens/legacy-color.js +1 -1
  608. package/dist/tokens/palette-config.js +1 -1
  609. package/dist/tokens/palette.js +1 -1
  610. package/dist/tokens/resolve.js +1 -1
  611. package/dist/tokens/shadows.js +1 -1
  612. package/dist/tokens/sizes.js +1 -1
  613. package/dist/tokens/spacing.js +1 -1
  614. package/dist/tokens/typography.js +1 -1
  615. package/dist/utils/ResizeSensor.js +1 -1
  616. package/dist/utils/colors.js +1 -1
  617. package/dist/utils/dotize.js +1 -1
  618. package/dist/utils/is-dev-env.js +1 -1
  619. package/dist/utils/modules.js +1 -1
  620. package/dist/utils/promise.js +1 -1
  621. package/dist/utils/raf.js +1 -1
  622. package/dist/utils/random.js +1 -1
  623. package/dist/utils/range.js +1 -1
  624. package/dist/utils/react/RenderCache.js +1 -1
  625. package/dist/utils/react/Slots.js +1 -1
  626. package/dist/utils/react/chain.js +1 -1
  627. package/dist/utils/react/disabledProps.js +1 -1
  628. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  629. package/dist/utils/react/index.js +1 -1
  630. package/dist/utils/react/interactions.js +1 -1
  631. package/dist/utils/react/isTextOnly.js +1 -1
  632. package/dist/utils/react/mapProps.js +1 -1
  633. package/dist/utils/react/mergeProps.js +1 -1
  634. package/dist/utils/react/nullableValue.js +1 -1
  635. package/dist/utils/react/overlayKeyPropagation.js +1 -1
  636. package/dist/utils/react/programmaticFocus.js +1 -1
  637. package/dist/utils/react/resolveIcon.js +1 -1
  638. package/dist/utils/react/sharedStore.js +1 -1
  639. package/dist/utils/react/useBufferedValue.js +1 -1
  640. package/dist/utils/react/useCombinedRefs.js +1 -1
  641. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  642. package/dist/utils/react/useEventBus.js +1 -1
  643. package/dist/utils/react/useId.js +1 -1
  644. package/dist/utils/react/useIsDarwin.js +1 -1
  645. package/dist/utils/react/useKeySymbols.js +1 -1
  646. package/dist/utils/react/useLayoutEffect.js +1 -1
  647. package/dist/utils/react/useLocalStorage.js +1 -1
  648. package/dist/utils/react/useMergeStyles.js +1 -1
  649. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  650. package/dist/utils/react/usePopoverSync.js +1 -1
  651. package/dist/utils/react/useQaProps.js +1 -1
  652. package/dist/utils/react/useScheme.js +1 -1
  653. package/dist/utils/react/useViewportSize.js +1 -1
  654. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  655. package/dist/utils/selection.js +1 -1
  656. package/dist/utils/styles.js +1 -1
  657. package/dist/utils/tree.js +1 -1
  658. package/dist/utils/warnings.js +1 -1
  659. package/dist/version.js +2 -2
  660. package/docs/Usage.md +4 -0
  661. package/docs/components/CollectionItem.md +5 -1
  662. package/docs/components/actions/CommandMenu.md +46 -18
  663. package/docs/components/actions/Menu.md +124 -19
  664. package/docs/components/content/Placeholder.md +2 -0
  665. package/docs/components/content/Skeleton.md +2 -0
  666. package/docs/components/data/DataTable.md +3 -0
  667. package/docs/components/data/ItemTable.md +11 -1
  668. package/docs/components/overlays/Dialog.md +1 -1
  669. package/docs/components/overlays/DialogContainer.md +1 -2
  670. package/docs/components/overlays/DialogTrigger.md +1 -0
  671. package/package.json +3 -1
@@ -0,0 +1,219 @@
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
+ import { useEvent } from "../../../_internal/hooks/use-event.js";
3
+ import { c } from "react/compiler-runtime";
4
+ import { CONTAINER_STYLES } from "@tenphi/tasty";
5
+ import { useLayoutEffect, useState } from "react";
6
+
7
+ //#region src/components/data/TableBase/use-column-window.ts
8
+ const COLUMN_OVERSCAN = 300;
9
+ const MAX_REFILL_COLUMNS = 1;
10
+ const SAFE_FRAME_STYLES = new Set(CONTAINER_STYLES.filter((key) => ![
11
+ "font",
12
+ "preset",
13
+ "whiteSpace"
14
+ ].includes(key)));
15
+ function sameRange(left, right) {
16
+ if (left == null || right == null) return left === right;
17
+ return left.first === right.first && left.last === right.last;
18
+ }
19
+ /** Arbitrary body styling and DOM spans need the complete intrinsic layout. */
20
+ function canWindowColumns(columns, styles) {
21
+ return columns.every((column) => column.width != null && column.width > 0 && Number.isFinite(column.width) && !column.cellProps) && Object.keys(styles ?? {}).every((key) => SAFE_FRAME_STYLES.has(key));
22
+ }
23
+ function getColumnWindowRange(layout, offset, viewportWidth, overscanStart = COLUMN_OVERSCAN, overscanEnd = COLUMN_OVERSCAN) {
24
+ const start = Math.max(0, offset + layout.pinnedStartWidth - overscanStart);
25
+ const end = offset + viewportWidth - layout.pinnedEndWidth + overscanEnd;
26
+ let position = 0;
27
+ let first = layout.columns.length;
28
+ let last = -1;
29
+ for (const column of layout.columns) {
30
+ const next = position + column.width;
31
+ if (next > start && position < end) {
32
+ first = Math.min(first, column.index);
33
+ last = column.index;
34
+ }
35
+ position = next;
36
+ }
37
+ return {
38
+ first,
39
+ last
40
+ };
41
+ }
42
+ /** Refill the moving edge without rebuilding rows at every column boundary. */
43
+ function getBufferedColumnWindowRange(layout, previous, offset, viewportWidth) {
44
+ const required = getColumnWindowRange(layout, offset, viewportWidth);
45
+ if (!previous) return required;
46
+ if (offset <= 0 || offset >= layout.totalWidth - viewportWidth - 1) return required;
47
+ const extendsStart = required.first < previous.first;
48
+ const extendsEnd = required.last > previous.last;
49
+ if (!extendsStart && !extendsEnd) {
50
+ const first = Math.max(previous.first, required.first - MAX_REFILL_COLUMNS);
51
+ const last = Math.min(previous.last, required.last + MAX_REFILL_COLUMNS);
52
+ return first === previous.first && last === previous.last ? previous : {
53
+ first,
54
+ last
55
+ };
56
+ }
57
+ if (extendsStart && extendsEnd) return required;
58
+ const refilled = getColumnWindowRange(layout, offset, viewportWidth, extendsStart ? COLUMN_OVERSCAN * 2 : COLUMN_OVERSCAN, extendsEnd ? COLUMN_OVERSCAN * 2 : COLUMN_OVERSCAN);
59
+ return {
60
+ first: Math.max(refilled.first, required.first - MAX_REFILL_COLUMNS),
61
+ last: Math.min(refilled.last, required.last + MAX_REFILL_COLUMNS)
62
+ };
63
+ }
64
+ /** Preserve height-bearing cells, native controls and row naming offscreen. */
65
+ function retainColumn(column, treeColumnKey) {
66
+ return column.pin != null || column.isStructural || column.isRowHeader || column.key === treeColumnKey || column.autoHeight || column.render != null || column.cellStyles != null;
67
+ }
68
+ function getColumnWindowSegments(columns, range, treeColumnKey) {
69
+ const segments = [];
70
+ let omitted = 0;
71
+ let firstOmittedKey = "";
72
+ function flushGap() {
73
+ if (!omitted) return;
74
+ segments.push({
75
+ key: `column-gap:${firstOmittedKey}`,
76
+ span: omitted
77
+ });
78
+ omitted = 0;
79
+ }
80
+ for (const column of columns) if (range == null || column.index >= range.first && column.index <= range.last || retainColumn(column, treeColumnKey)) {
81
+ flushGap();
82
+ segments.push({
83
+ key: `column-cell:${column.key}`,
84
+ column
85
+ });
86
+ } else {
87
+ if (!omitted) firstOmittedKey = column.key;
88
+ omitted++;
89
+ if (omitted === 1e3) flushGap();
90
+ }
91
+ flushGap();
92
+ return segments;
93
+ }
94
+ function useColumnWindow(layout, scroller, isEnabled, treeColumnKey) {
95
+ const $ = c(26);
96
+ let t0;
97
+ if ($[0] !== isEnabled || $[1] !== layout.columns || $[2] !== treeColumnKey) {
98
+ t0 = isEnabled && layout.columns.some((column) => !retainColumn(column, treeColumnKey));
99
+ $[0] = isEnabled;
100
+ $[1] = layout.columns;
101
+ $[2] = treeColumnKey;
102
+ $[3] = t0;
103
+ } else t0 = $[3];
104
+ const isWindowEnabled = t0;
105
+ const [range, setRange] = useState(null);
106
+ const [fitsRow, setFitsRow] = useState(false);
107
+ let t1;
108
+ if ($[4] !== isWindowEnabled || $[5] !== layout || $[6] !== scroller) {
109
+ t1 = () => {
110
+ const width = scroller?.clientWidth ?? 0;
111
+ const next = isWindowEnabled && scroller && width > 0 && layout.totalWidth > width ? getColumnWindowRange(layout, Math.abs(scroller.scrollLeft), width) : null;
112
+ setRange((previous) => sameRange(previous, next) ? previous : next);
113
+ };
114
+ $[4] = isWindowEnabled;
115
+ $[5] = layout;
116
+ $[6] = scroller;
117
+ $[7] = t1;
118
+ } else t1 = $[7];
119
+ const resetRange = t1;
120
+ let t2;
121
+ if ($[8] !== isWindowEnabled || $[9] !== layout.totalWidth || $[10] !== scroller) {
122
+ t2 = () => {
123
+ if (!isWindowEnabled || !scroller || scroller.clientWidth <= 0 || layout.totalWidth <= scroller.clientWidth) return;
124
+ const table = scroller?.querySelector("table");
125
+ if (!table) return;
126
+ const computed = getComputedStyle(table);
127
+ const rowHeight = computed.getPropertyValue("--row-height").trim();
128
+ const height = parseFloat(rowHeight);
129
+ const lineHeight = parseFloat(computed.lineHeight);
130
+ setFitsRow(rowHeight === `${height}px` && Number.isFinite(height) && height >= lineHeight);
131
+ };
132
+ $[8] = isWindowEnabled;
133
+ $[9] = layout.totalWidth;
134
+ $[10] = scroller;
135
+ $[11] = t2;
136
+ } else t2 = $[11];
137
+ const refreshAppearance = useEvent(t2);
138
+ let t3;
139
+ let t4;
140
+ if ($[12] !== isWindowEnabled || $[13] !== layout || $[14] !== refreshAppearance || $[15] !== scroller) {
141
+ t3 = () => {
142
+ if (!isWindowEnabled || !scroller) return;
143
+ const update = (t5) => {
144
+ const reset = t5 === void 0 ? false : t5;
145
+ const width_0 = scroller.clientWidth;
146
+ const offset = Math.abs(scroller.scrollLeft);
147
+ setRange((previous_0) => {
148
+ const next_0 = width_0 > 0 && layout.totalWidth > width_0 ? getBufferedColumnWindowRange(layout, reset ? null : previous_0, offset, width_0) : null;
149
+ return sameRange(previous_0, next_0) ? previous_0 : next_0;
150
+ });
151
+ };
152
+ let lastOffset = Math.abs(scroller.scrollLeft);
153
+ let lastVerticalOffset = scroller.scrollTop;
154
+ const onScroll = () => {
155
+ const offset_0 = Math.abs(scroller.scrollLeft);
156
+ const verticalOffset = scroller.scrollTop;
157
+ const reset_0 = verticalOffset !== lastVerticalOffset;
158
+ lastVerticalOffset = verticalOffset;
159
+ if (offset_0 === lastOffset && !reset_0) return;
160
+ lastOffset = offset_0;
161
+ update(reset_0);
162
+ };
163
+ refreshAppearance();
164
+ update(true);
165
+ const observer = new ResizeObserver(() => {
166
+ refreshAppearance();
167
+ update(true);
168
+ });
169
+ observer.observe(scroller);
170
+ scroller.addEventListener("scroll", onScroll, { passive: true });
171
+ return () => {
172
+ observer.disconnect();
173
+ scroller.removeEventListener("scroll", onScroll);
174
+ };
175
+ };
176
+ t4 = [
177
+ isWindowEnabled,
178
+ layout,
179
+ refreshAppearance,
180
+ scroller
181
+ ];
182
+ $[12] = isWindowEnabled;
183
+ $[13] = layout;
184
+ $[14] = refreshAppearance;
185
+ $[15] = scroller;
186
+ $[16] = t3;
187
+ $[17] = t4;
188
+ } else {
189
+ t3 = $[16];
190
+ t4 = $[17];
191
+ }
192
+ useLayoutEffect(t3, t4);
193
+ const t5 = isWindowEnabled && fitsRow ? range : null;
194
+ let t6;
195
+ if ($[18] !== layout.columns || $[19] !== t5 || $[20] !== treeColumnKey) {
196
+ t6 = getColumnWindowSegments(layout.columns, t5, treeColumnKey);
197
+ $[18] = layout.columns;
198
+ $[19] = t5;
199
+ $[20] = treeColumnKey;
200
+ $[21] = t6;
201
+ } else t6 = $[21];
202
+ let t7;
203
+ if ($[22] !== refreshAppearance || $[23] !== resetRange || $[24] !== t6) {
204
+ t7 = {
205
+ resetRange,
206
+ segments: t6,
207
+ refreshAppearance
208
+ };
209
+ $[22] = refreshAppearance;
210
+ $[23] = resetRange;
211
+ $[24] = t6;
212
+ $[25] = t7;
213
+ } else t7 = $[25];
214
+ return t7;
215
+ }
216
+
217
+ //#endregion
218
+ export { canWindowColumns, useColumnWindow };
219
+ //# sourceMappingURL=use-column-window.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-column-window.js","names":["CONTAINER_STYLES","useLayoutEffect","useState","useEvent","Styles","CubeResolvedColumn","CubeTableColumnLayout","COLUMN_OVERSCAN","MAX_REFILL_COLUMNS","SAFE_FRAME_STYLES","Set","filter","key","includes","ColumnWindowRange","first","last","sameRange","left","right","ColumnWindowSegment","column","T","span","canWindowColumns","columns","styles","every","width","Number","isFinite","cellProps","Object","keys","has","getColumnWindowRange","layout","offset","viewportWidth","overscanStart","overscanEnd","start","Math","max","pinnedStartWidth","end","pinnedEndWidth","position","length","next","min","index","getBufferedColumnWindowRange","previous","required","totalWidth","extendsStart","extendsEnd","refilled","retainColumn","treeColumnKey","pin","isStructural","isRowHeader","autoHeight","render","cellStyles","getColumnWindowSegments","range","segments","omitted","firstOmittedKey","flushGap","push","useColumnWindow","scroller","isEnabled","$","_c","t0","some","isWindowEnabled","setRange","fitsRow","setFitsRow","t1","clientWidth","abs","scrollLeft","resetRange","t2","table","querySelector","computed","getComputedStyle","rowHeight","getPropertyValue","trim","height","parseFloat","lineHeight","refreshAppearance","t3","t4","update","t5","reset","undefined","width_0","previous_0","next_0","lastOffset","lastVerticalOffset","scrollTop","onScroll","offset_0","verticalOffset","reset_0","observer","ResizeObserver","observe","addEventListener","passive","disconnect","removeEventListener","t6","t7"],"sources":["../../../../src/components/data/TableBase/use-column-window.ts"],"sourcesContent":["import { CONTAINER_STYLES } from '@tenphi/tasty';\nimport { useLayoutEffect, useState } from 'react';\n\nimport { useEvent } from '../../../_internal/hooks/use-event';\n\nimport type { Styles } from '@tenphi/tasty';\nimport type { CubeResolvedColumn, CubeTableColumnLayout } from './types';\n\n// Keep nearby cells ready for a horizontal flick without multiplying the\n// mounted row window by the entire column collection.\nconst COLUMN_OVERSCAN = 300;\nconst MAX_REFILL_COLUMNS = 1;\nconst SAFE_FRAME_STYLES = new Set<string>(\n CONTAINER_STYLES.filter(\n (key) => !['font', 'preset', 'whiteSpace'].includes(key),\n ),\n);\n\nexport interface ColumnWindowRange {\n first: number;\n last: number;\n}\n\nfunction sameRange(\n left: ColumnWindowRange | null,\n right: ColumnWindowRange | null,\n) {\n if (left == null || right == null) return left === right;\n return left.first === right.first && left.last === right.last;\n}\n\nexport type ColumnWindowSegment<T> =\n | { column: CubeResolvedColumn<T>; key: string }\n | { column?: undefined; key: string; span: number };\n\n/** Arbitrary body styling and DOM spans need the complete intrinsic layout. */\nexport function canWindowColumns<T>(\n columns: readonly CubeResolvedColumn<T>[],\n styles?: Styles,\n) {\n return (\n columns.every(\n (column) =>\n column.width != null &&\n column.width > 0 &&\n Number.isFinite(column.width) &&\n !column.cellProps,\n ) && Object.keys(styles ?? {}).every((key) => SAFE_FRAME_STYLES.has(key))\n );\n}\n\nexport function getColumnWindowRange<T>(\n layout: CubeTableColumnLayout<T>,\n offset: number,\n viewportWidth: number,\n overscanStart = COLUMN_OVERSCAN,\n overscanEnd = COLUMN_OVERSCAN,\n): ColumnWindowRange {\n const start = Math.max(0, offset + layout.pinnedStartWidth - overscanStart);\n const end = offset + viewportWidth - layout.pinnedEndWidth + overscanEnd;\n let position = 0;\n let first = layout.columns.length;\n let last = -1;\n\n for (const column of layout.columns) {\n const next = position + column.width!;\n if (next > start && position < end) {\n first = Math.min(first, column.index);\n last = column.index;\n }\n position = next;\n }\n\n return { first, last };\n}\n\n/** Refill the moving edge without rebuilding rows at every column boundary. */\nexport function getBufferedColumnWindowRange<T>(\n layout: CubeTableColumnLayout<T>,\n previous: ColumnWindowRange | null,\n offset: number,\n viewportWidth: number,\n): ColumnWindowRange {\n const required = getColumnWindowRange(layout, offset, viewportWidth);\n if (!previous) return required;\n // Native scroll extents round fractional widths; no ahead buffer is\n // needed within a pixel of either endpoint.\n if (offset <= 0 || offset >= layout.totalWidth! - viewportWidth - 1)\n return required;\n const extendsStart = required.first < previous.first;\n const extendsEnd = required.last > previous.last;\n if (!extendsStart && !extendsEnd) {\n const first = Math.max(previous.first, required.first - MAX_REFILL_COLUMNS);\n const last = Math.min(previous.last, required.last + MAX_REFILL_COLUMNS);\n return first === previous.first && last === previous.last\n ? previous\n : { first, last };\n }\n // Both edges moving means the viewport/layout changed, not one scroll edge.\n if (extendsStart && extendsEnd) return required;\n const refilled = getColumnWindowRange(\n layout,\n offset,\n viewportWidth,\n extendsStart ? COLUMN_OVERSCAN * 2 : COLUMN_OVERSCAN,\n extendsEnd ? COLUMN_OVERSCAN * 2 : COLUMN_OVERSCAN,\n );\n // A pixel-only refill retains too many narrow cells during diagonal scroll.\n return {\n first: Math.max(refilled.first, required.first - MAX_REFILL_COLUMNS),\n last: Math.min(refilled.last, required.last + MAX_REFILL_COLUMNS),\n };\n}\n\n/** Preserve height-bearing cells, native controls and row naming offscreen. */\nfunction retainColumn<T>(\n column: CubeResolvedColumn<T>,\n treeColumnKey?: string,\n) {\n return (\n column.pin != null ||\n column.isStructural ||\n column.isRowHeader ||\n column.key === treeColumnKey ||\n column.autoHeight ||\n column.render != null ||\n column.cellStyles != null\n );\n}\n\nexport function getColumnWindowSegments<T>(\n columns: readonly CubeResolvedColumn<T>[],\n range: ColumnWindowRange | null,\n treeColumnKey?: string,\n): ColumnWindowSegment<T>[] {\n const segments: ColumnWindowSegment<T>[] = [];\n let omitted = 0;\n let firstOmittedKey = '';\n\n function flushGap() {\n if (!omitted) return;\n segments.push({ key: `column-gap:${firstOmittedKey}`, span: omitted });\n omitted = 0;\n }\n\n for (const column of columns) {\n if (\n range == null ||\n (column.index >= range.first && column.index <= range.last) ||\n retainColumn(column, treeColumnKey)\n ) {\n flushGap();\n segments.push({ key: `column-cell:${column.key}`, column });\n } else {\n if (!omitted) firstOmittedKey = column.key;\n omitted++;\n // Native table cells clamp colSpan to 1000.\n if (omitted === 1000) flushGap();\n }\n }\n flushGap();\n return segments;\n}\n\nexport function useColumnWindow<T>(\n layout: CubeTableColumnLayout<T>,\n scroller: HTMLDivElement | null,\n isEnabled: boolean,\n treeColumnKey?: string,\n) {\n const isWindowEnabled =\n isEnabled &&\n layout.columns.some((column) => !retainColumn(column, treeColumnKey));\n const [range, setRange] = useState<ColumnWindowRange | null>(null);\n const [fitsRow, setFitsRow] = useState(false);\n const resetRange = () => {\n const width = scroller?.clientWidth ?? 0;\n const next =\n isWindowEnabled && scroller && width > 0 && layout.totalWidth! > width\n ? getColumnWindowRange(layout, Math.abs(scroller.scrollLeft), width)\n : null;\n setRange((previous) => (sameRange(previous, next) ? previous : next));\n };\n const refreshAppearance = useEvent(() => {\n if (\n !isWindowEnabled ||\n !scroller ||\n scroller.clientWidth <= 0 ||\n layout.totalWidth! <= scroller.clientWidth\n ) {\n return;\n }\n const table = scroller?.querySelector('table');\n if (!table) return;\n const computed = getComputedStyle(table);\n const rowHeight = computed.getPropertyValue('--row-height').trim();\n const height = parseFloat(rowHeight);\n const lineHeight = parseFloat(computed.lineHeight);\n // Empty default cells can be shorter than text. Measure the inherited\n // tokens, since Root can override both typography and the size scale.\n setFitsRow(\n rowHeight === `${height}px` &&\n Number.isFinite(height) &&\n height >= lineHeight,\n );\n });\n\n useLayoutEffect(() => {\n if (!isWindowEnabled || !scroller) {\n return;\n }\n\n const update = (reset = false) => {\n const width = scroller.clientWidth;\n const offset = Math.abs(scroller.scrollLeft);\n // Only changed bands add a render. New rows use the ordinary band,\n // so diagonal scrolling does not multiply the extra refill cells.\n setRange((previous) => {\n const next =\n width > 0 && layout.totalWidth! > width\n ? getBufferedColumnWindowRange(\n layout,\n reset ? null : previous,\n offset,\n width,\n )\n : null;\n return sameRange(previous, next) ? previous : next;\n });\n };\n let lastOffset = Math.abs(scroller.scrollLeft);\n let lastVerticalOffset = scroller.scrollTop;\n const onScroll = () => {\n const offset = Math.abs(scroller.scrollLeft);\n const verticalOffset = scroller.scrollTop;\n const reset = verticalOffset !== lastVerticalOffset;\n lastVerticalOffset = verticalOffset;\n if (offset === lastOffset && !reset) return;\n lastOffset = offset;\n update(reset);\n };\n refreshAppearance();\n update(true);\n const observer = new ResizeObserver(() => {\n refreshAppearance();\n update(true);\n });\n observer.observe(scroller);\n scroller.addEventListener('scroll', onScroll, { passive: true });\n return () => {\n observer.disconnect();\n scroller.removeEventListener('scroll', onScroll);\n };\n }, [isWindowEnabled, layout, refreshAppearance, scroller]);\n\n return {\n resetRange,\n segments: getColumnWindowSegments(\n layout.columns,\n isWindowEnabled && fitsRow ? range : null,\n treeColumnKey,\n ),\n refreshAppearance,\n };\n}\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useLayoutEffect, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useLayoutEffect, useRef } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
  import { useLayoutEffect, useState } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { c } from "react/compiler-runtime";
3
3
 
4
4
  //#region src/components/data/TableBase/use-table-columns.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { useDebouncedValue } from "../../../_internal/hooks/use-debounced-value.js";
3
3
  import { getColumnText } from "./use-table-columns.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { RowCollection } from "./RowCollection.js";
4
4
  import { useCallback, useMemo, useRef } from "react";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { getColumnText, getColumnValue } from "./use-table-columns.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { sortRows } from "./use-table-sort.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { useCallback, useRef, useState } from "react";
3
3
 
4
4
  //#region src/components/data/TableBase/use-table-storage.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { refreshAutoTooltipsWithin } from "../../content/use-auto-tooltip.js";
3
3
  import { c } from "react/compiler-runtime";
4
4
  import { useEffect } from "react";
@@ -15,31 +15,41 @@ const APPEARANCE_ELEMENTS = new Set([
15
15
  "Row",
16
16
  "Cell"
17
17
  ]);
18
- function useTableTooltipRefresh(scroller, isScrolling) {
19
- const $ = c(7);
18
+ function useTableTooltipRefresh(scroller, isScrolling, onAppearanceChange, onRest) {
19
+ const $ = c(11);
20
20
  let t0;
21
- if ($[0] !== isScrolling || $[1] !== scroller?.parentElement) {
21
+ if ($[0] !== isScrolling || $[1] !== onAppearanceChange || $[2] !== onRest || $[3] !== scroller?.parentElement) {
22
22
  t0 = () => {
23
23
  const root = scroller?.parentElement;
24
- if (root && !isScrolling) refreshAutoTooltipsWithin(root);
24
+ if (root && !isScrolling) {
25
+ onAppearanceChange?.();
26
+ onRest?.();
27
+ refreshAutoTooltipsWithin(root);
28
+ }
25
29
  };
26
30
  $[0] = isScrolling;
27
- $[1] = scroller?.parentElement;
28
- $[2] = t0;
29
- } else t0 = $[2];
31
+ $[1] = onAppearanceChange;
32
+ $[2] = onRest;
33
+ $[3] = scroller?.parentElement;
34
+ $[4] = t0;
35
+ } else t0 = $[4];
30
36
  useEffect(t0);
31
37
  let t1;
32
- if ($[3] !== scroller?.parentElement) {
38
+ if ($[5] !== onAppearanceChange || $[6] !== scroller?.parentElement) {
33
39
  t1 = () => {
34
40
  const root_0 = scroller?.parentElement;
35
41
  if (!root_0) return;
42
+ const refresh = () => {
43
+ onAppearanceChange?.();
44
+ refreshAutoTooltipsWithin(root_0);
45
+ };
46
+ window.addEventListener("resize", refresh, { passive: true });
36
47
  const observer = new MutationObserver((records) => {
37
48
  if (records.some((t2) => {
38
49
  const { target } = t2;
39
50
  return target === root_0 || !root_0.contains(target) || target instanceof HTMLElement && APPEARANCE_ELEMENTS.has(target.dataset.element ?? "");
40
- })) refreshAutoTooltipsWithin(root_0);
51
+ })) refresh();
41
52
  });
42
- const refresh = () => refreshAutoTooltipsWithin(root_0);
43
53
  document.fonts?.addEventListener("loadingdone", refresh);
44
54
  observer.observe(root_0, {
45
55
  attributes: true,
@@ -48,18 +58,21 @@ function useTableTooltipRefresh(scroller, isScrolling) {
48
58
  for (let parent = root_0.parentElement; parent; parent = parent.parentElement) observer.observe(parent, { attributes: true });
49
59
  return () => {
50
60
  observer.disconnect();
61
+ window.removeEventListener("resize", refresh);
51
62
  document.fonts?.removeEventListener("loadingdone", refresh);
52
63
  };
53
64
  };
54
- $[3] = scroller?.parentElement;
55
- $[4] = t1;
56
- } else t1 = $[4];
65
+ $[5] = onAppearanceChange;
66
+ $[6] = scroller?.parentElement;
67
+ $[7] = t1;
68
+ } else t1 = $[7];
57
69
  let t2;
58
- if ($[5] !== scroller) {
59
- t2 = [scroller];
60
- $[5] = scroller;
61
- $[6] = t2;
62
- } else t2 = $[6];
70
+ if ($[8] !== onAppearanceChange || $[9] !== scroller) {
71
+ t2 = [onAppearanceChange, scroller];
72
+ $[8] = onAppearanceChange;
73
+ $[9] = scroller;
74
+ $[10] = t2;
75
+ } else t2 = $[10];
63
76
  useEffect(t1, t2);
64
77
  }
65
78
 
@@ -1 +1 @@
1
- {"version":3,"file":"use-table-tooltip-refresh.js","names":["useEffect","refreshAutoTooltipsWithin","APPEARANCE_ELEMENTS","Set","useTableTooltipRefresh","scroller","isScrolling","$","_c","t0","parentElement","root","t1","root_0","observer","MutationObserver","records","some","t2","target","contains","HTMLElement","has","dataset","element","refresh","document","fonts","addEventListener","observe","attributes","subtree","parent","disconnect","removeEventListener"],"sources":["../../../../src/components/data/TableBase/use-table-tooltip-refresh.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { refreshAutoTooltipsWithin } from '../../content/use-auto-tooltip';\n\n// These elements own inherited table typography and its state selectors.\nconst APPEARANCE_ELEMENTS = new Set([\n 'Scroller',\n 'Table',\n 'Head',\n 'HeadRow',\n 'HeaderCell',\n 'HeaderGroupCell',\n 'Body',\n 'Row',\n 'Cell',\n]);\n\nexport function useTableTooltipRefresh(\n scroller: HTMLDivElement | null,\n isScrolling: boolean,\n) {\n // A commit can change inherited appearance without changing the box or\n // font-set size. Refresh at rest, including the commit that settles scroll.\n useEffect(() => {\n const root = scroller?.parentElement;\n if (root && !isScrolling) refreshAutoTooltipsWithin(root);\n });\n\n useEffect(() => {\n const root = scroller?.parentElement;\n if (!root) return;\n\n const observer = new MutationObserver((records) => {\n if (\n records.some(\n ({ target }) =>\n target === root ||\n !root.contains(target) ||\n (target instanceof HTMLElement &&\n APPEARANCE_ELEMENTS.has(target.dataset.element ?? '')),\n )\n ) {\n // One scan per delivery also covers sibling/state selector changes.\n // Spacer height and tooltip-trigger mutations need no refresh.\n refreshAutoTooltipsWithin(root);\n }\n });\n const refresh = () => refreshAutoTooltipsWithin(root);\n document.fonts?.addEventListener('loadingdone', refresh);\n observer.observe(root, { attributes: true, subtree: true });\n for (\n let parent = root.parentElement;\n parent;\n parent = parent.parentElement\n ) {\n observer.observe(parent, { attributes: true });\n }\n return () => {\n observer.disconnect();\n document.fonts?.removeEventListener('loadingdone', refresh);\n };\n }, [scroller]);\n}\n"],"mappings":";;;;;;AAKA,MAAME,sBAAsB,IAAIC,IAAI;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAOC,uBAAAC,UAAAC,aAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;AAAA,KAAAF,EAAA,OAAAD,eAAAC,EAAA,OAAAF,UAAAK,eAAA;AAMKD,aAAA;GACR,MAAAE,OAAaN,UAAQK;AACrB,OAAIC,QAAA,CAASL,YAAaL,2BAA0BU,KAAK;;AAC1DJ,IAAA,KAAAD;AAAAC,IAAA,KAAAF,UAAAK;AAAAH,IAAA,KAAAE;OAAAA,MAAAF,EAAA;AAHDP,WAAUS,GAGR;CAAA,IAAAG;AAAA,KAAAL,EAAA,OAAAF,UAAAK,eAAA;AAEQE,aAAA;GACR,MAAAC,SAAaR,UAAQK;AACrB,OAAI,CAACC,OAAI;GAET,MAAAG,WAAiB,IAAIC,kBAAiBC,YAAA;AACpC,QACEA,QAAOC,MACLC,OAAA;KAAC,MAAA,EAAAC,WAAAD;AAAU,YACTC,WAAWR,UAAX,CACCA,OAAIS,SAAUD,OAEyC,IADvDA,kBAAkBE,eACjBnB,oBAAmBoB,IAAKH,OAAMI,QAAQC,WAAd,GAA8B;MAC3D,CAIDvB,2BAA0BU,OAAK;KAEjC;GACF,MAAAc,gBAAsBxB,0BAA0BU,OAAK;AACrDe,YAAQC,OAAwBC,iBAAC,eAAeH,QAAQ;AACxDX,YAAQe,QAASlB,QAAM;IAAAmB,YAAc;IAAIC,SAAW;IAAM,CAAC;AAC3D,QAAA,IAAAC,SACerB,OAAID,eACjBsB,QAFFA,SAGWA,OAAMtB,cAEfI,UAAQe,QAASG,QAAQ,EAAAF,YAAc,MAAM,CAAC;AAC/C,gBACM;AACLhB,aAAQmB,YAAa;AACrBP,aAAQC,OAA2BO,oBAAC,eAAeT,QAAQ;;;AAE9DlB,IAAA,KAAAF,UAAAK;AAAAH,IAAA,KAAAK;OAAAA,MAAAL,EAAA;CAAA,IAAAW;AAAA,KAAAX,EAAA,OAAAF,UAAA;AAAEa,OAAA,CAACb,SAAS;AAAAE,IAAA,KAAAF;AAAAE,IAAA,KAAAW;OAAAA,MAAAX,EAAA;AAjCbP,WAAUY,IAiCPM,GAAW"}
1
+ {"version":3,"file":"use-table-tooltip-refresh.js","names":["useEffect","refreshAutoTooltipsWithin","APPEARANCE_ELEMENTS","Set","useTableTooltipRefresh","scroller","isScrolling","onAppearanceChange","onRest","$","_c","t0","parentElement","root","t1","root_0","refresh","window","addEventListener","passive","observer","MutationObserver","records","some","t2","target","contains","HTMLElement","has","dataset","element","document","fonts","observe","attributes","subtree","parent","disconnect","removeEventListener"],"sources":["../../../../src/components/data/TableBase/use-table-tooltip-refresh.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { refreshAutoTooltipsWithin } from '../../content/use-auto-tooltip';\n\n// These elements own inherited table typography and its state selectors.\nconst APPEARANCE_ELEMENTS = new Set([\n 'Scroller',\n 'Table',\n 'Head',\n 'HeadRow',\n 'HeaderCell',\n 'HeaderGroupCell',\n 'Body',\n 'Row',\n 'Cell',\n]);\n\nexport function useTableTooltipRefresh(\n scroller: HTMLDivElement | null,\n isScrolling: boolean,\n onAppearanceChange?: () => void,\n onRest?: () => void,\n) {\n // A commit can change inherited appearance without changing the box or\n // font-set size. Refresh at rest, including the commit that settles scroll.\n useEffect(() => {\n const root = scroller?.parentElement;\n if (root && !isScrolling) {\n onAppearanceChange?.();\n // Range buffers settle here, separately from mid-gesture appearance.\n onRest?.();\n refreshAutoTooltipsWithin(root);\n }\n });\n\n useEffect(() => {\n const root = scroller?.parentElement;\n if (!root) return;\n\n const refresh = () => {\n onAppearanceChange?.();\n refreshAutoTooltipsWithin(root);\n };\n window.addEventListener('resize', refresh, { passive: true });\n const observer = new MutationObserver((records) => {\n if (\n records.some(\n ({ target }) =>\n target === root ||\n !root.contains(target) ||\n (target instanceof HTMLElement &&\n APPEARANCE_ELEMENTS.has(target.dataset.element ?? '')),\n )\n ) {\n // One scan per delivery also covers sibling/state selector changes.\n // Spacer height and tooltip-trigger mutations need no refresh.\n refresh();\n }\n });\n document.fonts?.addEventListener('loadingdone', refresh);\n observer.observe(root, { attributes: true, subtree: true });\n for (\n let parent = root.parentElement;\n parent;\n parent = parent.parentElement\n ) {\n observer.observe(parent, { attributes: true });\n }\n return () => {\n observer.disconnect();\n window.removeEventListener('resize', refresh);\n document.fonts?.removeEventListener('loadingdone', refresh);\n };\n }, [onAppearanceChange, scroller]);\n}\n"],"mappings":";;;;;;AAKA,MAAME,sBAAsB,IAAIC,IAAI;CAClC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD,CAAC;AAEF,SAAOC,uBAAAC,UAAAC,aAAAC,oBAAAC,QAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAAA,IAAAC;AAAA,KAAAF,EAAA,OAAAH,eAAAG,EAAA,OAAAF,sBAAAE,EAAA,OAAAD,UAAAC,EAAA,OAAAJ,UAAAO,eAAA;AAQKD,aAAA;GACR,MAAAE,OAAaR,UAAQO;AACrB,OAAIC,QAAA,CAASP,aAAW;AACtBC,0BAAsB;AAEtBC,cAAU;AACVP,8BAA0BY,KAAK;;;AAElCJ,IAAA,KAAAH;AAAAG,IAAA,KAAAF;AAAAE,IAAA,KAAAD;AAAAC,IAAA,KAAAJ,UAAAO;AAAAH,IAAA,KAAAE;OAAAA,MAAAF,EAAA;AARDT,WAAUW,GAQR;CAAA,IAAAG;AAAA,KAAAL,EAAA,OAAAF,sBAAAE,EAAA,OAAAJ,UAAAO,eAAA;AAEQE,aAAA;GACR,MAAAC,SAAaV,UAAQO;AACrB,OAAI,CAACC,OAAI;GAET,MAAAG,gBAAgB;AACdT,0BAAsB;AACtBN,8BAA0BY,OAAK;;AAEjCI,UAAMC,iBAAkB,UAAUF,SAAS,EAAAG,SAAW,MAAM,CAAC;GAC7D,MAAAC,WAAiB,IAAIC,kBAAiBC,YAAA;AACpC,QACEA,QAAOC,MACLC,OAAA;KAAC,MAAA,EAAAC,WAAAD;AAAU,YACTC,WAAWZ,UAAX,CACCA,OAAIa,SAAUD,OAEyC,IADvDA,kBAAkBE,eACjBzB,oBAAmB0B,IAAKH,OAAMI,QAAQC,WAAd,GAA8B;MAC3D,CAIDd,UAAS;KAEX;AACFe,YAAQC,OAAwBd,iBAAC,eAAeF,QAAQ;AACxDI,YAAQa,QAASpB,QAAM;IAAAqB,YAAc;IAAIC,SAAW;IAAM,CAAC;AAC3D,QAAA,IAAAC,SACevB,OAAID,eACjBwB,QAFFA,SAGWA,OAAMxB,cAEfQ,UAAQa,QAASG,QAAQ,EAAAF,YAAc,MAAM,CAAC;AAC/C,gBACM;AACLd,aAAQiB,YAAa;AACrBpB,WAAMqB,oBAAqB,UAAUtB,QAAQ;AAC7Ce,aAAQC,OAA2BM,oBAAC,eAAetB,QAAQ;;;AAE9DP,IAAA,KAAAF;AAAAE,IAAA,KAAAJ,UAAAO;AAAAH,IAAA,KAAAK;OAAAA,MAAAL,EAAA;CAAA,IAAAe;AAAA,KAAAf,EAAA,OAAAF,sBAAAE,EAAA,OAAAJ,UAAA;AAAEmB,OAAA,CAACjB,oBAAoBF,SAAS;AAAAI,IAAA,KAAAF;AAAAE,IAAA,KAAAJ;AAAAI,IAAA,MAAAe;OAAAA,MAAAf,EAAA;AAtCjCT,WAAUc,IAsCPU,GAA+B"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../../_internal/hooks/use-event.js";
3
3
  import { useI18n } from "../../../i18n/useI18n.js";
4
4
  import { c } from "react/compiler-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
@@ -111,10 +111,12 @@ function Checkbox(allProps, ref) {
111
111
  let markIcon = isIndeterminate ? /* @__PURE__ */ jsx(Icon, {
112
112
  size: 12,
113
113
  stroke: 3,
114
+ "aria-hidden": "true",
114
115
  children: /* @__PURE__ */ jsx(IconMinus, {})
115
116
  }) : /* @__PURE__ */ jsx(Icon, {
116
117
  size: 12,
117
118
  stroke: 3,
119
+ "aria-hidden": "true",
118
120
  children: /* @__PURE__ */ jsx(IconCheck, {})
119
121
  });
120
122
  if (groupState) {
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","names":["useFocusableRef","IconCheck","IconMinus","BaseProps","CONTAINER_STYLES","ContainerStyleProps","Element","filterBaseProps","Styles","tasty","forwardRef","ReactElement","useContext","useMemo","useRef","AriaCheckboxProps","useCheckbox","useCheckboxGroupItem","useHover","useToggleState","Icon","FieldBaseProps","ToggleSelectionProps","mergeProps","useFocus","castNullableIsSelected","WithNullableSelected","extractStyles","useAutoTooltip","getValidationMods","INLINE_LABEL_STYLES","LABEL_STYLES","resolveValidationProps","useFieldProps","wrapWithField","HiddenInput","mergeTooltipFocusProps","splitTooltipTriggerProps","TooltipFocusProps","CheckboxGroup","CheckboxGroupContext","FocusableRef","CubeTooltipProviderProps","CubeCheckboxProps","Omit","inputStyles","isIndeterminate","value","tooltip","CheckboxWrapperElement","as","qa","styles","position","display","placeItems","placeContent","gap","flow","preset","cursor","width","color","CheckboxElement","radius","fill","disabled","border","invalid","valid","height","outline","focused","outlineOffset","transition","Checkbox","allProps","ref","groupState","originalProps","props","defaultValidationTrigger","valuePropsMapper","onChange","isSelected","unsafe__isDisabled","isDisabled","insideForm","isRequired","children","label","isInvalid","isValid","labelProps","labelStyles","labelPosition","isHidden","form","otherProps","isFocused","focusProps","hoverProps","isHovered","inputRef","domRef","renderWithTooltip","toggleState","inputProps","undefined","trim","markIcon","key","console","warn","mods","checked","indeterminate","hovered","renderCheckbox","tooltipFocusProps","checkboxField","tooltipTriggerProps","tooltipRef","pointerProps","element","HTMLLabelElement","current","HTMLElement","_Checkbox","cubeInputType","__Checkbox","Object","assign","Group","displayName"],"sources":["../../../../src/components/fields/Checkbox/Checkbox.tsx"],"sourcesContent":["import { useFocusableRef } from '@react-spectrum/utils';\nimport { IconCheck, IconMinus } from '@tabler/icons-react';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n Element,\n filterBaseProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { forwardRef, ReactElement, useContext, useMemo, useRef } from 'react';\nimport {\n AriaCheckboxProps,\n useCheckbox,\n useCheckboxGroupItem,\n useHover,\n} from 'react-aria';\nimport { useToggleState } from 'react-stately';\n\nimport { Icon } from '../../../icons/Icon';\nimport { FieldBaseProps, ToggleSelectionProps } from '../../../shared';\nimport { mergeProps } from '../../../utils/react';\nimport { useFocus } from '../../../utils/react/interactions';\nimport {\n castNullableIsSelected,\n WithNullableSelected,\n} from '../../../utils/react/nullableValue';\nimport { extractStyles } from '../../../utils/styles';\nimport { useAutoTooltip } from '../../content/use-auto-tooltip';\nimport {\n getValidationMods,\n INLINE_LABEL_STYLES,\n LABEL_STYLES,\n resolveValidationProps,\n useFieldProps,\n wrapWithField,\n} from '../../form';\nimport { HiddenInput } from '../../HiddenInput';\nimport {\n mergeTooltipFocusProps,\n splitTooltipTriggerProps,\n TooltipFocusProps,\n} from '../../overlays/Tooltip/split-trigger-props';\n\nimport { CheckboxGroup } from './CheckboxGroup';\nimport { CheckboxGroupContext } from './context';\n\nimport type { FocusableRef } from '@react-types/shared';\nimport type { CubeTooltipProviderProps } from '../../overlays/Tooltip/TooltipProvider';\n\nexport interface CubeCheckboxProps\n extends BaseProps,\n ContainerStyleProps,\n Omit<AriaCheckboxProps, 'form' | 'name'>,\n ToggleSelectionProps,\n FieldBaseProps<boolean | null | undefined> {\n inputStyles?: Styles;\n isIndeterminate?: boolean;\n value?: string;\n /**\n * The checkbox's own tooltip, shown on hover over the box and its inline\n * label — also while the checkbox is disabled — and on keyboard focus. A string, or `TooltipProvider` props\n * (`title`, `placement`, …). The info badge next to a field label is\n * `labelTooltip`.\n */\n tooltip?: string | Omit<CubeTooltipProviderProps, 'children'>;\n}\n\nconst CheckboxWrapperElement = tasty({\n as: 'label',\n qa: 'CheckboxWrapper',\n styles: {\n position: 'relative',\n display: 'flex',\n placeItems: 'center start',\n placeContent: 'baseline',\n gap: '1x',\n flow: 'row',\n preset: 'default',\n cursor: '$pointer',\n width: 'max max-content',\n color: '#dark-02',\n },\n});\n\nconst CheckboxElement = tasty({\n styles: {\n display: 'grid',\n placeItems: 'center',\n radius: '.5r',\n fill: {\n '': '#surface',\n 'checked | indeterminate': '#primary',\n 'invalid & !checked': '#surface',\n 'invalid & checked': '#danger',\n 'valid & !checked': '#surface',\n 'valid & checked': '#success',\n disabled: '#dark.12',\n },\n // The check / minus icon is always rendered inside the box, so the\n // default color must be transparent when the checkbox is neither\n // checked nor indeterminate — otherwise the white stroke shows through\n // the dark `#surface` fill in dark schemes (it used to be hidden\n // accidentally by the legacy white-on-white `fill: '#white'`).\n color: {\n '': '#clear',\n 'checked | indeterminate': '#white',\n },\n border: {\n '': '#dark.30',\n invalid: '#danger',\n valid: '#success',\n 'disabled | ((indeterminate | checked) & !invalid & !valid)': '#clear',\n },\n width: '(2x - 2bw)',\n height: '(2x - 2bw)',\n outline: {\n '': '#primary-text.0',\n focused: '1bw #primary-text',\n },\n outlineOffset: 1,\n transition: 'theme',\n },\n});\n\nfunction Checkbox(\n allProps: WithNullableSelected<CubeCheckboxProps>,\n ref: FocusableRef,\n) {\n // Swap hooks depending on whether this checkbox is inside a CheckboxGroup.\n // This is a bit unorthodox. Typically, hooks cannot be called in a conditional,\n // but since the checkbox won't move in and out of a group, it should be safe.\n let groupState = useContext(CheckboxGroupContext);\n\n const originalProps = castNullableIsSelected(allProps);\n\n const props = useFieldProps(originalProps, {\n defaultValidationTrigger: 'onChange',\n valuePropsMapper: ({ value, onChange }) => ({\n isSelected: value ?? false,\n isIndeterminate: false,\n onChange: onChange,\n }),\n unsafe__isDisabled: !!groupState,\n });\n\n let {\n qa,\n isIndeterminate = false,\n isDisabled = false,\n insideForm,\n isRequired,\n children,\n label,\n isInvalid,\n isValid,\n labelProps,\n labelStyles,\n labelPosition,\n inputStyles,\n isHidden,\n form,\n tooltip,\n // Pulled out so it stays off the `<label>` spread below. The Aria hooks read\n // it from `props` directly; `filterBaseProps` already dropped it at runtime,\n // but it typed as a DOM `FormEventHandler` there, which it is not.\n onChange,\n ...otherProps\n } = props;\n\n let styles: Styles = extractStyles(props, CONTAINER_STYLES);\n\n labelStyles = useMemo(\n () => ({\n ...(!groupState ? LABEL_STYLES : INLINE_LABEL_STYLES),\n ...labelStyles,\n }),\n [groupState, labelStyles],\n );\n\n let { isFocused, focusProps } = useFocus(true);\n let { hoverProps, isHovered } = useHover({ isDisabled });\n\n let inputRef = useRef(null);\n let domRef = useFocusableRef(ref, inputRef);\n\n // Triggered by the wrapper rather than the input, so a disabled checkbox —\n // whose input ignores the pointer — still shows it.\n let { renderWithTooltip } = useAutoTooltip({ tooltip, children: null });\n\n const toggleState = useToggleState(props);\n\n // React Aria writes `form` onto the input as the id of its `<form>`, so the\n // form instance would render as `form=\"[object Object]\"` and detach it.\n let { inputProps } = groupState\n ? useCheckboxGroupItem(\n {\n ...props,\n form: undefined,\n // Value is optional for standalone checkboxes, but required for CheckboxGroup items;\n // it's passed explicitly here to avoid typescript error (requires strictNullChecks disabled).\n value: props.value || '',\n // Only pass isRequired and the validation state to react-aria if they came from\n // the props for this individual checkbox, and not from the group via context.\n isRequired: originalProps.isRequired,\n isInvalid: resolveValidationProps(originalProps).isInvalid,\n },\n groupState,\n inputRef,\n )\n : useCheckbox(\n {\n ...props,\n form: undefined,\n ...(typeof label === 'string' && label.trim()\n ? { 'aria-label': label }\n : {}),\n },\n toggleState,\n inputRef,\n );\n\n let markIcon = isIndeterminate ? (\n <Icon size={12} stroke={3}>\n <IconMinus />\n </Icon>\n ) : (\n <Icon size={12} stroke={3}>\n <IconCheck />\n </Icon>\n );\n\n if (groupState) {\n for (let key of ['isSelected', 'defaultSelected', 'isEmphasized']) {\n if (originalProps[key] != null) {\n console.warn(\n `CubeUIKit: ${key} is unsupported on individual <Checkbox> elements within a <CheckboxGroup>. Please apply these props to the group instead.`,\n );\n }\n }\n if (props.value == null) {\n console.warn(\n 'CubeUIKit: A <Checkbox> element within a <CheckboxGroup> requires a `value` property.',\n );\n }\n }\n\n const mods = {\n checked: inputProps.checked,\n indeterminate: isIndeterminate,\n ...getValidationMods({ isInvalid, isValid }),\n disabled: isDisabled,\n hovered: isHovered,\n focused: isFocused,\n 'side-label': labelPosition === 'side',\n 'inside-form': insideForm,\n };\n\n // The input, where keyboard focus lands, takes the tooltip's focus-side\n // trigger props; the wrapper keeps the hover side and positions the tooltip.\n const renderCheckbox = (tooltipFocusProps?: TooltipFocusProps) => (\n <>\n <HiddenInput\n qa={qa || 'Checkbox'}\n data-input-type=\"checkbox\"\n {...mergeTooltipFocusProps(\n mergeProps(inputProps, focusProps),\n tooltipFocusProps,\n )}\n ref={inputRef}\n />\n <CheckboxElement data-element=\"Input\" mods={mods} styles={inputStyles}>\n {markIcon}\n </CheckboxElement>\n </>\n );\n\n if (!groupState) {\n const checkboxField = renderWithTooltip(\n (tooltipTriggerProps, tooltipRef) => {\n const { pointerProps, focusProps: tooltipFocusProps } =\n splitTooltipTriggerProps(tooltipTriggerProps);\n\n return (\n // `styles` is forwarded here as well as in the in-group branch\n // below — it used to be extracted from props and then dropped on\n // this path, so `<Checkbox styles={{ … }}>` outside a group was a\n // silent no-op.\n <CheckboxWrapperElement\n styles={styles}\n isHidden={isHidden}\n mods={mods}\n {...pointerProps}\n ref={tooltipRef}\n >\n {renderCheckbox(tooltipFocusProps)}\n {children ? (\n // Same element and preset as the in-group branch. This path used\n // to force children through `<Text nowrap>`: `white-space:\n // nowrap` inherits, so a label longer than a few words — or any\n // custom node with two lines in it — could not wrap at all, and\n // the label also missed the preset a grouped one picks up.\n <Element\n styles={INLINE_LABEL_STYLES}\n mods={{\n ...getValidationMods({ isInvalid, isValid }),\n disabled: isDisabled,\n }}\n >\n {children}\n </Element>\n ) : null}\n </CheckboxWrapperElement>\n );\n },\n 'top',\n );\n\n // `tooltip` is the checkbox's own here, not a legacy label badge.\n // `renderWithTooltip` is typed for any node; here it returns an element.\n return wrapWithField(checkboxField as ReactElement, domRef, {\n ...props,\n tooltip: undefined,\n });\n }\n\n return renderWithTooltip((tooltipTriggerProps, tooltipRef) => {\n const { pointerProps, focusProps: tooltipFocusProps } =\n splitTooltipTriggerProps(tooltipTriggerProps);\n\n return (\n <CheckboxWrapperElement\n styles={styles}\n isHidden={isHidden}\n {...mergeProps(hoverProps, pointerProps)}\n {...filterBaseProps(otherProps)}\n ref={\n tooltipRef\n ? // Written only when React attaches the node, never during render.\n (element: HTMLLabelElement | null) => {\n (domRef as { current: HTMLElement | null }).current = element;\n (tooltipRef as { current: HTMLElement | null }).current =\n element;\n }\n : domRef\n }\n >\n {renderCheckbox(tooltipFocusProps)}\n {label ?? children ? (\n <Element\n styles={labelStyles}\n mods={{\n ...getValidationMods({ isInvalid, isValid }),\n disabled: isDisabled,\n }}\n {...(labelProps ? filterBaseProps(labelProps) : undefined)}\n >\n {label ?? children}\n </Element>\n ) : null}\n </CheckboxWrapperElement>\n );\n }, 'top');\n}\n\n/**\n * Checkboxes allow users to select multiple items from a list of individual items,\n * or to mark one individual item as selected.\n */\nlet _Checkbox = forwardRef(Checkbox);\n\n(_Checkbox as any).cubeInputType = 'Checkbox';\nlet __Checkbox = Object.assign(\n _Checkbox as typeof _Checkbox & { Group: typeof CheckboxGroup },\n { Group: CheckboxGroup },\n);\n\n__Checkbox.displayName = 'Checkbox';\n\nexport { __Checkbox as Checkbox };\nexport type { AriaCheckboxProps };\nexport { useCheckbox };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Checkbox.js","names":["useFocusableRef","IconCheck","IconMinus","BaseProps","CONTAINER_STYLES","ContainerStyleProps","Element","filterBaseProps","Styles","tasty","forwardRef","ReactElement","useContext","useMemo","useRef","AriaCheckboxProps","useCheckbox","useCheckboxGroupItem","useHover","useToggleState","Icon","FieldBaseProps","ToggleSelectionProps","mergeProps","useFocus","castNullableIsSelected","WithNullableSelected","extractStyles","useAutoTooltip","getValidationMods","INLINE_LABEL_STYLES","LABEL_STYLES","resolveValidationProps","useFieldProps","wrapWithField","HiddenInput","mergeTooltipFocusProps","splitTooltipTriggerProps","TooltipFocusProps","CheckboxGroup","CheckboxGroupContext","FocusableRef","CubeTooltipProviderProps","CubeCheckboxProps","Omit","inputStyles","isIndeterminate","value","tooltip","CheckboxWrapperElement","as","qa","styles","position","display","placeItems","placeContent","gap","flow","preset","cursor","width","color","CheckboxElement","radius","fill","disabled","border","invalid","valid","height","outline","focused","outlineOffset","transition","Checkbox","allProps","ref","groupState","originalProps","props","defaultValidationTrigger","valuePropsMapper","onChange","isSelected","unsafe__isDisabled","isDisabled","insideForm","isRequired","children","label","isInvalid","isValid","labelProps","labelStyles","labelPosition","isHidden","form","otherProps","isFocused","focusProps","hoverProps","isHovered","inputRef","domRef","renderWithTooltip","toggleState","inputProps","undefined","trim","markIcon","key","console","warn","mods","checked","indeterminate","hovered","renderCheckbox","tooltipFocusProps","checkboxField","tooltipTriggerProps","tooltipRef","pointerProps","element","HTMLLabelElement","current","HTMLElement","_Checkbox","cubeInputType","__Checkbox","Object","assign","Group","displayName"],"sources":["../../../../src/components/fields/Checkbox/Checkbox.tsx"],"sourcesContent":["import { useFocusableRef } from '@react-spectrum/utils';\nimport { IconCheck, IconMinus } from '@tabler/icons-react';\nimport {\n BaseProps,\n CONTAINER_STYLES,\n ContainerStyleProps,\n Element,\n filterBaseProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { forwardRef, ReactElement, useContext, useMemo, useRef } from 'react';\nimport {\n AriaCheckboxProps,\n useCheckbox,\n useCheckboxGroupItem,\n useHover,\n} from 'react-aria';\nimport { useToggleState } from 'react-stately';\n\nimport { Icon } from '../../../icons/Icon';\nimport { FieldBaseProps, ToggleSelectionProps } from '../../../shared';\nimport { mergeProps } from '../../../utils/react';\nimport { useFocus } from '../../../utils/react/interactions';\nimport {\n castNullableIsSelected,\n WithNullableSelected,\n} from '../../../utils/react/nullableValue';\nimport { extractStyles } from '../../../utils/styles';\nimport { useAutoTooltip } from '../../content/use-auto-tooltip';\nimport {\n getValidationMods,\n INLINE_LABEL_STYLES,\n LABEL_STYLES,\n resolveValidationProps,\n useFieldProps,\n wrapWithField,\n} from '../../form';\nimport { HiddenInput } from '../../HiddenInput';\nimport {\n mergeTooltipFocusProps,\n splitTooltipTriggerProps,\n TooltipFocusProps,\n} from '../../overlays/Tooltip/split-trigger-props';\n\nimport { CheckboxGroup } from './CheckboxGroup';\nimport { CheckboxGroupContext } from './context';\n\nimport type { FocusableRef } from '@react-types/shared';\nimport type { CubeTooltipProviderProps } from '../../overlays/Tooltip/TooltipProvider';\n\nexport interface CubeCheckboxProps\n extends BaseProps,\n ContainerStyleProps,\n Omit<AriaCheckboxProps, 'form' | 'name'>,\n ToggleSelectionProps,\n FieldBaseProps<boolean | null | undefined> {\n inputStyles?: Styles;\n isIndeterminate?: boolean;\n value?: string;\n /**\n * The checkbox's own tooltip, shown on hover over the box and its inline\n * label — also while the checkbox is disabled — and on keyboard focus. A string, or `TooltipProvider` props\n * (`title`, `placement`, …). The info badge next to a field label is\n * `labelTooltip`.\n */\n tooltip?: string | Omit<CubeTooltipProviderProps, 'children'>;\n}\n\nconst CheckboxWrapperElement = tasty({\n as: 'label',\n qa: 'CheckboxWrapper',\n styles: {\n position: 'relative',\n display: 'flex',\n placeItems: 'center start',\n placeContent: 'baseline',\n gap: '1x',\n flow: 'row',\n preset: 'default',\n cursor: '$pointer',\n width: 'max max-content',\n color: '#dark-02',\n },\n});\n\nconst CheckboxElement = tasty({\n styles: {\n display: 'grid',\n placeItems: 'center',\n radius: '.5r',\n fill: {\n '': '#surface',\n 'checked | indeterminate': '#primary',\n 'invalid & !checked': '#surface',\n 'invalid & checked': '#danger',\n 'valid & !checked': '#surface',\n 'valid & checked': '#success',\n disabled: '#dark.12',\n },\n // The check / minus icon is always rendered inside the box, so the\n // default color must be transparent when the checkbox is neither\n // checked nor indeterminate — otherwise the white stroke shows through\n // the dark `#surface` fill in dark schemes (it used to be hidden\n // accidentally by the legacy white-on-white `fill: '#white'`).\n color: {\n '': '#clear',\n 'checked | indeterminate': '#white',\n },\n border: {\n '': '#dark.30',\n invalid: '#danger',\n valid: '#success',\n 'disabled | ((indeterminate | checked) & !invalid & !valid)': '#clear',\n },\n width: '(2x - 2bw)',\n height: '(2x - 2bw)',\n outline: {\n '': '#primary-text.0',\n focused: '1bw #primary-text',\n },\n outlineOffset: 1,\n transition: 'theme',\n },\n});\n\nfunction Checkbox(\n allProps: WithNullableSelected<CubeCheckboxProps>,\n ref: FocusableRef,\n) {\n // Swap hooks depending on whether this checkbox is inside a CheckboxGroup.\n // This is a bit unorthodox. Typically, hooks cannot be called in a conditional,\n // but since the checkbox won't move in and out of a group, it should be safe.\n let groupState = useContext(CheckboxGroupContext);\n\n const originalProps = castNullableIsSelected(allProps);\n\n const props = useFieldProps(originalProps, {\n defaultValidationTrigger: 'onChange',\n valuePropsMapper: ({ value, onChange }) => ({\n isSelected: value ?? false,\n isIndeterminate: false,\n onChange: onChange,\n }),\n unsafe__isDisabled: !!groupState,\n });\n\n let {\n qa,\n isIndeterminate = false,\n isDisabled = false,\n insideForm,\n isRequired,\n children,\n label,\n isInvalid,\n isValid,\n labelProps,\n labelStyles,\n labelPosition,\n inputStyles,\n isHidden,\n form,\n tooltip,\n // Pulled out so it stays off the `<label>` spread below. The Aria hooks read\n // it from `props` directly; `filterBaseProps` already dropped it at runtime,\n // but it typed as a DOM `FormEventHandler` there, which it is not.\n onChange,\n ...otherProps\n } = props;\n\n let styles: Styles = extractStyles(props, CONTAINER_STYLES);\n\n labelStyles = useMemo(\n () => ({\n ...(!groupState ? LABEL_STYLES : INLINE_LABEL_STYLES),\n ...labelStyles,\n }),\n [groupState, labelStyles],\n );\n\n let { isFocused, focusProps } = useFocus(true);\n let { hoverProps, isHovered } = useHover({ isDisabled });\n\n let inputRef = useRef(null);\n let domRef = useFocusableRef(ref, inputRef);\n\n // Triggered by the wrapper rather than the input, so a disabled checkbox —\n // whose input ignores the pointer — still shows it.\n let { renderWithTooltip } = useAutoTooltip({ tooltip, children: null });\n\n const toggleState = useToggleState(props);\n\n // React Aria writes `form` onto the input as the id of its `<form>`, so the\n // form instance would render as `form=\"[object Object]\"` and detach it.\n let { inputProps } = groupState\n ? useCheckboxGroupItem(\n {\n ...props,\n form: undefined,\n // Value is optional for standalone checkboxes, but required for CheckboxGroup items;\n // it's passed explicitly here to avoid typescript error (requires strictNullChecks disabled).\n value: props.value || '',\n // Only pass isRequired and the validation state to react-aria if they came from\n // the props for this individual checkbox, and not from the group via context.\n isRequired: originalProps.isRequired,\n isInvalid: resolveValidationProps(originalProps).isInvalid,\n },\n groupState,\n inputRef,\n )\n : useCheckbox(\n {\n ...props,\n form: undefined,\n ...(typeof label === 'string' && label.trim()\n ? { 'aria-label': label }\n : {}),\n },\n toggleState,\n inputRef,\n );\n\n // Decorative: the input already announces checked, unchecked and mixed.\n let markIcon = isIndeterminate ? (\n <Icon size={12} stroke={3} aria-hidden=\"true\">\n <IconMinus />\n </Icon>\n ) : (\n <Icon size={12} stroke={3} aria-hidden=\"true\">\n <IconCheck />\n </Icon>\n );\n\n if (groupState) {\n for (let key of ['isSelected', 'defaultSelected', 'isEmphasized']) {\n if (originalProps[key] != null) {\n console.warn(\n `CubeUIKit: ${key} is unsupported on individual <Checkbox> elements within a <CheckboxGroup>. Please apply these props to the group instead.`,\n );\n }\n }\n if (props.value == null) {\n console.warn(\n 'CubeUIKit: A <Checkbox> element within a <CheckboxGroup> requires a `value` property.',\n );\n }\n }\n\n const mods = {\n checked: inputProps.checked,\n indeterminate: isIndeterminate,\n ...getValidationMods({ isInvalid, isValid }),\n disabled: isDisabled,\n hovered: isHovered,\n focused: isFocused,\n 'side-label': labelPosition === 'side',\n 'inside-form': insideForm,\n };\n\n // The input, where keyboard focus lands, takes the tooltip's focus-side\n // trigger props; the wrapper keeps the hover side and positions the tooltip.\n const renderCheckbox = (tooltipFocusProps?: TooltipFocusProps) => (\n <>\n <HiddenInput\n qa={qa || 'Checkbox'}\n data-input-type=\"checkbox\"\n {...mergeTooltipFocusProps(\n mergeProps(inputProps, focusProps),\n tooltipFocusProps,\n )}\n ref={inputRef}\n />\n <CheckboxElement data-element=\"Input\" mods={mods} styles={inputStyles}>\n {markIcon}\n </CheckboxElement>\n </>\n );\n\n if (!groupState) {\n const checkboxField = renderWithTooltip(\n (tooltipTriggerProps, tooltipRef) => {\n const { pointerProps, focusProps: tooltipFocusProps } =\n splitTooltipTriggerProps(tooltipTriggerProps);\n\n return (\n // `styles` is forwarded here as well as in the in-group branch\n // below — it used to be extracted from props and then dropped on\n // this path, so `<Checkbox styles={{ … }}>` outside a group was a\n // silent no-op.\n <CheckboxWrapperElement\n styles={styles}\n isHidden={isHidden}\n mods={mods}\n {...pointerProps}\n ref={tooltipRef}\n >\n {renderCheckbox(tooltipFocusProps)}\n {children ? (\n // Same element and preset as the in-group branch. This path used\n // to force children through `<Text nowrap>`: `white-space:\n // nowrap` inherits, so a label longer than a few words — or any\n // custom node with two lines in it — could not wrap at all, and\n // the label also missed the preset a grouped one picks up.\n <Element\n styles={INLINE_LABEL_STYLES}\n mods={{\n ...getValidationMods({ isInvalid, isValid }),\n disabled: isDisabled,\n }}\n >\n {children}\n </Element>\n ) : null}\n </CheckboxWrapperElement>\n );\n },\n 'top',\n );\n\n // `tooltip` is the checkbox's own here, not a legacy label badge.\n // `renderWithTooltip` is typed for any node; here it returns an element.\n return wrapWithField(checkboxField as ReactElement, domRef, {\n ...props,\n tooltip: undefined,\n });\n }\n\n return renderWithTooltip((tooltipTriggerProps, tooltipRef) => {\n const { pointerProps, focusProps: tooltipFocusProps } =\n splitTooltipTriggerProps(tooltipTriggerProps);\n\n return (\n <CheckboxWrapperElement\n styles={styles}\n isHidden={isHidden}\n {...mergeProps(hoverProps, pointerProps)}\n {...filterBaseProps(otherProps)}\n ref={\n tooltipRef\n ? // Written only when React attaches the node, never during render.\n (element: HTMLLabelElement | null) => {\n (domRef as { current: HTMLElement | null }).current = element;\n (tooltipRef as { current: HTMLElement | null }).current =\n element;\n }\n : domRef\n }\n >\n {renderCheckbox(tooltipFocusProps)}\n {label ?? children ? (\n <Element\n styles={labelStyles}\n mods={{\n ...getValidationMods({ isInvalid, isValid }),\n disabled: isDisabled,\n }}\n {...(labelProps ? filterBaseProps(labelProps) : undefined)}\n >\n {label ?? children}\n </Element>\n ) : null}\n </CheckboxWrapperElement>\n );\n }, 'top');\n}\n\n/**\n * Checkboxes allow users to select multiple items from a list of individual items,\n * or to mark one individual item as selected.\n */\nlet _Checkbox = forwardRef(Checkbox);\n\n(_Checkbox as any).cubeInputType = 'Checkbox';\nlet __Checkbox = Object.assign(\n _Checkbox as typeof _Checkbox & { Group: typeof CheckboxGroup },\n { Group: CheckboxGroup },\n);\n\n__Checkbox.displayName = 'Checkbox';\n\nexport { __Checkbox as Checkbox };\nexport type { AriaCheckboxProps };\nexport { useCheckbox };\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.193.1 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.194.0 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { castNullableArrayValue } from "../../../utils/react/nullableValue.js";
@@ -104,30 +104,30 @@ function CheckboxGroup(rawProps, ref) {
104
104
  $[16] = t8;
105
105
  } else t8 = $[16];
106
106
  let t9;
107
- if ($[17] !== id || $[18] !== inputStyles || $[19] !== t5 || $[20] !== t8) {
107
+ if ($[17] !== groupProps || $[18] !== id || $[19] !== inputStyles || $[20] !== t5 || $[21] !== t8) {
108
108
  t9 = /* @__PURE__ */ jsx(CheckGroupElement, {
109
+ ...groupProps,
109
110
  id,
110
111
  styles: inputStyles,
111
112
  mods: t5,
112
113
  children: t8
113
114
  });
114
- $[17] = id;
115
- $[18] = inputStyles;
116
- $[19] = t5;
117
- $[20] = t8;
118
- $[21] = t9;
119
- } else t9 = $[21];
115
+ $[17] = groupProps;
116
+ $[18] = id;
117
+ $[19] = inputStyles;
118
+ $[20] = t5;
119
+ $[21] = t8;
120
+ $[22] = t9;
121
+ } else t9 = $[22];
120
122
  const radioGroup = t9;
121
123
  let t10;
122
- if ($[22] !== baseLabelProps || $[23] !== domRef || $[24] !== groupProps || $[25] !== labelProps || $[26] !== props || $[27] !== radioGroup) {
124
+ if ($[23] !== baseLabelProps || $[24] !== domRef || $[25] !== labelProps || $[26] !== props || $[27] !== radioGroup) {
123
125
  t10 = wrapWithField(radioGroup, domRef, {
124
126
  ...props,
125
- fieldProps: groupProps,
126
127
  labelProps: mergeProps$1(baseLabelProps, labelProps)
127
128
  });
128
- $[22] = baseLabelProps;
129
- $[23] = domRef;
130
- $[24] = groupProps;
129
+ $[23] = baseLabelProps;
130
+ $[24] = domRef;
131
131
  $[25] = labelProps;
132
132
  $[26] = props;
133
133
  $[27] = radioGroup;