@cube-dev/ui-kit 0.64.1 → 0.65.1

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 (474) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/es/_internal/hooks/index.js +1 -1
  3. package/es/_internal/hooks/use-chained-callback.js +1 -1
  4. package/es/_internal/hooks/use-debounced-value.js +1 -1
  5. package/es/_internal/hooks/use-deprecation-warning.js +1 -1
  6. package/es/_internal/hooks/use-effect-once.js +1 -1
  7. package/es/_internal/hooks/use-event.js +1 -1
  8. package/es/_internal/hooks/use-is-first-render.js +1 -1
  9. package/es/_internal/hooks/use-sync-ref.js +1 -1
  10. package/es/_internal/hooks/use-timer/index.js +1 -1
  11. package/es/_internal/hooks/use-timer/timer.js +1 -1
  12. package/es/_internal/hooks/use-timer/use-timer.js +1 -1
  13. package/es/_internal/hooks/use-update-effect.js +1 -1
  14. package/es/_internal/hooks/use-warn.js +1 -1
  15. package/es/_internal/index.js +1 -1
  16. package/es/components/Block.js +1 -1
  17. package/es/components/GlobalStyles.js +1 -1
  18. package/es/components/GridProvider.js +1 -1
  19. package/es/components/HiddenInput.js +1 -1
  20. package/es/components/OpenTrasition.js +1 -1
  21. package/es/components/Root.js +1 -1
  22. package/es/components/actions/Action/Action.js +1 -1
  23. package/es/components/actions/Button/Button.js +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/index.js +1 -1
  27. package/es/components/actions/use-action.js +1 -1
  28. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  29. package/es/components/content/Alert/Alert.js +1 -1
  30. package/es/components/content/Alert/index.js +1 -1
  31. package/es/components/content/Alert/types.js +1 -1
  32. package/es/components/content/Alert/use-alert.js +1 -1
  33. package/es/components/content/Avatar/Avatar.js +1 -1
  34. package/es/components/content/Badge/Badge.js +1 -1
  35. package/es/components/content/Card/Card.js +1 -1
  36. package/es/components/content/Content.js +1 -1
  37. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  38. package/es/components/content/CopyPasteBlock/index.js +1 -1
  39. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  40. package/es/components/content/CopySnippet/index.js +1 -1
  41. package/es/components/content/Divider.js +1 -1
  42. package/es/components/content/Footer.js +1 -1
  43. package/es/components/content/Header.js +1 -1
  44. package/es/components/content/HotKeys/HotKeys.js +25 -0
  45. package/es/components/content/HotKeys/index.js +10 -0
  46. package/es/components/content/Paragraph.js +1 -1
  47. package/es/components/content/Placeholder/Placeholder.js +1 -1
  48. package/es/components/content/PrismCode/PrismCode.js +1 -1
  49. package/es/components/content/PrismCode/prismSetup.js +1 -1
  50. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  51. package/es/components/content/Result/Result.js +1 -1
  52. package/es/components/content/Skeleton/Skeleton.js +1 -1
  53. package/es/components/content/Tag/Tag.js +5 -4
  54. package/es/components/content/Text.js +1 -1
  55. package/es/components/content/Title.js +1 -1
  56. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  57. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  58. package/es/components/fields/Checkbox/context.js +1 -1
  59. package/es/components/fields/Checkbox/index.js +1 -1
  60. package/es/components/fields/ComboBox/ComboBox.js +1 -1
  61. package/es/components/fields/ComboBox/index.js +1 -1
  62. package/es/components/fields/DatePicker/DateInput.js +1 -1
  63. package/es/components/fields/DatePicker/DateInputBase.js +1 -1
  64. package/es/components/fields/DatePicker/DatePicker.js +1 -1
  65. package/es/components/fields/DatePicker/DatePickerButton.js +1 -1
  66. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  67. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  68. package/es/components/fields/DatePicker/DatePickerSegment.js +1 -1
  69. package/es/components/fields/DatePicker/DateRangePicker.js +1 -1
  70. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  71. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  72. package/es/components/fields/DatePicker/index.js +1 -1
  73. package/es/components/fields/DatePicker/intl.js +1 -1
  74. package/es/components/fields/DatePicker/parseDate.js +1 -1
  75. package/es/components/fields/DatePicker/props.js +1 -1
  76. package/es/components/fields/DatePicker/types.js +1 -1
  77. package/es/components/fields/DatePicker/utils.js +1 -1
  78. package/es/components/fields/FileInput/FileInput.js +1 -1
  79. package/es/components/fields/Input/Input.js +1 -1
  80. package/es/components/fields/Input/index.js +1 -1
  81. package/es/components/fields/ListBox/ListBox.js +138 -158
  82. package/es/components/fields/ListBox/index.js +1 -1
  83. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  84. package/es/components/fields/NumberInput/StepButton.js +1 -1
  85. package/es/components/fields/PasswordInput/PasswordInput.js +1 -1
  86. package/es/components/fields/RadioGroup/Radio.js +1 -1
  87. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  88. package/es/components/fields/RadioGroup/context.js +1 -1
  89. package/es/components/fields/RadioGroup/index.js +1 -1
  90. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  91. package/es/components/fields/SearchInput/index.js +1 -1
  92. package/es/components/fields/Select/Select.js +2 -2
  93. package/es/components/fields/Select/index.js +1 -1
  94. package/es/components/fields/Slider/Gradation.js +1 -1
  95. package/es/components/fields/Slider/Header.js +1 -1
  96. package/es/components/fields/Slider/RangeSlider.js +1 -1
  97. package/es/components/fields/Slider/Slider.js +1 -1
  98. package/es/components/fields/Slider/SliderBase.js +1 -1
  99. package/es/components/fields/Slider/SliderInput.js +1 -1
  100. package/es/components/fields/Slider/SliderThumb.js +1 -1
  101. package/es/components/fields/Slider/SliderTrack.js +1 -1
  102. package/es/components/fields/Slider/elements.js +1 -1
  103. package/es/components/fields/Slider/index.js +1 -1
  104. package/es/components/fields/Slider/types.js +1 -1
  105. package/es/components/fields/Switch/Switch.js +1 -1
  106. package/es/components/fields/Switch/index.js +1 -1
  107. package/es/components/fields/TextArea/TextArea.js +1 -1
  108. package/es/components/fields/TextArea/index.js +1 -1
  109. package/es/components/fields/TextInput/TextInput.js +1 -1
  110. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  111. package/es/components/fields/TextInput/index.js +1 -1
  112. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  113. package/es/components/fields/TextInputMapper/index.js +1 -1
  114. package/es/components/fields/index.js +1 -1
  115. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  116. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  117. package/es/components/form/FieldWrapper/index.js +1 -1
  118. package/es/components/form/FieldWrapper/types.js +1 -1
  119. package/es/components/form/Form/Field.js +1 -1
  120. package/es/components/form/Form/Form.js +1 -1
  121. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  122. package/es/components/form/Form/ResetButton/index.js +1 -1
  123. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  124. package/es/components/form/Form/SubmitButton/index.js +1 -1
  125. package/es/components/form/Form/SubmitError.js +1 -1
  126. package/es/components/form/Form/index.js +1 -1
  127. package/es/components/form/Form/types.js +1 -1
  128. package/es/components/form/Form/use-field/index.js +1 -1
  129. package/es/components/form/Form/use-field/types.js +1 -1
  130. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  131. package/es/components/form/Form/use-field/use-field.js +1 -1
  132. package/es/components/form/Form/use-form.js +1 -1
  133. package/es/components/form/Form/validation.js +1 -1
  134. package/es/components/form/Label.js +1 -1
  135. package/es/components/form/index.js +1 -1
  136. package/es/components/form/wrapper.js +1 -1
  137. package/es/components/layout/Flex.js +1 -1
  138. package/es/components/layout/Flow.js +1 -1
  139. package/es/components/layout/Grid.js +1 -1
  140. package/es/components/layout/Panel.js +1 -1
  141. package/es/components/layout/Prefix.js +1 -1
  142. package/es/components/layout/ResizablePanel.js +1 -1
  143. package/es/components/layout/Space.js +1 -1
  144. package/es/components/layout/Suffix.js +1 -1
  145. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  146. package/es/components/navigation/Link/Link.js +1 -1
  147. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  148. package/es/components/organisms/Modal/Modal.js +1 -1
  149. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  150. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  151. package/es/components/other/Calendar/Calendar.js +1 -1
  152. package/es/components/other/Calendar/CalendarCell.js +1 -1
  153. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  154. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  155. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  156. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  157. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  158. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  159. package/es/components/overlays/AlertDialog/index.js +1 -1
  160. package/es/components/overlays/AlertDialog/types.js +1 -1
  161. package/es/components/overlays/Dialog/Dialog.js +1 -1
  162. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  163. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  164. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  165. package/es/components/overlays/Dialog/context.js +1 -1
  166. package/es/components/overlays/Dialog/dialog-container.js +1 -1
  167. package/es/components/overlays/Dialog/index.js +1 -1
  168. package/es/components/overlays/Modal/Modal.js +1 -1
  169. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  170. package/es/components/overlays/Modal/Overlay.js +1 -1
  171. package/es/components/overlays/Modal/Popover.js +1 -1
  172. package/es/components/overlays/Modal/Tray.js +1 -1
  173. package/es/components/overlays/Modal/Underlay.js +1 -1
  174. package/es/components/overlays/Modal/index.js +1 -1
  175. package/es/components/overlays/Modal/types.js +1 -1
  176. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  177. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  178. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  179. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  180. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  181. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  182. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  183. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  184. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  185. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  186. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  187. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  188. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  189. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  190. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  191. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  192. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  193. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +11 -0
  194. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +3 -3
  195. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +3 -2
  196. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  197. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  198. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  199. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  200. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  201. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  202. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  203. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  204. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  205. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  206. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +2 -2
  207. package/es/components/overlays/NewNotifications/index.js +2 -2
  208. package/es/components/overlays/NewNotifications/types.js +1 -1
  209. package/es/components/overlays/Notification/Notification.js +1 -1
  210. package/es/components/overlays/OverlayWrapper.js +1 -1
  211. package/es/components/overlays/Toasts/Toast.js +1 -1
  212. package/es/components/overlays/Toasts/index.js +1 -1
  213. package/es/components/overlays/Toasts/types.js +1 -1
  214. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  215. package/es/components/overlays/Tooltip/Tooltip.js +1 -1
  216. package/es/components/overlays/Tooltip/TooltipProvider.js +1 -1
  217. package/es/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  218. package/es/components/overlays/Tooltip/context.js +1 -1
  219. package/es/components/overlays/Tooltip/index.js +1 -1
  220. package/es/components/pickers/Menu/Menu.js +39 -33
  221. package/es/components/pickers/Menu/MenuButton.js +4 -5
  222. package/es/components/pickers/Menu/MenuItem.js +59 -20
  223. package/es/components/pickers/Menu/MenuSection.js +12 -4
  224. package/es/components/pickers/Menu/MenuTrigger.js +1 -1
  225. package/es/components/pickers/Menu/context.js +1 -1
  226. package/es/components/pickers/Menu/styled.js +55 -12
  227. package/es/components/portal/Portal.js +1 -1
  228. package/es/components/portal/PortalProvider.js +1 -1
  229. package/es/components/portal/index.js +1 -1
  230. package/es/components/portal/storybook/templates/CustomRoot.js +1 -1
  231. package/es/components/portal/storybook/templates/PortalOrder.js +1 -1
  232. package/es/components/portal/storybook/templates/basic.js +1 -1
  233. package/es/components/portal/storybook/templates/index.js +1 -1
  234. package/es/components/portal/types.js +1 -1
  235. package/es/components/portal/usePortal.js +1 -1
  236. package/es/components/shared/InvalidIcon.js +1 -1
  237. package/es/components/shared/ValidIcon.js +1 -1
  238. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  239. package/es/components/status/LoadingAnimation/index.js +1 -1
  240. package/es/components/status/Spin/Cube.js +1 -1
  241. package/es/components/status/Spin/InternalSpinner.js +1 -1
  242. package/es/components/status/Spin/Spin.js +1 -1
  243. package/es/components/status/Spin/SpinsContainer.js +1 -1
  244. package/es/components/status/Spin/index.js +1 -1
  245. package/es/components/status/Spin/types.js +1 -1
  246. package/es/components/status/index.js +1 -1
  247. package/es/data/themes.js +1 -1
  248. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  249. package/es/icons/AdjustmentsIcon.js +1 -1
  250. package/es/icons/AiIcon.js +1 -1
  251. package/es/icons/AreaChartIcon.js +1 -1
  252. package/es/icons/BackwardIcon.js +1 -1
  253. package/es/icons/BarChartIcon.js +1 -1
  254. package/es/icons/BellFilledIcon.js +1 -1
  255. package/es/icons/BellIcon.js +1 -1
  256. package/es/icons/BooleanIcon.js +1 -1
  257. package/es/icons/CalendarEditIcon.js +1 -1
  258. package/es/icons/CalendarIcon.js +1 -1
  259. package/es/icons/CaretDownIcon.js +1 -1
  260. package/es/icons/CaretUpIcon.js +1 -1
  261. package/es/icons/ChartAreaStackedIcon.js +12 -0
  262. package/es/icons/ChartAreaStackedPercentageIcon.js +12 -0
  263. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  264. package/es/icons/ChartBarGroupedIcon.js +1 -1
  265. package/es/icons/ChartBarHorizontalIcon.js +2 -2
  266. package/es/icons/ChartBarLineIcon.js +1 -1
  267. package/es/icons/ChartBarStackedHorizontalIcon.js +2 -2
  268. package/es/icons/ChartBarStackedIcon.js +1 -1
  269. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +2 -2
  270. package/es/icons/ChartBarStackedPercentageIcon.js +2 -2
  271. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  272. package/es/icons/ChartBoxPlotIcon.js +1 -1
  273. package/es/icons/ChartBubbleIcon.js +1 -1
  274. package/es/icons/ChartDonut2Icon.js +1 -1
  275. package/es/icons/ChartFunnelIcon.js +12 -0
  276. package/es/icons/ChartPie2Icon.js +1 -1
  277. package/es/icons/ChartScatterIcon.js +1 -1
  278. package/es/icons/CheckCircleFilledIcon.js +1 -1
  279. package/es/icons/CheckCircleIcon.js +1 -1
  280. package/es/icons/CheckIcon.js +1 -1
  281. package/es/icons/CircleFilledIcon.js +1 -1
  282. package/es/icons/ClearIcon.js +1 -1
  283. package/es/icons/CloseCircleFilledIcon.js +1 -1
  284. package/es/icons/CloseCircleIcon.js +1 -1
  285. package/es/icons/CloseIcon.js +1 -1
  286. package/es/icons/CodeIcon.js +1 -1
  287. package/es/icons/CopyIcon.js +1 -1
  288. package/es/icons/CountIcon.js +1 -1
  289. package/es/icons/CubeIcon.js +1 -1
  290. package/es/icons/DangerIcon.js +1 -1
  291. package/es/icons/DashboardIcon.js +1 -1
  292. package/es/icons/DatabaseIcon.js +1 -1
  293. package/es/icons/DirectionIcon.js +1 -1
  294. package/es/icons/DonutIcon.js +1 -1
  295. package/es/icons/DownIcon.js +1 -1
  296. package/es/icons/EditIcon.js +1 -1
  297. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  298. package/es/icons/ExclamationCircleIcon.js +1 -1
  299. package/es/icons/ExclamationIcon.js +1 -1
  300. package/es/icons/EyeIcon.js +1 -1
  301. package/es/icons/EyeInvisibleIcon.js +1 -1
  302. package/es/icons/FilterIcon.js +1 -1
  303. package/es/icons/FolderFilledIcon.js +1 -1
  304. package/es/icons/FolderIcon.js +1 -1
  305. package/es/icons/FolderOpenFilledIcon.js +1 -1
  306. package/es/icons/FolderOpenIcon.js +1 -1
  307. package/es/icons/ForwardIcon.js +1 -1
  308. package/es/icons/HierarchyIcon.js +1 -1
  309. package/es/icons/Icon.js +1 -1
  310. package/es/icons/InfoCircleIcon.js +1 -1
  311. package/es/icons/InfoIcon.js +1 -1
  312. package/es/icons/KeyIcon.js +1 -1
  313. package/es/icons/LeftIcon.js +1 -1
  314. package/es/icons/LineChartIcon.js +1 -1
  315. package/es/icons/LoadingIcon.js +1 -1
  316. package/es/icons/LockFilledIcon.js +1 -1
  317. package/es/icons/LockIcon.js +1 -1
  318. package/es/icons/MoreIcon.js +1 -1
  319. package/es/icons/NotAllowedIcon.js +1 -1
  320. package/es/icons/NumberIcon.js +1 -1
  321. package/es/icons/PauseCircleFilledIcon.js +1 -1
  322. package/es/icons/PauseCircleIcon.js +1 -1
  323. package/es/icons/PauseIcon.js +1 -1
  324. package/es/icons/PieChartIcon.js +1 -1
  325. package/es/icons/PlayCircleIcon.js +1 -1
  326. package/es/icons/PlayIcon.js +1 -1
  327. package/es/icons/PlusIcon.js +1 -1
  328. package/es/icons/ReloadIcon.js +1 -1
  329. package/es/icons/ReportIcon.js +1 -1
  330. package/es/icons/ReturnIcon.js +1 -1
  331. package/es/icons/RightIcon.js +1 -1
  332. package/es/icons/SchemeIcon.js +1 -1
  333. package/es/icons/SearchIcon.js +1 -1
  334. package/es/icons/SettingsIcon.js +1 -1
  335. package/es/icons/ShieldFilledIcon.js +1 -1
  336. package/es/icons/ShieldIcon.js +1 -1
  337. package/es/icons/SlashIcon.js +1 -1
  338. package/es/icons/SparklesIcon.js +1 -1
  339. package/es/icons/SqlIcon.js +1 -1
  340. package/es/icons/StatsIcon.js +1 -1
  341. package/es/icons/StopIcon.js +1 -1
  342. package/es/icons/StringIcon.js +1 -1
  343. package/es/icons/SwitchIcon.js +1 -1
  344. package/es/icons/TableIcon.js +1 -1
  345. package/es/icons/ThumbsDownIcon.js +1 -1
  346. package/es/icons/ThumbsUpIcon.js +1 -1
  347. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  348. package/es/icons/ThunderboltFilledIcon.js +1 -1
  349. package/es/icons/ThunderboltIcon.js +1 -1
  350. package/es/icons/TimeIcon.js +1 -1
  351. package/es/icons/UnlockIcon.js +1 -1
  352. package/es/icons/UpIcon.js +1 -1
  353. package/es/icons/UserGroupIcon.js +1 -1
  354. package/es/icons/UserIcon.js +1 -1
  355. package/es/icons/UserLockIcon.js +1 -1
  356. package/es/icons/ViewIcon.js +1 -1
  357. package/es/icons/WarningFilledIcon.js +1 -1
  358. package/es/icons/WarningIcon.js +1 -1
  359. package/es/icons/add-new-icon.js +1 -1
  360. package/es/icons/index.js +4 -1
  361. package/es/icons/wrap-icon.js +1 -1
  362. package/es/index.js +2 -1
  363. package/es/provider.js +1 -1
  364. package/es/providers/TrackingProvider.js +1 -1
  365. package/es/services/notification.js +1 -1
  366. package/es/shared/form.js +1 -1
  367. package/es/shared/index.js +1 -1
  368. package/es/stories/Form.legacy-stories.js +1 -1
  369. package/es/stories/FormFieldArgs.js +1 -1
  370. package/es/stories/Layout.stories.js +1 -1
  371. package/es/stories/Tasty.stories.js +1 -1
  372. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  373. package/es/stories/components/DialogFormApp.js +1 -1
  374. package/es/stories/components/StyledButton.js +1 -1
  375. package/es/stories/lists/baseProps.js +1 -1
  376. package/es/tasty/index.js +1 -1
  377. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  378. package/es/tasty/styles/align.js +1 -1
  379. package/es/tasty/styles/border.js +1 -1
  380. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  381. package/es/tasty/styles/color.js +1 -1
  382. package/es/tasty/styles/createStyle.js +1 -1
  383. package/es/tasty/styles/dimension.js +1 -1
  384. package/es/tasty/styles/display.js +1 -1
  385. package/es/tasty/styles/fade.js +1 -1
  386. package/es/tasty/styles/fill.js +1 -1
  387. package/es/tasty/styles/flow.js +1 -1
  388. package/es/tasty/styles/font.js +1 -1
  389. package/es/tasty/styles/fontStyle.js +1 -1
  390. package/es/tasty/styles/gap.js +1 -1
  391. package/es/tasty/styles/groupRadius.js +1 -1
  392. package/es/tasty/styles/height.js +1 -1
  393. package/es/tasty/styles/index.js +1 -1
  394. package/es/tasty/styles/inset.js +1 -1
  395. package/es/tasty/styles/justify.js +1 -1
  396. package/es/tasty/styles/list.js +1 -1
  397. package/es/tasty/styles/margin.js +1 -1
  398. package/es/tasty/styles/marginBlock.js +1 -1
  399. package/es/tasty/styles/marginInline.js +1 -1
  400. package/es/tasty/styles/outline.js +1 -1
  401. package/es/tasty/styles/padding.js +1 -1
  402. package/es/tasty/styles/paddingBlock.js +1 -1
  403. package/es/tasty/styles/paddingInline.js +1 -1
  404. package/es/tasty/styles/place.js +1 -1
  405. package/es/tasty/styles/predefined.js +1 -1
  406. package/es/tasty/styles/preset.js +1 -1
  407. package/es/tasty/styles/radius.js +1 -1
  408. package/es/tasty/styles/reset.js +1 -1
  409. package/es/tasty/styles/scrollbar.js +1 -1
  410. package/es/tasty/styles/shadow.js +1 -1
  411. package/es/tasty/styles/styledScrollbar.js +1 -1
  412. package/es/tasty/styles/transition.js +1 -1
  413. package/es/tasty/styles/types.js +1 -1
  414. package/es/tasty/styles/width.js +1 -1
  415. package/es/tasty/tasty.js +1 -1
  416. package/es/tasty/types.js +1 -1
  417. package/es/tasty/utils/cache-wrapper.js +1 -1
  418. package/es/tasty/utils/case-converter.js +1 -1
  419. package/es/tasty/utils/colors.js +1 -1
  420. package/es/tasty/utils/dotize.js +1 -1
  421. package/es/tasty/utils/filterBaseProps.js +4 -9
  422. package/es/tasty/utils/getDisplayName.js +1 -1
  423. package/es/tasty/utils/getModCombinations.js +1 -1
  424. package/es/tasty/utils/mergeStyles.js +1 -1
  425. package/es/tasty/utils/modAttrs.js +1 -1
  426. package/es/tasty/utils/renderStyles.js +1 -1
  427. package/es/tasty/utils/responsive.js +1 -1
  428. package/es/tasty/utils/string.js +1 -1
  429. package/es/tasty/utils/styles.js +1 -1
  430. package/es/tasty/utils/warnings.js +1 -1
  431. package/es/tokens.js +3 -2
  432. package/es/type-checks.js +1 -1
  433. package/es/utils/ResizeSensor.js +1 -1
  434. package/es/utils/modules.js +1 -1
  435. package/es/utils/promise.js +1 -1
  436. package/es/utils/random.js +1 -1
  437. package/es/utils/range.js +1 -1
  438. package/es/utils/react/Slots.js +1 -1
  439. package/es/utils/react/chain.js +1 -1
  440. package/es/utils/react/index.js +1 -1
  441. package/es/utils/react/interactions.js +1 -1
  442. package/es/utils/react/isTextOnly.js +1 -1
  443. package/es/utils/react/mapProps.js +1 -1
  444. package/es/utils/react/mergeProps.js +1 -1
  445. package/es/utils/react/nullableValue.js +1 -1
  446. package/es/utils/react/useCombinedRefs.js +1 -1
  447. package/es/utils/react/useId.js +1 -1
  448. package/es/utils/react/useIsDarwin.js +42 -0
  449. package/es/utils/react/useKeySymbols.js +81 -0
  450. package/es/utils/react/useLayoutEffect.js +1 -1
  451. package/es/utils/react/useQaProps.js +1 -1
  452. package/es/utils/react/useViewportSize.js +1 -1
  453. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  454. package/es/utils/transitions.js +1 -1
  455. package/es/utils/tree.js +1 -1
  456. package/es/utils/warnings.js +1 -1
  457. package/es/version.js +2 -2
  458. package/package.json +5 -1
  459. package/types/components/content/HotKeys/HotKeys.d.ts +6 -0
  460. package/types/components/content/HotKeys/index.d.ts +2 -0
  461. package/types/components/fields/ListBox/ListBox.d.ts +3 -1
  462. package/types/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.d.ts +5 -0
  463. package/types/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.d.ts +0 -5
  464. package/types/components/overlays/NewNotifications/NotificationsContext/index.d.ts +2 -1
  465. package/types/components/overlays/NewNotifications/index.d.ts +1 -1
  466. package/types/components/pickers/Menu/Menu.d.ts +27 -12
  467. package/types/components/pickers/Menu/MenuItem.d.ts +1 -1
  468. package/types/icons/ChartAreaStackedIcon.d.ts +4 -0
  469. package/types/icons/ChartAreaStackedPercentageIcon.d.ts +4 -0
  470. package/types/icons/ChartFunnelIcon.d.ts +4 -0
  471. package/types/icons/index.d.ts +3 -0
  472. package/types/index.d.ts +1 -0
  473. package/types/utils/react/useIsDarwin.d.ts +12 -0
  474. package/types/utils/react/useKeySymbols.d.ts +9 -0
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,19 +1,20 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
8
8
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
- import { Children, cloneElement, forwardRef, isValidElement, useEffect, useMemo, useRef, useState, } from 'react';
10
- import { useFilter, useListBox, useListBoxSection, useOption, } from 'react-aria';
9
+ import { forwardRef, useCallback, useMemo, useRef, useState, } from 'react';
10
+ import { useFilter, useKeyboard, useListBox, useListBoxSection, useOption, } from 'react-aria';
11
11
  import { Section as BaseSection, Item, useListState } from 'react-stately';
