@cube-dev/ui-kit 0.83.3 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/es/_internal/hooks/index.js +1 -1
  3. package/es/_internal/hooks/use-chained-callback.js +1 -1
  4. package/es/_internal/hooks/use-debounced-value.js +1 -1
  5. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/es/_internal/hooks/use-effect-once.js +1 -1
  7. package/es/_internal/hooks/use-event.js +1 -1
  8. package/es/_internal/hooks/use-is-first-render.js +1 -1
  9. package/es/_internal/hooks/use-sync-ref.js +1 -1
  10. package/es/_internal/hooks/use-timer/index.js +1 -1
  11. package/es/_internal/hooks/use-timer/timer.js +1 -1
  12. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  13. package/es/_internal/hooks/use-update-effect.js +1 -1
  14. package/es/_internal/hooks/use-warn.js +1 -1
  15. package/es/_internal/index.js +1 -1
  16. package/es/components/Block.js +1 -1
  17. package/es/components/GlobalStyles.js +1 -1
  18. package/es/components/GridProvider.js +1 -1
  19. package/es/components/HiddenInput.js +1 -1
  20. package/es/components/Item.js +7 -2
  21. package/es/components/OpenTrasition.js +1 -1
  22. package/es/components/Root.js +1 -1
  23. package/es/components/actions/Action/Action.js +1 -1
  24. package/es/components/actions/Button/Button.js +1 -1
  25. package/es/components/actions/Button/index.js +1 -1
  26. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  27. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  28. package/es/components/actions/CommandMenu/index.js +1 -1
  29. package/es/components/actions/CommandMenu/styled.js +1 -1
  30. package/es/components/actions/ItemAction/ItemAction.js +127 -12
  31. package/es/components/actions/ItemAction/index.js +1 -1
  32. package/es/components/actions/ItemActionContext.js +25 -0
  33. package/es/components/actions/ItemButton/ItemButton.js +102 -6
  34. package/es/components/actions/ItemButton/index.js +1 -1
  35. package/es/components/actions/Link/Link.js +1 -1
  36. package/es/components/actions/Menu/Menu.js +1 -1
  37. package/es/components/actions/Menu/MenuItem.js +3 -3
  38. package/es/components/actions/Menu/MenuSection.js +1 -1
  39. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  40. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  41. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  42. package/es/components/actions/Menu/context.js +1 -1
  43. package/es/components/actions/Menu/index.js +1 -1
  44. package/es/components/actions/Menu/styled.js +1 -1
  45. package/es/components/actions/index.js +2 -1
  46. package/es/components/actions/use-action.js +1 -1
  47. package/es/components/actions/use-anchored-menu.js +1 -1
  48. package/es/components/actions/use-context-menu.js +1 -1
  49. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  50. package/es/components/content/Alert/Alert.js +1 -1
  51. package/es/components/content/Alert/index.js +1 -1
  52. package/es/components/content/Alert/types.js +1 -1
  53. package/es/components/content/Alert/use-alert.js +1 -1
  54. package/es/components/content/Avatar/Avatar.js +1 -1
  55. package/es/components/content/Badge/Badge.js +1 -1
  56. package/es/components/content/Card/Card.js +1 -1
  57. package/es/components/content/Content.js +1 -1
  58. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  59. package/es/components/content/CopyPasteBlock/index.js +1 -1
  60. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  61. package/es/components/content/CopySnippet/index.js +1 -1
  62. package/es/components/content/Divider.js +1 -1
  63. package/es/components/content/Footer.js +1 -1
  64. package/es/components/content/Header.js +1 -1
  65. package/es/components/content/HotKeys/HotKeys.js +1 -1
  66. package/es/components/content/HotKeys/index.js +1 -1
  67. package/es/components/content/ItemBadge/ItemBadge.js +119 -0
  68. package/es/components/content/ItemBadge/index.js +10 -0
  69. package/es/components/content/ItemBase/ItemBase.js +92 -22
  70. package/es/components/content/ItemBase/index.js +2 -1
  71. package/es/components/content/List/SectionHeading.js +1 -1
  72. package/es/components/content/List/index.js +1 -1
  73. package/es/components/content/Paragraph.js +1 -1
  74. package/es/components/content/Placeholder/Placeholder.js +1 -1
  75. package/es/components/content/PrismCode/PrismCode.js +1 -1
  76. package/es/components/content/PrismCode/prismSetup.js +1 -1
  77. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  78. package/es/components/content/Result/Result.js +1 -1
  79. package/es/components/content/Skeleton/Skeleton.js +1 -1
  80. package/es/components/content/Tag/Tag.js +1 -1
  81. package/es/components/content/Text.js +1 -1
  82. package/es/components/content/Title.js +1 -1
  83. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  84. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  85. package/es/components/fields/Checkbox/context.js +1 -1
  86. package/es/components/fields/Checkbox/index.js +1 -1
  87. package/es/components/fields/ComboBox/ComboBox.js +225 -134
  88. package/es/components/fields/ComboBox/index.js +1 -1
  89. package/es/components/fields/DatePicker/DateInput.js +1 -1
  90. package/es/components/fields/DatePicker/DateInputBase.js +4 -3
  91. package/es/components/fields/DatePicker/DatePicker.js +2 -3
  92. package/es/components/fields/DatePicker/DatePickerButton.js +3 -8
  93. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  94. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  95. package/es/components/fields/DatePicker/DatePickerSegment.js +3 -1
  96. package/es/components/fields/DatePicker/DateRangePicker.js +2 -3
  97. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +9 -5
  98. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  99. package/es/components/fields/DatePicker/index.js +1 -1
  100. package/es/components/fields/DatePicker/intl.js +1 -1
  101. package/es/components/fields/DatePicker/parseDate.js +1 -1
  102. package/es/components/fields/DatePicker/props.js +1 -1
  103. package/es/components/fields/DatePicker/types.js +1 -1
  104. package/es/components/fields/DatePicker/utils.js +1 -1
  105. package/es/components/fields/FileInput/FileInput.js +1 -1
  106. package/es/components/fields/FilterListBox/FilterListBox.js +4 -7
  107. package/es/components/fields/FilterListBox/index.js +1 -1
  108. package/es/components/fields/FilterPicker/FilterPicker.js +4 -5
  109. package/es/components/fields/FilterPicker/index.js +1 -1
  110. package/es/components/fields/Input/Input.js +1 -1
  111. package/es/components/fields/Input/index.js +1 -1
  112. package/es/components/fields/LegacyComboBox/LegacyComboBox.js +1 -1
  113. package/es/components/fields/LegacyComboBox/index.js +1 -1
  114. package/es/components/fields/ListBox/ListBox.js +7 -6
  115. package/es/components/fields/ListBox/index.js +1 -1
  116. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  117. package/es/components/fields/NumberInput/StepButton.js +1 -1
  118. package/es/components/fields/PasswordInput/PasswordInput.js +3 -3
  119. package/es/components/fields/Picker/Picker.js +418 -0
  120. package/es/components/fields/Picker/index.js +10 -0
  121. package/es/components/fields/RadioGroup/Radio.js +1 -1
  122. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  123. package/es/components/fields/RadioGroup/context.js +1 -1
  124. package/es/components/fields/RadioGroup/index.js +1 -1
  125. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  126. package/es/components/fields/SearchInput/index.js +1 -1
  127. package/es/components/fields/Select/Select.js +29 -27
  128. package/es/components/fields/Select/index.js +1 -1
  129. package/es/components/fields/Slider/Gradation.js +1 -1
  130. package/es/components/fields/Slider/Header.js +1 -1
  131. package/es/components/fields/Slider/RangeSlider.js +1 -1
  132. package/es/components/fields/Slider/Slider.js +1 -1
  133. package/es/components/fields/Slider/SliderBase.js +1 -1
  134. package/es/components/fields/Slider/SliderInput.js +1 -1
  135. package/es/components/fields/Slider/SliderThumb.js +1 -1
  136. package/es/components/fields/Slider/SliderTrack.js +1 -1
  137. package/es/components/fields/Slider/elements.js +1 -1
  138. package/es/components/fields/Slider/index.js +1 -1
  139. package/es/components/fields/Slider/types.js +1 -1
  140. package/es/components/fields/Switch/Switch.js +1 -1
  141. package/es/components/fields/Switch/index.js +1 -1
  142. package/es/components/fields/TextArea/TextArea.js +1 -1
  143. package/es/components/fields/TextArea/index.js +1 -1
  144. package/es/components/fields/TextInput/TextInput.js +1 -1
  145. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  146. package/es/components/fields/TextInput/index.js +1 -1
  147. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  148. package/es/components/fields/TextInputMapper/index.js +1 -1
  149. package/es/components/fields/index.js +2 -1
  150. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  151. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  152. package/es/components/form/FieldWrapper/index.js +1 -1
  153. package/es/components/form/FieldWrapper/types.js +1 -1
  154. package/es/components/form/Form/Field.js +1 -1
  155. package/es/components/form/Form/Form.js +1 -1
  156. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  157. package/es/components/form/Form/ResetButton/index.js +1 -1
  158. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  159. package/es/components/form/Form/SubmitButton/index.js +1 -1
  160. package/es/components/form/Form/SubmitError.js +1 -1
  161. package/es/components/form/Form/index.js +1 -1
  162. package/es/components/form/Form/types.js +1 -1
  163. package/es/components/form/Form/use-field/index.js +1 -1
  164. package/es/components/form/Form/use-field/types.js +1 -1
  165. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  166. package/es/components/form/Form/use-field/use-field.js +3 -1
  167. package/es/components/form/Form/use-form.js +1 -1
  168. package/es/components/form/Form/validation.js +1 -1
  169. package/es/components/form/Label.js +1 -1
  170. package/es/components/form/index.js +1 -1
  171. package/es/components/form/wrapper.js +1 -1
  172. package/es/components/helpers/DisplayTransition/DisplayTransition.js +17 -3
  173. package/es/components/helpers/index.js +1 -1
  174. package/es/components/layout/Flex.js +1 -1
  175. package/es/components/layout/Flow.js +1 -1
  176. package/es/components/layout/Grid.js +1 -1
  177. package/es/components/layout/Panel.js +1 -1
  178. package/es/components/layout/Prefix.js +1 -1
  179. package/es/components/layout/ResizablePanel.js +1 -1
  180. package/es/components/layout/Space.js +1 -1
  181. package/es/components/layout/Suffix.js +1 -1
  182. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  183. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  184. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  185. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  186. package/es/components/other/Calendar/Calendar.js +2 -2
  187. package/es/components/other/Calendar/CalendarCell.js +7 -10
  188. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  189. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  190. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  191. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  192. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  193. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  194. package/es/components/overlays/AlertDialog/index.js +1 -1
  195. package/es/components/overlays/AlertDialog/types.js +1 -1
  196. package/es/components/overlays/Dialog/Dialog.js +2 -1
  197. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  198. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  199. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  200. package/es/components/overlays/Dialog/context.js +1 -1
  201. package/es/components/overlays/Dialog/index.js +1 -1
  202. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  203. package/es/components/overlays/Modal/Modal.js +1 -1
  204. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  205. package/es/components/overlays/Modal/Overlay.js +1 -1
  206. package/es/components/overlays/Modal/Popover.js +1 -1
  207. package/es/components/overlays/Modal/Tray.js +1 -1
  208. package/es/components/overlays/Modal/Underlay.js +1 -1
  209. package/es/components/overlays/Modal/index.js +1 -1
  210. package/es/components/overlays/Modal/types.js +1 -1
  211. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  212. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  213. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  214. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  215. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
  216. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  217. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  218. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  219. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  220. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  221. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  222. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  223. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  224. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  225. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  226. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  227. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  228. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  229. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  230. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  231. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  232. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  233. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  234. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  235. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  236. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  237. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  238. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  239. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  240. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  241. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  242. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  243. package/es/components/overlays/NewNotifications/index.js +1 -1
  244. package/es/components/overlays/NewNotifications/types.js +1 -1
  245. package/es/components/overlays/Notification/Notification.js +1 -1
  246. package/es/components/overlays/OverlayWrapper.js +1 -1
  247. package/es/components/overlays/Toasts/Toast.js +1 -1
  248. package/es/components/overlays/Toasts/index.js +1 -1
  249. package/es/components/overlays/Toasts/types.js +1 -1
  250. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  251. package/es/components/overlays/Tooltip/Tooltip.js +2 -2
  252. package/es/components/overlays/Tooltip/TooltipProvider.js +4 -4
  253. package/es/components/overlays/Tooltip/TooltipTrigger.js +5 -4
  254. package/es/components/overlays/Tooltip/context.js +1 -1
  255. package/es/components/overlays/Tooltip/index.js +1 -1
  256. package/es/components/portal/Portal.js +1 -1
  257. package/es/components/portal/PortalProvider.js +1 -1
  258. package/es/components/portal/index.js +1 -1
  259. package/es/components/portal/types.js +1 -1
  260. package/es/components/portal/usePortal.js +1 -1
  261. package/es/components/shared/InvalidIcon.js +1 -1
  262. package/es/components/shared/ValidIcon.js +1 -1
  263. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  264. package/es/components/status/LoadingAnimation/index.js +1 -1
  265. package/es/components/status/Spin/Cube.js +1 -1
  266. package/es/components/status/Spin/InternalSpinner.js +1 -1
  267. package/es/components/status/Spin/Spin.js +1 -1
  268. package/es/components/status/Spin/SpinsContainer.js +1 -1
  269. package/es/components/status/Spin/index.js +1 -1
  270. package/es/components/status/Spin/types.js +1 -1
  271. package/es/components/status/index.js +1 -1
  272. package/es/data/item-themes.js +48 -1
  273. package/es/data/themes.js +1 -1
  274. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  275. package/es/icons/AdjustmentsIcon.js +1 -1
  276. package/es/icons/AiIcon.js +1 -1
  277. package/es/icons/AreaChartIcon.js +1 -1
  278. package/es/icons/BackwardIcon.js +1 -1
  279. package/es/icons/BarChartIcon.js +1 -1
  280. package/es/icons/BellFilledIcon.js +1 -1
  281. package/es/icons/BellIcon.js +1 -1
  282. package/es/icons/BooleanIcon.js +1 -1
  283. package/es/icons/CalendarEditIcon.js +1 -1
  284. package/es/icons/CalendarIcon.js +1 -1
  285. package/es/icons/CaretDownIcon.js +1 -1
  286. package/es/icons/CaretUpIcon.js +1 -1
  287. package/es/icons/ChartAreaStackedIcon.js +1 -1
  288. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  289. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  290. package/es/icons/ChartBarGroupedIcon.js +1 -1
  291. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  292. package/es/icons/ChartBarLineIcon.js +1 -1
  293. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  294. package/es/icons/ChartBarStackedIcon.js +1 -1
  295. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  296. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  297. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  298. package/es/icons/ChartBoxPlotIcon.js +1 -1
  299. package/es/icons/ChartBubbleIcon.js +1 -1
  300. package/es/icons/ChartDonut2Icon.js +1 -1
  301. package/es/icons/ChartFunnelIcon.js +1 -1
  302. package/es/icons/ChartHeatmapIcon.js +1 -1
  303. package/es/icons/ChartKPIIcon.js +1 -1
  304. package/es/icons/ChartPie2Icon.js +1 -1
  305. package/es/icons/ChartScatterIcon.js +1 -1
  306. package/es/icons/CheckCircleFilledIcon.js +1 -1
  307. package/es/icons/CheckCircleIcon.js +1 -1
  308. package/es/icons/CheckIcon.js +1 -1
  309. package/es/icons/CircleFilledIcon.js +1 -1
  310. package/es/icons/ClearIcon.js +1 -1
  311. package/es/icons/CloseCircleFilledIcon.js +1 -1
  312. package/es/icons/CloseCircleIcon.js +1 -1
  313. package/es/icons/CloseIcon.js +1 -1
  314. package/es/icons/CodeIcon.js +1 -1
  315. package/es/icons/CopyIcon.js +1 -1
  316. package/es/icons/CountIcon.js +1 -1
  317. package/es/icons/CubeIcon.js +1 -1
  318. package/es/icons/CubePauseIcon.js +1 -1
  319. package/es/icons/CubePlayIcon.js +1 -1
  320. package/es/icons/CurrencyDollarIcon.js +1 -1
  321. package/es/icons/DangerIcon.js +1 -1
  322. package/es/icons/DashboardIcon.js +1 -1
  323. package/es/icons/DatabaseIcon.js +1 -1
  324. package/es/icons/DecimalDecreaseIcon.js +1 -1
  325. package/es/icons/DecimalIncreaseIcon.js +1 -1
  326. package/es/icons/DirectionIcon.js +1 -1
  327. package/es/icons/DonutIcon.js +1 -1
  328. package/es/icons/DownIcon.js +1 -1
  329. package/es/icons/EditIcon.js +1 -1
  330. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  331. package/es/icons/ExclamationCircleIcon.js +1 -1
  332. package/es/icons/ExclamationIcon.js +1 -1
  333. package/es/icons/EyeIcon.js +1 -1
  334. package/es/icons/EyeInvisibleIcon.js +1 -1
  335. package/es/icons/FilterIcon.js +1 -1
  336. package/es/icons/FolderFilledIcon.js +1 -1
  337. package/es/icons/FolderIcon.js +1 -1
  338. package/es/icons/FolderOpenFilledIcon.js +1 -1
  339. package/es/icons/FolderOpenIcon.js +1 -1
  340. package/es/icons/ForwardIcon.js +1 -1
  341. package/es/icons/HierarchyIcon.js +1 -1
  342. package/es/icons/Icon.js +1 -1
  343. package/es/icons/InfoCircleIcon.js +1 -1
  344. package/es/icons/InfoIcon.js +1 -1
  345. package/es/icons/KeyIcon.js +1 -1
  346. package/es/icons/LeftIcon.js +1 -1
  347. package/es/icons/LineChartIcon.js +1 -1
  348. package/es/icons/LoadingIcon.js +1 -1
  349. package/es/icons/LockFilledIcon.js +1 -1
  350. package/es/icons/LockIcon.js +1 -1
  351. package/es/icons/MoreIcon.js +1 -1
  352. package/es/icons/NotAllowedIcon.js +1 -1
  353. package/es/icons/Number123Icon.js +1 -1
  354. package/es/icons/NumberIcon.js +1 -1
  355. package/es/icons/PauseCircleFilledIcon.js +1 -1
  356. package/es/icons/PauseCircleIcon.js +1 -1
  357. package/es/icons/PauseIcon.js +1 -1
  358. package/es/icons/PercentageIcon.js +1 -1
  359. package/es/icons/PieChartIcon.js +1 -1
  360. package/es/icons/PlayCircleIcon.js +1 -1
  361. package/es/icons/PlayIcon.js +1 -1
  362. package/es/icons/PlusIcon.js +1 -1
  363. package/es/icons/ProgressBarIcon.js +1 -1
  364. package/es/icons/ReloadIcon.js +1 -1
  365. package/es/icons/ReportIcon.js +1 -1
  366. package/es/icons/ReturnIcon.js +1 -1
  367. package/es/icons/RightIcon.js +1 -1
  368. package/es/icons/SchemeIcon.js +1 -1
  369. package/es/icons/SearchIcon.js +1 -1
  370. package/es/icons/SettingsIcon.js +1 -1
  371. package/es/icons/ShieldFilledIcon.js +1 -1
  372. package/es/icons/ShieldIcon.js +1 -1
  373. package/es/icons/SlashIcon.js +1 -1
  374. package/es/icons/SparklesIcon.js +1 -1
  375. package/es/icons/SqlIcon.js +1 -1
  376. package/es/icons/StatsIcon.js +1 -1
  377. package/es/icons/StopIcon.js +1 -1
  378. package/es/icons/StringIcon.js +1 -1
  379. package/es/icons/SwitchIcon.js +1 -1
  380. package/es/icons/TableIcon.js +1 -1
  381. package/es/icons/ThumbsDownIcon.js +1 -1
  382. package/es/icons/ThumbsUpIcon.js +1 -1
  383. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  384. package/es/icons/ThunderboltFilledIcon.js +1 -1
  385. package/es/icons/ThunderboltIcon.js +1 -1
  386. package/es/icons/TimeIcon.js +1 -1
  387. package/es/icons/UnlockIcon.js +1 -1
  388. package/es/icons/UpIcon.js +1 -1
  389. package/es/icons/UserGroupIcon.js +1 -1
  390. package/es/icons/UserIcon.js +1 -1
  391. package/es/icons/UserLockIcon.js +1 -1
  392. package/es/icons/ViewIcon.js +1 -1
  393. package/es/icons/WarningFilledIcon.js +1 -1
  394. package/es/icons/WarningIcon.js +1 -1
  395. package/es/icons/add-new-icon.js +1 -1
  396. package/es/icons/index.js +1 -1
  397. package/es/icons/wrap-icon.js +1 -1
  398. package/es/index.js +2 -1
  399. package/es/provider.js +1 -1
  400. package/es/providers/TrackingProvider.js +1 -1
  401. package/es/providers/navigation.types.js +1 -1
  402. package/es/providers/navigationAdapter.default.js +1 -1
  403. package/es/services/notification.js +1 -1
  404. package/es/shared/form.js +1 -1
  405. package/es/shared/index.js +1 -1
  406. package/es/stories/Form.legacy-stories.js +1 -1
  407. package/es/stories/FormFieldArgs.js +1 -1
  408. package/es/stories/Layout.stories.js +1 -1
  409. package/es/stories/Tasty.stories.js +1 -1
  410. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  411. package/es/stories/components/DialogFormApp.js +1 -1
  412. package/es/stories/components/StyledButton.js +1 -1
  413. package/es/stories/lists/baseProps.js +1 -1
  414. package/es/tasty/debug.js +1 -1
  415. package/es/tasty/index.js +1 -1
  416. package/es/tasty/injector/index.js +1 -1
  417. package/es/tasty/injector/injector.js +1 -1
  418. package/es/tasty/injector/sheet-manager.js +1 -1
  419. package/es/tasty/injector/types.js +1 -1
  420. package/es/tasty/parser/classify.js +1 -1
  421. package/es/tasty/parser/const.js +1 -1
  422. package/es/tasty/parser/lru.js +1 -1
  423. package/es/tasty/parser/parser.js +1 -1
  424. package/es/tasty/parser/tokenizer.js +1 -1
  425. package/es/tasty/parser/types.js +1 -1
  426. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  427. package/es/tasty/styles/align.js +1 -1
  428. package/es/tasty/styles/border.js +1 -1
  429. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  430. package/es/tasty/styles/color.js +1 -1
  431. package/es/tasty/styles/createStyle.js +1 -1
  432. package/es/tasty/styles/dimension.js +1 -1
  433. package/es/tasty/styles/display.js +1 -1
  434. package/es/tasty/styles/fade.js +1 -1
  435. package/es/tasty/styles/fill.js +1 -1
  436. package/es/tasty/styles/flow.js +1 -1
  437. package/es/tasty/styles/font.js +1 -1
  438. package/es/tasty/styles/fontStyle.js +1 -1
  439. package/es/tasty/styles/gap.js +1 -1
  440. package/es/tasty/styles/groupRadius.js +1 -1
  441. package/es/tasty/styles/height.js +1 -1
  442. package/es/tasty/styles/index.js +1 -1
  443. package/es/tasty/styles/inset.js +1 -1
  444. package/es/tasty/styles/justify.js +1 -1
  445. package/es/tasty/styles/list.js +1 -1
  446. package/es/tasty/styles/margin.js +1 -1
  447. package/es/tasty/styles/outline.js +1 -1
  448. package/es/tasty/styles/padding.js +1 -1
  449. package/es/tasty/styles/place.js +1 -1
  450. package/es/tasty/styles/predefined.js +1 -1
  451. package/es/tasty/styles/preset.js +1 -1
  452. package/es/tasty/styles/radius.js +1 -1
  453. package/es/tasty/styles/reset.js +1 -1
  454. package/es/tasty/styles/scrollbar.js +1 -1
  455. package/es/tasty/styles/shadow.js +1 -1
  456. package/es/tasty/styles/styledScrollbar.js +1 -1
  457. package/es/tasty/styles/transition.js +1 -1
  458. package/es/tasty/styles/types.js +1 -1
  459. package/es/tasty/styles/width.js +1 -1
  460. package/es/tasty/tasty.js +1 -1
  461. package/es/tasty/types.js +1 -1
  462. package/es/tasty/utils/cache-wrapper.js +1 -1
  463. package/es/tasty/utils/case-converter.js +1 -1
  464. package/es/tasty/utils/colors.js +1 -1
  465. package/es/tasty/utils/dotize.js +1 -1
  466. package/es/tasty/utils/filterBaseProps.js +1 -1
  467. package/es/tasty/utils/getDisplayName.js +1 -1
  468. package/es/tasty/utils/getModCombinations.js +1 -1
  469. package/es/tasty/utils/isDevEnv.js +1 -1
  470. package/es/tasty/utils/mergeStyles.js +1 -1
  471. package/es/tasty/utils/modAttrs.js +1 -1
  472. package/es/tasty/utils/renderStyles.js +1 -1
  473. package/es/tasty/utils/responsive.js +1 -1
  474. package/es/tasty/utils/string.js +1 -1
  475. package/es/tasty/utils/styles.js +1 -1
  476. package/es/tasty/utils/warnings.js +1 -1
  477. package/es/tokens.js +1 -1
  478. package/es/utils/ResizeSensor.js +1 -1
  479. package/es/utils/modules.js +1 -1
  480. package/es/utils/promise.js +1 -1
  481. package/es/utils/random.js +1 -1
  482. package/es/utils/range.js +1 -1
  483. package/es/utils/react/Slots.js +1 -1
  484. package/es/utils/react/chain.js +1 -1
  485. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  486. package/es/utils/react/index.js +1 -1
  487. package/es/utils/react/interactions.js +1 -1
  488. package/es/utils/react/isTextOnly.js +1 -1
  489. package/es/utils/react/mapProps.js +1 -1
  490. package/es/utils/react/mergeProps.js +1 -1
  491. package/es/utils/react/nullableValue.js +1 -1
  492. package/es/utils/react/sharedStore.js +1 -1
  493. package/es/utils/react/useCombinedRefs.js +1 -1
  494. package/es/utils/react/useControlledFocusVisible.js +1 -1
  495. package/es/utils/react/useEventBus.js +1 -1
  496. package/es/utils/react/useId.js +1 -1
  497. package/es/utils/react/useIsDarwin.js +1 -1
  498. package/es/utils/react/useKeySymbols.js +1 -1
  499. package/es/utils/react/useLayoutEffect.js +1 -1
  500. package/es/utils/react/useQaProps.js +1 -1
  501. package/es/utils/react/useViewportSize.js +1 -1
  502. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  503. package/es/utils/transitions.js +1 -1
  504. package/es/utils/tree.js +1 -1
  505. package/es/utils/warnings.js +1 -1
  506. package/es/version.js +2 -2
  507. package/package.json +1 -1
  508. package/types/components/Item.d.ts +4 -1
  509. package/types/components/actions/ItemAction/ItemAction.d.ts +15 -7
  510. package/types/components/actions/ItemActionContext.d.ts +14 -0
  511. package/types/components/actions/ItemButton/ItemButton.d.ts +14 -3
  512. package/types/components/actions/Menu/Menu.d.ts +4 -1
  513. package/types/components/actions/index.d.ts +1 -0
  514. package/types/components/content/ItemBadge/ItemBadge.d.ts +16 -0
  515. package/types/components/content/ItemBadge/index.d.ts +2 -0
  516. package/types/components/content/ItemBase/ItemBase.d.ts +21 -3
  517. package/types/components/content/ItemBase/index.d.ts +1 -0
  518. package/types/components/fields/ComboBox/ComboBox.d.ts +2 -2
  519. package/types/components/fields/DatePicker/DateInputBase.d.ts +1 -0
  520. package/types/components/fields/FilterListBox/FilterListBox.d.ts +1 -1
  521. package/types/components/fields/ListBox/ListBox.d.ts +6 -0
  522. package/types/components/fields/Picker/Picker.d.ts +69 -0
  523. package/types/components/fields/Picker/index.d.ts +2 -0
  524. package/types/components/fields/Select/Select.d.ts +4 -1
  525. package/types/components/fields/index.d.ts +1 -0
  526. package/types/components/helpers/DisplayTransition/DisplayTransition.d.ts +5 -1
  527. package/types/data/item-themes.d.ts +1 -0
  528. package/types/index.d.ts +2 -0
