@cube-dev/ui-kit 0.83.3 → 0.85.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) 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/Item.js +7 -2
  21. package/es/components/OpenTrasition.js +1 -1
  22. package/es/components/Root.js +1 -1
  23. package/es/components/actions/Action/Action.js +1 -1
  24. package/es/components/actions/Button/Button.js +1 -1
  25. package/es/components/actions/Button/index.js +1 -1
  26. package/es/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  27. package/es/components/actions/CommandMenu/CommandMenu.js +1 -1
  28. package/es/components/actions/CommandMenu/index.js +1 -1
  29. package/es/components/actions/CommandMenu/styled.js +1 -1
  30. package/es/components/actions/ItemAction/ItemAction.js +127 -12
  31. package/es/components/actions/ItemAction/index.js +1 -1
  32. package/es/components/actions/ItemActionContext.js +25 -0
  33. package/es/components/actions/ItemButton/ItemButton.js +102 -6
  34. package/es/components/actions/ItemButton/index.js +1 -1
  35. package/es/components/actions/Link/Link.js +1 -1
  36. package/es/components/actions/Menu/Menu.js +1 -1
  37. package/es/components/actions/Menu/MenuItem.js +3 -3
  38. package/es/components/actions/Menu/MenuSection.js +1 -1
  39. package/es/components/actions/Menu/MenuTrigger.js +1 -1
  40. package/es/components/actions/Menu/SubMenuTrigger.js +1 -1
  41. package/es/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  42. package/es/components/actions/Menu/context.js +1 -1
  43. package/es/components/actions/Menu/index.js +1 -1
  44. package/es/components/actions/Menu/styled.js +1 -1
  45. package/es/components/actions/index.js +2 -1
  46. package/es/components/actions/use-action.js +1 -1
  47. package/es/components/actions/use-anchored-menu.js +1 -1
  48. package/es/components/actions/use-context-menu.js +1 -1
  49. package/es/components/content/ActiveZone/ActiveZone.js +1 -1
  50. package/es/components/content/Alert/Alert.js +1 -1
  51. package/es/components/content/Alert/index.js +1 -1
  52. package/es/components/content/Alert/types.js +1 -1
  53. package/es/components/content/Alert/use-alert.js +1 -1
  54. package/es/components/content/Avatar/Avatar.js +1 -1
  55. package/es/components/content/Badge/Badge.js +1 -1
  56. package/es/components/content/Card/Card.js +1 -1
  57. package/es/components/content/Content.js +1 -1
  58. package/es/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  59. package/es/components/content/CopyPasteBlock/index.js +1 -1
  60. package/es/components/content/CopySnippet/CopySnippet.js +1 -1
  61. package/es/components/content/CopySnippet/index.js +1 -1
  62. package/es/components/content/Divider.js +1 -1
  63. package/es/components/content/Footer.js +1 -1
  64. package/es/components/content/Header.js +1 -1
  65. package/es/components/content/HotKeys/HotKeys.js +1 -1
  66. package/es/components/content/HotKeys/index.js +1 -1
  67. package/es/components/content/ItemBadge/ItemBadge.js +119 -0
  68. package/es/components/content/ItemBadge/index.js +10 -0
  69. package/es/components/content/ItemBase/ItemBase.js +92 -22
  70. package/es/components/content/ItemBase/index.js +2 -1
  71. package/es/components/content/List/SectionHeading.js +1 -1
  72. package/es/components/content/List/index.js +1 -1
  73. package/es/components/content/Paragraph.js +1 -1
  74. package/es/components/content/Placeholder/Placeholder.js +1 -1
  75. package/es/components/content/PrismCode/PrismCode.js +1 -1
  76. package/es/components/content/PrismCode/prismSetup.js +1 -1
  77. package/es/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  78. package/es/components/content/Result/Result.js +1 -1
  79. package/es/components/content/Skeleton/Skeleton.js +1 -1
  80. package/es/components/content/Tag/Tag.js +1 -1
  81. package/es/components/content/Text.js +1 -1
  82. package/es/components/content/Title.js +1 -1
  83. package/es/components/fields/Checkbox/Checkbox.js +1 -1
  84. package/es/components/fields/Checkbox/CheckboxGroup.js +1 -1
  85. package/es/components/fields/Checkbox/context.js +1 -1
  86. package/es/components/fields/Checkbox/index.js +1 -1
  87. package/es/components/fields/ComboBox/ComboBox.js +225 -134
  88. package/es/components/fields/ComboBox/index.js +1 -1
  89. package/es/components/fields/DatePicker/DateInput.js +1 -1
  90. package/es/components/fields/DatePicker/DateInputBase.js +4 -3
  91. package/es/components/fields/DatePicker/DatePicker.js +2 -3
  92. package/es/components/fields/DatePicker/DatePickerButton.js +3 -8
  93. package/es/components/fields/DatePicker/DatePickerElement.js +1 -1
  94. package/es/components/fields/DatePicker/DatePickerInput.js +1 -1
  95. package/es/components/fields/DatePicker/DatePickerSegment.js +3 -1
  96. package/es/components/fields/DatePicker/DateRangePicker.js +2 -3
  97. package/es/components/fields/DatePicker/DateRangeSeparatedPicker.js +9 -5
  98. package/es/components/fields/DatePicker/TimeInput.js +1 -1
  99. package/es/components/fields/DatePicker/index.js +1 -1
  100. package/es/components/fields/DatePicker/intl.js +1 -1
  101. package/es/components/fields/DatePicker/parseDate.js +1 -1
  102. package/es/components/fields/DatePicker/props.js +1 -1
  103. package/es/components/fields/DatePicker/types.js +1 -1
  104. package/es/components/fields/DatePicker/utils.js +1 -1
  105. package/es/components/fields/FileInput/FileInput.js +1 -1
  106. package/es/components/fields/FilterListBox/FilterListBox.js +4 -7
  107. package/es/components/fields/FilterListBox/index.js +1 -1
  108. package/es/components/fields/FilterPicker/FilterPicker.js +4 -5
  109. package/es/components/fields/FilterPicker/index.js +1 -1
  110. package/es/components/fields/Input/Input.js +1 -1
  111. package/es/components/fields/Input/index.js +1 -1
  112. package/es/components/fields/LegacyComboBox/LegacyComboBox.js +1 -1
  113. package/es/components/fields/LegacyComboBox/index.js +1 -1
  114. package/es/components/fields/ListBox/ListBox.js +7 -6
  115. package/es/components/fields/ListBox/index.js +1 -1
  116. package/es/components/fields/NumberInput/NumberInput.js +1 -1
  117. package/es/components/fields/NumberInput/StepButton.js +1 -1
  118. package/es/components/fields/PasswordInput/PasswordInput.js +3 -3
  119. package/es/components/fields/Picker/Picker.js +418 -0
  120. package/es/components/fields/Picker/index.js +10 -0
  121. package/es/components/fields/RadioGroup/Radio.js +1 -1
  122. package/es/components/fields/RadioGroup/RadioGroup.js +1 -1
  123. package/es/components/fields/RadioGroup/context.js +1 -1
  124. package/es/components/fields/RadioGroup/index.js +1 -1
  125. package/es/components/fields/SearchInput/SearchInput.js +1 -1
  126. package/es/components/fields/SearchInput/index.js +1 -1
  127. package/es/components/fields/Select/Select.js +29 -27
  128. package/es/components/fields/Select/index.js +1 -1
  129. package/es/components/fields/Slider/Gradation.js +1 -1
  130. package/es/components/fields/Slider/Header.js +1 -1
  131. package/es/components/fields/Slider/RangeSlider.js +1 -1
  132. package/es/components/fields/Slider/Slider.js +1 -1
  133. package/es/components/fields/Slider/SliderBase.js +1 -1
  134. package/es/components/fields/Slider/SliderInput.js +1 -1
  135. package/es/components/fields/Slider/SliderThumb.js +1 -1
  136. package/es/components/fields/Slider/SliderTrack.js +1 -1
  137. package/es/components/fields/Slider/elements.js +1 -1
  138. package/es/components/fields/Slider/index.js +1 -1
  139. package/es/components/fields/Slider/types.js +1 -1
  140. package/es/components/fields/Switch/Switch.js +1 -1
  141. package/es/components/fields/Switch/index.js +1 -1
  142. package/es/components/fields/TextArea/TextArea.js +1 -1
  143. package/es/components/fields/TextArea/index.js +1 -1
  144. package/es/components/fields/TextInput/TextInput.js +1 -1
  145. package/es/components/fields/TextInput/TextInputBase.js +1 -1
  146. package/es/components/fields/TextInput/index.js +1 -1
  147. package/es/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  148. package/es/components/fields/TextInputMapper/index.js +1 -1
  149. package/es/components/fields/index.js +2 -1
  150. package/es/components/form/FieldWrapper/FieldWrapper.js +1 -1
  151. package/es/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  152. package/es/components/form/FieldWrapper/index.js +1 -1
  153. package/es/components/form/FieldWrapper/types.js +1 -1
  154. package/es/components/form/Form/Field.js +1 -1
  155. package/es/components/form/Form/Form.js +1 -1
  156. package/es/components/form/Form/ResetButton/ResetButton.js +1 -1
  157. package/es/components/form/Form/ResetButton/index.js +1 -1
  158. package/es/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  159. package/es/components/form/Form/SubmitButton/index.js +1 -1
  160. package/es/components/form/Form/SubmitError.js +1 -1
  161. package/es/components/form/Form/index.js +1 -1
  162. package/es/components/form/Form/types.js +1 -1
  163. package/es/components/form/Form/use-field/index.js +1 -1
  164. package/es/components/form/Form/use-field/types.js +1 -1
  165. package/es/components/form/Form/use-field/use-field-props.js +1 -1
  166. package/es/components/form/Form/use-field/use-field.js +3 -1
  167. package/es/components/form/Form/use-form.js +1 -1
  168. package/es/components/form/Form/validation.js +1 -1
  169. package/es/components/form/Label.js +1 -1
  170. package/es/components/form/index.js +1 -1
  171. package/es/components/form/wrapper.js +1 -1
  172. package/es/components/helpers/DisplayTransition/DisplayTransition.js +17 -3
  173. package/es/components/helpers/index.js +1 -1
  174. package/es/components/layout/Flex.js +1 -1
  175. package/es/components/layout/Flow.js +1 -1
  176. package/es/components/layout/Grid.js +1 -1
  177. package/es/components/layout/Panel.js +1 -1
  178. package/es/components/layout/Prefix.js +1 -1
  179. package/es/components/layout/ResizablePanel.js +1 -1
  180. package/es/components/layout/Space.js +1 -1
  181. package/es/components/layout/Suffix.js +1 -1
  182. package/es/components/navigation/LegacyTabs/LegacyTabs.js +1 -1
  183. package/es/components/organisms/FileTabs/FileTabs.js +1 -1
  184. package/es/components/organisms/StatsCard/StatsCard.js +1 -1
  185. package/es/components/other/Base64Upload/Base64Upload.js +1 -1
  186. package/es/components/other/Calendar/Calendar.js +2 -2
  187. package/es/components/other/Calendar/CalendarCell.js +7 -10
  188. package/es/components/other/Calendar/CalendarGrid.js +1 -1
  189. package/es/components/other/Calendar/RangeCalendar.js +1 -1
  190. package/es/components/other/CloudLogo/CloudLogo.js +1 -1
  191. package/es/components/overlays/AlertDialog/AlertDialog.js +1 -1
  192. package/es/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  193. package/es/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  194. package/es/components/overlays/AlertDialog/index.js +1 -1
  195. package/es/components/overlays/AlertDialog/types.js +1 -1
  196. package/es/components/overlays/Dialog/Dialog.js +2 -1
  197. package/es/components/overlays/Dialog/DialogContainer.js +1 -1
  198. package/es/components/overlays/Dialog/DialogForm.js +1 -1
  199. package/es/components/overlays/Dialog/DialogTrigger.js +1 -1
  200. package/es/components/overlays/Dialog/context.js +1 -1
  201. package/es/components/overlays/Dialog/index.js +1 -1
  202. package/es/components/overlays/Dialog/use-dialog-container.js +1 -1
  203. package/es/components/overlays/Modal/Modal.js +1 -1
  204. package/es/components/overlays/Modal/OpenTransition.js +1 -1
  205. package/es/components/overlays/Modal/Overlay.js +1 -1
  206. package/es/components/overlays/Modal/Popover.js +1 -1
  207. package/es/components/overlays/Modal/Tray.js +1 -1
  208. package/es/components/overlays/Modal/Underlay.js +1 -1
  209. package/es/components/overlays/Modal/index.js +1 -1
  210. package/es/components/overlays/Modal/types.js +1 -1
  211. package/es/components/overlays/NewNotifications/Bar/FloatingNotification.js +1 -1
  212. package/es/components/overlays/NewNotifications/Bar/NotificationsBar.js +1 -1
  213. package/es/components/overlays/NewNotifications/Bar/TransitionComponent.js +1 -1
  214. package/es/components/overlays/NewNotifications/Bar/index.js +1 -1
  215. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogContext.js +1 -1
  216. package/es/components/overlays/NewNotifications/Dialog/NotificationsDialogTrigger.js +1 -1
  217. package/es/components/overlays/NewNotifications/Dialog/index.js +1 -1
  218. package/es/components/overlays/NewNotifications/Notification.js +1 -1
  219. package/es/components/overlays/NewNotifications/NotificationView/NotificationAction.js +1 -1
  220. package/es/components/overlays/NewNotifications/NotificationView/NotificationCloseButton.js +1 -1
  221. package/es/components/overlays/NewNotifications/NotificationView/NotificationDescription.js +1 -1
  222. package/es/components/overlays/NewNotifications/NotificationView/NotificationFooter.js +1 -1
  223. package/es/components/overlays/NewNotifications/NotificationView/NotificationHeader.js +1 -1
  224. package/es/components/overlays/NewNotifications/NotificationView/NotificationIcon.js +1 -1
  225. package/es/components/overlays/NewNotifications/NotificationView/NotificationProvider.js +1 -1
  226. package/es/components/overlays/NewNotifications/NotificationView/NotificationView.js +1 -1
  227. package/es/components/overlays/NewNotifications/NotificationView/index.js +1 -1
  228. package/es/components/overlays/NewNotifications/NotificationView/types.js +1 -1
  229. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsContext.js +1 -1
  230. package/es/components/overlays/NewNotifications/NotificationsContext/NotificationsProvider.js +1 -1
  231. package/es/components/overlays/NewNotifications/NotificationsContext/index.js +1 -1
  232. package/es/components/overlays/NewNotifications/NotificationsContext/use-notifications.js +1 -1
  233. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsList.js +1 -1
  234. package/es/components/overlays/NewNotifications/NotificationsList/NotificationsListItem.js +1 -1
  235. package/es/components/overlays/NewNotifications/NotificationsList/index.js +1 -1
  236. package/es/components/overlays/NewNotifications/NotificationsList/types.js +1 -1
  237. package/es/components/overlays/NewNotifications/hooks/index.js +1 -1
  238. package/es/components/overlays/NewNotifications/hooks/types.js +1 -1
  239. package/es/components/overlays/NewNotifications/hooks/use-notification-list-item.js +1 -1
  240. package/es/components/overlays/NewNotifications/hooks/use-notifications-api.js +1 -1
  241. package/es/components/overlays/NewNotifications/hooks/use-notifications-list.js +1 -1
  242. package/es/components/overlays/NewNotifications/hooks/use-notifications-observer.js +1 -1
  243. package/es/components/overlays/NewNotifications/index.js +1 -1
  244. package/es/components/overlays/NewNotifications/types.js +1 -1
  245. package/es/components/overlays/Notification/Notification.js +1 -1
  246. package/es/components/overlays/OverlayWrapper.js +1 -1
  247. package/es/components/overlays/Toasts/Toast.js +1 -1
  248. package/es/components/overlays/Toasts/index.js +1 -1
  249. package/es/components/overlays/Toasts/types.js +1 -1
  250. package/es/components/overlays/Toasts/use-toasts-api.js +1 -1
  251. package/es/components/overlays/Tooltip/Tooltip.js +2 -2
  252. package/es/components/overlays/Tooltip/TooltipProvider.js +4 -4
  253. package/es/components/overlays/Tooltip/TooltipTrigger.js +5 -4
  254. package/es/components/overlays/Tooltip/context.js +1 -1
  255. package/es/components/overlays/Tooltip/index.js +1 -1
  256. package/es/components/portal/Portal.js +1 -1
  257. package/es/components/portal/PortalProvider.js +1 -1
  258. package/es/components/portal/index.js +1 -1
  259. package/es/components/portal/types.js +1 -1
  260. package/es/components/portal/usePortal.js +1 -1
  261. package/es/components/shared/InvalidIcon.js +1 -1
  262. package/es/components/shared/ValidIcon.js +1 -1
  263. package/es/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  264. package/es/components/status/LoadingAnimation/index.js +1 -1
  265. package/es/components/status/Spin/Cube.js +1 -1
  266. package/es/components/status/Spin/InternalSpinner.js +1 -1
  267. package/es/components/status/Spin/Spin.js +1 -1
  268. package/es/components/status/Spin/SpinsContainer.js +1 -1
  269. package/es/components/status/Spin/index.js +1 -1
  270. package/es/components/status/Spin/types.js +1 -1
  271. package/es/components/status/index.js +1 -1
  272. package/es/data/item-themes.js +48 -1
  273. package/es/data/themes.js +1 -1
  274. package/es/icons/AdjustmentsHorizontalIcon.js +1 -1
  275. package/es/icons/AdjustmentsIcon.js +1 -1
  276. package/es/icons/AiIcon.js +1 -1
  277. package/es/icons/AreaChartIcon.js +1 -1
  278. package/es/icons/BackwardIcon.js +1 -1
  279. package/es/icons/BarChartIcon.js +1 -1
  280. package/es/icons/BellFilledIcon.js +1 -1
  281. package/es/icons/BellIcon.js +1 -1
  282. package/es/icons/BooleanIcon.js +1 -1
  283. package/es/icons/CalendarEditIcon.js +1 -1
  284. package/es/icons/CalendarIcon.js +1 -1
  285. package/es/icons/CaretDownIcon.js +1 -1
  286. package/es/icons/CaretUpIcon.js +1 -1
  287. package/es/icons/ChartAreaStackedIcon.js +1 -1
  288. package/es/icons/ChartAreaStackedPercentageIcon.js +1 -1
  289. package/es/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  290. package/es/icons/ChartBarGroupedIcon.js +1 -1
  291. package/es/icons/ChartBarHorizontalIcon.js +1 -1
  292. package/es/icons/ChartBarLineIcon.js +1 -1
  293. package/es/icons/ChartBarStackedHorizontalIcon.js +1 -1
  294. package/es/icons/ChartBarStackedIcon.js +1 -1
  295. package/es/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  296. package/es/icons/ChartBarStackedPercentageIcon.js +1 -1
  297. package/es/icons/ChartBoxPlot2Icon.js +1 -1
  298. package/es/icons/ChartBoxPlotIcon.js +1 -1
  299. package/es/icons/ChartBubbleIcon.js +1 -1
  300. package/es/icons/ChartDonut2Icon.js +1 -1
  301. package/es/icons/ChartFunnelIcon.js +1 -1
  302. package/es/icons/ChartHeatmapIcon.js +1 -1
  303. package/es/icons/ChartKPIIcon.js +1 -1
  304. package/es/icons/ChartPie2Icon.js +1 -1
  305. package/es/icons/ChartScatterIcon.js +1 -1
  306. package/es/icons/CheckCircleFilledIcon.js +1 -1
  307. package/es/icons/CheckCircleIcon.js +1 -1
  308. package/es/icons/CheckIcon.js +1 -1
  309. package/es/icons/CircleFilledIcon.js +1 -1
  310. package/es/icons/ClearIcon.js +1 -1
  311. package/es/icons/CloseCircleFilledIcon.js +1 -1
  312. package/es/icons/CloseCircleIcon.js +1 -1
  313. package/es/icons/CloseIcon.js +1 -1
  314. package/es/icons/CodeIcon.js +1 -1
  315. package/es/icons/CopyIcon.js +1 -1
  316. package/es/icons/CountIcon.js +1 -1
  317. package/es/icons/CubeIcon.js +1 -1
  318. package/es/icons/CubePauseIcon.js +1 -1
  319. package/es/icons/CubePlayIcon.js +1 -1
  320. package/es/icons/CurrencyDollarIcon.js +1 -1
  321. package/es/icons/DangerIcon.js +1 -1
  322. package/es/icons/DashboardIcon.js +1 -1
  323. package/es/icons/DatabaseIcon.js +1 -1
  324. package/es/icons/DecimalDecreaseIcon.js +1 -1
  325. package/es/icons/DecimalIncreaseIcon.js +1 -1
  326. package/es/icons/DirectionIcon.js +1 -1
  327. package/es/icons/DonutIcon.js +1 -1
  328. package/es/icons/DownIcon.js +1 -1
  329. package/es/icons/EditIcon.js +1 -1
  330. package/es/icons/ExclamationCircleFilledIcon.js +1 -1
  331. package/es/icons/ExclamationCircleIcon.js +1 -1
  332. package/es/icons/ExclamationIcon.js +1 -1
  333. package/es/icons/EyeIcon.js +1 -1
  334. package/es/icons/EyeInvisibleIcon.js +1 -1
  335. package/es/icons/FilterIcon.js +1 -1
  336. package/es/icons/FolderFilledIcon.js +1 -1
  337. package/es/icons/FolderIcon.js +1 -1
  338. package/es/icons/FolderOpenFilledIcon.js +1 -1
  339. package/es/icons/FolderOpenIcon.js +1 -1
  340. package/es/icons/ForwardIcon.js +1 -1
  341. package/es/icons/HierarchyIcon.js +1 -1
  342. package/es/icons/Icon.js +1 -1
  343. package/es/icons/InfoCircleIcon.js +1 -1
  344. package/es/icons/InfoIcon.js +1 -1
  345. package/es/icons/KeyIcon.js +1 -1
  346. package/es/icons/LeftIcon.js +1 -1
  347. package/es/icons/LineChartIcon.js +1 -1
  348. package/es/icons/LoadingIcon.js +1 -1
  349. package/es/icons/LockFilledIcon.js +1 -1
  350. package/es/icons/LockIcon.js +1 -1
  351. package/es/icons/MoreIcon.js +1 -1
  352. package/es/icons/NotAllowedIcon.js +1 -1
  353. package/es/icons/Number123Icon.js +1 -1
  354. package/es/icons/NumberIcon.js +1 -1
  355. package/es/icons/PauseCircleFilledIcon.js +1 -1
  356. package/es/icons/PauseCircleIcon.js +1 -1
  357. package/es/icons/PauseIcon.js +1 -1
  358. package/es/icons/PercentageIcon.js +1 -1
  359. package/es/icons/PieChartIcon.js +1 -1
  360. package/es/icons/PlayCircleIcon.js +1 -1
  361. package/es/icons/PlayIcon.js +1 -1
  362. package/es/icons/PlusIcon.js +1 -1
  363. package/es/icons/ProgressBarIcon.js +1 -1
  364. package/es/icons/ReloadIcon.js +1 -1
  365. package/es/icons/ReportIcon.js +1 -1
  366. package/es/icons/ReturnIcon.js +1 -1
  367. package/es/icons/RightIcon.js +1 -1
  368. package/es/icons/SchemeIcon.js +1 -1
  369. package/es/icons/SearchIcon.js +1 -1
  370. package/es/icons/SettingsIcon.js +1 -1
  371. package/es/icons/ShieldFilledIcon.js +1 -1
  372. package/es/icons/ShieldIcon.js +1 -1
  373. package/es/icons/SlashIcon.js +1 -1
  374. package/es/icons/SparklesIcon.js +1 -1
  375. package/es/icons/SqlIcon.js +1 -1
  376. package/es/icons/StatsIcon.js +1 -1
  377. package/es/icons/StopIcon.js +1 -1
  378. package/es/icons/StringIcon.js +1 -1
  379. package/es/icons/SwitchIcon.js +1 -1
  380. package/es/icons/TableIcon.js +1 -1
  381. package/es/icons/ThumbsDownIcon.js +1 -1
  382. package/es/icons/ThumbsUpIcon.js +1 -1
  383. package/es/icons/ThunderboltCrossedIcon.js +1 -1
  384. package/es/icons/ThunderboltFilledIcon.js +1 -1
  385. package/es/icons/ThunderboltIcon.js +1 -1
  386. package/es/icons/TimeIcon.js +1 -1
  387. package/es/icons/UnlockIcon.js +1 -1
  388. package/es/icons/UpIcon.js +1 -1
  389. package/es/icons/UserGroupIcon.js +1 -1
  390. package/es/icons/UserIcon.js +1 -1
  391. package/es/icons/UserLockIcon.js +1 -1
  392. package/es/icons/ViewIcon.js +1 -1
  393. package/es/icons/WarningFilledIcon.js +1 -1
  394. package/es/icons/WarningIcon.js +1 -1
  395. package/es/icons/add-new-icon.js +1 -1
  396. package/es/icons/index.js +1 -1
  397. package/es/icons/wrap-icon.js +1 -1
  398. package/es/index.js +2 -1
  399. package/es/provider.js +1 -1
  400. package/es/providers/TrackingProvider.js +1 -1
  401. package/es/providers/navigation.types.js +1 -1
  402. package/es/providers/navigationAdapter.default.js +1 -1
  403. package/es/services/notification.js +1 -1
  404. package/es/shared/form.js +1 -1
  405. package/es/shared/index.js +1 -1
  406. package/es/stories/Form.legacy-stories.js +1 -1
  407. package/es/stories/FormFieldArgs.js +1 -1
  408. package/es/stories/Layout.stories.js +1 -1
  409. package/es/stories/Tasty.stories.js +1 -1
  410. package/es/stories/components/ConfirmDeletionDialogForm.js +1 -1
  411. package/es/stories/components/DialogFormApp.js +1 -1
  412. package/es/stories/components/StyledButton.js +1 -1
  413. package/es/stories/lists/baseProps.js +1 -1
  414. package/es/tasty/debug.js +1 -1
  415. package/es/tasty/index.js +1 -1
  416. package/es/tasty/injector/index.js +1 -1
  417. package/es/tasty/injector/injector.js +1 -1
  418. package/es/tasty/injector/sheet-manager.js +1 -1
  419. package/es/tasty/injector/types.js +1 -1
  420. package/es/tasty/parser/classify.js +1 -1
  421. package/es/tasty/parser/const.js +1 -1
  422. package/es/tasty/parser/lru.js +1 -1
  423. package/es/tasty/parser/parser.js +1 -1
  424. package/es/tasty/parser/tokenizer.js +1 -1
  425. package/es/tasty/parser/types.js +1 -1
  426. package/es/tasty/providers/BreakpointsProvider.js +1 -1
  427. package/es/tasty/styles/align.js +1 -1
  428. package/es/tasty/styles/border.js +1 -1
  429. package/es/tasty/styles/boxShadow.combinator.js +1 -1
  430. package/es/tasty/styles/color.js +1 -1
  431. package/es/tasty/styles/createStyle.js +1 -1
  432. package/es/tasty/styles/dimension.js +1 -1
  433. package/es/tasty/styles/display.js +1 -1
  434. package/es/tasty/styles/fade.js +1 -1
  435. package/es/tasty/styles/fill.js +1 -1
  436. package/es/tasty/styles/flow.js +1 -1
  437. package/es/tasty/styles/font.js +1 -1
  438. package/es/tasty/styles/fontStyle.js +1 -1
  439. package/es/tasty/styles/gap.js +1 -1
  440. package/es/tasty/styles/groupRadius.js +1 -1
  441. package/es/tasty/styles/height.js +1 -1
  442. package/es/tasty/styles/index.js +1 -1
  443. package/es/tasty/styles/inset.js +1 -1
  444. package/es/tasty/styles/justify.js +1 -1
  445. package/es/tasty/styles/list.js +1 -1
  446. package/es/tasty/styles/margin.js +1 -1
  447. package/es/tasty/styles/outline.js +1 -1
  448. package/es/tasty/styles/padding.js +1 -1
  449. package/es/tasty/styles/place.js +1 -1
  450. package/es/tasty/styles/predefined.js +1 -1
  451. package/es/tasty/styles/preset.js +1 -1
  452. package/es/tasty/styles/radius.js +1 -1
  453. package/es/tasty/styles/reset.js +1 -1
  454. package/es/tasty/styles/scrollbar.js +1 -1
  455. package/es/tasty/styles/shadow.js +1 -1
  456. package/es/tasty/styles/styledScrollbar.js +1 -1
  457. package/es/tasty/styles/transition.js +1 -1
  458. package/es/tasty/styles/types.js +1 -1
  459. package/es/tasty/styles/width.js +1 -1
  460. package/es/tasty/tasty.js +1 -1
  461. package/es/tasty/types.js +1 -1
  462. package/es/tasty/utils/cache-wrapper.js +1 -1
  463. package/es/tasty/utils/case-converter.js +1 -1
  464. package/es/tasty/utils/colors.js +1 -1
  465. package/es/tasty/utils/dotize.js +1 -1
  466. package/es/tasty/utils/filterBaseProps.js +1 -1
  467. package/es/tasty/utils/getDisplayName.js +1 -1
  468. package/es/tasty/utils/getModCombinations.js +1 -1
  469. package/es/tasty/utils/isDevEnv.js +1 -1
  470. package/es/tasty/utils/mergeStyles.js +1 -1
  471. package/es/tasty/utils/modAttrs.js +1 -1
  472. package/es/tasty/utils/renderStyles.js +1 -1
  473. package/es/tasty/utils/responsive.js +1 -1
  474. package/es/tasty/utils/string.js +1 -1
  475. package/es/tasty/utils/styles.js +1 -1
  476. package/es/tasty/utils/warnings.js +1 -1
  477. package/es/tokens.js +1 -1
  478. package/es/utils/ResizeSensor.js +1 -1
  479. package/es/utils/modules.js +1 -1
  480. package/es/utils/promise.js +1 -1
  481. package/es/utils/random.js +1 -1
  482. package/es/utils/range.js +1 -1
  483. package/es/utils/react/Slots.js +1 -1
  484. package/es/utils/react/chain.js +1 -1
  485. package/es/utils/react/forwardRefWithGenerics.js +1 -1
  486. package/es/utils/react/index.js +1 -1
  487. package/es/utils/react/interactions.js +1 -1
  488. package/es/utils/react/isTextOnly.js +1 -1
  489. package/es/utils/react/mapProps.js +1 -1
  490. package/es/utils/react/mergeProps.js +1 -1
  491. package/es/utils/react/nullableValue.js +1 -1
  492. package/es/utils/react/sharedStore.js +1 -1
  493. package/es/utils/react/useCombinedRefs.js +1 -1
  494. package/es/utils/react/useControlledFocusVisible.js +1 -1
  495. package/es/utils/react/useEventBus.js +1 -1
  496. package/es/utils/react/useId.js +1 -1
  497. package/es/utils/react/useIsDarwin.js +1 -1
  498. package/es/utils/react/useKeySymbols.js +1 -1
  499. package/es/utils/react/useLayoutEffect.js +1 -1
  500. package/es/utils/react/useQaProps.js +1 -1
  501. package/es/utils/react/useViewportSize.js +1 -1
  502. package/es/utils/react/wrapNodeIfPlain.js +1 -1
  503. package/es/utils/transitions.js +1 -1
  504. package/es/utils/tree.js +1 -1
  505. package/es/utils/warnings.js +1 -1
  506. package/es/version.js +2 -2
  507. package/package.json +1 -1
  508. package/types/components/Item.d.ts +4 -1
  509. package/types/components/actions/ItemAction/ItemAction.d.ts +15 -7
  510. package/types/components/actions/ItemActionContext.d.ts +14 -0
  511. package/types/components/actions/ItemButton/ItemButton.d.ts +14 -3
  512. package/types/components/actions/Menu/Menu.d.ts +4 -1
  513. package/types/components/actions/index.d.ts +1 -0
  514. package/types/components/content/ItemBadge/ItemBadge.d.ts +16 -0
  515. package/types/components/content/ItemBadge/index.d.ts +2 -0
  516. package/types/components/content/ItemBase/ItemBase.d.ts +21 -3
  517. package/types/components/content/ItemBase/index.d.ts +1 -0
  518. package/types/components/fields/ComboBox/ComboBox.d.ts +2 -2
  519. package/types/components/fields/DatePicker/DateInputBase.d.ts +1 -0
  520. package/types/components/fields/FilterListBox/FilterListBox.d.ts +1 -1
  521. package/types/components/fields/ListBox/ListBox.d.ts +6 -0
  522. package/types/components/fields/Picker/Picker.d.ts +69 -0
  523. package/types/components/fields/Picker/index.d.ts +2 -0
  524. package/types/components/fields/Select/Select.d.ts +4 -1
  525. package/types/components/fields/index.d.ts +1 -0
  526. package/types/components/helpers/DisplayTransition/DisplayTransition.d.ts +5 -1
  527. package/types/data/item-themes.d.ts +1 -0
  528. package/types/index.d.ts +2 -0
