@cube-dev/ui-kit 0.156.0 → 0.157.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (637) hide show
  1. package/dist/CHANGELOG.md +237 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  24. package/dist/components/actions/CommandMenu/styled.js +1 -1
  25. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  26. package/dist/components/actions/ItemActionContext.js +1 -1
  27. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  28. package/dist/components/actions/Link/Link.js +1 -1
  29. package/dist/components/actions/Menu/Menu.js +1 -1
  30. package/dist/components/actions/Menu/MenuItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuSection.js +1 -1
  32. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  35. package/dist/components/actions/Menu/context.js +1 -1
  36. package/dist/components/actions/Menu/styled.js +1 -1
  37. package/dist/components/actions/index.js +1 -1
  38. package/dist/components/actions/use-action.js +1 -1
  39. package/dist/components/actions/use-anchored-menu.js +1 -1
  40. package/dist/components/actions/use-context-menu.js +42 -44
  41. package/dist/components/actions/use-context-menu.js.map +1 -1
  42. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  43. package/dist/components/content/Alert/Alert.js +1 -1
  44. package/dist/components/content/Alert/use-alert.js +1 -1
  45. package/dist/components/content/Avatar/Avatar.js +1 -1
  46. package/dist/components/content/Badge/Badge.js +1 -1
  47. package/dist/components/content/Card/Card.js +1 -1
  48. package/dist/components/content/Content.js +1 -1
  49. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  51. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  52. package/dist/components/content/Divider.js +1 -1
  53. package/dist/components/content/Footer.js +1 -1
  54. package/dist/components/content/Header.js +1 -1
  55. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  56. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  57. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  58. package/dist/components/content/Item/Item.js +1 -1
  59. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  60. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  61. package/dist/components/content/Layout/GridLayout.js +1 -1
  62. package/dist/components/content/Layout/Layout.js +1 -1
  63. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  64. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  65. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  66. package/dist/components/content/Layout/LayoutContent.js +1 -1
  67. package/dist/components/content/Layout/LayoutContext.js +1 -1
  68. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  69. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  70. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  71. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutPane.js +1 -1
  73. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  74. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  75. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  76. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  77. package/dist/components/content/Layout/index.js +1 -1
  78. package/dist/components/content/Layout/utils.js +1 -1
  79. package/dist/components/content/Paragraph.js +1 -1
  80. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  81. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  82. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  83. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  84. package/dist/components/content/Result/Result.js +1 -1
  85. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  86. package/dist/components/content/Tag/Tag.js +2 -2
  87. package/dist/components/content/Tag/Tag.js.map +1 -1
  88. package/dist/components/content/Text.js +1 -1
  89. package/dist/components/content/TextItem/TextItem.js +1 -1
  90. package/dist/components/content/Title.js +1 -1
  91. package/dist/components/content/Tree/Tree.js +1 -1
  92. package/dist/components/content/Tree/TreeNode.js +1 -1
  93. package/dist/components/content/Tree/styled.js +1 -1
  94. package/dist/components/content/Tree/tree-index.js +1 -1
  95. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  96. package/dist/components/content/Tree/use-load-data.js +1 -1
  97. package/dist/components/content/highlightText.js +1 -1
  98. package/dist/components/content/use-auto-tooltip.js +1 -1
  99. package/dist/components/data/DataTable/DataTable.d.ts +13 -0
  100. package/dist/components/data/DataTable/DataTable.js +246 -0
  101. package/dist/components/data/DataTable/DataTable.js.map +1 -0
  102. package/dist/components/data/DataTable/index.d.ts +3 -0
  103. package/dist/components/data/DataTable/types.d.ts +145 -0
  104. package/dist/components/data/ItemTable/ItemTable.d.ts +19 -0
  105. package/dist/components/data/ItemTable/ItemTable.js +350 -0
  106. package/dist/components/data/ItemTable/ItemTable.js.map +1 -0
  107. package/dist/components/data/ItemTable/ItemTableBulkBar.d.ts +23 -0
  108. package/dist/components/data/ItemTable/ItemTableBulkBar.js +131 -0
  109. package/dist/components/data/ItemTable/ItemTableBulkBar.js.map +1 -0
  110. package/dist/components/data/ItemTable/ItemTableDragPreview.js +46 -0
  111. package/dist/components/data/ItemTable/ItemTableDragPreview.js.map +1 -0
  112. package/dist/components/data/ItemTable/ItemTableFooter.js +79 -0
  113. package/dist/components/data/ItemTable/ItemTableFooter.js.map +1 -0
  114. package/dist/components/data/ItemTable/ItemTableToolbar.d.ts +34 -0
  115. package/dist/components/data/ItemTable/ItemTableToolbar.js +91 -0
  116. package/dist/components/data/ItemTable/ItemTableToolbar.js.map +1 -0
  117. package/dist/components/data/ItemTable/index.d.ts +4 -0
  118. package/dist/components/data/ItemTable/types.d.ts +327 -0
  119. package/dist/components/data/TableBase/ColumnResizer.js +70 -0
  120. package/dist/components/data/TableBase/ColumnResizer.js.map +1 -0
  121. package/dist/components/data/TableBase/RowCollection.js +99 -0
  122. package/dist/components/data/TableBase/RowCollection.js.map +1 -0
  123. package/dist/components/data/TableBase/TableRow.js +89 -0
  124. package/dist/components/data/TableBase/TableRow.js.map +1 -0
  125. package/dist/components/data/TableBase/TableView.d.ts +22 -0
  126. package/dist/components/data/TableBase/TableView.js +921 -0
  127. package/dist/components/data/TableBase/TableView.js.map +1 -0
  128. package/dist/components/data/TableBase/index.d.ts +5 -0
  129. package/dist/components/data/TableBase/row-menu.js +40 -0
  130. package/dist/components/data/TableBase/row-menu.js.map +1 -0
  131. package/dist/components/data/TableBase/styled.d.ts +5 -0
  132. package/dist/components/data/TableBase/styled.js +532 -0
  133. package/dist/components/data/TableBase/styled.js.map +1 -0
  134. package/dist/components/data/TableBase/types.d.ts +160 -0
  135. package/dist/components/data/TableBase/types.js +31 -0
  136. package/dist/components/data/TableBase/types.js.map +1 -0
  137. package/dist/components/data/TableBase/use-cell-selection.d.ts +3 -0
  138. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  139. package/dist/components/data/TableBase/use-cell-selection.js.map +1 -0
  140. package/dist/components/data/TableBase/use-container-width.js +35 -0
  141. package/dist/components/data/TableBase/use-container-width.js.map +1 -0
  142. package/dist/components/data/TableBase/use-row-move-animation.js +90 -0
  143. package/dist/components/data/TableBase/use-row-move-animation.js.map +1 -0
  144. package/dist/components/data/TableBase/use-scrollability.js +49 -0
  145. package/dist/components/data/TableBase/use-scrollability.js.map +1 -0
  146. package/dist/components/data/TableBase/use-table-columns.d.ts +2 -0
  147. package/dist/components/data/TableBase/use-table-columns.js +166 -0
  148. package/dist/components/data/TableBase/use-table-columns.js.map +1 -0
  149. package/dist/components/data/TableBase/use-table-search.js +64 -0
  150. package/dist/components/data/TableBase/use-table-search.js.map +1 -0
  151. package/dist/components/data/TableBase/use-table-selection.d.ts +4 -0
  152. package/dist/components/data/TableBase/use-table-selection.js +233 -0
  153. package/dist/components/data/TableBase/use-table-selection.js.map +1 -0
  154. package/dist/components/data/TableBase/use-table-sort.js +91 -0
  155. package/dist/components/data/TableBase/use-table-sort.js.map +1 -0
  156. package/dist/components/data/TableBase/use-table-sorts.js +97 -0
  157. package/dist/components/data/TableBase/use-table-sorts.js.map +1 -0
  158. package/dist/components/data/TableBase/use-table-storage.d.ts +8 -0
  159. package/dist/components/data/TableBase/use-table-storage.js +58 -0
  160. package/dist/components/data/TableBase/use-table-storage.js.map +1 -0
  161. package/dist/components/data/index.d.ts +10 -0
  162. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  163. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  164. package/dist/components/fields/Checkbox/context.js +1 -1
  165. package/dist/components/fields/ColorInput/ColorInput.d.ts +67 -0
  166. package/dist/components/fields/ColorInput/ColorInput.js +230 -0
  167. package/dist/components/fields/ColorInput/ColorInput.js.map +1 -0
  168. package/dist/components/fields/ColorInput/index.d.ts +2 -0
  169. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +34 -37
  170. package/dist/components/fields/ColorPicker/ColorPicker.js +131 -182
  171. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  172. package/dist/components/fields/ColorPicker/index.d.ts +1 -3
  173. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +50 -0
  174. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +269 -0
  175. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +1 -0
  176. package/dist/components/fields/ColorSwatchGroup/index.d.ts +2 -0
  177. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  178. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  179. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  180. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  181. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  182. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  183. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  184. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  185. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  186. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  187. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  188. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  189. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  190. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  191. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  192. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  193. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  194. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  195. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  196. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  197. package/dist/components/fields/DatePicker/period.js +1 -1
  198. package/dist/components/fields/DatePicker/props.js +1 -1
  199. package/dist/components/fields/DatePicker/utils.js +1 -1
  200. package/dist/components/fields/FileInput/FileInput.js +1 -1
  201. package/dist/components/fields/FilterListBox/FilterListBox.js +2 -1
  202. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  203. package/dist/components/fields/FilterPicker/FilterPicker.js +6 -1
  204. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  205. package/dist/components/fields/Input/Input.js +2 -2
  206. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  207. package/dist/components/fields/ListBox/ListBox.d.ts +7 -0
  208. package/dist/components/fields/ListBox/ListBox.js +4 -3
  209. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  210. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  211. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  212. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  213. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  214. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  215. package/dist/components/fields/PasswordInput/PasswordInput.d.ts +2 -2
  216. package/dist/components/fields/PasswordInput/PasswordInput.js +12 -2
  217. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  218. package/dist/components/fields/Picker/Picker.js +6 -1
  219. package/dist/components/fields/Picker/Picker.js.map +1 -1
  220. package/dist/components/fields/RadioGroup/Radio.d.ts +2 -2
  221. package/dist/components/fields/RadioGroup/Radio.js +4 -4
  222. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  223. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  224. package/dist/components/fields/RadioGroup/context.js +1 -1
  225. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  226. package/dist/components/fields/SearchInput/SearchInput.d.ts +2 -2
  227. package/dist/components/fields/SearchInput/SearchInput.js +17 -4
  228. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  229. package/dist/components/fields/Select/Select.js +1 -1
  230. package/dist/components/fields/Slider/Gradation.js +1 -1
  231. package/dist/components/fields/Slider/HueSlider.js +1 -1
  232. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  233. package/dist/components/fields/Slider/Slider.js +1 -1
  234. package/dist/components/fields/Slider/SliderBase.js +1 -1
  235. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  236. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  237. package/dist/components/fields/Slider/elements.js +1 -1
  238. package/dist/components/fields/Slider/index.js +1 -1
  239. package/dist/components/fields/Switch/Switch.js +1 -1
  240. package/dist/components/fields/TextArea/TextArea.d.ts +2 -2
  241. package/dist/components/fields/TextArea/TextArea.js +12 -5
  242. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  243. package/dist/components/fields/TextInput/TextInput.d.ts +2 -2
  244. package/dist/components/fields/TextInput/TextInput.js +15 -3
  245. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  246. package/dist/components/fields/TextInput/TextInputBase.d.ts +17 -1
  247. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  248. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  249. package/dist/components/fields/TextInput/index.d.ts +1 -1
  250. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  251. package/dist/components/fields/{ColorPicker/ColorPickerPanel.js → color/ColorPanel.js} +14 -11
  252. package/dist/components/fields/color/ColorPanel.js.map +1 -0
  253. package/dist/components/fields/color/ColorSwatch.d.ts +22 -0
  254. package/dist/components/fields/color/ColorSwatch.js +58 -0
  255. package/dist/components/fields/color/ColorSwatch.js.map +1 -0
  256. package/dist/components/fields/{ColorPicker → color}/channels.d.ts +1 -1
  257. package/dist/components/fields/{ColorPicker → color}/channels.js +2 -2
  258. package/dist/components/fields/color/channels.js.map +1 -0
  259. package/dist/components/fields/color/color.d.ts +21 -0
  260. package/dist/components/fields/{ColorPicker → color}/color.js +2 -2
  261. package/dist/components/fields/color/color.js.map +1 -0
  262. package/dist/components/fields/color/context.js +20 -0
  263. package/dist/components/fields/color/context.js.map +1 -0
  264. package/dist/components/fields/color/index.d.ts +4 -0
  265. package/dist/components/fields/index.d.ts +10 -4
  266. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  267. package/dist/components/form/Form/Field.js +1 -1
  268. package/dist/components/form/Form/Form.js +1 -1
  269. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  270. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  271. package/dist/components/form/Form/SubmitError.js +1 -1
  272. package/dist/components/form/Form/index.js +1 -1
  273. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  274. package/dist/components/form/Form/use-field/use-field.js +1 -1
  275. package/dist/components/form/Form/use-form.js +1 -1
  276. package/dist/components/form/Form/validation.js +1 -1
  277. package/dist/components/form/Label.js +1 -1
  278. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  279. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  280. package/dist/components/form/validation/use-validation-props.js +1 -1
  281. package/dist/components/form/wrapper.js +1 -1
  282. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  283. package/dist/components/helpers/IconSwitch/IconSwitch.d.ts +26 -0
  284. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  285. package/dist/components/layout/Board/Board.d.ts +8 -0
  286. package/dist/components/layout/Board/Board.js +6 -5
  287. package/dist/components/layout/Board/Board.js.map +1 -1
  288. package/dist/components/layout/Board/BoardProvider.js +1 -1
  289. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  290. package/dist/components/layout/Board/Widget.js +1 -1
  291. package/dist/components/layout/Board/WidgetHost.js +1 -1
  292. package/dist/components/layout/Board/board-context.js +1 -1
  293. package/dist/components/layout/Board/board-store.js +1 -1
  294. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  295. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  296. package/dist/components/layout/Board/grid-core/compactors.js +2 -2
  297. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  298. package/dist/components/layout/Board/grid-core/group-move.js +84 -4
  299. package/dist/components/layout/Board/grid-core/group-move.js.map +1 -1
  300. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  301. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  302. package/dist/components/layout/Board/index.js +1 -1
  303. package/dist/components/layout/Board/responsive-utils.js +1 -1
  304. package/dist/components/layout/Board/use-board-layout.js +1 -1
  305. package/dist/components/layout/Board/use-board-registry.js +1 -1
  306. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  307. package/dist/components/layout/Board/use-board-selection.js +1 -1
  308. package/dist/components/layout/Flex.js +1 -1
  309. package/dist/components/layout/Flow.js +1 -1
  310. package/dist/components/layout/Grid.js +1 -1
  311. package/dist/components/layout/Panel.js +1 -1
  312. package/dist/components/layout/Prefix.js +1 -1
  313. package/dist/components/layout/ResizablePanel.js +1 -1
  314. package/dist/components/layout/Space.js +1 -1
  315. package/dist/components/layout/Suffix.js +1 -1
  316. package/dist/components/navigation/Pagination/Pagination.d.ts +9 -0
  317. package/dist/components/navigation/Pagination/Pagination.js +258 -0
  318. package/dist/components/navigation/Pagination/Pagination.js.map +1 -0
  319. package/dist/components/navigation/Pagination/index.d.ts +4 -0
  320. package/dist/components/navigation/Pagination/types.d.ts +81 -0
  321. package/dist/components/navigation/Pagination/use-pagination.d.ts +52 -0
  322. package/dist/components/navigation/Pagination/use-pagination.js +83 -0
  323. package/dist/components/navigation/Pagination/use-pagination.js.map +1 -0
  324. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  325. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  326. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  327. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  328. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  329. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  330. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  331. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  332. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  333. package/dist/components/navigation/Tabs/styled.js +1 -1
  334. package/dist/components/navigation/Tabs/types.js +1 -1
  335. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  336. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  337. package/dist/components/navigation/index.d.ts +5 -1
  338. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  339. package/dist/components/other/Calendar/Calendar.js +1 -1
  340. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  341. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  342. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  343. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  344. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  345. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  346. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  347. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  348. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  349. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  350. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  351. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  352. package/dist/components/overlays/Dialog/context.js +1 -1
  353. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  354. package/dist/components/overlays/Modal/Modal.js +1 -1
  355. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  356. package/dist/components/overlays/Modal/Overlay.js +1 -1
  357. package/dist/components/overlays/Modal/Popover.js +1 -1
  358. package/dist/components/overlays/Modal/Tray.js +1 -1
  359. package/dist/components/overlays/Modal/Underlay.js +1 -1
  360. package/dist/components/overlays/Notifications/Notification.js +1 -1
  361. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  362. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  363. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  364. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  365. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  366. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  367. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  368. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  369. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  370. package/dist/components/overlays/Notifications/index.js +1 -1
  371. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  372. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  373. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  374. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  375. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  376. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  377. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  378. package/dist/components/overlays/Toast/index.js +1 -1
  379. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  380. package/dist/components/overlays/Toast/useToast.js +1 -1
  381. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  382. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  383. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  384. package/dist/components/overlays/Tooltip/context.js +1 -1
  385. package/dist/components/portal/Portal.js +1 -1
  386. package/dist/components/portal/PortalProvider.js +1 -1
  387. package/dist/components/portal/usePortal.js +1 -1
  388. package/dist/components/shared/DraggableCollection.js +24 -8
  389. package/dist/components/shared/DraggableCollection.js.map +1 -1
  390. package/dist/components/shared/InvalidIcon.js +1 -1
  391. package/dist/components/shared/ValidIcon.js +1 -1
  392. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  393. package/dist/components/status/Spin/Cube.js +1 -1
  394. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  395. package/dist/components/status/Spin/Spin.js +1 -1
  396. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  397. package/dist/data/item-themes.js +1 -1
  398. package/dist/data/themes.js +1 -1
  399. package/dist/eslint-plugin/defaults.generated.js +223 -5
  400. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  401. package/dist/eslint-plugin/index.js +1 -1
  402. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  403. package/dist/i18n/I18nProvider.js +1 -1
  404. package/dist/i18n/createFormatter.js +1 -1
  405. package/dist/i18n/index.js +1 -1
  406. package/dist/i18n/instance.js +1 -1
  407. package/dist/i18n/locales/de-DE/uikit.js +36 -1
  408. package/dist/i18n/locales/en-US/uikit.js +36 -1
  409. package/dist/i18n/locales/en-US/uikit.json.d.ts +41 -1
  410. package/dist/i18n/locales/es-ES/uikit.js +36 -1
  411. package/dist/i18n/locales/es-MX/uikit.js +36 -1
  412. package/dist/i18n/locales/fr-FR/uikit.js +36 -1
  413. package/dist/i18n/locales/it-IT/uikit.js +36 -1
  414. package/dist/i18n/locales/ja-JP/uikit.js +36 -1
  415. package/dist/i18n/locales/nb-NO/uikit.js +36 -1
  416. package/dist/i18n/locales/pt-BR/uikit.js +36 -1
  417. package/dist/i18n/locales/pt-PT/uikit.js +36 -1
  418. package/dist/i18n/locales/sv-SE/uikit.js +36 -1
  419. package/dist/i18n/locales/vi-VN/uikit.js +36 -1
  420. package/dist/i18n/locales.js +1 -1
  421. package/dist/i18n/useFormatter.js +1 -1
  422. package/dist/i18n/useI18n.js +1 -1
  423. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  424. package/dist/icons/AdjustmentsIcon.js +1 -1
  425. package/dist/icons/AiIcon.js +1 -1
  426. package/dist/icons/AreaChartIcon.js +1 -1
  427. package/dist/icons/BackwardIcon.js +1 -1
  428. package/dist/icons/BarChartIcon.js +1 -1
  429. package/dist/icons/BellFilledIcon.js +1 -1
  430. package/dist/icons/BellIcon.js +1 -1
  431. package/dist/icons/BooleanIcon.js +1 -1
  432. package/dist/icons/CalendarEditIcon.js +1 -1
  433. package/dist/icons/CalendarIcon.js +1 -1
  434. package/dist/icons/CaretDownIcon.js +1 -1
  435. package/dist/icons/CaretUpIcon.js +1 -1
  436. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  437. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  438. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  439. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  440. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  441. package/dist/icons/ChartBarLineIcon.js +1 -1
  442. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  443. package/dist/icons/ChartBarStackedIcon.js +1 -1
  444. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  445. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  446. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  447. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  448. package/dist/icons/ChartBubbleIcon.js +1 -1
  449. package/dist/icons/ChartDonut2Icon.js +1 -1
  450. package/dist/icons/ChartFunnelIcon.js +1 -1
  451. package/dist/icons/ChartHeatmapIcon.js +1 -1
  452. package/dist/icons/ChartKPIIcon.js +1 -1
  453. package/dist/icons/ChartPie2Icon.js +1 -1
  454. package/dist/icons/ChartScatterIcon.js +1 -1
  455. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  456. package/dist/icons/CheckCircleIcon.js +1 -1
  457. package/dist/icons/CheckIcon.js +1 -1
  458. package/dist/icons/CircleFilledIcon.js +1 -1
  459. package/dist/icons/ClearIcon.js +1 -1
  460. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  461. package/dist/icons/CloseCircleIcon.js +1 -1
  462. package/dist/icons/CloseIcon.js +1 -1
  463. package/dist/icons/CodeIcon.js +1 -1
  464. package/dist/icons/ColumnTotalIcon.js +1 -1
  465. package/dist/icons/CopyIcon.js +1 -1
  466. package/dist/icons/CountIcon.js +1 -1
  467. package/dist/icons/CubeIcon.js +1 -1
  468. package/dist/icons/CubePauseIcon.js +1 -1
  469. package/dist/icons/CubePlayIcon.js +1 -1
  470. package/dist/icons/CurrencyDollarIcon.js +1 -1
  471. package/dist/icons/DangerIcon.js +1 -1
  472. package/dist/icons/DashboardIcon.js +1 -1
  473. package/dist/icons/DatabaseIcon.js +1 -1
  474. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  475. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  476. package/dist/icons/DirectionIcon.js +1 -1
  477. package/dist/icons/DonutIcon.js +1 -1
  478. package/dist/icons/DownIcon.js +1 -1
  479. package/dist/icons/EditIcon.js +1 -1
  480. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  481. package/dist/icons/ExclamationCircleIcon.js +1 -1
  482. package/dist/icons/ExclamationIcon.js +1 -1
  483. package/dist/icons/EyeIcon.js +1 -1
  484. package/dist/icons/EyeInvisibleIcon.js +1 -1
  485. package/dist/icons/FilterIcon.js +1 -1
  486. package/dist/icons/FolderFilledIcon.js +1 -1
  487. package/dist/icons/FolderIcon.js +1 -1
  488. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  489. package/dist/icons/FolderOpenIcon.js +1 -1
  490. package/dist/icons/ForwardIcon.js +1 -1
  491. package/dist/icons/GripVerticalIcon.js +1 -1
  492. package/dist/icons/HierarchyIcon.js +1 -1
  493. package/dist/icons/HierarchyOpenIcon.js +1 -1
  494. package/dist/icons/Icon.js +1 -1
  495. package/dist/icons/InfoCircleIcon.js +1 -1
  496. package/dist/icons/InfoIcon.js +1 -1
  497. package/dist/icons/KeyIcon.js +1 -1
  498. package/dist/icons/LeftIcon.js +1 -1
  499. package/dist/icons/LineChartIcon.js +1 -1
  500. package/dist/icons/LoadingIcon.js +1 -1
  501. package/dist/icons/LockFilledIcon.js +1 -1
  502. package/dist/icons/LockIcon.js +1 -1
  503. package/dist/icons/MoreIcon.js +1 -1
  504. package/dist/icons/NotAllowedIcon.js +1 -1
  505. package/dist/icons/Number123Icon.js +1 -1
  506. package/dist/icons/NumberIcon.js +1 -1
  507. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  508. package/dist/icons/PauseCircleIcon.js +1 -1
  509. package/dist/icons/PauseIcon.js +1 -1
  510. package/dist/icons/PercentageIcon.js +1 -1
  511. package/dist/icons/PieChartIcon.js +1 -1
  512. package/dist/icons/PipetteIcon.js +1 -1
  513. package/dist/icons/PlayCircleIcon.js +1 -1
  514. package/dist/icons/PlayIcon.js +1 -1
  515. package/dist/icons/PlusIcon.js +1 -1
  516. package/dist/icons/ProgressBarIcon.js +1 -1
  517. package/dist/icons/ReloadIcon.js +1 -1
  518. package/dist/icons/ReportIcon.js +1 -1
  519. package/dist/icons/ReturnIcon.js +1 -1
  520. package/dist/icons/RightIcon.js +1 -1
  521. package/dist/icons/RowTotalsIcon.js +1 -1
  522. package/dist/icons/SchemeIcon.js +1 -1
  523. package/dist/icons/SearchIcon.js +1 -1
  524. package/dist/icons/SemanticQueryIcon.js +1 -1
  525. package/dist/icons/SettingsIcon.js +1 -1
  526. package/dist/icons/ShieldFilledIcon.js +1 -1
  527. package/dist/icons/ShieldIcon.js +1 -1
  528. package/dist/icons/SlashIcon.js +1 -1
  529. package/dist/icons/SparklesIcon.js +1 -1
  530. package/dist/icons/SqlIcon.js +1 -1
  531. package/dist/icons/StatsIcon.js +1 -1
  532. package/dist/icons/StopIcon.js +1 -1
  533. package/dist/icons/StringIcon.js +1 -1
  534. package/dist/icons/SubtotalsIcon.js +1 -1
  535. package/dist/icons/SwitchIcon.js +1 -1
  536. package/dist/icons/TableIcon.js +1 -1
  537. package/dist/icons/ThumbsDownIcon.js +1 -1
  538. package/dist/icons/ThumbsUpIcon.js +1 -1
  539. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  540. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  541. package/dist/icons/ThunderboltIcon.js +1 -1
  542. package/dist/icons/TimeIcon.js +1 -1
  543. package/dist/icons/TrashIcon.js +1 -1
  544. package/dist/icons/UnlockIcon.js +1 -1
  545. package/dist/icons/UpIcon.js +1 -1
  546. package/dist/icons/UserGroupIcon.js +1 -1
  547. package/dist/icons/UserIcon.js +1 -1
  548. package/dist/icons/UserLockIcon.js +1 -1
  549. package/dist/icons/ViewIcon.js +1 -1
  550. package/dist/icons/WarningFilledIcon.js +1 -1
  551. package/dist/icons/WarningIcon.js +1 -1
  552. package/dist/icons/wrap-icon.js +1 -1
  553. package/dist/index.d.ts +28 -14
  554. package/dist/index.js +15 -7
  555. package/dist/index.js.map +1 -1
  556. package/dist/provider.js +1 -1
  557. package/dist/providers/TrackingProvider.js +1 -1
  558. package/dist/providers/navigationAdapter.default.js +1 -1
  559. package/dist/tokens/base.js +1 -1
  560. package/dist/tokens/colors.js +1 -1
  561. package/dist/tokens/index.js +1 -1
  562. package/dist/tokens/layout.js +1 -1
  563. package/dist/tokens/lazy-styles.js +1 -1
  564. package/dist/tokens/palette-config.js +1 -1
  565. package/dist/tokens/palette.js +1 -1
  566. package/dist/tokens/shadows.js +1 -1
  567. package/dist/tokens/sizes.js +1 -1
  568. package/dist/tokens/spacing.js +1 -1
  569. package/dist/tokens/typography.d.ts +1 -1
  570. package/dist/tokens/typography.js +11 -2
  571. package/dist/tokens/typography.js.map +1 -1
  572. package/dist/utils/ResizeSensor.js +1 -1
  573. package/dist/utils/index.d.ts +1 -0
  574. package/dist/utils/is-dev-env.js +1 -1
  575. package/dist/utils/modules.js +1 -1
  576. package/dist/utils/promise.js +1 -1
  577. package/dist/utils/raf.js +1 -1
  578. package/dist/utils/random.js +1 -1
  579. package/dist/utils/range.js +1 -1
  580. package/dist/utils/react/RenderCache.js +1 -1
  581. package/dist/utils/react/Slots.js +1 -1
  582. package/dist/utils/react/chain.js +1 -1
  583. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  584. package/dist/utils/react/index.d.ts +1 -0
  585. package/dist/utils/react/index.js +2 -1
  586. package/dist/utils/react/interactions.js +1 -1
  587. package/dist/utils/react/isTextOnly.js +1 -1
  588. package/dist/utils/react/mapProps.js +1 -1
  589. package/dist/utils/react/mergeProps.js +1 -1
  590. package/dist/utils/react/nullableValue.js +1 -1
  591. package/dist/utils/react/resolveIcon.js +1 -1
  592. package/dist/utils/react/sharedStore.js +1 -1
  593. package/dist/utils/react/useBufferedValue.d.ts +56 -0
  594. package/dist/utils/react/useBufferedValue.js +86 -0
  595. package/dist/utils/react/useBufferedValue.js.map +1 -0
  596. package/dist/utils/react/useCombinedRefs.js +1 -1
  597. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  598. package/dist/utils/react/useEventBus.js +1 -1
  599. package/dist/utils/react/useId.js +1 -1
  600. package/dist/utils/react/useIsDarwin.js +1 -1
  601. package/dist/utils/react/useKeySymbols.js +1 -1
  602. package/dist/utils/react/useLayoutEffect.js +1 -1
  603. package/dist/utils/react/useLocalStorage.js +1 -1
  604. package/dist/utils/react/useMergeStyles.js +1 -1
  605. package/dist/utils/react/usePopoverSync.js +1 -1
  606. package/dist/utils/react/useQaProps.js +1 -1
  607. package/dist/utils/react/useViewportSize.js +1 -1
  608. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  609. package/dist/utils/selection.js +1 -1
  610. package/dist/utils/styles.js +1 -1
  611. package/dist/utils/tree.js +1 -1
  612. package/dist/utils/warnings.js +1 -1
  613. package/dist/version.js +2 -2
  614. package/docs/components/actions/ButtonGroup.md +1 -1
  615. package/docs/components/data/DataTable.md +298 -0
  616. package/docs/components/data/ItemTable.md +984 -0
  617. package/docs/components/fields/ColorInput.md +284 -0
  618. package/docs/components/fields/ColorPicker.md +85 -144
  619. package/docs/components/fields/ColorSwatchGroup.md +206 -0
  620. package/docs/components/fields/FilterPicker.md +1 -1
  621. package/docs/components/fields/ListBox.md +4 -0
  622. package/docs/components/fields/PasswordInput.md +1 -0
  623. package/docs/components/fields/Picker.md +1 -1
  624. package/docs/components/fields/SearchInput.md +1 -0
  625. package/docs/components/fields/TextArea.md +1 -0
  626. package/docs/components/fields/TextInput.md +1 -0
  627. package/docs/components/layout/Board.md +2 -1
  628. package/docs/components/navigation/Pagination.md +245 -0
  629. package/package.json +8 -3
  630. package/dist/components/fields/ColorPicker/ColorPickerPanel.js.map +0 -1
  631. package/dist/components/fields/ColorPicker/channels.js.map +0 -1
  632. package/dist/components/fields/ColorPicker/color.d.ts +0 -15
  633. package/dist/components/fields/ColorPicker/color.js.map +0 -1
  634. package/dist/components/organisms/FileTabs/FileTabs.d.ts +0 -54
  635. package/dist/components/organisms/FileTabs/FileTabs.js +0 -282
  636. package/dist/components/organisms/FileTabs/FileTabs.js.map +0 -1
  637. package/docs/components/organisms/FileTabs.md +0 -51
