@cube-dev/ui-kit 0.0.0-canary-8dfe8a6 → 0.0.0-canary-5141f6d

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 (501) hide show
  1. package/es/_internal/hooks/index.js +1 -1
  2. package/es/_internal/hooks/use-chained-callback.js +1 -1
  3. package/es/_internal/hooks/use-debounced-value.js +1 -1
  4. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/es/_internal/hooks/use-effect-once.js +1 -1
  6. package/es/_internal/hooks/use-event.js +1 -1
  7. package/es/_internal/hooks/use-is-first-render.js +1 -1
  8. package/es/_internal/hooks/use-sync-ref.js +1 -1
  9. package/es/_internal/hooks/use-timer/index.js +1 -1
  10. package/es/_internal/hooks/use-timer/timer.js +1 -1
  11. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  12. package/es/_internal/hooks/use-update-effect.js +1 -1
  13. package/es/_internal/hooks/use-warn.js +1 -1
  14. package/es/_internal/index.js +1 -1
  15. package/es/components/Block.js +1 -1
  16. package/es/components/GlobalStyles.js +1 -1
  17. package/es/components/GridProvider.js +1 -1
  18. package/es/components/HiddenInput.js +1 -1
  19. package/es/components/Item.js +1 -1
  20. package/es/components/OpenTrasition.js +1 -1
  21. package/es/components/Root.js +1 -1
  22. package/es/components/actions/Action/Action.js +1 -1
  23. package/es/components/actions/Button/Button.js +1 -1
  24. package/es/components/actions/Button/index.js +1 -1
  25. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  26. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  27. package/es/components/actions/CommandMenu/index.js +1 -1
  28. package/es/components/actions/CommandMenu/styled.js +1 -1
  29. package/es/components/actions/ItemAction/ItemAction.js +1 -1
  30. package/es/components/actions/ItemAction/index.js +1 -1
  31. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  32. package/es/components/actions/ItemButton/index.js +1 -1
  33. package/es/components/actions/Link/Link.js +1 -1
  34. package/es/components/actions/Menu/Menu.js +1 -1
  35. package/es/components/actions/Menu/MenuItem.js +1 -1
  36. package/es/components/actions/Menu/MenuSection.js +1 -1
  37. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  38. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  39. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  40. package/es/components/actions/Menu/context.js +1 -1
  41. package/es/components/actions/Menu/index.js +1 -1
  42. package/es/components/actions/Menu/styled.js +1 -1
  43. package/es/components/actions/index.js +1 -1
  44. package/es/components/actions/use-action.js +1 -1
  45. package/es/components/actions/use-anchored-menu.js +1 -1
  46. package/es/components/actions/use-context-menu.js +1 -1
  47. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  48. package/es/components/content/Alert/Alert.js +1 -1
  49. package/es/components/content/Alert/index.js +1 -1
  50. package/es/components/content/Alert/types.js +1 -1
  51. package/es/components/content/Alert/use-alert.js +1 -1
  52. package/es/components/content/Avatar/Avatar.js +1 -1
  53. package/es/components/content/Badge/Badge.js +1 -1
  54. package/es/components/content/Card/Card.js +1 -1
  55. package/es/components/content/Content.js +1 -1
  56. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  57. package/es/components/content/CopyPasteBlock/index.js +1 -1
  58. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  59. package/es/components/content/CopySnippet/index.js +1 -1
  60. package/es/components/content/Divider.js +1 -1
  61. package/es/components/content/Footer.js +1 -1
  62. package/es/components/content/Header.js +1 -1
  63. package/es/components/content/HotKeys/HotKeys.js +1 -1
  64. package/es/components/content/HotKeys/index.js +1 -1
  65. package/es/components/content/ItemBase/ItemBase.js +1 -1
  66. package/es/components/content/ItemBase/index.js +1 -1
  67. package/es/components/content/List/SectionHeading.js +1 -1
  68. package/es/components/content/List/index.js +1 -1
  69. package/es/components/content/Paragraph.js +1 -1
  70. package/es/components/content/Placeholder/Placeholder.js +1 -1
  71. package/es/components/content/PrismCode/PrismCode.js +1 -1
  72. package/es/components/content/PrismCode/prismSetup.js +1 -1
  73. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  74. package/es/components/content/Result/Result.js +1 -1
  75. package/es/components/content/Skeleton/Skeleton.js +1 -1
  76. package/es/components/content/Tag/Tag.js +1 -1
  77. package/es/components/content/Text.js +1 -1
  78. package/es/components/content/Title.js +1 -1
  79. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  80. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  81. package/es/components/fields/Checkbox/context.js +1 -1
  82. package/es/components/fields/Checkbox/index.js +1 -1
  83. package/es/components/fields/ComboBox/ComboBox.js +1 -1
  84. package/es/components/fields/ComboBox/index.js +1 -1
  85. package/es/components/fields/DatePicker/DateInput.js +1 -1
  86. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  87. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  88. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  89. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  90. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  91. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  92. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  93. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  94. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  95. package/es/components/fields/DatePicker/index.js +1 -1
  96. package/es/components/fields/DatePicker/intl.js +1 -1
  97. package/es/components/fields/DatePicker/parseDate.js +1 -1
  98. package/es/components/fields/DatePicker/props.js +1 -1
  99. package/es/components/fields/DatePicker/types.js +1 -1
  100. package/es/components/fields/DatePicker/utils.js +1 -1
  101. package/es/components/fields/FileInput/FileInput.js +1 -1
  102. package/es/components/fields/FilterListBox/FilterListBox.js +8 -20
  103. package/es/components/fields/FilterListBox/index.js +1 -1
  104. package/es/components/fields/FilterPicker/FilterPicker.js +4 -4
  105. package/es/components/fields/FilterPicker/index.js +1 -1
  106. package/es/components/fields/Input/Input.js +1 -1
  107. package/es/components/fields/Input/index.js +1 -1
  108. package/es/components/fields/ListBox/ListBox.js +1 -1
  109. package/es/components/fields/ListBox/index.js +1 -1
  110. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  111. package/es/components/fields/NumberInput/StepButton.js +1 -1
  112. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  113. package/es/components/fields/Picker/Picker.js +782 -0
  114. package/es/components/fields/Picker/index.js +10 -0
  115. package/es/components/fields/RadioGroup/Radio.js +1 -1
  116. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  117. package/es/components/fields/RadioGroup/context.js +1 -1
  118. package/es/components/fields/RadioGroup/index.js +1 -1
  119. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  120. package/es/components/fields/SearchInput/index.js +1 -1
  121. package/es/components/fields/Select/Select.js +1 -1
  122. package/es/components/fields/Select/index.js +1 -1
  123. package/es/components/fields/Slider/Gradation.js +1 -1
  124. package/es/components/fields/Slider/Header.js +1 -1
  125. package/es/components/fields/Slider/RangeSlider.js +1 -1
  126. package/es/components/fields/Slider/Slider.js +1 -1
  127. package/es/components/fields/Slider/SliderBase.js +1 -1
  128. package/es/components/fields/Slider/SliderInput.js +1 -1
  129. package/es/components/fields/Slider/SliderThumb.js +1 -1
  130. package/es/components/fields/Slider/SliderTrack.js +1 -1
  131. package/es/components/fields/Slider/elements.js +1 -1
  132. package/es/components/fields/Slider/index.js +1 -1
  133. package/es/components/fields/Slider/types.js +1 -1
  134. package/es/components/fields/Switch/Switch.js +1 -1
  135. package/es/components/fields/Switch/index.js +1 -1
  136. package/es/components/fields/TextArea/TextArea.js +1 -1
  137. package/es/components/fields/TextArea/index.js +1 -1
  138. package/es/components/fields/TextInput/TextInput.js +1 -1
  139. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  140. package/es/components/fields/TextInput/index.js +1 -1
  141. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  142. package/es/components/fields/TextInputMapper/index.js +1 -1
  143. package/es/components/fields/index.js +2 -1
  144. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  145. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  146. package/es/components/form/FieldWrapper/index.js +1 -1
  147. package/es/components/form/FieldWrapper/types.js +1 -1
  148. package/es/components/form/Form/Field.js +1 -1
  149. package/es/components/form/Form/Form.js +1 -1
  150. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  151. package/es/components/form/Form/ResetButton/index.js +1 -1
  152. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  153. package/es/components/form/Form/SubmitButton/index.js +1 -1
  154. package/es/components/form/Form/SubmitError.js +1 -1
  155. package/es/components/form/Form/index.js +1 -1
  156. package/es/components/form/Form/types.js +1 -1
  157. package/es/components/form/Form/use-field/index.js +1 -1
  158. package/es/components/form/Form/use-field/types.js +1 -1
  159. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  160. package/es/components/form/Form/use-field/use-field.js +1 -1
  161. package/es/components/form/Form/use-form.js +1 -1
  162. package/es/components/form/Form/validation.js +1 -1
  163. package/es/components/form/Label.js +1 -1
  164. package/es/components/form/index.js +1 -1
  165. package/es/components/form/wrapper.js +1 -1
  166. package/es/components/layout/Flex.js +1 -1
  167. package/es/components/layout/Flow.js +1 -1
  168. package/es/components/layout/Grid.js +1 -1
  169. package/es/components/layout/Panel.js +1 -1
  170. package/es/components/layout/Prefix.js +1 -1
  171. package/es/components/layout/ResizablePanel.js +1 -1
  172. package/es/components/layout/Space.js +1 -1
  173. package/es/components/layout/Suffix.js +1 -1
  174. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  175. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  176. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  177. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  178. package/es/components/other/Calendar/Calendar.js +1 -1
  179. package/es/components/other/Calendar/CalendarCell.js +1 -1
  180. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  181. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  182. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  183. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  184. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  185. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  186. package/es/components/overlays/AlertDialog/index.js +1 -1
  187. package/es/components/overlays/AlertDialog/types.js +1 -1
  188. package/es/components/overlays/Dialog/Dialog.js +1 -1
  189. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  190. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  191. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  192. package/es/components/overlays/Dialog/context.js +1 -1
  193. package/es/components/overlays/Dialog/index.js +1 -1
  194. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  195. package/es/components/overlays/Modal/Modal.js +1 -1
  196. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  197. package/es/components/overlays/Modal/Overlay.js +1 -1
  198. package/es/components/overlays/Modal/Popover.js +1 -1
  199. package/es/components/overlays/Modal/Tray.js +1 -1
  200. package/es/components/overlays/Modal/Underlay.js +1 -1
  201. package/es/components/overlays/Modal/index.js +1 -1
  202. package/es/components/overlays/Modal/types.js +1 -1
  203. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  204. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  205. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  206. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  207. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
  208. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  209. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  210. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  211. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  212. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  213. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  214. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  215. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  216. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  217. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  218. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  219. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  220. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  221. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  222. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  223. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  224. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  225. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  226. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  227. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  228. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  229. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  230. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  231. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  232. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  233. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  234. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  235. package/es/components/overlays/NewNotifications/index.js +1 -1
  236. package/es/components/overlays/NewNotifications/types.js +1 -1
  237. package/es/components/overlays/Notification/Notification.js +1 -1
  238. package/es/components/overlays/OverlayWrapper.js +1 -1
  239. package/es/components/overlays/Toasts/Toast.js +1 -1
  240. package/es/components/overlays/Toasts/index.js +1 -1
  241. package/es/components/overlays/Toasts/types.js +1 -1
  242. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  243. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  244. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  245. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  246. package/es/components/overlays/Tooltip/context.js +1 -1
  247. package/es/components/overlays/Tooltip/index.js +1 -1
  248. package/es/components/portal/Portal.js +1 -1
  249. package/es/components/portal/PortalProvider.js +1 -1
  250. package/es/components/portal/index.js +1 -1
  251. package/es/components/portal/types.js +1 -1
  252. package/es/components/portal/usePortal.js +1 -1
  253. package/es/components/shared/InvalidIcon.js +1 -1
  254. package/es/components/shared/ValidIcon.js +1 -1
  255. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  256. package/es/components/status/LoadingAnimation/index.js +1 -1
  257. package/es/components/status/Spin/Cube.js +1 -1
  258. package/es/components/status/Spin/InternalSpinner.js +1 -1
  259. package/es/components/status/Spin/Spin.js +1 -1
  260. package/es/components/status/Spin/SpinsContainer.js +1 -1
  261. package/es/components/status/Spin/index.js +1 -1
  262. package/es/components/status/Spin/types.js +1 -1
  263. package/es/components/status/index.js +1 -1
  264. package/es/data/item-themes.js +1 -1
  265. package/es/data/themes.js +1 -1
  266. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  267. package/es/icons/AdjustmentsIcon.js +1 -1
  268. package/es/icons/AiIcon.js +1 -1
  269. package/es/icons/AreaChartIcon.js +1 -1
  270. package/es/icons/BackwardIcon.js +1 -1
  271. package/es/icons/BarChartIcon.js +1 -1
  272. package/es/icons/BellFilledIcon.js +1 -1
  273. package/es/icons/BellIcon.js +1 -1
  274. package/es/icons/BooleanIcon.js +1 -1
  275. package/es/icons/CalendarEditIcon.js +1 -1
  276. package/es/icons/CalendarIcon.js +1 -1
  277. package/es/icons/CaretDownIcon.js +1 -1
  278. package/es/icons/CaretUpIcon.js +1 -1
  279. package/es/icons/ChartAreaStackedIcon.js +1 -1
  280. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  281. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  282. package/es/icons/ChartBarGroupedIcon.js +1 -1
  283. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  284. package/es/icons/ChartBarLineIcon.js +1 -1
  285. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  286. package/es/icons/ChartBarStackedIcon.js +1 -1
  287. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  288. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  289. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  290. package/es/icons/ChartBoxPlotIcon.js +1 -1
  291. package/es/icons/ChartBubbleIcon.js +1 -1
  292. package/es/icons/ChartDonut2Icon.js +1 -1
  293. package/es/icons/ChartFunnelIcon.js +1 -1
  294. package/es/icons/ChartHeatmapIcon.js +1 -1
  295. package/es/icons/ChartKPIIcon.js +1 -1
  296. package/es/icons/ChartPie2Icon.js +1 -1
  297. package/es/icons/ChartScatterIcon.js +1 -1
  298. package/es/icons/CheckCircleFilledIcon.js +1 -1
  299. package/es/icons/CheckCircleIcon.js +1 -1
  300. package/es/icons/CheckIcon.js +1 -1
  301. package/es/icons/CircleFilledIcon.js +1 -1
  302. package/es/icons/ClearIcon.js +1 -1
  303. package/es/icons/CloseCircleFilledIcon.js +1 -1
  304. package/es/icons/CloseCircleIcon.js +1 -1
  305. package/es/icons/CloseIcon.js +1 -1
  306. package/es/icons/CodeIcon.js +1 -1
  307. package/es/icons/CopyIcon.js +1 -1
  308. package/es/icons/CountIcon.js +1 -1
  309. package/es/icons/CubeIcon.js +1 -1
  310. package/es/icons/CurrencyDollarIcon.js +1 -1
  311. package/es/icons/DangerIcon.js +1 -1
  312. package/es/icons/DashboardIcon.js +1 -1
  313. package/es/icons/DatabaseIcon.js +1 -1
  314. package/es/icons/DecimalDecreaseIcon.js +1 -1
  315. package/es/icons/DecimalIncreaseIcon.js +1 -1
  316. package/es/icons/DirectionIcon.js +1 -1
  317. package/es/icons/DonutIcon.js +1 -1
  318. package/es/icons/DownIcon.js +1 -1
  319. package/es/icons/EditIcon.js +1 -1
  320. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  321. package/es/icons/ExclamationCircleIcon.js +1 -1
  322. package/es/icons/ExclamationIcon.js +1 -1
  323. package/es/icons/EyeIcon.js +1 -1
  324. package/es/icons/EyeInvisibleIcon.js +1 -1
  325. package/es/icons/FilterIcon.js +1 -1
  326. package/es/icons/FolderFilledIcon.js +1 -1
  327. package/es/icons/FolderIcon.js +1 -1
  328. package/es/icons/FolderOpenFilledIcon.js +1 -1
  329. package/es/icons/FolderOpenIcon.js +1 -1
  330. package/es/icons/ForwardIcon.js +1 -1
  331. package/es/icons/HierarchyIcon.js +1 -1
  332. package/es/icons/Icon.js +1 -1
  333. package/es/icons/InfoCircleIcon.js +1 -1
  334. package/es/icons/InfoIcon.js +1 -1
  335. package/es/icons/KeyIcon.js +1 -1
  336. package/es/icons/LeftIcon.js +1 -1
  337. package/es/icons/LineChartIcon.js +1 -1
  338. package/es/icons/LoadingIcon.js +1 -1
  339. package/es/icons/LockFilledIcon.js +1 -1
  340. package/es/icons/LockIcon.js +1 -1
  341. package/es/icons/MoreIcon.js +1 -1
  342. package/es/icons/NotAllowedIcon.js +1 -1
  343. package/es/icons/Number123Icon.js +1 -1
  344. package/es/icons/NumberIcon.js +1 -1
  345. package/es/icons/PauseCircleFilledIcon.js +1 -1
  346. package/es/icons/PauseCircleIcon.js +1 -1
  347. package/es/icons/PauseIcon.js +1 -1
  348. package/es/icons/PercentageIcon.js +1 -1
  349. package/es/icons/PieChartIcon.js +1 -1
  350. package/es/icons/PlayCircleIcon.js +1 -1
  351. package/es/icons/PlayIcon.js +1 -1
  352. package/es/icons/PlusIcon.js +1 -1
  353. package/es/icons/ReloadIcon.js +1 -1
  354. package/es/icons/ReportIcon.js +1 -1
  355. package/es/icons/ReturnIcon.js +1 -1
  356. package/es/icons/RightIcon.js +1 -1
  357. package/es/icons/SchemeIcon.js +1 -1
  358. package/es/icons/SearchIcon.js +1 -1
  359. package/es/icons/SettingsIcon.js +1 -1
  360. package/es/icons/ShieldFilledIcon.js +1 -1
  361. package/es/icons/ShieldIcon.js +1 -1
  362. package/es/icons/SlashIcon.js +1 -1
  363. package/es/icons/SparklesIcon.js +1 -1
  364. package/es/icons/SqlIcon.js +1 -1
  365. package/es/icons/StatsIcon.js +1 -1
  366. package/es/icons/StopIcon.js +1 -1
  367. package/es/icons/StringIcon.js +1 -1
  368. package/es/icons/SwitchIcon.js +1 -1
  369. package/es/icons/TableIcon.js +1 -1
  370. package/es/icons/ThumbsDownIcon.js +1 -1
  371. package/es/icons/ThumbsUpIcon.js +1 -1
  372. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  373. package/es/icons/ThunderboltFilledIcon.js +1 -1
  374. package/es/icons/ThunderboltIcon.js +1 -1
  375. package/es/icons/TimeIcon.js +1 -1
  376. package/es/icons/UnlockIcon.js +1 -1
  377. package/es/icons/UpIcon.js +1 -1
  378. package/es/icons/UserGroupIcon.js +1 -1
  379. package/es/icons/UserIcon.js +1 -1
  380. package/es/icons/UserLockIcon.js +1 -1
  381. package/es/icons/ViewIcon.js +1 -1
  382. package/es/icons/WarningFilledIcon.js +1 -1
  383. package/es/icons/WarningIcon.js +1 -1
  384. package/es/icons/add-new-icon.js +1 -1
  385. package/es/icons/index.js +1 -1
  386. package/es/icons/wrap-icon.js +1 -1
  387. package/es/index.js +1 -1
  388. package/es/provider.js +1 -1
  389. package/es/providers/TrackingProvider.js +1 -1
  390. package/es/providers/navigation.types.js +1 -1
  391. package/es/providers/navigationAdapter.default.js +1 -1
  392. package/es/services/notification.js +1 -1
  393. package/es/shared/form.js +1 -1
  394. package/es/shared/index.js +1 -1
  395. package/es/stories/Form.legacy-stories.js +1 -1
  396. package/es/stories/FormFieldArgs.js +1 -1
  397. package/es/stories/Layout.stories.js +1 -1
  398. package/es/stories/Tasty.stories.js +1 -1
  399. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  400. package/es/stories/components/DialogFormApp.js +1 -1
  401. package/es/stories/components/StyledButton.js +1 -1
  402. package/es/stories/lists/baseProps.js +1 -1
  403. package/es/tasty/debug.js +1 -1
  404. package/es/tasty/index.js +1 -1
  405. package/es/tasty/injector/index.js +1 -1
  406. package/es/tasty/injector/injector.js +1 -1
  407. package/es/tasty/injector/sheet-manager.js +1 -1
  408. package/es/tasty/injector/types.js +1 -1
  409. package/es/tasty/parser/classify.js +1 -1
  410. package/es/tasty/parser/const.js +1 -1
  411. package/es/tasty/parser/lru.js +1 -1
  412. package/es/tasty/parser/parser.js +1 -1
  413. package/es/tasty/parser/tokenizer.js +1 -1
  414. package/es/tasty/parser/types.js +1 -1
  415. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  416. package/es/tasty/styles/align.js +1 -1
  417. package/es/tasty/styles/border.js +1 -1
  418. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  419. package/es/tasty/styles/color.js +1 -1
  420. package/es/tasty/styles/createStyle.js +1 -1
  421. package/es/tasty/styles/dimension.js +1 -1
  422. package/es/tasty/styles/display.js +1 -1
  423. package/es/tasty/styles/fade.js +1 -1
  424. package/es/tasty/styles/fill.js +1 -1
  425. package/es/tasty/styles/flow.js +1 -1
  426. package/es/tasty/styles/font.js +1 -1
  427. package/es/tasty/styles/fontStyle.js +1 -1
  428. package/es/tasty/styles/gap.js +1 -1
  429. package/es/tasty/styles/groupRadius.js +1 -1
  430. package/es/tasty/styles/height.js +1 -1
  431. package/es/tasty/styles/index.js +1 -1
  432. package/es/tasty/styles/inset.js +1 -1
  433. package/es/tasty/styles/justify.js +1 -1
  434. package/es/tasty/styles/list.js +1 -1
  435. package/es/tasty/styles/margin.js +1 -1
  436. package/es/tasty/styles/outline.js +1 -1
  437. package/es/tasty/styles/padding.js +1 -1
  438. package/es/tasty/styles/place.js +1 -1
  439. package/es/tasty/styles/predefined.js +1 -1
  440. package/es/tasty/styles/preset.js +1 -1
  441. package/es/tasty/styles/radius.js +1 -1
  442. package/es/tasty/styles/reset.js +1 -1
  443. package/es/tasty/styles/scrollbar.js +1 -1
  444. package/es/tasty/styles/shadow.js +1 -1
  445. package/es/tasty/styles/styledScrollbar.js +1 -1
  446. package/es/tasty/styles/transition.js +1 -1
  447. package/es/tasty/styles/types.js +1 -1
  448. package/es/tasty/styles/width.js +1 -1
  449. package/es/tasty/tasty.js +1 -1
  450. package/es/tasty/types.js +1 -1
  451. package/es/tasty/utils/cache-wrapper.js +1 -1
  452. package/es/tasty/utils/case-converter.js +1 -1
  453. package/es/tasty/utils/colors.js +1 -1
  454. package/es/tasty/utils/dotize.js +1 -1
  455. package/es/tasty/utils/filterBaseProps.js +1 -1
  456. package/es/tasty/utils/getDisplayName.js +1 -1
  457. package/es/tasty/utils/getModCombinations.js +1 -1
  458. package/es/tasty/utils/isDevEnv.js +1 -1
  459. package/es/tasty/utils/mergeStyles.js +1 -1
  460. package/es/tasty/utils/modAttrs.js +1 -1
  461. package/es/tasty/utils/renderStyles.js +1 -1
  462. package/es/tasty/utils/responsive.js +1 -1
  463. package/es/tasty/utils/string.js +1 -1
  464. package/es/tasty/utils/styles.js +1 -1
  465. package/es/tasty/utils/warnings.js +1 -1
  466. package/es/tokens.js +1 -1
  467. package/es/type-checks.js +1 -1
  468. package/es/utils/ResizeSensor.js +1 -1
  469. package/es/utils/modules.js +1 -1
  470. package/es/utils/promise.js +1 -1
  471. package/es/utils/random.js +1 -1
  472. package/es/utils/range.js +1 -1
  473. package/es/utils/react/Slots.js +1 -1
  474. package/es/utils/react/chain.js +1 -1
  475. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  476. package/es/utils/react/index.js +1 -1
  477. package/es/utils/react/interactions.js +1 -1
  478. package/es/utils/react/isTextOnly.js +1 -1
  479. package/es/utils/react/mapProps.js +1 -1
  480. package/es/utils/react/mergeProps.js +1 -1
  481. package/es/utils/react/nullableValue.js +1 -1
  482. package/es/utils/react/sharedStore.js +1 -1
  483. package/es/utils/react/useCombinedRefs.js +1 -1
  484. package/es/utils/react/useControlledFocusVisible.js +1 -1
  485. package/es/utils/react/useEventBus.js +1 -1
  486. package/es/utils/react/useId.js +1 -1
  487. package/es/utils/react/useIsDarwin.js +1 -1
  488. package/es/utils/react/useKeySymbols.js +1 -1
  489. package/es/utils/react/useLayoutEffect.js +1 -1
  490. package/es/utils/react/useQaProps.js +1 -1
  491. package/es/utils/react/useViewportSize.js +1 -1
  492. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  493. package/es/utils/transitions.js +1 -1
  494. package/es/utils/tree.js +1 -1
  495. package/es/utils/warnings.js +1 -1
  496. package/es/version.js +2 -2
  497. package/package.json +1 -1
  498. package/types/components/fields/FilterListBox/FilterListBox.d.ts +2 -15
  499. package/types/components/fields/Picker/Picker.d.ts +62 -0
  500. package/types/components/fields/Picker/index.d.ts +2 -0
  501. package/types/components/fields/index.d.ts +1 -0