@@ -1,14 +1,14 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
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
9
  import React, { cloneElement, forwardRef, useCallback, useEffect, useMemo, useRef, useState, } from 'react';
10
10
  import { useFilter, useKeyboard, useOverlay, useOverlayPosition, } from 'react-aria';
11
- import { Section as BaseSection } from 'react-stately';
11
+ import { Section as BaseSection, useListState } from 'react-stately';
12
12
  import { useEvent } from '../../../_internal';
13
13
  import { CloseIcon, DirectionIcon, LoadingIcon } from '../../../icons';
14
14
  import { useProviderProps } from '../../../provider';
@@ -34,6 +34,13 @@ const InputElement = tasty({
34
34
  as: 'input',
35
35
  styles: DEFAULT_INPUT_STYLES,
36
36
  });
37
+ const ComboBoxOverlayWrapper = tasty({
38
+ qa: 'ComboBoxOverlayWrapper',
39
+ styles: {
40
+ position: 'absolute',
41
+ zIndex: 1000,
42
+ },
43
+ });
37
44
  const ComboBoxOverlayElement = tasty({
38
45
  qa: 'ComboBoxOverlay',
39
46
  styles: {
@@ -41,7 +48,7 @@ const ComboBoxOverlayElement = tasty({
41
48
  gridRows: '1sf',
42
49
  gridColumns: '1sf',
43
50
  width: '$min-width max-content 50vw',
44
- height: 'initial max-content (50vh - $size)',
51
+ height: 'initial max-content (50vh - 5x)',
45
52
  overflow: 'auto',
46
53
  background: '#white',
47
54
  radius: '1cr',
@@ -118,65 +125,37 @@ function useComboBoxState({ selectedKey, defaultSelectedKey, inputValue, default
118
125
  isControlledInput,
119
126
  };
120
127
  }
121
- function useComboBoxFiltering({ children, effectiveInputValue, filter, }) {
128
+ function useComboBoxFiltering({ effectiveInputValue, filter, }) {
122
129
  const [isFilterActive, setIsFilterActive] = useState(false);
123
130
  const { contains } = useFilter({ sensitivity: 'base' });
124
131
  const textFilterFn = useMemo(() => (filter === false ? () => true : filter || contains), [filter, contains]);
125
- // Filter children based on input value
126
- const filteredChildren = useMemo(() => {
132
+ // Create a filter function for collection nodes
133
+ const filterFn = useCallback((nodes) => {
127
134
  const term = effectiveInputValue.trim();
128
- if (!isFilterActive || !term || !children) {
129
- return children;
130
- }
131
- const nodeMatches = (node) => {
132
- if (!node?.props)
133
- return false;
134
- const textValue = node.props.textValue ||
135
- (typeof node.props.children === 'string' ? node.props.children : '') ||
136
- String(node.props.children || '');
137
- return textFilterFn(textValue, term);
138
- };
139
- const filterChildren = (childNodes) => {
140
- if (!childNodes)
141
- return null;
142
- const childArray = Array.isArray(childNodes) ? childNodes : [childNodes];
143
- const filteredNodes = [];
144
- childArray.forEach((child) => {
145
- if (!child || typeof child !== 'object') {
146
- return;
147
- }
148
- if (child.type === BaseSection ||
149
- child.type?.displayName === 'Section') {
150
- const sectionChildren = Array.isArray(child.props.children)
151
- ? child.props.children
152
- : [child.props.children];
153
- const filteredSectionChildren = sectionChildren.filter((sectionChild) => {
154
- return (sectionChild &&
155
- typeof sectionChild === 'object' &&
156
- nodeMatches(sectionChild));
157
- });
158
- if (filteredSectionChildren.length > 0) {
159
- filteredNodes.push(cloneElement(child, {
160
- key: child.key,
161
- children: filteredSectionChildren,
162
- }));
163
- }
164
- }
165
- else if (child.type === Item) {
166
- if (nodeMatches(child)) {
167
- filteredNodes.push(child);
168
- }
169
- }
170
- else if (nodeMatches(child)) {
171
- filteredNodes.push(child);
135
+ // Don't filter if not active or no search term
136
+ if (!isFilterActive || !term) {
137
+ return nodes;
138
+ }
139
+ // Filter nodes based on their textValue and preserve section structure
140
+ return [...nodes]
141
+ .map((node) => {
142
+ if (node.type === 'section' && node.childNodes) {
143
+ const filteredChildren = [...node.childNodes].filter((child) => textFilterFn(child.textValue || '', term));
144
+ if (filteredChildren.length === 0) {
145
+ return null;
172
146
  }
173
- });
174
- return filteredNodes;
175
- };
176
- return filterChildren(children);
177
- }, [isFilterActive, children, effectiveInputValue, textFilterFn]);
147
+ return {
148
+ ...node,
149
+ childNodes: filteredChildren,
150
+ hasChildNodes: true,
151
+ };
152
+ }
153
+ return textFilterFn(node.textValue || '', term) ? node : null;
154
+ })
155
+ .filter(Boolean);
156
+ }, [isFilterActive, effectiveInputValue, textFilterFn]);
178
157
  return {
179
- filteredChildren,
158
+ filterFn,
180
159
  isFilterActive,
181
160
  setIsFilterActive,
182
161
  };
@@ -293,6 +272,22 @@ function useComboBoxKeyboard({ isPopoverOpen, listStateRef, hasResults, allowsCu
293
272
  }
294
273
  }
295
274
  else if (e.key === 'Enter') {
275
+ // If popover is open, try to select the focused item first
276
+ if (isPopoverOpen) {
277
+ const listState = listStateRef.current;
278
+ if (listState) {
279
+ const keyToSelect = listState.selectionManager.focusedKey;
280
+ if (keyToSelect != null) {
281
+ e.preventDefault();
282
+ listState.selectionManager.select(keyToSelect, e);
283
+ // Ensure the popover closes even if selection stays the same
284
+ onClosePopover();
285
+ inputRef.current?.focus();
286
+ return;
287
+ }
288
+ }
289
+ }
290
+ // If no results, handle empty input or custom values
296
291
  if (!hasResults) {
297
292
  e.preventDefault();
298
293
  if (allowsCustomValue) {
@@ -304,18 +299,12 @@ function useComboBoxKeyboard({ isPopoverOpen, listStateRef, hasResults, allowsCu
304
299
  }
305
300
  return;
306
301
  }
307
- if (isPopoverOpen) {
308
- const listState = listStateRef.current;
309
- if (!listState)
310
- return;
311
- const keyToSelect = listState.selectionManager.focusedKey;
312
- if (keyToSelect != null) {
313
- e.preventDefault();
314
- listState.selectionManager.select(keyToSelect, e);
315
- // Ensure the popover closes even if selection stays the same
316
- onClosePopover();
317
- inputRef.current?.focus();
318
- }
302
+ // Clear selection if input is empty and popover is closed (or no focused item)
303
+ const trimmed = (effectiveInputValue || '').trim();
304
+ if (trimmed === '') {
305
+ e.preventDefault();
306
+ onSelectionChange(null);
307
+ return;
319
308
  }
320
309
  }
321
310
  else if (e.key === 'Escape') {
@@ -376,7 +365,7 @@ const ComboBoxInput = forwardRef(function ComboBoxInput({ qa, inputRef, id, valu
376
365
  ? `ListBoxItem-${listStateRef.current?.selectionManager.focusedKey}`
377
366
  : undefined }));
378
367
  });
379
- 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, compositeFocusProps, }) {
368
+ 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, compositeFocusProps, filter, }) {
380
369
  // Overlay positioning
381
370
  const { overlayProps: overlayPositionProps, placement, updatePosition, } = useOverlayPosition({
382
371
  targetRef: triggerRef,
@@ -414,18 +403,14 @@ function ComboBoxOverlay({ isOpen, triggerRef, popoverRef, listBoxRef, direction
414
403
  }, [isOpen, updatePosition]);
415
404
  // Extract primary placement direction for consistent styling
416
405
  const placementDirection = placement?.split(' ')[0] || direction;
417
- const overlayContent = (_jsx(DisplayTransition, { exposeUnmounted: true, isShown: isOpen, children: ({ phase, isShown, ref: transitionRef }) => (_jsx(ComboBoxOverlayElement, { ...mergeProps(overlayPositionProps, overlayBehaviorProps, compositeFocusProps), ref: (value) => {
418
- transitionRef(value);
419
- popoverRef.current = value;
420
- }, "data-placement": placementDirection, "data-phase": phase, mods: {
421
- open: isShown,
422
- hidden: phase === 'unmounted',
423
- }, styles: overlayStyles, style: {
424
- '--min-width': comboBoxWidth ? `${comboBoxWidth}px` : undefined,
425
- ...overlayPositionProps.style,
426
- }, 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: {
427
- popover: true,
428
- }, onSelectionChange: onSelectionChange, children: children }) })) }));
406
+ const overlayContent = (_jsx(DisplayTransition, { isShown: isOpen, children: ({ phase, isShown, ref: transitionRef }) => (_jsx(ComboBoxOverlayWrapper, { ...mergeProps(overlayPositionProps, overlayBehaviorProps, compositeFocusProps), ref: popoverRef, style: overlayPositionProps.style, children: _jsx(ComboBoxOverlayElement, { ref: transitionRef, "data-placement": placementDirection, "data-phase": phase, mods: {
407
+ open: isShown,
408
+ hidden: phase === 'unmounted',
409
+ }, styles: overlayStyles, style: {
410
+ '--min-width': comboBoxWidth ? `${comboBoxWidth}px` : undefined,
411
+ }, 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, filter: filter, styles: listBoxStyles, optionStyles: optionStyles, sectionStyles: sectionStyles, headingStyles: headingStyles, stateRef: listStateRef, mods: {
412
+ popover: true,
413
+ }, onSelectionChange: onSelectionChange, children: children }) }) })) }));
429
414
  return _jsx(Portal, { children: overlayContent });
430
415
  }
431
416
  // ============================================================================
@@ -553,63 +538,152 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
553
538
  }
554
539
  }, [isPopoverOpen, effectiveSelectedKey]);
555
540
  // Filtering hook
556
- const { filteredChildren, isFilterActive, setIsFilterActive } = useComboBoxFiltering({
557
- children,
541
+ const { filterFn, isFilterActive, setIsFilterActive } = useComboBoxFiltering({
558
542
  effectiveInputValue,
559
543
  filter,
560
544
  });
561
- // Freeze filtered children during close animation to prevent visual jumps
562
- const frozenFilteredChildrenRef = useRef(null);
563
- useEffect(() => {
564
- // Update frozen children only when popover is open
565
- if (isPopoverOpen) {
566
- frozenFilteredChildrenRef.current = filteredChildren;
567
- }
568
- }, [isPopoverOpen, filteredChildren]);
569
- // Use frozen children during close animation, fresh children when open
570
- const displayedFilteredChildren = isPopoverOpen
571
- ? filteredChildren
572
- : frozenFilteredChildrenRef.current ?? filteredChildren;
545
+ // Create local collection state for reading item data (labels, etc.)
546
+ // This allows us to read item labels even before the popover opens
547
+ const localCollectionState = useListState({
548
+ children,
549
+ items: sortedItems,
550
+ selectionMode: 'none', // Don't manage selection in this state
551
+ });
573
552
  const { isFocused, focusProps } = useFocus({ isDisabled });
553
+ // Helper to check if current input value is valid
554
+ const checkInputValidity = useCallback(() => {
555
+ if (!effectiveInputValue.trim()) {
556
+ return { isValid: false, singleMatchKey: null, filteredCount: 0 };
557
+ }
558
+ // Get filtered collection based on current input
559
+ const filteredNodes = filterFn(localCollectionState.collection);
560
+ const filteredItems = [];
561
+ // Flatten filtered nodes (handle sections)
562
+ for (const node of filteredNodes) {
563
+ if (node.type === 'section' && node.childNodes) {
564
+ for (const child of node.childNodes) {
565
+ if (child.type === 'item') {
566
+ filteredItems.push({
567
+ key: child.key,
568
+ textValue: child.textValue || '',
569
+ });
570
+ }
571
+ }
572
+ }
573
+ else if (node.type === 'item') {
574
+ filteredItems.push({
575
+ key: node.key,
576
+ textValue: node.textValue || '',
577
+ });
578
+ }
579
+ }
580
+ const filteredCount = filteredItems.length;
581
+ // Check for exact match
582
+ const exactMatch = filteredItems.find((item) => item.textValue.toLowerCase() ===
583
+ effectiveInputValue.trim().toLowerCase());
584
+ if (exactMatch) {
585
+ return { isValid: true, singleMatchKey: exactMatch.key, filteredCount };
586
+ }
587
+ // If exactly one filtered result, consider it valid
588
+ if (filteredCount === 1) {
589
+ return {
590
+ isValid: true,
591
+ singleMatchKey: filteredItems[0].key,
592
+ filteredCount,
593
+ };
594
+ }
595
+ return { isValid: false, singleMatchKey: null, filteredCount };
596
+ }, [effectiveInputValue, filterFn, localCollectionState.collection]);
574
597
  // Composite blur handler - fires when focus leaves the entire component
575
598
  const handleCompositeBlur = useEvent(() => {
576
- // Always disable filter on blur
577
- setIsFilterActive(false);
578
- // In allowsCustomValue mode with shouldCommitOnBlur, commit the input value
579
- if (allowsCustomValue &&
580
- shouldCommitOnBlur &&
581
- effectiveInputValue &&
582
- effectiveSelectedKey == null) {
583
- externalOnSelectionChange?.(effectiveInputValue);
584
- if (!isControlledKey) {
585
- setInternalSelectedKey(effectiveInputValue);
599
+ // NOTE: Do NOT disable filter yet; we need it active for validity check
600
+ // In allowsCustomValue mode
601
+ if (allowsCustomValue) {
602
+ // Commit the input value if it's non-empty and nothing is selected
603
+ if (shouldCommitOnBlur &&
604
+ effectiveInputValue &&
605
+ effectiveSelectedKey == null) {
606
+ externalOnSelectionChange?.(effectiveInputValue);
607
+ if (!isControlledKey) {
608
+ setInternalSelectedKey(effectiveInputValue);
609
+ }
610
+ onBlur?.();
611
+ setIsFilterActive(false);
612
+ return;
613
+ }
614
+ // Clear selection if input is empty
615
+ if (!String(effectiveInputValue).trim()) {
616
+ externalOnSelectionChange?.(null);
617
+ if (!isControlledKey) {
618
+ setInternalSelectedKey(null);
619
+ }
620
+ if (!isControlledInput) {
621
+ setInternalInputValue('');
622
+ }
623
+ onInputChange?.('');
624
+ onBlur?.();
625
+ setIsFilterActive(false);
626
+ return;
586
627
  }
587
- // Call user's onBlur callback
588
- onBlur?.();
589
- return;
590
628
  }
591
- // In clearOnBlur mode (only for non-custom-value mode), clear selection and input
592
- if (clearOnBlur && !allowsCustomValue) {
593
- externalOnSelectionChange?.(null);
594
- if (!isControlledKey) {
595
- setInternalSelectedKey(null);
629
+ // In non-custom-value mode, validate input and handle accordingly
630
+ if (!allowsCustomValue) {
631
+ const { isValid, singleMatchKey } = checkInputValidity();
632
+ // If there's exactly one filtered result, auto-select it
633
+ if (isValid &&
634
+ singleMatchKey != null &&
635
+ singleMatchKey !== effectiveSelectedKey) {
636
+ const label = getItemLabel(singleMatchKey);
637
+ if (!isControlledKey) {
638
+ setInternalSelectedKey(singleMatchKey);
639
+ }
640
+ if (!isControlledInput) {
641
+ setInternalInputValue(label);
642
+ }
643
+ onInputChange?.(label);
644
+ externalOnSelectionChange?.(singleMatchKey);
645
+ onBlur?.();
646
+ setIsFilterActive(false);
647
+ return;
596
648
  }
597
- if (!isControlledInput) {
598
- setInternalInputValue('');
649
+ // If input is invalid (no exact match, not a single result)
650
+ if (!isValid) {
651
+ const trimmedInput = effectiveInputValue.trim();
652
+ // Clear if clearOnBlur is set or input is empty
653
+ if (clearOnBlur || !trimmedInput) {
654
+ externalOnSelectionChange?.(null);
655
+ if (!isControlledKey) {
656
+ setInternalSelectedKey(null);
657
+ }
658
+ if (!isControlledInput) {
659
+ setInternalInputValue('');
660
+ }
661
+ onInputChange?.('');
662
+ onBlur?.();
663
+ setIsFilterActive(false);
664
+ return;
665
+ }
666
+ // Reset input to current selected value (or empty if none)
667
+ const nextValue = effectiveSelectedKey != null
668
+ ? getItemLabel(effectiveSelectedKey)
669
+ : '';
670
+ if (!isControlledInput) {
671
+ setInternalInputValue(nextValue);
672
+ }
673
+ onInputChange?.(nextValue);
674
+ onBlur?.();
675
+ setIsFilterActive(false);
676
+ return;
599
677
  }
600
- onInputChange?.('');
601
- // Call user's onBlur callback
602
- onBlur?.();
603
- return;
604
678
  }
605
- // Reset input to show current selection (or empty if none)
679
+ // Fallback: Reset input to show current selection (or empty if none)
606
680
  const nextValue = effectiveSelectedKey != null ? getItemLabel(effectiveSelectedKey) : '';
607
681
  if (!isControlledInput) {
608
682
  setInternalInputValue(nextValue);
609
683
  }
610
684
  onInputChange?.(nextValue);
611
- // Call user's onBlur callback
612
685
  onBlur?.();
686
+ setIsFilterActive(false);
613
687
  });
614
688
  // Composite focus hook - handles focus tracking across wrapper and portaled popover
615
689
  const { compositeFocusProps } = useCompositeFocus({
@@ -625,11 +699,11 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
625
699
  // Ref to access internal ListBox state
626
700
  const listStateRef = useRef(null);
627
701
  const focusInitAttemptsRef = useRef(0);
628
- // Helper to get label from collection item
702
+ // Helper to get label from local collection
629
703
  const getItemLabel = useCallback((key) => {
630
- const item = listStateRef.current?.collection?.getItem(key);
704
+ const item = localCollectionState?.collection?.getItem(key);
631
705
  return item?.textValue || String(key);
632
- }, []);
706
+ }, [localCollectionState?.collection]);
633
707
  // Selection change handler
634
708
  const handleSelectionChange = useEvent((selection) => {
635
709
  // Extract single key from selection (we only support single selection)
@@ -700,9 +774,6 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
700
774
  }
701
775
  // Priority 2: fall back to defaultSelectedKey's label
702
776
  if (defaultSelectedKey) {
703
- // Wait for collection to be ready
704
- if (!listStateRef.current?.collection)
705
- return;
706
777
  const label = getItemLabel(defaultSelectedKey);
707
778
  setInternalInputValue(label);
708
779
  setHasInitialized(true);
@@ -716,13 +787,17 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
716
787
  children,
717
788
  ]);
718
789
  // Sync input value with controlled selectedKey
790
+ const lastSyncedSelectedKey = useRef(undefined);
719
791
  useEffect(() => {
720
792
  // Only run when selectedKey is controlled but inputValue is uncontrolled
721
793
  if (!isControlledKey || isControlledInput)
722
794
  return;
723
- // Wait for collection to be ready
724
- if (!listStateRef.current?.collection)
795
+ // Skip if the key hasn't actually changed (prevents unnecessary resets when collection rebuilds)
796
+ if (lastSyncedSelectedKey.current !== undefined &&
797
+ lastSyncedSelectedKey.current === effectiveSelectedKey) {
725
798
  return;
799
+ }
800
+ lastSyncedSelectedKey.current = effectiveSelectedKey;
726
801
  // Get the expected label for the current selection
727
802
  const expectedLabel = effectiveSelectedKey != null ? getItemLabel(effectiveSelectedKey) : '';
728
803
  // Update the input value to match the selected key's label
@@ -745,10 +820,26 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
745
820
  ? effectiveInputValue !== ''
746
821
  : effectiveSelectedKey != null;
747
822
  let showClearButton = isClearable && hasValue && !isDisabled && !isReadOnly;
748
- const hasResults = Boolean(displayedFilteredChildren &&
749
- (Array.isArray(displayedFilteredChildren)
750
- ? displayedFilteredChildren.length > 0
751
- : displayedFilteredChildren !== null));
823
+ // Check if there are any results after filtering
824
+ const hasResults = useMemo(() => {
825
+ if (!children)
826
+ return false;
827
+ if (!Array.isArray(children) && children === null)
828
+ return false;
829
+ // If we have a collection, check if filtering will produce any results
830
+ if (localCollectionState?.collection) {
831
+ const filteredNodes = filterFn(localCollectionState.collection);
832
+ const resultArray = Array.from(filteredNodes).flatMap((node) => {
833
+ if (node.type === 'section' && node.childNodes) {
834
+ return [...node.childNodes];
835
+ }
836
+ return [node];
837
+ });
838
+ return resultArray.length > 0;
839
+ }
840
+ // Fallback: check if children exists
841
+ return Array.isArray(children) ? children.length > 0 : true;
842
+ }, [children, localCollectionState?.collection, filterFn]);
752
843
  // Clear function
753
844
  let clearValue = useEvent(() => {
754
845
  // Clear input
@@ -889,7 +980,7 @@ export const ComboBox = forwardRef(function ComboBox(props, ref) {
889
980
  }
890
981
  }
891
982
  }
892
- } })) : 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: sortedItems, listStateRef: listStateRef, label: label, ariaLabel: props['aria-label'], compositeFocusProps: compositeFocusProps, onSelectionChange: handleSelectionChange, onClose: () => setIsPopoverOpen(false), children: displayedFilteredChildren })] }));
983
+ } })) : 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: sortedItems, listStateRef: listStateRef, label: label, ariaLabel: props['aria-label'], compositeFocusProps: compositeFocusProps, filter: filterFn, onSelectionChange: handleSelectionChange, onClose: () => setIsPopoverOpen(false), children: children })] }));
893
984
  const { children: _, ...propsWithoutChildren } = props;