@@ -1,239 +1,188 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.156.0 | Cube Dev Team */
2
- import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
1
+ /** @license MIT | @cube-dev/ui-kit v0.157.1 | Cube Dev Team */
2
+ import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
- import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
5
- import { PipetteIcon } from "../../../icons/PipetteIcon.js";
4
+ import { _Text } from "../../content/Text.js";
5
+ import { _ItemButton } from "../../actions/ItemButton/ItemButton.js";
6
+ import { getValidationTheme } from "../../form/validation/resolve-validation-props.js";
7
+ import { getValidationIcon } from "../../form/validation/ValidationIndicator.js";
6
8
  import { useFieldProps } from "../../form/Form/use-field/use-field-props.js";
9
+ import { wrapWithField } from "../../form/wrapper.js";
7
10
  import { Dialog } from "../../overlays/Dialog/Dialog.js";
8
11
  import { DialogTrigger } from "../../overlays/Dialog/DialogTrigger.js";
9
- import { TextInputBase } from "../TextInput/TextInputBase.js";
10
- import { detectFormat, formatColor, parseColor, toHex } from "./color.js";
11
- import { ColorPickerPanel } from "./ColorPickerPanel.js";
12
- import { tasty } from "@tenphi/tasty";
12
+ import { formatColor, parseColor } from "../color/color.js";
13
+ import { ColorSwatch } from "../color/ColorSwatch.js";
14
+ import { ColorPanel } from "../color/ColorPanel.js";
15
+ import { ColorPopoverContext } from "../color/context.js";
16
+ import { ColorInput } from "../ColorInput/ColorInput.js";
17
+ import { ColorSwatchGroup } from "../ColorSwatchGroup/ColorSwatchGroup.js";
18
+ import { BLOCK_STYLES, OUTER_STYLES, tasty } from "@tenphi/tasty";
13
19
  import { forwardRef, useEffect, useRef, useState } from "react";