@@ -0,0 +1,782 @@
1
+ /**
2
+ * @license MIT
3
+ * author: Cube Dev Team
4
+ * @cube-dev/ui-kit v0.0.0-canary-5141f6d
5
+ * Released under the MIT license.
6
+ */
7
+
8
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
+ import { Children, cloneElement, forwardRef, useCallback, useEffect, useMemo, useRef, useState, } from 'react';
10
+ import { FocusScope, useKeyboard } from 'react-aria';
11
+ import { Section as BaseSection, Item as ReactAriaItem, } 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: 'Picker',
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 { 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, ...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 cachedChildrenOrder = useRef(null);
84
+ // Cache for sorted items array when using `items` prop
85
+ const cachedItemsOrder = useRef(null);
86
+ const triggerRef = useRef(null);
87
+ // ---------------------------------------------------------------------------
88
+ // Invalidate cached sorting whenever the available options change.
89
+ // This ensures newly provided options are displayed and properly sorted on
90
+ // the next popover open instead of re-using a stale order from a previous
91
+ // session (which caused only the previously selected options to be rendered
92
+ // or the list to appear unsorted).
93
+ // ---------------------------------------------------------------------------
94
+ useEffect(() => {
95
+ cachedChildrenOrder.current = null;
96
+ }, [children]);
97
+ useEffect(() => {
98
+ cachedItemsOrder.current = null;
99
+ }, [items]);
100
+ const isControlledSingle = selectedKey !== undefined;
101
+ const isControlledMultiple = selectedKeys !== undefined;
102
+ const effectiveSelectedKey = isControlledSingle
103
+ ? selectedKey
104
+ : internalSelectedKey;
105
+ const effectiveSelectedKeys = isControlledMultiple
106
+ ? selectedKeys
107
+ : internalSelectedKeys;
108
+ // Utility: remove React's ".$" / "." prefixes from element keys so that we
109
+ // can compare them with user-provided keys.
110
+ const normalizeKeyValue = (key) => {
111
+ if (key == null)
112
+ return '';
113
+ // React escapes "=" as "=0" and ":" as "=2" when it stores keys internally.
114
+ // We strip the possible React prefixes first and then un-escape those sequences
115
+ // so that callers work with the original key values supplied by the user.
116
+ let str = String(key);
117
+ // Remove React array/object key prefixes (".$" or ".") if present.
118
+ if (str.startsWith('.$')) {
119
+ str = str.slice(2);
120
+ }
121
+ else if (str.startsWith('.')) {
122
+ str = str.slice(1);
123
+ }
124
+ // Un-escape React's internal key encodings.
125
+ return str.replace(/=2/g, ':').replace(/=0/g, '=');
126
+ };
127
+ // ---------------------------------------------------------------------------
128
+ // Map public-facing keys (without React's "." prefix) to the actual React
129
+ // element keys that appear in the collection (which usually have the `.$`
130
+ // or `.` prefix added by React when children are in an array). This ensures
131
+ // that the key we pass to ListBox exactly matches the keys it receives from
132
+ // React Aria, so the initial selection is highlighted correctly.
133
+ // ---------------------------------------------------------------------------
134
+ const findReactKey = useCallback((lookup) => {
135
+ if (lookup == null)
136
+ return lookup;
137
+ const normalizedLookup = normalizeKeyValue(lookup);
138
+ let foundKey = lookup;
139
+ const traverse = (nodes) => {
140
+ Children.forEach(nodes, (child) => {
141
+ if (!child || typeof child !== 'object')
142
+ return;
143
+ const element = child;
144
+ if (element.key != null) {
145
+ if (normalizeKeyValue(element.key) === normalizedLookup) {
146
+ foundKey = element.key;
147
+ }
148
+ }
149
+ if (element.props &&
150
+ typeof element.props === 'object' &&
151
+ 'children' in element.props) {
152
+ traverse(element.props.children);
153
+ }
154
+ });
155
+ };
156
+ if (children)
157
+ traverse(children);
158
+ return foundKey;
159
+ }, [children]);
160
+ const mappedSelectedKey = useMemo(() => {
161
+ if (selectionMode !== 'single')
162
+ return null;
163
+ return effectiveSelectedKey ? findReactKey(effectiveSelectedKey) : null;
164
+ }, [selectionMode, effectiveSelectedKey, findReactKey]);
165
+ const mappedSelectedKeys = useMemo(() => {
166
+ if (selectionMode !== 'multiple')
167
+ return undefined;
168
+ if (effectiveSelectedKeys === 'all')
169
+ return 'all';
170
+ if (Array.isArray(effectiveSelectedKeys)) {
171
+ return effectiveSelectedKeys.map((k) => findReactKey(k));
172
+ }
173
+ return effectiveSelectedKeys;
174
+ }, [selectionMode, effectiveSelectedKeys, findReactKey]);
175
+ // Given an iterable of keys (array or Set) toggle membership for duplicates
176
+ const processSelectionArray = (iterable) => {
177
+ const resultSet = new Set();
178
+ for (const key of iterable) {
179
+ const nKey = String(key);
180
+ if (resultSet.has(nKey)) {
181
+ resultSet.delete(nKey); // toggle off if clicked twice
182
+ }
183
+ else {
184
+ resultSet.add(nKey); // select
185
+ }
186
+ }
187
+ return Array.from(resultSet);
188
+ };
189
+ // Helper to get selected item labels for display
190
+ const getSelectedLabels = () => {
191
+ // Handle "all" selection - return all available labels
192
+ if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {
193
+ const allLabels = [];
194
+ // Extract from items prop if available
195
+ if (items) {
196
+ const extractFromItems = (itemsArray) => {
197
+ itemsArray.forEach((item) => {
198
+ if (item && typeof item === 'object') {
199
+ const itemObj = item;
200
+ if (Array.isArray(itemObj.children)) {
201
+ // Section-like object
202
+ extractFromItems(itemObj.children);
203
+ }
204
+ else {
205
+ // Regular item - extract label
206
+ const label = itemObj.textValue ||
207
+ itemObj.label ||
208
+ (typeof itemObj.children === 'string'
209
+ ? itemObj.children
210
+ : '') ||
211
+ String(itemObj.children ||
212
+ itemObj.key ||
213
+ itemObj.id ||
214
+ item);
215
+ allLabels.push(label);
216
+ }
217
+ }
218
+ });
219
+ };
220
+ const itemsArray = Array.isArray(items)
221
+ ? items
222
+ : Array.from(items);
223
+ extractFromItems(itemsArray);
224
+ return allLabels;
225
+ }
226
+ // Extract from children if available
227
+ if (children) {
228
+ const extractAllLabels = (nodes) => {
229
+ if (!nodes)
230
+ return;
231
+ Children.forEach(nodes, (child) => {
232
+ if (!child || typeof child !== 'object')
233
+ return;
234
+ const element = child;
235
+ if (element.type === ReactAriaItem) {
236
+ const props = element.props;
237
+ const label = props.textValue ||
238
+ (typeof props.children === 'string' ? props.children : '') ||
239
+ String(props.children || '');
240
+ allLabels.push(label);
241
+ }
242
+ if (element.props &&
243
+ typeof element.props === 'object' &&
244
+ 'children' in element.props) {
245
+ extractAllLabels(element.props.children);
246
+ }
247
+ });
248
+ };
249
+ extractAllLabels(children);
250
+ return allLabels;
251
+ }
252
+ return allLabels;
253
+ }
254
+ const selectedSet = new Set(selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
255
+ ? (effectiveSelectedKeys || []).map((k) => normalizeKeyValue(k))
256
+ : effectiveSelectedKey != null
257
+ ? [normalizeKeyValue(effectiveSelectedKey)]
258
+ : []);
259
+ const labels = [];
260
+ const processedKeys = new Set();
261
+ // Extract from items prop if available
262
+ if (items) {
263
+ const extractFromItems = (itemsArray) => {
264
+ itemsArray.forEach((item) => {
265
+ if (item && typeof item === 'object') {
266
+ const itemObj = item;
267
+ if (Array.isArray(itemObj.children)) {
268
+ // Section-like object
269
+ extractFromItems(itemObj.children);
270
+ }
271
+ else {
272
+ // Regular item - check if selected
273
+ const itemKey = itemObj.key || itemObj.id;
274
+ if (itemKey != null &&
275
+ selectedSet.has(normalizeKeyValue(itemKey))) {
276
+ const label = itemObj.textValue ||
277
+ itemObj.label ||
278
+ (typeof itemObj.children === 'string'
279
+ ? itemObj.children
280
+ : '') ||
281
+ String(itemObj.children || itemKey);
282
+ labels.push(label);
283
+ processedKeys.add(normalizeKeyValue(itemKey));
284
+ }
285
+ }
286
+ }
287
+ });
288
+ };
289
+ const itemsArray = Array.isArray(items)
290
+ ? items
291
+ : Array.from(items);
292
+ extractFromItems(itemsArray);
293
+ }
294
+ // Extract from children if available (for mixed mode or fallback)
295
+ if (children) {
296
+ const extractLabelsWithTracking = (nodes) => {
297
+ if (!nodes)
298
+ return;
299
+ Children.forEach(nodes, (child) => {
300
+ if (!child || typeof child !== 'object')
301
+ return;
302
+ const element = child;
303
+ if (element.type === ReactAriaItem) {
304
+ const childKey = String(element.key);
305
+ if (selectedSet.has(normalizeKeyValue(childKey))) {
306
+ const props = element.props;
307
+ const label = props.textValue ||
308
+ (typeof props.children === 'string' ? props.children : '') ||
309
+ String(props.children || '');
310
+ labels.push(label);
311
+ processedKeys.add(normalizeKeyValue(childKey));
312
+ }
313
+ }
314
+ if (element.props &&
315
+ typeof element.props === 'object' &&
316
+ 'children' in element.props) {
317
+ extractLabelsWithTracking(element.props.children);
318
+ }
319
+ });
320
+ };
321
+ extractLabelsWithTracking(children);
322
+ }
323
+ // Handle custom values that don't have corresponding items/children
324
+ const selectedKeysArr = selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
325
+ ? (effectiveSelectedKeys || []).map(String)
326
+ : effectiveSelectedKey != null
327
+ ? [String(effectiveSelectedKey)]
328
+ : [];
329
+ // Add labels for any selected keys that weren't processed (custom values)
330
+ selectedKeysArr.forEach((key) => {
331
+ if (!processedKeys.has(normalizeKeyValue(key))) {
332
+ // This is a custom value, use the key as the label
333
+ labels.push(key);
334
+ }
335
+ });
336
+ return labels;
337
+ };
338
+ const selectedLabels = getSelectedLabels();
339
+ const hasSelection = selectedLabels.length > 0;
340
+ // Always keep the latest selection in a ref (with normalized keys) so that we can read it synchronously in the popover close effect.
341
+ const latestSelectionRef = useRef({
342
+ single: effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,
343
+ multiple: effectiveSelectedKeys === 'all'
344
+ ? 'all'
345
+ : (effectiveSelectedKeys ?? []).map(String),
346
+ });
347
+ useEffect(() => {
348
+ latestSelectionRef.current = {
349
+ single: effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,
350
+ multiple: effectiveSelectedKeys === 'all'
351
+ ? 'all'
352
+ : (effectiveSelectedKeys ?? []).map(String),
353
+ };
354
+ }, [effectiveSelectedKey, effectiveSelectedKeys]);
355
+ const selectionsWhenClosed = useRef({ single: null, multiple: [] });
356
+ // Capture the initial selection (from defaultSelectedKey(s)) so that
357
+ // the very first popover open can already use it for sorting.
358
+ useEffect(() => {
359
+ selectionsWhenClosed.current = { ...latestSelectionRef.current };
360
+ }, []); // run only once on mount
361
+ // Function to sort children with selected items on top
362
+ const getSortedChildren = useCallback(() => {
363
+ // If children is not provided or is a render function, return it as-is
364
+ if (!children || typeof children === 'function')
365
+ return children;
366
+ // Reuse the cached order if we have it. We only want to compute the sorted
367
+ // order once per pop-over opening session. The cache is cleared when the
368
+ // pop-over closes so the next opening can recompute.
369
+ if (cachedChildrenOrder.current) {
370
+ return cachedChildrenOrder.current;
371
+ }
372
+ // Popover is open – compute (or recompute) the sorted order for this
373
+ // session.
374
+ // Determine if there were any selections when the popover was previously closed.
375
+ const hadSelectionsWhenClosed = selectionMode === 'multiple'
376
+ ? selectionsWhenClosed.current.multiple.length > 0
377
+ : selectionsWhenClosed.current.single !== null;
378
+ // Only apply sorting when there were selections in the previous session.
379
+ // We intentionally do not depend on the `isPopoverOpen` flag here because that
380
+ // flag is updated **after** the first render triggered by clicking the
381
+ // trigger button. Relying on it caused a timing issue where the very first
382
+ // render of a freshly-opened popover was unsorted. By removing the
383
+ // `isPopoverOpen` check we ensure items are already sorted during that first
384
+ // render while still maintaining stable order within an open popover thanks
385
+ // to the `cachedChildrenOrder` guard above.
386
+ if (!hadSelectionsWhenClosed) {
387
+ return children;
388
+ }
389
+ // Create selected keys set for fast lookup
390
+ const selectedSet = new Set();
391
+ if (selectionMode === 'multiple') {
392
+ if (selectionsWhenClosed.current.multiple === 'all') {
393
+ // Don't sort when "all" is selected, just return original children
394
+ return children;
395
+ }
396
+ else {
397
+ selectionsWhenClosed.current.multiple.forEach((key) => selectedSet.add(String(key)));
398
+ }
399
+ }
400
+ else if (selectionMode === 'single' &&
401
+ selectionsWhenClosed.current.single != null) {
402
+ selectedSet.add(String(selectionsWhenClosed.current.single));
403
+ }
404
+ // Helper function to check if an item is selected
405
+ const isItemSelected = (child) => {
406
+ return (child?.key != null && selectedSet.has(normalizeKeyValue(child.key)));
407
+ };
408
+ // Helper function to sort children array
409
+ const sortChildrenArray = (childrenArray) => {
410
+ const cloneWithNormalizedKey = (item) => cloneElement(item, {
411
+ key: item.key ? normalizeKeyValue(item.key) : undefined,
412
+ });
413
+ const selected = [];
414
+ const unselected = [];
415
+ childrenArray.forEach((child) => {
416
+ if (!child || typeof child !== 'object') {
417
+ unselected.push(child);
418
+ return;
419
+ }
420
+ const element = child;
421
+ // Handle sections - sort items within each section
422
+ if (element.type === BaseSection ||
423
+ element.type?.displayName === 'Section') {
424
+ const props = element.props;
425
+ const sectionChildren = Array.isArray(props.children)
426
+ ? props.children
427
+ : [props.children];
428
+ const selectedItems = [];
429
+ const unselectedItems = [];
430
+ sectionChildren.forEach((sectionChild) => {
431
+ if (sectionChild && typeof sectionChild === 'object') {
432
+ const sectionElement = sectionChild;
433
+ if (sectionElement.type === ReactAriaItem ||
434
+ sectionElement.type?.displayName === 'Item') {
435
+ const clonedItem = cloneWithNormalizedKey(sectionElement);
436
+ if (isItemSelected(sectionElement)) {
437
+ selectedItems.push(clonedItem);
438
+ }
439
+ else {
440
+ unselectedItems.push(clonedItem);
441
+ }
442
+ }
443
+ else {
444
+ unselectedItems.push(sectionChild);
445
+ }
446
+ }
447
+ else {
448
+ unselectedItems.push(sectionChild);
449
+ }
450
+ });
451
+ // Create new section with sorted children, preserving React element properly
452
+ unselected.push(cloneElement(element, {
453
+ ...element.props,
454
+ children: [...selectedItems, ...unselectedItems],
455
+ }));
456
+ }
457
+ // Handle non-section elements (items, dividers, etc.)
458
+ else {
459
+ const clonedItem = cloneWithNormalizedKey(element);
460
+ if (isItemSelected(element)) {
461
+ selected.push(clonedItem);
462
+ }
463
+ else {
464
+ unselected.push(clonedItem);
465
+ }
466
+ }
467
+ });
468
+ return [...selected, ...unselected];
469
+ };
470
+ // Sort the children
471
+ const childrenArray = Children.toArray(children);
472
+ const sortedChildren = sortChildrenArray(childrenArray);
473
+ // Cache the sorted order when popover opens or when we compute it for the
474
+ // first time before opening.
475
+ if (isPopoverOpen || !cachedChildrenOrder.current) {
476
+ cachedChildrenOrder.current = sortedChildren;
477
+ }
478
+ return sortedChildren;
479
+ }, [
480
+ children,
481
+ effectiveSelectedKeys,
482
+ effectiveSelectedKey,
483
+ selectionMode,
484
+ isPopoverOpen,
485
+ ]);
486
+ // Compute sorted items array when using `items` prop
487
+ const getSortedItems = useCallback(() => {
488
+ if (!items)
489
+ return items;
490
+ // Reuse the cached order if we have it. We only compute the sorted array
491
+ // once when the pop-over is opened. Cache is cleared on close.
492
+ if (cachedItemsOrder.current) {
493
+ return cachedItemsOrder.current;
494
+ }
495
+ const selectedSet = new Set();
496
+ const addSelected = (key) => {
497
+ if (key != null)
498
+ selectedSet.add(String(key));
499
+ };
500
+ if (selectionMode === 'multiple') {
501
+ if (selectionsWhenClosed.current.multiple === 'all') {
502
+ // Do not sort when all selected – keep original order
503
+ return items;
504
+ }
505
+ selectionsWhenClosed.current.multiple.forEach(addSelected);
506
+ }
507
+ else {
508
+ if (selectionsWhenClosed.current.single != null) {
509
+ addSelected(selectionsWhenClosed.current.single);
510
+ }
511
+ }
512
+ if (selectedSet.size === 0) {
513
+ return items;
514
+ }
515
+ // Helpers to extract key from item object
516
+ const getItemKey = (obj) => {
517
+ if (obj == null || typeof obj !== 'object')
518
+ return undefined;
519
+ const item = obj;
520
+ if (item.key != null)
521
+ return String(item.key);
522
+ if (item.id != null)
523
+ return String(item.id);
524
+ return undefined;
525
+ };
526
+ const sortArray = (arr) => {
527
+ const selectedArr = [];
528
+ const unselectedArr = [];
529
+ arr.forEach((obj) => {
530
+ const item = obj;
531
+ if (obj && Array.isArray(item.children)) {
532
+ // Section-like object – keep order, but sort its children
533
+ const sortedChildren = sortArray(item.children);
534
+ unselectedArr.push({ ...item, children: sortedChildren });
535
+ }
536
+ else {
537
+ const key = getItemKey(obj);
538
+ if (key && selectedSet.has(key)) {
539
+ selectedArr.push(obj);
540
+ }
541
+ else {
542
+ unselectedArr.push(obj);
543
+ }
544
+ }
545
+ });
546
+ return [...selectedArr, ...unselectedArr];
547
+ };
548
+ const itemsArray = Array.isArray(items)
549
+ ? items
550
+ : Array.from(items);
551
+ const sorted = sortArray(itemsArray);
552
+ if (isPopoverOpen || !cachedItemsOrder.current) {
553
+ cachedItemsOrder.current = sorted;
554
+ }
555
+ return sorted;
556
+ }, [
557
+ items,
558
+ selectionMode,
559
+ isPopoverOpen,
560
+ selectionsWhenClosed.current.multiple,
561
+ selectionsWhenClosed.current.single,
562
+ ]);
563
+ const finalItems = getSortedItems();
564
+ // We provide sorted children (if any) and sorted items
565
+ const finalChildren = getSortedChildren();
566
+ const renderTriggerContent = () => {
567
+ // When there is a selection and a custom summary renderer is provided – use it.
568
+ if (hasSelection && typeof renderSummary === 'function') {
569
+ if (selectionMode === 'single') {
570
+ return renderSummary({
571
+ selectedLabel: selectedLabels[0],
572
+ selectedKey: effectiveSelectedKey ?? null,
573
+ selectedLabels,
574
+ selectedKeys: effectiveSelectedKeys,
575
+ selectionMode: 'single',
576
+ });
577
+ }
578
+ return renderSummary({
579
+ selectedLabels,
580
+ selectedKeys: effectiveSelectedKeys,
581
+ selectionMode: 'multiple',
582
+ });
583
+ }
584
+ else if (hasSelection && renderSummary === false) {
585
+ return null;
586
+ }
587
+ let content = '';
588
+ if (!hasSelection) {
589
+ content = placeholder;
590
+ }
591
+ else if (selectionMode === 'single') {
592
+ content = selectedLabels[0];
593
+ }
594
+ else if (effectiveSelectedKeys === 'all') {
595
+ content = selectAllLabel;
596
+ }
597
+ else {
598
+ content = selectedLabels.join(', ');
599
+ }
600
+ if (!content) {
601
+ return null;
602
+ }
603
+ return (_jsx(Text, { ellipsis: true, style: { opacity: hasSelection ? 1 : 'var(--disabled-opacity)' }, children: content }));
604
+ };
605
+ const [shouldUpdatePosition, setShouldUpdatePosition] = useState(true);
606
+ // The trigger is rendered as a function so we can access the dialog state
607
+ const renderTrigger = (state) => {
608
+ // Listen for other menus opening and close this one if needed
609
+ useEffect(() => {
610
+ const unsubscribe = on('popover:open', (data) => {
611
+ // If another menu is opening and this Picker is open, close this one
612
+ if (data.menuId !== pickerId && state.isOpen) {
613
+ state.close();
614
+ }
615
+ });
616
+ return unsubscribe;
617
+ }, [on, pickerId, state]);
618
+ // Emit event when this Picker opens
619
+ useEffect(() => {
620
+ if (state.isOpen) {
621
+ emit('popover:open', { menuId: pickerId });
622
+ }
623
+ }, [state.isOpen, emit, pickerId]);
624
+ // Track popover open/close state to control sorting
625
+ useEffect(() => {
626
+ if (state.isOpen !== isPopoverOpen) {
627
+ setIsPopoverOpen(state.isOpen);
628
+ if (!state.isOpen) {
629
+ // Popover just closed – record the latest selection for the next opening
630
+ // and clear the cached order so the next session can compute afresh.
631
+ selectionsWhenClosed.current = { ...latestSelectionRef.current };
632
+ cachedChildrenOrder.current = null;
633
+ cachedItemsOrder.current = null;
634
+ }
635
+ }
636
+ }, [state.isOpen, isPopoverOpen]);
637
+ // Add keyboard support for arrow keys to open the popover
638
+ const { keyboardProps } = useKeyboard({
639
+ onKeyDown: (e) => {
640
+ if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !state.isOpen) {
641
+ e.preventDefault();
642
+ state.open();
643
+ }
644
+ },
645
+ });
646
+ useEffect(() => {
647
+ // Allow initial positioning & flipping when opening, then lock placement after transition
648
+ // Popover transition is ~120ms, give it a bit more time to finalize placement
649
+ if (state.isOpen) {
650
+ setShouldUpdatePosition(true);
651
+ const id = window.setTimeout(() => setShouldUpdatePosition(false), 160);
652
+ return () => window.clearTimeout(id);
653
+ }
654
+ else {
655
+ setShouldUpdatePosition(true);
656
+ }
657
+ }, [state.isOpen]);
658
+ // Clear button logic
659
+ let showClearButton = isClearable && hasSelection && !isDisabled && !props.isReadOnly;
660
+ // Clear function
661
+ let clearValue = useEvent(() => {
662
+ if (selectionMode === 'multiple') {
663
+ if (!isControlledMultiple) {
664
+ setInternalSelectedKeys([]);
665
+ }
666
+ onSelectionChange?.([]);
667
+ }
668
+ else {
669
+ if (!isControlledSingle) {
670
+ setInternalSelectedKey(null);
671
+ }
672
+ onSelectionChange?.(null);
673
+ }
674
+ if (state.isOpen) {
675
+ state.close();
676
+ }
677
+ triggerRef?.current?.focus?.();
678
+ onClear?.();
679
+ return false;
680
+ });
681
+ return (_jsx(ItemButton, { ref: triggerRef, "data-popover-trigger": true, type: type, theme: validationState === 'invalid' ? 'danger' : theme, size: size, isDisabled: isDisabled || isLoading, mods: {
682
+ placeholder: !hasSelection,
683
+ selected: hasSelection,
684
+ ...externalMods,
685
+ }, 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() }));
686
+ };
687
+ const pickerField = (_jsx(PickerWrapper, { qa: props.qa || 'Picker', 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) => {
688
+ const menuTriggerEl = el.closest('[data-popover-trigger]');
689
+ // If no menu trigger was clicked, allow closing
690
+ if (!menuTriggerEl)
691
+ return true;
692
+ // If the same trigger that opened this popover was clicked, allow closing (toggle)
693
+ if (menuTriggerEl === triggerRef?.current)
694
+ return true;
695
+ // Otherwise, don't close here. Let the event bus handle closing when the other opens.
696
+ return false;
697
+ }, children: [renderTrigger, (close) => (_jsx(Dialog, { display: "grid", styles: {
698
+ gridRows: '1sf',
699
+ width: '30x max-content 50vw',
700
+ ...popoverStyles,
701
+ }, 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' ? mappedSelectedKey : undefined, selectedKeys: selectionMode === 'multiple' ? mappedSelectedKeys : 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: listStateRef, isCheckable: isCheckable, mods: {
702
+ popover: true,
703
+ }, 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) => {
704
+ // For Picker, clicking the content area should close the popover
705
+ // in multiple selection mode (single mode already closes via onSelectionChange)
706
+ if ((selectionMode === 'multiple' && isCheckable) ||
707
+ key === '__ALL__') {
708
+ close();
709
+ }
710
+ }, onSelectionChange: (selection) => {
711
+ // No need to change any flags - children order is cached
712
+ // Update internal state if uncontrolled
713
+ if (selectionMode === 'single') {
714
+ if (!isControlledSingle) {
715
+ setInternalSelectedKey(selection);
716
+ }
717
+ }
718
+ else {
719
+ if (!isControlledMultiple) {
720
+ let normalized = selection;
721
+ if (selection === 'all') {
722
+ normalized = 'all';
723
+ }
724
+ else if (Array.isArray(selection)) {
725
+ normalized = processSelectionArray(selection);
726
+ }
727
+ else if (selection &&
728
+ typeof selection === 'object' &&
729
+ selection instanceof Set) {
730
+ normalized = processSelectionArray(selection);
731
+ }
732
+ setInternalSelectedKeys(normalized);
733
+ }
734
+ }
735
+ // Update latest selection ref synchronously
736
+ if (selectionMode === 'single') {
737
+ latestSelectionRef.current.single =
738
+ selection != null ? String(selection) : null;
739
+ }
740
+ else {
741
+ if (selection === 'all') {
742
+ latestSelectionRef.current.multiple = 'all';
743
+ }
744
+ else if (Array.isArray(selection)) {
745
+ latestSelectionRef.current.multiple = Array.from(new Set(processSelectionArray(selection)));
746
+ }
747
+ else if (selection &&
748
+ typeof selection === 'object' &&
749
+ selection instanceof Set) {
750
+ latestSelectionRef.current.multiple = Array.from(new Set(processSelectionArray(selection)));
751
+ }
752
+ else {
753
+ latestSelectionRef.current.multiple =
754
+ selection === 'all'
755
+ ? 'all'
756
+ : Array.isArray(selection)
757
+ ? selection.map(String)
758
+ : [];
759
+ }
760
+ }
761
+ onSelectionChange?.(selection);
762
+ if (selectionMode === 'single') {
763
+ close();
764
+ }
765
+ }, children: (children
766
+ ? finalChildren
767
+ : undefined) }) }) }))] }) }));
768
+ return wrapWithField(pickerField, ref, mergeProps({
769
+ ...props,
770
+ children: undefined,
771
+ styles: undefined,
772
+ }, {}));
773
+ });
774
+ Picker.Item = ListBox.Item;
775
+ Picker.Section = BaseSection;
776
+ Object.defineProperty(Picker, 'cubeInputType', {
777
+ value: 'Picker',
778
+ enumerable: false,
779
+ configurable: false,
780
+ });
781
+
782
+