@cube-dev/ui-kit 0.0.0-canary-51d2ebf → 0.0.0-canary-0d616fa

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 (528) hide show
  1. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  27. package/dist/components/actions/Link/Link.js +1 -1
  28. package/dist/components/actions/Menu/Menu.js +1 -1
  29. package/dist/components/actions/Menu/MenuItem.js +1 -1
  30. package/dist/components/actions/Menu/MenuSection.js +1 -1
  31. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  32. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  34. package/dist/components/actions/Menu/context.js +1 -1
  35. package/dist/components/actions/Menu/styled.js +1 -1
  36. package/dist/components/actions/index.js +1 -1
  37. package/dist/components/actions/use-action.js +1 -1
  38. package/dist/components/actions/use-anchored-menu.js +1 -1
  39. package/dist/components/actions/use-context-menu.js +1 -1
  40. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  41. package/dist/components/content/Alert/Alert.js +1 -1
  42. package/dist/components/content/Alert/use-alert.js +1 -1
  43. package/dist/components/content/Avatar/Avatar.js +1 -1
  44. package/dist/components/content/Badge/Badge.js +1 -1
  45. package/dist/components/content/Card/Card.js +1 -1
  46. package/dist/components/content/Content.js +1 -1
  47. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  48. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  49. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  50. package/dist/components/content/Divider.js +1 -1
  51. package/dist/components/content/Footer.js +1 -1
  52. package/dist/components/content/Header.js +1 -1
  53. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  54. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  55. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  56. package/dist/components/content/Item/Item.js +1 -1
  57. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  58. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  59. package/dist/components/content/Layout/GridLayout.js +1 -1
  60. package/dist/components/content/Layout/Layout.js +1 -1
  61. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  62. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  63. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  64. package/dist/components/content/Layout/LayoutContent.js +1 -1
  65. package/dist/components/content/Layout/LayoutContext.js +1 -1
  66. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  67. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  68. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  69. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  70. package/dist/components/content/Layout/LayoutPane.js +1 -1
  71. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  72. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  73. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  74. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  75. package/dist/components/content/Layout/index.js +1 -1
  76. package/dist/components/content/Layout/utils.js +1 -1
  77. package/dist/components/content/Paragraph.js +1 -1
  78. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  79. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  80. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  81. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  82. package/dist/components/content/Result/Result.js +1 -1
  83. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  84. package/dist/components/content/Tag/Tag.js +1 -1
  85. package/dist/components/content/Text.js +1 -1
  86. package/dist/components/content/TextItem/TextItem.js +1 -1
  87. package/dist/components/content/Title.js +1 -1
  88. package/dist/components/content/Tree/Tree.js +1 -1
  89. package/dist/components/content/Tree/TreeNode.js +1 -1
  90. package/dist/components/content/Tree/styled.js +1 -1
  91. package/dist/components/content/Tree/tree-index.js +1 -1
  92. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  93. package/dist/components/content/Tree/use-load-data.js +1 -1
  94. package/dist/components/content/highlightText.js +1 -1
  95. package/dist/components/content/use-auto-tooltip.js +1 -1
  96. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  97. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  98. package/dist/components/fields/Checkbox/context.js +1 -1
  99. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +37 -34
  100. package/dist/components/fields/ColorPicker/ColorPicker.js +182 -131
  101. package/dist/components/fields/ColorPicker/ColorPicker.js.map +1 -1
  102. package/dist/components/fields/{color/ColorPanel.js → ColorPicker/ColorPickerPanel.js} +11 -14
  103. package/dist/components/fields/ColorPicker/ColorPickerPanel.js.map +1 -0
  104. package/dist/components/fields/{color → ColorPicker}/channels.d.ts +1 -1
  105. package/dist/components/fields/{color → ColorPicker}/channels.js +2 -2
  106. package/dist/components/fields/ColorPicker/channels.js.map +1 -0
  107. package/dist/components/fields/ColorPicker/color.d.ts +15 -0
  108. package/dist/components/fields/{color → ColorPicker}/color.js +2 -2
  109. package/dist/components/fields/ColorPicker/color.js.map +1 -0
  110. package/dist/components/fields/ColorPicker/index.d.ts +3 -1
  111. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  112. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  113. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  114. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  115. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  116. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  117. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  118. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  119. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  120. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  121. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  122. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  123. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  124. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  125. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  126. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  127. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  128. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  129. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  130. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  131. package/dist/components/fields/DatePicker/period.js +1 -1
  132. package/dist/components/fields/DatePicker/props.js +1 -1
  133. package/dist/components/fields/DatePicker/utils.js +1 -1
  134. package/dist/components/fields/FileInput/FileInput.js +1 -1
  135. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  136. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  137. package/dist/components/fields/Input/Input.js +1 -1
  138. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  139. package/dist/components/fields/ListBox/ListBox.js +1 -1
  140. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  141. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  142. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  143. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  144. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  145. package/dist/components/fields/PasswordInput/PasswordInput.d.ts +2 -2
  146. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  147. package/dist/components/fields/PasswordInput/PasswordInput.js.map +1 -1
  148. package/dist/components/fields/Picker/Picker.js +1 -1
  149. package/dist/components/fields/RadioGroup/Radio.d.ts +2 -2
  150. package/dist/components/fields/RadioGroup/Radio.js +4 -4
  151. package/dist/components/fields/RadioGroup/Radio.js.map +1 -1
  152. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  153. package/dist/components/fields/RadioGroup/context.js +1 -1
  154. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  155. package/dist/components/fields/SearchInput/SearchInput.d.ts +2 -2
  156. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  157. package/dist/components/fields/SearchInput/SearchInput.js.map +1 -1
  158. package/dist/components/fields/Select/Select.js +1 -1
  159. package/dist/components/fields/Slider/Gradation.js +1 -1
  160. package/dist/components/fields/Slider/HueSlider.js +1 -1
  161. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  162. package/dist/components/fields/Slider/Slider.js +1 -1
  163. package/dist/components/fields/Slider/SliderBase.js +1 -1
  164. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  165. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  166. package/dist/components/fields/Slider/elements.js +1 -1
  167. package/dist/components/fields/Slider/index.js +1 -1
  168. package/dist/components/fields/Switch/Switch.js +1 -1
  169. package/dist/components/fields/TextArea/TextArea.d.ts +2 -2
  170. package/dist/components/fields/TextArea/TextArea.js +1 -1
  171. package/dist/components/fields/TextArea/TextArea.js.map +1 -1
  172. package/dist/components/fields/TextInput/TextInput.d.ts +2 -2
  173. package/dist/components/fields/TextInput/TextInput.js +1 -1
  174. package/dist/components/fields/TextInput/TextInput.js.map +1 -1
  175. package/dist/components/fields/TextInput/TextInputBase.d.ts +10 -1
  176. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  177. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  178. package/dist/components/fields/TextInput/index.d.ts +1 -1
  179. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  180. package/dist/components/fields/index.d.ts +4 -10
  181. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  182. package/dist/components/form/Form/Field.js +1 -1
  183. package/dist/components/form/Form/Form.js +1 -1
  184. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  185. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  186. package/dist/components/form/Form/SubmitError.js +1 -1
  187. package/dist/components/form/Form/index.js +1 -1
  188. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  189. package/dist/components/form/Form/use-field/use-field.js +1 -1
  190. package/dist/components/form/Form/use-form.js +1 -1
  191. package/dist/components/form/Form/validation.js +1 -1
  192. package/dist/components/form/Label.js +1 -1
  193. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  194. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  195. package/dist/components/form/validation/use-validation-props.js +1 -1
  196. package/dist/components/form/wrapper.js +1 -1
  197. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  198. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  199. package/dist/components/layout/Board/Board.js +1 -1
  200. package/dist/components/layout/Board/BoardProvider.js +1 -1
  201. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  202. package/dist/components/layout/Board/Widget.js +1 -1
  203. package/dist/components/layout/Board/WidgetHost.js +1 -1
  204. package/dist/components/layout/Board/board-context.js +1 -1
  205. package/dist/components/layout/Board/board-store.js +1 -1
  206. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  207. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  208. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  209. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  210. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  211. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  212. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  213. package/dist/components/layout/Board/index.js +1 -1
  214. package/dist/components/layout/Board/responsive-utils.js +1 -1
  215. package/dist/components/layout/Board/use-board-layout.js +1 -1
  216. package/dist/components/layout/Board/use-board-registry.js +1 -1
  217. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  218. package/dist/components/layout/Board/use-board-selection.js +1 -1
  219. package/dist/components/layout/Flex.js +1 -1
  220. package/dist/components/layout/Flow.js +1 -1
  221. package/dist/components/layout/Grid.js +1 -1
  222. package/dist/components/layout/Panel.js +1 -1
  223. package/dist/components/layout/Prefix.js +1 -1
  224. package/dist/components/layout/ResizablePanel.js +1 -1
  225. package/dist/components/layout/Space.js +1 -1
  226. package/dist/components/layout/Suffix.js +1 -1
  227. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  228. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  229. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  230. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  231. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  232. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  233. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  234. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  235. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  236. package/dist/components/navigation/Tabs/styled.js +1 -1
  237. package/dist/components/navigation/Tabs/types.js +1 -1
  238. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  239. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  240. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  241. package/dist/components/other/Calendar/Calendar.js +1 -1
  242. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  243. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  244. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  245. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  246. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  247. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  248. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  249. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  250. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  251. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  252. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  253. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  254. package/dist/components/overlays/Dialog/context.js +1 -1
  255. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  256. package/dist/components/overlays/Modal/Modal.js +1 -1
  257. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  258. package/dist/components/overlays/Modal/Overlay.js +1 -1
  259. package/dist/components/overlays/Modal/Popover.js +1 -1
  260. package/dist/components/overlays/Modal/Tray.js +1 -1
  261. package/dist/components/overlays/Modal/Underlay.js +1 -1
  262. package/dist/components/overlays/Notifications/Notification.js +1 -1
  263. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  264. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  265. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  266. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  267. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  268. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  269. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  270. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  271. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  272. package/dist/components/overlays/Notifications/index.js +1 -1
  273. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  274. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  275. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  276. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  277. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  278. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  279. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  280. package/dist/components/overlays/Toast/index.js +1 -1
  281. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  282. package/dist/components/overlays/Toast/useToast.js +1 -1
  283. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  284. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  285. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  286. package/dist/components/overlays/Tooltip/context.js +1 -1
  287. package/dist/components/portal/Portal.js +1 -1
  288. package/dist/components/portal/PortalProvider.js +1 -1
  289. package/dist/components/portal/usePortal.js +1 -1
  290. package/dist/components/shared/DraggableCollection.js +1 -1
  291. package/dist/components/shared/InvalidIcon.js +1 -1
  292. package/dist/components/shared/ValidIcon.js +1 -1
  293. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  294. package/dist/components/status/Spin/Cube.js +1 -1
  295. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  296. package/dist/components/status/Spin/Spin.js +1 -1
  297. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  298. package/dist/data/item-themes.js +1 -1
  299. package/dist/data/themes.js +1 -1
  300. package/dist/eslint-plugin/defaults.generated.js +1 -1
  301. package/dist/eslint-plugin/index.js +1 -1
  302. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  303. package/dist/i18n/I18nProvider.js +1 -1
  304. package/dist/i18n/createFormatter.js +1 -1
  305. package/dist/i18n/index.js +1 -1
  306. package/dist/i18n/instance.js +1 -1
  307. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  308. package/dist/i18n/locales/en-US/uikit.js +1 -1
  309. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  310. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  311. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  312. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  313. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  314. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  315. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  316. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  317. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  318. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  319. package/dist/i18n/locales.js +1 -1
  320. package/dist/i18n/useFormatter.js +1 -1
  321. package/dist/i18n/useI18n.js +1 -1
  322. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  323. package/dist/icons/AdjustmentsIcon.js +1 -1
  324. package/dist/icons/AiIcon.js +1 -1
  325. package/dist/icons/AreaChartIcon.js +1 -1
  326. package/dist/icons/BackwardIcon.js +1 -1
  327. package/dist/icons/BarChartIcon.js +1 -1
  328. package/dist/icons/BellFilledIcon.js +1 -1
  329. package/dist/icons/BellIcon.js +1 -1
  330. package/dist/icons/BooleanIcon.js +1 -1
  331. package/dist/icons/CalendarEditIcon.js +1 -1
  332. package/dist/icons/CalendarIcon.js +1 -1
  333. package/dist/icons/CaretDownIcon.js +1 -1
  334. package/dist/icons/CaretUpIcon.js +1 -1
  335. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  336. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  337. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  338. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  339. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  340. package/dist/icons/ChartBarLineIcon.js +1 -1
  341. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  342. package/dist/icons/ChartBarStackedIcon.js +1 -1
  343. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  344. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  345. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  346. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  347. package/dist/icons/ChartBubbleIcon.js +1 -1
  348. package/dist/icons/ChartDonut2Icon.js +1 -1
  349. package/dist/icons/ChartFunnelIcon.js +1 -1
  350. package/dist/icons/ChartHeatmapIcon.js +1 -1
  351. package/dist/icons/ChartKPIIcon.js +1 -1
  352. package/dist/icons/ChartPie2Icon.js +1 -1
  353. package/dist/icons/ChartScatterIcon.js +1 -1
  354. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  355. package/dist/icons/CheckCircleIcon.js +1 -1
  356. package/dist/icons/CheckIcon.js +1 -1
  357. package/dist/icons/CircleFilledIcon.js +1 -1
  358. package/dist/icons/ClearIcon.js +1 -1
  359. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  360. package/dist/icons/CloseCircleIcon.js +1 -1
  361. package/dist/icons/CloseIcon.js +1 -1
  362. package/dist/icons/CodeIcon.js +1 -1
  363. package/dist/icons/ColumnTotalIcon.js +1 -1
  364. package/dist/icons/CopyIcon.js +1 -1
  365. package/dist/icons/CountIcon.js +1 -1
  366. package/dist/icons/CubeIcon.js +1 -1
  367. package/dist/icons/CubePauseIcon.js +1 -1
  368. package/dist/icons/CubePlayIcon.js +1 -1
  369. package/dist/icons/CurrencyDollarIcon.js +1 -1
  370. package/dist/icons/DangerIcon.js +1 -1
  371. package/dist/icons/DashboardIcon.js +1 -1
  372. package/dist/icons/DatabaseIcon.js +1 -1
  373. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  374. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  375. package/dist/icons/DirectionIcon.js +1 -1
  376. package/dist/icons/DonutIcon.js +1 -1
  377. package/dist/icons/DownIcon.js +1 -1
  378. package/dist/icons/EditIcon.js +1 -1
  379. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  380. package/dist/icons/ExclamationCircleIcon.js +1 -1
  381. package/dist/icons/ExclamationIcon.js +1 -1
  382. package/dist/icons/EyeIcon.js +1 -1
  383. package/dist/icons/EyeInvisibleIcon.js +1 -1
  384. package/dist/icons/FilterIcon.js +1 -1
  385. package/dist/icons/FolderFilledIcon.js +1 -1
  386. package/dist/icons/FolderIcon.js +1 -1
  387. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  388. package/dist/icons/FolderOpenIcon.js +1 -1
  389. package/dist/icons/ForwardIcon.js +1 -1
  390. package/dist/icons/GripVerticalIcon.js +1 -1
  391. package/dist/icons/HierarchyIcon.js +1 -1
  392. package/dist/icons/HierarchyOpenIcon.js +1 -1
  393. package/dist/icons/Icon.js +1 -1
  394. package/dist/icons/InfoCircleIcon.js +1 -1
  395. package/dist/icons/InfoIcon.js +1 -1
  396. package/dist/icons/KeyIcon.js +1 -1
  397. package/dist/icons/LeftIcon.js +1 -1
  398. package/dist/icons/LineChartIcon.js +1 -1
  399. package/dist/icons/LoadingIcon.js +1 -1
  400. package/dist/icons/LockFilledIcon.js +1 -1
  401. package/dist/icons/LockIcon.js +1 -1
  402. package/dist/icons/MoreIcon.js +1 -1
  403. package/dist/icons/NotAllowedIcon.js +1 -1
  404. package/dist/icons/Number123Icon.js +1 -1
  405. package/dist/icons/NumberIcon.js +1 -1
  406. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  407. package/dist/icons/PauseCircleIcon.js +1 -1
  408. package/dist/icons/PauseIcon.js +1 -1
  409. package/dist/icons/PercentageIcon.js +1 -1
  410. package/dist/icons/PieChartIcon.js +1 -1
  411. package/dist/icons/PipetteIcon.js +1 -1
  412. package/dist/icons/PlayCircleIcon.js +1 -1
  413. package/dist/icons/PlayIcon.js +1 -1
  414. package/dist/icons/PlusIcon.js +1 -1
  415. package/dist/icons/ProgressBarIcon.js +1 -1
  416. package/dist/icons/ReloadIcon.js +1 -1
  417. package/dist/icons/ReportIcon.js +1 -1
  418. package/dist/icons/ReturnIcon.js +1 -1
  419. package/dist/icons/RightIcon.js +1 -1
  420. package/dist/icons/RowTotalsIcon.js +1 -1
  421. package/dist/icons/SchemeIcon.js +1 -1
  422. package/dist/icons/SearchIcon.js +1 -1
  423. package/dist/icons/SemanticQueryIcon.js +1 -1
  424. package/dist/icons/SettingsIcon.js +1 -1
  425. package/dist/icons/ShieldFilledIcon.js +1 -1
  426. package/dist/icons/ShieldIcon.js +1 -1
  427. package/dist/icons/SlashIcon.js +1 -1
  428. package/dist/icons/SparklesIcon.js +1 -1
  429. package/dist/icons/SqlIcon.js +1 -1
  430. package/dist/icons/StatsIcon.js +1 -1
  431. package/dist/icons/StopIcon.js +1 -1
  432. package/dist/icons/StringIcon.js +1 -1
  433. package/dist/icons/SubtotalsIcon.js +1 -1
  434. package/dist/icons/SwitchIcon.js +1 -1
  435. package/dist/icons/TableIcon.js +1 -1
  436. package/dist/icons/ThumbsDownIcon.js +1 -1
  437. package/dist/icons/ThumbsUpIcon.js +1 -1
  438. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  439. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  440. package/dist/icons/ThunderboltIcon.js +1 -1
  441. package/dist/icons/TimeIcon.js +1 -1
  442. package/dist/icons/TrashIcon.js +1 -1
  443. package/dist/icons/UnlockIcon.js +1 -1
  444. package/dist/icons/UpIcon.js +1 -1
  445. package/dist/icons/UserGroupIcon.js +1 -1
  446. package/dist/icons/UserIcon.js +1 -1
  447. package/dist/icons/UserLockIcon.js +1 -1
  448. package/dist/icons/ViewIcon.js +1 -1
  449. package/dist/icons/WarningFilledIcon.js +1 -1
  450. package/dist/icons/WarningIcon.js +1 -1
  451. package/dist/icons/wrap-icon.js +1 -1
  452. package/dist/index.d.ts +5 -8
  453. package/dist/index.js +4 -7
  454. package/dist/index.js.map +1 -1
  455. package/dist/provider.js +1 -1
  456. package/dist/providers/TrackingProvider.js +1 -1
  457. package/dist/providers/navigationAdapter.default.js +1 -1
  458. package/dist/tokens/base.js +1 -1
  459. package/dist/tokens/colors.js +1 -1
  460. package/dist/tokens/index.js +1 -1
  461. package/dist/tokens/layout.js +1 -1
  462. package/dist/tokens/lazy-styles.js +1 -1
  463. package/dist/tokens/palette-config.js +1 -1
  464. package/dist/tokens/palette.js +1 -1
  465. package/dist/tokens/shadows.js +1 -1
  466. package/dist/tokens/sizes.js +1 -1
  467. package/dist/tokens/spacing.js +1 -1
  468. package/dist/tokens/typography.js +1 -1
  469. package/dist/utils/ResizeSensor.js +1 -1
  470. package/dist/utils/is-dev-env.js +1 -1
  471. package/dist/utils/modules.js +1 -1
  472. package/dist/utils/promise.js +1 -1
  473. package/dist/utils/raf.js +1 -1
  474. package/dist/utils/random.js +1 -1
  475. package/dist/utils/range.js +1 -1
  476. package/dist/utils/react/RenderCache.js +1 -1
  477. package/dist/utils/react/Slots.js +1 -1
  478. package/dist/utils/react/chain.js +1 -1
  479. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  480. package/dist/utils/react/index.js +1 -1
  481. package/dist/utils/react/interactions.js +1 -1
  482. package/dist/utils/react/isTextOnly.js +1 -1
  483. package/dist/utils/react/mapProps.js +1 -1
  484. package/dist/utils/react/mergeProps.js +1 -1
  485. package/dist/utils/react/nullableValue.js +1 -1
  486. package/dist/utils/react/resolveIcon.js +1 -1
  487. package/dist/utils/react/sharedStore.js +1 -1
  488. package/dist/utils/react/useBufferedValue.js +1 -1
  489. package/dist/utils/react/useCombinedRefs.js +1 -1
  490. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  491. package/dist/utils/react/useEventBus.js +1 -1
  492. package/dist/utils/react/useId.js +1 -1
  493. package/dist/utils/react/useIsDarwin.js +1 -1
  494. package/dist/utils/react/useKeySymbols.js +1 -1
  495. package/dist/utils/react/useLayoutEffect.js +1 -1
  496. package/dist/utils/react/useLocalStorage.js +1 -1
  497. package/dist/utils/react/useMergeStyles.js +1 -1
  498. package/dist/utils/react/usePopoverSync.js +1 -1
  499. package/dist/utils/react/useQaProps.js +1 -1
  500. package/dist/utils/react/useViewportSize.js +1 -1
  501. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  502. package/dist/utils/selection.js +1 -1
  503. package/dist/utils/styles.js +1 -1
  504. package/dist/utils/tree.js +1 -1
  505. package/dist/utils/warnings.js +1 -1
  506. package/dist/version.js +2 -2
  507. package/docs/components/fields/ColorPicker.md +144 -85
  508. package/package.json +1 -1
  509. package/dist/components/fields/ColorInput/ColorInput.d.ts +0 -67
  510. package/dist/components/fields/ColorInput/ColorInput.js +0 -230
  511. package/dist/components/fields/ColorInput/ColorInput.js.map +0 -1
  512. package/dist/components/fields/ColorInput/index.d.ts +0 -2
  513. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.d.ts +0 -50
  514. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +0 -269
  515. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js.map +0 -1
  516. package/dist/components/fields/ColorSwatchGroup/index.d.ts +0 -2
  517. package/dist/components/fields/color/ColorPanel.js.map +0 -1
  518. package/dist/components/fields/color/ColorSwatch.d.ts +0 -22
  519. package/dist/components/fields/color/ColorSwatch.js +0 -58
  520. package/dist/components/fields/color/ColorSwatch.js.map +0 -1
  521. package/dist/components/fields/color/channels.js.map +0 -1
  522. package/dist/components/fields/color/color.d.ts +0 -21
  523. package/dist/components/fields/color/color.js.map +0 -1
  524. package/dist/components/fields/color/context.js +0 -20
  525. package/dist/components/fields/color/context.js.map +0 -1
  526. package/dist/components/fields/color/index.d.ts +0 -4
  527. package/docs/components/fields/ColorInput.md +0 -284
  528. package/docs/components/fields/ColorSwatchGroup.md +0 -206
