@cube-dev/ui-kit 0.69.1 → 0.69.3

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 (476) hide show
  1. package/CHANGELOG.md +22 -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/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 +38 -16
  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/Menu/Menu.js +1 -1
  30. package/es/components/actions/Menu/MenuItem.js +1 -1
  31. package/es/components/actions/Menu/MenuSection.js +1 -1
  32. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  33. package/es/components/actions/Menu/context.js +1 -1
  34. package/es/components/actions/Menu/index.js +1 -1
  35. package/es/components/actions/Menu/styled.js +7 -1
  36. package/es/components/actions/index.js +1 -1
  37. package/es/components/actions/use-action.js +1 -1
  38. package/es/components/actions/use-anchored-menu.js +1 -1
  39. package/es/components/actions/use-context-menu.js +1 -1
  40. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  41. package/es/components/content/Alert/Alert.js +1 -1
  42. package/es/components/content/Alert/index.js +1 -1
  43. package/es/components/content/Alert/types.js +1 -1
  44. package/es/components/content/Alert/use-alert.js +1 -1
  45. package/es/components/content/Avatar/Avatar.js +1 -1
  46. package/es/components/content/Badge/Badge.js +1 -1
  47. package/es/components/content/Card/Card.js +1 -1
  48. package/es/components/content/Content.js +1 -1
  49. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  50. package/es/components/content/CopyPasteBlock/index.js +1 -1
  51. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  52. package/es/components/content/CopySnippet/index.js +1 -1
  53. package/es/components/content/Divider.js +1 -1
  54. package/es/components/content/Footer.js +1 -1
  55. package/es/components/content/Header.js +1 -1
  56. package/es/components/content/HotKeys/HotKeys.js +1 -1
  57. package/es/components/content/HotKeys/index.js +1 -1
  58. package/es/components/content/Paragraph.js +1 -1
  59. package/es/components/content/Placeholder/Placeholder.js +1 -1
  60. package/es/components/content/PrismCode/PrismCode.js +1 -1
  61. package/es/components/content/PrismCode/prismSetup.js +1 -1
  62. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  63. package/es/components/content/Result/Result.js +1 -1
  64. package/es/components/content/Skeleton/Skeleton.js +1 -1
  65. package/es/components/content/Tag/Tag.js +1 -1
  66. package/es/components/content/Text.js +1 -1
  67. package/es/components/content/Title.js +1 -1
  68. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  69. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  70. package/es/components/fields/Checkbox/context.js +1 -1
  71. package/es/components/fields/Checkbox/index.js +1 -1
  72. package/es/components/fields/ComboBox/ComboBox.js +1 -1
  73. package/es/components/fields/ComboBox/index.js +1 -1
  74. package/es/components/fields/DatePicker/DateInput.js +1 -1
  75. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  76. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  77. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  78. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  79. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  80. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  81. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  82. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  83. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  84. package/es/components/fields/DatePicker/index.js +1 -1
  85. package/es/components/fields/DatePicker/intl.js +1 -1
  86. package/es/components/fields/DatePicker/parseDate.js +1 -1
  87. package/es/components/fields/DatePicker/props.js +1 -1
  88. package/es/components/fields/DatePicker/types.js +1 -1
  89. package/es/components/fields/DatePicker/utils.js +1 -1
  90. package/es/components/fields/FileInput/FileInput.js +1 -1
  91. package/es/components/fields/FilterListBox/FilterListBox.js +48 -6
  92. package/es/components/fields/FilterListBox/index.js +1 -1
  93. package/es/components/fields/FilterPicker/FilterPicker.js +401 -138
  94. package/es/components/fields/FilterPicker/index.js +1 -1
  95. package/es/components/fields/Input/Input.js +1 -1
  96. package/es/components/fields/Input/index.js +1 -1
  97. package/es/components/fields/ListBox/ListBox.js +132 -24
  98. package/es/components/fields/ListBox/index.js +1 -1
  99. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  100. package/es/components/fields/NumberInput/StepButton.js +1 -1
  101. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  102. package/es/components/fields/RadioGroup/Radio.js +1 -1
  103. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  104. package/es/components/fields/RadioGroup/context.js +1 -1
  105. package/es/components/fields/RadioGroup/index.js +1 -1
  106. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  107. package/es/components/fields/SearchInput/index.js +1 -1
  108. package/es/components/fields/Select/Select.js +58 -41
  109. package/es/components/fields/Select/index.js +1 -1
  110. package/es/components/fields/Slider/Gradation.js +1 -1
  111. package/es/components/fields/Slider/Header.js +1 -1
  112. package/es/components/fields/Slider/RangeSlider.js +1 -1
  113. package/es/components/fields/Slider/Slider.js +1 -1
  114. package/es/components/fields/Slider/SliderBase.js +1 -1
  115. package/es/components/fields/Slider/SliderInput.js +1 -1
  116. package/es/components/fields/Slider/SliderThumb.js +1 -1
  117. package/es/components/fields/Slider/SliderTrack.js +1 -1
  118. package/es/components/fields/Slider/elements.js +1 -1
  119. package/es/components/fields/Slider/index.js +1 -1
  120. package/es/components/fields/Slider/types.js +1 -1
  121. package/es/components/fields/Switch/Switch.js +1 -1
  122. package/es/components/fields/Switch/index.js +1 -1
  123. package/es/components/fields/TextArea/TextArea.js +1 -1
  124. package/es/components/fields/TextArea/index.js +1 -1
  125. package/es/components/fields/TextInput/TextInput.js +1 -1
  126. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  127. package/es/components/fields/TextInput/index.js +1 -1
  128. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  129. package/es/components/fields/TextInputMapper/index.js +1 -1
  130. package/es/components/fields/index.js +1 -1
  131. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  132. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  133. package/es/components/form/FieldWrapper/index.js +1 -1
  134. package/es/components/form/FieldWrapper/types.js +1 -1
  135. package/es/components/form/Form/Field.js +1 -1
  136. package/es/components/form/Form/Form.js +1 -1
  137. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  138. package/es/components/form/Form/ResetButton/index.js +1 -1
  139. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  140. package/es/components/form/Form/SubmitButton/index.js +1 -1
  141. package/es/components/form/Form/SubmitError.js +1 -1
  142. package/es/components/form/Form/index.js +1 -1
  143. package/es/components/form/Form/types.js +1 -1
  144. package/es/components/form/Form/use-field/index.js +1 -1
  145. package/es/components/form/Form/use-field/types.js +1 -1
  146. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  147. package/es/components/form/Form/use-field/use-field.js +1 -1
  148. package/es/components/form/Form/use-form.js +1 -1
  149. package/es/components/form/Form/validation.js +1 -1
  150. package/es/components/form/Label.js +1 -1
  151. package/es/components/form/index.js +1 -1
  152. package/es/components/form/wrapper.js +1 -1
  153. package/es/components/layout/Flex.js +1 -1
  154. package/es/components/layout/Flow.js +1 -1
  155. package/es/components/layout/Grid.js +1 -1
  156. package/es/components/layout/Panel.js +1 -1
  157. package/es/components/layout/Prefix.js +1 -1
  158. package/es/components/layout/ResizablePanel.js +1 -1
  159. package/es/components/layout/Space.js +1 -1
  160. package/es/components/layout/Suffix.js +1 -1
  161. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  162. package/es/components/navigation/Link/Link.js +1 -1
  163. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  164. package/es/components/organisms/Modal/Modal.js +1 -1
  165. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  166. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  167. package/es/components/other/Calendar/Calendar.js +1 -1
  168. package/es/components/other/Calendar/CalendarCell.js +1 -1
  169. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  170. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  171. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  172. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  173. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  174. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  175. package/es/components/overlays/AlertDialog/index.js +1 -1
  176. package/es/components/overlays/AlertDialog/types.js +1 -1
  177. package/es/components/overlays/Dialog/Dialog.js +1 -1
  178. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  179. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  180. package/es/components/overlays/Dialog/DialogTrigger.js +2 -1
  181. package/es/components/overlays/Dialog/context.js +1 -1
  182. package/es/components/overlays/Dialog/index.js +1 -1
  183. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  184. package/es/components/overlays/Modal/Modal.js +1 -1
  185. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  186. package/es/components/overlays/Modal/Overlay.js +1 -1
  187. package/es/components/overlays/Modal/Popover.js +1 -1
  188. package/es/components/overlays/Modal/Tray.js +1 -1
  189. package/es/components/overlays/Modal/Underlay.js +1 -1
  190. package/es/components/overlays/Modal/index.js +1 -1
  191. package/es/components/overlays/Modal/types.js +1 -1
  192. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  193. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  194. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  195. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  196. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  197. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  198. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  199. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  200. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  201. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  202. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  203. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  204. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  205. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  206. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  207. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  208. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  209. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  210. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  211. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  212. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  213. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  214. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  215. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  216. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  217. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  218. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  219. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  220. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  221. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  222. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  223. package/es/components/overlays/NewNotifications/index.js +1 -1
  224. package/es/components/overlays/NewNotifications/types.js +1 -1
  225. package/es/components/overlays/Notification/Notification.js +1 -1
  226. package/es/components/overlays/OverlayWrapper.js +1 -1
  227. package/es/components/overlays/Toasts/Toast.js +1 -1
  228. package/es/components/overlays/Toasts/index.js +1 -1
  229. package/es/components/overlays/Toasts/types.js +1 -1
  230. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  231. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  232. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  233. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  234. package/es/components/overlays/Tooltip/context.js +1 -1
  235. package/es/components/overlays/Tooltip/index.js +1 -1
  236. package/es/components/portal/Portal.js +1 -1
  237. package/es/components/portal/PortalProvider.js +1 -1
  238. package/es/components/portal/index.js +1 -1
  239. package/es/components/portal/storybook/templates/CustomRoot.js +1 -1
  240. package/es/components/portal/storybook/templates/PortalOrder.js +1 -1
  241. package/es/components/portal/storybook/templates/basic.js +1 -1
  242. package/es/components/portal/storybook/templates/index.js +1 -1
  243. package/es/components/portal/types.js +1 -1
  244. package/es/components/portal/usePortal.js +1 -1
  245. package/es/components/shared/InvalidIcon.js +1 -1
  246. package/es/components/shared/ValidIcon.js +1 -1
  247. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  248. package/es/components/status/LoadingAnimation/index.js +1 -1
  249. package/es/components/status/Spin/Cube.js +1 -1
  250. package/es/components/status/Spin/InternalSpinner.js +1 -1
  251. package/es/components/status/Spin/Spin.js +1 -1
  252. package/es/components/status/Spin/SpinsContainer.js +1 -1
  253. package/es/components/status/Spin/index.js +1 -1
  254. package/es/components/status/Spin/types.js +1 -1
  255. package/es/components/status/index.js +1 -1
  256. package/es/data/themes.js +1 -1
  257. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  258. package/es/icons/AdjustmentsIcon.js +1 -1
  259. package/es/icons/AiIcon.js +1 -1
  260. package/es/icons/AreaChartIcon.js +1 -1
  261. package/es/icons/BackwardIcon.js +1 -1
  262. package/es/icons/BarChartIcon.js +1 -1
  263. package/es/icons/BellFilledIcon.js +1 -1
  264. package/es/icons/BellIcon.js +1 -1
  265. package/es/icons/BooleanIcon.js +1 -1
  266. package/es/icons/CalendarEditIcon.js +1 -1
  267. package/es/icons/CalendarIcon.js +1 -1
  268. package/es/icons/CaretDownIcon.js +1 -1
  269. package/es/icons/CaretUpIcon.js +1 -1
  270. package/es/icons/ChartAreaStackedIcon.js +1 -1
  271. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  272. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  273. package/es/icons/ChartBarGroupedIcon.js +1 -1
  274. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  275. package/es/icons/ChartBarLineIcon.js +1 -1
  276. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  277. package/es/icons/ChartBarStackedIcon.js +1 -1
  278. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  279. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  280. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  281. package/es/icons/ChartBoxPlotIcon.js +1 -1
  282. package/es/icons/ChartBubbleIcon.js +1 -1
  283. package/es/icons/ChartDonut2Icon.js +1 -1
  284. package/es/icons/ChartFunnelIcon.js +1 -1
  285. package/es/icons/ChartKPIIcon.js +1 -1
  286. package/es/icons/ChartPie2Icon.js +1 -1
  287. package/es/icons/ChartScatterIcon.js +1 -1
  288. package/es/icons/CheckCircleFilledIcon.js +1 -1
  289. package/es/icons/CheckCircleIcon.js +1 -1
  290. package/es/icons/CheckIcon.js +1 -1
  291. package/es/icons/CircleFilledIcon.js +1 -1
  292. package/es/icons/ClearIcon.js +1 -1
  293. package/es/icons/CloseCircleFilledIcon.js +1 -1
  294. package/es/icons/CloseCircleIcon.js +1 -1
  295. package/es/icons/CloseIcon.js +1 -1
  296. package/es/icons/CodeIcon.js +1 -1
  297. package/es/icons/CopyIcon.js +1 -1
  298. package/es/icons/CountIcon.js +1 -1
  299. package/es/icons/CubeIcon.js +1 -1
  300. package/es/icons/DangerIcon.js +1 -1
  301. package/es/icons/DashboardIcon.js +1 -1
  302. package/es/icons/DatabaseIcon.js +1 -1
  303. package/es/icons/DirectionIcon.js +1 -1
  304. package/es/icons/DonutIcon.js +1 -1
  305. package/es/icons/DownIcon.js +1 -1
  306. package/es/icons/EditIcon.js +1 -1
  307. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  308. package/es/icons/ExclamationCircleIcon.js +1 -1
  309. package/es/icons/ExclamationIcon.js +1 -1
  310. package/es/icons/EyeIcon.js +1 -1
  311. package/es/icons/EyeInvisibleIcon.js +1 -1
  312. package/es/icons/FilterIcon.js +1 -1
  313. package/es/icons/FolderFilledIcon.js +1 -1
  314. package/es/icons/FolderIcon.js +1 -1
  315. package/es/icons/FolderOpenFilledIcon.js +1 -1
  316. package/es/icons/FolderOpenIcon.js +1 -1
  317. package/es/icons/ForwardIcon.js +1 -1
  318. package/es/icons/HierarchyIcon.js +1 -1
  319. package/es/icons/Icon.js +1 -1
  320. package/es/icons/InfoCircleIcon.js +1 -1
  321. package/es/icons/InfoIcon.js +1 -1
  322. package/es/icons/KeyIcon.js +1 -1
  323. package/es/icons/LeftIcon.js +1 -1
  324. package/es/icons/LineChartIcon.js +1 -1
  325. package/es/icons/LoadingIcon.js +1 -1
  326. package/es/icons/LockFilledIcon.js +1 -1
  327. package/es/icons/LockIcon.js +1 -1
  328. package/es/icons/MoreIcon.js +1 -1
  329. package/es/icons/NotAllowedIcon.js +1 -1
  330. package/es/icons/NumberIcon.js +1 -1
  331. package/es/icons/PauseCircleFilledIcon.js +1 -1
  332. package/es/icons/PauseCircleIcon.js +1 -1
  333. package/es/icons/PauseIcon.js +1 -1
  334. package/es/icons/PieChartIcon.js +1 -1
  335. package/es/icons/PlayCircleIcon.js +1 -1
  336. package/es/icons/PlayIcon.js +1 -1
  337. package/es/icons/PlusIcon.js +1 -1
  338. package/es/icons/ReloadIcon.js +1 -1
  339. package/es/icons/ReportIcon.js +1 -1
  340. package/es/icons/ReturnIcon.js +1 -1
  341. package/es/icons/RightIcon.js +1 -1
  342. package/es/icons/SchemeIcon.js +1 -1
  343. package/es/icons/SearchIcon.js +1 -1
  344. package/es/icons/SettingsIcon.js +1 -1
  345. package/es/icons/ShieldFilledIcon.js +1 -1
  346. package/es/icons/ShieldIcon.js +1 -1
  347. package/es/icons/SlashIcon.js +1 -1
  348. package/es/icons/SparklesIcon.js +1 -1
  349. package/es/icons/SqlIcon.js +1 -1
  350. package/es/icons/StatsIcon.js +1 -1
  351. package/es/icons/StopIcon.js +1 -1
  352. package/es/icons/StringIcon.js +1 -1
  353. package/es/icons/SwitchIcon.js +1 -1
  354. package/es/icons/TableIcon.js +1 -1
  355. package/es/icons/ThumbsDownIcon.js +1 -1
  356. package/es/icons/ThumbsUpIcon.js +1 -1
  357. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  358. package/es/icons/ThunderboltFilledIcon.js +1 -1
  359. package/es/icons/ThunderboltIcon.js +1 -1
  360. package/es/icons/TimeIcon.js +1 -1
  361. package/es/icons/UnlockIcon.js +1 -1
  362. package/es/icons/UpIcon.js +1 -1
  363. package/es/icons/UserGroupIcon.js +1 -1
  364. package/es/icons/UserIcon.js +1 -1
  365. package/es/icons/UserLockIcon.js +1 -1
  366. package/es/icons/ViewIcon.js +1 -1
  367. package/es/icons/WarningFilledIcon.js +1 -1
  368. package/es/icons/WarningIcon.js +1 -1
  369. package/es/icons/add-new-icon.js +1 -1
  370. package/es/icons/index.js +1 -1
  371. package/es/icons/wrap-icon.js +1 -1
  372. package/es/index.js +1 -1
  373. package/es/provider.js +1 -1
  374. package/es/providers/TrackingProvider.js +1 -1
  375. package/es/services/notification.js +1 -1
  376. package/es/shared/form.js +1 -1
  377. package/es/shared/index.js +1 -1
  378. package/es/stories/Form.legacy-stories.js +1 -1
  379. package/es/stories/FormFieldArgs.js +1 -1
  380. package/es/stories/Layout.stories.js +1 -1
  381. package/es/stories/Tasty.stories.js +1 -1
  382. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  383. package/es/stories/components/DialogFormApp.js +1 -1
  384. package/es/stories/components/StyledButton.js +1 -1
  385. package/es/stories/lists/baseProps.js +1 -1
  386. package/es/tasty/index.js +1 -1
  387. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  388. package/es/tasty/styles/align.js +1 -1
  389. package/es/tasty/styles/border.js +1 -1
  390. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  391. package/es/tasty/styles/color.js +1 -1
  392. package/es/tasty/styles/createStyle.js +1 -1
  393. package/es/tasty/styles/dimension.js +1 -1
  394. package/es/tasty/styles/display.js +1 -1
  395. package/es/tasty/styles/fade.js +1 -1
  396. package/es/tasty/styles/fill.js +1 -1
  397. package/es/tasty/styles/flow.js +1 -1
  398. package/es/tasty/styles/font.js +1 -1
  399. package/es/tasty/styles/fontStyle.js +1 -1
  400. package/es/tasty/styles/gap.js +1 -1
  401. package/es/tasty/styles/groupRadius.js +1 -1
  402. package/es/tasty/styles/height.js +1 -1
  403. package/es/tasty/styles/index.js +1 -1
  404. package/es/tasty/styles/inset.js +1 -1
  405. package/es/tasty/styles/justify.js +1 -1
  406. package/es/tasty/styles/list.js +1 -1
  407. package/es/tasty/styles/margin.js +1 -1
  408. package/es/tasty/styles/marginBlock.js +1 -1
  409. package/es/tasty/styles/marginInline.js +1 -1
  410. package/es/tasty/styles/outline.js +1 -1
  411. package/es/tasty/styles/padding.js +1 -1
  412. package/es/tasty/styles/paddingBlock.js +1 -1
  413. package/es/tasty/styles/paddingInline.js +1 -1
  414. package/es/tasty/styles/place.js +1 -1
  415. package/es/tasty/styles/predefined.js +1 -1
  416. package/es/tasty/styles/preset.js +1 -1
  417. package/es/tasty/styles/radius.js +1 -1
  418. package/es/tasty/styles/reset.js +1 -1
  419. package/es/tasty/styles/scrollbar.js +1 -1
  420. package/es/tasty/styles/shadow.js +1 -1
  421. package/es/tasty/styles/styledScrollbar.js +1 -1
  422. package/es/tasty/styles/transition.js +1 -1
  423. package/es/tasty/styles/types.js +1 -1
  424. package/es/tasty/styles/width.js +1 -1
  425. package/es/tasty/tasty.js +1 -1
  426. package/es/tasty/types.js +1 -1
  427. package/es/tasty/utils/cache-wrapper.js +1 -1
  428. package/es/tasty/utils/case-converter.js +1 -1
  429. package/es/tasty/utils/colors.js +1 -1
  430. package/es/tasty/utils/dotize.js +1 -1
  431. package/es/tasty/utils/filterBaseProps.js +1 -1
  432. package/es/tasty/utils/getDisplayName.js +1 -1
  433. package/es/tasty/utils/getModCombinations.js +1 -1
  434. package/es/tasty/utils/mergeStyles.js +1 -1
  435. package/es/tasty/utils/modAttrs.js +1 -1
  436. package/es/tasty/utils/renderStyles.js +1 -1
  437. package/es/tasty/utils/responsive.js +1 -1
  438. package/es/tasty/utils/string.js +1 -1
  439. package/es/tasty/utils/styles.js +1 -1
  440. package/es/tasty/utils/warnings.js +1 -1
  441. package/es/tokens.js +1 -1
  442. package/es/type-checks.js +1 -1
  443. package/es/utils/ResizeSensor.js +1 -1
  444. package/es/utils/modules.js +1 -1
  445. package/es/utils/promise.js +1 -1
  446. package/es/utils/random.js +1 -1
  447. package/es/utils/range.js +1 -1
  448. package/es/utils/react/Slots.js +1 -1
  449. package/es/utils/react/chain.js +1 -1
  450. package/es/utils/react/index.js +1 -1
  451. package/es/utils/react/interactions.js +1 -1
  452. package/es/utils/react/isTextOnly.js +1 -1
  453. package/es/utils/react/mapProps.js +1 -1
  454. package/es/utils/react/mergeProps.js +1 -1
  455. package/es/utils/react/nullableValue.js +1 -1
  456. package/es/utils/react/sharedStore.js +1 -1
  457. package/es/utils/react/useCombinedRefs.js +1 -1
  458. package/es/utils/react/useControlledFocusVisible.js +1 -1
  459. package/es/utils/react/useEventBus.js +1 -1
  460. package/es/utils/react/useId.js +1 -1
  461. package/es/utils/react/useIsDarwin.js +1 -1
  462. package/es/utils/react/useKeySymbols.js +1 -1
  463. package/es/utils/react/useLayoutEffect.js +1 -1
  464. package/es/utils/react/useQaProps.js +1 -1
  465. package/es/utils/react/useViewportSize.js +1 -1
  466. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  467. package/es/utils/transitions.js +1 -1
  468. package/es/utils/tree.js +1 -1
  469. package/es/utils/warnings.js +1 -1
  470. package/es/version.js +2 -2
  471. package/package.json +1 -1
  472. package/types/components/actions/Button/Button.d.ts +30 -12
  473. package/types/components/fields/FilterListBox/FilterListBox.d.ts +11 -11
  474. package/types/components/fields/FilterPicker/FilterPicker.d.ts +22 -18
  475. package/types/components/fields/ListBox/ListBox.d.ts +38 -21
  476. package/types/components/overlays/Dialog/DialogTrigger.d.ts +1 -0
