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

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 (507) hide show
  1. package/es/_internal/hooks/index.js +1 -1
  2. package/es/_internal/hooks/use-chained-callback.js +1 -1
  3. package/es/_internal/hooks/use-debounced-value.js +1 -1
  4. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/es/_internal/hooks/use-effect-once.js +1 -1
  6. package/es/_internal/hooks/use-event.js +1 -1
  7. package/es/_internal/hooks/use-is-first-render.js +1 -1
  8. package/es/_internal/hooks/use-sync-ref.js +1 -1
  9. package/es/_internal/hooks/use-timer/index.js +1 -1
  10. package/es/_internal/hooks/use-timer/timer.js +1 -1
  11. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  12. package/es/_internal/hooks/use-update-effect.js +1 -1
  13. package/es/_internal/hooks/use-warn.js +1 -1
  14. package/es/_internal/index.js +1 -1
  15. package/es/components/Block.js +1 -1
  16. package/es/components/GlobalStyles.js +1 -1
  17. package/es/components/GridProvider.js +1 -1
  18. package/es/components/HiddenInput.js +1 -1
  19. package/es/components/Item.js +1 -1
  20. package/es/components/OpenTrasition.js +1 -1
  21. package/es/components/Root.js +1 -1
  22. package/es/components/actions/Action/Action.js +1 -1
  23. package/es/components/actions/Button/Button.js +1 -1
  24. package/es/components/actions/Button/index.js +1 -1
  25. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  26. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  27. package/es/components/actions/CommandMenu/index.js +1 -1
  28. package/es/components/actions/CommandMenu/styled.js +1 -1
  29. package/es/components/actions/ItemAction/ItemAction.js +1 -1
  30. package/es/components/actions/ItemAction/index.js +1 -1
  31. package/es/components/actions/ItemButton/ItemButton.js +1 -1
  32. package/es/components/actions/ItemButton/index.js +1 -1
  33. package/es/components/actions/Link/Link.js +1 -1
  34. package/es/components/actions/Menu/Menu.js +1 -1
  35. package/es/components/actions/Menu/MenuItem.js +1 -1
  36. package/es/components/actions/Menu/MenuSection.js +1 -1
  37. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  38. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  39. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  40. package/es/components/actions/Menu/context.js +1 -1
  41. package/es/components/actions/Menu/index.js +1 -1
  42. package/es/components/actions/Menu/styled.js +1 -1
  43. package/es/components/actions/index.js +1 -1
  44. package/es/components/actions/use-action.js +1 -1
  45. package/es/components/actions/use-anchored-menu.js +1 -1
  46. package/es/components/actions/use-context-menu.js +1 -1
  47. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  48. package/es/components/content/Alert/Alert.js +1 -1
  49. package/es/components/content/Alert/index.js +1 -1
  50. package/es/components/content/Alert/types.js +1 -1
  51. package/es/components/content/Alert/use-alert.js +1 -1
  52. package/es/components/content/Avatar/Avatar.js +1 -1
  53. package/es/components/content/Badge/Badge.js +1 -1
  54. package/es/components/content/Card/Card.js +1 -1
  55. package/es/components/content/Content.js +1 -1
  56. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  57. package/es/components/content/CopyPasteBlock/index.js +1 -1
  58. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  59. package/es/components/content/CopySnippet/index.js +1 -1
  60. package/es/components/content/Divider.js +1 -1
  61. package/es/components/content/Footer.js +1 -1
  62. package/es/components/content/Header.js +1 -1
  63. package/es/components/content/HotKeys/HotKeys.js +1 -1
  64. package/es/components/content/HotKeys/index.js +1 -1
  65. package/es/components/content/ItemBase/ItemBase.js +1 -1
  66. package/es/components/content/ItemBase/index.js +1 -1
  67. package/es/components/content/List/SectionHeading.js +1 -1
  68. package/es/components/content/List/index.js +1 -1
  69. package/es/components/content/Paragraph.js +1 -1
  70. package/es/components/content/Placeholder/Placeholder.js +1 -1
  71. package/es/components/content/PrismCode/PrismCode.js +1 -1
  72. package/es/components/content/PrismCode/prismSetup.js +1 -1
  73. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  74. package/es/components/content/Result/Result.js +1 -1
  75. package/es/components/content/Skeleton/Skeleton.js +1 -1
  76. package/es/components/content/Tag/Tag.js +1 -1
  77. package/es/components/content/Text.js +1 -1
  78. package/es/components/content/Title.js +1 -1
  79. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  80. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  81. package/es/components/fields/Checkbox/context.js +1 -1
  82. package/es/components/fields/Checkbox/index.js +1 -1
  83. package/es/components/fields/ComboBox/ComboBox.js +566 -145
  84. package/es/components/fields/ComboBox/index.js +2 -2
  85. package/es/components/fields/DatePicker/DateInput.js +1 -1
  86. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  87. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  88. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  89. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  90. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  91. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  92. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  93. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  94. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  95. package/es/components/fields/DatePicker/index.js +1 -1
  96. package/es/components/fields/DatePicker/intl.js +1 -1
  97. package/es/components/fields/DatePicker/parseDate.js +1 -1
  98. package/es/components/fields/DatePicker/props.js +1 -1
  99. package/es/components/fields/DatePicker/types.js +1 -1
  100. package/es/components/fields/DatePicker/utils.js +1 -1
  101. package/es/components/fields/FileInput/FileInput.js +1 -1
  102. package/es/components/fields/FilterListBox/FilterListBox.js +20 -8
  103. package/es/components/fields/FilterListBox/index.js +1 -1
  104. package/es/components/fields/FilterPicker/FilterPicker.js +4 -4
  105. package/es/components/fields/FilterPicker/index.js +1 -1
  106. package/es/components/fields/Input/Input.js +1 -1
  107. package/es/components/fields/Input/index.js +1 -1
  108. package/es/components/fields/LegacyComboBox/LegacyComboBox.js +290 -0
  109. package/es/components/fields/{Picker → LegacyComboBox}/index.js +2 -2
  110. package/es/components/fields/ListBox/ListBox.js +22 -4
  111. package/es/components/fields/ListBox/index.js +1 -1
  112. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  113. package/es/components/fields/NumberInput/StepButton.js +1 -1
  114. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  115. package/es/components/fields/RadioGroup/Radio.js +1 -1
  116. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  117. package/es/components/fields/RadioGroup/context.js +1 -1
  118. package/es/components/fields/RadioGroup/index.js +1 -1
  119. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  120. package/es/components/fields/SearchInput/index.js +1 -1
  121. package/es/components/fields/Select/Select.js +1 -1
  122. package/es/components/fields/Select/index.js +1 -1
  123. package/es/components/fields/Slider/Gradation.js +1 -1
  124. package/es/components/fields/Slider/Header.js +1 -1
  125. package/es/components/fields/Slider/RangeSlider.js +1 -1
  126. package/es/components/fields/Slider/Slider.js +1 -1
  127. package/es/components/fields/Slider/SliderBase.js +1 -1
  128. package/es/components/fields/Slider/SliderInput.js +1 -1
  129. package/es/components/fields/Slider/SliderThumb.js +1 -1
  130. package/es/components/fields/Slider/SliderTrack.js +1 -1
  131. package/es/components/fields/Slider/elements.js +1 -1
  132. package/es/components/fields/Slider/index.js +1 -1
  133. package/es/components/fields/Slider/types.js +1 -1
  134. package/es/components/fields/Switch/Switch.js +1 -1
  135. package/es/components/fields/Switch/index.js +1 -1
  136. package/es/components/fields/TextArea/TextArea.js +1 -1
  137. package/es/components/fields/TextArea/index.js +1 -1
  138. package/es/components/fields/TextInput/TextInput.js +1 -1
  139. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  140. package/es/components/fields/TextInput/index.js +1 -1
  141. package/es/components/fields/TextInputMapper/TextInputMapper.js +3 -3
  142. package/es/components/fields/TextInputMapper/index.js +1 -1
  143. package/es/components/fields/index.js +2 -2
  144. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  145. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  146. package/es/components/form/FieldWrapper/index.js +1 -1
  147. package/es/components/form/FieldWrapper/types.js +1 -1
  148. package/es/components/form/Form/Field.js +1 -1
  149. package/es/components/form/Form/Form.js +1 -1
  150. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  151. package/es/components/form/Form/ResetButton/index.js +1 -1
  152. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  153. package/es/components/form/Form/SubmitButton/index.js +1 -1
  154. package/es/components/form/Form/SubmitError.js +1 -1
  155. package/es/components/form/Form/index.js +1 -1
  156. package/es/components/form/Form/types.js +1 -1
  157. package/es/components/form/Form/use-field/index.js +1 -1
  158. package/es/components/form/Form/use-field/types.js +1 -1
  159. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  160. package/es/components/form/Form/use-field/use-field.js +1 -1
  161. package/es/components/form/Form/use-form.js +1 -1
  162. package/es/components/form/Form/validation.js +1 -1
  163. package/es/components/form/Label.js +1 -1
  164. package/es/components/form/index.js +1 -1
  165. package/es/components/form/wrapper.js +1 -1
  166. package/es/components/layout/Flex.js +1 -1
  167. package/es/components/layout/Flow.js +1 -1
  168. package/es/components/layout/Grid.js +1 -1
  169. package/es/components/layout/Panel.js +1 -1
  170. package/es/components/layout/Prefix.js +1 -1
  171. package/es/components/layout/ResizablePanel.js +1 -1
  172. package/es/components/layout/Space.js +1 -1
  173. package/es/components/layout/Suffix.js +1 -1
  174. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  175. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  176. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  177. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  178. package/es/components/other/Calendar/Calendar.js +1 -1
  179. package/es/components/other/Calendar/CalendarCell.js +1 -1
  180. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  181. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  182. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  183. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  184. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  185. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  186. package/es/components/overlays/AlertDialog/index.js +1 -1
  187. package/es/components/overlays/AlertDialog/types.js +1 -1
  188. package/es/components/overlays/Dialog/Dialog.js +1 -1
  189. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  190. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  191. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  192. package/es/components/overlays/Dialog/context.js +1 -1
  193. package/es/components/overlays/Dialog/index.js +1 -1
  194. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  195. package/es/components/overlays/Modal/Modal.js +1 -1
  196. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  197. package/es/components/overlays/Modal/Overlay.js +1 -1
  198. package/es/components/overlays/Modal/Popover.js +1 -1
  199. package/es/components/overlays/Modal/Tray.js +1 -1
  200. package/es/components/overlays/Modal/Underlay.js +1 -1
  201. package/es/components/overlays/Modal/index.js +1 -1
  202. package/es/components/overlays/Modal/types.js +1 -1
  203. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  204. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  205. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  206. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  207. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
  208. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  209. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  210. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  211. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  212. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  213. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  214. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  215. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  216. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  217. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  218. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  219. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  220. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  221. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  222. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  223. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  224. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  225. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  226. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  227. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  228. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  229. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  230. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  231. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  232. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  233. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  234. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  235. package/es/components/overlays/NewNotifications/index.js +1 -1
  236. package/es/components/overlays/NewNotifications/types.js +1 -1
  237. package/es/components/overlays/Notification/Notification.js +1 -1
  238. package/es/components/overlays/OverlayWrapper.js +1 -1
  239. package/es/components/overlays/Toasts/Toast.js +1 -1
  240. package/es/components/overlays/Toasts/index.js +1 -1
  241. package/es/components/overlays/Toasts/types.js +1 -1
  242. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  243. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  244. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  245. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  246. package/es/components/overlays/Tooltip/context.js +1 -1
  247. package/es/components/overlays/Tooltip/index.js +1 -1
  248. package/es/components/portal/Portal.js +1 -1
  249. package/es/components/portal/PortalProvider.js +1 -1
  250. package/es/components/portal/index.js +1 -1
  251. package/es/components/portal/types.js +1 -1
  252. package/es/components/portal/usePortal.js +1 -1
  253. package/es/components/shared/InvalidIcon.js +1 -1
  254. package/es/components/shared/ValidIcon.js +1 -1
  255. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  256. package/es/components/status/LoadingAnimation/index.js +1 -1
  257. package/es/components/status/Spin/Cube.js +1 -1
  258. package/es/components/status/Spin/InternalSpinner.js +1 -1
  259. package/es/components/status/Spin/Spin.js +1 -1
  260. package/es/components/status/Spin/SpinsContainer.js +1 -1
  261. package/es/components/status/Spin/index.js +1 -1
  262. package/es/components/status/Spin/types.js +1 -1
  263. package/es/components/status/index.js +1 -1
  264. package/es/data/item-themes.js +1 -1
  265. package/es/data/themes.js +1 -1
  266. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  267. package/es/icons/AdjustmentsIcon.js +1 -1
  268. package/es/icons/AiIcon.js +1 -1
  269. package/es/icons/AreaChartIcon.js +1 -1
  270. package/es/icons/BackwardIcon.js +1 -1
  271. package/es/icons/BarChartIcon.js +1 -1
  272. package/es/icons/BellFilledIcon.js +1 -1
  273. package/es/icons/BellIcon.js +1 -1
  274. package/es/icons/BooleanIcon.js +1 -1
  275. package/es/icons/CalendarEditIcon.js +1 -1
  276. package/es/icons/CalendarIcon.js +1 -1
  277. package/es/icons/CaretDownIcon.js +1 -1
  278. package/es/icons/CaretUpIcon.js +1 -1
  279. package/es/icons/ChartAreaStackedIcon.js +1 -1
  280. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  281. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  282. package/es/icons/ChartBarGroupedIcon.js +1 -1
  283. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  284. package/es/icons/ChartBarLineIcon.js +1 -1
  285. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  286. package/es/icons/ChartBarStackedIcon.js +1 -1
  287. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  288. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  289. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  290. package/es/icons/ChartBoxPlotIcon.js +1 -1
  291. package/es/icons/ChartBubbleIcon.js +1 -1
  292. package/es/icons/ChartDonut2Icon.js +1 -1
  293. package/es/icons/ChartFunnelIcon.js +1 -1
  294. package/es/icons/ChartHeatmapIcon.js +1 -1
  295. package/es/icons/ChartKPIIcon.js +1 -1
  296. package/es/icons/ChartPie2Icon.js +1 -1
  297. package/es/icons/ChartScatterIcon.js +1 -1
  298. package/es/icons/CheckCircleFilledIcon.js +1 -1
  299. package/es/icons/CheckCircleIcon.js +1 -1
  300. package/es/icons/CheckIcon.js +1 -1
  301. package/es/icons/CircleFilledIcon.js +1 -1
  302. package/es/icons/ClearIcon.js +1 -1
  303. package/es/icons/CloseCircleFilledIcon.js +1 -1
  304. package/es/icons/CloseCircleIcon.js +1 -1
  305. package/es/icons/CloseIcon.js +1 -1
  306. package/es/icons/CodeIcon.js +1 -1
  307. package/es/icons/CopyIcon.js +1 -1
  308. package/es/icons/CountIcon.js +1 -1
  309. package/es/icons/CubeIcon.js +1 -1
  310. package/es/icons/CurrencyDollarIcon.js +1 -1
  311. package/es/icons/DangerIcon.js +1 -1
  312. package/es/icons/DashboardIcon.js +1 -1
  313. package/es/icons/DatabaseIcon.js +1 -1
  314. package/es/icons/DecimalDecreaseIcon.js +1 -1
  315. package/es/icons/DecimalIncreaseIcon.js +1 -1
  316. package/es/icons/DirectionIcon.js +1 -1
  317. package/es/icons/DonutIcon.js +1 -1
  318. package/es/icons/DownIcon.js +1 -1
  319. package/es/icons/EditIcon.js +1 -1
  320. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  321. package/es/icons/ExclamationCircleIcon.js +1 -1
  322. package/es/icons/ExclamationIcon.js +1 -1
  323. package/es/icons/EyeIcon.js +1 -1
  324. package/es/icons/EyeInvisibleIcon.js +1 -1
  325. package/es/icons/FilterIcon.js +1 -1
  326. package/es/icons/FolderFilledIcon.js +1 -1
  327. package/es/icons/FolderIcon.js +1 -1
  328. package/es/icons/FolderOpenFilledIcon.js +1 -1
  329. package/es/icons/FolderOpenIcon.js +1 -1
  330. package/es/icons/ForwardIcon.js +1 -1
  331. package/es/icons/HierarchyIcon.js +1 -1
  332. package/es/icons/Icon.js +1 -1
  333. package/es/icons/InfoCircleIcon.js +1 -1
  334. package/es/icons/InfoIcon.js +1 -1
  335. package/es/icons/KeyIcon.js +1 -1
  336. package/es/icons/LeftIcon.js +1 -1
  337. package/es/icons/LineChartIcon.js +1 -1
  338. package/es/icons/LoadingIcon.js +1 -1
  339. package/es/icons/LockFilledIcon.js +1 -1
  340. package/es/icons/LockIcon.js +1 -1
  341. package/es/icons/MoreIcon.js +1 -1
  342. package/es/icons/NotAllowedIcon.js +1 -1
  343. package/es/icons/Number123Icon.js +1 -1
  344. package/es/icons/NumberIcon.js +1 -1
  345. package/es/icons/PauseCircleFilledIcon.js +1 -1
  346. package/es/icons/PauseCircleIcon.js +1 -1
  347. package/es/icons/PauseIcon.js +1 -1
  348. package/es/icons/PercentageIcon.js +1 -1
  349. package/es/icons/PieChartIcon.js +1 -1
  350. package/es/icons/PlayCircleIcon.js +1 -1
  351. package/es/icons/PlayIcon.js +1 -1
  352. package/es/icons/PlusIcon.js +1 -1
  353. package/es/icons/ReloadIcon.js +1 -1
  354. package/es/icons/ReportIcon.js +1 -1
  355. package/es/icons/ReturnIcon.js +1 -1
  356. package/es/icons/RightIcon.js +1 -1
  357. package/es/icons/SchemeIcon.js +1 -1
  358. package/es/icons/SearchIcon.js +1 -1
  359. package/es/icons/SettingsIcon.js +1 -1
  360. package/es/icons/ShieldFilledIcon.js +1 -1
  361. package/es/icons/ShieldIcon.js +1 -1
  362. package/es/icons/SlashIcon.js +1 -1
  363. package/es/icons/SparklesIcon.js +1 -1
  364. package/es/icons/SqlIcon.js +1 -1
  365. package/es/icons/StatsIcon.js +1 -1
  366. package/es/icons/StopIcon.js +1 -1
  367. package/es/icons/StringIcon.js +1 -1
  368. package/es/icons/SwitchIcon.js +1 -1
  369. package/es/icons/TableIcon.js +1 -1
  370. package/es/icons/ThumbsDownIcon.js +1 -1
  371. package/es/icons/ThumbsUpIcon.js +1 -1
  372. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  373. package/es/icons/ThunderboltFilledIcon.js +1 -1
  374. package/es/icons/ThunderboltIcon.js +1 -1
  375. package/es/icons/TimeIcon.js +1 -1
  376. package/es/icons/UnlockIcon.js +1 -1
  377. package/es/icons/UpIcon.js +1 -1
  378. package/es/icons/UserGroupIcon.js +1 -1
  379. package/es/icons/UserIcon.js +1 -1
  380. package/es/icons/UserLockIcon.js +1 -1
  381. package/es/icons/ViewIcon.js +1 -1
  382. package/es/icons/WarningFilledIcon.js +1 -1
  383. package/es/icons/WarningIcon.js +1 -1
  384. package/es/icons/add-new-icon.js +1 -1
  385. package/es/icons/index.js +1 -1
  386. package/es/icons/wrap-icon.js +1 -1
  387. package/es/index.js +1 -1
  388. package/es/provider.js +1 -1
  389. package/es/providers/TrackingProvider.js +1 -1
  390. package/es/providers/navigation.types.js +1 -1
  391. package/es/providers/navigationAdapter.default.js +1 -1
  392. package/es/services/notification.js +1 -1
  393. package/es/shared/form.js +1 -1
  394. package/es/shared/index.js +1 -1
  395. package/es/stories/Form.legacy-stories.js +1 -1
  396. package/es/stories/FormFieldArgs.js +1 -1
  397. package/es/stories/Layout.stories.js +1 -1
  398. package/es/stories/Tasty.stories.js +1 -1
  399. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  400. package/es/stories/components/DialogFormApp.js +1 -1
  401. package/es/stories/components/StyledButton.js +1 -1
  402. package/es/stories/lists/baseProps.js +1 -1
  403. package/es/tasty/debug.js +1 -1
  404. package/es/tasty/index.js +1 -1
  405. package/es/tasty/injector/index.js +1 -1
  406. package/es/tasty/injector/injector.js +1 -1
  407. package/es/tasty/injector/sheet-manager.js +1 -1
  408. package/es/tasty/injector/types.js +1 -1
  409. package/es/tasty/parser/classify.js +1 -1
  410. package/es/tasty/parser/const.js +1 -1
  411. package/es/tasty/parser/lru.js +1 -1
  412. package/es/tasty/parser/parser.js +1 -1
  413. package/es/tasty/parser/tokenizer.js +1 -1
  414. package/es/tasty/parser/types.js +1 -1
  415. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  416. package/es/tasty/styles/align.js +1 -1
  417. package/es/tasty/styles/border.js +1 -1
  418. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  419. package/es/tasty/styles/color.js +1 -1
  420. package/es/tasty/styles/createStyle.js +1 -1
  421. package/es/tasty/styles/dimension.js +1 -1
  422. package/es/tasty/styles/display.js +1 -1
  423. package/es/tasty/styles/fade.js +1 -1
  424. package/es/tasty/styles/fill.js +1 -1
  425. package/es/tasty/styles/flow.js +1 -1
  426. package/es/tasty/styles/font.js +1 -1
  427. package/es/tasty/styles/fontStyle.js +1 -1
  428. package/es/tasty/styles/gap.js +1 -1
  429. package/es/tasty/styles/groupRadius.js +1 -1
  430. package/es/tasty/styles/height.js +1 -1
  431. package/es/tasty/styles/index.js +1 -1
  432. package/es/tasty/styles/inset.js +1 -1
  433. package/es/tasty/styles/justify.js +1 -1
  434. package/es/tasty/styles/list.js +1 -1
  435. package/es/tasty/styles/margin.js +1 -1
  436. package/es/tasty/styles/outline.js +1 -1
  437. package/es/tasty/styles/padding.js +1 -1
  438. package/es/tasty/styles/place.js +1 -1
  439. package/es/tasty/styles/predefined.js +1 -1
  440. package/es/tasty/styles/preset.js +1 -1
  441. package/es/tasty/styles/radius.js +1 -1
  442. package/es/tasty/styles/reset.js +1 -1
  443. package/es/tasty/styles/scrollbar.js +1 -1
  444. package/es/tasty/styles/shadow.js +1 -1
  445. package/es/tasty/styles/styledScrollbar.js +1 -1
  446. package/es/tasty/styles/transition.js +1 -1
  447. package/es/tasty/styles/types.js +1 -1
  448. package/es/tasty/styles/width.js +1 -1
  449. package/es/tasty/tasty.js +1 -1
  450. package/es/tasty/types.js +1 -1
  451. package/es/tasty/utils/cache-wrapper.js +1 -1
  452. package/es/tasty/utils/case-converter.js +1 -1
  453. package/es/tasty/utils/colors.js +1 -1
  454. package/es/tasty/utils/dotize.js +1 -1
  455. package/es/tasty/utils/filterBaseProps.js +1 -1
  456. package/es/tasty/utils/getDisplayName.js +1 -1
  457. package/es/tasty/utils/getModCombinations.js +1 -1
  458. package/es/tasty/utils/isDevEnv.js +1 -1
  459. package/es/tasty/utils/mergeStyles.js +1 -1
  460. package/es/tasty/utils/modAttrs.js +1 -1
  461. package/es/tasty/utils/renderStyles.js +1 -1
  462. package/es/tasty/utils/responsive.js +1 -1
  463. package/es/tasty/utils/string.js +1 -1
  464. package/es/tasty/utils/styles.js +1 -1
  465. package/es/tasty/utils/warnings.js +1 -1
  466. package/es/tokens.js +1 -1
  467. package/es/type-checks.js +1 -1
  468. package/es/utils/ResizeSensor.js +1 -1
  469. package/es/utils/modules.js +1 -1
  470. package/es/utils/promise.js +1 -1
  471. package/es/utils/random.js +1 -1
  472. package/es/utils/range.js +1 -1
  473. package/es/utils/react/Slots.js +1 -1
  474. package/es/utils/react/chain.js +1 -1
  475. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  476. package/es/utils/react/index.js +1 -1
  477. package/es/utils/react/interactions.js +1 -1
  478. package/es/utils/react/isTextOnly.js +1 -1
  479. package/es/utils/react/mapProps.js +1 -1
  480. package/es/utils/react/mergeProps.js +1 -1
  481. package/es/utils/react/nullableValue.js +1 -1
  482. package/es/utils/react/sharedStore.js +1 -1
  483. package/es/utils/react/useCombinedRefs.js +1 -1
  484. package/es/utils/react/useControlledFocusVisible.js +1 -1
  485. package/es/utils/react/useEventBus.js +1 -1
  486. package/es/utils/react/useId.js +1 -1
  487. package/es/utils/react/useIsDarwin.js +1 -1
  488. package/es/utils/react/useKeySymbols.js +1 -1
  489. package/es/utils/react/useLayoutEffect.js +1 -1
  490. package/es/utils/react/useQaProps.js +1 -1
  491. package/es/utils/react/useViewportSize.js +1 -1
  492. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  493. package/es/utils/transitions.js +1 -1
  494. package/es/utils/tree.js +1 -1
  495. package/es/utils/warnings.js +1 -1
  496. package/es/version.js +2 -2
  497. package/package.json +1 -1
  498. package/types/components/fields/ComboBox/ComboBox.d.ts +93 -30
  499. package/types/components/fields/ComboBox/index.d.ts +2 -1
  500. package/types/components/fields/FilterListBox/FilterListBox.d.ts +15 -2
  501. package/types/components/fields/LegacyComboBox/LegacyComboBox.d.ts +49 -0
  502. package/types/components/fields/LegacyComboBox/index.d.ts +1 -0
  503. package/types/components/fields/ListBox/ListBox.d.ts +5 -0
  504. package/types/components/fields/index.d.ts +1 -1
  505. package/es/components/fields/Picker/Picker.js +0 -782
  506. package/types/components/fields/Picker/Picker.d.ts +0 -62
  507. package/types/components/fields/Picker/index.d.ts +0 -2