@@ -0,0 +1,418 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.85.0
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ import { forwardRef, useCallback, useEffect, useMemo, useRef, useState, } from 'react';
10
+ import { FocusScope, useKeyboard } from 'react-aria';
11
+ import { Section as BaseSection, useListState } from 'react-stately';
12
+ import { useEvent } from '../../../_internal';
13
+ import { useWarn } from '../../../_internal/hooks/use-warn';
14
+ import { CloseIcon, DirectionIcon, LoadingIcon } from '../../../icons';
15
+ import { useProviderProps } from '../../../provider';
16
+ import { BASE_STYLES, COLOR_STYLES, extractStyles, filterBaseProps, OUTER_STYLES, tasty, } from '../../../tasty';
17
+ import { generateRandomId } from '../../../utils/random';
18
+ import { mergeProps } from '../../../utils/react';
19
+ import { useEventBus } from '../../../utils/react/useEventBus';
20
+ import { ItemAction, ItemButton } from '../../actions';
21
+ import { Text } from '../../content/Text';
22
+ import { useFieldProps, useFormProps, wrapWithField } from '../../form';
23
+ import { Dialog, DialogTrigger } from '../../overlays/Dialog';
24
+ import { ListBox } from '../ListBox/ListBox';
25
+ const PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];
26
+ const PickerWrapper = tasty({
27
+ qa: 'PickerWrapper',
28
+ styles: {
29
+ display: 'inline-grid',
30
+ flow: 'column',
31
+ gridRows: '1sf',
32
+ placeContent: 'stretch',
33
+ placeItems: 'stretch',
34
+ },
35
+ });
36
+ export const Picker = forwardRef(function Picker(props, ref) {
37
+ props = useProviderProps(props);
38
+ props = useFormProps(props);
39
+ props = useFieldProps(props, {
40
+ valuePropsMapper: ({ value, onChange }) => {
41
+ const fieldProps = {};
42
+ if (props.selectionMode === 'multiple') {
43
+ fieldProps.selectedKeys = value || [];
44
+ }
45
+ else {
46
+ fieldProps.selectedKey = value ?? null;
47
+ }
48
+ fieldProps.onSelectionChange = (key) => {
49
+ if (props.selectionMode === 'multiple') {
50
+ // Handle "all" selection and array selections
51
+ if (key === 'all') {
52
+ onChange('all');
53
+ }
54
+ else {
55
+ onChange(key ? (Array.isArray(key) ? key : [key]) : []);
56
+ }
57
+ }
58
+ else {
59
+ onChange(Array.isArray(key) ? key[0] : key);
60
+ }
61
+ };
62
+ return fieldProps;
63
+ },
64
+ });
65
+ let { id, qa, label, extra, icon, rightIcon, prefix, suffix, hotkeys, triggerTooltip, triggerDescription, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, message, mods: externalMods, description, descriptionPlacement, placeholder, size = 'medium', styles, listBoxStyles, popoverStyles, type = 'outline', theme = 'default', labelSuffix, shouldFocusWrap, children, shouldFlip = true, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, disabledKeys, onSelectionChange, selectionMode = 'single', listStateRef, focusOnHover, showSelectAll, selectAllLabel = 'All', items, header, footer, headerStyles, footerStyles, triggerStyles, renderSummary, isCheckable, allValueProps, listStyles, optionStyles, sectionStyles, headingStyles, listRef, disallowEmptySelection, shouldUseVirtualFocus, onEscape, onOptionClick, isClearable, onClear, sortSelectedToTop, listStateRef: externalListStateRef, ...otherProps } = props;
66
+ styles = extractStyles(otherProps, PROP_STYLES, styles);
67
+ // Generate a unique ID for this Picker instance
68
+ const pickerId = useMemo(() => generateRandomId(), []);
69
+ // Get event bus for menu synchronization
70
+ const { emit, on } = useEventBus();
71
+ // Warn if isCheckable is false in single selection mode
72
+ useWarn(isCheckable === false && selectionMode === 'single', {
73
+ key: ['picker-checkable-single-mode'],
74
+ args: [
75
+ 'CubeUIKit: isCheckable=false is not recommended in single selection mode as it may confuse users about selection behavior.',
76
+ ],
77
+ });
78
+ // Internal selection state (uncontrolled scenario)
79
+ const [internalSelectedKey, setInternalSelectedKey] = useState(defaultSelectedKey ?? null);
80
+ const [internalSelectedKeys, setInternalSelectedKeys] = useState(defaultSelectedKeys ?? []);
81
+ // Track popover open/close and capture children order for session
82
+ const [isPopoverOpen, setIsPopoverOpen] = useState(false);
83
+ const triggerRef = useRef(null);
84
+ const isControlledSingle = selectedKey !== undefined;
85
+ const isControlledMultiple = selectedKeys !== undefined;
86
+ const effectiveSelectedKey = isControlledSingle
87
+ ? selectedKey
88
+ : internalSelectedKey;
89
+ const effectiveSelectedKeys = isControlledMultiple
90
+ ? selectedKeys
91
+ : internalSelectedKeys;
92
+ // Given an iterable of keys (array or Set) toggle membership for duplicates
93
+ const processSelectionArray = (iterable) => {
94
+ const resultSet = new Set();
95
+ for (const key of iterable) {
96
+ const nKey = String(key);
97
+ if (resultSet.has(nKey)) {
98
+ resultSet.delete(nKey); // toggle off if clicked twice
99
+ }
100
+ else {
101
+ resultSet.add(nKey); // select
102
+ }
103
+ }
104
+ return Array.from(resultSet);
105
+ };
106
+ // Ref to access internal ListBox state for collection API
107
+ const internalListStateRef = useRef(null);
108
+ // Sync internal ref with external ref if provided
109
+ useEffect(() => {
110
+ if (externalListStateRef && internalListStateRef.current) {
111
+ externalListStateRef.current = internalListStateRef.current;
112
+ }
113
+ }, [externalListStateRef]);
114
+ // Cache for sorted items array when using `items` prop
115
+ const cachedItemsOrder = useRef(null);
116
+ const selectionWhenClosed = useRef({ single: null, multiple: [] });
117
+ // Track if sortSelectedToTop was explicitly provided
118
+ const sortSelectedToTopExplicit = sortSelectedToTop !== undefined;
119
+ // Default to true if items are provided, false otherwise
120
+ const shouldSortSelectedToTop = sortSelectedToTop ?? (items ? true : false);
121
+ // Invalidate cache when items change
122
+ useEffect(() => {
123
+ cachedItemsOrder.current = null;
124
+ }, [items]);
125
+ // Capture selection when popover closes
126
+ useEffect(() => {
127
+ if (!isPopoverOpen) {
128
+ selectionWhenClosed.current = {
129
+ single: effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,
130
+ multiple: selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
131
+ ? (effectiveSelectedKeys || []).map(String)
132
+ : [],
133
+ };
134
+ cachedItemsOrder.current = null;
135
+ }
136
+ }, [
137
+ isPopoverOpen,
138
+ effectiveSelectedKey,
139
+ effectiveSelectedKeys,
140
+ selectionMode,
141
+ ]);
142
+ // Sort items with selected on top if enabled
143
+ const getSortedItems = useCallback(() => {
144
+ if (!items || !shouldSortSelectedToTop)
145
+ return items;
146
+ // Reuse cached order if available
147
+ if (cachedItemsOrder.current) {
148
+ return cachedItemsOrder.current;
149
+ }
150
+ // Warn if explicitly requested but JSX children used
151
+ if (sortSelectedToTopExplicit && !items) {
152
+ console.warn('Picker: sortSelectedToTop only works with the items prop. ' +
153
+ 'Sorting will be skipped when using JSX children.');
154
+ return items;
155
+ }
156
+ const selectedKeys = new Set();
157
+ if (selectionMode === 'multiple') {
158
+ // Don't sort when "all" is selected
159
+ if (selectionWhenClosed.current.multiple.length === 0 ||
160
+ effectiveSelectedKeys === 'all') {
161
+ return items;
162
+ }
163
+ selectionWhenClosed.current.multiple.forEach((k) => selectedKeys.add(k));
164
+ }
165
+ else if (selectionWhenClosed.current.single) {
166
+ selectedKeys.add(selectionWhenClosed.current.single);
167
+ }
168
+ if (selectedKeys.size === 0)
169
+ return items;
170
+ const itemsArray = Array.isArray(items) ? items : Array.from(items);
171
+ const selectedItems = [];
172
+ const unselectedItems = [];
173
+ itemsArray.forEach((item) => {
174
+ const key = item?.key ?? item?.id;
175
+ if (key != null && selectedKeys.has(String(key))) {
176
+ selectedItems.push(item);
177
+ }
178
+ else {
179
+ unselectedItems.push(item);
180
+ }
181
+ });
182
+ const sorted = [...selectedItems, ...unselectedItems];
183
+ if (isPopoverOpen) {
184
+ cachedItemsOrder.current = sorted;
185
+ }
186
+ return sorted;
187
+ }, [
188
+ items,
189
+ shouldSortSelectedToTop,
190
+ sortSelectedToTopExplicit,
191
+ selectionMode,
192
+ effectiveSelectedKeys,
193
+ isPopoverOpen,
194
+ ]);
195
+ const finalItems = getSortedItems();
196
+ // Create local collection state for reading item data (labels, etc.)
197
+ // This allows us to read item labels even before the popover opens
198
+ const localCollectionState = useListState({
199
+ children,
200
+ items: finalItems, // Use sorted items to match what's shown in popover
201
+ selectionMode: 'none', // Don't manage selection in this state
202
+ });
203
+ // Helper to get label from local collection
204
+ const getItemLabel = useCallback((key) => {
205
+ const item = localCollectionState?.collection?.getItem(key);
206
+ return item?.textValue || String(key);
207
+ }, [localCollectionState?.collection]);
208
+ const selectedLabels = useMemo(() => {
209
+ const keysToGet = selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
210
+ ? effectiveSelectedKeys || []
211
+ : effectiveSelectedKey != null
212
+ ? [effectiveSelectedKey]
213
+ : [];
214
+ // Handle "all" selection
215
+ if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {
216
+ if (!localCollectionState?.collection)
217
+ return [];
218
+ const labels = [];
219
+ for (const item of localCollectionState.collection) {
220
+ if (item.type === 'item') {
221
+ labels.push(item.textValue || String(item.key));
222
+ }
223
+ }
224
+ return labels;
225
+ }
226
+ // Get labels for selected keys
227
+ return keysToGet.map((key) => getItemLabel(key)).filter(Boolean);
228
+ }, [
229
+ selectionMode,
230
+ effectiveSelectedKeys,
231
+ effectiveSelectedKey,
232
+ getItemLabel,
233
+ localCollectionState?.collection,
234
+ ]);
235
+ const hasSelection = selectedLabels.length > 0;
236
+ const renderTriggerContent = () => {
237
+ // When there is a selection and a custom summary renderer is provided – use it.
238
+ if (hasSelection && typeof renderSummary === 'function') {
239
+ if (selectionMode === 'single') {
240
+ return renderSummary({
241
+ selectedLabel: selectedLabels[0],
242
+ selectedKey: effectiveSelectedKey ?? null,
243
+ selectedLabels,
244
+ selectedKeys: effectiveSelectedKeys,
245
+ selectionMode: 'single',
246
+ });
247
+ }
248
+ return renderSummary({
249
+ selectedLabels,
250
+ selectedKeys: effectiveSelectedKeys,
251
+ selectionMode: 'multiple',
252
+ });
253
+ }
254
+ else if (hasSelection && renderSummary === false) {
255
+ return null;
256
+ }
257
+ let content = '';
258
+ if (!hasSelection) {
259
+ content = placeholder;
260
+ }
261
+ else if (selectionMode === 'single') {
262
+ content = selectedLabels[0];
263
+ }
264
+ else if (effectiveSelectedKeys === 'all') {
265
+ content = selectAllLabel;
266
+ }
267
+ else {
268
+ content = selectedLabels.join(', ');
269
+ }
270
+ if (!content) {
271
+ return null;
272
+ }
273
+ return (_jsx(Text, { ellipsis: true, style: { opacity: hasSelection ? 1 : 'var(--disabled-opacity)' }, children: content }));
274
+ };
275
+ const [shouldUpdatePosition, setShouldUpdatePosition] = useState(true);
276
+ // The trigger is rendered as a function so we can access the dialog state
277
+ const renderTrigger = (state) => {
278
+ // Listen for other menus opening and close this one if needed
279
+ useEffect(() => {
280
+ const unsubscribe = on('popover:open', (data) => {
281
+ // If another menu is opening and this Picker is open, close this one
282
+ if (data.menuId !== pickerId && state.isOpen) {
283
+ state.close();
284
+ }
285
+ });
286
+ return unsubscribe;
287
+ }, [on, pickerId, state]);
288
+ // Emit event when this Picker opens
289
+ useEffect(() => {
290
+ if (state.isOpen) {
291
+ emit('popover:open', { menuId: pickerId });
292
+ }
293
+ }, [state.isOpen, emit, pickerId]);
294
+ // Track popover open/close state to control sorting
295
+ useEffect(() => {
296
+ if (state.isOpen !== isPopoverOpen) {
297
+ setIsPopoverOpen(state.isOpen);
298
+ }
299
+ }, [state.isOpen, isPopoverOpen]);
300
+ // Add keyboard support for arrow keys to open the popover
301
+ const { keyboardProps } = useKeyboard({
302
+ onKeyDown: (e) => {
303
+ if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !state.isOpen) {
304
+ e.preventDefault();
305
+ state.open();
306
+ }
307
+ },
308
+ });
309
+ useEffect(() => {
310
+ // Allow initial positioning & flipping when opening, then lock placement after transition
311
+ // Popover transition is ~120ms, give it a bit more time to finalize placement
312
+ if (state.isOpen) {
313
+ setShouldUpdatePosition(true);
314
+ const id = window.setTimeout(() => setShouldUpdatePosition(false), 160);
315
+ return () => window.clearTimeout(id);
316
+ }
317
+ else {
318
+ setShouldUpdatePosition(true);
319
+ }
320
+ }, [state.isOpen]);
321
+ // Clear button logic
322
+ let showClearButton = isClearable && hasSelection && !isDisabled && !props.isReadOnly;
323
+ // Clear function
324
+ let clearValue = useEvent(() => {
325
+ if (selectionMode === 'multiple') {
326
+ if (!isControlledMultiple) {
327
+ setInternalSelectedKeys([]);
328
+ }
329
+ onSelectionChange?.([]);
330
+ }
331
+ else {
332
+ if (!isControlledSingle) {
333
+ setInternalSelectedKey(null);
334
+ }
335
+ onSelectionChange?.(null);
336
+ }
337
+ if (state.isOpen) {
338
+ state.close();
339
+ }
340
+ triggerRef?.current?.focus?.();
341
+ onClear?.();
342
+ return false;
343
+ });
344
+ return (_jsx(ItemButton, { ref: triggerRef, "data-popover-trigger": true, id: id, qa: qa || 'PickerTrigger', type: type, theme: validationState === 'invalid' ? 'danger' : theme, size: size, isDisabled: isDisabled || isLoading, mods: {
345
+ placeholder: !hasSelection,
346
+ ...externalMods,
347
+ }, icon: icon, rightIcon: isLoading ? (_jsx(LoadingIcon, {})) : rightIcon !== undefined ? (rightIcon) : showClearButton ? (_jsx(ItemAction, { icon: _jsx(CloseIcon, {}), size: size, theme: validationState === 'invalid' ? 'danger' : undefined, qa: "PickerClearButton", mods: { pressed: false }, onPress: clearValue })) : (_jsx(DirectionIcon, { to: state.isOpen ? 'top' : 'bottom' })), prefix: prefix, suffix: suffix, hotkeys: hotkeys, tooltip: triggerTooltip, description: triggerDescription, descriptionPlacement: descriptionPlacement, styles: styles, ...keyboardProps, "aria-label": `${props['aria-label'] ?? props.label ?? ''}`, children: renderTriggerContent() }));
348
+ };
349
+ const pickerField = (_jsx(PickerWrapper, { styles: styles, ...filterBaseProps(otherProps, { eventProps: true }), children: _jsxs(DialogTrigger, { type: "popover", placement: "bottom start", styles: triggerStyles, shouldUpdatePosition: shouldUpdatePosition, shouldFlip: shouldFlip && shouldUpdatePosition, isDismissable: true, shouldCloseOnInteractOutside: (el) => {
350
+ const menuTriggerEl = el.closest('[data-popover-trigger]');
351
+ // If no menu trigger was clicked, allow closing
352
+ if (!menuTriggerEl)
353
+ return true;
354
+ // If the same trigger that opened this popover was clicked, allow closing (toggle)
355
+ if (menuTriggerEl === triggerRef?.current)
356
+ return true;
357
+ // Otherwise, don't close here. Let the event bus handle closing when the other opens.
358
+ return false;
359
+ }, children: [renderTrigger, (close) => (_jsx(Dialog, { display: "grid", styles: {
360
+ gridRows: '1sf',
361
+ width: '30x max-content 50vw',
362
+ ...popoverStyles,
363
+ }, children: _jsx(FocusScope, { restoreFocus: true, children: _jsx(ListBox, { autoFocus: true, items: items ? finalItems : undefined, "aria-label": `${props['aria-label'] ?? props.label ?? ''} Picker`, selectedKey: selectionMode === 'single' ? effectiveSelectedKey : undefined, selectedKeys: selectionMode === 'multiple'
364
+ ? effectiveSelectedKeys
365
+ : undefined, listStyles: listStyles, optionStyles: optionStyles, sectionStyles: sectionStyles, headingStyles: headingStyles, listRef: listRef, disallowEmptySelection: disallowEmptySelection, disabledKeys: disabledKeys, focusOnHover: focusOnHover, shouldFocusWrap: shouldFocusWrap, selectionMode: selectionMode, validationState: validationState, isDisabled: isDisabled, isLoading: isLoading, stateRef: internalListStateRef, isCheckable: isCheckable, mods: {
366
+ popover: true,
367
+ }, size: size === 'small' ? 'medium' : size, showSelectAll: showSelectAll, selectAllLabel: selectAllLabel, header: header, footer: footer, headerStyles: headerStyles, footerStyles: footerStyles, qa: `${props.qa || 'Picker'}ListBox`, allValueProps: allValueProps, onEscape: () => close(), onOptionClick: (key) => {
368
+ // For Picker, clicking the content area should close the popover
369
+ // in multiple selection mode (single mode already closes via onSelectionChange)
370
+ if ((selectionMode === 'multiple' && isCheckable) ||
371
+ key === '__ALL__') {
372
+ close();
373
+ }
374
+ }, onSelectionChange: (selection) => {
375
+ // No need to change any flags - children order is cached
376
+ // Update internal state if uncontrolled
377
+ if (selectionMode === 'single') {
378
+ if (!isControlledSingle) {
379
+ setInternalSelectedKey(selection);
380
+ }
381
+ }
382
+ else {
383
+ if (!isControlledMultiple) {
384
+ let normalized = selection;
385
+ if (selection === 'all') {
386
+ normalized = 'all';
387
+ }
388
+ else if (Array.isArray(selection)) {
389
+ normalized = processSelectionArray(selection);
390
+ }
391
+ else if (selection &&
392
+ typeof selection === 'object' &&
393
+ selection instanceof Set) {
394
+ normalized = processSelectionArray(selection);
395
+ }
396
+ setInternalSelectedKeys(normalized);
397
+ }
398
+ }
399
+ onSelectionChange?.(selection);
400
+ if (selectionMode === 'single') {
401
+ close();
402
+ }
403
+ }, children: children }) }) }))] }) }));
404
+ return wrapWithField(pickerField, ref, mergeProps({
405
+ ...props,
406
+ children: undefined,
407
+ styles: undefined,
408
+ }, {}));
409
+ });
410
+ Picker.Item = ListBox.Item;
411
+ Picker.Section = BaseSection;
412
+ Object.defineProperty(Picker, 'cubeInputType', {
413
+ value: 'Picker',
414
+ enumerable: false,
415
+ configurable: false,
416
+ });
417
+
418
+
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.85.0
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ export { Picker } from './Picker';
9
+
10
+
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -77,13 +77,19 @@ const OptionItem = tasty(ItemBase, {
77
77
  '$inline-compensation': '0px',
78
78
  },
79
79
  });