894
985
  const finalProps = {
895
986
  ...propsWithoutChildren,
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -38,7 +38,7 @@ const DateInputElement = tasty({
38
38
  });
39
39
  function DateInputBase(props, ref) {
40
40
  let inputRef = useRef(null);
41
- let { isDisabled, inputStyles, children, fieldProps, style, disableFocusRing, autoFocus, validationState, isLoading, size = 'medium', } = props;
41
+ let { isDisabled, inputStyles, children, fieldProps, style, disableFocusRing, autoFocus, validationState, isLoading, size = 'medium', suffix, } = props;
42
42
  let styles = extractStyles(props, CONTAINER_STYLES);
43
43
  let { focusProps, isFocused } = useFocusRing({
44
44
  isTextInput: true,
@@ -52,7 +52,8 @@ function DateInputBase(props, ref) {
52
52
  disabled: isDisabled,
53
53
  focused: isFocused && !disableFocusRing,
54
54
  invalid: isInvalid,
55
- }, ...mergeProps(fieldProps ?? {}, focusProps), style: style, children: [_jsx("div", { "data-element": "Contents", role: "presentation", children: _jsx(DateInputElement, { ref: mergeRefs(ref, inputRef), "data-size": size, role: "presentation", styles: inputStyles, children: children }) }), validationState && !isLoading ? validation : undefined] }));
55
+ suffix: (validationState && !isLoading) || isLoading || !!suffix,
56
+ }, ...mergeProps(fieldProps ?? {}, focusProps), style: style, children: [_jsx("div", { "data-element": "Contents", role: "presentation", children: _jsx(DateInputElement, { ref: mergeRefs(ref, inputRef), "data-size": size, role: "presentation", styles: inputStyles, children: children }) }), (validationState && !isLoading) || isLoading || suffix ? (_jsxs("div", { "data-element": "Suffix", children: [(validationState && !isLoading) || isLoading ? (_jsx("div", { "data-element": "State", children: validationState && !isLoading ? validation : null })) : null, suffix] })) : null] }));
56
57
  }