@@ -1,15 +1,15 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.0.0-canary-5141f6d
4
+ * @cube-dev/ui-kit v0.0.0-canary-bc3ea18
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
8
8
  import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
9
- import { cloneElement, forwardRef, useEffect, useMemo, } from 'react';
10
- import { useButton, useComboBox, useFilter, useHover, useOverlayPosition, } from 'react-aria';
11
- import { Section as BaseSection, useComboBoxState } from 'react-stately';
12
- import { useEvent } from '../../../_internal/index';
9
+ import React, { Children, cloneElement, forwardRef, useCallback, useEffect, useMemo, useRef, useState, } from 'react';
10
+ import { useFilter, useKeyboard, useOverlay, useOverlayPosition, } from 'react-aria';
11
+ import { Section as BaseSection, Item } from 'react-stately';
12
+ import { useEvent } from '../../../_internal';
13
13
  import { CloseIcon, DownIcon, LoadingIcon } from '../../../icons';
14
14
  import { useProviderProps } from '../../../provider';
15
15
  import { BASE_STYLES, COLOR_STYLES, extractStyles, OUTER_STYLES, tasty, } from '../../../tasty';
@@ -19,12 +19,11 @@ import { useFocus } from '../../../utils/react/interactions';
19
19
  import { useEventBus } from '../../../utils/react/useEventBus';
