@cube-dev/ui-kit 0.0.0-canary-80e87ad → 0.0.0-canary-db51992

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 (468) hide show
  1. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  27. package/dist/components/actions/Link/Link.js +1 -1
  28. package/dist/components/actions/Menu/Menu.js +1 -1
  29. package/dist/components/actions/Menu/MenuItem.js +1 -1
  30. package/dist/components/actions/Menu/MenuSection.js +1 -1
  31. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  32. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  34. package/dist/components/actions/Menu/context.js +1 -1
  35. package/dist/components/actions/Menu/styled.js +1 -1
  36. package/dist/components/actions/index.js +1 -1
  37. package/dist/components/actions/use-action.js +1 -1
  38. package/dist/components/actions/use-anchored-menu.js +1 -1
  39. package/dist/components/actions/use-context-menu.js +1 -1
  40. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  41. package/dist/components/content/Alert/Alert.js +1 -1
  42. package/dist/components/content/Alert/use-alert.js +1 -1
  43. package/dist/components/content/Avatar/Avatar.js +1 -1
  44. package/dist/components/content/Badge/Badge.js +1 -1
  45. package/dist/components/content/Card/Card.js +1 -1
  46. package/dist/components/content/Content.js +1 -1
  47. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  48. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  49. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  50. package/dist/components/content/Divider.js +1 -1
  51. package/dist/components/content/Footer.js +1 -1
  52. package/dist/components/content/Header.js +1 -1
  53. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  54. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  55. package/dist/components/content/Item/Item.js +1 -1
  56. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  57. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  58. package/dist/components/content/Layout/GridLayout.js +1 -1
  59. package/dist/components/content/Layout/Layout.js +1 -1
  60. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  61. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  62. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  63. package/dist/components/content/Layout/LayoutContent.js +1 -1
  64. package/dist/components/content/Layout/LayoutContext.js +1 -1
  65. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  66. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  67. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  68. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  69. package/dist/components/content/Layout/LayoutPane.js +1 -1
  70. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  71. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  73. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  74. package/dist/components/content/Layout/index.js +1 -1
  75. package/dist/components/content/Layout/utils.js +1 -1
  76. package/dist/components/content/Paragraph.js +1 -1
  77. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  78. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  79. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  80. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  81. package/dist/components/content/Result/Result.js +1 -1
  82. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  83. package/dist/components/content/Tag/Tag.js +1 -1
  84. package/dist/components/content/Text.js +1 -1
  85. package/dist/components/content/TextItem/TextItem.js +1 -1
  86. package/dist/components/content/Title.js +1 -1
  87. package/dist/components/content/Tree/Tree.js +1 -1
  88. package/dist/components/content/Tree/TreeNode.js +1 -1
  89. package/dist/components/content/Tree/styled.js +1 -1
  90. package/dist/components/content/Tree/tree-index.js +1 -1
  91. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  92. package/dist/components/content/Tree/use-load-data.js +1 -1
  93. package/dist/components/content/highlightText.js +1 -1
  94. package/dist/components/content/use-auto-tooltip.js +1 -1
  95. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  96. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  97. package/dist/components/fields/Checkbox/context.js +1 -1
  98. package/dist/components/fields/ComboBox/ComboBox.d.ts +0 -6
  99. package/dist/components/fields/ComboBox/ComboBox.js +6 -10
  100. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  101. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  102. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  103. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  104. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  105. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  106. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  107. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  108. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  109. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  110. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  111. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  112. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  113. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  114. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  115. package/dist/components/fields/DatePicker/props.js +1 -1
  116. package/dist/components/fields/DatePicker/utils.js +1 -1
  117. package/dist/components/fields/FileInput/FileInput.js +1 -1
  118. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  119. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  120. package/dist/components/fields/Input/Input.js +1 -1
  121. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  122. package/dist/components/fields/ListBox/ListBox.js +1 -1
  123. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +1 -1
  124. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  125. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +1 -1
  126. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  127. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  128. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  129. package/dist/components/fields/Picker/Picker.d.ts +1 -1
  130. package/dist/components/fields/Picker/Picker.js +3 -7
  131. package/dist/components/fields/Picker/Picker.js.map +1 -1
  132. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  133. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  134. package/dist/components/fields/RadioGroup/context.js +1 -1
  135. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  136. package/dist/components/fields/Select/Select.d.ts +0 -8
  137. package/dist/components/fields/Select/Select.js +10 -30
  138. package/dist/components/fields/Select/Select.js.map +1 -1
  139. package/dist/components/fields/Slider/Gradation.js +1 -1
  140. package/dist/components/fields/Slider/HueSlider.js +1 -1
  141. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  142. package/dist/components/fields/Slider/Slider.js +1 -1
  143. package/dist/components/fields/Slider/SliderBase.js +1 -1
  144. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  145. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  146. package/dist/components/fields/Slider/elements.js +1 -1
  147. package/dist/components/fields/Slider/index.js +1 -1
  148. package/dist/components/fields/Switch/Switch.js +1 -1
  149. package/dist/components/fields/TextArea/TextArea.js +1 -1
  150. package/dist/components/fields/TextInput/TextInput.js +1 -1
  151. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  152. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  153. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  154. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  155. package/dist/components/form/Form/Field.js +1 -1
  156. package/dist/components/form/Form/Form.js +1 -1
  157. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  158. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  159. package/dist/components/form/Form/SubmitError.js +1 -1
  160. package/dist/components/form/Form/index.js +1 -1
  161. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  162. package/dist/components/form/Form/use-field/use-field.js +1 -1
  163. package/dist/components/form/Form/use-form.js +1 -1
  164. package/dist/components/form/Form/validation.js +1 -1
  165. package/dist/components/form/Label.js +1 -1
  166. package/dist/components/form/wrapper.js +1 -1
  167. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  168. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  169. package/dist/components/layout/Board/Board.js +1 -1
  170. package/dist/components/layout/Board/BoardProvider.js +1 -1
  171. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  172. package/dist/components/layout/Board/Widget.js +1 -1
  173. package/dist/components/layout/Board/WidgetHost.js +1 -1
  174. package/dist/components/layout/Board/board-context.js +1 -1
  175. package/dist/components/layout/Board/board-store.js +1 -1
  176. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  177. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  178. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  179. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  180. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  181. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  182. package/dist/components/layout/Board/index.js +1 -1
  183. package/dist/components/layout/Board/responsive-utils.js +1 -1
  184. package/dist/components/layout/Board/use-board-layout.js +1 -1
  185. package/dist/components/layout/Board/use-board-registry.js +1 -1
  186. package/dist/components/layout/Flex.js +1 -1
  187. package/dist/components/layout/Flow.js +1 -1
  188. package/dist/components/layout/Grid.js +1 -1
  189. package/dist/components/layout/Panel.js +1 -1
  190. package/dist/components/layout/Prefix.js +1 -1
  191. package/dist/components/layout/ResizablePanel.js +1 -1
  192. package/dist/components/layout/Space.js +1 -1
  193. package/dist/components/layout/Suffix.js +1 -1
  194. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  195. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  196. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  197. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  198. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  199. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  200. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  201. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  202. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  203. package/dist/components/navigation/Tabs/styled.js +1 -1
  204. package/dist/components/navigation/Tabs/types.js +1 -1
  205. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  206. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  207. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  208. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  209. package/dist/components/other/Calendar/Calendar.js +1 -1
  210. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  211. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  212. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  213. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  214. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  215. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  216. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  217. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  218. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  219. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  220. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  221. package/dist/components/overlays/Dialog/context.js +1 -1
  222. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  223. package/dist/components/overlays/Modal/Modal.js +1 -1
  224. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  225. package/dist/components/overlays/Modal/Overlay.js +1 -1
  226. package/dist/components/overlays/Modal/Popover.js +1 -1
  227. package/dist/components/overlays/Modal/Tray.js +1 -1
  228. package/dist/components/overlays/Modal/Underlay.js +1 -1
  229. package/dist/components/overlays/Notifications/Notification.js +1 -1
  230. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  231. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  232. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  233. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  234. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  235. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  236. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  237. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  238. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  239. package/dist/components/overlays/Notifications/index.js +1 -1
  240. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  241. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  242. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  243. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  244. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  245. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  246. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  247. package/dist/components/overlays/Toast/index.js +1 -1
  248. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  249. package/dist/components/overlays/Toast/useToast.js +1 -1
  250. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  251. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  252. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  253. package/dist/components/overlays/Tooltip/context.js +1 -1
  254. package/dist/components/portal/Portal.js +1 -1
  255. package/dist/components/portal/PortalProvider.js +1 -1
  256. package/dist/components/portal/usePortal.js +1 -1
  257. package/dist/components/shared/DraggableCollection.js +1 -1
  258. package/dist/components/shared/InvalidIcon.js +1 -1
  259. package/dist/components/shared/ValidIcon.js +1 -1
  260. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  261. package/dist/components/status/Spin/Cube.js +1 -1
  262. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  263. package/dist/components/status/Spin/Spin.js +1 -1
  264. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  265. package/dist/data/item-themes.js +1 -1
  266. package/dist/data/themes.js +1 -1
  267. package/dist/i18n/I18nProvider.js +1 -1
  268. package/dist/i18n/createFormatter.js +1 -1
  269. package/dist/i18n/index.js +1 -1
  270. package/dist/i18n/instance.js +1 -1
  271. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  272. package/dist/i18n/locales/en-US/uikit.js +1 -1
  273. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  274. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  275. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  276. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  277. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  278. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  279. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  280. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  281. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  282. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  283. package/dist/i18n/locales.js +1 -1
  284. package/dist/i18n/useFormatter.js +1 -1
  285. package/dist/i18n/useI18n.js +1 -1
  286. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  287. package/dist/icons/AdjustmentsIcon.js +1 -1
  288. package/dist/icons/AiIcon.js +1 -1
  289. package/dist/icons/AreaChartIcon.js +1 -1
  290. package/dist/icons/BackwardIcon.js +1 -1
  291. package/dist/icons/BarChartIcon.js +1 -1
  292. package/dist/icons/BellFilledIcon.js +1 -1
  293. package/dist/icons/BellIcon.js +1 -1
  294. package/dist/icons/BooleanIcon.js +1 -1
  295. package/dist/icons/CalendarEditIcon.js +1 -1
  296. package/dist/icons/CalendarIcon.js +1 -1
  297. package/dist/icons/CaretDownIcon.js +1 -1
  298. package/dist/icons/CaretUpIcon.js +1 -1
  299. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  300. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  301. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  302. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  303. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  304. package/dist/icons/ChartBarLineIcon.js +1 -1
  305. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  306. package/dist/icons/ChartBarStackedIcon.js +1 -1
  307. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  308. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  309. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  310. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  311. package/dist/icons/ChartBubbleIcon.js +1 -1
  312. package/dist/icons/ChartDonut2Icon.js +1 -1
  313. package/dist/icons/ChartFunnelIcon.js +1 -1
  314. package/dist/icons/ChartHeatmapIcon.js +1 -1
  315. package/dist/icons/ChartKPIIcon.js +1 -1
  316. package/dist/icons/ChartPie2Icon.js +1 -1
  317. package/dist/icons/ChartScatterIcon.js +1 -1
  318. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  319. package/dist/icons/CheckCircleIcon.js +1 -1
  320. package/dist/icons/CheckIcon.js +1 -1
  321. package/dist/icons/CircleFilledIcon.js +1 -1
  322. package/dist/icons/ClearIcon.js +1 -1
  323. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  324. package/dist/icons/CloseCircleIcon.js +1 -1
  325. package/dist/icons/CloseIcon.js +1 -1
  326. package/dist/icons/CodeIcon.js +1 -1
  327. package/dist/icons/ColumnTotalIcon.js +1 -1
  328. package/dist/icons/CopyIcon.js +1 -1
  329. package/dist/icons/CountIcon.js +1 -1
  330. package/dist/icons/CubeIcon.js +1 -1
  331. package/dist/icons/CubePauseIcon.js +1 -1
  332. package/dist/icons/CubePlayIcon.js +1 -1
  333. package/dist/icons/CurrencyDollarIcon.js +1 -1
  334. package/dist/icons/DangerIcon.js +1 -1
  335. package/dist/icons/DashboardIcon.js +1 -1
  336. package/dist/icons/DatabaseIcon.js +1 -1
  337. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  338. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  339. package/dist/icons/DirectionIcon.js +1 -1
  340. package/dist/icons/DonutIcon.js +1 -1
  341. package/dist/icons/DownIcon.js +1 -1
  342. package/dist/icons/EditIcon.js +1 -1
  343. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  344. package/dist/icons/ExclamationCircleIcon.js +1 -1
  345. package/dist/icons/ExclamationIcon.js +1 -1
  346. package/dist/icons/EyeIcon.js +1 -1
  347. package/dist/icons/EyeInvisibleIcon.js +1 -1
  348. package/dist/icons/FilterIcon.js +1 -1
  349. package/dist/icons/FolderFilledIcon.js +1 -1
  350. package/dist/icons/FolderIcon.js +1 -1
  351. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  352. package/dist/icons/FolderOpenIcon.js +1 -1
  353. package/dist/icons/ForwardIcon.js +1 -1
  354. package/dist/icons/GripVerticalIcon.js +1 -1
  355. package/dist/icons/HierarchyIcon.js +1 -1
  356. package/dist/icons/HierarchyOpenIcon.js +1 -1
  357. package/dist/icons/Icon.js +1 -1
  358. package/dist/icons/InfoCircleIcon.js +1 -1
  359. package/dist/icons/InfoIcon.js +1 -1
  360. package/dist/icons/KeyIcon.js +1 -1
  361. package/dist/icons/LeftIcon.js +1 -1
  362. package/dist/icons/LineChartIcon.js +1 -1
  363. package/dist/icons/LoadingIcon.js +1 -1
  364. package/dist/icons/LockFilledIcon.js +1 -1
  365. package/dist/icons/LockIcon.js +1 -1
  366. package/dist/icons/MoreIcon.js +1 -1
  367. package/dist/icons/NotAllowedIcon.js +1 -1
  368. package/dist/icons/Number123Icon.js +1 -1
  369. package/dist/icons/NumberIcon.js +1 -1
  370. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  371. package/dist/icons/PauseCircleIcon.js +1 -1
  372. package/dist/icons/PauseIcon.js +1 -1
  373. package/dist/icons/PercentageIcon.js +1 -1
  374. package/dist/icons/PieChartIcon.js +1 -1
  375. package/dist/icons/PlayCircleIcon.js +1 -1
  376. package/dist/icons/PlayIcon.js +1 -1
  377. package/dist/icons/PlusIcon.js +1 -1
  378. package/dist/icons/ProgressBarIcon.js +1 -1
  379. package/dist/icons/ReloadIcon.js +1 -1
  380. package/dist/icons/ReportIcon.js +1 -1
  381. package/dist/icons/ReturnIcon.js +1 -1
  382. package/dist/icons/RightIcon.js +1 -1
  383. package/dist/icons/RowTotalsIcon.js +1 -1
  384. package/dist/icons/SchemeIcon.js +1 -1
  385. package/dist/icons/SearchIcon.js +1 -1
  386. package/dist/icons/SemanticQueryIcon.js +1 -1
  387. package/dist/icons/SettingsIcon.js +1 -1
  388. package/dist/icons/ShieldFilledIcon.js +1 -1
  389. package/dist/icons/ShieldIcon.js +1 -1
  390. package/dist/icons/SlashIcon.js +1 -1
  391. package/dist/icons/SparklesIcon.js +1 -1
  392. package/dist/icons/SqlIcon.js +1 -1
  393. package/dist/icons/StatsIcon.js +1 -1
  394. package/dist/icons/StopIcon.js +1 -1
  395. package/dist/icons/StringIcon.js +1 -1
  396. package/dist/icons/SubtotalsIcon.js +1 -1
  397. package/dist/icons/SwitchIcon.js +1 -1
  398. package/dist/icons/TableIcon.js +1 -1
  399. package/dist/icons/ThumbsDownIcon.js +1 -1
  400. package/dist/icons/ThumbsUpIcon.js +1 -1
  401. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  402. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  403. package/dist/icons/ThunderboltIcon.js +1 -1
  404. package/dist/icons/TimeIcon.js +1 -1
  405. package/dist/icons/TrashIcon.js +1 -1
  406. package/dist/icons/UnlockIcon.js +1 -1
  407. package/dist/icons/UpIcon.js +1 -1
  408. package/dist/icons/UserGroupIcon.js +1 -1
  409. package/dist/icons/UserIcon.js +1 -1
  410. package/dist/icons/UserLockIcon.js +1 -1
  411. package/dist/icons/ViewIcon.js +1 -1
  412. package/dist/icons/WarningFilledIcon.js +1 -1
  413. package/dist/icons/WarningIcon.js +1 -1
  414. package/dist/icons/wrap-icon.js +1 -1
  415. package/dist/index.js +1 -1
  416. package/dist/provider.js +1 -1
  417. package/dist/providers/TrackingProvider.js +1 -1
  418. package/dist/providers/navigationAdapter.default.js +1 -1
  419. package/dist/tokens/base.js +1 -1
  420. package/dist/tokens/colors.js +1 -1
  421. package/dist/tokens/index.js +1 -1
  422. package/dist/tokens/layout.js +1 -1
  423. package/dist/tokens/palette.js +1 -1
  424. package/dist/tokens/shadows.js +1 -1
  425. package/dist/tokens/sizes.js +1 -1
  426. package/dist/tokens/spacing.js +1 -1
  427. package/dist/tokens/typography.js +1 -1
  428. package/dist/utils/ResizeSensor.js +1 -1
  429. package/dist/utils/is-dev-env.js +1 -1
  430. package/dist/utils/modules.js +1 -1
  431. package/dist/utils/promise.js +1 -1
  432. package/dist/utils/raf.js +1 -1
  433. package/dist/utils/random.js +1 -1
  434. package/dist/utils/range.js +1 -1
  435. package/dist/utils/react/RenderCache.js +1 -1
  436. package/dist/utils/react/Slots.js +1 -1
  437. package/dist/utils/react/chain.js +1 -1
  438. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  439. package/dist/utils/react/index.js +1 -1
  440. package/dist/utils/react/interactions.js +1 -1
  441. package/dist/utils/react/isTextOnly.js +1 -1
  442. package/dist/utils/react/mapProps.js +1 -1
  443. package/dist/utils/react/mergeProps.js +1 -1
  444. package/dist/utils/react/nullableValue.js +1 -1
  445. package/dist/utils/react/resolveIcon.js +1 -1
  446. package/dist/utils/react/sharedStore.js +1 -1
  447. package/dist/utils/react/useCombinedRefs.js +1 -1
  448. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  449. package/dist/utils/react/useEventBus.js +1 -1
  450. package/dist/utils/react/useId.js +1 -1
  451. package/dist/utils/react/useIsDarwin.js +1 -1
  452. package/dist/utils/react/useKeySymbols.js +1 -1
  453. package/dist/utils/react/useLayoutEffect.js +1 -1
  454. package/dist/utils/react/useLocalStorage.js +1 -1
  455. package/dist/utils/react/useMergeStyles.js +1 -1
  456. package/dist/utils/react/usePopoverSync.js +1 -1
  457. package/dist/utils/react/useQaProps.js +1 -1
  458. package/dist/utils/react/useViewportSize.js +1 -1
  459. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  460. package/dist/utils/selection.js +1 -1
  461. package/dist/utils/styles.js +1 -1
  462. package/dist/utils/tree.js +1 -1
  463. package/dist/utils/warnings.js +1 -1
  464. package/dist/version.js +2 -2
  465. package/docs/components/fields/ComboBox.md +0 -14
  466. package/docs/components/fields/Picker.md +0 -15
  467. package/docs/components/fields/Select.md +1 -13
  468. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { useImperativeHandle, useRef } from "react";