@@ -1,18 +1,18 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.69.1
4
+ * @cube-dev/ui-kit v0.69.3
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, useRef, useState, } from 'react';
9
+ import { Children, cloneElement, forwardRef, useCallback, useEffect, useMemo, useRef, useState, } from 'react';
10
10
  import { FocusScope, useKeyboard } from 'react-aria';
11
11
  import { Section as BaseSection, Item } from 'react-stately';
12
12
  import { useWarn } from '../../../_internal/hooks/use-warn';
13
13
  import { DirectionIcon } from '../../../icons';
14
14
  import { useProviderProps } from '../../../provider';
15
- import { BASE_STYLES, COLOR_STYLES, extractStyles, OUTER_STYLES, } from '../../../tasty';
15
+ import { BASE_STYLES, COLOR_STYLES, extractStyles, OUTER_STYLES, tasty, } from '../../../tasty';
16
16
  import { mergeProps } from '../../../utils/react';
17
17
  import { Button } from '../../actions';
18
18
  import { Text } from '../../content/Text';
@@ -21,6 +21,16 @@ import { Dialog, DialogTrigger } from '../../overlays/Dialog';
21
21
  import { FilterListBox, } from '../FilterListBox/FilterListBox';
22
22
  import { ListBox } from '../ListBox';