20
20
  import { ItemAction } from '../../actions';
21
21
  import { useFieldProps, useFormProps, wrapWithField } from '../../form';
22
- import { Item } from '../../Item';
23
22
  import { OverlayWrapper } from '../../overlays/OverlayWrapper';
24
23
  import { InvalidIcon } from '../../shared/InvalidIcon';
25
24
  import { ValidIcon } from '../../shared/ValidIcon';
26
- import { DEFAULT_INPUT_STYLES, INPUT_WRAPPER_STYLES } from '../index';
27
- import { ListBoxPopup } from '../Select';
25
+ import { ListBox } from '../ListBox/ListBox';
26
+ import { DEFAULT_INPUT_STYLES, INPUT_WRAPPER_STYLES, } from '../TextInput/TextInputBase';
28
27
  const ComboBoxWrapperElement = tasty({
29
28
  styles: INPUT_WRAPPER_STYLES,
30
29
  });
@@ -62,7 +61,320 @@ const TriggerElement = tasty({
62
61
  cursor: 'pointer',
63
62
  },
64
63
  });
64
+ const ComboBoxOverlayElement = tasty({
65
+ qa: 'ComboBoxOverlay',
66
+ styles: {
67
+ display: 'grid',
68
+ gridRows: '1sf',
69
+ width: '30x max-content 50vw',
70
+ maxHeight: '50vh',
71
+ overflow: 'auto',
72
+ background: '#white',
73
+ radius: '1cr',
74
+ shadow: '0px .5x 2x #shadow',
75
+ padding: '0',
76
+ border: '#dark.08',
77
+ outline: '#purple-03.0',
78
+ },
79
+ });
65
80
  const PROP_STYLES = [...BASE_STYLES, ...OUTER_STYLES, ...COLOR_STYLES];