3
3
  import { createDOMRef } from "@react-spectrum/utils";
4
4
  import { createFocusManager } from "@react-aria/focus";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { useProviderProps } from "../../../provider.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { _Text } from "../../content/Text.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { _FileInput } from "../FileInput/FileInput.js";
3
3
  import { TextInput } from "../TextInput/TextInput.js";
4
4
  import { _NumberInput } from "../NumberInput/NumberInput.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { DraggableCollection } from "../../shared/DraggableCollection.js";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { DisplayTransition } from "../../helpers/DisplayTransition/DisplayTransition.js";
4
4
  import { Portal } from "../../portal/Portal.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  //#region src/components/fields/ListBoxPopover/listNavigation.ts
3
3
  /**
4
4
  * Walks a collection (possibly nested under sections) and collects the keys of
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { useCallback, useEffect, useRef } from "react";
3
3
 
4
4
  //#region src/components/fields/ListBoxPopover/useCompositeFocus.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useProviderProps } from "../../../provider.js";
4
4
  import { useFieldProps } from "../../form/Form/use-field/use-field-props.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { useI18n } from "../../../i18n/useI18n.js";
3
3
  import { DirectionIcon } from "../../../icons/DirectionIcon.js";
4
4
  import { Button } from "../../actions/index.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useProviderProps } from "../../../provider.js";
4
4
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
@@ -11,7 +11,7 @@ import { ForwardedRef, MutableRefObject, ReactElement, ReactNode } from "react";
11
11
  import { ListState, Section } from "react-stately";
12
12
 
13
13
  //#region src/components/fields/Picker/Picker.d.ts
14
- interface CubePickerProps<T> extends Omit<CubeListBoxProps<T>, 'size' | 'tooltip' | 'shape'>, Omit<CubeItemProps, 'children' | 'size'>, BasePropsWithoutChildren, BaseStyleProps, OuterStyleProps, ColorStyleProps, Omit<FieldBaseProps, 'tooltip'>, Pick<CubeItemButtonProps, 'type' | 'theme' | 'icon' | 'rightIcon' | 'prefix' | 'suffix' | 'hotkeys' | 'shape'> {
14
+ interface CubePickerProps<T> extends Omit<CubeListBoxProps<T>, 'size' | 'tooltip' | 'shape' | 'emptyLabel'>, Omit<CubeItemProps, 'children' | 'size'>, BasePropsWithoutChildren, BaseStyleProps, OuterStyleProps, ColorStyleProps, Omit<FieldBaseProps, 'tooltip'>, Pick<CubeItemButtonProps, 'type' | 'theme' | 'icon' | 'rightIcon' | 'prefix' | 'suffix' | 'hotkeys' | 'shape'> {
15
15
  /** Placeholder text when no selection is made */
