@cube-dev/ui-kit 0.81.0 → 0.82.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 (522) hide show
  1. package/CHANGELOG.md +12 -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 +1 -1
  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 +7 -2
  31. package/es/components/actions/ItemAction/index.js +1 -1
  32. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  33. package/es/components/actions/ItemButton/index.js +1 -1
  34. package/es/components/actions/Link/Link.js +1 -1
  35. package/es/components/actions/Menu/Menu.js +1 -1
  36. package/es/components/actions/Menu/MenuItem.js +1 -1
  37. package/es/components/actions/Menu/MenuSection.js +1 -1
  38. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  39. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  40. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  41. package/es/components/actions/Menu/context.js +1 -1
  42. package/es/components/actions/Menu/index.js +1 -1
  43. package/es/components/actions/Menu/styled.js +1 -1
  44. package/es/components/actions/index.js +1 -1
  45. package/es/components/actions/use-action.js +1 -1
  46. package/es/components/actions/use-anchored-menu.js +1 -1
  47. package/es/components/actions/use-context-menu.js +1 -1
  48. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  49. package/es/components/content/Alert/Alert.js +1 -1
  50. package/es/components/content/Alert/index.js +1 -1
  51. package/es/components/content/Alert/types.js +1 -1
  52. package/es/components/content/Alert/use-alert.js +1 -1
  53. package/es/components/content/Avatar/Avatar.js +1 -1
  54. package/es/components/content/Badge/Badge.js +1 -1
  55. package/es/components/content/Card/Card.js +1 -1
  56. package/es/components/content/Content.js +1 -1
  57. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  58. package/es/components/content/CopyPasteBlock/index.js +1 -1
  59. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  60. package/es/components/content/CopySnippet/index.js +1 -1
  61. package/es/components/content/Divider.js +1 -1
  62. package/es/components/content/Footer.js +1 -1
  63. package/es/components/content/Header.js +1 -1
  64. package/es/components/content/HotKeys/HotKeys.js +1 -1
  65. package/es/components/content/HotKeys/index.js +1 -1
  66. package/es/components/content/ItemBase/ItemBase.js +1 -1
  67. package/es/components/content/ItemBase/index.js +1 -1
  68. package/es/components/content/List/SectionHeading.js +1 -1
  69. package/es/components/content/List/index.js +1 -1
  70. package/es/components/content/Paragraph.js +1 -1
  71. package/es/components/content/Placeholder/Placeholder.js +1 -1
  72. package/es/components/content/PrismCode/PrismCode.js +1 -1
  73. package/es/components/content/PrismCode/prismSetup.js +1 -1
  74. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  75. package/es/components/content/Result/Result.js +1 -1
  76. package/es/components/content/Skeleton/Skeleton.js +1 -1
  77. package/es/components/content/Tag/Tag.js +1 -1
  78. package/es/components/content/Text.js +1 -1
  79. package/es/components/content/Title.js +1 -1
  80. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  81. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  82. package/es/components/fields/Checkbox/context.js +1 -1
  83. package/es/components/fields/Checkbox/index.js +1 -1
  84. package/es/components/fields/ComboBox/ComboBox.js +796 -180
  85. package/es/components/fields/ComboBox/index.js +2 -2
  86. package/es/components/fields/DatePicker/DateInput.js +1 -1
  87. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  88. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  89. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  90. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  91. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  92. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  93. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  94. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  95. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  96. package/es/components/fields/DatePicker/index.js +1 -1
  97. package/es/components/fields/DatePicker/intl.js +1 -1
  98. package/es/components/fields/DatePicker/parseDate.js +1 -1
  99. package/es/components/fields/DatePicker/props.js +1 -1
  100. package/es/components/fields/DatePicker/types.js +1 -1
  101. package/es/components/fields/DatePicker/utils.js +1 -1
  102. package/es/components/fields/FileInput/FileInput.js +1 -1
  103. package/es/components/fields/FilterListBox/FilterListBox.js +47 -47
  104. package/es/components/fields/FilterListBox/index.js +1 -1
  105. package/es/components/fields/FilterPicker/FilterPicker.js +93 -315
  106. package/es/components/fields/FilterPicker/index.js +1 -1
  107. package/es/components/fields/Input/Input.js +1 -1
  108. package/es/components/fields/Input/index.js +1 -1
  109. package/es/components/fields/LegacyComboBox/LegacyComboBox.js +290 -0
  110. package/es/components/fields/LegacyComboBox/index.js +10 -0
  111. package/es/components/fields/ListBox/ListBox.js +35 -5
  112. package/es/components/fields/ListBox/index.js +1 -1
  113. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  114. package/es/components/fields/NumberInput/StepButton.js +1 -1
  115. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  116. package/es/components/fields/RadioGroup/Radio.js +1 -1
  117. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  118. package/es/components/fields/RadioGroup/context.js +1 -1
  119. package/es/components/fields/RadioGroup/index.js +1 -1
  120. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  121. package/es/components/fields/SearchInput/index.js +1 -1
  122. package/es/components/fields/Select/Select.js +72 -53
  123. package/es/components/fields/Select/index.js +1 -1
  124. package/es/components/fields/Slider/Gradation.js +1 -1
  125. package/es/components/fields/Slider/Header.js +1 -1
  126. package/es/components/fields/Slider/RangeSlider.js +1 -1
  127. package/es/components/fields/Slider/Slider.js +1 -1
  128. package/es/components/fields/Slider/SliderBase.js +1 -1
  129. package/es/components/fields/Slider/SliderInput.js +1 -1
  130. package/es/components/fields/Slider/SliderThumb.js +1 -1
  131. package/es/components/fields/Slider/SliderTrack.js +1 -1
  132. package/es/components/fields/Slider/elements.js +1 -1
  133. package/es/components/fields/Slider/index.js +1 -1
  134. package/es/components/fields/Slider/types.js +1 -1
  135. package/es/components/fields/Switch/Switch.js +1 -1
  136. package/es/components/fields/Switch/index.js +1 -1
  137. package/es/components/fields/TextArea/TextArea.js +1 -1
  138. package/es/components/fields/TextArea/index.js +1 -1
  139. package/es/components/fields/TextInput/TextInput.js +1 -1
  140. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  141. package/es/components/fields/TextInput/index.js +1 -1
  142. package/es/components/fields/TextInputMapper/TextInputMapper.js +2 -2
  143. package/es/components/fields/TextInputMapper/index.js +1 -1
  144. package/es/components/fields/index.js +2 -1
  145. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  146. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  147. package/es/components/form/FieldWrapper/index.js +1 -1
  148. package/es/components/form/FieldWrapper/types.js +1 -1
  149. package/es/components/form/Form/Field.js +1 -1
  150. package/es/components/form/Form/Form.js +1 -1
  151. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  152. package/es/components/form/Form/ResetButton/index.js +1 -1
  153. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  154. package/es/components/form/Form/SubmitButton/index.js +1 -1
  155. package/es/components/form/Form/SubmitError.js +1 -1
  156. package/es/components/form/Form/index.js +1 -1
  157. package/es/components/form/Form/types.js +1 -1
  158. package/es/components/form/Form/use-field/index.js +1 -1
  159. package/es/components/form/Form/use-field/types.js +1 -1
  160. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  161. package/es/components/form/Form/use-field/use-field.js +1 -1
  162. package/es/components/form/Form/use-form.js +1 -1
  163. package/es/components/form/Form/validation.js +1 -1
  164. package/es/components/form/Label.js +1 -1
  165. package/es/components/form/index.js +1 -1
  166. package/es/components/form/wrapper.js +1 -1
  167. package/es/components/helpers/DisplayTransition/DisplayTransition.js +242 -0
  168. package/es/components/helpers/index.js +10 -0
  169. package/es/components/layout/Flex.js +1 -1
  170. package/es/components/layout/Flow.js +1 -1
  171. package/es/components/layout/Grid.js +1 -1
  172. package/es/components/layout/Panel.js +1 -1
  173. package/es/components/layout/Prefix.js +1 -1
  174. package/es/components/layout/ResizablePanel.js +1 -1
  175. package/es/components/layout/Space.js +1 -1
  176. package/es/components/layout/Suffix.js +1 -1
  177. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  178. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  179. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  180. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  181. package/es/components/other/Calendar/Calendar.js +1 -1
  182. package/es/components/other/Calendar/CalendarCell.js +1 -1
  183. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  184. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  185. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  186. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  187. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  188. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  189. package/es/components/overlays/AlertDialog/index.js +1 -1
  190. package/es/components/overlays/AlertDialog/types.js +1 -1
  191. package/es/components/overlays/Dialog/Dialog.js +1 -1
  192. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  193. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  194. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  195. package/es/components/overlays/Dialog/context.js +1 -1
  196. package/es/components/overlays/Dialog/index.js +1 -1
  197. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  198. package/es/components/overlays/Modal/Modal.js +1 -1
  199. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  200. package/es/components/overlays/Modal/Overlay.js +1 -1
  201. package/es/components/overlays/Modal/Popover.js +1 -1
  202. package/es/components/overlays/Modal/Tray.js +1 -1
  203. package/es/components/overlays/Modal/Underlay.js +1 -1
  204. package/es/components/overlays/Modal/index.js +1 -1
  205. package/es/components/overlays/Modal/types.js +1 -1
  206. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  207. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  208. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  209. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  210. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
  211. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  212. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  213. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  214. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  215. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  216. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  217. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  218. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  219. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  220. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  221. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  222. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  223. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  224. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  225. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  226. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  227. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  228. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  229. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  230. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  231. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  232. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  233. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  234. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  235. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  236. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  237. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  238. package/es/components/overlays/NewNotifications/index.js +1 -1
  239. package/es/components/overlays/NewNotifications/types.js +1 -1
  240. package/es/components/overlays/Notification/Notification.js +1 -1
  241. package/es/components/overlays/OverlayWrapper.js +1 -1
  242. package/es/components/overlays/Toasts/Toast.js +1 -1
  243. package/es/components/overlays/Toasts/index.js +1 -1
  244. package/es/components/overlays/Toasts/types.js +1 -1
  245. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  246. package/es/components/overlays/Tooltip/Tooltip.js +30 -18
  247. package/es/components/overlays/Tooltip/TooltipProvider.js +2 -2
  248. package/es/components/overlays/Tooltip/TooltipTrigger.js +25 -7
  249. package/es/components/overlays/Tooltip/context.js +1 -1
  250. package/es/components/overlays/Tooltip/index.js +1 -1
  251. package/es/components/portal/Portal.js +5 -2
  252. package/es/components/portal/PortalProvider.js +1 -1
  253. package/es/components/portal/index.js +1 -1
  254. package/es/components/portal/types.js +1 -1
  255. package/es/components/portal/usePortal.js +1 -1
  256. package/es/components/shared/InvalidIcon.js +1 -1
  257. package/es/components/shared/ValidIcon.js +1 -1
  258. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  259. package/es/components/status/LoadingAnimation/index.js +1 -1
  260. package/es/components/status/Spin/Cube.js +1 -1
  261. package/es/components/status/Spin/InternalSpinner.js +1 -1
  262. package/es/components/status/Spin/Spin.js +1 -1
  263. package/es/components/status/Spin/SpinsContainer.js +1 -1
  264. package/es/components/status/Spin/index.js +1 -1
  265. package/es/components/status/Spin/types.js +1 -1
  266. package/es/components/status/index.js +1 -1
  267. package/es/data/item-themes.js +1 -1
  268. package/es/data/themes.js +1 -1
  269. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  270. package/es/icons/AdjustmentsIcon.js +1 -1
  271. package/es/icons/AiIcon.js +1 -1
  272. package/es/icons/AreaChartIcon.js +1 -1
  273. package/es/icons/BackwardIcon.js +1 -1
  274. package/es/icons/BarChartIcon.js +1 -1
  275. package/es/icons/BellFilledIcon.js +1 -1
  276. package/es/icons/BellIcon.js +1 -1
  277. package/es/icons/BooleanIcon.js +1 -1
  278. package/es/icons/CalendarEditIcon.js +1 -1
  279. package/es/icons/CalendarIcon.js +1 -1
  280. package/es/icons/CaretDownIcon.js +1 -1
  281. package/es/icons/CaretUpIcon.js +1 -1
  282. package/es/icons/ChartAreaStackedIcon.js +1 -1
  283. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  284. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  285. package/es/icons/ChartBarGroupedIcon.js +1 -1
  286. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  287. package/es/icons/ChartBarLineIcon.js +1 -1
  288. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  289. package/es/icons/ChartBarStackedIcon.js +1 -1
  290. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  291. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  292. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  293. package/es/icons/ChartBoxPlotIcon.js +1 -1
  294. package/es/icons/ChartBubbleIcon.js +1 -1
  295. package/es/icons/ChartDonut2Icon.js +1 -1
  296. package/es/icons/ChartFunnelIcon.js +1 -1
  297. package/es/icons/ChartHeatmapIcon.js +1 -1
  298. package/es/icons/ChartKPIIcon.js +1 -1
  299. package/es/icons/ChartPie2Icon.js +1 -1
  300. package/es/icons/ChartScatterIcon.js +1 -1
  301. package/es/icons/CheckCircleFilledIcon.js +1 -1
  302. package/es/icons/CheckCircleIcon.js +1 -1
  303. package/es/icons/CheckIcon.js +1 -1
  304. package/es/icons/CircleFilledIcon.js +1 -1
  305. package/es/icons/ClearIcon.js +1 -1
  306. package/es/icons/CloseCircleFilledIcon.js +1 -1
  307. package/es/icons/CloseCircleIcon.js +1 -1
  308. package/es/icons/CloseIcon.js +1 -1
  309. package/es/icons/CodeIcon.js +1 -1
  310. package/es/icons/CopyIcon.js +1 -1
  311. package/es/icons/CountIcon.js +1 -1
  312. package/es/icons/CubeIcon.js +1 -1
  313. package/es/icons/CubePauseIcon.js +1 -1
  314. package/es/icons/CubePlayIcon.js +1 -1
  315. package/es/icons/CurrencyDollarIcon.js +1 -1
  316. package/es/icons/DangerIcon.js +1 -1
  317. package/es/icons/DashboardIcon.js +1 -1
  318. package/es/icons/DatabaseIcon.js +1 -1
  319. package/es/icons/DecimalDecreaseIcon.js +1 -1
  320. package/es/icons/DecimalIncreaseIcon.js +1 -1
  321. package/es/icons/DirectionIcon.js +1 -1
  322. package/es/icons/DonutIcon.js +1 -1
  323. package/es/icons/DownIcon.js +1 -1
  324. package/es/icons/EditIcon.js +1 -1
  325. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  326. package/es/icons/ExclamationCircleIcon.js +1 -1
  327. package/es/icons/ExclamationIcon.js +1 -1
  328. package/es/icons/EyeIcon.js +1 -1
  329. package/es/icons/EyeInvisibleIcon.js +1 -1
  330. package/es/icons/FilterIcon.js +1 -1
  331. package/es/icons/FolderFilledIcon.js +1 -1
  332. package/es/icons/FolderIcon.js +1 -1
  333. package/es/icons/FolderOpenFilledIcon.js +1 -1
  334. package/es/icons/FolderOpenIcon.js +1 -1
  335. package/es/icons/ForwardIcon.js +1 -1
  336. package/es/icons/HierarchyIcon.js +1 -1
  337. package/es/icons/Icon.js +1 -1
  338. package/es/icons/InfoCircleIcon.js +1 -1
  339. package/es/icons/InfoIcon.js +1 -1
  340. package/es/icons/KeyIcon.js +1 -1
  341. package/es/icons/LeftIcon.js +1 -1
  342. package/es/icons/LineChartIcon.js +1 -1
  343. package/es/icons/LoadingIcon.js +1 -1
  344. package/es/icons/LockFilledIcon.js +1 -1
  345. package/es/icons/LockIcon.js +1 -1
  346. package/es/icons/MoreIcon.js +1 -1
  347. package/es/icons/NotAllowedIcon.js +1 -1
  348. package/es/icons/Number123Icon.js +1 -1
  349. package/es/icons/NumberIcon.js +1 -1
  350. package/es/icons/PauseCircleFilledIcon.js +1 -1
  351. package/es/icons/PauseCircleIcon.js +1 -1
  352. package/es/icons/PauseIcon.js +1 -1
  353. package/es/icons/PercentageIcon.js +1 -1
  354. package/es/icons/PieChartIcon.js +1 -1
  355. package/es/icons/PlayCircleIcon.js +1 -1
  356. package/es/icons/PlayIcon.js +1 -1
  357. package/es/icons/PlusIcon.js +1 -1
  358. package/es/icons/ReloadIcon.js +1 -1
  359. package/es/icons/ReportIcon.js +1 -1
  360. package/es/icons/ReturnIcon.js +1 -1
  361. package/es/icons/RightIcon.js +1 -1
  362. package/es/icons/SchemeIcon.js +1 -1
  363. package/es/icons/SearchIcon.js +1 -1
  364. package/es/icons/SettingsIcon.js +1 -1
  365. package/es/icons/ShieldFilledIcon.js +1 -1
  366. package/es/icons/ShieldIcon.js +1 -1
  367. package/es/icons/SlashIcon.js +1 -1
  368. package/es/icons/SparklesIcon.js +1 -1
  369. package/es/icons/SqlIcon.js +1 -1
  370. package/es/icons/StatsIcon.js +1 -1
  371. package/es/icons/StopIcon.js +1 -1
  372. package/es/icons/StringIcon.js +1 -1
  373. package/es/icons/SwitchIcon.js +1 -1
  374. package/es/icons/TableIcon.js +1 -1
  375. package/es/icons/ThumbsDownIcon.js +1 -1
  376. package/es/icons/ThumbsUpIcon.js +1 -1
  377. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  378. package/es/icons/ThunderboltFilledIcon.js +1 -1
  379. package/es/icons/ThunderboltIcon.js +1 -1
  380. package/es/icons/TimeIcon.js +1 -1
  381. package/es/icons/UnlockIcon.js +1 -1
  382. package/es/icons/UpIcon.js +1 -1
  383. package/es/icons/UserGroupIcon.js +1 -1
  384. package/es/icons/UserIcon.js +1 -1
  385. package/es/icons/UserLockIcon.js +1 -1
  386. package/es/icons/ViewIcon.js +1 -1
  387. package/es/icons/WarningFilledIcon.js +1 -1
  388. package/es/icons/WarningIcon.js +1 -1
  389. package/es/icons/add-new-icon.js +1 -1
  390. package/es/icons/index.js +1 -1
  391. package/es/icons/wrap-icon.js +1 -1
  392. package/es/index.js +2 -1
  393. package/es/provider.js +1 -1
  394. package/es/providers/TrackingProvider.js +1 -1
  395. package/es/providers/navigation.types.js +1 -1
  396. package/es/providers/navigationAdapter.default.js +1 -1
  397. package/es/services/notification.js +1 -1
  398. package/es/shared/form.js +1 -1
  399. package/es/shared/index.js +1 -1
  400. package/es/stories/Form.legacy-stories.js +1 -1
  401. package/es/stories/FormFieldArgs.js +1 -1
  402. package/es/stories/Layout.stories.js +1 -1
  403. package/es/stories/Tasty.stories.js +1 -1
  404. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  405. package/es/stories/components/DialogFormApp.js +1 -1
  406. package/es/stories/components/StyledButton.js +1 -1
  407. package/es/stories/lists/baseProps.js +1 -1
  408. package/es/tasty/debug.js +1 -1
  409. package/es/tasty/index.js +1 -1
  410. package/es/tasty/injector/index.js +1 -1
  411. package/es/tasty/injector/injector.js +1 -1
  412. package/es/tasty/injector/sheet-manager.js +1 -1
  413. package/es/tasty/injector/types.js +1 -1
  414. package/es/tasty/parser/classify.js +1 -1
  415. package/es/tasty/parser/const.js +1 -1
  416. package/es/tasty/parser/lru.js +1 -1
  417. package/es/tasty/parser/parser.js +1 -1
  418. package/es/tasty/parser/tokenizer.js +1 -1
  419. package/es/tasty/parser/types.js +1 -1
  420. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  421. package/es/tasty/styles/align.js +1 -1
  422. package/es/tasty/styles/border.js +1 -1
  423. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  424. package/es/tasty/styles/color.js +1 -1
  425. package/es/tasty/styles/createStyle.js +1 -1
  426. package/es/tasty/styles/dimension.js +1 -1
  427. package/es/tasty/styles/display.js +1 -1
  428. package/es/tasty/styles/fade.js +1 -1
  429. package/es/tasty/styles/fill.js +1 -1
  430. package/es/tasty/styles/flow.js +1 -1
  431. package/es/tasty/styles/font.js +1 -1
  432. package/es/tasty/styles/fontStyle.js +1 -1
  433. package/es/tasty/styles/gap.js +1 -1
  434. package/es/tasty/styles/groupRadius.js +1 -1
  435. package/es/tasty/styles/height.js +1 -1
  436. package/es/tasty/styles/index.js +1 -1
  437. package/es/tasty/styles/inset.js +1 -1
  438. package/es/tasty/styles/justify.js +1 -1
  439. package/es/tasty/styles/list.js +1 -1
  440. package/es/tasty/styles/margin.js +1 -1
  441. package/es/tasty/styles/outline.js +1 -1
  442. package/es/tasty/styles/padding.js +1 -1
  443. package/es/tasty/styles/place.js +1 -1
  444. package/es/tasty/styles/predefined.js +1 -1
  445. package/es/tasty/styles/preset.js +1 -1
  446. package/es/tasty/styles/radius.js +1 -1
  447. package/es/tasty/styles/reset.js +1 -1
  448. package/es/tasty/styles/scrollbar.js +1 -1
  449. package/es/tasty/styles/shadow.js +1 -1
  450. package/es/tasty/styles/styledScrollbar.js +1 -1
  451. package/es/tasty/styles/transition.js +1 -1
  452. package/es/tasty/styles/types.js +1 -1
  453. package/es/tasty/styles/width.js +1 -1
  454. package/es/tasty/tasty.js +1 -1
  455. package/es/tasty/types.js +1 -1
  456. package/es/tasty/utils/cache-wrapper.js +1 -1
  457. package/es/tasty/utils/case-converter.js +1 -1
  458. package/es/tasty/utils/colors.js +1 -1
  459. package/es/tasty/utils/dotize.js +1 -1
  460. package/es/tasty/utils/filterBaseProps.js +1 -1
  461. package/es/tasty/utils/getDisplayName.js +1 -1
  462. package/es/tasty/utils/getModCombinations.js +1 -1
  463. package/es/tasty/utils/isDevEnv.js +1 -1
  464. package/es/tasty/utils/mergeStyles.js +1 -1
  465. package/es/tasty/utils/modAttrs.js +1 -1
  466. package/es/tasty/utils/renderStyles.js +1 -1
  467. package/es/tasty/utils/responsive.js +1 -1
  468. package/es/tasty/utils/string.js +1 -1
  469. package/es/tasty/utils/styles.js +1 -1
  470. package/es/tasty/utils/warnings.js +1 -1
  471. package/es/tokens.js +1 -1
  472. package/es/type-checks.js +1 -1
  473. package/es/utils/ResizeSensor.js +1 -1
  474. package/es/utils/modules.js +1 -1
  475. package/es/utils/promise.js +1 -1
  476. package/es/utils/random.js +1 -1
  477. package/es/utils/range.js +1 -1
  478. package/es/utils/react/Slots.js +1 -1
  479. package/es/utils/react/chain.js +1 -1
  480. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  481. package/es/utils/react/index.js +2 -2
  482. package/es/utils/react/interactions.js +1 -1
  483. package/es/utils/react/isTextOnly.js +1 -1
  484. package/es/utils/react/mapProps.js +1 -1
  485. package/es/utils/react/mergeProps.js +1 -1
  486. package/es/utils/react/nullableValue.js +1 -1
  487. package/es/utils/react/sharedStore.js +1 -1
  488. package/es/utils/react/useCombinedRefs.js +11 -6
  489. package/es/utils/react/useControlledFocusVisible.js +1 -1
  490. package/es/utils/react/useEventBus.js +1 -1
  491. package/es/utils/react/useId.js +1 -1
  492. package/es/utils/react/useIsDarwin.js +1 -1
  493. package/es/utils/react/useKeySymbols.js +1 -1
  494. package/es/utils/react/useLayoutEffect.js +1 -1
  495. package/es/utils/react/useQaProps.js +1 -1
  496. package/es/utils/react/useViewportSize.js +1 -1
  497. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  498. package/es/utils/transitions.js +1 -1
  499. package/es/utils/tree.js +1 -1
  500. package/es/utils/warnings.js +1 -1
  501. package/es/version.js +2 -2
  502. package/package.json +1 -1
  503. package/types/components/GridProvider.d.ts +1 -1
  504. package/types/components/fields/ComboBox/ComboBox.d.ts +101 -30
  505. package/types/components/fields/ComboBox/index.d.ts +2 -1
  506. package/types/components/fields/FilterListBox/FilterListBox.d.ts +7 -0
  507. package/types/components/fields/FilterPicker/FilterPicker.d.ts +9 -2
  508. package/types/components/fields/LegacyComboBox/LegacyComboBox.d.ts +49 -0
  509. package/types/components/fields/LegacyComboBox/index.d.ts +1 -0
  510. package/types/components/fields/ListBox/ListBox.d.ts +5 -0
  511. package/types/components/fields/Select/Select.d.ts +3 -1
  512. package/types/components/fields/index.d.ts +1 -0
  513. package/types/components/helpers/DisplayTransition/DisplayTransition.d.ts +24 -0
  514. package/types/components/helpers/index.d.ts +1 -0
  515. package/types/components/layout/Prefix.d.ts +1 -1
  516. package/types/components/layout/Suffix.d.ts +1 -1
  517. package/types/components/overlays/Tooltip/TooltipTrigger.d.ts +5 -0
  518. package/types/components/overlays/Tooltip/context.d.ts +6 -1
  519. package/types/components/portal/Portal.d.ts +1 -1
  520. package/types/index.d.ts +2 -0
  521. package/types/utils/react/index.d.ts +1 -1
  522. package/types/utils/react/useCombinedRefs.d.ts +3 -2
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.81.0
4
+ * @cube-dev/ui-kit v0.82.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
8
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
- import { Children, cloneElement, forwardRef, useCallback, useEffect, useMemo, useRef, useState, } from 'react';
9
+ import { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState, } from 'react';
10
10
  import { FocusScope, useKeyboard } from 'react-aria';