81
+ function useComboBoxState({ selectedKey, defaultSelectedKey, inputValue, comboBoxId, }) {
82
+ // Get event bus for menu synchronization
83
+ const { emit, on } = useEventBus();
84
+ // Internal state for uncontrolled mode
85
+ const [internalSelectedKey, setInternalSelectedKey] = useState(defaultSelectedKey ?? null);
86
+ const [internalInputValue, setInternalInputValue] = useState('');
87
+ const isControlledKey = selectedKey !== undefined;
88
+ const isControlledInput = inputValue !== undefined;
89
+ const effectiveSelectedKey = isControlledKey
90
+ ? selectedKey
91
+ : internalSelectedKey;
92
+ const effectiveInputValue = isControlledInput
93
+ ? inputValue
94
+ : internalInputValue;
95
+ // Popover state
96
+ const [isPopoverOpen, setIsPopoverOpen] = useState(false);
97
+ // Listen for other menus opening and close this one if needed
98
+ useEffect(() => {
99
+ const unsubscribe = on('popover:open', (data) => {
100
+ if (data.menuId !== comboBoxId && isPopoverOpen) {
101
+ setIsPopoverOpen(false);
102
+ }
103
+ });
104
+ return unsubscribe;
105
+ }, [on, comboBoxId, isPopoverOpen]);
106
+ // Emit event when this combobox opens
107
+ useEffect(() => {
108
+ if (isPopoverOpen) {
109
+ emit('popover:open', { menuId: comboBoxId });
110
+ }
111
+ }, [isPopoverOpen, emit, comboBoxId]);
112
+ return {
113
+ effectiveSelectedKey,
114
+ effectiveInputValue,
115
+ isPopoverOpen,
116
+ setIsPopoverOpen,
117
+ setInternalSelectedKey,
118
+ setInternalInputValue,
119
+ isControlledKey,
120
+ isControlledInput,
121
+ };
122
+ }
123
+ function useComboBoxFiltering({ children, effectiveInputValue, filter, }) {
124
+ const [isFilterActive, setIsFilterActive] = useState(false);
125
+ const { contains } = useFilter({ sensitivity: 'base' });
126
+ const textFilterFn = useMemo(() => (filter === false ? () => true : filter || contains), [filter, contains]);
127
+ // Filter children based on input value
128
+ const filteredChildren = useMemo(() => {
129
+ const term = effectiveInputValue.trim();
130
+ if (!isFilterActive || !term || !children) {
131
+ return children;
132
+ }
133
+ const nodeMatches = (node) => {
134
+ if (!node?.props)
135
+ return false;
136
+ const textValue = node.props.textValue ||
137
+ (typeof node.props.children === 'string' ? node.props.children : '') ||
138
+ String(node.props.children || '');
139
+ return textFilterFn(textValue, term);
140
+ };
141
+ const filterChildren = (childNodes) => {
142
+ if (!childNodes)
143
+ return null;
144
+ const childArray = Array.isArray(childNodes) ? childNodes : [childNodes];
145
+ const filteredNodes = [];
146
+ childArray.forEach((child) => {
147
+ if (!child || typeof child !== 'object') {
148
+ return;
149
+ }
150
+ if (child.type === BaseSection ||
151
+ child.type?.displayName === 'Section') {
152
+ const sectionChildren = Array.isArray(child.props.children)
153
+ ? child.props.children
154
+ : [child.props.children];
155
+ const filteredSectionChildren = sectionChildren.filter((sectionChild) => {
156
+ return (sectionChild &&
157
+ typeof sectionChild === 'object' &&
158
+ nodeMatches(sectionChild));
159
+ });
160
+ if (filteredSectionChildren.length > 0) {
161
+ filteredNodes.push(cloneElement(child, {
162
+ key: child.key,
163
+ children: filteredSectionChildren,
164
+ }));
165
+ }
166
+ }
167
+ else if (child.type === Item) {
168
+ if (nodeMatches(child)) {
169
+ filteredNodes.push(child);
170
+ }
171
+ }
172
+ else if (nodeMatches(child)) {
173
+ filteredNodes.push(child);
174
+ }
175
+ });
176
+ return filteredNodes;
177
+ };
178
+ return filterChildren(children);
179
+ }, [isFilterActive, children, effectiveInputValue, textFilterFn]);
180
+ return {
181
+ filteredChildren,
182
+ isFilterActive,
183
+ setIsFilterActive,
184
+ };
185
+ }
186
+ function useComboBoxKeyboard({ isPopoverOpen, listStateRef, hasResults, allowsCustomValue, effectiveInputValue, isClearable, onSelectionChange, onClearValue, onOpenPopover, onClosePopover, inputRef, }) {
187
+ const { keyboardProps } = useKeyboard({
188
+ onKeyDown: (e) => {
189
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
190
+ e.preventDefault();
191
+ // Open popover if closed
192
+ if (!isPopoverOpen) {
193
+ onOpenPopover();
194
+ return;
195
+ }
196
+ const listState = listStateRef.current;
197
+ if (!listState)
198
+ return;
199
+ const { selectionManager, collection, disabledKeys } = listState;
200
+ // Helper to collect visible item keys (supports sections)
201
+ const collectVisibleKeys = (nodes, out) => {
202
+ for (const node of nodes) {
203
+ if (node.type === 'item') {
204
+ if (!disabledKeys?.has(node.key)) {
205
+ out.push(node.key);
206
+ }
207
+ }
208
+ else if (node.childNodes) {
209
+ collectVisibleKeys(node.childNodes, out);
210
+ }
211
+ }
212
+ };
213
+ const visibleKeys = [];
214
+ collectVisibleKeys(collection, visibleKeys);
215
+ if (visibleKeys.length === 0)
216
+ return;
217
+ const isArrowDown = e.key === 'ArrowDown';
218
+ const currentKey = selectionManager.focusedKey;
219
+ let nextKey = null;
220
+ if (currentKey == null) {
221
+ nextKey = isArrowDown
222
+ ? visibleKeys[0]
223
+ : visibleKeys[visibleKeys.length - 1];
224
+ }
225
+ else {
226
+ const currentIndex = visibleKeys.indexOf(currentKey);
227
+ if (currentIndex !== -1) {
228
+ const newIndex = currentIndex + (isArrowDown ? 1 : -1);
229
+ if (newIndex >= 0 && newIndex < visibleKeys.length) {
230
+ nextKey = visibleKeys[newIndex];
231
+ }
232
+ }
233
+ else {
234
+ nextKey = isArrowDown
235
+ ? visibleKeys[0]
236
+ : visibleKeys[visibleKeys.length - 1];
237
+ }
238
+ }
239
+ if (nextKey != null) {
240
+ if (listState.lastFocusSourceRef) {
241
+ listState.lastFocusSourceRef.current = 'keyboard';
242
+ }
243
+ selectionManager.setFocusedKey(nextKey);
244
+ }
245
+ }
246
+ else if (e.key === 'Enter') {
247
+ if (!hasResults) {
248
+ e.preventDefault();
249
+ if (allowsCustomValue) {
250
+ const value = effectiveInputValue;
251
+ onSelectionChange(value ?? null);
252
+ }
253
+ else {
254
+ onSelectionChange(null);
255
+ }
256
+ return;
257
+ }
258
+ if (isPopoverOpen) {
259
+ const listState = listStateRef.current;
260
+ if (!listState)
261
+ return;
262
+ const keyToSelect = listState.selectionManager.focusedKey;
263
+ if (keyToSelect != null) {
264
+ e.preventDefault();
265
+ listState.selectionManager.select(keyToSelect, e);
266
+ // Ensure the popover closes even if selection stays the same
267
+ onClosePopover();
268
+ setTimeout(() => inputRef.current?.focus(), 0);
269
+ }
270
+ }
271
+ }
272
+ else if (e.key === 'Escape') {
273
+ if (isPopoverOpen) {
274
+ e.preventDefault();
275
+ onClosePopover();
276
+ inputRef.current?.focus();
277
+ }
278
+ else if (effectiveInputValue && isClearable) {
279
+ e.preventDefault();
280
+ onClearValue();
281
+ }
282
+ }
283
+ else if (e.key === 'Home' || e.key === 'End') {
284
+ if (isPopoverOpen) {
285
+ e.preventDefault();
286
+ const listState = listStateRef.current;
287
+ if (!listState)
288
+ return;
289
+ const { selectionManager, collection, disabledKeys } = listState;
290
+ // Helper to collect visible item keys (supports sections)
291
+ const collectVisibleKeys = (nodes, out) => {
292
+ for (const node of nodes) {
293
+ if (node.type === 'item') {
294
+ if (!disabledKeys?.has(node.key)) {
295
+ out.push(node.key);
296
+ }
297
+ }
298
+ else if (node.childNodes) {
299
+ collectVisibleKeys(node.childNodes, out);
300
+ }
301
+ }
302
+ };
303
+ const visibleKeys = [];
304
+ collectVisibleKeys(collection, visibleKeys);
305
+ if (visibleKeys.length === 0)
306
+ return;
307
+ const targetKey = e.key === 'Home'
308
+ ? visibleKeys[0]
309
+ : visibleKeys[visibleKeys.length - 1];
310
+ if (listState.lastFocusSourceRef) {
311
+ listState.lastFocusSourceRef.current = 'keyboard';
312
+ }
313
+ selectionManager.setFocusedKey(targetKey);
314
+ }
315
+ }
316
+ },
317
+ });
318
+ return { keyboardProps };
319
+ }
320
+ const ComboBoxInput = forwardRef(function ComboBoxInput({ inputRef, value, placeholder, isDisabled, isReadOnly, autoFocus, size, mods, inputStyles, keyboardProps, focusProps, onChange, onFocus, isPopoverOpen, hasResults, comboBoxId, listStateRef, }, ref) {
321
+ const combinedRef = useCombinedRefs(ref, inputRef);
322
+ return (_jsx(InputElement, { ref: combinedRef, qa: "Input", type: "text", value: value, placeholder: placeholder, disabled: isDisabled, readOnly: isReadOnly, autoFocus: autoFocus, "data-autofocus": autoFocus ? '' : undefined, onChange: onChange, onFocus: onFocus, onBlur: focusProps.onBlur, ...keyboardProps, styles: inputStyles, mods: mods, "data-size": size, role: "combobox", "aria-expanded": isPopoverOpen && hasResults, "aria-haspopup": "listbox", "aria-controls": isPopoverOpen && hasResults
323
+ ? `ComboBoxListBox-${comboBoxId}`
324
+ : undefined, "aria-activedescendant": isPopoverOpen &&
325
+ hasResults &&
326
+ listStateRef.current?.selectionManager.focusedKey != null
327
+ ? `ListBoxItem-${listStateRef.current?.selectionManager.focusedKey}`
328
+ : undefined }));
329
+ });
330
+ function ComboBoxOverlay({ isOpen, triggerRef, popoverRef, listBoxRef, direction, shouldFlip, overlayOffset, comboBoxWidth, comboBoxId, overlayStyles, listBoxStyles, optionStyles, sectionStyles, headingStyles, effectiveSelectedKey, isDisabled, disabledKeys, items, children, listStateRef, onSelectionChange, onClose, label, ariaLabel, }) {
331
+ // Overlay positioning
332
+ const { overlayProps: overlayPositionProps, placement, updatePosition, } = useOverlayPosition({
333
+ targetRef: triggerRef,
334
+ overlayRef: popoverRef,
335
+ placement: `${direction} start`,
336
+ shouldFlip,
337
+ isOpen,
338
+ offset: overlayOffset,
339
+ });
340
+ // Overlay behavior (dismiss on outside click, escape)
341
+ const { overlayProps: overlayBehaviorProps } = useOverlay({
342
+ onClose,
343
+ shouldCloseOnBlur: true,
344
+ isOpen,
345
+ isDismissable: true,
346
+ shouldCloseOnInteractOutside: (el) => {
347
+ const menuTriggerEl = el.closest('[data-popover-trigger]');
348
+ if (!menuTriggerEl)
349
+ return true;
350
+ if (menuTriggerEl === triggerRef?.current)
351
+ return true;
352
+ return false;
353
+ },
354
+ }, popoverRef);
355
+ // Update position when overlay opens
356
+ useLayoutEffect(() => {
357
+ if (isOpen) {
358
+ // Use double RAF to ensure layout is complete before positioning
359
+ requestAnimationFrame(() => {
360
+ requestAnimationFrame(() => {
361
+ updatePosition?.();
362
+ });
363
+ });
364
+ }
365
+ }, [isOpen, updatePosition]);
366
+ if (!isOpen)
367
+ return null;
368
+ return (_jsx(OverlayWrapper, { isOpen: true, placement: placement, children: _jsx(ComboBoxOverlayElement, { ...mergeProps(overlayPositionProps, overlayBehaviorProps), ref: popoverRef, styles: overlayStyles, style: {
369
+ minWidth: comboBoxWidth ? `${comboBoxWidth}px` : undefined,
370
+ ...overlayPositionProps.style,
371
+ }, children: _jsx(ListBox, { ref: listBoxRef, focusOnHover: true, disableSelectionToggle: true, id: `ComboBoxListBox-${comboBoxId}`, "aria-label": ariaLabel || (typeof label === 'string' ? label : 'Options'), selectedKey: effectiveSelectedKey, selectionMode: "single", isDisabled: isDisabled, disabledKeys: disabledKeys, shouldUseVirtualFocus: true, items: items, styles: listBoxStyles, optionStyles: optionStyles, sectionStyles: sectionStyles, headingStyles: headingStyles, stateRef: listStateRef, mods: {
372
+ popover: true,
373
+ }, onSelectionChange: onSelectionChange, children: children }) }) }));
374
+ }
375
+ // ============================================================================
376
+ // Main Component: ComboBox
377
+ // ============================================================================
66
378
  export const ComboBox = forwardRef(function ComboBox(props, ref) {
67
379
  props = useProviderProps(props);
68
380
  props = useFormProps(props);
@@ -86,37 +398,16 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
86
398
  };
87
399
  },