23
23
  const PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];
24
+ const FilterPickerWrapper = tasty({
25
+ qa: 'FilterPicker',
26
+ styles: {
27
+ display: 'inline-grid',
28
+ flow: 'column',
29
+ gridRows: '1sf',
30
+ placeContent: 'stretch',
31
+ placeItems: 'stretch',
32
+ },
33
+ });
24
34
  export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
25
35
  props = useProviderProps(props);
26
36
  props = useFormProps(props);
@@ -35,7 +45,13 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
35
45
  }
36
46
  fieldProps.onSelectionChange = (key) => {
37
47
  if (props.selectionMode === 'multiple') {
38
- onChange(key ? (Array.isArray(key) ? key : [key]) : []);
48
+ // Handle "all" selection and array selections
49
+ if (key === 'all') {
50
+ onChange('all');
51
+ }
52
+ else {
53
+ onChange(key ? (Array.isArray(key) ? key : [key]) : []);
54
+ }
39
55
  }
40
56
  else {
41
57
  onChange(Array.isArray(key) ? key[0] : key);
@@ -44,7 +60,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
44
60
  return fieldProps;
45
61
  },
46
62
  });
47
- let { qa, label, extra, icon, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, message, mods: externalMods, description, placeholder, size = 'medium', styles, listBoxStyles, popoverStyles, type = 'outline', theme = 'default', labelSuffix, shouldFocusWrap, children, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, disabledKeys, onSelectionChange, selectionMode = 'single', listStateRef, focusOnHover, header, footer, headerStyles, footerStyles, allowsCustomValue, renderSummary, isCheckable, ...otherProps } = props;
63
+ let { qa, label, extra, icon, rightIcon, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, message, mods: externalMods, description, 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, ...otherProps } = props;
48
64
  styles = extractStyles(otherProps, PROP_STYLES, styles);
