@cube-dev/ui-kit 0.0.0-canary-abc7920 → 0.0.0-canary-ec74d45

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 (516) 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/ComboBox/ComboBox.js +1 -1
  100. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  101. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  102. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  103. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  104. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  105. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  106. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  107. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  108. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  109. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  110. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  111. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  112. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  113. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  114. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  115. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  116. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  117. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  118. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  119. package/dist/components/fields/DatePicker/period.js +1 -1
  120. package/dist/components/fields/DatePicker/props.js +1 -1
  121. package/dist/components/fields/DatePicker/utils.js +1 -1
  122. package/dist/components/fields/FileInput/FileInput.js +1 -1
  123. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  124. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  125. package/dist/components/fields/Input/Input.js +1 -1
  126. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  127. package/dist/components/fields/ListBox/ListBox.js +1 -1
  128. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  129. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  130. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  131. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  132. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  133. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  134. package/dist/components/fields/Picker/Picker.js +1 -1
  135. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  136. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  137. package/dist/components/fields/RadioGroup/context.js +1 -1
  138. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  139. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  140. package/dist/components/fields/Select/Select.js +1 -1
  141. package/dist/components/fields/Slider/Gradation.js +1 -1
  142. package/dist/components/fields/Slider/HueSlider.js +1 -1
  143. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  144. package/dist/components/fields/Slider/Slider.js +1 -1
  145. package/dist/components/fields/Slider/SliderBase.js +1 -1
  146. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  147. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  148. package/dist/components/fields/Slider/elements.js +1 -1
  149. package/dist/components/fields/Slider/index.js +1 -1
  150. package/dist/components/fields/Switch/Switch.js +1 -1
  151. package/dist/components/fields/TextArea/TextArea.js +1 -1
  152. package/dist/components/fields/TextInput/TextInput.js +1 -1
  153. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  154. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  155. package/dist/components/fields/index.d.ts +0 -4
  156. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  157. package/dist/components/form/Form/Field.js +1 -1
  158. package/dist/components/form/Form/Form.js +1 -1
  159. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  160. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  161. package/dist/components/form/Form/SubmitError.js +1 -1
  162. package/dist/components/form/Form/index.js +1 -1
  163. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  164. package/dist/components/form/Form/use-field/use-field.js +1 -1
  165. package/dist/components/form/Form/use-form.js +1 -1
  166. package/dist/components/form/Form/validation.js +1 -1
  167. package/dist/components/form/Label.js +1 -1
  168. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  169. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  170. package/dist/components/form/validation/use-validation-props.js +1 -1
  171. package/dist/components/form/wrapper.js +1 -1
  172. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  173. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  174. package/dist/components/layout/Board/Board.d.ts +55 -1
  175. package/dist/components/layout/Board/Board.js +278 -75
  176. package/dist/components/layout/Board/Board.js.map +1 -1
  177. package/dist/components/layout/Board/BoardProvider.js +1 -1
  178. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  179. package/dist/components/layout/Board/Widget.d.ts +16 -0
  180. package/dist/components/layout/Board/Widget.js +6 -3
  181. package/dist/components/layout/Board/Widget.js.map +1 -1
  182. package/dist/components/layout/Board/WidgetHost.js +81 -14
  183. package/dist/components/layout/Board/WidgetHost.js.map +1 -1
  184. package/dist/components/layout/Board/board-context.js +1 -1
  185. package/dist/components/layout/Board/board-context.js.map +1 -1
  186. package/dist/components/layout/Board/board-store.js +2 -2
  187. package/dist/components/layout/Board/board-store.js.map +1 -1
  188. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  189. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  190. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  191. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  192. package/dist/components/layout/Board/grid-core/group-move.js +132 -0
  193. package/dist/components/layout/Board/grid-core/group-move.js.map +1 -0
  194. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  195. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  196. package/dist/components/layout/Board/index.d.ts +2 -1
  197. package/dist/components/layout/Board/index.js +2 -2
  198. package/dist/components/layout/Board/index.js.map +1 -1
  199. package/dist/components/layout/Board/responsive-utils.js +1 -1
  200. package/dist/components/layout/Board/use-board-layout.js +17 -12
  201. package/dist/components/layout/Board/use-board-layout.js.map +1 -1
  202. package/dist/components/layout/Board/use-board-registry.js +139 -20
  203. package/dist/components/layout/Board/use-board-registry.js.map +1 -1
  204. package/dist/components/layout/Board/use-board-select-modifier-key.js +24 -0
  205. package/dist/components/layout/Board/use-board-select-modifier-key.js.map +1 -0
  206. package/dist/components/layout/Board/use-board-selection.d.ts +8 -0
  207. package/dist/components/layout/Board/use-board-selection.js +113 -0
  208. package/dist/components/layout/Board/use-board-selection.js.map +1 -0
  209. package/dist/components/layout/Flex.js +1 -1
  210. package/dist/components/layout/Flow.js +1 -1
  211. package/dist/components/layout/Grid.js +1 -1
  212. package/dist/components/layout/Panel.js +1 -1
  213. package/dist/components/layout/Prefix.js +1 -1
  214. package/dist/components/layout/ResizablePanel.js +1 -1
  215. package/dist/components/layout/Space.js +1 -1
  216. package/dist/components/layout/Suffix.js +1 -1
  217. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  218. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  219. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  220. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  221. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  222. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  223. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  224. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  225. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  226. package/dist/components/navigation/Tabs/styled.js +1 -1
  227. package/dist/components/navigation/Tabs/types.js +1 -1
  228. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  229. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  230. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  231. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  232. package/dist/components/other/Calendar/Calendar.js +1 -1
  233. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  234. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  235. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  236. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  237. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  238. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  239. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  240. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  241. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  242. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  243. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  244. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  245. package/dist/components/overlays/Dialog/context.js +1 -1
  246. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  247. package/dist/components/overlays/Modal/Modal.js +1 -1
  248. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  249. package/dist/components/overlays/Modal/Overlay.js +1 -1
  250. package/dist/components/overlays/Modal/Popover.js +1 -1
  251. package/dist/components/overlays/Modal/Tray.js +1 -1
  252. package/dist/components/overlays/Modal/Underlay.js +1 -1
  253. package/dist/components/overlays/Notifications/Notification.js +1 -1
  254. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  255. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  256. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  257. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  258. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  259. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  260. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  261. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  262. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  263. package/dist/components/overlays/Notifications/index.js +1 -1
  264. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  265. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  266. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  267. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  268. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  269. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  270. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  271. package/dist/components/overlays/Toast/index.js +1 -1
  272. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  273. package/dist/components/overlays/Toast/useToast.js +1 -1
  274. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  275. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  276. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  277. package/dist/components/overlays/Tooltip/context.js +1 -1
  278. package/dist/components/portal/Portal.js +1 -1
  279. package/dist/components/portal/PortalProvider.js +1 -1
  280. package/dist/components/portal/usePortal.js +1 -1
  281. package/dist/components/shared/DraggableCollection.js +1 -1
  282. package/dist/components/shared/InvalidIcon.js +1 -1
  283. package/dist/components/shared/ValidIcon.js +1 -1
  284. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  285. package/dist/components/status/Spin/Cube.js +1 -1
  286. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  287. package/dist/components/status/Spin/Spin.js +1 -1
  288. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  289. package/dist/data/item-themes.js +1 -1
  290. package/dist/data/themes.js +1 -1
  291. package/dist/eslint-plugin/defaults.generated.js +9 -1
  292. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  293. package/dist/eslint-plugin/index.js +1 -1
  294. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  295. package/dist/i18n/I18nProvider.js +1 -1
  296. package/dist/i18n/createFormatter.js +1 -1
  297. package/dist/i18n/index.js +1 -1
  298. package/dist/i18n/instance.js +1 -1
  299. package/dist/i18n/locales/de-DE/uikit.js +9 -1
  300. package/dist/i18n/locales/en-US/uikit.js +9 -1
  301. package/dist/i18n/locales/en-US/uikit.json.d.ts +9 -1
  302. package/dist/i18n/locales/es-ES/uikit.js +9 -1
  303. package/dist/i18n/locales/es-MX/uikit.js +9 -1
  304. package/dist/i18n/locales/fr-FR/uikit.js +9 -1
  305. package/dist/i18n/locales/it-IT/uikit.js +9 -1
  306. package/dist/i18n/locales/ja-JP/uikit.js +9 -1
  307. package/dist/i18n/locales/nb-NO/uikit.js +9 -1
  308. package/dist/i18n/locales/pt-BR/uikit.js +9 -1
  309. package/dist/i18n/locales/pt-PT/uikit.js +9 -1
  310. package/dist/i18n/locales/sv-SE/uikit.js +9 -1
  311. package/dist/i18n/locales/vi-VN/uikit.js +9 -1
  312. package/dist/i18n/locales.js +1 -1
  313. package/dist/i18n/useFormatter.js +1 -1
  314. package/dist/i18n/useI18n.js +1 -1
  315. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  316. package/dist/icons/AdjustmentsIcon.js +1 -1
  317. package/dist/icons/AiIcon.js +1 -1
  318. package/dist/icons/AreaChartIcon.js +1 -1
  319. package/dist/icons/BackwardIcon.js +1 -1
  320. package/dist/icons/BarChartIcon.js +1 -1
  321. package/dist/icons/BellFilledIcon.js +1 -1
  322. package/dist/icons/BellIcon.js +1 -1
  323. package/dist/icons/BooleanIcon.js +1 -1
  324. package/dist/icons/CalendarEditIcon.js +1 -1
  325. package/dist/icons/CalendarIcon.js +1 -1
  326. package/dist/icons/CaretDownIcon.js +1 -1
  327. package/dist/icons/CaretUpIcon.js +1 -1
  328. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  329. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  330. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  331. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  332. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  333. package/dist/icons/ChartBarLineIcon.js +1 -1
  334. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  335. package/dist/icons/ChartBarStackedIcon.js +1 -1
  336. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  337. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  338. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  339. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  340. package/dist/icons/ChartBubbleIcon.js +1 -1
  341. package/dist/icons/ChartDonut2Icon.js +1 -1
  342. package/dist/icons/ChartFunnelIcon.js +1 -1
  343. package/dist/icons/ChartHeatmapIcon.js +1 -1
  344. package/dist/icons/ChartKPIIcon.js +1 -1
  345. package/dist/icons/ChartPie2Icon.js +1 -1
  346. package/dist/icons/ChartScatterIcon.js +1 -1
  347. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  348. package/dist/icons/CheckCircleIcon.js +1 -1
  349. package/dist/icons/CheckIcon.js +1 -1
  350. package/dist/icons/CircleFilledIcon.js +1 -1
  351. package/dist/icons/ClearIcon.js +1 -1
  352. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  353. package/dist/icons/CloseCircleIcon.js +1 -1
  354. package/dist/icons/CloseIcon.js +1 -1
  355. package/dist/icons/CodeIcon.js +1 -1
  356. package/dist/icons/ColumnTotalIcon.js +1 -1
  357. package/dist/icons/CopyIcon.js +1 -1
  358. package/dist/icons/CountIcon.js +1 -1
  359. package/dist/icons/CubeIcon.js +1 -1
  360. package/dist/icons/CubePauseIcon.js +1 -1
  361. package/dist/icons/CubePlayIcon.js +1 -1
  362. package/dist/icons/CurrencyDollarIcon.js +1 -1
  363. package/dist/icons/DangerIcon.js +1 -1
  364. package/dist/icons/DashboardIcon.js +1 -1
  365. package/dist/icons/DatabaseIcon.js +1 -1
  366. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  367. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  368. package/dist/icons/DirectionIcon.js +1 -1
  369. package/dist/icons/DonutIcon.js +1 -1
  370. package/dist/icons/DownIcon.js +1 -1
  371. package/dist/icons/EditIcon.js +1 -1
  372. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  373. package/dist/icons/ExclamationCircleIcon.js +1 -1
  374. package/dist/icons/ExclamationIcon.js +1 -1
  375. package/dist/icons/EyeIcon.js +1 -1
  376. package/dist/icons/EyeInvisibleIcon.js +1 -1
  377. package/dist/icons/FilterIcon.js +1 -1
  378. package/dist/icons/FolderFilledIcon.js +1 -1
  379. package/dist/icons/FolderIcon.js +1 -1
  380. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  381. package/dist/icons/FolderOpenIcon.js +1 -1
  382. package/dist/icons/ForwardIcon.js +1 -1
  383. package/dist/icons/GripVerticalIcon.js +1 -1
  384. package/dist/icons/HierarchyIcon.js +1 -1
  385. package/dist/icons/HierarchyOpenIcon.js +1 -1
  386. package/dist/icons/Icon.js +1 -1
  387. package/dist/icons/InfoCircleIcon.js +1 -1
  388. package/dist/icons/InfoIcon.js +1 -1
  389. package/dist/icons/KeyIcon.js +1 -1
  390. package/dist/icons/LeftIcon.js +1 -1
  391. package/dist/icons/LineChartIcon.js +1 -1
  392. package/dist/icons/LoadingIcon.js +1 -1
  393. package/dist/icons/LockFilledIcon.js +1 -1
  394. package/dist/icons/LockIcon.js +1 -1
  395. package/dist/icons/MoreIcon.js +1 -1
  396. package/dist/icons/NotAllowedIcon.js +1 -1
  397. package/dist/icons/Number123Icon.js +1 -1
  398. package/dist/icons/NumberIcon.js +1 -1
  399. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  400. package/dist/icons/PauseCircleIcon.js +1 -1
  401. package/dist/icons/PauseIcon.js +1 -1
  402. package/dist/icons/PercentageIcon.js +1 -1
  403. package/dist/icons/PieChartIcon.js +1 -1
  404. package/dist/icons/PlayCircleIcon.js +1 -1
  405. package/dist/icons/PlayIcon.js +1 -1
  406. package/dist/icons/PlusIcon.js +1 -1
  407. package/dist/icons/ProgressBarIcon.js +1 -1
  408. package/dist/icons/ReloadIcon.js +1 -1
  409. package/dist/icons/ReportIcon.js +1 -1
  410. package/dist/icons/ReturnIcon.js +1 -1
  411. package/dist/icons/RightIcon.js +1 -1
  412. package/dist/icons/RowTotalsIcon.js +1 -1
  413. package/dist/icons/SchemeIcon.js +1 -1
  414. package/dist/icons/SearchIcon.js +1 -1
  415. package/dist/icons/SemanticQueryIcon.js +1 -1
  416. package/dist/icons/SettingsIcon.js +1 -1
  417. package/dist/icons/ShieldFilledIcon.js +1 -1
  418. package/dist/icons/ShieldIcon.js +1 -1
  419. package/dist/icons/SlashIcon.js +1 -1
  420. package/dist/icons/SparklesIcon.js +1 -1
  421. package/dist/icons/SqlIcon.js +1 -1
  422. package/dist/icons/StatsIcon.js +1 -1
  423. package/dist/icons/StopIcon.js +1 -1
  424. package/dist/icons/StringIcon.js +1 -1
  425. package/dist/icons/SubtotalsIcon.js +1 -1
  426. package/dist/icons/SwitchIcon.js +1 -1
  427. package/dist/icons/TableIcon.js +1 -1
  428. package/dist/icons/ThumbsDownIcon.js +1 -1
  429. package/dist/icons/ThumbsUpIcon.js +1 -1
  430. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  431. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  432. package/dist/icons/ThunderboltIcon.js +1 -1
  433. package/dist/icons/TimeIcon.js +1 -1
  434. package/dist/icons/TrashIcon.js +1 -1
  435. package/dist/icons/UnlockIcon.js +1 -1
  436. package/dist/icons/UpIcon.js +1 -1
  437. package/dist/icons/UserGroupIcon.js +1 -1
  438. package/dist/icons/UserIcon.js +1 -1
  439. package/dist/icons/UserLockIcon.js +1 -1
  440. package/dist/icons/ViewIcon.js +1 -1
  441. package/dist/icons/WarningFilledIcon.js +1 -1
  442. package/dist/icons/WarningIcon.js +1 -1
  443. package/dist/icons/index.d.ts +0 -1
  444. package/dist/icons/wrap-icon.js +1 -1
  445. package/dist/index.d.ts +3 -6
  446. package/dist/index.js +9 -12
  447. package/dist/index.js.map +1 -1
  448. package/dist/provider.js +1 -1
  449. package/dist/providers/TrackingProvider.js +1 -1
  450. package/dist/providers/navigationAdapter.default.js +1 -1
  451. package/dist/tokens/base.js +1 -1
  452. package/dist/tokens/colors.js +1 -1
  453. package/dist/tokens/index.js +1 -1
  454. package/dist/tokens/layout.js +1 -1
  455. package/dist/tokens/lazy-styles.js +1 -1
  456. package/dist/tokens/palette-config.js +1 -1
  457. package/dist/tokens/palette.js +1 -1
  458. package/dist/tokens/shadows.js +1 -1
  459. package/dist/tokens/sizes.js +1 -1
  460. package/dist/tokens/spacing.js +1 -1
  461. package/dist/tokens/typography.js +1 -1
  462. package/dist/utils/ResizeSensor.js +1 -1
  463. package/dist/utils/is-dev-env.js +1 -1
  464. package/dist/utils/modules.js +1 -1
  465. package/dist/utils/promise.js +1 -1
  466. package/dist/utils/raf.js +1 -1
  467. package/dist/utils/random.js +1 -1
  468. package/dist/utils/range.js +1 -1
  469. package/dist/utils/react/RenderCache.js +1 -1
  470. package/dist/utils/react/Slots.js +1 -1
  471. package/dist/utils/react/chain.js +1 -1
  472. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  473. package/dist/utils/react/index.js +1 -1
  474. package/dist/utils/react/interactions.js +1 -1
  475. package/dist/utils/react/isTextOnly.js +1 -1
  476. package/dist/utils/react/mapProps.js +1 -1
  477. package/dist/utils/react/mergeProps.js +1 -1
  478. package/dist/utils/react/nullableValue.js +1 -1
  479. package/dist/utils/react/resolveIcon.js +1 -1
  480. package/dist/utils/react/sharedStore.js +1 -1
  481. package/dist/utils/react/useCombinedRefs.js +1 -1
  482. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  483. package/dist/utils/react/useEventBus.js +1 -1
  484. package/dist/utils/react/useId.js +1 -1
  485. package/dist/utils/react/useIsDarwin.js +1 -1
  486. package/dist/utils/react/useKeySymbols.js +1 -1
  487. package/dist/utils/react/useLayoutEffect.js +1 -1
  488. package/dist/utils/react/useLocalStorage.js +1 -1
  489. package/dist/utils/react/useMergeStyles.js +1 -1
  490. package/dist/utils/react/usePopoverSync.js +1 -1
  491. package/dist/utils/react/useQaProps.js +1 -1
  492. package/dist/utils/react/useViewportSize.js +1 -1
  493. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  494. package/dist/utils/selection.js +1 -1
  495. package/dist/utils/styles.js +1 -1
  496. package/dist/utils/tree.js +1 -1
  497. package/dist/utils/warnings.js +1 -1
  498. package/dist/version.js +2 -2
  499. package/docs/components/layout/Board.md +154 -6
  500. package/package.json +1 -1
  501. package/dist/components/fields/ColorPicker/ColorPicker.d.ts +0 -67
  502. package/dist/components/fields/ColorPicker/ColorPicker.js +0 -229
  503. package/dist/components/fields/ColorPicker/ColorPicker.js.map +0 -1
  504. package/dist/components/fields/ColorPicker/ColorPickerPanel.js +0 -149
  505. package/dist/components/fields/ColorPicker/ColorPickerPanel.js.map +0 -1
  506. package/dist/components/fields/ColorPicker/channels.d.ts +0 -13
  507. package/dist/components/fields/ColorPicker/channels.js +0 -194
  508. package/dist/components/fields/ColorPicker/channels.js.map +0 -1
  509. package/dist/components/fields/ColorPicker/color.d.ts +0 -15
  510. package/dist/components/fields/ColorPicker/color.js +0 -282
  511. package/dist/components/fields/ColorPicker/color.js.map +0 -1
  512. package/dist/components/fields/ColorPicker/index.d.ts +0 -4
  513. package/dist/icons/PipetteIcon.d.ts +0 -12
  514. package/dist/icons/PipetteIcon.js +0 -11
  515. package/dist/icons/PipetteIcon.js.map +0 -1
  516. package/docs/components/fields/ColorPicker.md +0 -270