14
20
  import { jsx, jsxs } from "react/jsx-runtime";
15
- import { useTextField } from "react-aria";
16
21
 
17
22
  //#region src/components/fields/ColorPicker/ColorPicker.tsx
23
+ /**
24
+ * A popover caps its height at half the viewport. The panel can exceed that on
25
+ * a short screen, and would otherwise spill outside the popover's own border.
26
+ */
27
+ const POPOVER_STYLES = { overflow: "auto" };
28
+ /**
29
+ * The rule separating the palette from the editor. `Divider` is not used: it
30
+ * places itself on named grid lines meant for menu layouts, which this panel
31
+ * does not define, so it lands in the wrong row and spawns a stray column.
32
+ */
33
+ const PALETTE_STYLES = {
34
+ border: "top",
35
+ padding: "1x top",
36
+ width: "100%"
37
+ };
18
38
  /** What the popover starts from when there is no color to edit yet. */
19
39
  const FALLBACK_COLOR = {
20
40
  h: 264,
21
41
  s: .8,
22
42
  l: .6
23
43
  };
24
- const SwatchElement = tasty({
25
- qa: "ColorSwatch",
44
+ const ColorPickerWrapper = tasty({
45
+ qa: "ColorPickerWrapper",
26
46
  styles: {
27
- display: "block",
28
- width: "2.5x",
29
- height: "2.5x",
30
- radius: "1r",
31
- fill: {
32
- "": "(#color-picker, #clear)",
33
- empty: "#clear"
34
- },
35
- shadow: "inset 0 0 0 1bw #dark.15",
36
- image: {
37
- "": false,
38
- empty: "linear-gradient(to bottom right, #clear 46%, #danger 46%, #danger 54%, #clear 54%)"
39
- }
47
+ display: "inline-grid",
48
+ flow: "column",
49
+ gridRows: "1sf",
50
+ placeContent: "stretch",
51
+ placeItems: "stretch"
40
52
  }
41
53
  });
42
- const ColorPickerButton = tasty(ItemAction, {
43
- qa: "ColorPickerButton",
44
- icon: /* @__PURE__ */ jsx(PipetteIcon, {})
45
- });
46
54
  /**
47
- * A color field: the color as text, a swatch of the current value, and a
48
- * popover to dial it in across OKHST, OKLCH and RGB.
55
+ * A color swatch that opens the color popover the same one `ColorInput`
56
+ * uses, without the text field. Reach for it when a color is chosen but never
57
+ * typed: a toolbar, a chart legend, a cell in a dense table.
49
58
  */
50
59
  const ColorPicker = forwardRef(function ColorPicker(allProps, ref) {
51
60
  const props = useFieldProps(allProps, {
52
- defaultValidationTrigger: "onBlur",
61
+ defaultValidationTrigger: "onChange",
53
62
  valuePropsMapper: ({ value, onChange }) => ({
54
63
  value,
55
64
  onChange
56
65
  })
57
66
  });
58
- const { qa, value, defaultValue, onChange, format = "hex", formatMode = "forced", defaultSpace = "hst", isOpen: controlledOpen, defaultOpen, onOpenChange, shouldFlip, placeholder = "Pick a color", size, isDisabled, isReadOnly, isInvalid, isValid, isLoading, autoFocus, inputStyles, triggerStyles, swatchStyles, labelProps: userLabelProps, onBlur: userOnBlur, onFocus, label, description, "aria-label": ariaLabel, "aria-labelledby": ariaLabelledby, "aria-describedby": ariaDescribedby, id } = props;
59
- const initialText = (value ?? defaultValue ?? "").toString();
60
- const [text, setText] = useState(() => {
61
- const parsed = parseColor(initialText);
62
- return parsed && formatMode === "forced" ? formatColor(parsed, format) : initialText;
63
- });
64
- const [color, setColor] = useState(() => parseColor(initialText));
67
+ const { qa, id, value, defaultValue, onChange, format = "hex", defaultSpace = "hst", isOpen: controlledOpen, defaultOpen, onOpenChange, shouldFlip, children, placeholder = "Pick a color", size, type = "outline", theme = "default", triggerTooltip, swatches, swatchColumns, triggerStyles, swatchStyles, isDisabled, isReadOnly, isLoading, isInvalid, isValid, autoFocus, "aria-label": ariaLabel } = props;
68
+ const styles = extractStyles(props, [...OUTER_STYLES, ...BLOCK_STYLES]);
69
+ /**
70
+ * Loading locks the trigger, but the popover can outlive that — it may be
71
+ * controlled, or opened before the load began so the editor inside has to
72
+ * refuse edits on the same terms.
73
+ */
74
+ const isEditingDisabled = isDisabled || isLoading;
75
+ const [color, setColor] = useState(() => parseColor((value ?? defaultValue ?? "").toString()));
65
76
  const [space, setSpace] = useState(defaultSpace);
66
77
  const [isOpen, setOpen] = useState(defaultOpen ?? false);
67
- const targetRef = useRef(null);
68
- const inputRef = useRef(null);
69
- /** The last text that parsed, so an invalid entry has something to fall back to. */
70
- const validText = useRef(parseColor(initialText) ? text : "");
71
- /** What was last handed to `onChange`, to tell our own updates from outside ones. */
78
+ /** What was last published, to tell our own updates from outside ones. */
72
79
  const emitted = useRef(value);
73
- const emit = useEvent((next) => {
74
- emitted.current = next;
75
- onChange?.(next);
76
- });
77
- /** The notation a value should be written in, given the current text. */
78
- const outputFormat = (source) => formatMode === "forced" ? format : detectFormat(source) ?? format;
79
80
  useEffect(() => {
80
81
  if (value === void 0 || value === emitted.current) return;
81
82
  emitted.current = value;
82
- const raw = (value ?? "").toString();
83
- const parsed = parseColor(raw);
84
- const nextText = parsed && formatMode === "forced" ? formatColor(parsed, format) : raw;
85
- setColor(parsed);
86
- setText(nextText);
87
- validText.current = parsed ? nextText : "";
88
- }, [
89
- value,
90
- format,
91
- formatMode
92
- ]);
93
- const handleTextChange = useEvent((nextText) => {
94
- setText(nextText);
95
- if (!nextText.trim()) {
96
- setColor(null);
97
- validText.current = "";
98
- emit(null);
99
- return;
100
- }
101
- const parsed = parseColor(nextText);
102
- if (!parsed) return;
103
- setColor(parsed);
104
- validText.current = nextText;
105
- emit(formatMode === "free" ? nextText.trim() : formatColor(parsed, outputFormat(nextText)));
106
- });
107
- /** Resolve whatever is in the input into a real color, or undo it. */
108
- const settle = useEvent(() => {
109
- if (!text.trim()) return;
110
- const parsed = parseColor(text);
111
- if (!parsed) {
112
- setText(validText.current);
113
- return;
114
- }
115
- if (formatMode === "forced") setText(formatColor(parsed, format));
116
- });
117
- /**
118
- * Focusing offers the whole value up for replacement, the way a hex field
119
- * does. The string is the unit of editing here: a single channel is tuned
120
- * with the sliders, not by hand-editing one number inside `oklch(…)`.
121
- *
122
- * Read off the event rather than `inputRef`, which `TextInputBase` re-points
123
- * through `useCombinedRefs`.
124
- */
125
- const handleFocus = useEvent((event) => {
126
- event.currentTarget.select();
127
- onFocus?.(event);
83
+ setColor(parseColor((value ?? "").toString()));
84
+ }, [value]);
85
+ const handleColorChange = useEvent((next) => {
86
+ const text = formatColor(next, format);
87
+ emitted.current = text;
88
+ setColor(next);
89
+ onChange?.(text);
128
90
  });
91
+ const colorText = color ? formatColor(color, format) : null;
129
92
  /**
130
- * A click would otherwise drop a caret and undo that selection the browser
131
- * applies it after the focus handler has run. Suppressing the default action
132
- * of the focusing press means no caret is ever placed; focus is then moved
133
- * here instead, which selects.
134
- *
135
- * Only the press that *takes* focus is suppressed, so clicking a field that
136
- * already has focus still positions the caret, and dragging still selects a
137
- * range.
93
+ * The palette and the value field both speak in strings, and the field can
94
+ * hand back `null` when it is cleared which has to reach the picker, or the
95
+ * text empties while the preview and trigger keep the old color.
138
96
  */
139
- const handleMouseDown = useEvent((event) => {
140
- if (document.activeElement === event.currentTarget) return;
141
- event.preventDefault();
142
- event.currentTarget.focus();
143
- });
144
- const handleBlur = useEvent((event) => {
145
- settle();
146
- userOnBlur?.(event);
147
- });
148
- const handleKeyDown = useEvent((event) => {
149
- if (event.key === "Enter") settle();
150
- });
151
- const handleColorChange = useEvent((nextColor) => {
152
- const nextText = formatColor(nextColor, outputFormat(text));
153
- setColor(nextColor);
154
- setText(nextText);
155
- validText.current = nextText;
156
- emit(nextText);
97
+ const handleValueChange = useEvent((next) => {
98
+ emitted.current = next;
99
+ setColor(next ? parseColor(next) : null);
100
+ onChange?.(next);
157
101
  });
158
102
  const handleOpenChange = useEvent((next) => {
159
103
  setOpen(next);
160
104
  onOpenChange?.(next);
161
105
  });
162
- const { labelProps, inputProps } = useTextField({
163
- id,
164
- label,
165
- description,
166
- "aria-label": ariaLabel,
167
- "aria-labelledby": ariaLabelledby,
168
- "aria-describedby": ariaDescribedby,
169
- isDisabled,
170
- isReadOnly,
171
- isInvalid,
172
- autoFocus,
173
- placeholder,
174
- value: text,
175
- type: "text",
176
- onChange: handleTextChange,
177
- onFocus: handleFocus,
178
- onBlur: handleBlur,
179
- onKeyDown: handleKeyDown
180
- }, inputRef);
181
- return /* @__PURE__ */ jsx(TextInputBase, {
182
- ...props,
183
- ref,
184
- qa: qa || "ColorPicker",
185
- size,
186
- autocomplete: "off",
187
- icon: /* @__PURE__ */ jsx(SwatchElement, {
188
- mods: { empty: !color },
189
- styles: swatchStyles,
190
- style: color ? { "--color-picker-color": toHex(color) } : void 0
191
- }),
192
- inputRef,
193
- inputProps: {
194
- ...inputProps,
195
- spellCheck: false,
196
- onMouseDown: handleMouseDown
197
- },
198
- inputStyles,
199
- labelProps: mergeProps$1(labelProps, userLabelProps),
200
- wrapperRef: targetRef,
201
- isDisabled,
202
- isReadOnly,
203
- isInvalid,
204
- isValid,
205
- isLoading,
206
- suffixPosition: "after",
207
- suffix: /* @__PURE__ */ jsxs(DialogTrigger, {
106
+ const label = children !== void 0 ? children : color ? formatColor(color, format) : /* @__PURE__ */ jsx(_Text.Placeholder, { children: placeholder });
107
+ return wrapWithField(/* @__PURE__ */ jsx(ColorPickerWrapper, {
108
+ styles,
109
+ children: /* @__PURE__ */ jsxs(DialogTrigger, {
208
110
  hideArrow: true,
209
111
  type: "popover",
210
112
  mobileType: "tray",
211
- placement: "bottom right",
212
- targetRef,
113
+ placement: "bottom start",
213
114
  isOpen: controlledOpen ?? isOpen,
214
115
  shouldFlip,
215
116
  onOpenChange: handleOpenChange,
216
- children: [/* @__PURE__ */ jsx(ColorPickerButton, {
117
+ children: [/* @__PURE__ */ jsx(_ItemButton, {
118
+ "data-popover-trigger": true,
119
+ id,
120
+ qa: qa || "ColorPickerTrigger",
121
+ "data-input-type": "colorpicker",
122
+ type,
123
+ theme: getValidationTheme(theme, {
124
+ isInvalid,
125
+ isValid
126
+ }),
217
127
  size,
218
- "aria-label": "Open the color picker",
219
- isDisabled: isDisabled || isReadOnly,
220
- styles: triggerStyles
128
+ icon: /* @__PURE__ */ jsx(ColorSwatch, {
129
+ color,
130
+ styles: swatchStyles
131
+ }),
132
+ rightIcon: getValidationIcon({
133
+ isInvalid,
134
+ isValid
135
+ }),
136
+ tooltip: triggerTooltip,
137
+ isDisabled: isEditingDisabled || isReadOnly,
138
+ autoFocus,
139
+ "aria-label": ariaLabel,
140
+ mods: { placeholder: !color },
141
+ styles: triggerStyles,
142
+ children: label
221
143
  }), /* @__PURE__ */ jsx(Dialog, {
222
144
  "aria-label": "Color picker",
223
145
  width: "max-content",
224
- children: /* @__PURE__ */ jsx(ColorPickerPanel, {
225
- color: color ?? FALLBACK_COLOR,
226
- space,
227
- isDisabled: isDisabled || isReadOnly,
228
- previewFormat: outputFormat(text),
229
- onChange: handleColorChange,
230
- onSpaceChange: setSpace
146
+ styles: POPOVER_STYLES,
147
+ children: /* @__PURE__ */ jsx(ColorPopoverContext.Provider, {
148
+ value: true,
149
+ children: /* @__PURE__ */ jsx(ColorPanel, {
150
+ color: color ?? FALLBACK_COLOR,
151
+ space,
152
+ isDisabled: isEditingDisabled || isReadOnly,
153
+ previewFormat: format,
154
+ input: /* @__PURE__ */ jsx(ColorInput, {
155
+ "aria-label": "Color value",
156
+ format,
157
+ value: colorText,
158
+ isDisabled: isEditingDisabled,
159
+ isReadOnly,
160
+ onChange: handleValueChange
161
+ }),
162
+ swatches: swatches?.length ? /* @__PURE__ */ jsx(ColorSwatchGroup, {
163
+ "aria-label": "Palette",
164
+ styles: PALETTE_STYLES,
165
+ colors: swatches,
166
+ columns: swatchColumns,
167
+ format,
168
+ value: colorText,
169
+ isDisabled: isEditingDisabled || isReadOnly,
170
+ onChange: handleValueChange
171
+ }) : null,
172
+ onChange: handleColorChange,
173
+ onSpaceChange: setSpace
174
+ })
231
175
  })
232
176
  })]
233
177
  })
234
- });
178
+ }), ref, props);
235
179
  });
236
- ColorPicker.cubeInputType = "Text";
180
+ /**
181
+ * Drives the legacy `<Field>` wiring: `Picker` validates on change and passes
182
+ * the value through untouched, where `Text` would default to `onBlur` and
183
+ * coerce `null` into an empty string.
184
+ */
185
+ ColorPicker.cubeInputType = "Picker";
237
186
 
238
187
  //#endregion
239
188
  export { ColorPicker };
@@ -1 +1 @@
1
- {"version":3,"file":"ColorPicker.js","names":["mergeProps"],"sources":["../../../../src/components/fields/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import {\n BaseProps,\n BaseStyleProps,\n BlockStyleProps,\n ColorStyleProps,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n FocusEvent,\n ForwardedRef,\n forwardRef,\n KeyboardEvent,\n MouseEvent,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { useTextField } from 'react-aria';\n\nimport { useEvent } from '../../../_internal';\nimport { PipetteIcon } from '../../../icons';\nimport { FieldBaseProps } from '../../../shared';\nimport { mergeProps } from '../../../utils/react';\nimport { ItemAction } from '../../actions';\nimport { useFieldProps } from '../../form';\nimport { Dialog, DialogTrigger } from '../../overlays/Dialog';\nimport { TextInputBase } from '../TextInput/TextInputBase';\n\nimport { ColorSpace } from './channels';\nimport {\n ColorFormat,\n ColorValue,\n detectFormat,\n formatColor,\n parseColor,\n toHex,\n} from './color';\nimport { ColorPickerPanel } from './ColorPickerPanel';\n\n/**\n * How the text in the input relates to the committed value.\n *\n * - `forced` — the text is rewritten in `format` whenever it is not mid-edit,\n * and the value is always written in `format`.\n * - `derive` — the user's own notation is left alone, and the value is\n * normalized in whichever notation the text is written in.\n * - `free` — the text *is* the value, verbatim. It is still verified, so an\n * unparsable entry falls back to the last valid one.\n */\nexport type ColorPickerFormatMode = 'forced' | 'derive' | 'free';\n\n/** What the popover starts from when there is no color to edit yet. */\nconst FALLBACK_COLOR: ColorValue = { h: 264, s: 0.8, l: 0.6 };\n\nconst SwatchElement = tasty({\n qa: 'ColorSwatch',\n styles: {\n display: 'block',\n width: '2.5x',\n height: '2.5x',\n radius: '1r',\n fill: {\n '': '(#color-picker, #clear)',\n empty: '#clear',\n },\n shadow: 'inset 0 0 0 1bw #dark.15',\n // A single diagonal stroke is the conventional \"no color\" swatch.\n image: {\n '': false,\n empty:\n 'linear-gradient(to bottom right, #clear 46%, #danger 46%, #danger 54%, #clear 54%)',\n },\n },\n});\n\nconst ColorPickerButton = tasty(ItemAction, {\n qa: 'ColorPickerButton',\n icon: <PipetteIcon />,\n});\n\nexport interface CubeColorPickerProps\n extends BaseProps,\n BaseStyleProps,\n OuterStyleProps,\n BlockStyleProps,\n ColorStyleProps,\n FieldBaseProps {\n /** The selected color, as a color string. */\n value?: string | null;\n /** The initial color of an uncontrolled picker. */\n defaultValue?: string | null;\n /** Called with the normalized color string, or `null` when the field is cleared. */\n onChange?: (value: string | null) => void;\n /** Notation the value is written in, and the one `forced` mode displays. */\n format?: ColorFormat;\n /** How strictly the input text is tied to `format`. */\n formatMode?: ColorPickerFormatMode;\n /** Color concept the popover opens with. */\n defaultSpace?: ColorSpace;\n /** Whether the popover is open. Makes the disclosure controlled. */\n isOpen?: boolean;\n /** Whether the popover is open initially. */\n defaultOpen?: boolean;\n /** Called when the popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether the popover may flip to the other side of the input. */\n shouldFlip?: boolean;\n /** Text shown while the field is empty. */\n placeholder?: string;\n /** The size of the input. */\n size?: 'small' | 'medium' | 'large' | (string & {});\n onFocus?: (event: FocusEvent<HTMLInputElement>) => void;\n onBlur?: (event: FocusEvent<HTMLInputElement>) => void;\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n 'aria-describedby'?: string;\n styles?: Styles;\n /** Styles of the text input element. */\n inputStyles?: Styles;\n /** Styles of the popover trigger button. */\n triggerStyles?: Styles;\n /** Styles of the color swatch shown inside the input. */\n swatchStyles?: Styles;\n}\n\n/**\n * A color field: the color as text, a swatch of the current value, and a\n * popover to dial it in across OKHST, OKLCH and RGB.\n */\nexport const ColorPicker = forwardRef(function ColorPicker(\n allProps: CubeColorPickerProps,\n ref: ForwardedRef<HTMLElement>,\n) {\n const props = useFieldProps(allProps, {\n defaultValidationTrigger: 'onBlur',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value as string | null | undefined,\n onChange,\n }),\n });\n\n const {\n qa,\n value,\n defaultValue,\n onChange,\n format = 'hex',\n formatMode = 'forced',\n defaultSpace = 'hst',\n isOpen: controlledOpen,\n defaultOpen,\n onOpenChange,\n shouldFlip,\n placeholder = 'Pick a color',\n size,\n isDisabled,\n isReadOnly,\n isInvalid,\n isValid,\n isLoading,\n autoFocus,\n inputStyles,\n triggerStyles,\n swatchStyles,\n labelProps: userLabelProps,\n onBlur: userOnBlur,\n onFocus,\n label,\n description,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n id,\n } = props;\n\n const initialText = (value ?? defaultValue ?? '').toString();\n const [text, setText] = useState(() => {\n const parsed = parseColor(initialText);\n\n return parsed && formatMode === 'forced'\n ? formatColor(parsed, format)\n : initialText;\n });\n const [color, setColor] = useState(() => parseColor(initialText));\n const [space, setSpace] = useState<ColorSpace>(defaultSpace);\n const [isOpen, setOpen] = useState(defaultOpen ?? false);\n\n const targetRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n /** The last text that parsed, so an invalid entry has something to fall back to. */\n const validText = useRef(parseColor(initialText) ? text : '');\n /** What was last handed to `onChange`, to tell our own updates from outside ones. */\n const emitted = useRef<string | null | undefined>(value);\n\n const emit = useEvent((next: string | null) => {\n emitted.current = next;\n onChange?.(next);\n });\n\n /** The notation a value should be written in, given the current text. */\n const outputFormat = (source: string): ColorFormat =>\n formatMode === 'forced' ? format : detectFormat(source) ?? format;\n\n // Adopt values that did not come from here — a form reset, or a parent that\n // overrides what the user picked.\n useEffect(() => {\n if (value === undefined || value === emitted.current) return;\n\n emitted.current = value;\n\n const raw = (value ?? '').toString();\n const parsed = parseColor(raw);\n const nextText =\n parsed && formatMode === 'forced' ? formatColor(parsed, format) : raw;\n\n setColor(parsed);\n setText(nextText);\n validText.current = parsed ? nextText : '';\n }, [value, format, formatMode]);\n\n const handleTextChange = useEvent((nextText: string) => {\n setText(nextText);\n\n if (!nextText.trim()) {\n setColor(null);\n validText.current = '';\n emit(null);\n\n return;\n }\n\n const parsed = parseColor(nextText);\n\n // Half-typed input keeps the last valid color, so the value stays a real\n // color at every keystroke.\n if (!parsed) return;\n\n setColor(parsed);\n validText.current = nextText;\n emit(\n formatMode === 'free'\n ? nextText.trim()\n : formatColor(parsed, outputFormat(nextText)),\n );\n });\n\n /** Resolve whatever is in the input into a real color, or undo it. */\n const settle = useEvent(() => {\n if (!text.trim()) return;\n\n const parsed = parseColor(text);\n\n if (!parsed) {\n setText(validText.current);\n\n return;\n }\n\n if (formatMode === 'forced') setText(formatColor(parsed, format));\n });\n\n /**\n * Focusing offers the whole value up for replacement, the way a hex field\n * does. The string is the unit of editing here: a single channel is tuned\n * with the sliders, not by hand-editing one number inside `oklch(…)`.\n *\n * Read off the event rather than `inputRef`, which `TextInputBase` re-points\n * through `useCombinedRefs`.\n */\n const handleFocus = useEvent((event: FocusEvent<HTMLInputElement>) => {\n event.currentTarget.select();\n onFocus?.(event);\n });\n\n /**\n * A click would otherwise drop a caret and undo that selection — the browser\n * applies it after the focus handler has run. Suppressing the default action\n * of the focusing press means no caret is ever placed; focus is then moved\n * here instead, which selects.\n *\n * Only the press that *takes* focus is suppressed, so clicking a field that\n * already has focus still positions the caret, and dragging still selects a\n * range.\n */\n const handleMouseDown = useEvent((event: MouseEvent<HTMLInputElement>) => {\n if (document.activeElement === event.currentTarget) return;\n\n event.preventDefault();\n event.currentTarget.focus();\n });\n\n const handleBlur = useEvent((event: FocusEvent<HTMLInputElement>) => {\n settle();\n userOnBlur?.(event);\n });\n\n const handleKeyDown = useEvent((event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') settle();\n });\n\n const handleColorChange = useEvent((nextColor: ColorValue) => {\n const nextText = formatColor(nextColor, outputFormat(text));\n\n setColor(nextColor);\n setText(nextText);\n validText.current = nextText;\n emit(nextText);\n });\n\n const handleOpenChange = useEvent((next: boolean) => {\n setOpen(next);\n onOpenChange?.(next);\n });\n\n const { labelProps, inputProps } = useTextField(\n {\n id,\n label,\n description,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n isDisabled,\n isReadOnly,\n isInvalid,\n autoFocus,\n placeholder,\n value: text,\n type: 'text',\n onChange: handleTextChange,\n onFocus: handleFocus,\n onBlur: handleBlur,\n onKeyDown: handleKeyDown,\n },\n inputRef,\n );\n\n return (\n <TextInputBase\n {...props}\n ref={ref}\n qa={qa || 'ColorPicker'}\n size={size}\n autocomplete=\"off\"\n icon={\n <SwatchElement\n mods={{ empty: !color }}\n styles={swatchStyles}\n style={color ? { '--color-picker-color': toHex(color) } : undefined}\n />\n }\n inputRef={inputRef}\n inputProps={{\n ...inputProps,\n spellCheck: false,\n onMouseDown: handleMouseDown,\n }}\n inputStyles={inputStyles}\n labelProps={mergeProps(labelProps, userLabelProps)}\n wrapperRef={targetRef}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n isInvalid={isInvalid}\n isValid={isValid}\n isLoading={isLoading}\n // The validation state reads left of the trigger, the way `DateInputBase`\n // orders it for the date pickers.\n suffixPosition=\"after\"\n suffix={\n <DialogTrigger\n hideArrow\n type=\"popover\"\n mobileType=\"tray\"\n placement=\"bottom right\"\n targetRef={targetRef}\n isOpen={controlledOpen ?? isOpen}\n shouldFlip={shouldFlip}\n onOpenChange={handleOpenChange}\n >\n <ColorPickerButton\n size={size}\n aria-label=\"Open the color picker\"\n isDisabled={isDisabled || isReadOnly}\n styles={triggerStyles}\n />\n <Dialog aria-label=\"Color picker\" width=\"max-content\">\n <ColorPickerPanel\n color={color ?? FALLBACK_COLOR}\n space={space}\n isDisabled={isDisabled || isReadOnly}\n previewFormat={outputFormat(text)}\n onChange={handleColorChange}\n onSpaceChange={setSpace}\n />\n </Dialog>\n </DialogTrigger>\n }\n />\n );\n});\n\n(ColorPicker as any).cubeInputType = 'Text';\n"],"mappings":"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"}
1
+ {"version":3,"file":"ColorPicker.js","names":["Text","ItemButton"],"sources":["../../../../src/components/fields/ColorPicker/ColorPicker.tsx"],"sourcesContent":["import {\n BaseProps,\n BLOCK_STYLES,\n BlockStyleProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ForwardedRef,\n forwardRef,\n ReactNode,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { FieldBaseProps } from '../../../shared';\nimport { extractStyles } from '../../../utils/styles';\nimport { ItemButton } from '../../actions';\nimport { CubeItemProps } from '../../content/Item';\nimport { Text } from '../../content/Text';\nimport {\n getValidationIcon,\n getValidationTheme,\n useFieldProps,\n wrapWithField,\n} from '../../form';\nimport { Dialog, DialogTrigger } from '../../overlays/Dialog';\nimport { ColorSpace } from '../color/channels';\nimport {\n ColorFormat,\n ColorValue,\n formatColor,\n parseColor,\n} from '../color/color';\nimport { ColorPanel } from '../color/ColorPanel';\nimport { ColorSwatch } from '../color/ColorSwatch';\nimport { ColorPopoverContext } from '../color/context';\nimport { ColorInput } from '../ColorInput';\nimport { ColorSwatchGroup, CubeColorSwatchItem } from '../ColorSwatchGroup';\n\n/**\n * A popover caps its height at half the viewport. The panel can exceed that on\n * a short screen, and would otherwise spill outside the popover's own border.\n */\nconst POPOVER_STYLES: Styles = { overflow: 'auto' };\n\n/**\n * The rule separating the palette from the editor. `Divider` is not used: it\n * places itself on named grid lines meant for menu layouts, which this panel\n * does not define, so it lands in the wrong row and spawns a stray column.\n */\nconst PALETTE_STYLES: Styles = {\n border: 'top',\n padding: '1x top',\n width: '100%',\n};\n\n/** What the popover starts from when there is no color to edit yet. */\nconst FALLBACK_COLOR: ColorValue = { h: 264, s: 0.8, l: 0.6 };\n\nconst ColorPickerWrapper = tasty({\n qa: 'ColorPickerWrapper',\n styles: {\n display: 'inline-grid',\n flow: 'column',\n gridRows: '1sf',\n placeContent: 'stretch',\n placeItems: 'stretch',\n },\n});\n\nexport interface CubeColorPickerProps\n extends BaseProps,\n OuterStyleProps,\n BlockStyleProps,\n FieldBaseProps {\n /** The selected color, as a color string. */\n value?: string | null;\n /** The initial color of an uncontrolled picker. */\n defaultValue?: string | null;\n /** Called with the color string, or `null` when there is no color. */\n onChange?: (value: string | null) => void;\n /** Notation the value is written in. */\n format?: ColorFormat;\n /** Color concept the popover opens with. */\n defaultSpace?: ColorSpace;\n /** Whether the popover is open. Makes the disclosure controlled. */\n isOpen?: boolean;\n /** Whether the popover is open initially. */\n defaultOpen?: boolean;\n /** Called when the popover opens or closes. */\n onOpenChange?: (isOpen: boolean) => void;\n /** Whether the popover may flip to the other side of the trigger. */\n shouldFlip?: boolean;\n /** Replaces the color shown on the trigger. Pass `null` for a swatch on its own. */\n children?: ReactNode;\n /** Shown on the trigger while there is no color. */\n placeholder?: ReactNode;\n /** The size of the trigger. */\n size?: CubeItemProps['size'];\n /** The visual type of the trigger. */\n type?: CubeItemProps['type'];\n theme?: CubeItemProps['theme'];\n /** Tooltip for the trigger, separate from the field tooltip. */\n triggerTooltip?: CubeItemProps['tooltip'];\n /** Colors to offer under the editor, for picking without dialing one in. */\n swatches?: CubeColorSwatchItem[];\n /** How many swatches per row. Defaults to a single row. */\n swatchColumns?: number;\n styles?: Styles;\n /** Styles of the trigger button. */\n triggerStyles?: Styles;\n /** Styles of the color swatch. */\n swatchStyles?: Styles;\n 'aria-label'?: string;\n}\n\n/**\n * A color swatch that opens the color popover — the same one `ColorInput`\n * uses, without the text field. Reach for it when a color is chosen but never\n * typed: a toolbar, a chart legend, a cell in a dense table.\n */\nexport const ColorPicker = forwardRef(function ColorPicker(\n allProps: CubeColorPickerProps,\n ref: ForwardedRef<HTMLElement>,\n) {\n const props = useFieldProps(allProps, {\n defaultValidationTrigger: 'onChange',\n valuePropsMapper: ({ value, onChange }) => ({\n value: value as string | null | undefined,\n onChange,\n }),\n });\n\n const {\n qa,\n id,\n value,\n defaultValue,\n onChange,\n format = 'hex',\n defaultSpace = 'hst',\n isOpen: controlledOpen,\n defaultOpen,\n onOpenChange,\n shouldFlip,\n children,\n placeholder = 'Pick a color',\n size,\n type = 'outline',\n theme = 'default',\n triggerTooltip,\n swatches,\n swatchColumns,\n triggerStyles,\n swatchStyles,\n isDisabled,\n isReadOnly,\n isLoading,\n isInvalid,\n isValid,\n autoFocus,\n 'aria-label': ariaLabel,\n } = props;\n\n const styles = extractStyles(props, [...OUTER_STYLES, ...BLOCK_STYLES]);\n\n /**\n * Loading locks the trigger, but the popover can outlive that — it may be\n * controlled, or opened before the load began — so the editor inside has to\n * refuse edits on the same terms.\n */\n const isEditingDisabled = isDisabled || isLoading;\n\n const [color, setColor] = useState(() =>\n parseColor((value ?? defaultValue ?? '').toString()),\n );\n const [space, setSpace] = useState<ColorSpace>(defaultSpace);\n const [isOpen, setOpen] = useState(defaultOpen ?? false);\n\n /** What was last published, to tell our own updates from outside ones. */\n const emitted = useRef<string | null | undefined>(value);\n\n // Adopt values that did not come from here — a form reset, or a parent that\n // overrides what the user picked.\n useEffect(() => {\n if (value === undefined || value === emitted.current) return;\n\n emitted.current = value;\n setColor(parseColor((value ?? '').toString()));\n }, [value]);\n\n const handleColorChange = useEvent((next: ColorValue) => {\n const text = formatColor(next, format);\n\n emitted.current = text;\n setColor(next);\n onChange?.(text);\n });\n\n const colorText = color ? formatColor(color, format) : null;\n\n /**\n * The palette and the value field both speak in strings, and the field can\n * hand back `null` when it is cleared — which has to reach the picker, or the\n * text empties while the preview and trigger keep the old color.\n */\n const handleValueChange = useEvent((next: string | null) => {\n emitted.current = next;\n setColor(next ? parseColor(next) : null);\n onChange?.(next);\n });\n\n const handleOpenChange = useEvent((next: boolean) => {\n setOpen(next);\n onOpenChange?.(next);\n });\n\n // The swatch carries the color and the label spells it out. `children`\n // replaces that label, and `null` leaves the swatch on its own.\n const label =\n children !== undefined ? (\n children\n ) : color ? (\n formatColor(color, format)\n ) : (\n // Muted, so an unset picker never reads like one holding a value —\n // the same treatment `Picker` and `Select` give their placeholders.\n <Text.Placeholder>{placeholder}</Text.Placeholder>\n );\n\n const pickerField = (\n <ColorPickerWrapper styles={styles}>\n <DialogTrigger\n hideArrow\n type=\"popover\"\n mobileType=\"tray\"\n placement=\"bottom start\"\n isOpen={controlledOpen ?? isOpen}\n shouldFlip={shouldFlip}\n onOpenChange={handleOpenChange}\n >\n <ItemButton\n data-popover-trigger\n id={id}\n qa={qa || 'ColorPickerTrigger'}\n data-input-type=\"colorpicker\"\n type={type}\n theme={getValidationTheme(theme, { isInvalid, isValid })}\n size={size}\n icon={<ColorSwatch color={color} styles={swatchStyles} />}\n rightIcon={getValidationIcon({ isInvalid, isValid })}\n tooltip={triggerTooltip}\n isDisabled={isEditingDisabled || isReadOnly}\n autoFocus={autoFocus}\n aria-label={ariaLabel}\n mods={{ placeholder: !color }}\n styles={triggerStyles}\n >\n {label}\n </ItemButton>\n <Dialog\n aria-label=\"Color picker\"\n width=\"max-content\"\n styles={POPOVER_STYLES}\n >\n {/* Marks the subtree so a nested swatch group drops its custom-color\n escape hatch, which is a picker and would recurse forever. */}\n <ColorPopoverContext.Provider value={true}>\n <ColorPanel\n color={color ?? FALLBACK_COLOR}\n space={space}\n isDisabled={isEditingDisabled || isReadOnly}\n previewFormat={format}\n input={\n <ColorInput\n aria-label=\"Color value\"\n format={format}\n value={colorText}\n isDisabled={isEditingDisabled}\n isReadOnly={isReadOnly}\n onChange={handleValueChange}\n />\n }\n swatches={\n swatches?.length ? (\n <ColorSwatchGroup\n aria-label=\"Palette\"\n styles={PALETTE_STYLES}\n colors={swatches}\n columns={swatchColumns}\n format={format}\n value={colorText}\n isDisabled={isEditingDisabled || isReadOnly}\n onChange={handleValueChange}\n />\n ) : null\n }\n onChange={handleColorChange}\n onSpaceChange={setSpace}\n />\n </ColorPopoverContext.Provider>\n </Dialog>\n </DialogTrigger>\n </ColorPickerWrapper>\n );\n\n return wrapWithField(pickerField, ref as any, props);\n});\n\n/**\n * Drives the legacy `<Field>` wiring: `Picker` validates on change and passes\n * the value through untouched, where `Text` would default to `onBlur` and\n * coerce `null` into an empty string.\n */\n(ColorPicker as any).cubeInputType = 'Picker';\n"],"mappings":"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"}
@@ -1,4 +1,2 @@
1
1
 
2
- import { COLOR_FORMATS, ColorFormat } from "./color.js";
3
- import { COLOR_SPACES, ColorSpace } from "./channels.js";
4
- import { ColorPicker, ColorPickerFormatMode, CubeColorPickerProps } from "./ColorPicker.js";
2
+ import { ColorPicker, CubeColorPickerProps } from "./ColorPicker.js";
@@ -0,0 +1,50 @@
1
+
2
+ import { FieldBaseProps } from "../../../shared/form.js";
3
+ import "../../../shared/index.js";
4
+ import { ColorFormat } from "../color/color.js";
5
+ import { BaseProps, BlockStyleProps, OuterStyleProps, Styles } from "@tenphi/tasty";
6
+ import * as react from "react";
7
+
8
+ //#region src/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts
9
+ /** A swatch: a color, and optionally a name to announce instead of the color. */
10
+ type CubeColorSwatchItem = string | {
11
+ color: string;
12
+ label?: string;
13
+ };
14
+ interface CubeColorSwatchGroupProps extends BaseProps, OuterStyleProps, BlockStyleProps, FieldBaseProps {
15
+ /** The colors to offer. Duplicates of the same color are dropped. */
16
+ colors?: CubeColorSwatchItem[];
17
+ /** The selected color (controlled). */
18
+ value?: string | null;
19
+ /** The selected color (uncontrolled). */
20
+ defaultValue?: string | null;
21
+ /** Called with the chosen color, written in `format`. */
22
+ onChange?: (value: string | null) => void;
23
+ /** Notation the value is written in. */
24
+ format?: ColorFormat;
25
+ /** How many swatches per row. Defaults to a single row. */
26
+ columns?: number;
27
+ /**
28
+ * Append a `ColorPicker` for colors outside the set. Ignored inside a color
29
+ * popover, which is where that picker would otherwise recurse.
30
+ */
31
+ allowCustom?: boolean;
32
+ /** The size of each swatch. */
33
+ size?: 'small' | 'medium' | 'large' | (string & {});
34
+ styles?: Styles;
35
+ /** Styles of an individual swatch. */
36
+ swatchStyles?: Styles;
37
+ 'aria-label'?: string;
38
+ }
39
+ /**
40
+ * A grid of color swatches, one of which can be selected — the palette half of
41
+ * choosing a color, where `ColorPicker` is the freeform half.
42
+ *
43
+ * Swatches are keyed by their canonical hex, so the same color written two ways
44
+ * collapses into one entry. Equivalent colors would otherwise make selection
45
+ * ambiguous.
46
+ */
47
+ declare const ColorSwatchGroup: react.ForwardRefExoticComponent<CubeColorSwatchGroupProps & react.RefAttributes<HTMLElement>>;
48
+ //#endregion
49
+ export { ColorSwatchGroup, CubeColorSwatchGroupProps, CubeColorSwatchItem };
50
+ //# sourceMappingURL=ColorSwatchGroup.d.ts.map