88
400
  });
89
- let { qa, label, extra, labelStyles, isRequired, necessityIndicator, validationState, icon, prefix, isDisabled, multiLine, autoFocus, wrapperRef, inputRef, triggerRef, popoverRef, listBoxRef, isLoading, loadingIndicator, overlayOffset = 8, inputStyles, optionStyles, triggerStyles, listBoxStyles, overlayStyles, wrapperStyles, suffix, hideTrigger, message, description, size = 'medium', autoComplete = 'off', direction = 'bottom', shouldFlip = true, menuTrigger = 'input', suffixPosition = 'before', loadingState, filter, styles, labelSuffix, selectedKey, defaultSelectedKey, isClearable, ...otherProps } = props;
90
- let isAsync = loadingState != null;
91
- let { contains } = useFilter({ sensitivity: 'base' });
92
- let comboBoxStateProps = {
93
- ...props,
94
- defaultFilter: filter || contains,
95
- filter: undefined,
96
- allowsEmptyCollection: isAsync,
97
- menuTrigger,
98
- };
99
- let state = useComboBoxState(comboBoxStateProps);
401
+ let { qa, label, extra, labelStyles, isRequired, necessityIndicator, validationState, icon, prefix, isDisabled, autoFocus, wrapperRef, inputRef, triggerRef, popoverRef, listBoxRef, isLoading, inputStyles, optionStyles, triggerStyles, listBoxStyles, overlayStyles, wrapperStyles, suffix, hideTrigger, message, description, size = 'medium', direction = 'bottom', shouldFlip = true, popoverTrigger = 'input', suffixPosition = 'before', filter, styles, labelSuffix, selectedKey, defaultSelectedKey, inputValue, onInputChange, isClearable, onClear, placeholder, allowsCustomValue, emptyLabel, items, children: renderChildren, customValueProps, newCustomValueProps, sectionStyles, headingStyles, isReadOnly, overlayOffset = 8, onSelectionChange: externalOnSelectionChange, ...otherProps } = props;
100
402
  // Generate a unique ID for this combobox instance