@@ -1,230 +0,0 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-51d2ebf | Cube Dev Team */
2
- import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
- import { useEvent } from "../../../_internal/hooks/use-event.js";
4
- import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
5
- import { PipetteIcon } from "../../../icons/PipetteIcon.js";
6
- import { useFieldProps } from "../../form/Form/use-field/use-field-props.js";
7
- import { Dialog } from "../../overlays/Dialog/Dialog.js";
8
- import { DialogTrigger } from "../../overlays/Dialog/DialogTrigger.js";
9
- import { TextInputBase } from "../TextInput/TextInputBase.js";
10
- import { detectFormat, formatColor, parseColor } from "../color/color.js";
11
- import { ColorSwatch } from "../color/ColorSwatch.js";
12
- import { ColorPanel } from "../color/ColorPanel.js";
13
- import { useIsInsideColorPopover } from "../color/context.js";
14
- import { tasty } from "@tenphi/tasty";
15
- import { forwardRef, useEffect, useRef, useState } from "react";
16
- import { jsx, jsxs } from "react/jsx-runtime";
17
- import { useTextField } from "react-aria";
18
-
19
- //#region src/components/fields/ColorInput/ColorInput.tsx
20
- /**
21
- * A popover caps its height at half the viewport. The panel can exceed that on
22
- * a short screen, and would otherwise spill outside the popover's own border.
23
- */
24
- const POPOVER_STYLES = { overflow: "auto" };
25
- /** What the popover starts from when there is no color to edit yet. */
26
- const FALLBACK_COLOR = {
27
- h: 264,
28
- s: .8,
29
- l: .6
30
- };
31
- const ColorInputTrigger = tasty(ItemAction, {
32
- qa: "ColorInputTrigger",
33
- icon: /* @__PURE__ */ jsx(PipetteIcon, {})
34
- });
35
- /**
36
- * A color field: the color as text, a swatch of the current value, and a
37
- * popover to dial it in across OKHST, OKLCH and RGB.
38
- */
39
- const ColorInput = forwardRef(function ColorInput(allProps, ref) {
40
- const props = useFieldProps(allProps, {
41
- defaultValidationTrigger: "onBlur",
42
- valuePropsMapper: ({ value, onChange }) => ({
43
- value,
44
- onChange
45
- })
46
- });
47
- 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;
48
- const isInsidePopover = useIsInsideColorPopover();
49
- const initialText = (value ?? defaultValue ?? "").toString();
50
- const [text, setText] = useState(() => {
51
- const parsed = parseColor(initialText);
52
- return parsed && formatMode === "forced" ? formatColor(parsed, format) : initialText;
53
- });
54
- const [color, setColor] = useState(() => parseColor(initialText));
55
- const [space, setSpace] = useState(defaultSpace);
56
- const [isOpen, setOpen] = useState(defaultOpen ?? false);
57
- const targetRef = useRef(null);
58
- const inputRef = useRef(null);
59
- /** The last text that parsed, so an invalid entry has something to fall back to. */
60
- const validText = useRef(parseColor(initialText) ? text : "");
61
- /** What was last handed to `onChange`, to tell our own updates from outside ones. */
62
- const emitted = useRef(value);
63
- const emit = useEvent((next) => {
64
- emitted.current = next;
65
- onChange?.(next);
66
- });
67
- /** The notation a value should be written in, given the current text. */
68
- const outputFormat = (source) => formatMode === "forced" ? format : detectFormat(source) ?? format;
69
- useEffect(() => {
70
- if (value === void 0 || value === emitted.current) return;
71
- emitted.current = value;
72
- const raw = (value ?? "").toString();
73
- const parsed = parseColor(raw);
74
- const nextText = parsed && formatMode === "forced" ? formatColor(parsed, format) : raw;
75
- setColor(parsed);
76
- setText(nextText);
77
- validText.current = parsed ? nextText : "";
78
- }, [
79
- value,
80
- format,
81
- formatMode
82
- ]);
83
- const handleTextChange = useEvent((nextText) => {
84
- setText(nextText);
85
- if (!nextText.trim()) {
86
- setColor(null);
87
- validText.current = "";
88
- emit(null);
89
- return;
90
- }
91
- const parsed = parseColor(nextText);
92
- if (!parsed) return;
93
- setColor(parsed);
94
- validText.current = nextText;
95
- emit(formatMode === "free" ? nextText.trim() : formatColor(parsed, outputFormat(nextText)));
96
- });
97
- /** Resolve whatever is in the input into a real color, or undo it. */
98
- const settle = useEvent(() => {
99
- if (!text.trim()) return;
100
- const parsed = parseColor(text);
101
- if (!parsed) {
102
- setText(validText.current);
103
- return;
104
- }
105
- if (formatMode === "forced") setText(formatColor(parsed, format));
106
- });
107
- /**
108
- * Focusing offers the whole value up for replacement, the way a hex field
109
- * does. The string is the unit of editing here: a single channel is tuned
110
- * with the sliders, not by hand-editing one number inside `oklch(…)`.
111
- *
112
- * Read off the event rather than `inputRef`, which `TextInputBase` re-points
113
- * through `useCombinedRefs`.
114
- */
115
- const handleFocus = useEvent((event) => {
116
- event.currentTarget.select();
117
- onFocus?.(event);
118
- });
119
- /**
120
- * A click would otherwise drop a caret and undo that selection — the browser
121
- * applies it after the focus handler has run. Suppressing the default action
122
- * of the focusing press means no caret is ever placed; focus is then moved
123
- * here instead, which selects.
124
- *
125
- * Only the press that *takes* focus is suppressed, so clicking a field that
126
- * already has focus still positions the caret, and dragging still selects a
127
- * range.
128
- */
129
- const handleMouseDown = useEvent((event) => {
130
- if (document.activeElement === event.currentTarget) return;
131
- event.preventDefault();
132
- event.currentTarget.focus();
133
- });
134
- const handleBlur = useEvent((event) => {
135
- settle();
136
- userOnBlur?.(event);
137
- });
138
- const handleKeyDown = useEvent((event) => {
139
- if (event.key === "Enter") settle();
140
- });
141
- const handleColorChange = useEvent((nextColor) => {
142
- const nextText = formatColor(nextColor, outputFormat(text));
143
- setColor(nextColor);
144
- setText(nextText);
145
- validText.current = nextText;
146
- emit(nextText);
147
- });
148
- const handleOpenChange = useEvent((next) => {
149
- setOpen(next);
150
- onOpenChange?.(next);
151
- });
152
- const { labelProps, inputProps } = useTextField({
153
- id,
154
- label,
155
- description,
156
- "aria-label": ariaLabel,
157
- "aria-labelledby": ariaLabelledby,
158
- "aria-describedby": ariaDescribedby,
159
- isDisabled,
160
- isReadOnly,
161
- isInvalid,
162
- autoFocus,
163
- placeholder,
164
- value: text,
165
- type: "text",
166
- onChange: handleTextChange,
167
- onFocus: handleFocus,
168
- onBlur: handleBlur,
169
- onKeyDown: handleKeyDown
170
- }, inputRef);
171
- return /* @__PURE__ */ jsx(TextInputBase, {
172
- ...props,
173
- ref,
174
- qa: qa || "ColorInput",
175
- size,
176
- autocomplete: "off",
177
- icon: /* @__PURE__ */ jsx(ColorSwatch, {
178
- color,
179
- styles: swatchStyles
180
- }),
181
- inputRef,
182
- inputProps: {
183
- ...inputProps,
184
- spellCheck: false,
185
- onMouseDown: handleMouseDown
186
- },
187
- inputStyles,
188
- labelProps: mergeProps$1(labelProps, userLabelProps),
189
- wrapperRef: targetRef,
190
- isDisabled,
191
- isReadOnly,
192
- isInvalid,
193
- isValid,
194
- isLoading,
195
- suffixPosition: "after",
196
- suffix: isInsidePopover ? null : /* @__PURE__ */ jsxs(DialogTrigger, {
197
- hideArrow: true,
198
- type: "popover",
199
- mobileType: "tray",
200
- placement: "bottom right",
201
- targetRef,
202
- isOpen: controlledOpen ?? isOpen,
203
- shouldFlip,
204
- onOpenChange: handleOpenChange,
205
- children: [/* @__PURE__ */ jsx(ColorInputTrigger, {
206
- size,
207
- "aria-label": "Open the color picker",
208
- isDisabled: isDisabled || isReadOnly,
209
- styles: triggerStyles
210
- }), /* @__PURE__ */ jsx(Dialog, {
211
- "aria-label": "Color picker",
212
- width: "max-content",
213
- styles: POPOVER_STYLES,
214
- children: /* @__PURE__ */ jsx(ColorPanel, {
215
- color: color ?? FALLBACK_COLOR,
216
- space,
217
- isDisabled: isDisabled || isReadOnly,
218
- previewFormat: outputFormat(text),
219
- onChange: handleColorChange,
220
- onSpaceChange: setSpace
221
- })
222
- })]
223
- })
224
- });
225
- });
226
- ColorInput.cubeInputType = "Text";
227
-
228
- //#endregion
229
- export { ColorInput };
230
- //# sourceMappingURL=ColorInput.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ColorInput.js","names":["mergeProps"],"sources":["../../../../src/components/fields/ColorInput/ColorInput.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 { ColorSpace } from '../color/channels';\nimport {\n ColorFormat,\n ColorValue,\n detectFormat,\n formatColor,\n parseColor,\n} from '../color/color';\nimport { ColorPanel } from '../color/ColorPanel';\nimport { ColorSwatch } from '../color/ColorSwatch';\nimport { useIsInsideColorPopover } from '../color/context';\nimport { TextInputBase } from '../TextInput/TextInputBase';\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 ColorInputFormatMode = 'forced' | 'derive' | 'free';\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/** 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 ColorInputTrigger = tasty(ItemAction, {\n qa: 'ColorInputTrigger',\n icon: <PipetteIcon />,\n});\n\nexport interface CubeColorInputProps\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?: ColorInputFormatMode;\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 ColorInput = forwardRef(function ColorInput(\n allProps: CubeColorInputProps,\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 // Already inside a color popover: this is the value field for that popover,\n // so it must not offer a popover of its own.\n const isInsidePopover = useIsInsideColorPopover();\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 || 'ColorInput'}\n size={size}\n autocomplete=\"off\"\n icon={<ColorSwatch color={color} styles={swatchStyles} />}\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 isInsidePopover ? null : (\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 <ColorInputTrigger\n size={size}\n aria-label=\"Open the color picker\"\n isDisabled={isDisabled || isReadOnly}\n styles={triggerStyles}\n />\n <Dialog\n aria-label=\"Color picker\"\n width=\"max-content\"\n styles={POPOVER_STYLES}\n >\n <ColorPanel\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\n(ColorInput as any).cubeInputType = 'Text';\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
-
2
- import { ColorInput, ColorInputFormatMode, CubeColorInputProps } from "./ColorInput.js";
@@ -1,50 +0,0 @@
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
@@ -1,269 +0,0 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-51d2ebf | Cube Dev Team */
2
- import { extractStyles } from "../../../utils/styles.js";
3
- import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
- import { useEvent } from "../../../_internal/hooks/use-event.js";
5
- import { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
6
- import { getValidationMods } from "../../form/validation/resolve-validation-props.js";
7
- import { useFieldProps } from "../../form/Form/use-field/use-field-props.js";
8
- import { wrapWithField } from "../../form/wrapper.js";
9
- import { HiddenInput } from "../../HiddenInput.js";
10
- import { formatColor, parseColor, toHex } from "../color/color.js";
11
- import { useIsInsideColorPopover } from "../color/context.js";
12
- import { ColorPicker } from "../ColorPicker/ColorPicker.js";
13
- import { BLOCK_STYLES, OUTER_STYLES, tasty } from "@tenphi/tasty";
14
- import { forwardRef, useMemo, useRef, useState } from "react";
15
- import { jsx, jsxs } from "react/jsx-runtime";
16
- import { useRadio, useRadioGroup } from "react-aria";
17
- import { useRadioGroupState } from "react-stately";
18
- import { useObjectRef } from "@react-aria/utils";
19
-
20
- //#region src/components/fields/ColorSwatchGroup/ColorSwatchGroup.tsx
21
- /**
22
- * Two rings drawn inside the swatch, as React Aria marks selection. Outer ring
23
- * first: earlier shadows paint over later ones, so this reads as 2bw of
24
- * `#surface-text` at the edge and 2bw of `#surface` within it. Two tones that
25
- * flip with the scheme stay visible against any color the swatch holds.
26
- */
27
- const SELECTED_RING = "inset 0 0 0 2bw #surface-text, inset 0 0 0 4bw #surface";
28
- /** The swatch edge in px, per size. `Item` takes an exact number. */
29
- const SWATCH_PX = {
30
- small: 16,
31
- medium: 20,
32
- large: 24
33
- };
34
- /**
35
- * The trailing picker is a button wrapping a swatch, which would otherwise read
36
- * as a box inside a box. Stripping its chrome leaves just the swatch, so it
37
- * sits in the row as one of them.
38
- */
39
- const CUSTOM_TRIGGER_STYLES = {
40
- width: "$swatch-size $swatch-size",
41
- height: "$swatch-size $swatch-size",
42
- padding: 0,
43
- radius: "1r",
44
- border: 0,
45
- position: "relative"
46
- };
47
- /**
48
- * The swatch is docked over the whole button rather than placed inside it.
49
- * `Item` lays its icon out in a grid that reserves room for a label even when
50
- * there is none, which left the swatch a pixel off centre.
51
- */
52
- const CUSTOM_SWATCH_STYLES = {
53
- position: "absolute",
54
- inset: 0,
55
- width: "auto",
56
- height: "auto",
57
- radius: "1r"
58
- };
59
- /**
60
- * The ring goes on the swatch, not on the button around it: an inset shadow
61
- * paints under child content, and the swatch covers the button edge to edge.
62
- */
63
- const CUSTOM_SWATCH_SELECTED_STYLES = {
64
- ...CUSTOM_SWATCH_STYLES,
65
- shadow: SELECTED_RING
66
- };
67
- const GroupElement = tasty({
68
- qa: "ColorSwatchGroup",
69
- styles: {
70
- display: {
71
- "": "flex",
72
- columns: "grid"
73
- },
74
- flow: {
75
- "": "row wrap",
76
- columns: "row"
77
- },
78
- gap: ".5x",
79
- placeItems: {
80
- "": "center start",
81
- columns: "stretch"
82
- },
83
- width: {
84
- "": "auto",
85
- columns: "max-content"
86
- },
87
- gridColumns: "repeat($columns, max-content)",
88
- "$swatch-size": {
89
- "": "2.5x",
90
- "size=small": "2x",
91
- "size=large": "3x"
92
- }
93
- }
94
- });
95
- /**
96
- * Only the swatches belong to the radiogroup. The custom picker is a button,
97
- * and inside `role="radiogroup"` it both misreports what the palette holds and
98
- * hands arrow keys to React Aria's radio walker — pressing one while the picker
99
- * is focused jumps into a swatch and changes the color. The box is dropped so
100
- * the swatches remain direct children of the group's own layout.
101
- */
102
- const RadiosElement = tasty({ styles: { display: "contents" } });
103
- const SwatchElement = tasty({
104
- as: "label",
105
- qa: "ColorSwatchOption",
106
- styles: {
107
- display: "grid",
108
- placeItems: "stretch",
109
- position: "relative",
110
- radius: "1r",
111
- cursor: {
112
- "": "pointer",
113
- disabled: "default"
114
- },
115
- width: "$swatch-size $swatch-size",
116
- height: "$swatch-size $swatch-size",
117
- fill: "(#color-swatch, #clear)",
118
- opacity: {
119
- "": 1,
120
- disabled: "$disabled-opacity"
121
- },
122
- shadow: {
123
- "": "inset 0 0 0 1bw #dark.15",
124
- selected: SELECTED_RING
125
- },
126
- outline: {
127
- "": "2bw #focus.0 / 1bw",
128
- focused: "2bw #focus / 1bw"
129
- },
130
- transition: "theme"
131
- }
132
- });
133
- function Swatch({ colorKey, label, state, isDisabled, size, styles, mods }) {
134
- const inputRef = useRef(null);
135
- const { inputProps, isSelected, isDisabled: isRadioDisabled } = useRadio({
136
- value: colorKey,
137
- "aria-label": label,
138
- isDisabled
139
- }, state, inputRef);
140
- const { isFocused, focusProps } = useFocus$1({ isDisabled }, true);
141
- return /* @__PURE__ */ jsx(SwatchElement, {
142
- "data-size": size,
143
- mods: {
144
- selected: isSelected,
145
- disabled: isRadioDisabled,
146
- focused: isFocused,
147
- ...mods
148
- },
149
- styles,
150
- style: { "--color-swatch-color": colorKey },
151
- children: /* @__PURE__ */ jsx(HiddenInput, {
152
- ...mergeProps$1(inputProps, focusProps),
153
- ref: inputRef,
154
- qa: "ColorSwatchInput",
155
- mods: {
156
- button: true,
157
- disabled: isRadioDisabled
158
- }
159
- })
160
- });
161
- }
162
- /**
163
- * A grid of color swatches, one of which can be selected — the palette half of
164
- * choosing a color, where `ColorPicker` is the freeform half.
165
- *
166
- * Swatches are keyed by their canonical hex, so the same color written two ways
167
- * collapses into one entry. Equivalent colors would otherwise make selection
168
- * ambiguous.
169
- */
170
- const ColorSwatchGroup = forwardRef(function ColorSwatchGroup(allProps, ref) {
171
- const props = useFieldProps(allProps, {
172
- defaultValidationTrigger: "onChange",
173
- valuePropsMapper: ({ value, onChange }) => ({
174
- value,
175
- onChange
176
- })
177
- });
178
- const { qa, colors = [], value, defaultValue, onChange, format = "hex", columns, allowCustom, size = "medium", isDisabled, isInvalid, isValid, swatchStyles, "aria-label": ariaLabel } = props;
179
- const styles = extractStyles(props, [...OUTER_STYLES, ...BLOCK_STYLES]);
180
- const isInsidePopover = useIsInsideColorPopover();
181
- const showCustom = allowCustom && !isInsidePopover;
182
- /** Keyed by canonical hex so the same color written two ways is one swatch. */
183
- const swatches = useMemo(() => {
184
- const seen = /* @__PURE__ */ new Map();
185
- for (const entry of colors) {
186
- const parsed = parseColor(typeof entry === "string" ? entry : entry.color);
187
- if (!parsed) continue;
188
- const key = toHex(parsed);
189
- if (seen.has(key)) continue;
190
- seen.set(key, {
191
- key,
192
- label: (typeof entry === "string" ? void 0 : entry.label) ?? formatColor(parsed, format)
193
- });
194
- }
195
- return [...seen.values()];
196
- }, [colors, format]);
197
- const [internalValue, setInternalValue] = useState(() => defaultValue ?? null);
198
- const currentValue = value !== void 0 ? value : internalValue;
199
- const selectedColor = parseColor((currentValue ?? "").toString());
200
- const selectedKey = selectedColor ? toHex(selectedColor) : null;
201
- const isCustom = !!selectedKey && !swatches.some((s) => s.key === selectedKey);
202
- const publish = useEvent((next) => {
203
- if (value === void 0) setInternalValue(next);
204
- onChange?.(next);
205
- });
206
- const handleChange = useEvent((nextKey) => {
207
- const parsed = parseColor(nextKey);
208
- publish(parsed ? formatColor(parsed, format) : null);
209
- });
210
- const state = useRadioGroupState({
211
- value: selectedKey ?? null,
212
- isDisabled,
213
- isReadOnly: props.isReadOnly,
214
- onChange: handleChange
215
- });
216
- const domRef = useObjectRef(ref);
217
- const { radioGroupProps, labelProps } = useRadioGroup({
218
- ...props,
219
- "aria-label": props.label ? void 0 : ariaLabel ?? "Colors",
220
- orientation: "horizontal"
221
- }, state);
222
- return wrapWithField(/* @__PURE__ */ jsxs(GroupElement, {
223
- ref: domRef,
224
- qa: qa || "ColorSwatchGroup",
225
- "data-size": size,
226
- "data-input-type": "colorswatchgroup",
227
- styles,
228
- mods: {
229
- ...getValidationMods({
230
- isInvalid,
231
- isValid
232
- }),
233
- columns: !!columns
234
- },
235
- style: columns ? { "--columns": String(columns) } : void 0,
236
- children: [/* @__PURE__ */ jsx(RadiosElement, {
237
- ...radioGroupProps,
238
- children: swatches.map((swatch) => /* @__PURE__ */ jsx(Swatch, {
239
- colorKey: swatch.key,
240
- label: swatch.label,
241
- state,
242
- isDisabled,
243
- size,
244
- styles: swatchStyles
245
- }, swatch.key))
246
- }), showCustom ? /* @__PURE__ */ jsx(ColorPicker, {
247
- "aria-label": "Custom color",
248
- qa: "ColorSwatchGroupCustom",
249
- format,
250
- type: "clear",
251
- size: SWATCH_PX[size] ?? SWATCH_PX.medium,
252
- value: isCustom ? currentValue ?? null : null,
253
- isDisabled,
254
- isReadOnly: props.isReadOnly,
255
- triggerStyles: CUSTOM_TRIGGER_STYLES,
256
- swatchStyles: isCustom ? CUSTOM_SWATCH_SELECTED_STYLES : CUSTOM_SWATCH_STYLES,
257
- onChange: publish,
258
- children: null
259
- }) : null]
260
- }), domRef, {
261
- ...props,
262
- labelProps: mergeProps$1(props.labelProps, labelProps)
263
- });
264
- });
265
- ColorSwatchGroup.cubeInputType = "Picker";
266
-
267
- //#endregion
268
- export { ColorSwatchGroup };
269
- //# sourceMappingURL=ColorSwatchGroup.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ColorSwatchGroup.js","names":["useFocus","mergeProps"],"sources":["../../../../src/components/fields/ColorSwatchGroup/ColorSwatchGroup.tsx"],"sourcesContent":["import { useObjectRef } from '@react-aria/utils';\nimport {\n BaseProps,\n BLOCK_STYLES,\n BlockStyleProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport { ForwardedRef, forwardRef, useMemo, useRef, useState } from 'react';\nimport { useRadio, useRadioGroup } from 'react-aria';\nimport { useRadioGroupState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { FieldBaseProps } from '../../../shared';\nimport { mergeProps } from '../../../utils/react';\nimport { useFocus } from '../../../utils/react/interactions';\nimport { extractStyles } from '../../../utils/styles';\nimport { getValidationMods, useFieldProps, wrapWithField } from '../../form';\nimport { HiddenInput } from '../../HiddenInput';\nimport { ColorFormat, formatColor, parseColor, toHex } from '../color/color';\nimport { useIsInsideColorPopover } from '../color/context';\nimport { ColorPicker } from '../ColorPicker';\n\nimport type { RadioGroupState } from 'react-stately';\n\n/** A swatch: a color, and optionally a name to announce instead of the color. */\nexport type CubeColorSwatchItem = string | { color: string; label?: string };\n\n/**\n * Two rings drawn inside the swatch, as React Aria marks selection. Outer ring\n * first: earlier shadows paint over later ones, so this reads as 2bw of\n * `#surface-text` at the edge and 2bw of `#surface` within it. Two tones that\n * flip with the scheme stay visible against any color the swatch holds.\n */\nconst SELECTED_RING = 'inset 0 0 0 2bw #surface-text, inset 0 0 0 4bw #surface';\n\n/** The swatch edge in px, per size. `Item` takes an exact number. */\nconst SWATCH_PX: Record<string, number> = {\n small: 16,\n medium: 20,\n large: 24,\n};\n\n/**\n * The trailing picker is a button wrapping a swatch, which would otherwise read\n * as a box inside a box. Stripping its chrome leaves just the swatch, so it\n * sits in the row as one of them.\n */\nconst CUSTOM_TRIGGER_STYLES: Styles = {\n // `size` sets the control's height; the box is pinned here as well so a flex\n // row cannot let the button size itself to its content instead.\n width: '$swatch-size $swatch-size',\n height: '$swatch-size $swatch-size',\n padding: 0,\n radius: '1r',\n border: 0,\n position: 'relative',\n};\n\n/**\n * The swatch is docked over the whole button rather than placed inside it.\n * `Item` lays its icon out in a grid that reserves room for a label even when\n * there is none, which left the swatch a pixel off centre.\n */\nconst CUSTOM_SWATCH_STYLES: Styles = {\n position: 'absolute',\n inset: 0,\n width: 'auto',\n height: 'auto',\n radius: '1r',\n};\n\n/**\n * The ring goes on the swatch, not on the button around it: an inset shadow\n * paints under child content, and the swatch covers the button edge to edge.\n */\nconst CUSTOM_SWATCH_SELECTED_STYLES: Styles = {\n ...CUSTOM_SWATCH_STYLES,\n shadow: SELECTED_RING,\n};\n\nconst GroupElement = tasty({\n qa: 'ColorSwatchGroup',\n styles: {\n // Wrapping is the better default: it is a single row wherever there is\n // room, and folds instead of overflowing where there is not. A fixed\n // `columns` switches to a grid, sized to the swatches rather than to the\n // container — `1fr` tracks would stretch them apart.\n display: {\n '': 'flex',\n columns: 'grid',\n },\n flow: {\n '': 'row wrap',\n columns: 'row',\n },\n gap: '.5x',\n placeItems: {\n '': 'center start',\n columns: 'stretch',\n },\n width: {\n '': 'auto',\n columns: 'max-content',\n },\n gridColumns: 'repeat($columns, max-content)',\n\n // 20px, 16px and 24px — 1x is 8px.\n '$swatch-size': {\n '': '2.5x',\n 'size=small': '2x',\n 'size=large': '3x',\n },\n },\n});\n\n/**\n * Only the swatches belong to the radiogroup. The custom picker is a button,\n * and inside `role=\"radiogroup\"` it both misreports what the palette holds and\n * hands arrow keys to React Aria's radio walker — pressing one while the picker\n * is focused jumps into a swatch and changes the color. The box is dropped so\n * the swatches remain direct children of the group's own layout.\n */\nconst RadiosElement = tasty({\n styles: { display: 'contents' },\n});\n\nconst SwatchElement = tasty({\n as: 'label',\n qa: 'ColorSwatchOption',\n styles: {\n display: 'grid',\n placeItems: 'stretch',\n position: 'relative',\n radius: '1r',\n cursor: {\n '': 'pointer',\n disabled: 'default',\n },\n width: '$swatch-size $swatch-size',\n height: '$swatch-size $swatch-size',\n fill: '(#color-swatch, #clear)',\n opacity: {\n '': 1,\n disabled: '$disabled-opacity',\n },\n // A ring at one border-width's distance, so the color area stays whole —\n // the inner ring is the surface showing through as the gap. `outline` is\n // deliberately left to the focus ring.\n shadow: {\n '': 'inset 0 0 0 1bw #dark.15',\n selected: SELECTED_RING,\n },\n // A 1bw offset keeps the ring clear of the 4px gap to its neighbours.\n outline: {\n '': '2bw #focus.0 / 1bw',\n focused: '2bw #focus / 1bw',\n },\n transition: 'theme',\n },\n});\n\nexport interface CubeColorSwatchGroupProps\n extends BaseProps,\n OuterStyleProps,\n BlockStyleProps,\n FieldBaseProps {\n /** The colors to offer. Duplicates of the same color are dropped. */\n colors?: CubeColorSwatchItem[];\n /** The selected color (controlled). */\n value?: string | null;\n /** The selected color (uncontrolled). */\n defaultValue?: string | null;\n /** Called with the chosen color, written in `format`. */\n onChange?: (value: string | null) => void;\n /** Notation the value is written in. */\n format?: ColorFormat;\n /** How many swatches per row. Defaults to a single row. */\n columns?: number;\n /**\n * Append a `ColorPicker` for colors outside the set. Ignored inside a color\n * popover, which is where that picker would otherwise recurse.\n */\n allowCustom?: boolean;\n /** The size of each swatch. */\n size?: 'small' | 'medium' | 'large' | (string & {});\n styles?: Styles;\n /** Styles of an individual swatch. */\n swatchStyles?: Styles;\n 'aria-label'?: string;\n}\n\ninterface SwatchProps {\n colorKey: string;\n label: string;\n state: RadioGroupState;\n isDisabled?: boolean;\n size?: string;\n styles?: Styles;\n mods?: Record<string, boolean | undefined>;\n}\n\nfunction Swatch({\n colorKey,\n label,\n state,\n isDisabled,\n size,\n styles,\n mods,\n}: SwatchProps) {\n const inputRef = useRef<HTMLInputElement>(null);\n const {\n inputProps,\n isSelected,\n isDisabled: isRadioDisabled,\n } = useRadio(\n { value: colorKey, 'aria-label': label, isDisabled },\n state,\n inputRef,\n );\n // `useRadio` reports selection but not focus, and the swatch is the only\n // thing a keyboard user can see — without this the ring never appears.\n const { isFocused, focusProps } = useFocus({ isDisabled }, true);\n\n return (\n <SwatchElement\n data-size={size}\n mods={{\n selected: isSelected,\n disabled: isRadioDisabled,\n focused: isFocused,\n ...mods,\n }}\n styles={styles}\n style={{ '--color-swatch-color': colorKey }}\n >\n <HiddenInput\n {...mergeProps(inputProps, focusProps)}\n ref={inputRef}\n qa=\"ColorSwatchInput\"\n mods={{ button: true, disabled: isRadioDisabled }}\n />\n </SwatchElement>\n );\n}\n\n/**\n * A grid of color swatches, one of which can be selected — the palette half of\n * choosing a color, where `ColorPicker` is the freeform half.\n *\n * Swatches are keyed by their canonical hex, so the same color written two ways\n * collapses into one entry. Equivalent colors would otherwise make selection\n * ambiguous.\n */\nexport const ColorSwatchGroup = forwardRef(function ColorSwatchGroup(\n allProps: CubeColorSwatchGroupProps,\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 colors = [],\n value,\n defaultValue,\n onChange,\n format = 'hex',\n columns,\n allowCustom,\n size = 'medium',\n isDisabled,\n isInvalid,\n isValid,\n swatchStyles,\n 'aria-label': ariaLabel,\n } = props;\n\n const styles = extractStyles(props, [...OUTER_STYLES, ...BLOCK_STYLES]);\n const isInsidePopover = useIsInsideColorPopover();\n // A custom picker inside a color popover would open a popover of its own.\n const showCustom = allowCustom && !isInsidePopover;\n\n /** Keyed by canonical hex so the same color written two ways is one swatch. */\n const swatches = useMemo(() => {\n const seen = new Map<string, { key: string; label: string }>();\n\n for (const entry of colors) {\n const raw = typeof entry === 'string' ? entry : entry.color;\n const parsed = parseColor(raw);\n\n if (!parsed) continue;\n\n const key = toHex(parsed);\n\n if (seen.has(key)) continue;\n\n seen.set(key, {\n key,\n label:\n (typeof entry === 'string' ? undefined : entry.label) ??\n formatColor(parsed, format),\n });\n }\n\n return [...seen.values()];\n }, [colors, format]);\n\n const [internalValue, setInternalValue] = useState<string | null>(\n () => defaultValue ?? null,\n );\n const currentValue = value !== undefined ? value : internalValue;\n\n const selectedColor = parseColor((currentValue ?? '').toString());\n const selectedKey = selectedColor ? toHex(selectedColor) : null;\n const isCustom =\n !!selectedKey && !swatches.some((s) => s.key === selectedKey);\n\n const publish = useEvent((next: string | null) => {\n if (value === undefined) setInternalValue(next);\n\n onChange?.(next);\n });\n\n const handleChange = useEvent((nextKey: string) => {\n const parsed = parseColor(nextKey);\n\n publish(parsed ? formatColor(parsed, format) : null);\n });\n\n const state = useRadioGroupState({\n value: selectedKey ?? null,\n isDisabled,\n isReadOnly: props.isReadOnly,\n onChange: handleChange,\n });\n\n // `useFocusableRef` wants the ref of a real focusable control to forward to,\n // and a group of radios has no single one — `RadioGroup` takes the same\n // approach for the same reason.\n const domRef = useObjectRef(ref);\n const { radioGroupProps, labelProps } = useRadioGroup(\n {\n ...props,\n // Only name the group here when nothing else does: an `aria-label` set\n // unconditionally would outrank the visible label React Aria wires up.\n 'aria-label': props.label ? undefined : ariaLabel ?? 'Colors',\n orientation: 'horizontal',\n },\n state,\n );\n\n const group = (\n <GroupElement\n ref={domRef}\n qa={qa || 'ColorSwatchGroup'}\n data-size={size}\n data-input-type=\"colorswatchgroup\"\n styles={styles}\n mods={{\n ...getValidationMods({ isInvalid, isValid }),\n columns: !!columns,\n }}\n style={columns ? { '--columns': String(columns) } : undefined}\n >\n <RadiosElement {...radioGroupProps}>\n {swatches.map((swatch) => (\n <Swatch\n key={swatch.key}\n colorKey={swatch.key}\n label={swatch.label}\n state={state}\n isDisabled={isDisabled}\n size={size}\n styles={swatchStyles}\n />\n ))}\n </RadiosElement>\n {showCustom ? (\n <ColorPicker\n aria-label=\"Custom color\"\n qa=\"ColorSwatchGroupCustom\"\n format={format}\n type=\"clear\"\n size={SWATCH_PX[size] ?? SWATCH_PX.medium}\n value={isCustom ? currentValue ?? null : null}\n isDisabled={isDisabled}\n isReadOnly={props.isReadOnly}\n triggerStyles={CUSTOM_TRIGGER_STYLES}\n swatchStyles={\n isCustom ? CUSTOM_SWATCH_SELECTED_STYLES : CUSTOM_SWATCH_STYLES\n }\n onChange={publish}\n >\n {null}\n </ColorPicker>\n ) : null}\n </GroupElement>\n );\n\n return wrapWithField(group, domRef, {\n ...props,\n labelProps: mergeProps(props.labelProps, labelProps),\n });\n});\n\n(ColorSwatchGroup as any).cubeInputType = 'Picker';\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
-
2
- import { ColorSwatchGroup, CubeColorSwatchGroupProps, CubeColorSwatchItem } from "./ColorSwatchGroup.js";
@@ -1 +0,0 @@
1
- {"version":3,"file":"ColorPanel.js","names":["Slider","Radio"],"sources":["../../../../src/components/fields/color/ColorPanel.tsx"],"sourcesContent":["import { Styles, tasty } from '@tenphi/tasty';\nimport { ReactNode, useMemo } from 'react';\n\nimport { useEvent } from '../../../_internal';\nimport { Radio } from '../RadioGroup';\nimport { Slider } from '../Slider';\n\nimport {\n CHANNELS,\n COLOR_SPACE_HINTS,\n COLOR_SPACE_LABELS,\n COLOR_SPACES,\n ColorChannel,\n ColorSpace,\n} from './channels';\nimport {\n ColorFormat,\n ColorValue,\n formatColor,\n getContrastingColor,\n toHex,\n} from './color';\n\nconst PanelElement = tasty({\n qa: 'ColorPanel',\n styles: {\n display: 'grid',\n flow: 'row',\n gap: '1x',\n padding: '1x',\n width: '34x',\n },\n});\n\nconst PreviewElement = tasty({\n qa: 'ColorPreview',\n styles: {\n display: 'grid',\n placeItems: 'center',\n height: '6x',\n radius: true,\n preset: 's4',\n fill: '(#color-picker, #clear)',\n color: '(#color-picker-contrast, #dark)',\n shadow: 'inset 0 0 0 1bw #dark.1',\n },\n});\n\nconst ChannelsElement = tasty({\n styles: {\n display: 'grid',\n gridColumns: 'max-content 1sf max-content',\n placeItems: 'center stretch',\n gap: '1x',\n },\n});\n\nconst ChannelLabelElement = tasty({\n styles: {\n preset: 'c2',\n color: '#dark-03',\n textAlign: 'center',\n width: '2x',\n },\n});\n\nconst ChannelTrackElement = tasty({\n styles: {\n display: 'grid',\n placeItems: 'center stretch',\n },\n});\n\nconst ChannelValueElement = tasty({\n styles: {\n preset: 's4',\n color: '#dark-02',\n textAlign: 'right',\n whiteSpace: 'nowrap',\n width: '5.5x',\n },\n});\n\n/**\n * The gradient reaches the track through a plain custom property so the track\n * keeps a single cached style rule. A color picker moves its channels\n * continuously, and a fresh `styles` object per frame would emit a fresh CSS\n * rule per frame.\n */\nconst TRACK_STYLES: Styles = {\n height: '1x',\n top: '.5x',\n radius: '1r',\n fill: '#clear',\n image: '$channel-gradient',\n shadow: 'inset 0 0 0 1bw #dark.1',\n Fill: false,\n};\n\n/** A ring keeps the thumb visible wherever it sits on its own gradient. */\nconst THUMB_STYLES: Styles = {\n shadow: '0 0 0 2bw #surface, 0 0 0 3bw #dark.2',\n};\n\nconst THUMB_TOKENS = { '#slider-thumb': '(#color-picker, #surface)' };\n\nconst SPACE_STYLES: Styles = { width: '100%' };\nconst TAB_STYLES: Styles = { flexGrow: 1 };\n\nexport interface ColorPanelProps {\n color: ColorValue;\n space: ColorSpace;\n isDisabled?: boolean;\n /** Notation used for the preview caption. */\n previewFormat: ColorFormat;\n /** Optional palette rendered under the channels. */\n swatches?: ReactNode;\n /** Optional value field rendered above the preview. */\n input?: ReactNode;\n onChange: (color: ColorValue) => void;\n onSpaceChange: (space: ColorSpace) => void;\n}\n\ninterface ChannelRowProps {\n channel: ColorChannel;\n color: ColorValue;\n isDisabled?: boolean;\n onChange: (color: ColorValue) => void;\n}\n\nfunction ChannelRow({ channel, color, isDisabled, onChange }: ChannelRowProps) {\n const max = channel.max(color);\n\n const handleChange = useEvent((value: number) => {\n onChange(channel.apply(color, value));\n });\n\n return (\n <>\n <ChannelLabelElement aria-hidden=\"true\">\n {channel.label}\n </ChannelLabelElement>\n <ChannelTrackElement\n style={{\n '--channel-gradient': `linear-gradient(to right, ${channel.stops(\n color,\n )})`,\n }}\n >\n <Slider\n aria-label={channel.title}\n value={Math.min(channel.value(color), max)}\n minValue={channel.min}\n maxValue={max}\n step={channel.step}\n isDisabled={isDisabled}\n trackStyles={TRACK_STYLES}\n thumbStyles={THUMB_STYLES}\n thumbTokens={THUMB_TOKENS}\n onChange={handleChange}\n />\n </ChannelTrackElement>\n <ChannelValueElement>{channel.display(color)}</ChannelValueElement>\n </>\n );\n}\n\n/**\n * The popover body shared by `ColorInput` and `ColorPicker`: a preview, a\n * switch between the three color concepts, and one gradient slider per channel\n * of the active one.\n */\nexport function ColorPanel(props: ColorPanelProps) {\n const {\n color,\n space,\n isDisabled,\n previewFormat,\n swatches,\n input,\n onChange,\n onSpaceChange,\n } = props;\n\n const colorTokens = useMemo(\n () => ({\n '--color-picker-color': toHex(color),\n '--color-picker-contrast-color': getContrastingColor(color),\n }),\n [color],\n );\n\n const handleSpaceChange = useEvent((value: string) => {\n onSpaceChange(value as ColorSpace);\n });\n\n return (\n <PanelElement style={colorTokens}>\n {input}\n <PreviewElement>{formatColor(color, previewFormat)}</PreviewElement>\n <Radio.Tabs\n aria-label=\"Color space\"\n value={space}\n isDisabled={isDisabled}\n styles={SPACE_STYLES}\n onChange={handleSpaceChange}\n >\n {COLOR_SPACES.map((item) => (\n <Radio\n key={item}\n value={item}\n aria-label={COLOR_SPACE_LABELS[item]}\n tooltip={COLOR_SPACE_HINTS[item]}\n styles={TAB_STYLES}\n >\n {COLOR_SPACE_LABELS[item]}\n </Radio>\n ))}\n </Radio.Tabs>\n <ChannelsElement>\n {CHANNELS[space].map((channel) => (\n <ChannelRow\n key={`${space}-${channel.label}`}\n channel={channel}\n color={color}\n isDisabled={isDisabled}\n onChange={onChange}\n />\n ))}\n </ChannelsElement>\n {swatches}\n </PanelElement>\n );\n}\n"],"mappings":";;;;;;;;;;;AAuBA,MAAM,eAAe,MAAM;CACzB,IAAI;CACJ,QAAQ;EACN,SAAS;EACT,MAAM;EACN,KAAK;EACL,SAAS;EACT,OAAO;EACR;CACF,CAAC;AAEF,MAAM,iBAAiB,MAAM;CAC3B,IAAI;CACJ,QAAQ;EACN,SAAS;EACT,YAAY;EACZ,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,MAAM;EACN,OAAO;EACP,QAAQ;EACT;CACF,CAAC;AAEF,MAAM,kBAAkB,MAAM,EAC5B,QAAQ;CACN,SAAS;CACT,aAAa;CACb,YAAY;CACZ,KAAK;CACN,EACF,CAAC;AAEF,MAAM,sBAAsB,MAAM,EAChC,QAAQ;CACN,QAAQ;CACR,OAAO;CACP,WAAW;CACX,OAAO;CACR,EACF,CAAC;AAEF,MAAM,sBAAsB,MAAM,EAChC,QAAQ;CACN,SAAS;CACT,YAAY;CACb,EACF,CAAC;AAEF,MAAM,sBAAsB,MAAM,EAChC,QAAQ;CACN,QAAQ;CACR,OAAO;CACP,WAAW;CACX,YAAY;CACZ,OAAO;CACR,EACF,CAAC;;;;;;;AAQF,MAAM,eAAuB;CAC3B,QAAQ;CACR,KAAK;CACL,QAAQ;CACR,MAAM;CACN,OAAO;CACP,QAAQ;CACR,MAAM;CACP;;AAGD,MAAM,eAAuB,EAC3B,QAAQ,yCACT;AAED,MAAM,eAAe,EAAE,iBAAiB,6BAA6B;AAErE,MAAM,eAAuB,EAAE,OAAO,QAAQ;AAC9C,MAAM,aAAqB,EAAE,UAAU,GAAG;AAuB1C,SAAS,WAAW,EAAE,SAAS,OAAO,YAAY,YAA6B;CAC7E,MAAM,MAAM,QAAQ,IAAI,MAAM;CAE9B,MAAM,eAAe,UAAU,UAAkB;AAC/C,WAAS,QAAQ,MAAM,OAAO,MAAM,CAAC;GACrC;AAEF,QACE;EACE,oBAAC;GAAoB,eAAY;aAC9B,QAAQ;IACW;EACtB,oBAAC;GACC,OAAO,EACL,sBAAsB,6BAA6B,QAAQ,MACzD,MACD,CAAC,IACH;aAED,oBAACA;IACC,cAAY,QAAQ;IACpB,OAAO,KAAK,IAAI,QAAQ,MAAM,MAAM,EAAE,IAAI;IAC1C,UAAU,QAAQ;IAClB,UAAU;IACV,MAAM,QAAQ;IACF;IACZ,aAAa;IACb,aAAa;IACb,aAAa;IACb,UAAU;KACV;IACkB;EACtB,oBAAC,iCAAqB,QAAQ,QAAQ,MAAM,GAAuB;KAClE;;;;;;;AASP,SAAgB,WAAW,OAAwB;CACjD,MAAM,EACJ,OACA,OACA,YACA,eACA,UACA,OACA,UACA,kBACE;CAEJ,MAAM,cAAc,eACX;EACL,wBAAwB,MAAM,MAAM;EACpC,iCAAiC,oBAAoB,MAAM;EAC5D,GACD,CAAC,MAAM,CACR;CAED,MAAM,oBAAoB,UAAU,UAAkB;AACpD,gBAAc,MAAoB;GAClC;AAEF,QACE,qBAAC;EAAa,OAAO;;GAClB;GACD,oBAAC,4BAAgB,YAAY,OAAO,cAAc,GAAkB;GACpE,oBAACC,QAAM;IACL,cAAW;IACX,OAAO;IACK;IACZ,QAAQ;IACR,UAAU;cAET,aAAa,KAAK,SACjB,oBAACA;KAEC,OAAO;KACP,cAAY,mBAAmB;KAC/B,SAAS,kBAAkB;KAC3B,QAAQ;eAEP,mBAAmB;OANf,KAOC,CACR;KACS;GACb,oBAAC,6BACE,SAAS,OAAO,KAAK,YACpB,oBAAC;IAEU;IACF;IACK;IACF;MAJL,GAAG,MAAM,GAAG,QAAQ,QAKzB,CACF,GACc;GACjB;;GACY"}