11
- import { Section as BaseSection, Item as ReactAriaItem, } from 'react-stately';
11
+ import { Section as BaseSection, useListState } from 'react-stately';
12
12
  import { useEvent } from '../../../_internal';
13
13
  import { useWarn } from '../../../_internal/hooks/use-warn';
14
14
  import { CloseIcon, DirectionIcon, LoadingIcon } from '../../../icons';
@@ -63,8 +63,15 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
63
63
  return fieldProps;
64
64
  },
65
65
  });
66
- 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, allowsCustomValue, renderSummary, isCheckable, allValueProps, customValueProps, newCustomValueProps, searchPlaceholder, autoFocus, filter, emptyLabel, searchInputStyles, searchInputRef, listStyles, optionStyles, sectionStyles, headingStyles, listRef, disallowEmptySelection, shouldUseVirtualFocus, onEscape, onOptionClick, isClearable, searchValue, onSearchChange, ...otherProps } = props;
66
+ let { qa, label, extra, id, 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, allowsCustomValue, renderSummary, isCheckable, allValueProps, customValueProps, newCustomValueProps, searchPlaceholder, autoFocus, filter, emptyLabel, searchInputStyles, searchInputRef, listStyles, optionStyles, sectionStyles, headingStyles, listRef, disallowEmptySelection, shouldUseVirtualFocus, onEscape, onOptionClick, isClearable, searchValue, onSearchChange, sortSelectedToTop: sortSelectedToTopProp, ...otherProps } = props;
67
+ // Track if sortSelectedToTop was explicitly provided
68
+ const sortSelectedToTopExplicit = sortSelectedToTopProp !== undefined;
69
+ // Default to true if items are provided, false otherwise
70
+ const sortSelectedToTop = sortSelectedToTopProp ?? (items ? true : false);
67
71
  styles = extractStyles(otherProps, PROP_STYLES, styles);