@@ -1,282 +0,0 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-abc7920 | Cube Dev Team */
2
- import { contrastRatioFromLuminance, formatHsl, formatOkhsl, formatOkhst, formatOklch, formatRgb, hslToSrgb, okhslToLinearSrgb, okhslToOkhst, okhslToOklch, okhslToSrgb, okhstToOkhsl, oklabToOkhsl, parseHexAlpha, relativeLuminanceFromLinearRgb, srgbToHex, srgbToOkhsl } from "@tenphi/glaze";
3
-
4
- //#region src/components/fields/ColorPicker/color.ts
5
- /**
6
- * Every color format the picker can read and write.
7
- *
8
- * `okhsl` and `okhst` are Glaze / Tasty spaces rather than native CSS ones,
9
- * but Tasty parses both, so the produced strings are usable as style values.
10
- */
11
- const COLOR_FORMATS = [
12
- "hex",
13
- "rgb",
14
- "hsl",
15
- "okhsl",
16
- "okhst",
17
- "oklch"
18
- ];
19
- const FUNCTION_RE = /^([a-z]+)\(([^()]+)\)$/;
20
- /**
21
- * A number with an optional `%` or `deg` unit.
22
- *
23
- * The integer and fraction parts are deliberately written so that no two
24
- * quantifiers can consume the same digit — `\d+(?:\.\d*)?` rather than
25
- * `\d+\.?\d*`, whose `\d+` and `\d*` can split a digit run n ways and make
26
- * rejecting a long one quadratic. This runs on whatever the user types.
27
- */
28
- const NUMBER_RE = /^[+-]?(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?(?:%|deg)?$/;
29
- /**
30
- * Saturation below this rounds to `0%` in every output notation, so the color
31
- * is achromatic for display purposes even when the conversion left a residue.
32
- */
33
- const ACHROMATIC_SATURATION = 5e-5;
34
- function clamp(value, min, max) {
35
- return value < min ? min : value > max ? max : value;
36
- }
37
- function normalizeHue(hue) {
38
- if (!Number.isFinite(hue)) return 0;
39
- return (hue % 360 + 360) % 360;
40
- }
41
- /**
42
- * The color carries no meaningful hue: every conversion out of it invents an
43
- * angle, so callers that need one should keep the hue they already had.
44
- */
45
- function isAchromatic(color) {
46
- return color.s < ACHROMATIC_SATURATION;
47
- }
48
- /**
49
- * Split a color-function body into its numeric arguments, dropping the alpha
50
- * component. Both the modern space-separated and the legacy comma-separated
51
- * syntaxes are accepted.
52
- *
53
- * Each argument keeps its unit so the caller can tell `50%` from `50`.
54
- */
55
- function splitArguments(body) {
56
- const [values, ...rest] = body.split("/");
57
- if (rest.length > 1) return null;
58
- const args = values.trim().split(values.includes(",") ? "," : /\s+/).map((part) => part.trim()).filter(Boolean);
59
- if (args.length === 4) args.pop();
60
- return args.every((arg) => NUMBER_RE.test(arg)) ? args : null;
61
- }
62
- /** Parse an argument that may carry a `%` unit. `scale` is the 100% value. */
63
- function scalar(arg, scale) {
64
- return arg.endsWith("%") ? parseFloat(arg) / 100 * scale : parseFloat(arg);
65
- }
66
- function hueArgument(arg) {
67
- return arg.endsWith("%") ? NaN : normalizeHue(parseFloat(arg));
68
- }
69
- function fromRgb(color) {
70
- const [h, s, l] = srgbToOkhsl([
71
- clamp(color.r, 0, 255) / 255,
72
- clamp(color.g, 0, 255) / 255,
73
- clamp(color.b, 0, 255) / 255
74
- ]);
75
- return {
76
- h: normalizeHue(h),
77
- s: clamp(s, 0, 1),
78
- l: clamp(l, 0, 1)
79
- };
80
- }
81
- function toRgb(color) {
82
- const [r, g, b] = okhslToSrgb(color.h, color.s, color.l);
83
- return {
84
- r: Math.round(clamp(r, 0, 1) * 255),
85
- g: Math.round(clamp(g, 0, 1) * 255),
86
- b: Math.round(clamp(b, 0, 1) * 255)
87
- };
88
- }
89
- function fromOkhst(color) {
90
- const { h, s, l } = okhstToOkhsl({
91
- h: normalizeHue(color.h),
92
- s: clamp(color.s, 0, 1),
93
- t: clamp(color.t, 0, 1)
94
- });
95
- return {
96
- h: normalizeHue(h),
97
- s: clamp(s, 0, 1),
98
- l: clamp(l, 0, 1)
99
- };
100
- }
101
- function toOkhst(color) {
102
- const { t } = okhslToOkhst(color);
103
- return {
104
- h: color.h,
105
- s: color.s,
106
- t: clamp(t, 0, 1)
107
- };
108
- }
109
- /**
110
- * The largest OKLCh chroma that stays inside the sRGB gamut for the given hue
111
- * and OKHSL lightness — that is exactly what OKHSL saturation `1` means.
112
- */
113
- function maxChroma(hue, lightness) {
114
- return okhslToOklch(normalizeHue(hue), 1, clamp(lightness, 0, 1))[1];
115
- }
116
- function toOklch(color) {
117
- const [l, c, h] = okhslToOklch(color.h, color.s, color.l);
118
- return {
119
- l,
120
- c,
121
- h: normalizeHue(h)
122
- };
123
- }
124
- /**
125
- * OKLCh addresses colors outside the sRGB gamut, so chroma is clipped to the
126
- * gamut boundary at the requested lightness before it is stored. Hue is taken
127
- * from the input rather than from the conversion, which loses it at zero
128
- * chroma.
129
- */
130
- function fromOklch(color) {
131
- const h = normalizeHue(color.h);
132
- const c = Math.max(color.c, 0);
133
- const radians = h * Math.PI / 180;
134
- const [, s, l] = oklabToOkhsl([
135
- clamp(color.l, 0, 1),
136
- c * Math.cos(radians),
137
- c * Math.sin(radians)
138
- ]);
139
- const limit = maxChroma(h, l);
140
- return {
141
- h,
142
- s: limit > 0 ? c >= limit ? 1 : clamp(s, 0, 1) : 0,
143
- l: clamp(l, 0, 1)
144
- };
145
- }
146
- function toHex(color) {
147
- return srgbToHex(okhslToSrgb(color.h, color.s, color.l));
148
- }
149
- /**
150
- * Read any supported color notation into the canonical space. Returns `null`
151
- * for anything that is not a real color — that is what lets the picker reject
152
- * partial input instead of guessing.
153
- *
154
- * Named CSS colors (`red`, `rebeccapurple`) are intentionally not supported,
155
- * matching `glaze.color()`.
156
- */
157
- function parseColor(input) {
158
- const text = input.trim().toLowerCase();
159
- if (!text) return null;
160
- if (text.startsWith("#")) {
161
- const parsed = parseHexAlpha(text);
162
- return parsed ? fromRgb(rgbFromSrgb(parsed.rgb)) : null;
163
- }
164
- const match = FUNCTION_RE.exec(text);
165
- if (!match) return null;
166
- const [, name, body] = match;
167
- const args = splitArguments(body);
168
- if (!args || args.length !== 3) return null;
169
- switch (name) {
170
- case "rgb":
171
- case "rgba": {
172
- const [r, g, b] = args.map((arg) => scalar(arg, 255));
173
- return anyNaN(r, g, b) ? null : fromRgb({
174
- r,
175
- g,
176
- b
177
- });
178
- }
179
- case "hsl":
180
- case "hsla": {
181
- const h = hueArgument(args[0]);
182
- const s = scalar(args[1], 100) / 100;
183
- const l = scalar(args[2], 100) / 100;
184
- if (anyNaN(h, s, l)) return null;
185
- return fromRgb(rgbFromSrgb(hslToSrgb(h, clamp(s, 0, 1), clamp(l, 0, 1))));
186
- }
187
- case "okhsl": {
188
- const h = hueArgument(args[0]);
189
- const s = scalar(args[1], 100) / 100;
190
- const l = scalar(args[2], 100) / 100;
191
- if (anyNaN(h, s, l)) return null;
192
- return {
193
- h,
194
- s: clamp(s, 0, 1),
195
- l: clamp(l, 0, 1)
196
- };
197
- }
198
- case "okhst": {
199
- const h = hueArgument(args[0]);
200
- const s = scalar(args[1], 100) / 100;
201
- const t = scalar(args[2], 100) / 100;
202
- if (anyNaN(h, s, t)) return null;
203
- return fromOkhst({
204
- h,
205
- s,
206
- t
207
- });
208
- }
209
- case "oklch": {
210
- const l = scalar(args[0], 1);
211
- const c = scalar(args[1], .4);
212
- const h = hueArgument(args[2]);
213
- return anyNaN(l, c, h) ? null : fromOklch({
214
- l,
215
- c,
216
- h
217
- });
218
- }
219
- default: return null;
220
- }
221
- }
222
- function anyNaN(...values) {
223
- return values.some((value) => !Number.isFinite(value));
224
- }
225
- function rgbFromSrgb([r, g, b]) {
226
- return {
227
- r: r * 255,
228
- g: g * 255,
229
- b: b * 255
230
- };
231
- }
232
- /** Serialize the canonical color into one of the supported notations. */
233
- function formatColor(color, format) {
234
- const gray = isAchromatic(color);
235
- const hue = gray ? 0 : color.h;
236
- const saturation = color.s * 100;
237
- const lightness = color.l * 100;
238
- switch (format) {
239
- case "rgb": return formatRgb(hue, saturation, lightness);
240
- case "hsl": {
241
- const text = formatHsl(hue, saturation, lightness);
242
- return gray ? text.replace(/\(-?[\d.]+/, "(0") : text;
243
- }
244
- case "okhsl": return formatOkhsl(hue, saturation, lightness);
245
- case "okhst": return formatOkhst(hue, saturation, toOkhst(color).t * 100);
246
- case "oklch": return formatOklch(hue, saturation, lightness);
247
- default: return toHex(color);
248
- }
249
- }
250
- /**
251
- * Which notation a string is written in, or `null` when it is not a color.
252
- * Used to keep the user's own notation while still normalizing the value.
253
- */
254
- function detectFormat(input) {
255
- const text = input.trim().toLowerCase();
256
- if (!parseColor(text)) return null;
257
- if (text.startsWith("#")) return "hex";
258
- switch (FUNCTION_RE.exec(text)?.[1]) {
259
- case "rgb":
260
- case "rgba": return "rgb";
261
- case "hsl":
262
- case "hsla": return "hsl";
263
- case "okhsl": return "okhsl";
264
- case "okhst": return "okhst";
265
- case "oklch": return "oklch";
266
- default: return null;
267
- }
268
- }
269
- /**
270
- * Black or white — whichever the WCAG contrast ratio favors on the given
271
- * color. Keeps the popover preview label readable at any lightness. Returns a
272
- * literal hex rather than a token, because the answer is measured against this
273
- * exact fill and must not adapt with the color scheme.
274
- */
275
- function getContrastingColor(color) {
276
- const luminance = relativeLuminanceFromLinearRgb(okhslToLinearSrgb(color.h, color.s, color.l));
277
- return contrastRatioFromLuminance(luminance, 0) >= contrastRatioFromLuminance(1, luminance) ? "#000000" : "#ffffff";
278
- }
279
-
280
- //#endregion
281
- export { COLOR_FORMATS, detectFormat, formatColor, fromOkhst, fromOklch, fromRgb, getContrastingColor, isAchromatic, maxChroma, normalizeHue, parseColor, toHex, toOkhst, toOklch, toRgb };
282
- //# sourceMappingURL=color.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"color.js","names":[],"sources":["../../../../src/components/fields/ColorPicker/color.ts"],"sourcesContent":["import {\n contrastRatioFromLuminance,\n formatHsl,\n formatOkhsl,\n formatOkhst,\n formatOklch,\n formatRgb,\n hslToSrgb,\n okhslToLinearSrgb,\n okhslToOkhst,\n okhslToOklch,\n okhslToSrgb,\n okhstToOkhsl,\n oklabToOkhsl,\n parseHexAlpha,\n relativeLuminanceFromLinearRgb,\n srgbToHex,\n srgbToOkhsl,\n} from '@tenphi/glaze';\n\nimport type {\n OkhslColor,\n OkhstColor,\n OklchColor,\n RgbColor,\n} from '@tenphi/glaze';\n\nexport type { OkhslColor, OkhstColor, OklchColor, RgbColor };\n\n/**\n * Every color format the picker can read and write.\n *\n * `okhsl` and `okhst` are Glaze / Tasty spaces rather than native CSS ones,\n * but Tasty parses both, so the produced strings are usable as style values.\n */\nexport const COLOR_FORMATS = [\n 'hex',\n 'rgb',\n 'hsl',\n 'okhsl',\n 'okhst',\n 'oklch',\n] as const;\n\nexport type ColorFormat = (typeof COLOR_FORMATS)[number];\n\n/**\n * OKHSL is the canonical space of the picker: it is Glaze's authoring space,\n * every channel is bounded, and — unlike OKLCh — every value inside those\n * bounds is inside the sRGB gamut, so no state can be unrepresentable.\n */\nexport type ColorValue = OkhslColor;\n\nconst FUNCTION_RE = /^([a-z]+)\\(([^()]+)\\)$/;\n/**\n * A number with an optional `%` or `deg` unit.\n *\n * The integer and fraction parts are deliberately written so that no two\n * quantifiers can consume the same digit — `\\d+(?:\\.\\d*)?` rather than\n * `\\d+\\.?\\d*`, whose `\\d+` and `\\d*` can split a digit run n ways and make\n * rejecting a long one quadratic. This runs on whatever the user types.\n */\nconst NUMBER_RE = /^[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?(?:%|deg)?$/;\n\n/**\n * Saturation below this rounds to `0%` in every output notation, so the color\n * is achromatic for display purposes even when the conversion left a residue.\n */\nconst ACHROMATIC_SATURATION = 5e-5;\n\nfunction clamp(value: number, min: number, max: number): number {\n return value < min ? min : value > max ? max : value;\n}\n\nexport function normalizeHue(hue: number): number {\n if (!Number.isFinite(hue)) return 0;\n\n return ((hue % 360) + 360) % 360;\n}\n\n/**\n * The color carries no meaningful hue: every conversion out of it invents an\n * angle, so callers that need one should keep the hue they already had.\n */\nexport function isAchromatic(color: ColorValue): boolean {\n return color.s < ACHROMATIC_SATURATION;\n}\n\n/** Both channel objects describe the same color, within display precision. */\nexport function isSameColor(a?: ColorValue | null, b?: ColorValue | null) {\n if (!a || !b) return a === b;\n\n return (\n Math.abs(a.h - b.h) < 1e-6 &&\n Math.abs(a.s - b.s) < 1e-6 &&\n Math.abs(a.l - b.l) < 1e-6\n );\n}\n\n/**\n * Split a color-function body into its numeric arguments, dropping the alpha\n * component. Both the modern space-separated and the legacy comma-separated\n * syntaxes are accepted.\n *\n * Each argument keeps its unit so the caller can tell `50%` from `50`.\n */\nfunction splitArguments(body: string): string[] | null {\n const [values, ...rest] = body.split('/');\n\n // More than one slash is never valid syntax.\n if (rest.length > 1) return null;\n\n const args = values\n .trim()\n .split(values.includes(',') ? ',' : /\\s+/)\n .map((part) => part.trim())\n .filter(Boolean);\n\n // Legacy `rgba(r, g, b, a)` / `hsla(h, s, l, a)` carry alpha as a fourth\n // argument. Alpha is not part of the value, so it is dropped either way.\n if (args.length === 4) args.pop();\n\n return args.every((arg) => NUMBER_RE.test(arg)) ? args : null;\n}\n\n/** Parse an argument that may carry a `%` unit. `scale` is the 100% value. */\nfunction scalar(arg: string, scale: number): number {\n return arg.endsWith('%') ? (parseFloat(arg) / 100) * scale : parseFloat(arg);\n}\n\nfunction hueArgument(arg: string): number {\n // A percentage is not a valid hue angle.\n return arg.endsWith('%') ? NaN : normalizeHue(parseFloat(arg));\n}\n\nexport function fromRgb(color: RgbColor): ColorValue {\n const [h, s, l] = srgbToOkhsl([\n clamp(color.r, 0, 255) / 255,\n clamp(color.g, 0, 255) / 255,\n clamp(color.b, 0, 255) / 255,\n ]);\n\n return { h: normalizeHue(h), s: clamp(s, 0, 1), l: clamp(l, 0, 1) };\n}\n\nexport function toRgb(color: ColorValue): RgbColor {\n const [r, g, b] = okhslToSrgb(color.h, color.s, color.l);\n\n return {\n r: Math.round(clamp(r, 0, 1) * 255),\n g: Math.round(clamp(g, 0, 1) * 255),\n b: Math.round(clamp(b, 0, 1) * 255),\n };\n}\n\nexport function fromOkhst(color: OkhstColor): ColorValue {\n const { h, s, l } = okhstToOkhsl({\n h: normalizeHue(color.h),\n s: clamp(color.s, 0, 1),\n t: clamp(color.t, 0, 1),\n });\n\n return { h: normalizeHue(h), s: clamp(s, 0, 1), l: clamp(l, 0, 1) };\n}\n\nexport function toOkhst(color: ColorValue): OkhstColor {\n const { t } = okhslToOkhst(color);\n\n return { h: color.h, s: color.s, t: clamp(t, 0, 1) };\n}\n\n/**\n * The largest OKLCh chroma that stays inside the sRGB gamut for the given hue\n * and OKHSL lightness — that is exactly what OKHSL saturation `1` means.\n */\nexport function maxChroma(hue: number, lightness: number): number {\n return okhslToOklch(normalizeHue(hue), 1, clamp(lightness, 0, 1))[1];\n}\n\nexport function toOklch(color: ColorValue): OklchColor {\n const [l, c, h] = okhslToOklch(color.h, color.s, color.l);\n\n return { l, c, h: normalizeHue(h) };\n}\n\n/**\n * OKLCh addresses colors outside the sRGB gamut, so chroma is clipped to the\n * gamut boundary at the requested lightness before it is stored. Hue is taken\n * from the input rather than from the conversion, which loses it at zero\n * chroma.\n */\nexport function fromOklch(color: OklchColor): ColorValue {\n const h = normalizeHue(color.h);\n const c = Math.max(color.c, 0);\n const radians = (h * Math.PI) / 180;\n const [, s, l] = oklabToOkhsl([\n clamp(color.l, 0, 1),\n c * Math.cos(radians),\n c * Math.sin(radians),\n ]);\n const limit = maxChroma(h, l);\n\n return {\n h,\n s: limit > 0 ? (c >= limit ? 1 : clamp(s, 0, 1)) : 0,\n l: clamp(l, 0, 1),\n };\n}\n\nexport function toHex(color: ColorValue): string {\n return srgbToHex(okhslToSrgb(color.h, color.s, color.l));\n}\n\n/**\n * Read any supported color notation into the canonical space. Returns `null`\n * for anything that is not a real color — that is what lets the picker reject\n * partial input instead of guessing.\n *\n * Named CSS colors (`red`, `rebeccapurple`) are intentionally not supported,\n * matching `glaze.color()`.\n */\nexport function parseColor(input: string): ColorValue | null {\n const text = input.trim().toLowerCase();\n\n if (!text) return null;\n\n if (text.startsWith('#')) {\n const parsed = parseHexAlpha(text);\n\n return parsed ? fromRgb(rgbFromSrgb(parsed.rgb)) : null;\n }\n\n const match = FUNCTION_RE.exec(text);\n\n if (!match) return null;\n\n const [, name, body] = match;\n const args = splitArguments(body);\n\n if (!args || args.length !== 3) return null;\n\n switch (name) {\n case 'rgb':\n case 'rgba': {\n const [r, g, b] = args.map((arg) => scalar(arg, 255));\n\n return anyNaN(r, g, b) ? null : fromRgb({ r, g, b });\n }\n case 'hsl':\n case 'hsla': {\n const h = hueArgument(args[0]);\n const s = scalar(args[1], 100) / 100;\n const l = scalar(args[2], 100) / 100;\n\n if (anyNaN(h, s, l)) return null;\n\n return fromRgb(rgbFromSrgb(hslToSrgb(h, clamp(s, 0, 1), clamp(l, 0, 1))));\n }\n case 'okhsl': {\n const h = hueArgument(args[0]);\n const s = scalar(args[1], 100) / 100;\n const l = scalar(args[2], 100) / 100;\n\n if (anyNaN(h, s, l)) return null;\n\n return { h, s: clamp(s, 0, 1), l: clamp(l, 0, 1) };\n }\n case 'okhst': {\n const h = hueArgument(args[0]);\n const s = scalar(args[1], 100) / 100;\n const t = scalar(args[2], 100) / 100;\n\n if (anyNaN(h, s, t)) return null;\n\n return fromOkhst({ h, s, t });\n }\n case 'oklch': {\n // In `oklch()` a percentage means 1 for lightness and 0.4 for chroma.\n const l = scalar(args[0], 1);\n const c = scalar(args[1], 0.4);\n const h = hueArgument(args[2]);\n\n return anyNaN(l, c, h) ? null : fromOklch({ l, c, h });\n }\n default:\n return null;\n }\n}\n\nfunction anyNaN(...values: number[]): boolean {\n return values.some((value) => !Number.isFinite(value));\n}\n\nfunction rgbFromSrgb([r, g, b]: [number, number, number]): RgbColor {\n return { r: r * 255, g: g * 255, b: b * 255 };\n}\n\n/** Serialize the canonical color into one of the supported notations. */\nexport function formatColor(color: ColorValue, format: ColorFormat): string {\n // An achromatic color has no meaningful hue, and the conversions leave\n // whatever angle the source happened to carry. Zero reads better.\n const gray = isAchromatic(color);\n const hue = gray ? 0 : color.h;\n const saturation = color.s * 100;\n const lightness = color.l * 100;\n\n switch (format) {\n case 'rgb':\n return formatRgb(hue, saturation, lightness);\n case 'hsl': {\n const text = formatHsl(hue, saturation, lightness);\n\n // CSS HSL derives its hue from the sRGB channels, which is undefined\n // when they are equal — Glaze emits whatever the formula produces. Every\n // other notation carries the hue through, so only HSL needs this.\n return gray ? text.replace(/\\(-?[\\d.]+/, '(0') : text;\n }\n case 'okhsl':\n return formatOkhsl(hue, saturation, lightness);\n case 'okhst':\n return formatOkhst(hue, saturation, toOkhst(color).t * 100);\n case 'oklch':\n return formatOklch(hue, saturation, lightness);\n default:\n return toHex(color);\n }\n}\n\n/**\n * Which notation a string is written in, or `null` when it is not a color.\n * Used to keep the user's own notation while still normalizing the value.\n */\nexport function detectFormat(input: string): ColorFormat | null {\n const text = input.trim().toLowerCase();\n\n if (!parseColor(text)) return null;\n\n if (text.startsWith('#')) return 'hex';\n\n const name = FUNCTION_RE.exec(text)?.[1];\n\n switch (name) {\n case 'rgb':\n case 'rgba':\n return 'rgb';\n case 'hsl':\n case 'hsla':\n return 'hsl';\n case 'okhsl':\n return 'okhsl';\n case 'okhst':\n return 'okhst';\n case 'oklch':\n return 'oklch';\n default:\n return null;\n }\n}\n\n/**\n * Black or white — whichever the WCAG contrast ratio favors on the given\n * color. Keeps the popover preview label readable at any lightness. Returns a\n * literal hex rather than a token, because the answer is measured against this\n * exact fill and must not adapt with the color scheme.\n */\nexport function getContrastingColor(color: ColorValue): '#000000' | '#ffffff' {\n const luminance = relativeLuminanceFromLinearRgb(\n okhslToLinearSrgb(color.h, color.s, color.l),\n );\n\n return contrastRatioFromLuminance(luminance, 0) >=\n contrastRatioFromLuminance(1, luminance)\n ? '#000000'\n : '#ffffff';\n}\n"],"mappings":"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"}
@@ -1,4 +0,0 @@
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";
@@ -1,12 +0,0 @@
1
-
2
- import { CubeIconProps } from "./Icon.js";
3
- import * as react_jsx_runtime0 from "react/jsx-runtime";
4
-
5
- //#region src/icons/PipetteIcon.d.ts
6
- declare const PipetteIcon: {
7
- (props: CubeIconProps): react_jsx_runtime0.JSX.Element;
8
- displayName: string;
9
- };
10
- //#endregion
11
- export { PipetteIcon };
12
- //# sourceMappingURL=PipetteIcon.d.ts.map
@@ -1,11 +0,0 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-abc7920 | Cube Dev Team */
2
- import { wrapIcon } from "./wrap-icon.js";
3
- import { jsx } from "react/jsx-runtime";
4
- import { IconColorPicker } from "@tabler/icons-react";
5
-
6
- //#region src/icons/PipetteIcon.tsx
7
- const PipetteIcon = wrapIcon("PipetteIcon", /* @__PURE__ */ jsx(IconColorPicker, {}));
8
-
9
- //#endregion
10
- export { PipetteIcon };
11
- //# sourceMappingURL=PipetteIcon.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PipetteIcon.js","names":[],"sources":["../../src/icons/PipetteIcon.tsx"],"sourcesContent":["import { IconColorPicker } from '@tabler/icons-react';\n\nimport { wrapIcon } from './wrap-icon';\n\nexport const PipetteIcon = wrapIcon('PipetteIcon', <IconColorPicker />);\n"],"mappings":";;;;;;AAIA,MAAa,cAAc,SAAS,eAAe,oBAAC,oBAAkB,CAAC"}
@@ -1,270 +0,0 @@
1
- # ColorPicker
2
-
3
- An input for a single color. It reads and writes color **text** — hex, `rgb()`,
4
- `hsl()`, `okhsl()`, `okhst()` and `oklch()` — shows the current color as a
5
- swatch, and opens a popover where the color can be dialed in on three
6
- perceptual axes.
7
-
8
- Every conversion goes through [Glaze](https://github.com/tenphi/glaze), so the
9
- canonical value the picker holds is OKHSL: bounded on every channel, and always
10
- inside the sRGB gamut. That is what makes an out-of-gamut state impossible and
11
- lets the same value be re-serialized into any of the supported notations without
12
- drift.
13
-
14
- ## When to Use
15
-
16
- - Theme and branding forms — a seed color, an accent, a chart series color
17
- - Anywhere a color has to be typed *or* explored, rather than chosen from a
18
- fixed palette
19
- - When the stored format matters (a design token file wants `oklch()`, a legacy
20
- API wants hex) and the input has to guarantee it
21
-
22
- Reach for a `RadioGroup` or `Picker` of swatches instead when the choice is
23
- limited to a handful of approved colors.
24
-
25
- ## Component
26
-
27
- ---
28
-
29
- ### Properties
30
-
31
- - **`value`** `string | null` — The selected color (controlled)
32
- - **`defaultValue`** `string | null` — The selected color (uncontrolled)
33
- - **`onChange`** `(value: string | null) => void` — Fired with the color string, or `null` when the field is cleared
34
- - **`format`** `'hex' | 'rgb' | 'hsl' | 'okhsl' | 'okhst' | 'oklch'` (default: `hex`) — Notation the value is written in, and the one `forced` mode displays
35
- - **`formatMode`** `'forced' | 'derive' | 'free'` (default: `forced`) — How strictly the input text is tied to `format`
36
- - **`defaultSpace`** `'hst' | 'lch' | 'rgb'` (default: `hst`) — Color concept the popover opens with
37
- - **`placeholder`** `string` (default: `Pick a color`) — Text shown while the field is empty
38
- - **`size`** `'small' | 'medium' | 'large' | (string & {})` (default: `medium`) — Input size
39
- - **`isOpen`** `boolean` — Whether the popover is open (controlled)
40
- - **`defaultOpen`** `boolean` (default: `false`) — Whether the popover is open initially
41
- - **`onOpenChange`** `(isOpen: boolean) => void` — Fired when the popover opens or closes
42
- - **`shouldFlip`** `boolean` (default: `true`) — Whether the popover may flip to the other side of the input
43
- - **`onFocus`** `(event: FocusEvent) => void` — Fired when the text input receives focus
44
- - **`onBlur`** `(event: FocusEvent) => void` — Fired when the text input loses focus
45
-
46
- Named CSS colors (`red`, `rebeccapurple`) are **not** accepted — they are not a
47
- color space, and Glaze does not resolve them either. Alpha is parsed but
48
- dropped: the value is always opaque.
49
-
50
- Focusing the field selects the whole value, so a pasted color replaces it
51
- outright. The string is the unit of editing here: a single channel is tuned with
52
- the sliders rather than by hand-editing one number inside `oklch(…)`. Dragging
53
- across the text still selects a range of your own.
54
-
55
- ### Base Properties
56
-
57
- Supports [Base properties](../../BaseProperties.md)
58
-
59
- ### Field Properties
60
-
61
- Supports all [Field properties](../../FieldProperties.md)
62
-
63
- ### Styling Properties
64
-
65
- #### styles
66
-
67
- Customizes the input wrapper — the element that owns the border, fill and size.
68
-
69
- **Sub-elements:**
70
-
71
- - `Prefix` — the container holding the color swatch
72
- - `Suffix` — the container holding the validation state, then the popover trigger
73
- - `InputIcon` — the swatch slot
74
- - `State` — the validation / loading indicator
75
-
76
- #### inputStyles
77
-
78
- Customizes the `<input>` element itself.
79
-
80
- #### triggerStyles
81
-
82
- Customizes the popover trigger button.
83
-
84
- #### swatchStyles
85
-
86
- Customizes the color swatch shown inside the input.
87
-
88
- ### Style Properties
89
-
90
- These properties allow direct style application without using the `styles` prop:
91
-
92
- - **Base:** `display`, `font`, `preset`, `hide`, `whiteSpace`, `opacity`, `transition`
93
- - **Position:** `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `zIndex`, `margin`, `inset`, `position`, `scrollMargin`
94
- - **Dimension:** `width`, `height`, `flexBasis`, `flexGrow`, `flexShrink`, `flex`
95
- - **Block:** `border`, `radius`, `shadow`, `outline`, `padding`, `paddingInline`, `paddingBlock`, `overflow`, `scrollbar`, `textAlign`
96
- - **Color:** `color`, `fill`, `fade`, `image`
97
-
98
- ### Modifiers
99
-
100
- The `mods` property accepts the following modifiers you can override:
101
-
102
- | Modifier | Type | Description |
103
- | ---------- | --------- | ------------------------------------------------- |
104
- | `focused` | `boolean` | The text input has focus |
105
- | `hovered` | `boolean` | The pointer is over the input |
106
- | `disabled` | `boolean` | The picker is disabled |
107
- | `valid` | `boolean` | The field is in the valid state |
108
- | `invalid` | `boolean` | The field is in the invalid state |
109
- | `prefix` | `boolean` | A prefix (the swatch) is rendered |
110
- | `suffix` | `boolean` | A suffix (the trigger) is rendered |
111
-
112
- The swatch carries its own `empty` modifier while there is no color to show.
113
-
114
- ## Format modes
115
-
116
- The three modes differ in how much freedom the *text* gets. The value is always
117
- a real color in every one of them.
118
-
119
- | Mode | Text | Value |
120
- | -------- | ----------------------------------- | ---------------------------------------------------- |
121
- | `forced` | Rewritten in `format` on blur/Enter | Always written in `format` |
122
- | `derive` | Left exactly as typed | Normalized in the notation the text is written in |
123
- | `free` | Left exactly as typed | The text itself, verbatim |
124
-
125
- In every mode an entry that is not a color is rejected: the previous valid color
126
- stays the value while it is being typed, and the text snaps back to it on blur.
127
- Emptying the field is not an error — it commits `null`.
128
-
129
- ```jsx
130
- // A design-token form that must store OKLCH
131
- <ColorPicker label="Accent" format="oklch" onChange={setAccent} />
132
-
133
- // A CSS editor: keep whatever the author wrote, but guarantee it parses
134
- <ColorPicker label="Color" formatMode="free" onChange={setCss} />
135
- ```
136
-
137
- ## Color spaces
138
-
139
- The popover edits one canonical color through three sets of axes:
140
-
141
- | Space | Axes | Good for |
142
- | ----- | ----------------------------- | ----------------------------------------------------- |
143
- | `hst` | Hue, Saturation, Tone (OKHST) | Building ramps — equal tone steps read as equal steps |
144
- | `lch` | Lightness, Chroma, Hue (OKLCH)| Matching a value from a design-token file |
145
- | `rgb` | Red, Green, Blue | Matching a value from a legacy palette or a screenshot|
146
-
147
- Each of these opens on its own space; the switcher inside the popover moves
148
- between them at any time.
149
-
150
- `H` means the same angle in HST and LCH, so the hue strip is identical in both.
151
- The chroma slider is bounded by the sRGB gamut at the current lightness and hue,
152
- which is why its range changes as `L` moves.
153
-
154
- ## Examples
155
-
156
- ### Basic usage
157
-
158
- ```jsx
159
- <ColorPicker label="Brand color" defaultValue="#7a4dbf" />
160
- ```
161
-
162
- ### Controlled
163
-
164
- ```jsx
165
- const [color, setColor] = useState('#7a4dbf');
166
-
167
- <ColorPicker label="Brand color" value={color} onChange={setColor} />;
168
- ```
169
-
170
- ### Inside a form
171
-
172
- ```jsx
173
- <Form onSubmit={onSubmit}>
174
- <ColorPicker
175
- name="accent"
176
- label="Accent color"
177
- format="oklch"
178
- rules={[{ required: true, message: 'Pick an accent color' }]}
179
- />
180
- </Form>
181
- ```
182
-
183
- ### Opening on a specific space
184
-
185
- ```jsx
186
- <ColorPicker label="Series color" defaultSpace="rgb" defaultValue="#26fcb2" />
187
- ```
188
-
189
- ### Using the value as a style
190
-
191
- Because the emitted value is a plain color string, it can go straight into a
192
- tasty style — including the `okhsl()` and `okhst()` notations, which tasty
193
- parses natively.
194
-
195
- ```jsx
196
- const [color, setColor] = useState('okhst(264 80% 60%)');
197
-
198
- <>
199
- <ColorPicker label="Fill" format="okhst" value={color} onChange={setColor} />
200
- <Block fill={color} height="10x" radius="1r" />
201
- </>;
202
- ```
203
-
204
- ## Accessibility
205
-
206
- ### Keyboard Navigation
207
-
208
- - `Tab` — moves focus to the text input, then to the popover trigger
209
- - `Enter` — commits and normalizes the typed color without leaving the field
210
- - `Space` / `Enter` on the trigger — opens the popover
211
- - `Escape` — closes the popover
212
- - `Left` / `Right`, `Home` / `End` on a channel slider — moves that channel
213
- - `Left` / `Right` on the space switcher — moves between HST, LCH and RGB
214
-
215
- ### Screen Reader Support
216
-
217
- - The text input announces as a textbox with the field's label
218
- - The trigger announces as "Open the color picker"
219
- - The popover announces as a dialog named "Color picker"
220
- - Each channel slider sits in a group named after its axis (`Hue`,
221
- `Saturation`, `Tone`, `Lightness`, `Chroma`, `Red`, `Green`, `Blue`)
222
- - The swatch is decorative and is not announced — the text carries the value
223
-
224
- ### ARIA Properties
225
-
226
- - `aria-label` — names the field when there is no visible label
227
- - `aria-describedby` — wired to the field description by the form system
228
-
229
- ## Best Practices
230
-
231
- 1. **Do**: name the field, so the text input is announced meaningfully
232
-
233
- ```jsx
234
- <ColorPicker label="Brand color" />
235
- ```
236
-
237
- 2. **Don't**: rely on the swatch alone to convey the value
238
-
239
- ```jsx
240
- <ColorPicker aria-label="" />
241
- ```
242
-
243
- 3. **Do**: pick the `format` your backend stores, and leave `formatMode` at
244
- `forced` so the two can never disagree.
245
-
246
- 4. **Don't**: use `free` mode when the value is later parsed by something
247
- stricter than a browser — the text is passed through as written.
248
-
249
- ## Integration with Forms
250
-
251
- This component supports all
252
- [Field properties](../../FieldProperties.md) when used
253
- within a Form. The field value is the color string, and clearing the input
254
- stores `null`, which makes `required` rules behave as expected.
255
-
256
- ## Suggested Improvements
257
-
258
- - An eyedropper that samples a pixel from the page, where
259
- [`EyeDropper`](https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper) is
260
- available
261
- - Optional alpha support, which the canonical value currently drops
262
- - A row of recent or preset swatches inside the popover
263
- - Editable numeric inputs next to each channel slider, for exact entry without
264
- going through the text field
265
-
266
- ## Related Components
267
-
268
- - [HueSlider](./HueSlider.md) — just the hue axis, when only a hue is needed
269
- - [Slider](./Slider.md) — the primitive each channel is built from
270
- - [TextInput](./TextInput.md) — the input chrome this component reuses