101
403
  const comboBoxId = useMemo(() => generateRandomId(), []);
102
- // Get event bus for menu synchronization
103
- const { emit, on } = useEventBus();
104
- // Listen for other menus opening and close this one if needed
105
- useEffect(() => {
106
- const unsubscribe = on('popover:open', (data) => {
107
- // If another menu is opening and this combobox is open, close this one
108
- if (data.menuId !== comboBoxId && state.isOpen) {
109
- state.close();
110
- }
111
- });
112
- return unsubscribe;
113
- }, [on, comboBoxId, state]);
114
- // Emit event when this combobox opens
115
- useEffect(() => {
116
- if (state.isOpen) {
117
- emit('popover:open', { menuId: comboBoxId });
118
- }
119
- }, [state.isOpen, emit, comboBoxId]);
404
+ // State management hook
405
+ const { effectiveSelectedKey, effectiveInputValue, isPopoverOpen, setIsPopoverOpen, setInternalSelectedKey, setInternalInputValue, isControlledKey, isControlledInput, } = useComboBoxState({
406
+ selectedKey,
407
+ defaultSelectedKey,
408
+ inputValue,
409
+ comboBoxId,
410
+ });
120
411
  styles = extractStyles(otherProps, PROP_STYLES, styles);
121
412
  ref = useCombinedRefs(ref);
122
413
  wrapperRef = useCombinedRefs(wrapperRef);
@@ -124,62 +415,189 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
124
415
  triggerRef = useCombinedRefs(triggerRef);
125
416
  popoverRef = useCombinedRefs(popoverRef);
126
417
  listBoxRef = useCombinedRefs(listBoxRef);