72
+ // Generate ID for label-trigger linking if not provided
73
+ const generatedId = useId();
74
+ const triggerId = id || generatedId;
68
75
  // Generate a unique ID for this FilterPicker instance
69
76
  const filterPickerId = useMemo(() => generateRandomId(), []);
70
77
  // Get event bus for menu synchronization
@@ -81,7 +88,6 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
81
88
  const [internalSelectedKeys, setInternalSelectedKeys] = useState(defaultSelectedKeys ?? []);
82
89
  // Track popover open/close and capture children order for session
83
90
  const [isPopoverOpen, setIsPopoverOpen] = useState(false);
84
- const cachedChildrenOrder = useRef(null);
85
91
  // Cache for sorted items array when using `items` prop
86
92
  const cachedItemsOrder = useRef(null);
87
93
  const triggerRef = useRef(null);
@@ -92,9 +98,6 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
92
98
  // session (which caused only the previously selected options to be rendered
93
99
  // or the list to appear unsorted).
94
100
  // ---------------------------------------------------------------------------
95
- useEffect(() => {
96
- cachedChildrenOrder.current = null;
97
- }, [children]);
98
101
  useEffect(() => {
99
102
  cachedItemsOrder.current = null;
100
103
  }, [items]);
@@ -106,73 +109,47 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
106
109
  const effectiveSelectedKeys = isControlledMultiple