12
12
  import { LoadingIcon, SearchIcon } from '../../../icons';
13
13
  import { useProviderProps } from '../../../provider';
14
14
  import { BASE_STYLES, COLOR_STYLES, extractStyles, OUTER_STYLES, tasty, } from '../../../tasty';
15
15
  import { mergeProps, modAttrs, useCombinedRefs } from '../../../utils/react';
16
16
  import { useFocus } from '../../../utils/react/interactions';
17
+ import { Block } from '../../Block';
17
18
  import { useFieldProps, useFormProps, wrapWithField } from '../../form';
18
19
  import { DEFAULT_INPUT_STYLES, INPUT_WRAPPER_STYLES, } from '../TextInput/TextInputBase';
19
20
  const ListBoxWrapperElement = tasty({
@@ -182,74 +183,51 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
182
183
  return fieldProps;
183
184
  },
184
185
  });
185
- let { qa, label, extra, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, isSearchable = false, searchPlaceholder = 'Search...', autoFocus, filter, searchInputStyles, listStyles, optionStyles, sectionStyles, headingStyles, searchInputRef, listRef, message, description, styles, labelSuffix, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, onSelectionChange, ...otherProps } = props;
186
+ let { qa, label, extra, labelStyles, isRequired, necessityIndicator, validationState, isDisabled, isLoading, isSearchable = false, searchPlaceholder = 'Search...', autoFocus, filter, emptyLabel, searchInputStyles, listStyles, optionStyles, sectionStyles, headingStyles, searchInputRef, listRef, message, description, styles, labelSuffix, selectedKey, defaultSelectedKey, selectedKeys, defaultSelectedKeys, onSelectionChange, ...otherProps } = props;
186
187
  const [searchValue, setSearchValue] = useState('');