16
16
  placeholder?: string;
17
17
  /** Size of the picker component */
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { _Text } from "../../content/Text.js";
@@ -55,7 +55,7 @@ const Picker = forwardRef(function Picker(props, ref) {
55
55
  };
56
56
  return fieldProps;
57
57
  } });
58
- let { id, qa, label, extra, icon, rightIcon, prefix, suffix, hotkeys, triggerTooltip, triggerDescription, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, message, mods: externalMods, description, descriptionPlacement, placeholder, size = "medium", styles, listBoxStyles, popoverStyles, type = "outline", theme = "default", shape, labelSuffix, shouldFocusWrap, children, shouldFlip = true, containerPadding = 8, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, disabledKeys, onSelectionChange, selectionMode = "single", listStateRef, focusOnHover, showSelectAll, selectAllLabel = t("picker.all", "All"), items, header, footer, headerStyles, footerStyles, triggerStyles, renderSummary, isCheckable, allValueProps, listStyles, optionStyles, sectionStyles, headingStyles, listRef, disallowEmptySelection, shouldUseVirtualFocus, onEscape, onOptionClick, isClearable, onClear, sortSelectedToTop, onOpenChange, emptyLabel, listStateRef: externalListStateRef, ...otherProps } = props;
58
+ let { id, qa, label, extra, icon, rightIcon, prefix, suffix, hotkeys, triggerTooltip, triggerDescription, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, message, mods: externalMods, description, descriptionPlacement, placeholder, size = "medium", styles, listBoxStyles, popoverStyles, type = "outline", theme = "default", shape, labelSuffix, shouldFocusWrap, children, shouldFlip = true, containerPadding = 8, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, disabledKeys, onSelectionChange, selectionMode = "single", listStateRef, focusOnHover, showSelectAll, selectAllLabel = t("picker.all", "All"), items, header, footer, headerStyles, footerStyles, triggerStyles, renderSummary, isCheckable, allValueProps, listStyles, optionStyles, sectionStyles, headingStyles, listRef, disallowEmptySelection, shouldUseVirtualFocus, onEscape, onOptionClick, isClearable, onClear, sortSelectedToTop, onOpenChange, listStateRef: externalListStateRef, ...otherProps } = props;
59
59
  styles = extractStyles(otherProps, PROP_STYLES, styles);