127
- let { overlayProps, placement, updatePosition } = useOverlayPosition({
128
- targetRef: triggerRef,
129
- overlayRef: popoverRef,
130
- scrollRef: listBoxRef,
131
- placement: `${direction} end`,
132
- shouldFlip: shouldFlip,
133
- isOpen: state.isOpen,
134
- onClose: state.close,
135
- offset: overlayOffset,
136
- });
137
- let { labelProps, inputProps, listBoxProps, buttonProps: triggerProps, } = useComboBox({
138
- ...comboBoxStateProps,
139
- inputRef,
140
- buttonRef: triggerRef,
141
- listBoxRef,
142
- popoverRef,
143
- menuTrigger,
144
- }, state);
145
- let { isFocused, focusProps } = useFocus({ isDisabled });
146
- let { hoverProps, isHovered } = useHover({ isDisabled });
147
- // Get props for the button based on the trigger props from useComboBox
148
- let { buttonProps, isPressed: isTriggerPressed } = useButton(triggerProps, triggerRef);
149
- let { hoverProps: triggerHoverProps, isHovered: isTriggerHovered } = useHover({ isDisabled });
150
- let { focusProps: triggerFocusProps, isFocused: isTriggerFocused } = useFocus({ isDisabled }, true);
151
- useLayoutEffect(() => {
152
- if (state.isOpen) {
153
- updatePosition();
418
+ // Preserve the original `children` (may be a render function) before we
419
+ // potentially overwrite it.
420
+ let children = renderChildren;
421
+ const renderFn = renderChildren;
422
+ if (items && typeof renderFn === 'function') {
423
+ try {
424
+ const itemsArray = Array.from(items);
425
+ children = itemsArray.map((item, idx) => {
426
+ const rendered = renderFn(item);
427
+ if (React.isValidElement(rendered) &&
428
+ rendered.key == null) {
429
+ return React.cloneElement(rendered, {
430
+ key: rendered?.key ?? item?.key ?? idx,
431
+ });
432
+ }
433
+ return rendered;
434
+ });
435
+ }
436
+ catch {
437
+ // If conversion fails, proceed with the original children
154
438
  }
155
- }, [state.isOpen, state.collection.size]);
439
+ }
440
+ // Filtering hook
441
+ const { filteredChildren, isFilterActive, setIsFilterActive } = useComboBoxFiltering({
442
+ children,
443
+ effectiveInputValue,
444
+ filter,
445
+ });
446
+ const { isFocused, focusProps } = useFocus({ isDisabled });
156
447
  let isInvalid = validationState === 'invalid';
157
448
  let validationIcon = isInvalid ? InvalidIcon : ValidIcon;
158
449
  let validation = cloneElement(validationIcon);
450
+ // Ref to access internal ListBox state
451
+ const listStateRef = useRef(null);
452
+ const focusInitAttemptsRef = useRef(0);
453
+ // Find item by key to get its label
454
+ const findItemByKey = useCallback((key) => {
455
+ let foundItem = null;
456
+ const traverse = (nodes) => {
457
+ Children.forEach(nodes, (child) => {
458
+ if (!child || typeof child !== 'object')
459
+ return;
460
+ if (child.type === Item && String(child.key) === String(key)) {
461
+ foundItem = child;
462
+ }
463
+ if (child.props?.children) {
464
+ traverse(child.props.children);
465
+ }
466
+ });
467
+ };
468
+ if (children)
469
+ traverse(children);
470
+ return foundItem;
471
+ }, [children]);
472
+ // Selection change handler
473
+ const handleSelectionChange = useEvent((selection) => {
474
+ // Extract single key from selection (we only support single selection)
475
+ const key = Array.isArray(selection) ? selection[0] : selection;
476
+ // Update selected key
477
+ if (!isControlledKey) {
478
+ setInternalSelectedKey(key ?? null);
479
+ }
480
+ // Update input value to show selected item label
481
+ if (key != null) {
482
+ setIsFilterActive(false);
483
+ const selectedItem = findItemByKey(key);
484
+ const label = selectedItem?.props?.textValue ||
485
+ (typeof selectedItem?.props?.children === 'string'
486
+ ? selectedItem.props.children
487
+ : '') ||
488
+ String(key);
489
+ if (!isControlledInput) {
490
+ setInternalInputValue(label);
491
+ }
492
+ onInputChange?.(label);
493
+ }
494
+ else {
495
+ // Clear input when selection is cleared
496
+ if (!isControlledInput) {
497
+ setInternalInputValue('');
498
+ }
499
+ onInputChange?.('');
500
+ setIsFilterActive(false);
501
+ }
502
+ externalOnSelectionChange?.(key);
503
+ // Close popover after selection
504
+ setIsPopoverOpen(false);
505
+ // Focus input
506
+ setTimeout(() => {
507
+ inputRef.current?.focus();
508
+ }, 0);
509
+ });
510
+ // Input change handler
511
+ const handleInputChange = useEvent((e) => {
512
+ const value = e.target.value;
513
+ // Update input value
514
+ if (!isControlledInput) {
515
+ setInternalInputValue(value);
516
+ }
517
+ onInputChange?.(value);
518
+ const trimmed = value.trim();
519
+ setIsFilterActive(trimmed.length > 0);
520
+ // Clear selection when input changes
521
+ if (effectiveSelectedKey != null) {
522
+ if (!isControlledKey) {
523
+ setInternalSelectedKey(null);
524
+ }
525
+ externalOnSelectionChange?.(null);
526
+ }
527
+ // Open popover based on trigger
528
+ if (popoverTrigger === 'input' && value && !isPopoverOpen) {
529
+ setIsPopoverOpen(true);
530
+ }
531
+ });
532
+ // Sync input value with selected key in controlled mode
533
+ useEffect(() => {
534
+ // Only sync when input is not controlled to avoid overriding controlled input
535
+ if (isControlledInput)
536
+ return;
537
+ if (effectiveSelectedKey != null) {
538
+ const selectedItem = findItemByKey(effectiveSelectedKey);
539
+ const label = selectedItem?.props?.textValue ||
540
+ (typeof selectedItem?.props?.children === 'string'
541
+ ? selectedItem.props.children
542
+ : '') ||
543
+ String(effectiveSelectedKey);
544
+ setInternalInputValue(label);
545
+ }
546
+ else {
547
+ setInternalInputValue('');
548
+ }
549
+ }, [effectiveSelectedKey, findItemByKey, isControlledInput, children]);
550
+ // Input focus handler
551
+ const handleInputFocus = useEvent((e) => {
552
+ // Call focus props handler if it exists
553
+ focusProps.onFocus?.(e);
554
+ if (popoverTrigger === 'focus' && !isPopoverOpen) {
555
+ setIsPopoverOpen(true);
556
+ }
557
+ });
159
558
  // Clear button logic
160
- let hasValue = props.allowsCustomValue
161
- ? state.inputValue !== ''
162
- : state.selectedKey != null;
163
- let showClearButton = isClearable && hasValue && !isDisabled && !props.isReadOnly;
559
+ let hasValue = allowsCustomValue
560
+ ? effectiveInputValue !== ''
561
+ : effectiveSelectedKey != null;
562
+ let showClearButton = isClearable && hasValue && !isDisabled && !isReadOnly;
563
+ const hasResults = Boolean(filteredChildren &&
564
+ (Array.isArray(filteredChildren)
565
+ ? filteredChildren.length > 0
566
+ : filteredChildren !== null));
164
567
  // Clear function
165
568
  let clearValue = useEvent(() => {
166
- // Always clear input value in state so UI resets to placeholder
167
- state.setInputValue('');
168
- // Notify external input value only when custom value mode is enabled
169
- if (props.allowsCustomValue) {
170
- props.onInputChange?.('');
569
+ // Clear input
570
+ if (!isControlledInput) {
571
+ setInternalInputValue('');
572
+ }
573
+ onInputChange?.('');
574
+ // Clear selection
575
+ if (!isControlledKey) {
576
+ setInternalSelectedKey(null);
171
577
  }
172
- props.onSelectionChange?.(null);
173
- state.setSelectedKey(null);
174
- // Close the popup if it's open
175
- if (state.isOpen) {
176
- state.close();
578
+ externalOnSelectionChange?.(null);
579
+ // Close popover
580
+ if (isPopoverOpen) {
581
+ setIsPopoverOpen(false);
177
582
  }
178
- // Focus back to the input
583
+ // Focus input
179
584
  inputRef.current?.focus();
180
- props.onClear?.();
585
+ onClear?.();
586
+ });
587
+ // Keyboard navigation hook
588
+ const { keyboardProps } = useComboBoxKeyboard({
589
+ isPopoverOpen,
590
+ listStateRef,
591
+ hasResults,
592
+ allowsCustomValue,
593
+ effectiveInputValue,
594
+ isClearable,
595
+ onSelectionChange: handleSelectionChange,
596
+ onClearValue: clearValue,
597
+ onOpenPopover: () => setIsPopoverOpen(true),
598
+ onClosePopover: () => setIsPopoverOpen(false),
599
+ inputRef,
181
600
  });
182
- let comboBoxWidth = wrapperRef?.current?.offsetWidth;
183
601
  if (icon) {
184
602
  icon = _jsx("div", { "data-element": "InputIcon", children: icon });
185
603
  if (prefix) {
@@ -193,7 +611,7 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
193
611
  invalid: isInvalid,
194
612
  valid: validationState === 'valid',
195
613
  disabled: isDisabled,
196
- hovered: isHovered,
614
+ hovered: false,
197
615
  focused: isFocused,
198
616
  loading: isLoading,
199
617
  prefix: !!prefix,
@@ -203,84 +621,87 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
203
621
  isInvalid,
204
622
  validationState,
205
623
  isDisabled,
206
- isHovered,
207
624
  isFocused,
208
625
  isLoading,
209
626
  prefix,
210
627
  showClearButton,
211
628
  ]);
212
- // If input is not full and the user presses Enter, pick the first option.
213
- let onKeyPress = useEvent((e) => {
214
- if (!props.onSelectionChange) {
215
- return;
629
+ const comboBoxWidth = wrapperRef?.current?.offsetWidth;
630
+ const shouldShowPopover = Boolean(isPopoverOpen && hasResults);
631
+ // Close popover if no results
632
+ useEffect(() => {
633
+ if (isPopoverOpen && !hasResults) {
634
+ setIsPopoverOpen(false);
216
635
  }
217
- if (e.key === 'Enter') {
218
- if (!props.allowsCustomValue) {
219
- if (state.isOpen) {
220
- // If there is a selected option then do nothing. It will be selected on Enter anyway.
221
- if (listBoxRef.current?.querySelector('li[aria-selected="true"]')) {
222
- return;
223
- }
224
- const option = [...state.collection][0]?.key;
225
- if (option && selectedKey !== option) {
226
- props.onSelectionChange?.(option);
227
- e.stopPropagation();
228
- e.preventDefault();
229
- }
636
+ }, [isPopoverOpen, hasResults]);
637
+ const ensureInitialFocus = useCallback(() => {
638
+ if (!shouldShowPopover)
639
+ return;
640
+ const listState = listStateRef.current;
641
+ if (!listState)
642
+ return;
643
+ const { selectionManager, collection, disabledKeys, lastFocusSourceRef } = listState;
644
+ if (!selectionManager || !collection)
645
+ return;
646
+ const collectFirstKey = () => {
647
+ for (const node of collection) {
648
+ if (node.type === 'item') {
649
+ if (!disabledKeys?.has(node.key))
650
+ return node.key;
230
651
  }
231
- else if (inputRef.current?.value &&
232
- ![...state.collection]
233
- .map((i) => i.textValue)
234
- .includes(inputRef.current?.value)) {
235
- // If the input value is not in the collection, we need to prevent the submitting of the form.
236
- // Also, we reset value manually.
237
- e.preventDefault();
238
- props.onSelectionChange?.(null);
652
+ else if (node.childNodes) {
653
+ for (const child of node.childNodes) {
654
+ if (child.type === 'item' && !disabledKeys?.has(child.key)) {
655
+ return child.key;
656
+ }
657
+ }
239
658
  }
240
- // If a custom value is allowed, we need to check if the input value is in the collection.
241
659
  }
242
- else if (props.allowsCustomValue) {
243
- const inputValue = inputRef?.current?.value;
244
- const item = [...state.collection].find((item) => item.textValue.toLowerCase() === inputValue?.toLowerCase());
245
- props.onSelectionChange?.(item ? item.key : inputRef?.current?.value ?? '');
246
- }
247
- }
248
- });
249
- let onBlur = useEvent((e) => {
250
- // If the input value is not in the collection, we need to reset the value.
251
- if (!props.allowsCustomValue &&
252
- inputRef.current?.value &&
253
- ![...state.collection]
254
- .map((i) => i.textValue)
255
- .includes(inputRef.current?.value)) {
256
- props.onSelectionChange?.(null);
660
+ return null;
661
+ };
662
+ if (lastFocusSourceRef)
663
+ lastFocusSourceRef.current = 'keyboard';
664
+ if (selectionManager.focusedKey == null) {
665
+ const keyToFocus = effectiveSelectedKey != null ? effectiveSelectedKey : collectFirstKey();
666
+ if (keyToFocus != null)
667
+ selectionManager.setFocusedKey(keyToFocus);
257
668
  }
258
- });
259
- useEffect(() => {
260
- inputRef.current?.addEventListener('keydown', onKeyPress, true);
261
- inputRef.current?.addEventListener('blur', onBlur, true);
262
- return () => {
263
- inputRef.current?.removeEventListener('keydown', onKeyPress, true);
264
- inputRef.current?.removeEventListener('blur', onBlur, true);
669
+ }, [shouldShowPopover, effectiveSelectedKey]);
670
+ useLayoutEffect(() => {
671
+ if (!shouldShowPopover)
672
+ return;
673
+ focusInitAttemptsRef.current = 0;
674
+ const tick = () => {
675
+ if (!shouldShowPopover)
676
+ return;
677
+ ensureInitialFocus();
678
+ focusInitAttemptsRef.current += 1;
679
+ // Try a few frames to wait for collection to mount
680
+ if (focusInitAttemptsRef.current < 8 &&
681
+ listStateRef.current?.selectionManager?.focusedKey == null) {
682
+ requestAnimationFrame(tick);
683
+ }
265
684
  };
266
- }, []);
267
- let allInputProps = useMemo(() => mergeProps(inputProps, hoverProps, focusProps), [inputProps, hoverProps, focusProps]);
268
- let comboBoxField = (_jsxs(ComboBoxWrapperElement, { ref: wrapperRef, qa: qa || 'ComboBox', mods: mods, styles: wrapperStyles, style: {
685
+ requestAnimationFrame(() => requestAnimationFrame(tick));
686
+ }, [shouldShowPopover, ensureInitialFocus]);
687
+ const comboBoxField = (_jsxs(ComboBoxWrapperElement, { ref: wrapperRef, qa: qa || 'ComboBox', mods: mods, styles: wrapperStyles, style: {
269
688
  zIndex: isFocused ? 1 : 'initial',
270
- }, "data-size": size, children: [prefix ? _jsx("div", { "data-element": "Prefix", children: prefix }) : null, _jsx(InputElement, { ref: inputRef, qa: "Input", autoFocus: autoFocus, "data-autofocus": autoFocus ? '' : undefined, ...allInputProps, autoComplete: autoComplete, styles: inputStyles, mods: mods, "data-size": size }), _jsxs("div", { "data-element": "Suffix", children: [suffixPosition === 'before' ? suffix : null, validationState || isLoading ? (_jsxs(_Fragment, { children: [validationState && !isLoading ? validation : null, isLoading ? _jsx(LoadingIcon, {}) : null] })) : null, suffixPosition === 'after' ? suffix : null, showClearButton && (_jsx(ItemAction, { icon: _jsx(CloseIcon, {}), size: size, theme: validationState === 'invalid' ? 'danger' : undefined, qa: "ComboBoxClearButton", "data-no-trigger": hideTrigger ? '' : undefined, onPress: clearValue })), !hideTrigger ? (_jsx(TriggerElement, { "data-popover-trigger": true, qa: "ComboBoxTrigger", ...mergeProps(buttonProps, triggerFocusProps, triggerHoverProps), ref: triggerRef, mods: {
271
- pressed: isTriggerPressed,
272
- focused: isTriggerFocused,
273
- hovered: isTriggerHovered,
689
+ }, "data-size": size, children: [prefix ? _jsx("div", { "data-element": "Prefix", children: prefix }) : null, _jsx(ComboBoxInput, { inputRef: inputRef, value: effectiveInputValue, placeholder: placeholder, isDisabled: isDisabled, isReadOnly: isReadOnly, autoFocus: autoFocus, size: size, mods: mods, inputStyles: inputStyles, keyboardProps: keyboardProps, focusProps: focusProps, isPopoverOpen: isPopoverOpen, hasResults: hasResults, comboBoxId: comboBoxId, listStateRef: listStateRef, onChange: handleInputChange, onFocus: handleInputFocus }), _jsxs("div", { "data-element": "Suffix", children: [suffixPosition === 'before' ? suffix : null, validationState || isLoading ? (_jsxs(_Fragment, { children: [validationState && !isLoading ? validation : null, isLoading ? _jsx(LoadingIcon, {}) : null] })) : null, suffixPosition === 'after' ? suffix : null, showClearButton && (_jsx(ItemAction, { icon: _jsx(CloseIcon, {}), size: size, theme: validationState === 'invalid' ? 'danger' : undefined, qa: "ComboBoxClearButton", "data-no-trigger": hideTrigger ? '' : undefined, onPress: clearValue })), !hideTrigger ? (_jsx(ItemAction, { ref: triggerRef, "data-popover-trigger": true, icon: _jsx(DownIcon, {}), qa: "ComboBoxTrigger", mods: {
690
+ pressed: isPopoverOpen,
274
691
  disabled: isDisabled,
275
692
  loading: isLoading,
276
- }, "data-size": size, isDisabled: isDisabled, styles: triggerStyles, children: _jsx(DownIcon, {}) })) : null] }), _jsx(OverlayWrapper, { isOpen: state.isOpen && !isDisabled, children: _jsx(ListBoxPopup, { ...listBoxProps, shouldUseVirtualFocus: true, listBoxRef: listBoxRef, popoverRef: popoverRef, overlayProps: overlayProps, placement: placement, state: state, listBoxStyles: listBoxStyles, overlayStyles: overlayStyles, optionStyles: optionStyles, minWidth: comboBoxWidth, triggerRef: triggerRef }) })] }));
277
- return wrapWithField(comboBoxField, ref, mergeProps({ ...props, styles }, { labelProps }));
278
- });
279
- const ComboBoxSectionComponent = Object.assign(BaseSection, {
280
- displayName: 'Section',
693
+ }, "data-size": size, isDisabled: isDisabled, styles: triggerStyles, onClick: () => {
694
+ if (!isDisabled) {
695
+ setIsPopoverOpen(!isPopoverOpen);
696
+ if (!isPopoverOpen) {
697
+ inputRef.current?.focus();
698
+ }
699
+ }
700
+ } })) : null] }), _jsx(ComboBoxOverlay, { isOpen: shouldShowPopover, triggerRef: wrapperRef, popoverRef: popoverRef, listBoxRef: listBoxRef, direction: direction, shouldFlip: shouldFlip, overlayOffset: overlayOffset, comboBoxWidth: comboBoxWidth, comboBoxId: comboBoxId, overlayStyles: overlayStyles, listBoxStyles: listBoxStyles, optionStyles: optionStyles, sectionStyles: sectionStyles, headingStyles: headingStyles, effectiveSelectedKey: effectiveSelectedKey, isDisabled: isDisabled, disabledKeys: props.disabledKeys, items: items, listStateRef: listStateRef, label: label, ariaLabel: props['aria-label'], onSelectionChange: handleSelectionChange, onClose: () => setIsPopoverOpen(false), children: filteredChildren })] }));
701
+ return wrapWithField(comboBoxField, ref, mergeProps({ ...props, styles }, {}));
281
702
  });
282
703
  ComboBox.Item = Item;
283
- ComboBox.Section = ComboBoxSectionComponent;
704
+ ComboBox.Section = BaseSection;
284
705
  Object.defineProperty(ComboBox, 'cubeInputType', {
285
706
  value: 'ComboBox',
286
707
  enumerable: false,