49
65
  // Warn if isCheckable is false in single selection mode
50
66
  useWarn(isCheckable === false && selectionMode === 'single', {
@@ -59,6 +75,8 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
59
75
  // Track popover open/close and capture children order for session
60
76
  const [isPopoverOpen, setIsPopoverOpen] = useState(false);
61
77
  const cachedChildrenOrder = useRef(null);
78
+ // Cache for sorted items array when using `items` prop
79
+ const cachedItemsOrder = useRef(null);
62
80
  const triggerRef = useRef(null);
63
81
  const isControlledSingle = selectedKey !== undefined;
64
82
  const isControlledMultiple = selectedKeys !== undefined;
@@ -68,7 +86,8 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
68
86
  const effectiveSelectedKeys = isControlledMultiple
69
87
  ? selectedKeys
70
88
  : internalSelectedKeys;
71
- // Utility to normalize React keys by stripping array prefixes like ".$" or "."
89
+ // Utility: remove React's ".$" / "." prefixes from element keys so that we
90
+ // can compare them with user-provided keys.
72
91
  const normalizeKeyValue = (key) => {
73
92
  if (key == null)
74
93
  return '';
@@ -79,11 +98,57 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
79
98
  ? str.slice(1)
80
99
  : str;
81
100
  };
101
+ // ---------------------------------------------------------------------------
102
+ // Map public-facing keys (without React's "." prefix) to the actual React
103
+ // element keys that appear in the collection (which usually have the `.$`
104
+ // or `.` prefix added by React when children are in an array). This ensures
105
+ // that the key we pass to ListBox exactly matches the keys it receives from
106
+ // React Aria, so the initial selection is highlighted correctly.
107
+ // ---------------------------------------------------------------------------
108
+ const findReactKey = useCallback((lookup) => {
109
+ if (lookup == null)
110
+ return lookup;
111
+ const normalizedLookup = normalizeKeyValue(lookup);
112
+ let foundKey = lookup;
113
+ const traverse = (nodes) => {
114
+ Children.forEach(nodes, (child) => {
115
+ if (!child || typeof child !== 'object')
116
+ return;
117
+ const element = child;
118
+ if (element.key != null) {
119
+ if (normalizeKeyValue(element.key) === normalizedLookup) {
120
+ foundKey = element.key;
121
+ }
122
+ }
123
+ if (element.props?.children) {
124
+ traverse(element.props.children);
125
+ }
126
+ });
127
+ };
128
+ if (children)
129
+ traverse(children);
130
+ return foundKey;
131
+ }, [children]);
132
+ const mappedSelectedKey = useMemo(() => {
133
+ if (selectionMode !== 'single')
134
+ return null;
135
+ return effectiveSelectedKey ? findReactKey(effectiveSelectedKey) : null;
136
+ }, [selectionMode, effectiveSelectedKey, findReactKey]);
137
+ const mappedSelectedKeys = useMemo(() => {
138
+ if (selectionMode !== 'multiple')
139
+ return undefined;
140
+ if (effectiveSelectedKeys === 'all')
141
+ return 'all';
142
+ if (Array.isArray(effectiveSelectedKeys)) {
143
+ return effectiveSelectedKeys.map((k) => findReactKey(k));
144
+ }
145
+ return effectiveSelectedKeys;
146
+ }, [selectionMode, effectiveSelectedKeys, findReactKey]);
82
147
  // Given an iterable of keys (array or Set) toggle membership for duplicates
83
148
  const processSelectionArray = (iterable) => {
84
149
  const resultSet = new Set();
85
150
  for (const key of iterable) {
86
- const nKey = normalizeKeyValue(key);
151
+ const nKey = String(key);
87
152
  if (resultSet.has(nKey)) {
88
153
  resultSet.delete(nKey); // toggle off if clicked twice
89
154
  }
@@ -95,66 +160,145 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
95
160
  };
96
161
  // Helper to get selected item labels for display
97
162
  const getSelectedLabels = () => {
98
- if (!children)
99
- return [];
100
- const selectedSet = new Set(selectionMode === 'multiple'
101
- ? (effectiveSelectedKeys || []).map(String)
163
+ // Handle "all" selection - return all available labels
164
+ if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {
165
+ const allLabels = [];
166
+ // Extract from items prop if available
167
+ if (items) {
168
+ const extractFromItems = (itemsArray) => {
169
+ itemsArray.forEach((item) => {
170
+ if (item && typeof item === 'object') {
171
+ const itemObj = item;
172
+ if (Array.isArray(itemObj.children)) {
173
+ // Section-like object
174
+ extractFromItems(itemObj.children);
175
+ }
176
+ else {
177
+ // Regular item - extract label
178
+ const label = itemObj.textValue ||
179
+ itemObj.label ||
180
+ (typeof itemObj.children === 'string'
181
+ ? itemObj.children
182
+ : '') ||
183
+ String(itemObj.children ||
184
+ itemObj.key ||
185
+ itemObj.id ||
186
+ item);
187
+ allLabels.push(label);
188
+ }
189
+ }
190
+ });
191
+ };
192
+ const itemsArray = Array.isArray(items)
193
+ ? items
194
+ : Array.from(items);
195
+ extractFromItems(itemsArray);
196
+ return allLabels;
197
+ }
198
+ // Extract from children if available
199
+ if (children) {
200
+ const extractAllLabels = (nodes) => {
201
+ if (!nodes)
202
+ return;
203
+ Children.forEach(nodes, (child) => {
204
+ if (!child || typeof child !== 'object')
205
+ return;
206
+ const element = child;
207
+ if (element.type === Item) {
208
+ const label = element.props.textValue ||
209
+ (typeof element.props.children === 'string'
210
+ ? element.props.children
211
+ : '') ||
212
+ String(element.props.children || '');
213
+ allLabels.push(label);
214
+ }
215
+ if (element.props?.children) {
216
+ extractAllLabels(element.props.children);
217
+ }
218
+ });
219
+ };
220
+ extractAllLabels(children);
221
+ return allLabels;
222
+ }
223
+ return allLabels;
224
+ }
225
+ const selectedSet = new Set(selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
226
+ ? (effectiveSelectedKeys || []).map((k) => normalizeKeyValue(k))
102
227
  : effectiveSelectedKey != null
103
- ? [String(effectiveSelectedKey)]
228
+ ? [normalizeKeyValue(effectiveSelectedKey)]
104
229
  : []);
105
230
  const labels = [];
106
- const extractLabels = (nodes) => {
107
- Children.forEach(nodes, (child) => {
108
- if (!child || typeof child !== 'object')
109
- return;
110
- if (child.type === Item) {
111
- if (selectedSet.has(String(child.key))) {
112
- const label = child.props.textValue ||
113
- (typeof child.props.children === 'string'
114
- ? child.props.children
115
- : '') ||
116
- String(child.props.children || '');
117
- labels.push(label);
118
- }
119
- }
120
- if (child.props?.children) {
121
- extractLabels(child.props.children);
122
- }
123
- });
124
- };
125
231
  const processedKeys = new Set();
126
- // Modified extractLabels to track which keys we've processed
127
- const extractLabelsWithTracking = (nodes) => {
128
- Children.forEach(nodes, (child) => {
129
- if (!child || typeof child !== 'object')
232
+ // Extract from items prop if available
233
+ if (items) {
234
+ const extractFromItems = (itemsArray) => {
235
+ itemsArray.forEach((item) => {
236
+ if (item && typeof item === 'object') {
237
+ const itemObj = item;
238
+ if (Array.isArray(itemObj.children)) {
239
+ // Section-like object
240
+ extractFromItems(itemObj.children);
241
+ }
242
+ else {
243
+ // Regular item - check if selected
244
+ const itemKey = itemObj.key || itemObj.id;
245
+ if (itemKey != null &&
246
+ selectedSet.has(normalizeKeyValue(itemKey))) {
247
+ const label = itemObj.textValue ||
248
+ itemObj.label ||
249
+ (typeof itemObj.children === 'string'
250
+ ? itemObj.children
251
+ : '') ||
252
+ String(itemObj.children || itemKey);
253
+ labels.push(label);
254
+ processedKeys.add(normalizeKeyValue(itemKey));
255
+ }
256
+ }
257
+ }
258
+ });
259
+ };
260
+ const itemsArray = Array.isArray(items)
261
+ ? items
262
+ : Array.from(items);
263
+ extractFromItems(itemsArray);
264
+ }
265
+ // Extract from children if available (for mixed mode or fallback)
266
+ if (children) {
267
+ const extractLabelsWithTracking = (nodes) => {
268
+ if (!nodes)
130
269
  return;
131
- if (child.type === Item) {
132
- const childKey = String(child.key);
133
- if (selectedSet.has(childKey)) {
134
- const label = child.props.textValue ||
135
- (typeof child.props.children === 'string'
136
- ? child.props.children
137
- : '') ||
138
- String(child.props.children || '');
139
- labels.push(label);
140
- processedKeys.add(childKey);
270
+ Children.forEach(nodes, (child) => {
271
+ if (!child || typeof child !== 'object')
272
+ return;
273
+ const element = child;
274
+ if (element.type === Item) {
275
+ const childKey = String(element.key);
276
+ if (selectedSet.has(normalizeKeyValue(childKey))) {
277
+ const label = element.props.textValue ||
278
+ (typeof element.props.children === 'string'
279
+ ? element.props.children
280
+ : '') ||
281
+ String(element.props.children || '');
282
+ labels.push(label);
283
+ processedKeys.add(normalizeKeyValue(childKey));
284
+ }
141
285
  }
142
- }
143
- if (child.props?.children) {
144
- extractLabelsWithTracking(child.props.children);
145
- }
146
- });
147
- };
148
- extractLabelsWithTracking(children);
149
- // Handle custom values that don't have corresponding children
150
- const selectedKeysArr = selectionMode === 'multiple'
286
+ if (element.props?.children) {
287
+ extractLabelsWithTracking(element.props.children);
288
+ }
289
+ });
290
+ };
291
+ extractLabelsWithTracking(children);
292
+ }
293
+ // Handle custom values that don't have corresponding items/children
294
+ const selectedKeysArr = selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'
151
295
  ? (effectiveSelectedKeys || []).map(String)
152
296
  : effectiveSelectedKey != null
153
297
  ? [String(effectiveSelectedKey)]
154
298
  : [];
155
299
  // Add labels for any selected keys that weren't processed (custom values)
156
300
  selectedKeysArr.forEach((key) => {
157
- if (!processedKeys.has(key)) {
301
+ if (!processedKeys.has(normalizeKeyValue(key))) {
158
302
  // This is a custom value, use the key as the label
159
303
  labels.push(key);
160
304
  }
@@ -165,29 +309,36 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
165
309
  const hasSelection = selectedLabels.length > 0;
166
310
  // Always keep the latest selection in a ref (with normalized keys) so that we can read it synchronously in the popover close effect.
167
311
  const latestSelectionRef = useRef({
168
- single: effectiveSelectedKey != null
169
- ? normalizeKeyValue(effectiveSelectedKey)
170
- : null,
171
- multiple: (effectiveSelectedKeys ?? []).map(normalizeKeyValue),
312
+ single: effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,
313
+ multiple: effectiveSelectedKeys === 'all'
314
+ ? 'all'
315
+ : (effectiveSelectedKeys ?? []).map(String),
172
316
  });
173
317
  useEffect(() => {
174
318
  latestSelectionRef.current = {
175
- single: effectiveSelectedKey != null
176
- ? normalizeKeyValue(effectiveSelectedKey)
177
- : null,
178
- multiple: (effectiveSelectedKeys ?? []).map(normalizeKeyValue),
319
+ single: effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,
320
+ multiple: effectiveSelectedKeys === 'all'
321
+ ? 'all'
322
+ : (effectiveSelectedKeys ?? []).map(String),
179
323
  };
180
324
  }, [effectiveSelectedKey, effectiveSelectedKeys]);
181
325
  const selectionsWhenClosed = useRef({ single: null, multiple: [] });
326
+ // Capture the initial selection (from defaultSelectedKey(s)) so that
327
+ // the very first popover open can already use it for sorting.
328
+ useEffect(() => {
329
+ selectionsWhenClosed.current = { ...latestSelectionRef.current };
330
+ }, []); // run only once on mount
182
331
  // Function to sort children with selected items on top
183
332
  const getSortedChildren = useCallback(() => {
184
- if (!children)
333
+ // If children is not provided or is a render function, return it as-is
334
+ if (!children || typeof children === 'function')
185
335
  return children;
186
- // When the popover is **closed** we don't want to trigger any resorting
187
- // that could cause visible re-flows during the fade-out animation. Simply
188
- // reuse whatever order we had while it was open (if available).
189
- if (!isPopoverOpen) {
190
- return cachedChildrenOrder.current ?? children;
336
+ // When the popover is **closed**, reuse the cached order if we have it to
337
+ // avoid unnecessary reflows. If we don't have a cache yet (first open),
338
+ // fall through to compute the sorted order so the very first render is
339
+ // already correct.
340
+ if (!isPopoverOpen && cachedChildrenOrder.current) {
341
+ return cachedChildrenOrder.current;
191
342
  }
192
343
  // Popover is open – compute (or recompute) the sorted order for this
193
344
  // session.
@@ -209,11 +360,17 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
209
360
  // Create selected keys set for fast lookup
210
361
  const selectedSet = new Set();
211
362
  if (selectionMode === 'multiple') {
212
- selectionsWhenClosed.current.multiple.forEach((key) => selectedSet.add(normalizeKeyValue(key)));
363
+ if (selectionsWhenClosed.current.multiple === 'all') {
364
+ // Don't sort when "all" is selected, just return original children
365
+ return children;
366
+ }
367
+ else {
368
+ selectionsWhenClosed.current.multiple.forEach((key) => selectedSet.add(String(key)));
369
+ }
213
370
  }
214
371
  else if (selectionMode === 'single' &&
215
372
  selectionsWhenClosed.current.single != null) {
216
- selectedSet.add(normalizeKeyValue(selectionsWhenClosed.current.single));
373
+ selectedSet.add(String(selectionsWhenClosed.current.single));
217
374
  }
218
375
  // Helper function to check if an item is selected
219
376
  const isItemSelected = (child) => {
@@ -222,7 +379,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
222
379
  // Helper function to sort children array
223
380
  const sortChildrenArray = (childrenArray) => {
224
381
  const cloneWithNormalizedKey = (item) => cloneElement(item, {
225
- key: normalizeKeyValue(item.key),
382
+ key: item.key ? normalizeKeyValue(item.key) : undefined,
226
383
  });
227
384
  const selected = [];
228
385
  const unselected = [];
@@ -231,25 +388,30 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
231
388
  unselected.push(child);
232
389
  return;
233
390
  }
391
+ const element = child;
234
392
  // Handle sections - sort items within each section
235
- if (child.type === BaseSection ||
236
- child.type?.displayName === 'Section') {
237
- const sectionChildren = Array.isArray(child.props.children)
238
- ? child.props.children
239
- : [child.props.children];
393
+ if (element.type === BaseSection ||
394
+ element.type?.displayName === 'Section') {
395
+ const sectionChildren = Array.isArray(element.props.children)
396
+ ? element.props.children
397
+ : [element.props.children];
240
398
  const selectedItems = [];
241
399
  const unselectedItems = [];
242
400
  sectionChildren.forEach((sectionChild) => {
243
- if (sectionChild &&
244
- typeof sectionChild === 'object' &&
245
- (sectionChild.type === Item ||
246
- sectionChild.type?.displayName === 'Item')) {
247
- const clonedItem = cloneWithNormalizedKey(sectionChild);
248
- if (isItemSelected(sectionChild)) {
249
- selectedItems.push(clonedItem);
401
+ if (sectionChild && typeof sectionChild === 'object') {
402
+ const sectionElement = sectionChild;
403
+ if (sectionElement.type === Item ||
404
+ sectionElement.type?.displayName === 'Item') {
405
+ const clonedItem = cloneWithNormalizedKey(sectionElement);
406
+ if (isItemSelected(sectionElement)) {
407
+ selectedItems.push(clonedItem);
408
+ }
409
+ else {
410
+ unselectedItems.push(clonedItem);
411
+ }
250
412
  }
251
413
  else {
252
- unselectedItems.push(clonedItem);
414
+ unselectedItems.push(sectionChild);
253
415
  }
254
416
  }
255
417
  else {
@@ -257,15 +419,15 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
257
419
  }
258
420
  });
259
421
  // Create new section with sorted children, preserving React element properly
260
- unselected.push(cloneElement(child, {
261
- ...child.props,
422
+ unselected.push(cloneElement(element, {
423
+ ...element.props,
262
424
  children: [...selectedItems, ...unselectedItems],
263
425
  }));
264
426
  }
265
427
  // Handle non-section elements (items, dividers, etc.)
266
428
  else {
267
- const clonedItem = cloneWithNormalizedKey(child);
268
- if (isItemSelected(child)) {
429
+ const clonedItem = cloneWithNormalizedKey(element);
430
+ if (isItemSelected(element)) {
269
431
  selected.push(clonedItem);
270
432
  }
271
433
  else {
@@ -278,8 +440,9 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
278
440
  // Sort the children
279
441
  const childrenArray = Children.toArray(children);
280
442
  const sortedChildren = sortChildrenArray(childrenArray);
281
- // Cache the sorted order when popover opens
282
- if (isPopoverOpen) {
443
+ // Cache the sorted order when popover opens or when we compute it for the
444
+ // first time before opening.
445
+ if (isPopoverOpen || !cachedChildrenOrder.current) {
283
446
  cachedChildrenOrder.current = sortedChildren;
284
447
  }
285
448
  return sortedChildren;
@@ -290,8 +453,85 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
290
453
  selectionMode,
291
454
  isPopoverOpen,
292
455
  ]);
456
+ // Compute sorted items array when using `items` prop
457
+ const getSortedItems = useCallback(() => {
458
+ if (!items)
459
+ return items;
460
+ // Reuse cached order when popover is closed to avoid needless re-renders
461
+ if (!isPopoverOpen && cachedItemsOrder.current) {
462
+ return cachedItemsOrder.current;
463
+ }
464
+ const selectedSet = new Set();
465
+ const addSelected = (key) => {
466
+ if (key != null)
467
+ selectedSet.add(String(key));
468
+ };
469
+ if (selectionMode === 'multiple') {
470
+ if (selectionsWhenClosed.current.multiple === 'all') {
471
+ // Do not sort when all selected – keep original order
472
+ return items;
473
+ }
474
+ selectionsWhenClosed.current.multiple.forEach(addSelected);
475
+ }
476
+ else {
477
+ if (selectionsWhenClosed.current.single != null) {
478
+ addSelected(selectionsWhenClosed.current.single);
479
+ }
480
+ }
481
+ if (selectedSet.size === 0) {
482
+ return items;
483
+ }
484
+ // Helpers to extract key from item object
485
+ const getItemKey = (obj) => {
486
+ if (obj == null || typeof obj !== 'object')
487
+ return undefined;
488
+ const item = obj;
489
+ if (item.key != null)
490
+ return String(item.key);
491
+ if (item.id != null)
492
+ return String(item.id);
493
+ return undefined;
494
+ };
495
+ const sortArray = (arr) => {
496
+ const selectedArr = [];
497
+ const unselectedArr = [];
498
+ arr.forEach((obj) => {
499
+ const item = obj;
500
+ if (obj && Array.isArray(item.children)) {
501
+ // Section-like object – keep order, but sort its children
502
+ const sortedChildren = sortArray(item.children);
503
+ unselectedArr.push({ ...item, children: sortedChildren });
504
+ }
505
+ else {
506
+ const key = getItemKey(obj);
507
+ if (key && selectedSet.has(key)) {
508
+ selectedArr.push(obj);
509
+ }
510
+ else {
511
+ unselectedArr.push(obj);
512
+ }
513
+ }
514
+ });
515
+ return [...selectedArr, ...unselectedArr];
516
+ };
517
+ const itemsArray = Array.isArray(items)
518
+ ? items
519
+ : Array.from(items);
520
+ const sorted = sortArray(itemsArray);
521
+ if (isPopoverOpen || !cachedItemsOrder.current) {
522
+ cachedItemsOrder.current = sorted;
523
+ }
524
+ return sorted;
525
+ }, [
526
+ items,
527
+ selectionMode,
528
+ isPopoverOpen,
529
+ selectionsWhenClosed.current.multiple,
530
+ selectionsWhenClosed.current.single,
531
+ ]);
532
+ const finalItems = getSortedItems();
293
533
  // FilterListBox handles custom values internally when allowsCustomValue={true}
294
- // We only provide the sorted original children
534
+ // We provide sorted children (if any) and sorted items
295
535
  const finalChildren = getSortedChildren();
296
536
  const renderTriggerContent = () => {
297
537
  // When there is a selection and a custom summary renderer is provided – use it.
@@ -321,6 +561,9 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
321
561
  else if (selectionMode === 'single') {
322
562
  content = selectedLabels[0];
323
563
  }
564
+ else if (effectiveSelectedKeys === 'all') {
565
+ content = selectAllLabel;
566
+ }
324
567
  else {
325
568
  content = selectedLabels.join(', ');
326
569
  }
@@ -329,6 +572,7 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
329
572
  }
330
573
  return (_jsx(Text, { ellipsis: true, style: { opacity: hasSelection ? 1 : 'var(--disabled-opacity)' }, children: content }));
331
574
  };
575
+ const [shouldUpdatePosition, setShouldUpdatePosition] = useState(false);
332
576
  // The trigger is rendered as a function so we can access the dialog state
333
577
  const renderTrigger = (state) => {
334
578
  // Track popover open/close state to control sorting
@@ -352,64 +596,83 @@ export const FilterPicker = forwardRef(function FilterPicker(props, ref) {
352
596
  }
353
597
  },
354
598
  });
355
- return (_jsx(Button, { ref: triggerRef, qa: props.qa || 'FilterPicker', type: type, theme: validationState === 'invalid' ? 'danger' : theme, size: size, isDisabled: isDisabled, isLoading: isLoading, mods: {
599
+ useEffect(() => {
600
+ // Disable the update of the position while the popover is open (with a delay) to avoid jumping
601
+ setShouldUpdatePosition(!state.isOpen);
602
+ }, [state.isOpen]);
603
+ return (_jsx(Button, { ref: triggerRef, "data-menu-trigger": true, type: type, theme: validationState === 'invalid' ? 'danger' : theme, size: size, isDisabled: isDisabled, isLoading: isLoading, mods: {
356
604
  placeholder: !hasSelection,
357
605
  selected: hasSelection,
358
606
  ...externalMods,
359
- }, icon: icon, rightIcon: _jsx(DirectionIcon, { to: state.isOpen ? 'top' : 'bottom' }), styles: styles, ...otherProps, ...keyboardProps, "aria-label": `${props['aria-label'] ?? props.label ?? ''}`, children: renderTriggerContent() }));
607
+ }, icon: icon, rightIcon: rightIcon !== undefined ? (rightIcon) : (_jsx(DirectionIcon, { to: state.isOpen ? 'top' : 'bottom' })), styles: styles, ...keyboardProps, "aria-label": `${props['aria-label'] ?? props.label ?? ''}`, children: renderTriggerContent() }));
360
608
  };
361
- const filterPickerField = (_jsxs(DialogTrigger, { type: "popover", placement: "bottom start", shouldFlip: true, isDismissable: true, children: [renderTrigger, (close) => (_jsx(Dialog, { display: "grid", styles: { gridRows: '1sf', ...popoverStyles }, children: _jsx(FocusScope, { restoreFocus: true, children: _jsx(FilterListBox, { autoFocus: true, "aria-label": `${props['aria-label'] ?? props.label ?? ''} Picker`, selectedKey: selectionMode === 'single' ? effectiveSelectedKey : undefined, selectedKeys: selectionMode === 'multiple' ? effectiveSelectedKeys : undefined, disabledKeys: disabledKeys, focusOnHover: focusOnHover, shouldFocusWrap: shouldFocusWrap, allowsCustomValue: allowsCustomValue, selectionMode: selectionMode, validationState: validationState, isDisabled: isDisabled, stateRef: listStateRef, isCheckable: isCheckable, mods: {
362
- popover: true,
363
- }, size: size === 'small' ? 'medium' : size, header: header, footer: footer, headerStyles: headerStyles, footerStyles: footerStyles, qa: `${props.qa || 'FilterPicker'}ListBox`, onEscape: () => close(), onOptionClick: (key) => {
364
- // For FilterPicker, clicking the content area should close the popover
365
- // in multiple selection mode (single mode already closes via onSelectionChange)
366
- if (selectionMode === 'multiple' && isCheckable) {
367
- close();
368
- }
369
- }, onSelectionChange: (selection) => {
370
- // No need to change any flags - children order is cached
371
- // Update internal state if uncontrolled
372
- if (selectionMode === 'single') {
373
- if (!isControlledSingle) {
374
- setInternalSelectedKey(selection);
609
+ const filterPickerField = (_jsx(FilterPickerWrapper, { qa: props.qa || 'FilterPicker', styles: styles, ...otherProps, children: _jsxs(DialogTrigger, { type: "popover", placement: "bottom start", styles: triggerStyles, shouldUpdatePosition: shouldUpdatePosition, shouldFlip: shouldFlip, isDismissable: true, children: [renderTrigger, (close) => (_jsx(Dialog, { display: "grid", styles: { gridRows: '1sf', ...popoverStyles }, 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, disabledKeys: disabledKeys, focusOnHover: focusOnHover, shouldFocusWrap: shouldFocusWrap, allowsCustomValue: allowsCustomValue, selectionMode: selectionMode, validationState: validationState, isDisabled: isDisabled, stateRef: listStateRef, isCheckable: isCheckable, mods: {
610
+ popover: true,
611
+ }, size: size === 'small' ? 'medium' : size, showSelectAll: showSelectAll, selectAllLabel: selectAllLabel, header: header, footer: footer, headerStyles: headerStyles, footerStyles: footerStyles, qa: `${props.qa || 'FilterPicker'}ListBox`, onEscape: () => close(), onOptionClick: (key) => {
612
+ // For FilterPicker, clicking the content area should close the popover
613
+ // in multiple selection mode (single mode already closes via onSelectionChange)
614
+ if ((selectionMode === 'multiple' && isCheckable) ||
615
+ key === '__ALL__') {
616
+ close();
375
617
  }
376
- }
377
- else {
378
- if (!isControlledMultiple) {
379
- let normalized = selection;
380
- if (Array.isArray(selection)) {
381
- normalized = processSelectionArray(selection);
618
+ }, onSelectionChange: (selection) => {
619
+ // No need to change any flags - children order is cached
620
+ // Update internal state if uncontrolled
621
+ if (selectionMode === 'single') {
622
+ if (!isControlledSingle) {
623
+ setInternalSelectedKey(selection);
624
+ }
625
+ }
626
+ else {
627
+ if (!isControlledMultiple) {
628
+ let normalized = selection;
629
+ if (selection === 'all') {
630
+ normalized = 'all';
631
+ }
632
+ else if (Array.isArray(selection)) {
633
+ normalized = processSelectionArray(selection);
634
+ }
635
+ else if (selection &&
636
+ typeof selection === 'object' &&
637
+ selection instanceof Set) {
638
+ normalized = processSelectionArray(selection);
639
+ }
640
+ setInternalSelectedKeys(normalized);
641
+ }
642
+ }
643
+ // Update latest selection ref synchronously
644
+ if (selectionMode === 'single') {
645
+ latestSelectionRef.current.single =
646
+ selection != null ? String(selection) : null;
647
+ }
648
+ else {
649
+ if (selection === 'all') {
650
+ latestSelectionRef.current.multiple = 'all';
651
+ }
652
+ else if (Array.isArray(selection)) {
653
+ latestSelectionRef.current.multiple = Array.from(new Set(processSelectionArray(selection)));
382
654
  }
383
655
  else if (selection &&
384
656
  typeof selection === 'object' &&
385
657
  selection instanceof Set) {
386
- normalized = processSelectionArray(selection);
658
+ latestSelectionRef.current.multiple = Array.from(new Set(processSelectionArray(selection)));
659
+ }
660
+ else {
661
+ latestSelectionRef.current.multiple =
662
+ selection === 'all'
663
+ ? 'all'
664
+ : Array.isArray(selection)
665
+ ? selection.map(String)
666
+ : [];
387
667
  }
388
- setInternalSelectedKeys(normalized);
389
- }
390
- }
391
- // Update latest selection ref synchronously
392
- if (selectionMode === 'single') {
393
- latestSelectionRef.current.single = selection;
394
- }
395
- else {
396
- if (Array.isArray(selection)) {
397
- latestSelectionRef.current.multiple = Array.from(new Set(processSelectionArray(selection)));
398
- }
399
- else if (selection &&
400
- typeof selection === 'object' &&
401
- selection instanceof Set) {
402
- latestSelectionRef.current.multiple = Array.from(new Set(processSelectionArray(selection)));
403
668
  }
404
- else {
405
- latestSelectionRef.current.multiple = selection;
669
+ onSelectionChange?.(selection);
670
+ if (selectionMode === 'single') {
671
+ close();
406
672
  }
407
- }
408
- onSelectionChange?.(selection);
409
- if (selectionMode === 'single') {
410
- close();
411
- }
412
- }, children: finalChildren }) }) }))] }));
673
+ }, children: (children
674
+ ? finalChildren
675
+ : undefined) }) }) }))] }) }));
413
676
  return wrapWithField(filterPickerField, ref, mergeProps({
414
677
  ...props,
415
678
  styles: undefined,