60
60
  useWarn(isCheckable === false && selectionMode === "single", {
61
61
  key: ["picker-checkable-single-mode"],
@@ -165,10 +165,7 @@ const Picker = forwardRef(function Picker(props, ref) {
165
165
  const hasSelection = selectedLabels.length > 0;
166
166
  const handleOpenChange = useEvent((isOpen) => {
167
167
  if (isOpen === isPopoverOpen) return;
168
- if (isOpen) {
169
- if (localCollectionState.collection.size === 0 && emptyLabel == null) return;
170
- triggerWidthRef.current = triggerRef?.current?.UNSAFE_getDOMNode()?.offsetWidth;
171
- }
168
+ if (isOpen) triggerWidthRef.current = triggerRef?.current?.UNSAFE_getDOMNode()?.offsetWidth;
172
169
  setIsPopoverOpen(isOpen);
173
170
  if (!isOpen) {
174
171
  selectionWhenClosed.current = { ...latestSelectionRef.current };
@@ -341,7 +338,6 @@ const Picker = forwardRef(function Picker(props, ref) {
341
338
  footerStyles,
342
339
  qa: `${props.qa || "Picker"}ListBox`,
343
340
  allValueProps,
344
- emptyLabel,
345
341
  onEscape: handleEscape,
346
342
  onOptionClick: handleOptionClick,
347
343
  onSelectionChange: handleSelectionChange,
@@ -1 +1 @@
1
- {"version":3,"file":"Picker.js","names":["Text","ItemButton","BaseSection"],"sources":["../../../../src/components/fields/Picker/Picker.tsx"],"sourcesContent":["import { CollectionChildren, FocusableRefValue } from '@react-types/shared';\nimport {\n BASE_STYLES,\n BasePropsWithoutChildren,\n BaseStyleProps,\n COLOR_STYLES,\n ColorStyleProps,\n filterBaseProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n ReactElement,\n ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FocusScope, Key, useKeyboard } from 'react-aria';\nimport { Section as BaseSection, ListState, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\nimport { useI18n } from '../../../i18n';\nimport { CloseIcon, DirectionIcon, LoadingIcon } from '../../../icons';\nimport { useProviderProps } from '../../../provider';\nimport { processSelectionArray } from '../../../utils/selection';\nimport { extractStyles } from '../../../utils/styles';\nimport {\n CubeItemButtonProps,\n ItemAction,\n ItemActionProvider,\n ItemButton,\n} from '../../actions';\nimport { CubeItemProps } from '../../content/Item';\nimport { Text } from '../../content/Text';\nimport { useFieldProps, useFormProps, wrapWithField } from '../../form';\nimport { Dialog, DialogTrigger } from '../../overlays/Dialog';\nimport { CubeListBoxProps, ListBox } from '../ListBox/ListBox';\n\nimport type { FieldBaseProps } from '../../../shared';\n\nexport interface CubePickerProps<T>\n extends Omit<CubeListBoxProps<T>, 'size' | 'tooltip' | 'shape'>,\n Omit<CubeItemProps, 'children' | 'size'>,\n BasePropsWithoutChildren,\n BaseStyleProps,\n OuterStyleProps,\n ColorStyleProps,\n Omit<FieldBaseProps, 'tooltip'>,\n Pick<\n CubeItemButtonProps,\n | 'type'\n | 'theme'\n | 'icon'\n | 'rightIcon'\n | 'prefix'\n | 'suffix'\n | 'hotkeys'\n | 'shape'\n > {\n /** Placeholder text when no selection is made */\n placeholder?: string;\n /** Size of the picker component */\n size?: 'small' | 'medium' | 'large';\n /** Custom styles for the list box popover */\n listBoxStyles?: Styles;\n /** Custom styles for the popover container */\n popoverStyles?: Styles;\n /** Custom styles for the trigger button */\n triggerStyles?: Styles;\n /** Whether to show checkboxes for multiple selection mode */\n isCheckable?: boolean;\n /** Whether to flip the popover placement */\n shouldFlip?: boolean;\n /** Minimum padding in pixels between the popover and viewport edges */\n containerPadding?: number;\n /** Tooltip for the trigger button (separate from field tooltip) */\n triggerTooltip?: CubeItemProps['tooltip'];\n /** Description for the trigger button (separate from field description) */\n triggerDescription?: CubeItemProps['description'];\n\n /**\n * Custom renderer for the summary shown inside the trigger when there is a selection.\n *\n * For `selectionMode=\"multiple\"` the function receives:\n * - `selectedLabels`: array of labels of the selected items.\n * - `selectedKeys`: array of keys of the selected items or \"all\".\n *\n * For `selectionMode=\"single\"` the function receives:\n * - `selectedLabel`: label of the selected item.\n * - `selectedKey`: key of the selected item.\n *\n * The function should return a `ReactNode` that will be rendered inside the trigger.\n * Set to `false` to hide the summary text completely.\n */\n renderSummary?:\n | ((args: {\n selectedLabels?: string[];\n selectedKeys?: 'all' | (string | number)[];\n selectedLabel?: string;\n selectedKey?: string | number | null;\n selectionMode?: 'single' | 'multiple';\n }) => ReactNode)\n | false;\n\n /** Ref to access internal ListBox state */\n listStateRef?: MutableRefObject<ListState<T>>;\n /** Additional modifiers for styling the Picker */\n mods?: Record<string, boolean>;\n /** Whether the picker is clearable using a clear button in the rightIcon slot */\n isClearable?: boolean;\n /** Callback called when the clear button is pressed */\n onClear?: () => void;\n /**\n * Sort selected item(s) to the top when the popover opens.\n * Only works when using the `items` prop (data-driven mode).\n * Supports both single and multiple selection modes.\n * @default true when items are provided, false when using JSX children\n */\n sortSelectedToTop?: boolean;\n /** Callback called when the popover open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nconst PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\nconst PickerWrapper = tasty({\n qa: 'PickerWrapper',\n styles: {\n display: 'inline-grid',\n flow: 'column',\n gridRows: '1sf',\n placeContent: 'stretch',\n placeItems: 'stretch',\n },\n});\n\nexport const Picker = forwardRef(function Picker<T extends object>(\n props: CubePickerProps<T>,\n ref: ForwardedRef<HTMLElement>,\n) {\n const { t } = useI18n();\n\n props = useProviderProps(props);\n props = useFormProps(props);\n props = useFieldProps(props, {\n valuePropsMapper: ({ value, onChange }) => {\n const fieldProps: Record<string, unknown> = {};\n\n if (props.selectionMode === 'multiple') {\n fieldProps.selectedKeys = value || [];\n } else {\n fieldProps.selectedKey = value ?? null;\n }\n\n fieldProps.onSelectionChange = (key: Key | null | 'all' | Key[]) => {\n if (props.selectionMode === 'multiple') {\n // Handle \"all\" selection and array selections\n if (key === 'all') {\n onChange('all');\n } else {\n onChange(key ? (Array.isArray(key) ? key : [key]) : []);\n }\n } else {\n onChange(Array.isArray(key) ? key[0] : key);\n }\n };\n\n return fieldProps;\n },\n });\n\n let {\n id,\n qa,\n label,\n extra,\n icon,\n rightIcon,\n prefix,\n suffix,\n hotkeys,\n triggerTooltip,\n triggerDescription,\n labelStyles,\n isRequired,\n necessityIndicator,\n validationState,\n isDisabled,\n isLoading,\n message,\n mods: externalMods,\n description,\n descriptionPlacement,\n placeholder,\n size = 'medium',\n styles,\n listBoxStyles,\n popoverStyles,\n type = 'outline',\n theme = 'default',\n shape,\n labelSuffix,\n shouldFocusWrap,\n children,\n shouldFlip = true,\n containerPadding = 8,\n selectedKey,\n defaultSelectedKey,\n selectedKeys,\n defaultSelectedKeys,\n disabledKeys,\n onSelectionChange,\n selectionMode = 'single',\n listStateRef,\n focusOnHover,\n showSelectAll,\n selectAllLabel = t('picker.all', 'All'),\n items,\n header,\n footer,\n headerStyles,\n footerStyles,\n triggerStyles,\n renderSummary,\n isCheckable,\n allValueProps,\n listStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n listRef,\n disallowEmptySelection,\n shouldUseVirtualFocus,\n onEscape,\n onOptionClick,\n isClearable,\n onClear,\n sortSelectedToTop,\n onOpenChange,\n emptyLabel,\n listStateRef: externalListStateRef,\n ...otherProps\n } = props;\n\n styles = extractStyles(otherProps, PROP_STYLES, styles);\n\n // Warn if isCheckable is false in single selection mode\n useWarn(isCheckable === false && selectionMode === 'single', {\n key: ['picker-checkable-single-mode'],\n args: [\n 'CubeUIKit: isCheckable=false is not recommended in single selection mode as it may confuse users about selection behavior.',\n ],\n });\n\n // Internal selection state (uncontrolled scenario)\n const [internalSelectedKey, setInternalSelectedKey] = useState<Key | null>(\n defaultSelectedKey ?? null,\n );\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<\n 'all' | Key[]\n >(defaultSelectedKeys ?? []);\n\n // Popover state — used as controlled prop for DialogTrigger\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const triggerRef = useRef<FocusableRefValue<HTMLButtonElement>>(null);\n // Measured lazily on popover open instead of on every render\n const triggerWidthRef = useRef<number | undefined>(undefined);\n\n const isControlledSingle = selectedKey !== undefined;\n const isControlledMultiple = selectedKeys !== undefined;\n\n const effectiveSelectedKey = isControlledSingle\n ? selectedKey\n : internalSelectedKey;\n const effectiveSelectedKeys = isControlledMultiple\n ? selectedKeys\n : internalSelectedKeys;\n\n // Ref to access internal ListBox state for collection API\n const internalListStateRef = useRef<ListState<T>>(null);\n\n // Sync internal ref with external ref if provided\n useEffect(() => {\n if (externalListStateRef && internalListStateRef.current) {\n externalListStateRef.current = internalListStateRef.current;\n }\n }, [externalListStateRef]);\n\n // Cache for sorted items array when using `items` prop\n const cachedItemsOrder = useRef<T[] | null>(null);\n\n const latestSelectionRef = useRef<{\n single: string | null;\n multiple: string[];\n }>({\n single: effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map(String)\n : [],\n });\n\n useEffect(() => {\n latestSelectionRef.current = {\n single:\n effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map(String)\n : [],\n };\n }, [effectiveSelectedKey, effectiveSelectedKeys, selectionMode]);\n\n const selectionWhenClosed = useRef<{\n single: string | null;\n multiple: string[];\n }>({ single: null, multiple: [] });\n\n const sortSelectedToTopExplicit = sortSelectedToTop !== undefined;\n const shouldSortSelectedToTop = sortSelectedToTop ?? (items ? true : false);\n\n useWarn(sortSelectedToTopExplicit && shouldSortSelectedToTop && !items, {\n key: ['picker-sort-selected-to-top-children'],\n args: [\n 'Picker: sortSelectedToTop only works with the items prop. Sorting will be skipped when using JSX children.',\n ],\n });\n\n useEffect(() => {\n cachedItemsOrder.current = null;\n }, [items]);\n\n useEffect(() => {\n if (!isPopoverOpen) {\n selectionWhenClosed.current = {\n single:\n effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map(String)\n : [],\n };\n }\n }, [\n effectiveSelectedKey,\n effectiveSelectedKeys,\n isPopoverOpen,\n selectionMode,\n ]);\n\n const finalItems = useMemo(() => {\n if (!items || !shouldSortSelectedToTop) return items;\n if (!isPopoverOpen) return items;\n if (cachedItemsOrder.current) return cachedItemsOrder.current;\n\n const selectedKeySet = new Set<string>();\n\n if (selectionMode === 'multiple') {\n if (\n selectionWhenClosed.current.multiple.length === 0 ||\n effectiveSelectedKeys === 'all'\n ) {\n return items;\n }\n selectionWhenClosed.current.multiple.forEach((k) =>\n selectedKeySet.add(k),\n );\n } else if (selectionWhenClosed.current.single) {\n selectedKeySet.add(selectionWhenClosed.current.single);\n }\n\n if (selectedKeySet.size === 0) return items;\n\n const itemsArray = Array.isArray(items) ? items : Array.from(items);\n const selectedItems: T[] = [];\n const unselectedItems: T[] = [];\n\n itemsArray.forEach((item) => {\n const key = (item as any)?.key ?? (item as any)?.id;\n if (key != null && selectedKeySet.has(String(key))) {\n selectedItems.push(item);\n } else {\n unselectedItems.push(item);\n }\n });\n\n const sorted = [...selectedItems, ...unselectedItems];\n\n cachedItemsOrder.current = sorted;\n\n return sorted;\n }, [items, shouldSortSelectedToTop, selectionMode, isPopoverOpen]);\n\n // Create local collection state for reading item data (labels, etc.)\n // This allows us to read item labels even before the popover opens\n const localCollectionState = useListState({\n children,\n items: finalItems, // Use sorted items to match what's shown in popover\n selectionMode: 'none', // Don't manage selection in this state\n });\n\n const selectedLabels = useMemo(() => {\n const collection = localCollectionState?.collection;\n\n if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {\n if (!collection) return [];\n const labels: string[] = [];\n for (const item of collection) {\n if (item.type === 'item') {\n labels.push(item.textValue || String(item.key));\n }\n }\n return labels;\n }\n\n const keysToGet =\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? effectiveSelectedKeys || []\n : effectiveSelectedKey != null\n ? [effectiveSelectedKey]\n : [];\n\n return keysToGet\n .map((key) => {\n const item = collection?.getItem(key);\n return item?.textValue || String(key);\n })\n .filter(Boolean);\n }, [\n selectionMode,\n effectiveSelectedKeys,\n effectiveSelectedKey,\n localCollectionState?.collection,\n ]);\n\n const hasSelection = selectedLabels.length > 0;\n\n // ---------------------------------------------------------------------------\n // Popover lifecycle — all effects moved out of the inline renderTrigger\n // function so they have a stable component identity and don't tear\n // down/setup on every parent re-render.\n // DialogTrigger is controlled via isOpen/onOpenChange.\n // ---------------------------------------------------------------------------\n\n const handleOpenChange = useEvent((isOpen: boolean) => {\n if (isOpen === isPopoverOpen) return;\n\n if (isOpen) {\n // Keep the popover closed when the collection is empty unless an\n // emptyLabel is provided to show in place of results.\n if (localCollectionState.collection.size === 0 && emptyLabel == null) {\n return;\n }\n triggerWidthRef.current =\n triggerRef?.current?.UNSAFE_getDOMNode()?.offsetWidth;\n }\n setIsPopoverOpen(isOpen);\n if (!isOpen) {\n selectionWhenClosed.current = { ...latestSelectionRef.current };\n cachedItemsOrder.current = null;\n }\n onOpenChange?.(isOpen);\n });\n\n // Popover sync is handled by the inner `DialogTrigger` (type=\"popover\").\n\n // Keyboard handler for arrow keys to open popover\n const { keyboardProps } = useKeyboard({\n onKeyDown: (e) => {\n if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !isPopoverOpen) {\n e.preventDefault();\n handleOpenChange(true);\n }\n },\n });\n\n // Clear handler\n const clearValue = useEvent(() => {\n if (selectionMode === 'multiple') {\n if (!isControlledMultiple) {\n setInternalSelectedKeys([]);\n }\n onSelectionChange?.([]);\n } else {\n if (!isControlledSingle) {\n setInternalSelectedKey(null);\n }\n onSelectionChange?.(null);\n }\n\n handleOpenChange(false);\n triggerRef?.current?.focus?.();\n onClear?.();\n\n return false;\n });\n\n // ---------------------------------------------------------------------------\n // Trigger content\n // ---------------------------------------------------------------------------\n\n const triggerContent = useMemo((): ReactNode => {\n if (typeof renderSummary === 'function') {\n if (selectionMode === 'single') {\n return renderSummary({\n selectedLabel: selectedLabels[0],\n selectedKey: effectiveSelectedKey ?? null,\n selectedLabels,\n selectedKeys: effectiveSelectedKeys,\n selectionMode: 'single',\n });\n }\n\n return renderSummary({\n selectedLabels,\n selectedKeys: effectiveSelectedKeys,\n selectionMode: 'multiple',\n });\n } else if (renderSummary === false) {\n return null;\n }\n\n if (!hasSelection) {\n return <Text.Placeholder>{placeholder}</Text.Placeholder>;\n } else if (selectionMode === 'single') {\n return selectedLabels[0] || null;\n } else if (effectiveSelectedKeys === 'all') {\n return selectAllLabel;\n } else {\n return selectedLabels.join(', ') || null;\n }\n }, [\n renderSummary,\n selectionMode,\n selectedLabels,\n effectiveSelectedKey,\n effectiveSelectedKeys,\n hasSelection,\n placeholder,\n selectAllLabel,\n ]);\n\n const showClearButton =\n isClearable && hasSelection && !isDisabled && !props.isReadOnly;\n\n // Trigger element — plain JSX with no hooks.\n const triggerElement = (\n <ItemButton\n ref={triggerRef as any}\n data-popover-trigger\n id={id}\n qa={qa || 'PickerTrigger'}\n type={type}\n theme={validationState === 'invalid' ? 'danger' : theme}\n size={size}\n shape={shape}\n isDisabled={isDisabled || isLoading}\n data-input-type=\"picker\"\n mods={{\n placeholder: !hasSelection,\n ...externalMods,\n }}\n icon={icon}\n rightIcon={\n isLoading ? (\n <LoadingIcon />\n ) : rightIcon !== undefined ? (\n rightIcon\n ) : showClearButton ? (\n <ItemActionProvider\n type={type}\n theme={validationState === 'invalid' ? 'danger' : theme}\n >\n <ItemAction\n icon={<CloseIcon />}\n size={size}\n qa=\"PickerClearButton\"\n mods={{ pressed: false }}\n onPress={clearValue}\n />\n </ItemActionProvider>\n ) : (\n <DirectionIcon to={isPopoverOpen ? 'top' : 'bottom'} />\n )\n }\n prefix={prefix}\n suffix={suffix}\n hotkeys={hotkeys}\n tooltip={triggerTooltip}\n description={triggerDescription}\n descriptionPlacement={descriptionPlacement}\n styles={triggerStyles}\n {...keyboardProps}\n aria-label={`${props['aria-label'] ?? props.label ?? ''}`}\n >\n {triggerContent}\n </ItemButton>\n );\n\n // ---------------------------------------------------------------------------\n // Selection change handler\n // ---------------------------------------------------------------------------\n\n const handleSelectionChange = useEvent((selection: any) => {\n if (selectionMode === 'single') {\n if (!isControlledSingle) {\n setInternalSelectedKey(selection as Key | null);\n }\n } else {\n if (!isControlledMultiple) {\n let normalized: 'all' | Key[] = selection;\n\n if (selection === 'all') {\n normalized = 'all';\n } else if (Array.isArray(selection)) {\n normalized = processSelectionArray(selection);\n } else if (\n selection &&\n typeof selection === 'object' &&\n selection instanceof Set\n ) {\n normalized = processSelectionArray(selection as Set<Key>);\n }\n\n setInternalSelectedKeys(normalized);\n }\n }\n\n if (selectionMode === 'single') {\n latestSelectionRef.current.single =\n selection != null ? String(selection) : null;\n } else {\n if (selection === 'all') {\n latestSelectionRef.current.multiple = [];\n } else if (Array.isArray(selection)) {\n latestSelectionRef.current.multiple = processSelectionArray(selection);\n } else if (\n selection &&\n typeof selection === 'object' &&\n selection instanceof Set\n ) {\n latestSelectionRef.current.multiple = processSelectionArray(\n selection as Set<Key>,\n );\n } else {\n latestSelectionRef.current.multiple = [];\n }\n }\n\n onSelectionChange?.(selection);\n\n if (selectionMode === 'single') {\n handleOpenChange(false);\n }\n });\n\n const handleEscape = useEvent(() => {\n handleOpenChange(false);\n });\n\n const handleOptionClick = useEvent((key: Key) => {\n if ((selectionMode === 'multiple' && isCheckable) || key === '__ALL__') {\n handleOpenChange(false);\n }\n });\n\n const pickerField = (\n <PickerWrapper\n styles={styles}\n {...(filterBaseProps(otherProps, { eventProps: true }) as Record<\n string,\n unknown\n >)}\n >\n <DialogTrigger\n isDismissable\n type=\"popover\"\n placement=\"bottom start\"\n isOpen={isPopoverOpen}\n containerPadding={containerPadding}\n shouldFlip={shouldFlip}\n onOpenChange={handleOpenChange}\n >\n {triggerElement}\n {() => (\n <Dialog\n qa=\"PickerOverlay\"\n display=\"grid\"\n styles={{\n gridRows: '1sf',\n width: 'max($overlay-min-width, 30x) max-content 50vw',\n '$overlay-min-width': '30x',\n ...popoverStyles,\n }}\n style={\n triggerWidthRef.current\n ? ({\n '--overlay-min-width': `${triggerWidthRef.current}px`,\n } as any)\n : undefined\n }\n >\n <FocusScope restoreFocus>\n <ListBox\n autoFocus\n items={items ? (finalItems as typeof props.items) : undefined}\n aria-label={`${props['aria-label'] ?? props.label ?? ''} ${t(\n 'picker.pickerAriaLabel',\n 'Picker',\n )}`}\n selectedKey={\n selectionMode === 'single' ? effectiveSelectedKey : undefined\n }\n selectedKeys={\n selectionMode === 'multiple'\n ? effectiveSelectedKeys\n : undefined\n }\n listStyles={listStyles}\n optionStyles={optionStyles}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n listRef={listRef}\n disallowEmptySelection={disallowEmptySelection}\n disabledKeys={disabledKeys}\n focusOnHover={focusOnHover}\n shouldFocusWrap={shouldFocusWrap}\n selectionMode={selectionMode}\n validationState={validationState}\n isDisabled={isDisabled}\n isLoading={isLoading}\n stateRef={internalListStateRef}\n isCheckable={isCheckable}\n shape=\"popover\"\n size=\"medium\"\n showSelectAll={showSelectAll}\n selectAllLabel={selectAllLabel}\n header={header}\n footer={footer}\n headerStyles={headerStyles}\n footerStyles={footerStyles}\n qa={`${props.qa || 'Picker'}ListBox`}\n allValueProps={allValueProps}\n emptyLabel={emptyLabel}\n onEscape={handleEscape}\n onOptionClick={handleOptionClick}\n onSelectionChange={handleSelectionChange}\n >\n {children as CollectionChildren<T>}\n </ListBox>\n </FocusScope>\n </Dialog>\n )}\n </DialogTrigger>\n </PickerWrapper>\n );\n\n return wrapWithField<Omit<CubePickerProps<T>, 'children' | 'tooltip'>>(\n pickerField,\n ref as any,\n props,\n );\n}) as unknown as (<T>(\n props: CubePickerProps<T> & { ref?: ForwardedRef<HTMLElement> },\n) => ReactElement) & { Item: typeof ListBox.Item; Section: typeof BaseSection };\n\nPicker.Item = ListBox.Item;\n\nPicker.Section = BaseSection;\n\nObject.defineProperty(Picker, 'cubeInputType', {\n value: 'Picker',\n enumerable: false,\n configurable: false,\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"Picker.js","names":["Text","ItemButton","BaseSection"],"sources":["../../../../src/components/fields/Picker/Picker.tsx"],"sourcesContent":["import { CollectionChildren, FocusableRefValue } from '@react-types/shared';\nimport {\n BASE_STYLES,\n BasePropsWithoutChildren,\n BaseStyleProps,\n COLOR_STYLES,\n ColorStyleProps,\n filterBaseProps,\n OUTER_STYLES,\n OuterStyleProps,\n Styles,\n tasty,\n} from '@tenphi/tasty';\nimport {\n ForwardedRef,\n forwardRef,\n MutableRefObject,\n ReactElement,\n ReactNode,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FocusScope, Key, useKeyboard } from 'react-aria';\nimport { Section as BaseSection, ListState, useListState } from 'react-stately';\n\nimport { useEvent } from '../../../_internal';\nimport { useWarn } from '../../../_internal/hooks/use-warn';\nimport { useI18n } from '../../../i18n';\nimport { CloseIcon, DirectionIcon, LoadingIcon } from '../../../icons';\nimport { useProviderProps } from '../../../provider';\nimport { processSelectionArray } from '../../../utils/selection';\nimport { extractStyles } from '../../../utils/styles';\nimport {\n CubeItemButtonProps,\n ItemAction,\n ItemActionProvider,\n ItemButton,\n} from '../../actions';\nimport { CubeItemProps } from '../../content/Item';\nimport { Text } from '../../content/Text';\nimport { useFieldProps, useFormProps, wrapWithField } from '../../form';\nimport { Dialog, DialogTrigger } from '../../overlays/Dialog';\nimport { CubeListBoxProps, ListBox } from '../ListBox/ListBox';\n\nimport type { FieldBaseProps } from '../../../shared';\n\nexport interface CubePickerProps<T>\n extends Omit<\n CubeListBoxProps<T>,\n 'size' | 'tooltip' | 'shape' | 'emptyLabel'\n >,\n Omit<CubeItemProps, 'children' | 'size'>,\n BasePropsWithoutChildren,\n BaseStyleProps,\n OuterStyleProps,\n ColorStyleProps,\n Omit<FieldBaseProps, 'tooltip'>,\n Pick<\n CubeItemButtonProps,\n | 'type'\n | 'theme'\n | 'icon'\n | 'rightIcon'\n | 'prefix'\n | 'suffix'\n | 'hotkeys'\n | 'shape'\n > {\n /** Placeholder text when no selection is made */\n placeholder?: string;\n /** Size of the picker component */\n size?: 'small' | 'medium' | 'large';\n /** Custom styles for the list box popover */\n listBoxStyles?: Styles;\n /** Custom styles for the popover container */\n popoverStyles?: Styles;\n /** Custom styles for the trigger button */\n triggerStyles?: Styles;\n /** Whether to show checkboxes for multiple selection mode */\n isCheckable?: boolean;\n /** Whether to flip the popover placement */\n shouldFlip?: boolean;\n /** Minimum padding in pixels between the popover and viewport edges */\n containerPadding?: number;\n /** Tooltip for the trigger button (separate from field tooltip) */\n triggerTooltip?: CubeItemProps['tooltip'];\n /** Description for the trigger button (separate from field description) */\n triggerDescription?: CubeItemProps['description'];\n\n /**\n * Custom renderer for the summary shown inside the trigger when there is a selection.\n *\n * For `selectionMode=\"multiple\"` the function receives:\n * - `selectedLabels`: array of labels of the selected items.\n * - `selectedKeys`: array of keys of the selected items or \"all\".\n *\n * For `selectionMode=\"single\"` the function receives:\n * - `selectedLabel`: label of the selected item.\n * - `selectedKey`: key of the selected item.\n *\n * The function should return a `ReactNode` that will be rendered inside the trigger.\n * Set to `false` to hide the summary text completely.\n */\n renderSummary?:\n | ((args: {\n selectedLabels?: string[];\n selectedKeys?: 'all' | (string | number)[];\n selectedLabel?: string;\n selectedKey?: string | number | null;\n selectionMode?: 'single' | 'multiple';\n }) => ReactNode)\n | false;\n\n /** Ref to access internal ListBox state */\n listStateRef?: MutableRefObject<ListState<T>>;\n /** Additional modifiers for styling the Picker */\n mods?: Record<string, boolean>;\n /** Whether the picker is clearable using a clear button in the rightIcon slot */\n isClearable?: boolean;\n /** Callback called when the clear button is pressed */\n onClear?: () => void;\n /**\n * Sort selected item(s) to the top when the popover opens.\n * Only works when using the `items` prop (data-driven mode).\n * Supports both single and multiple selection modes.\n * @default true when items are provided, false when using JSX children\n */\n sortSelectedToTop?: boolean;\n /** Callback called when the popover open state changes */\n onOpenChange?: (isOpen: boolean) => void;\n}\n\nconst PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];\n\nconst PickerWrapper = tasty({\n qa: 'PickerWrapper',\n styles: {\n display: 'inline-grid',\n flow: 'column',\n gridRows: '1sf',\n placeContent: 'stretch',\n placeItems: 'stretch',\n },\n});\n\nexport const Picker = forwardRef(function Picker<T extends object>(\n props: CubePickerProps<T>,\n ref: ForwardedRef<HTMLElement>,\n) {\n const { t } = useI18n();\n\n props = useProviderProps(props);\n props = useFormProps(props);\n props = useFieldProps(props, {\n valuePropsMapper: ({ value, onChange }) => {\n const fieldProps: Record<string, unknown> = {};\n\n if (props.selectionMode === 'multiple') {\n fieldProps.selectedKeys = value || [];\n } else {\n fieldProps.selectedKey = value ?? null;\n }\n\n fieldProps.onSelectionChange = (key: Key | null | 'all' | Key[]) => {\n if (props.selectionMode === 'multiple') {\n // Handle \"all\" selection and array selections\n if (key === 'all') {\n onChange('all');\n } else {\n onChange(key ? (Array.isArray(key) ? key : [key]) : []);\n }\n } else {\n onChange(Array.isArray(key) ? key[0] : key);\n }\n };\n\n return fieldProps;\n },\n });\n\n let {\n id,\n qa,\n label,\n extra,\n icon,\n rightIcon,\n prefix,\n suffix,\n hotkeys,\n triggerTooltip,\n triggerDescription,\n labelStyles,\n isRequired,\n necessityIndicator,\n validationState,\n isDisabled,\n isLoading,\n message,\n mods: externalMods,\n description,\n descriptionPlacement,\n placeholder,\n size = 'medium',\n styles,\n listBoxStyles,\n popoverStyles,\n type = 'outline',\n theme = 'default',\n shape,\n labelSuffix,\n shouldFocusWrap,\n children,\n shouldFlip = true,\n containerPadding = 8,\n selectedKey,\n defaultSelectedKey,\n selectedKeys,\n defaultSelectedKeys,\n disabledKeys,\n onSelectionChange,\n selectionMode = 'single',\n listStateRef,\n focusOnHover,\n showSelectAll,\n selectAllLabel = t('picker.all', 'All'),\n items,\n header,\n footer,\n headerStyles,\n footerStyles,\n triggerStyles,\n renderSummary,\n isCheckable,\n allValueProps,\n listStyles,\n optionStyles,\n sectionStyles,\n headingStyles,\n listRef,\n disallowEmptySelection,\n shouldUseVirtualFocus,\n onEscape,\n onOptionClick,\n isClearable,\n onClear,\n sortSelectedToTop,\n onOpenChange,\n listStateRef: externalListStateRef,\n ...otherProps\n } = props;\n\n styles = extractStyles(otherProps, PROP_STYLES, styles);\n\n // Warn if isCheckable is false in single selection mode\n useWarn(isCheckable === false && selectionMode === 'single', {\n key: ['picker-checkable-single-mode'],\n args: [\n 'CubeUIKit: isCheckable=false is not recommended in single selection mode as it may confuse users about selection behavior.',\n ],\n });\n\n // Internal selection state (uncontrolled scenario)\n const [internalSelectedKey, setInternalSelectedKey] = useState<Key | null>(\n defaultSelectedKey ?? null,\n );\n const [internalSelectedKeys, setInternalSelectedKeys] = useState<\n 'all' | Key[]\n >(defaultSelectedKeys ?? []);\n\n // Popover state — used as controlled prop for DialogTrigger\n const [isPopoverOpen, setIsPopoverOpen] = useState(false);\n const triggerRef = useRef<FocusableRefValue<HTMLButtonElement>>(null);\n // Measured lazily on popover open instead of on every render\n const triggerWidthRef = useRef<number | undefined>(undefined);\n\n const isControlledSingle = selectedKey !== undefined;\n const isControlledMultiple = selectedKeys !== undefined;\n\n const effectiveSelectedKey = isControlledSingle\n ? selectedKey\n : internalSelectedKey;\n const effectiveSelectedKeys = isControlledMultiple\n ? selectedKeys\n : internalSelectedKeys;\n\n // Ref to access internal ListBox state for collection API\n const internalListStateRef = useRef<ListState<T>>(null);\n\n // Sync internal ref with external ref if provided\n useEffect(() => {\n if (externalListStateRef && internalListStateRef.current) {\n externalListStateRef.current = internalListStateRef.current;\n }\n }, [externalListStateRef]);\n\n // Cache for sorted items array when using `items` prop\n const cachedItemsOrder = useRef<T[] | null>(null);\n\n const latestSelectionRef = useRef<{\n single: string | null;\n multiple: string[];\n }>({\n single: effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map(String)\n : [],\n });\n\n useEffect(() => {\n latestSelectionRef.current = {\n single:\n effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map(String)\n : [],\n };\n }, [effectiveSelectedKey, effectiveSelectedKeys, selectionMode]);\n\n const selectionWhenClosed = useRef<{\n single: string | null;\n multiple: string[];\n }>({ single: null, multiple: [] });\n\n const sortSelectedToTopExplicit = sortSelectedToTop !== undefined;\n const shouldSortSelectedToTop = sortSelectedToTop ?? (items ? true : false);\n\n useWarn(sortSelectedToTopExplicit && shouldSortSelectedToTop && !items, {\n key: ['picker-sort-selected-to-top-children'],\n args: [\n 'Picker: sortSelectedToTop only works with the items prop. Sorting will be skipped when using JSX children.',\n ],\n });\n\n useEffect(() => {\n cachedItemsOrder.current = null;\n }, [items]);\n\n useEffect(() => {\n if (!isPopoverOpen) {\n selectionWhenClosed.current = {\n single:\n effectiveSelectedKey != null ? String(effectiveSelectedKey) : null,\n multiple:\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? (effectiveSelectedKeys || []).map(String)\n : [],\n };\n }\n }, [\n effectiveSelectedKey,\n effectiveSelectedKeys,\n isPopoverOpen,\n selectionMode,\n ]);\n\n const finalItems = useMemo(() => {\n if (!items || !shouldSortSelectedToTop) return items;\n if (!isPopoverOpen) return items;\n if (cachedItemsOrder.current) return cachedItemsOrder.current;\n\n const selectedKeySet = new Set<string>();\n\n if (selectionMode === 'multiple') {\n if (\n selectionWhenClosed.current.multiple.length === 0 ||\n effectiveSelectedKeys === 'all'\n ) {\n return items;\n }\n selectionWhenClosed.current.multiple.forEach((k) =>\n selectedKeySet.add(k),\n );\n } else if (selectionWhenClosed.current.single) {\n selectedKeySet.add(selectionWhenClosed.current.single);\n }\n\n if (selectedKeySet.size === 0) return items;\n\n const itemsArray = Array.isArray(items) ? items : Array.from(items);\n const selectedItems: T[] = [];\n const unselectedItems: T[] = [];\n\n itemsArray.forEach((item) => {\n const key = (item as any)?.key ?? (item as any)?.id;\n if (key != null && selectedKeySet.has(String(key))) {\n selectedItems.push(item);\n } else {\n unselectedItems.push(item);\n }\n });\n\n const sorted = [...selectedItems, ...unselectedItems];\n\n cachedItemsOrder.current = sorted;\n\n return sorted;\n }, [items, shouldSortSelectedToTop, selectionMode, isPopoverOpen]);\n\n // Create local collection state for reading item data (labels, etc.)\n // This allows us to read item labels even before the popover opens\n const localCollectionState = useListState({\n children,\n items: finalItems, // Use sorted items to match what's shown in popover\n selectionMode: 'none', // Don't manage selection in this state\n });\n\n const selectedLabels = useMemo(() => {\n const collection = localCollectionState?.collection;\n\n if (selectionMode === 'multiple' && effectiveSelectedKeys === 'all') {\n if (!collection) return [];\n const labels: string[] = [];\n for (const item of collection) {\n if (item.type === 'item') {\n labels.push(item.textValue || String(item.key));\n }\n }\n return labels;\n }\n\n const keysToGet =\n selectionMode === 'multiple' && effectiveSelectedKeys !== 'all'\n ? effectiveSelectedKeys || []\n : effectiveSelectedKey != null\n ? [effectiveSelectedKey]\n : [];\n\n return keysToGet\n .map((key) => {\n const item = collection?.getItem(key);\n return item?.textValue || String(key);\n })\n .filter(Boolean);\n }, [\n selectionMode,\n effectiveSelectedKeys,\n effectiveSelectedKey,\n localCollectionState?.collection,\n ]);\n\n const hasSelection = selectedLabels.length > 0;\n\n // ---------------------------------------------------------------------------\n // Popover lifecycle — all effects moved out of the inline renderTrigger\n // function so they have a stable component identity and don't tear\n // down/setup on every parent re-render.\n // DialogTrigger is controlled via isOpen/onOpenChange.\n // ---------------------------------------------------------------------------\n\n const handleOpenChange = useEvent((isOpen: boolean) => {\n if (isOpen === isPopoverOpen) return;\n\n if (isOpen) {\n triggerWidthRef.current =\n triggerRef?.current?.UNSAFE_getDOMNode()?.offsetWidth;\n }\n setIsPopoverOpen(isOpen);\n if (!isOpen) {\n selectionWhenClosed.current = { ...latestSelectionRef.current };\n cachedItemsOrder.current = null;\n }\n onOpenChange?.(isOpen);\n });\n\n // Popover sync is handled by the inner `DialogTrigger` (type=\"popover\").\n\n // Keyboard handler for arrow keys to open popover\n const { keyboardProps } = useKeyboard({\n onKeyDown: (e) => {\n if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !isPopoverOpen) {\n e.preventDefault();\n handleOpenChange(true);\n }\n },\n });\n\n // Clear handler\n const clearValue = useEvent(() => {\n if (selectionMode === 'multiple') {\n if (!isControlledMultiple) {\n setInternalSelectedKeys([]);\n }\n onSelectionChange?.([]);\n } else {\n if (!isControlledSingle) {\n setInternalSelectedKey(null);\n }\n onSelectionChange?.(null);\n }\n\n handleOpenChange(false);\n triggerRef?.current?.focus?.();\n onClear?.();\n\n return false;\n });\n\n // ---------------------------------------------------------------------------\n // Trigger content\n // ---------------------------------------------------------------------------\n\n const triggerContent = useMemo((): ReactNode => {\n if (typeof renderSummary === 'function') {\n if (selectionMode === 'single') {\n return renderSummary({\n selectedLabel: selectedLabels[0],\n selectedKey: effectiveSelectedKey ?? null,\n selectedLabels,\n selectedKeys: effectiveSelectedKeys,\n selectionMode: 'single',\n });\n }\n\n return renderSummary({\n selectedLabels,\n selectedKeys: effectiveSelectedKeys,\n selectionMode: 'multiple',\n });\n } else if (renderSummary === false) {\n return null;\n }\n\n if (!hasSelection) {\n return <Text.Placeholder>{placeholder}</Text.Placeholder>;\n } else if (selectionMode === 'single') {\n return selectedLabels[0] || null;\n } else if (effectiveSelectedKeys === 'all') {\n return selectAllLabel;\n } else {\n return selectedLabels.join(', ') || null;\n }\n }, [\n renderSummary,\n selectionMode,\n selectedLabels,\n effectiveSelectedKey,\n effectiveSelectedKeys,\n hasSelection,\n placeholder,\n selectAllLabel,\n ]);\n\n const showClearButton =\n isClearable && hasSelection && !isDisabled && !props.isReadOnly;\n\n // Trigger element — plain JSX with no hooks.\n const triggerElement = (\n <ItemButton\n ref={triggerRef as any}\n data-popover-trigger\n id={id}\n qa={qa || 'PickerTrigger'}\n type={type}\n theme={validationState === 'invalid' ? 'danger' : theme}\n size={size}\n shape={shape}\n isDisabled={isDisabled || isLoading}\n data-input-type=\"picker\"\n mods={{\n placeholder: !hasSelection,\n ...externalMods,\n }}\n icon={icon}\n rightIcon={\n isLoading ? (\n <LoadingIcon />\n ) : rightIcon !== undefined ? (\n rightIcon\n ) : showClearButton ? (\n <ItemActionProvider\n type={type}\n theme={validationState === 'invalid' ? 'danger' : theme}\n >\n <ItemAction\n icon={<CloseIcon />}\n size={size}\n qa=\"PickerClearButton\"\n mods={{ pressed: false }}\n onPress={clearValue}\n />\n </ItemActionProvider>\n ) : (\n <DirectionIcon to={isPopoverOpen ? 'top' : 'bottom'} />\n )\n }\n prefix={prefix}\n suffix={suffix}\n hotkeys={hotkeys}\n tooltip={triggerTooltip}\n description={triggerDescription}\n descriptionPlacement={descriptionPlacement}\n styles={triggerStyles}\n {...keyboardProps}\n aria-label={`${props['aria-label'] ?? props.label ?? ''}`}\n >\n {triggerContent}\n </ItemButton>\n );\n\n // ---------------------------------------------------------------------------\n // Selection change handler\n // ---------------------------------------------------------------------------\n\n const handleSelectionChange = useEvent((selection: any) => {\n if (selectionMode === 'single') {\n if (!isControlledSingle) {\n setInternalSelectedKey(selection as Key | null);\n }\n } else {\n if (!isControlledMultiple) {\n let normalized: 'all' | Key[] = selection;\n\n if (selection === 'all') {\n normalized = 'all';\n } else if (Array.isArray(selection)) {\n normalized = processSelectionArray(selection);\n } else if (\n selection &&\n typeof selection === 'object' &&\n selection instanceof Set\n ) {\n normalized = processSelectionArray(selection as Set<Key>);\n }\n\n setInternalSelectedKeys(normalized);\n }\n }\n\n if (selectionMode === 'single') {\n latestSelectionRef.current.single =\n selection != null ? String(selection) : null;\n } else {\n if (selection === 'all') {\n latestSelectionRef.current.multiple = [];\n } else if (Array.isArray(selection)) {\n latestSelectionRef.current.multiple = processSelectionArray(selection);\n } else if (\n selection &&\n typeof selection === 'object' &&\n selection instanceof Set\n ) {\n latestSelectionRef.current.multiple = processSelectionArray(\n selection as Set<Key>,\n );\n } else {\n latestSelectionRef.current.multiple = [];\n }\n }\n\n onSelectionChange?.(selection);\n\n if (selectionMode === 'single') {\n handleOpenChange(false);\n }\n });\n\n const handleEscape = useEvent(() => {\n handleOpenChange(false);\n });\n\n const handleOptionClick = useEvent((key: Key) => {\n if ((selectionMode === 'multiple' && isCheckable) || key === '__ALL__') {\n handleOpenChange(false);\n }\n });\n\n const pickerField = (\n <PickerWrapper\n styles={styles}\n {...(filterBaseProps(otherProps, { eventProps: true }) as Record<\n string,\n unknown\n >)}\n >\n <DialogTrigger\n isDismissable\n type=\"popover\"\n placement=\"bottom start\"\n isOpen={isPopoverOpen}\n containerPadding={containerPadding}\n shouldFlip={shouldFlip}\n onOpenChange={handleOpenChange}\n >\n {triggerElement}\n {() => (\n <Dialog\n qa=\"PickerOverlay\"\n display=\"grid\"\n styles={{\n gridRows: '1sf',\n width: 'max($overlay-min-width, 30x) max-content 50vw',\n '$overlay-min-width': '30x',\n ...popoverStyles,\n }}\n style={\n triggerWidthRef.current\n ? ({\n '--overlay-min-width': `${triggerWidthRef.current}px`,\n } as any)\n : undefined\n }\n >\n <FocusScope restoreFocus>\n <ListBox\n autoFocus\n items={items ? (finalItems as typeof props.items) : undefined}\n aria-label={`${props['aria-label'] ?? props.label ?? ''} ${t(\n 'picker.pickerAriaLabel',\n 'Picker',\n )}`}\n selectedKey={\n selectionMode === 'single' ? effectiveSelectedKey : undefined\n }\n selectedKeys={\n selectionMode === 'multiple'\n ? effectiveSelectedKeys\n : undefined\n }\n listStyles={listStyles}\n optionStyles={optionStyles}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n listRef={listRef}\n disallowEmptySelection={disallowEmptySelection}\n disabledKeys={disabledKeys}\n focusOnHover={focusOnHover}\n shouldFocusWrap={shouldFocusWrap}\n selectionMode={selectionMode}\n validationState={validationState}\n isDisabled={isDisabled}\n isLoading={isLoading}\n stateRef={internalListStateRef}\n isCheckable={isCheckable}\n shape=\"popover\"\n size=\"medium\"\n showSelectAll={showSelectAll}\n selectAllLabel={selectAllLabel}\n header={header}\n footer={footer}\n headerStyles={headerStyles}\n footerStyles={footerStyles}\n qa={`${props.qa || 'Picker'}ListBox`}\n allValueProps={allValueProps}\n onEscape={handleEscape}\n onOptionClick={handleOptionClick}\n onSelectionChange={handleSelectionChange}\n >\n {children as CollectionChildren<T>}\n </ListBox>\n </FocusScope>\n </Dialog>\n )}\n </DialogTrigger>\n </PickerWrapper>\n );\n\n return wrapWithField<Omit<CubePickerProps<T>, 'children' | 'tooltip'>>(\n pickerField,\n ref as any,\n props,\n );\n}) as unknown as (<T>(\n props: CubePickerProps<T> & { ref?: ForwardedRef<HTMLElement> },\n) => ReactElement) & { Item: typeof ListBox.Item; Section: typeof BaseSection };\n\nPicker.Item = ListBox.Item;\n\nPicker.Section = BaseSection;\n\nObject.defineProperty(Picker, 'cubeInputType', {\n value: 'Picker',\n enumerable: false,\n configurable: false,\n});\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useProviderProps } from "../../../provider.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
 
4
4
  //#region src/components/fields/RadioGroup/context.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { useProviderProps } from "../../../provider.js";
4
4
  import { ItemAction } from "../../actions/ItemAction/ItemAction.js";
@@ -81,12 +81,6 @@ interface CubeSelectBaseProps<T> extends BasePropsWithoutChildren, AriaLabelingP
81
81
  onClear?: () => void;
82
82
  /** Callback called when the popover open state changes */
83
83
  onOpenChange?: (isOpen: boolean) => void;
84
- /**
85
- * Label shown when the option list is empty.
86
- * When provided, the popover stays open and displays this message.
87
- * When omitted, the popover does not open for an empty collection.
88
- */
89
- emptyLabel?: ReactNode;
90
84
  }
91
85
  interface CubeSelectProps<T> extends CubeSelectBaseProps<T> {
92
86
  popoverRef?: RefObject<HTMLInputElement>;
@@ -109,7 +103,6 @@ declare function ListBoxPopup({
109
103
  size,
110
104
  triggerRef,
111
105
  isDisabled,
112
- emptyLabel,
113
106
  ...otherProps
114
107
  }: {
115
108
  [x: string]: any;
@@ -126,7 +119,6 @@ declare function ListBoxPopup({
126
119
  size?: string | undefined;
127
120
  triggerRef: any;
128
121
  isDisabled: any;
129
- emptyLabel: any;
130
122
  }): react_jsx_runtime0.JSX.Element;
131
123
  type SectionComponent = typeof Section;
132
124
  declare const SelectSectionComponent: SectionComponent;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-80e87ad | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-db51992 | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { forwardRefWithGenerics } from "../../../utils/react/forwardRefWithGenerics.js";
4
4
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
@@ -128,22 +128,12 @@ function Select(props, ref) {
128
128
  onSelectionChange: onChange
129
129
  })
130
130
  });
131
- let { qa, label, extra, icon, rightIcon, labelStyles, isRequired, necessityIndicator, validationState, prefix, isDisabled = props.isLoading || false, autoFocus, inputProps, triggerRef, popoverRef, listBoxRef, isLoading, loadingIndicator, overlayOffset = 8, inputStyles, triggerStyles, optionStyles, listBoxStyles, overlayStyles, suffix, message, triggerDescription, descriptionPlacement, hotkeys, direction = "bottom", shouldFlip = true, containerPadding = 8, placeholder, tooltip, size = "medium", shape, styles, type = "outline", theme = "default", labelSuffix, suffixPosition = "before", isClearable, onOpenChange, emptyLabel, form, ...otherProps } = props;
132
- let state = useSelectState({
133
- ...props,
134
- allowsEmptyCollection: emptyLabel != null
135
- });
131
+ let { qa, label, extra, icon, rightIcon, labelStyles, isRequired, necessityIndicator, validationState, prefix, isDisabled = props.isLoading || false, autoFocus, inputProps, triggerRef, popoverRef, listBoxRef, isLoading, loadingIndicator, overlayOffset = 8, inputStyles, triggerStyles, optionStyles, listBoxStyles, overlayStyles, suffix, message, triggerDescription, descriptionPlacement, hotkeys, direction = "bottom", shouldFlip = true, containerPadding = 8, placeholder, tooltip, size = "medium", shape, styles, type = "outline", theme = "default", labelSuffix, suffixPosition = "before", isClearable, onOpenChange, form, ...otherProps } = props;
132
+ let state = useSelectState(props);
136
133
  const selectId = useMemo(() => generateRandomId(), []);
137
134
  useEffect(() => {
138
135
  onOpenChange?.(state.isOpen);
139
136
  }, [state.isOpen]);
140
- useEffect(() => {
141
- if (state.isOpen && state.collection.size === 0 && emptyLabel == null) state.close();
142
- }, [
143
- state.isOpen,
144
- state.collection.size,
145
- emptyLabel
146
- ]);
147
137
  styles = extractStyles(otherProps, PROP_STYLES, styles);
148
138
  ref = useCombinedRefs(ref);
149
139
  triggerRef = useCombinedRefs(triggerRef);
@@ -273,24 +263,21 @@ function Select(props, ref) {
273
263
  optionStyles,
274
264
  minWidth: triggerWidth,
275
265
  triggerRef,
276
- isDisabled,
277
- emptyLabel
266
+ isDisabled
278
267
  })
279
268
  ]
280
269
  }), ref, mergeProps$1({ ...props }, { labelProps }));
281
270
  }
282
- function ListBoxPopup({ state, popoverRef, listBoxRef, listBoxStyles, overlayStyles, optionStyles, overlayProps: parentOverlayProps, shouldUseVirtualFocus = false, placement, minWidth, size = "small", triggerRef, isDisabled, emptyLabel, ...otherProps }) {
271
+ function ListBoxPopup({ state, popoverRef, listBoxRef, listBoxStyles, overlayStyles, optionStyles, overlayProps: parentOverlayProps, shouldUseVirtualFocus = false, placement, minWidth, size = "small", triggerRef, isDisabled, ...otherProps }) {
283
272
  const listItemSize = size === "small" ? "medium" : size;
284
- const isCollectionEmpty = state.collection.size === 0;
285
- const shouldShowOverlay = state.isOpen && !isDisabled && (!isCollectionEmpty || emptyLabel != null);
286
273
  let { listBoxProps } = useListBox({
287
- autoFocus: isCollectionEmpty ? false : state.focusStrategy || true,
274
+ autoFocus: state.focusStrategy || true,
288
275
  shouldUseVirtualFocus,
289
276
  ...otherProps
290
277
  }, state, listBoxRef);
291
278
  let { overlayProps } = useOverlay({
292
279
  onClose: () => state.close(),
293
- shouldCloseOnBlur: !isCollectionEmpty,
280
+ shouldCloseOnBlur: true,
294
281
  isOpen: state.isOpen,
295
282
  isDismissable: true,
296
283
  shouldCloseOnInteractOutside: (el) => {
@@ -303,14 +290,13 @@ function ListBoxPopup({ state, popoverRef, listBoxRef, listBoxStyles, overlaySty
303
290
  }
304
291
  return true;
305
292
  }
306
- if (isCollectionEmpty) return false;
307
293
  if (menuTriggerEl === triggerRef?.current) return true;
308
294
  return false;
309
295
  }
310
296
  }, popoverRef);
311
297
  const placementDirection = placement?.split(" ")[0] || "bottom";
312
298
  return /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(DisplayTransition, {
313
- isShown: shouldShowOverlay,
299
+ isShown: state.isOpen && !isDisabled,
314
300
  children: ({ phase, isShown, ref: transitionRef }) => /* @__PURE__ */ jsx(SelectOverlayWrapper, {
315
301
  ...overlayProps,
316
302
  ...parentOverlayProps,
@@ -324,17 +310,11 @@ function ListBoxPopup({ state, popoverRef, listBoxRef, listBoxStyles, overlaySty
324
310
  styles: overlayStyles,
325
311
  style: { "--overlay-min-width": minWidth ? `${minWidth}px` : "initial" },
326
312
  children: /* @__PURE__ */ jsxs(FocusScope, {
327
- autoFocus: !isCollectionEmpty,
313
+ autoFocus: true,
328
314
  restoreFocus: true,
329
315
  children: [
330
316
  /* @__PURE__ */ jsx(DismissButton, { onDismiss: () => state.close() }),
331
- isCollectionEmpty ? /* @__PURE__ */ jsx(_Item, {
332
- preset: "t4",
333
- color: "#dark-03",
334
- size: listItemSize,
335
- padding: "(.5x - 1bw)",
336
- children: emptyLabel
337
- }) : (() => {
317
+ (() => {
338
318
  const renderedItems = [];
339
319
  let isFirstSection = true;
340
320
  for (const item of state.collection) if (item.type === "section") {