187
188
  const { contains } = useFilter({ sensitivity: 'base' });
188
- // Create filtered children based on search
189
- const filteredChildren = useMemo(() => {
190
- if (!isSearchable || !searchValue.trim() || !props.children) {
191
- return props.children;
189
+ // Choose the text filter function: user-provided `filter` prop (if any)
190
+ // or the default `contains` helper from `useFilter`.
191
+ const textFilterFn = useMemo(() => filter || contains, [filter, contains]);
192
+ // Collection-level filter function expected by `useListState`.
193
+ // It converts the text filter (textValue, searchValue) ⟶ boolean
194
+ // into the shape `(nodes) => Iterable<Node<T>>`.
195
+ // The current `searchValue` is captured in the closure – every re-render
196
+ // produces a new function so React Stately updates the collection when the
197
+ // search term changes.
198
+ const collectionFilter = useCallback((nodes) => {
199
+ const term = searchValue.trim();
200
+ // If there is no search term, return nodes untouched to avoid
201
+ // unnecessary object allocations.
202
+ if (!term) {
203
+ return nodes;
192
204
  }
193
- const filterFn = filter || contains;
194
- // Returns `true` if the given element's text value matches the search.
195
- const filterChild = (child) => {
196
- if (!isValidElement(child))
197
- return false;
198
- const { textValue, children } = child.props;
199
- // Prefer an explicit textValue prop (React Aria's Item), then children, then key.
200
- let candidate = '';
201
- if (typeof textValue === 'string') {
202
- candidate = textValue;
203
- }
204
- else if (typeof children === 'string') {
205
- candidate = children;
206
- }
207
- else if (Array.isArray(children)) {
208
- candidate = children.join(' ');
209
- }
210
- else if (child.key != null) {
211
- candidate = String(child.key);
205
+ // Recursive helper to filter sections and items.
206
+ const filterNodes = (iter) => {
207
+ const result = [];
208
+ for (const node of iter) {
209
+ if (node.type === 'section') {
210
+ const filteredChildren = filterNodes(node.childNodes);
211
+ if (filteredChildren.length) {
212
+ // Preserve the original node but replace `childNodes` with the
213
+ // filtered iterable so that React-Stately can still traverse it.
214
+ result.push({
215
+ ...node,
216
+ childNodes: filteredChildren,
217
+ });
218
+ }
219
+ }
220
+ else {
221
+ const text = node.textValue ?? String(node.rendered ?? '');
222
+ if (textFilterFn(text, term)) {
223
+ result.push(node);
224
+ }
225
+ }
212
226
  }
213
- return filterFn(candidate, searchValue);
214
- };
215
- // Filters a Section element and returns a cloned element with only the matching children.
216
- const filterSection = (section) => {
217
- if (!isValidElement(section))
218
- return null;
219
- const childrenArray = Children.toArray(section.props.children);
220
- const filteredSectionChildren = childrenArray.filter(filterChild);
221
- if (filteredSectionChildren.length === 0)
222
- return null;
223
- return cloneElement(section, { children: filteredSectionChildren });
227
+ return result;
224
228
  };
225
- const childrenArray = Children.toArray(props.children);
226
- const result = childrenArray
227
- .map((child) => {
228
- if (isValidElement(child) &&
229
- (child.type === BaseSection || child.props?.title)) {
230
- return filterSection(child);
231
- }
232
- return filterChild(child) ? child : null;
233
- })
234
- .filter(Boolean);
235
- return result.length === 0 ? null : result;
236
- }, [isSearchable, searchValue, props.children, filter, contains]);
237
- // Create filtered items based on search
238
- const filteredItems = useMemo(() => {
239
- if (!isSearchable || !searchValue.trim()) {
240
- return props.items;
241
- }
242
- const filterFn = filter || contains;
243
- if (props.items) {
244
- return Array.from(props.items).filter((item) => {
245
- const textValue = typeof item === 'string'
246
- ? item
247
- : item?.textValue || item?.name || String(item);
248
- return filterFn(textValue, searchValue);
249
- });
250
- }
251
- return undefined;
252
- }, [isSearchable, searchValue, props.items, filter, contains]);
229
+ return filterNodes(nodes);
230
+ }, [searchValue, textFilterFn]);
253
231
  // Wrap onSelectionChange to prevent selection when disabled and handle React Aria's Set format
254
232
  const externalSelectionHandler = onSelectionChange || props.onChange;
255
233
  const wrappedOnSelectionChange = useMemo(() => {
@@ -281,8 +259,7 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
281
259
  // Prepare props for useListState with correct selection props
282
260
  const listStateProps = {
283
261
  ...props,
284
- items: filteredItems,
285
- children: filteredChildren,
262
+ filter: collectionFilter,
286
263
  onSelectionChange: wrappedOnSelectionChange,
287
264
  isDisabled,
288
265
  selectionMode: props.selectionMode || 'single',
@@ -304,36 +281,21 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
304
281
  delete listStateProps.defaultSelectedKey;
305
282
  }
306
283
  else {
284
+ // For single-selection we convert the scalar key props that our public
285
+ // API exposes into the Set-based props that React Stately expects.
307
286
  if (selectedKey !== undefined) {
308
- listStateProps.selectedKey = selectedKey;
287
+ listStateProps.selectedKeys =
288
+ selectedKey == null ? new Set() : new Set([selectedKey]);
309
289
  }
310
290
  if (defaultSelectedKey !== undefined) {
311
- // useListState expects a Set for uncontrolled selections, even in single-selection mode
312
- // so convert the provided key into a Set. Passing an empty Set means no default selection.
313
291
  listStateProps.defaultSelectedKeys =
314
292
  defaultSelectedKey == null ? new Set() : new Set([defaultSelectedKey]);
315
293
  }
316
- // Remove set-based props if any
317
- delete listStateProps.selectedKeys;
294
+ // Remove the single-value props so we don't pass unsupported keys through.
295
+ delete listStateProps.selectedKey;
318
296
  delete listStateProps.defaultSelectedKey;
319
297
  }
320
298
  const listState = useListState(listStateProps);
321
- // Manually sync controlled selection if needed
322
- useEffect(() => {
323
- if (selectedKey !== undefined) {
324
- const currentSelection = listState.selectionManager.selectedKeys;
325
- const expectedSelection = selectedKey !== null ? new Set([selectedKey]) : new Set();
326
- // Check if the current selection matches the expected selection
327
- const currentKeys = Array.from(currentSelection);
328
- const expectedKeys = Array.from(expectedSelection);
329
- const selectionChanged = currentKeys.length !== expectedKeys.length ||
330
- currentKeys.some((key) => !expectedSelection.has(key)) ||
331
- expectedKeys.some((key) => !currentSelection.has(key));
332
- if (selectionChanged) {
333
- listState.selectionManager.setSelectedKeys(expectedSelection);
334
- }
335
- }
336
- }, [selectedKey, listState.selectionManager]);
337
299
  styles = extractStyles(otherProps, PROP_STYLES, styles);
338
300
  ref = useCombinedRefs(ref);
339
301
  searchInputRef = useCombinedRefs(searchInputRef);
@@ -347,6 +309,78 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
347
309
  }, listState, listRef);
348
310
  const { isFocused, focusProps } = useFocus({ isDisabled });
349
311
  const isInvalid = validationState === 'invalid';
312
+ // Keyboard navigation handler for search input
313
+ const { keyboardProps } = useKeyboard({
314
+ onKeyDown: (e) => {
315
+ if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
316
+ e.preventDefault();
317
+ const isArrowDown = e.key === 'ArrowDown';
318
+ const { selectionManager, collection } = listState;
319
+ const currentKey = selectionManager.focusedKey;
320
+ // Helper function to find next selectable item (skip section headers and disabled items)
321
+ const findNextSelectableKey = (startKey, direction) => {
322
+ let nextKey = startKey;
323
+ const keyGetter = direction === 'forward'
324
+ ? collection.getKeyAfter.bind(collection)
325
+ : collection.getKeyBefore.bind(collection);
326
+ while (nextKey != null) {
327
+ const item = collection.getItem(nextKey);
328
+ // Use SelectionManager's canSelectItem method for proper validation
329
+ if (item &&
330
+ item.type !== 'section' &&
331
+ selectionManager.canSelectItem(nextKey)) {
332
+ return nextKey;
333
+ }
334
+ nextKey = keyGetter(nextKey);
335
+ }
336
+ return null;
337
+ };
338
+ // Helper function to find first/last selectable item
339
+ const findFirstLastSelectableKey = (direction) => {
340
+ const allKeys = Array.from(collection.getKeys());
341
+ const keysToCheck = direction === 'forward' ? allKeys : allKeys.reverse();
342
+ for (const key of keysToCheck) {
343
+ const item = collection.getItem(key);
344
+ if (item &&
345
+ item.type !== 'section' &&
346
+ selectionManager.canSelectItem(key)) {
347
+ return key;
348
+ }
349
+ }
350
+ return null;
351
+ };
352
+ let nextKey = null;
353
+ const direction = isArrowDown ? 'forward' : 'backward';
354
+ if (currentKey == null) {
355
+ // No current focus, find first/last selectable item
356
+ nextKey = findFirstLastSelectableKey(direction);
357
+ }
358
+ else {
359
+ // Find next selectable item from current position
360
+ const candidateKey = direction === 'forward'
361
+ ? collection.getKeyAfter(currentKey)
362
+ : collection.getKeyBefore(currentKey);
363
+ nextKey = findNextSelectableKey(candidateKey, direction);
364
+ // If no next key found and focus wrapping is enabled, wrap to first/last selectable item
365
+ if (nextKey == null) {
366
+ nextKey = findFirstLastSelectableKey(direction);
367
+ }
368
+ }
369
+ if (nextKey != null) {
370
+ selectionManager.setFocusedKey(nextKey);
371
+ }
372
+ }
373
+ else if (e.key === 'Enter' || (e.key === ' ' && !searchValue.trim())) {
374
+ const focusedKey = listState.selectionManager.focusedKey;
375
+ if (focusedKey != null) {
376
+ e.preventDefault();
377
+ // Use the SelectionManager's select method which handles all selection logic
378
+ // including single vs multiple selection modes and modifier keys
379
+ listState.selectionManager.select(focusedKey, e);
380
+ }
381
+ }
382
+ },
383
+ });
350
384
  const mods = useMemo(() => ({
351
385
  invalid: isInvalid,
352
386
  valid: validationState === 'valid',
@@ -362,74 +396,13 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
362
396
  isLoading,
363
397
  isSearchable,
364
398
  ]);
365
- const searchInput = isSearchable ? (_jsxs(SearchWrapperElement, { mods: mods, "data-size": "small", children: [_jsx(SearchInputElement, { ref: searchInputRef, "data-is-prefix": true, type: "search", placeholder: searchPlaceholder, value: searchValue, disabled: isDisabled, autoFocus: autoFocus && isSearchable, "data-autofocus": autoFocus && isSearchable ? '' : undefined, styles: searchInputStyles, "data-size": "small", "aria-controls": listBoxProps.id, "aria-activedescendant": listState.selectionManager.focusedKey != null
399
+ const searchInput = isSearchable ? (_jsxs(SearchWrapperElement, { mods: mods, "data-size": "small", children: [_jsx(SearchInputElement, { ref: searchInputRef, "data-is-prefix": true, type: "search", placeholder: searchPlaceholder, value: searchValue, disabled: isDisabled, autoFocus: autoFocus && isSearchable, "data-autofocus": autoFocus ? '' : undefined, styles: searchInputStyles, "data-size": "small", "aria-controls": listBoxProps.id, "aria-activedescendant": listState.selectionManager.focusedKey != null
366
400
  ? `${listBoxProps.id}-option-${listState.selectionManager.focusedKey}`
367
- : undefined, onChange: (e) => setSearchValue(e.target.value), onKeyDown: (e) => {
368
- if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
369
- e.preventDefault();
370
- const isArrowDown = e.key === 'ArrowDown';
371
- const keyGetter = isArrowDown
372
- ? listState.collection.getKeyAfter.bind(listState.collection)
373
- : listState.collection.getKeyBefore.bind(listState.collection);
374
- // Helper function to find next selectable item (skip section headers)
375
- const findNextSelectableKey = (startKey) => {
376
- let nextKey = startKey;
377
- // Keep looking for a selectable item (not a section header)
378
- while (nextKey != null) {
379
- const item = listState.collection.getItem(nextKey);
380
- if (item && item.type !== 'section') {
381
- return nextKey;
382
- }
383
- nextKey = keyGetter(nextKey);
384
- }
385
- return null;
386
- };
387
- // Helper function to find first/last selectable item
388
- const findFirstLastSelectableKey = () => {
389
- const allKeys = Array.from(listState.collection.getKeys());
390
- const keysToCheck = isArrowDown ? allKeys : allKeys.reverse();
391
- for (const key of keysToCheck) {
392
- const item = listState.collection.getItem(key);
393
- if (item && item.type !== 'section') {
394
- return key;
395
- }
396
- }
397
- return null;
398
- };
399
- let nextKey;
400
- const currentKey = listState.selectionManager.focusedKey;
401
- if (currentKey == null) {
402
- // No current focus, find first/last selectable item
403
- nextKey = findFirstLastSelectableKey();
404
- }
405
- else {
406
- // Find next selectable item from current position
407
- const candidateKey = keyGetter(currentKey);
408
- nextKey = findNextSelectableKey(candidateKey);
409
- // If no next key found, wrap to first/last selectable item
410
- if (nextKey == null) {
411
- nextKey = findFirstLastSelectableKey();
412
- }
413
- }
414
- if (nextKey != null) {
415
- listState.selectionManager.setFocusedKey(nextKey);
416
- }
417
- }
418
- else if (e.key === 'Enter' ||
419
- (e.key === ' ' && props.selectionMode === 'multiple')) {
420
- const focusedKey = listState.selectionManager.focusedKey;
421
- if (focusedKey != null) {
422
- e.preventDefault();
423
- if (props.selectionMode === 'multiple') {
424
- listState.selectionManager.toggleSelection(focusedKey);
425
- }
426
- else {
427
- listState.selectionManager.select(focusedKey);
428
- }
429
- }
430
- }
431
- }, ...modAttrs(mods) }), _jsx("div", { "data-element": "Prefix", children: _jsx("div", { "data-element": "InputIcon", children: isLoading ? _jsx(LoadingIcon, {}) : _jsx(SearchIcon, {}) }) })] })) : null;
432
- const listBoxField = (_jsxs(ListBoxWrapperElement, { ref: ref, qa: qa || 'ListBox', ...modAttrs(mods), styles: styles, ...focusProps, children: [searchInput, _jsx(ListElement, { ...listBoxProps, ref: listRef, styles: listStyles, "aria-disabled": isDisabled || undefined, children: (() => {
401
+ : undefined, onChange: (e) => {
402
+ const value = e.target.value;
403
+ setSearchValue(value);
404
+ }, ...keyboardProps, ...modAttrs(mods) }), _jsx("div", { "data-element": "Prefix", children: _jsx("div", { "data-element": "InputIcon", children: isLoading ? _jsx(LoadingIcon, {}) : _jsx(SearchIcon, {}) }) })] })) : null;
405
+ const listBoxField = (_jsxs(ListBoxWrapperElement, { ref: ref, qa: qa || 'ListBox', ...modAttrs(mods), styles: styles, ...focusProps, children: [searchInput, _jsx(ListElement, { ...listBoxProps, ref: listRef, styles: listStyles, "aria-disabled": isDisabled || undefined, ...(!isSearchable ? keyboardProps : {}), children: (() => {
433
406
  const renderedItems = [];
434
407
  let isFirstSection = true;
435
408
  for (const item of listState.collection) {
@@ -444,6 +417,12 @@ export const ListBox = forwardRef(function ListBox(props, ref) {
444
417
  renderedItems.push(_jsx(Option, { item: item, state: listState, styles: optionStyles, isParentDisabled: isDisabled, validationState: validationState }, item.key));
445
418
  }
446
419
  }
420
+ // Show "No results found" message when there are no items after filtration
421
+ if (renderedItems.length === 0 &&
422
+ isSearchable &&
423
+ searchValue.trim()) {
424
+ return (_jsx("li", { children: _jsx(Block, { preset: "t4", color: "#dark-03", children: emptyLabel !== undefined ? emptyLabel : 'No results found' }) }));
425
+ }
447
426
  return renderedItems;
448
427
  })() })] }));
449
428
  return wrapWithField(listBoxField, ref, mergeProps({ ...props, styles: undefined }, {}));
@@ -452,7 +431,8 @@ function Option({ item, state, styles, isParentDisabled, validationState }) {
452
431
  const ref = useRef(null);
453
432
  const isDisabled = isParentDisabled || state.disabledKeys.has(item.key);
454
433
  const isSelected = state.selectionManager.isSelected(item.key);
455
- const { optionProps, isPressed, isFocused: optionFocused, } = useOption({
434
+ const isFocused = state.selectionManager.focusedKey === item.key;
435
+ const { optionProps, isPressed } = useOption({
456
436
  key: item.key,
457
437
  isDisabled,
458
438
  isSelected,
@@ -462,7 +442,7 @@ function Option({ item, state, styles, isParentDisabled, validationState }) {
462
442
  const description = item?.props?.description;
463
443
  return (_jsxs(OptionElement, { ...optionProps, ref: ref, mods: {
464
444
  selected: isSelected,
465
- focused: optionFocused,
445
+ focused: isFocused,
466
446
  disabled: isDisabled,
467
447
  pressed: isPressed,
468
448
  valid: isSelected && validationState === 'valid',
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.64.1
4
+ * @cube-dev/ui-kit v0.65.1
5
5
  * Released under the MIT license.
6
6
  */
7
7