57
58
  const _DateInputBase = React.forwardRef(DateInputBase);
58
59
  _DateInputBase.displayName = 'DateInputBase';
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -17,7 +17,6 @@ import { Calendar } from '../../other/Calendar/Calendar';
17
17
  import { Dialog, DialogTrigger } from '../../overlays/Dialog';
18
18
  import { DateInputBase } from './DateInputBase';
19
19
  import { DatePickerButton } from './DatePickerButton';
20
- import { DatePickerElement } from './DatePickerElement';
21
20
  import { DatePickerInput } from './DatePickerInput';
22
21
  import { dateMessages } from './intl';
23
22
  import { DEFAULT_DATE_PROPS } from './props';
@@ -61,7 +60,7 @@ function DatePicker(props, ref) {
61
60
  : null;
62
61
  let showTimeField = !!timeGranularity;
63
62
  // let visibleMonths = useVisibleMonths(maxVisibleMonths);
64
- const component = (_jsxs(DatePickerElement, { ref: targetRef, styles: props.wrapperStyles, mods: { focused: isFocused && !isFocusedButton }, ...focusProps, children: [_jsx(DateInputBase, { disableFocusRing: true, radius: "left", border: "top left bottom", isDisabled: isDisabled, validationState: validationState, size: size, children: _jsx(DatePickerInput, { useLocale: useLocaleProp, ...fieldProps }) }), _jsxs(DialogTrigger, { hideArrow: true, type: "popover", mobileType: "tray", placement: "bottom right", targetRef: targetRef, isOpen: isOpen, shouldFlip: props.shouldFlip, onOpenChange: setOpen, children: [_jsx(DatePickerButton, { size: size, ...mergeProps(buttonProps, focusPropsButton), isDisabled: isDisabled }), _jsxs(Dialog, { ...dialogProps, width: "max-content", children: [_jsx(Calendar, { ...calendarProps }), showTimeField && (_jsx(TimeInput, { padding: "1x", label: dateMessages['time'], value: state.timeValue, placeholderValue: timePlaceholder, granularity: timeGranularity, minValue: timeMinValue, maxValue: timeMaxValue, hourCycle: props.hourCycle, hideTimeZone: props.hideTimeZone, onChange: state.setTimeValue }))] })] })] }));
63
+ const component = (_jsx(DateInputBase, { ref: targetRef, styles: props.wrapperStyles, disableFocusRing: isFocusedButton, isDisabled: isDisabled, validationState: validationState, size: size, ...focusProps, suffix: _jsxs(DialogTrigger, { hideArrow: true, type: "popover", mobileType: "tray", placement: "bottom right", targetRef: targetRef, isOpen: isOpen, shouldFlip: props.shouldFlip, onOpenChange: setOpen, children: [_jsx(DatePickerButton, { size: size, ...mergeProps(buttonProps, focusPropsButton), isDisabled: isDisabled }), _jsxs(Dialog, { ...dialogProps, width: "max-content", children: [_jsx(Calendar, { ...calendarProps }), showTimeField && (_jsx(TimeInput, { padding: "1x", label: dateMessages['time'], value: state.timeValue, placeholderValue: timePlaceholder, granularity: timeGranularity, minValue: timeMinValue, maxValue: timeMaxValue, hourCycle: props.hourCycle, hideTimeZone: props.hideTimeZone, onChange: state.setTimeValue }))] })] }), children: _jsx(DatePickerInput, { useLocale: useLocaleProp, ...fieldProps }) }));
65
64
  return wrapWithField(component, domRef, {
66
65
  ...props,
67
66
  styles,
@@ -1,21 +1,16 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
8
8
  import { jsx as _jsx } from "react/jsx-runtime";
9
9
  import { CalendarIcon } from '../../../icons';
10
10
  import { tasty } from '../../../tasty';
11
- import { Button } from '../../actions';
12
- export const DatePickerButton = tasty(Button, {
11
+ import { ItemAction } from '../../actions';
12
+ export const DatePickerButton = tasty(ItemAction, {
13
13
  icon: _jsx(CalendarIcon, {}),
14
- styles: {
15
- radius: '1r right',
16
- border: 'top right bottom',
17
- backgroundClip: 'content-box',
18
- },
19
14
  });
20
15
 
21
16
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * @license MIT
3
3
  * author: Cube Dev Team
4
- * @cube-dev/ui-kit v0.83.3
4
+ * @cube-dev/ui-kit v0.85.0
5
5
  * Released under the MIT license.
6
6
  */
7
7
 
@@ -22,6 +22,8 @@ const EditableSegmentElement = tasty({
22
22
  fontVariantNumeric: 'tabular-nums lining-nums',
23
23
  textAlign: 'right',
24
24
  font: 'monospace',
25
+ border: 0,
26
+ outline: 0,
25
27
  color: {
26
28
  '': 'inherit',
27
29
  ':focus': '#white',