80
- const OverlayElement = tasty({
80
+ const SelectOverlayWrapper = tasty({
81
+ qa: 'SelectOverlayWrapper',
81
82
  styles: {
82
83
  position: 'absolute',
84
+ zIndex: 1000,
85
+ },
86
+ });
87
+ const OverlayElement = tasty({
88
+ styles: {
83
89
  width: 'min $overlay-min-width',
84
90
  display: 'grid',
85
91
  gridRows: '1sf',
86
- height: 'initial max-content (50vh - $size)',
92
+ height: 'initial max-content (50vh - 5x)',
87
93
  overflow: 'auto',
88
94
  background: '#white',
89
95
  radius: '1cr',
@@ -215,7 +221,7 @@ function Select(props, ref) {
215
221
  // Ensure this button never submits a surrounding form in tests or runtime
216
222
  htmlType: "button",
217
223
  // Preserve visual variant via data attribute instead of conflicting with HTML attribute
218
- type: type, mods: modifiers, prefix: prefix, suffix: suffix, icon: icon, rightIcon: rightIcon !== undefined ? (rightIcon) : showClearButton ? (_jsx(ItemAction, { icon: _jsx(CloseIcon, {}), size: size, theme: validationState === 'invalid' ? 'danger' : undefined, qa: "SelectClearButton", mods: { pressed: false }, onPress: clearValue })) : isLoading ? (_jsx(LoadingIcon, {})) : (_jsx(DirectionIcon, { to: state.isOpen ? 'up' : 'down' })), description: description, descriptionPlacement: descriptionPlacement, hotkeys: hotkeys, tooltip: tooltip, labelProps: valueProps, children: state.selectedItem
224
+ type: type, mods: modifiers, prefix: prefix, suffix: suffix, icon: icon, rightIcon: rightIcon !== undefined ? (rightIcon) : showClearButton ? (_jsx(ItemAction, { icon: _jsx(CloseIcon, {}), theme: validationState === 'invalid' ? 'danger' : undefined, qa: "SelectClearButton", mods: { pressed: false }, onPress: clearValue })) : isLoading ? (_jsx(LoadingIcon, {})) : (_jsx(DirectionIcon, { to: state.isOpen ? 'up' : 'down' })), description: description, descriptionPlacement: descriptionPlacement, hotkeys: hotkeys, tooltip: tooltip, labelProps: valueProps, children: state.selectedItem
219
225
  ? state.selectedItem.rendered
220
226
  : placeholder || _jsx(_Fragment, { children: "\u00A0" }) }), _jsx(ListBoxPopup, { ...menuProps, popoverRef: popoverRef, listBoxRef: listBoxRef, overlayProps: overlayProps, placement: placement, updatePosition: updatePosition, state: state, listBoxStyles: listBoxStyles, overlayStyles: overlayStyles, optionStyles: optionStyles, minWidth: triggerWidth, triggerRef: triggerRef, isDisabled: isDisabled })] }));