107
110
  ? selectedKeys
108
111
  : internalSelectedKeys;
109
- // Utility: remove React's ".$" / "." prefixes from element keys so that we
110
- // can compare them with user-provided keys.
111
- const normalizeKeyValue = (key) => {
112
- if (key == null)
113
- return '';
114
- // React escapes "=" as "=0" and ":" as "=2" when it stores keys internally.
115
- // We strip the possible React prefixes first and then un-escape those sequences
116
- // so that callers work with the original key values supplied by the user.
117
- let str = String(key);
118
- // Remove React array/object key prefixes (".$" or ".") if present.
119
- if (str.startsWith('.$')) {
120
- str = str.slice(2);
121
- }
122
- else if (str.startsWith('.')) {
123
- str = str.slice(1);
124
- }
125
- // Un-escape React's internal key encodings.
126
- return str.replace(/=2/g, ':').replace(/=0/g, '=');
127
- };
112
+ // Create a local collection for label extraction only (not for rendering)
113
+ // This gives us immediate access to textValue without waiting for FilterListBox
114
+ const localCollectionState = useListState({
115
+ children: children,
116
+ items: items,
117
+ selectionMode: 'none', // We don't need selection management
118
+ });
128
119
  // ---------------------------------------------------------------------------
129
- // Map public-facing keys (without React's "." prefix) to the actual React
130
- // element keys that appear in the collection (which usually have the `.$`
131
- // or `.` prefix added by React when children are in an array). This ensures
132
- // that the key we pass to ListBox exactly matches the keys it receives from
133
- // React Aria, so the initial selection is highlighted correctly.
120
+ // Map user-provided keys to collection keys using the local collection.
121
+ // The collection handles key normalization internally, so we use direct
122
+ // string comparison.
134
123
  // ---------------------------------------------------------------------------
135
- const findReactKey = useCallback((lookup) => {
124
+ const findCollectionKey = useCallback((lookup) => {
136
125
  if (lookup == null)
137
126
  return lookup;
138
- const normalizedLookup = normalizeKeyValue(lookup);
139
- let foundKey = lookup;
140
- const traverse = (nodes) => {
141
- Children.forEach(nodes, (child) => {
142
- if (!child || typeof child !== 'object')
143
- return;
144
- const element = child;
145
- if (element.key != null) {
146
- if (normalizeKeyValue(element.key) === normalizedLookup) {
147
- foundKey = element.key;
148
- }
149
- }
150
- if (element.props &&
151
- typeof element.props === 'object' &&
152
- 'children' in element.props) {
153
- traverse(element.props.children);
154
- }
155
- });
156
- };
157
- if (children)
158
- traverse(children);
159
- return foundKey;
160
- }, [children]);
127
+ // Direct comparison - collection handles normalization internally
128
+ for (const item of localCollectionState.collection) {
129
+ if (String(item.key) === String(lookup)) {
130
+ return item.key;
131
+ }
132
+ }
133
+ // Fallback: return the lookup key as-is
134
+ return lookup;
135
+ }, [localCollectionState.collection]);
161
136
  const mappedSelectedKey = useMemo(() => {
162
137
  if (selectionMode !== 'single')
163
138
  return null;
164
- return effectiveSelectedKey ? findReactKey(effectiveSelectedKey) : null;
165
- }, [selectionMode, effectiveSelectedKey, findReactKey]);
139
+ return effectiveSelectedKey
140
+ ? findCollectionKey(effectiveSelectedKey)
141
+ : null;
142
+ }, [selectionMode, effectiveSelectedKey, findCollectionKey]);
166
143
  const mappedSelectedKeys = useMemo(() => {
167
144
  if (selectionMode !== 'multiple')
168
145
  return undefined;
169
146
  if (effectiveSelectedKeys === 'all')
170
147
  return 'all';
171
148
  if (Array.isArray(effectiveSelectedKeys)) {
172
- return effectiveSelectedKeys.map((k) => findReactKey(k));
149
+ return effectiveSelectedKeys.map((k) => findCollectionKey(k));
173
150
  }
174
151
  return effectiveSelectedKeys;
175
- }, [selectionMode, effectiveSelectedKeys, findReactKey]);
152
+ }, [selectionMode, effectiveSelectedKeys, findCollectionKey]);
176
153
  // Given an iterable of keys (array or Set) toggle membership for duplicates