221
227
  return wrapWithField(selectField, ref, mergeProps({
@@ -269,31 +275,27 @@ export function ListBoxPopup({ state, popoverRef, listBoxRef, listBoxStyles, ove
269
275
  // trigger when the popup is closed. In addition, add hidden
270
276
  // <DismissButton> components at the start and end of the list
271
277
  // to allow screen reader users to dismiss the popup easily.
272
- return (_jsx(Portal, { children: _jsx(DisplayTransition, { isShown: state.isOpen && !isDisabled, children: ({ phase, isShown, ref: transitionRef }) => (_jsx(OverlayElement, { ...overlayProps, ...parentOverlayProps, ref: (value) => {
273
- transitionRef(value);
274
- popoverRef.current = value;
275
- }, "data-placement": placementDirection, "data-phase": phase, mods: {
276
- open: isShown,
277
- }, styles: overlayStyles, style: {
278
- '--overlay-min-width': minWidth ? `${minWidth}px` : 'initial',
279
- ...parentOverlayProps?.style,
280
- }, children: _jsxs(FocusScope, { restoreFocus: true, children: [_jsx(DismissButton, { onDismiss: () => state.close() }), (() => {
281
- const renderedItems = [];
282
- let isFirstSection = true;
283
- for (const item of state.collection) {
284
- if (item.type === 'section') {
285
- if (!isFirstSection) {
286
- renderedItems.push(_jsx(ListDivider, { as: "li", role: "separator", "aria-orientation": "horizontal" }, `divider-${String(item.key)}`));
278
+ return (_jsx(Portal, { children: _jsx(DisplayTransition, { isShown: state.isOpen && !isDisabled, children: ({ phase, isShown, ref: transitionRef }) => (_jsx(SelectOverlayWrapper, { ...overlayProps, ...parentOverlayProps, ref: popoverRef, style: parentOverlayProps?.style, children: _jsx(OverlayElement, { ref: transitionRef, "data-placement": placementDirection, "data-phase": phase, mods: {
279
+ open: isShown,
280
+ }, styles: overlayStyles, style: {
281
+ '--overlay-min-width': minWidth ? `${minWidth}px` : 'initial',
282
+ }, children: _jsxs(FocusScope, { restoreFocus: true, children: [_jsx(DismissButton, { onDismiss: () => state.close() }), (() => {
283
+ const renderedItems = [];
284
+ let isFirstSection = true;
285
+ for (const item of state.collection) {
286
+ if (item.type === 'section') {
287
+ if (!isFirstSection) {
288
+ renderedItems.push(_jsx(ListDivider, { as: "li", role: "separator", "aria-orientation": "horizontal" }, `divider-${String(item.key)}`));
289
+ }
290
+ renderedItems.push(_jsx(SelectSection, { item: item, state: state, optionStyles: optionStyles, sectionStyles: undefined, shouldUseVirtualFocus: shouldUseVirtualFocus, size: listItemSize }, item.key));
291
+ isFirstSection = false;
292
+ }
293
+ else {
294
+ renderedItems.push(_jsx(Option, { item: item, state: state, styles: optionStyles, shouldUseVirtualFocus: shouldUseVirtualFocus, size: listItemSize }, item.key));
287
295
  }
288
- renderedItems.push(_jsx(SelectSection, { item: item, state: state, optionStyles: optionStyles, sectionStyles: undefined, shouldUseVirtualFocus: shouldUseVirtualFocus, size: listItemSize }, item.key));
289
- isFirstSection = false;
290
- }
291
- else {
292
- renderedItems.push(_jsx(Option, { item: item, state: state, styles: optionStyles, shouldUseVirtualFocus: shouldUseVirtualFocus, size: listItemSize }, item.key));
293
296
  }
294
- }
295
- return (_jsx(ListBoxElement, { styles: listBoxStyles, ...listBoxProps, ref: listBoxRef, children: renderedItems }));
296
- })(), _jsx(DismissButton, { onDismiss: () => state.close() })] }) })) }) }));
297
+ return (_jsx(ListBoxElement, { styles: listBoxStyles, ...listBoxProps, ref: listBoxRef, children: renderedItems }));
298
+ })(), _jsx(DismissButton, { onDismiss: () => state.close() })] }) }) })) }) }));
297
299
  }
298
300
  function Option({ item, state, styles, shouldUseVirtualFocus, size }) {
299
301
  let ref = useRef(null);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7