177
154
  const processSelectionArray = (iterable) => {
178
155
  const resultSet = new Set();
@@ -187,149 +164,53 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
187
164
  }
188
165
  return Array.from(resultSet);
189
166
  };
190
- // Helper to get selected item labels for display
167
+ // Helper to get selected item labels for display using local collection
191
168
  const getSelectedLabels = () => {
192
- // Handle "all" selection - return all available labels
193
- if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {
169
+ const collection = localCollectionState.collection;
170
+ // Helper to recursively collect all item labels from collection (including nested in sections)
171
+ const collectAllLabels = () => {
194
172
  const allLabels = [];
195
- // Extract from items prop if available
196
- if (items) {
197
- const extractFromItems = (itemsArray) => {
198
- itemsArray.forEach((item) => {
199
- if (item && typeof item === 'object') {
200
- const itemObj = item;
201
- if (Array.isArray(itemObj.children)) {
202
- // Section-like object
203
- extractFromItems(itemObj.children);
204
- }
205
- else {
206
- // Regular item - extract label
207
- const label = itemObj.textValue ||
208
- itemObj.label ||
209
- (typeof itemObj.children === 'string'
210
- ? itemObj.children
211
- : '') ||
212
- String(itemObj.children ||
213
- itemObj.key ||
214
- itemObj.id ||
215
- item);
216
- allLabels.push(label);
217
- }
218
- }
219
- });
220
- };
221
- const itemsArray = Array.isArray(items)
222
- ? items
223
- : Array.from(items);
224
- extractFromItems(itemsArray);
225
- return allLabels;
226
- }
227
- // Extract from children if available
228
- if (children) {
229
- const extractAllLabels = (nodes) => {
230
- if (!nodes)
231
- return;
232
- Children.forEach(nodes, (child) => {
233
- if (!child || typeof child !== 'object')
234
- return;
235
- const element = child;
236
- if (element.type === ReactAriaItem) {
237
- const props = element.props;
238
- const label = props.textValue ||
239
- (typeof props.children === 'string' ? props.children : '') ||
240
- String(props.children || '');
241
- allLabels.push(label);
242
- }
243
- if (element.props &&
244
- typeof element.props === 'object' &&
245
- 'children' in element.props) {
246
- extractAllLabels(element.props.children);
247
- }
248
- });
249
- };
250
- extractAllLabels(children);
251
- return allLabels;
252
- }
173
+ const traverse = (nodes) => {
174
+ for (const node of nodes) {
175
+ if (node.type === 'item') {
176
+ allLabels.push(node.textValue || String(node.key));
177
+ }
178
+ else if (node.childNodes) {
179
+ traverse(node.childNodes);
180
+ }
181
+ }
182
+ };
183
+ traverse(collection);
253
184
  return allLabels;
185
+ };
186
+ // Handle "all" selection - return all available labels
187
+ if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {
188
+ return collectAllLabels();
254
189
  }
255
190
  const selectedSet = new Set(selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
256
- ? (effectiveSelectedKeys || []).map((k) => normalizeKeyValue(k))
191
+ ? (effectiveSelectedKeys || []).map((k) => String(k))
257
192
  : effectiveSelectedKey != null
258
- ? [normalizeKeyValue(effectiveSelectedKey)]
193
+ ? [String(effectiveSelectedKey)]
259
194
  : []);
260
195
  const labels = [];
261
196
  const processedKeys = new Set();
262
- // Extract from items prop if available
263
- if (items) {
264
- const extractFromItems = (itemsArray) => {
265
- itemsArray.forEach((item) => {
266
- if (item && typeof item === 'object') {
267
- const itemObj = item;
268
- if (Array.isArray(itemObj.children)) {
269
- // Section-like object
270
- extractFromItems(itemObj.children);
271
- }
272
- else {
273
- // Regular item - check if selected
274
- const itemKey = itemObj.key || itemObj.id;
275
- if (itemKey != null &&
276
- selectedSet.has(normalizeKeyValue(itemKey))) {
277
- const label = itemObj.textValue ||
278
- itemObj.label ||
279
- (typeof itemObj.children === 'string'
280
- ? itemObj.children
281
- : '') ||
282
- String(itemObj.children || itemKey);
283
- labels.push(label);
284
- processedKeys.add(normalizeKeyValue(itemKey));
285
- }
286
- }
287
- }
288
- });
289
- };
290
- const itemsArray = Array.isArray(items)
291
- ? items
292
- : Array.from(items);
293
- extractFromItems(itemsArray);
294
- }
295
- // Extract from children if available (for mixed mode or fallback)
296
- if (children) {
297
- const extractLabelsWithTracking = (nodes) => {
298
- if (!nodes)
299
- return;
300
- Children.forEach(nodes, (child) => {
301
- if (!child || typeof child !== 'object')
302
- return;
303
- const element = child;
304
- if (element.type === ReactAriaItem) {
305
- const childKey = String(element.key);
306
- if (selectedSet.has(normalizeKeyValue(childKey))) {
307
- const props = element.props;
308
- const label = props.textValue ||
309
- (typeof props.children === 'string' ? props.children : '') ||
310
- String(props.children || '');
311
- labels.push(label);
312
- processedKeys.add(normalizeKeyValue(childKey));
313
- }
314
- }
315
- if (element.props &&
316
- typeof element.props === 'object' &&
317
- 'children' in element.props) {
318
- extractLabelsWithTracking(element.props.children);
319
- }
320
- });
321
- };
322
- extractLabelsWithTracking(children);
323
- }
324
- // Handle custom values that don't have corresponding items/children
197
+ // Use collection.getItem() to directly retrieve items by key (works with sections)
198
+ selectedSet.forEach((key) => {
199
+ const item = collection.getItem(key);
200
+ if (item) {
201
+ labels.push(item.textValue || String(item.key));
202
+ processedKeys.add(String(item.key));
203
+ }
204
+ });
205
+ // Handle custom values that aren't in the collection
325
206
  const selectedKeysArr = selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
326
207
  ? (effectiveSelectedKeys || []).map(String)
327
208
  : effectiveSelectedKey != null
328
209
  ? [String(effectiveSelectedKey)]
329
210
  : [];
330
- // Add labels for any selected keys that weren't processed (custom values)
211
+ // Add labels for any selected keys that weren't found in collection (custom values)
331
212
  selectedKeysArr.forEach((key) => {
332
- if (!processedKeys.has(normalizeKeyValue(key))) {
213
+ if (!processedKeys.has(String(key))) {
333
214
  // This is a custom value, use the key as the label
334
215
  labels.push(key);
335
216
  }
@@ -361,133 +242,22 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
361
242
  }, []); // run only once on mount
362
243
  // Function to sort children with selected items on top
363
244
  const getSortedChildren = useCallback(() => {
364
- // If children is not provided or is a render function, return it as-is
365
- if (!children || typeof children === 'function')
366
- return children;
367
- // Reuse the cached order if we have it. We only want to compute the sorted
368
- // order once per pop-over opening session. The cache is cleared when the
369
- // pop-over closes so the next opening can recompute.
370
- if (cachedChildrenOrder.current) {
371
- return cachedChildrenOrder.current;
372
- }
373
- // Popover is open – compute (or recompute) the sorted order for this
374
- // session.
375
- // Determine if there were any selections when the popover was previously closed.
376
- const hadSelectionsWhenClosed = selectionMode === 'multiple'
377
- ? selectionsWhenClosed.current.multiple.length > 0
378
- : selectionsWhenClosed.current.single !== null;
379
- // Only apply sorting when there were selections in the previous session.
380
- // We intentionally do not depend on the `isPopoverOpen` flag here because that
381
- // flag is updated **after** the first render triggered by clicking the
382
- // trigger button. Relying on it caused a timing issue where the very first
383
- // render of a freshly-opened popover was unsorted. By removing the
384
- // `isPopoverOpen` check we ensure items are already sorted during that first
385
- // render while still maintaining stable order within an open popover thanks
386
- // to the `cachedChildrenOrder` guard above.
387
- if (!hadSelectionsWhenClosed) {
388
- return children;
245
+ // Warn if sorting is explicitly requested but not supported
246
+ if (sortSelectedToTopExplicit && sortSelectedToTop && !items) {
247
+ console.warn('FilterPicker: sortSelectedToTop only works with the items prop. ' +
248
+ 'Sorting will be skipped when using JSX children.');
389
249
  }
390
- // Create selected keys set for fast lookup
391
- const selectedSet = new Set();
392
- if (selectionMode === 'multiple') {
393
- if (selectionsWhenClosed.current.multiple === 'all') {
394
- // Don't sort when "all" is selected, just return original children
395
- return children;
396
- }
397
- else {
398
- selectionsWhenClosed.current.multiple.forEach((key) => selectedSet.add(String(key)));
399
- }
400
- }
401
- else if (selectionMode === 'single' &&
402
- selectionsWhenClosed.current.single != null) {
403
- selectedSet.add(String(selectionsWhenClosed.current.single));
404
- }
405
- // Helper function to check if an item is selected
406
- const isItemSelected = (child) => {
407
- return (child?.key != null && selectedSet.has(normalizeKeyValue(child.key)));
408
- };
409
- // Helper function to sort children array
410
- const sortChildrenArray = (childrenArray) => {
411
- const cloneWithNormalizedKey = (item) => cloneElement(item, {
412
- key: item.key ? normalizeKeyValue(item.key) : undefined,
413
- });
414
- const selected = [];
415
- const unselected = [];
416
- childrenArray.forEach((child) => {
417
- if (!child || typeof child !== 'object') {
418
- unselected.push(child);
419
- return;
420
- }
421
- const element = child;
422
- // Handle sections - sort items within each section
423
- if (element.type === BaseSection ||
424
- element.type?.displayName === 'Section') {
425
- const props = element.props;
426
- const sectionChildren = Array.isArray(props.children)
427
- ? props.children
428
- : [props.children];
429
- const selectedItems = [];
430
- const unselectedItems = [];
431
- sectionChildren.forEach((sectionChild) => {
432
- if (sectionChild && typeof sectionChild === 'object') {
433
- const sectionElement = sectionChild;
434
- if (sectionElement.type === ReactAriaItem ||
435
- sectionElement.type?.displayName === 'Item') {
436
- const clonedItem = cloneWithNormalizedKey(sectionElement);
437
- if (isItemSelected(sectionElement)) {
438
- selectedItems.push(clonedItem);
439
- }
440
- else {
441
- unselectedItems.push(clonedItem);
442
- }
443
- }
444
- else {
445
- unselectedItems.push(sectionChild);
446
- }
447
- }
448
- else {
449
- unselectedItems.push(sectionChild);
450
- }
451
- });
452
- // Create new section with sorted children, preserving React element properly
453
- unselected.push(cloneElement(element, {
454
- ...element.props,
455
- children: [...selectedItems, ...unselectedItems],
456
- }));
457
- }
458
- // Handle non-section elements (items, dividers, etc.)
459
- else {
460
- const clonedItem = cloneWithNormalizedKey(element);
461
- if (isItemSelected(element)) {
462
- selected.push(clonedItem);
463
- }
464
- else {
465
- unselected.push(clonedItem);
466
- }
467
- }
468
- });
469
- return [...selected, ...unselected];
470
- };
471
- // Sort the children
472
- const childrenArray = Children.toArray(children);
473
- const sortedChildren = sortChildrenArray(childrenArray);
474
- // Cache the sorted order when popover opens or when we compute it for the
475
- // first time before opening.
476
- if (isPopoverOpen || !cachedChildrenOrder.current) {
477
- cachedChildrenOrder.current = sortedChildren;
478
- }
479
- return sortedChildren;
480
- }, [
481
- children,
482
- effectiveSelectedKeys,
483
- effectiveSelectedKey,
484
- selectionMode,
485
- isPopoverOpen,
486
- ]);
250
+ // Return children as-is (no sorting for JSX children)
251
+ return children;
252
+ }, [children, sortSelectedToTop, sortSelectedToTopExplicit, items]);
487
253
  // Compute sorted items array when using `items` prop
488
254
  const getSortedItems = useCallback(() => {
489
255
  if (!items)
490
256
  return items;
257
+ // Only sort if explicitly enabled
258
+ if (!sortSelectedToTop) {
259
+ return items;
260
+ }
491
261
  // Reuse the cached order if we have it. We only compute the sorted array
492
262
  // once when the pop-over is opened. Cache is cleared on close.
493
263
  if (cachedItemsOrder.current) {
@@ -556,6 +326,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
556
326
  return sorted;
557
327
  }, [
558
328
  items,
329
+ sortSelectedToTop,
559
330
  selectionMode,
560
331
  isPopoverOpen,
561
332
  selectionsWhenClosed.current.multiple,
@@ -631,7 +402,6 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
631
402
  // Popover just closed – record the latest selection for the next opening
632
403
  // and clear the cached order so the next session can compute afresh.
633
404
  selectionsWhenClosed.current = { ...latestSelectionRef.current };
634
- cachedChildrenOrder.current = null;
635
405
  cachedItemsOrder.current = null;
636
406
  }
637
407
  }
@@ -680,7 +450,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
680
450
  props.onClear?.();
681
451
  return false;
682
452
  });
683
- return (_jsx(ItemButton, { ref: triggerRef, "data-popover-trigger": true, type: type, theme: validationState === 'invalid' ? 'danger' : theme, size: size, isDisabled: isDisabled || isLoading, mods: {
453
+ return (_jsx(ItemButton, { ref: triggerRef, "data-popover-trigger": true, id: triggerId, type: type, theme: validationState === 'invalid' ? 'danger' : theme, size: size, isDisabled: isDisabled || isLoading, mods: {
684
454
  placeholder: !hasSelection,
685
455
  selected: hasSelection,
686
456
  ...externalMods,
@@ -700,7 +470,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
700
470
  gridRows: '1sf',
701
471
  width: '30x max-content 50vw',
702
472
  ...popoverStyles,
703
- }, children: _jsx(FocusScope, { restoreFocus: true, children: _jsx(FilterListBox, { autoFocus: true, items: items ? finalItems : undefined, "aria-label": `${props['aria-label'] ?? props.label ?? ''} Picker`, selectedKey: selectionMode === 'single' ? mappedSelectedKey : undefined, selectedKeys: selectionMode === 'multiple' ? mappedSelectedKeys : undefined, searchPlaceholder: searchPlaceholder, filter: filter, searchValue: searchValue, listStyles: listStyles, optionStyles: optionStyles, sectionStyles: sectionStyles, headingStyles: headingStyles, listRef: listRef, disallowEmptySelection: disallowEmptySelection, emptyLabel: emptyLabel, searchInputStyles: searchInputStyles, searchInputRef: searchInputRef, disabledKeys: disabledKeys, focusOnHover: focusOnHover, shouldFocusWrap: shouldFocusWrap, allowsCustomValue: allowsCustomValue, selectionMode: selectionMode, validationState: validationState, isDisabled: isDisabled, isLoading: isLoading, stateRef: listStateRef, isCheckable: isCheckable, mods: {
473
+ }, children: _jsx(FocusScope, { restoreFocus: true, children: _jsx(FilterListBox, { autoFocus: true, items: items ? finalItems : undefined, "aria-label": `${props['aria-label'] ?? props.label ?? ''} Picker`, _internalCollection: localCollectionState.collection, selectedKey: selectionMode === 'single' ? mappedSelectedKey : undefined, selectedKeys: selectionMode === 'multiple' ? mappedSelectedKeys : undefined, searchPlaceholder: searchPlaceholder, filter: filter, searchValue: searchValue, listStyles: listStyles, optionStyles: optionStyles, sectionStyles: sectionStyles, headingStyles: headingStyles, listRef: listRef, disallowEmptySelection: disallowEmptySelection, emptyLabel: emptyLabel, searchInputStyles: searchInputStyles, searchInputRef: searchInputRef, disabledKeys: disabledKeys, focusOnHover: focusOnHover, shouldFocusWrap: shouldFocusWrap, allowsCustomValue: allowsCustomValue, selectionMode: selectionMode, validationState: validationState, isDisabled: isDisabled, isLoading: isLoading, stateRef: listStateRef, isCheckable: isCheckable, mods: {
704
474
  popover: true,
705
475
  }, size: size === 'small' ? 'medium' : size, showSelectAll: showSelectAll, selectAllLabel: selectAllLabel, header: header, footer: footer, headerStyles: headerStyles, footerStyles: footerStyles, qa: `${props.qa || 'FilterPicker'}ListBox`, allValueProps: allValueProps, customValueProps: customValueProps, newCustomValueProps: newCustomValueProps, onSearchChange: onSearchChange, onEscape: () => close(), onOptionClick: (key) => {
706
476
  // For FilterPicker, clicking the content area should close the popover
@@ -767,11 +537,19 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
767
537
  }, children: (children
768
538
  ? finalChildren
769
539
  : undefined) }) }) }))] }) }));
770
- return wrapWithField(filterPickerField, ref, mergeProps({
540
+ const finalProps = {
771
541
  ...props,
772
542
  children: undefined,
773
543
  styles: undefined,
774
- }, {}));
544
+ };
545
+ // Ensure labelProps has the for attribute for label-trigger linking
546
+ if (!finalProps.labelProps) {
547
+ finalProps.labelProps = {};
548
+ }
549
+ if (!finalProps.labelProps.for) {
550
+ finalProps.labelProps.for = triggerId;
551
+ }
552
+ return wrapWithField(filterPickerField, ref, mergeProps(finalProps, {}));
775
553
  });
776
554
  FilterPicker.Item = ListBox.Item;
777
555
  FilterPicker.Section = BaseSection;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.81.0
4
+ * @cube-dev/ui-kit v0.82.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.81.0
4
+ * @cube-dev/ui-kit v0.82.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.81.0
4
+ * @cube-dev/ui-kit v0.82.0
5
5
  * Released under the MIT license.
6
6
  */
7
7