@cube-dev/ui-kit 0.127.3 → 0.128.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 (413) hide show
  1. package/dist/CHANGELOG.md +17 -0
  2. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  24. package/dist/components/actions/CommandMenu/styled.js +1 -1
  25. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  26. package/dist/components/actions/ItemActionContext.js +1 -1
  27. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  28. package/dist/components/actions/Link/Link.js +1 -1
  29. package/dist/components/actions/Menu/Menu.js +1 -1
  30. package/dist/components/actions/Menu/MenuItem.js +1 -1
  31. package/dist/components/actions/Menu/MenuSection.js +1 -1
  32. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  34. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  35. package/dist/components/actions/Menu/context.js +1 -1
  36. package/dist/components/actions/Menu/styled.js +1 -1
  37. package/dist/components/actions/index.js +1 -1
  38. package/dist/components/actions/use-action.js +1 -1
  39. package/dist/components/actions/use-anchored-menu.js +1 -1
  40. package/dist/components/actions/use-context-menu.js +1 -1
  41. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  42. package/dist/components/content/Alert/Alert.js +1 -1
  43. package/dist/components/content/Alert/use-alert.js +1 -1
  44. package/dist/components/content/Avatar/Avatar.js +1 -1
  45. package/dist/components/content/Badge/Badge.js +1 -1
  46. package/dist/components/content/Card/Card.js +1 -1
  47. package/dist/components/content/Content.js +1 -1
  48. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  49. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  50. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  51. package/dist/components/content/Divider.js +1 -1
  52. package/dist/components/content/Footer.js +1 -1
  53. package/dist/components/content/Header.js +1 -1
  54. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  55. package/dist/components/content/Item/Item.js +1 -1
  56. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  57. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  58. package/dist/components/content/Layout/GridLayout.js +1 -1
  59. package/dist/components/content/Layout/Layout.js +1 -1
  60. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  61. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  62. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  63. package/dist/components/content/Layout/LayoutContent.js +1 -1
  64. package/dist/components/content/Layout/LayoutContext.js +1 -1
  65. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  66. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  67. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  68. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  69. package/dist/components/content/Layout/LayoutPane.js +1 -1
  70. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  71. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  72. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  73. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  74. package/dist/components/content/Layout/index.js +1 -1
  75. package/dist/components/content/Layout/utils.js +1 -1
  76. package/dist/components/content/Paragraph.js +1 -1
  77. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  78. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  79. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  80. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  81. package/dist/components/content/Result/Result.js +1 -1
  82. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  83. package/dist/components/content/Tag/Tag.js +1 -1
  84. package/dist/components/content/Text.js +1 -1
  85. package/dist/components/content/TextItem/TextItem.js +1 -1
  86. package/dist/components/content/Title.js +1 -1
  87. package/dist/components/content/highlightText.js +1 -1
  88. package/dist/components/content/use-auto-tooltip.js +1 -1
  89. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  90. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  91. package/dist/components/fields/Checkbox/context.js +1 -1
  92. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  93. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  94. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  95. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  96. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  97. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  98. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  99. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  100. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  101. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  102. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  103. package/dist/components/fields/DatePicker/intl.js +1 -1
  104. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  105. package/dist/components/fields/DatePicker/props.js +1 -1
  106. package/dist/components/fields/DatePicker/utils.js +1 -1
  107. package/dist/components/fields/FileInput/FileInput.js +1 -1
  108. package/dist/components/fields/FilterListBox/FilterListBox.d.ts +3 -1
  109. package/dist/components/fields/FilterListBox/FilterListBox.js +115 -51
  110. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  111. package/dist/components/fields/FilterPicker/FilterPicker.d.ts +6 -0
  112. package/dist/components/fields/FilterPicker/FilterPicker.js +3 -2
  113. package/dist/components/fields/FilterPicker/FilterPicker.js.map +1 -1
  114. package/dist/components/fields/Input/Input.js +1 -1
  115. package/dist/components/fields/ListBox/ListBox.js +1 -1
  116. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  117. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  118. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  119. package/dist/components/fields/Picker/Picker.js +1 -1
  120. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  121. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  122. package/dist/components/fields/RadioGroup/context.js +1 -1
  123. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  124. package/dist/components/fields/Select/Select.js +1 -1
  125. package/dist/components/fields/Slider/Gradation.js +1 -1
  126. package/dist/components/fields/Slider/HueSlider.js +1 -1
  127. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  128. package/dist/components/fields/Slider/Slider.js +1 -1
  129. package/dist/components/fields/Slider/SliderBase.js +1 -1
  130. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  131. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  132. package/dist/components/fields/Slider/elements.js +1 -1
  133. package/dist/components/fields/Slider/index.js +1 -1
  134. package/dist/components/fields/Switch/Switch.js +1 -1
  135. package/dist/components/fields/TextArea/TextArea.js +1 -1
  136. package/dist/components/fields/TextInput/TextInput.js +1 -1
  137. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  138. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  139. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  140. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  141. package/dist/components/form/Form/Field.js +1 -1
  142. package/dist/components/form/Form/Form.js +1 -1
  143. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  144. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  145. package/dist/components/form/Form/SubmitError.js +1 -1
  146. package/dist/components/form/Form/index.js +1 -1
  147. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  148. package/dist/components/form/Form/use-field/use-field.js +1 -1
  149. package/dist/components/form/Form/use-form.js +1 -1
  150. package/dist/components/form/Form/validation.js +1 -1
  151. package/dist/components/form/Label.js +1 -1
  152. package/dist/components/form/wrapper.js +1 -1
  153. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  154. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  155. package/dist/components/layout/Flex.js +1 -1
  156. package/dist/components/layout/Flow.js +1 -1
  157. package/dist/components/layout/Grid.js +1 -1
  158. package/dist/components/layout/Panel.js +1 -1
  159. package/dist/components/layout/Prefix.js +1 -1
  160. package/dist/components/layout/ResizablePanel.js +1 -1
  161. package/dist/components/layout/Space.js +1 -1
  162. package/dist/components/layout/Suffix.js +1 -1
  163. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  164. package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
  165. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  166. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  167. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  168. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  169. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  170. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  171. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  172. package/dist/components/navigation/Tabs/styled.js +1 -1
  173. package/dist/components/navigation/Tabs/types.js +1 -1
  174. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  175. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  176. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  177. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  178. package/dist/components/other/Calendar/Calendar.js +1 -1
  179. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  180. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  181. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  182. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  183. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  184. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  185. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  186. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  187. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  188. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  189. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  190. package/dist/components/overlays/Dialog/context.js +1 -1
  191. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  192. package/dist/components/overlays/Modal/Modal.js +1 -1
  193. package/dist/components/overlays/Modal/OpenTransition.js +1 -1
  194. package/dist/components/overlays/Modal/Overlay.js +1 -1
  195. package/dist/components/overlays/Modal/Popover.js +1 -1
  196. package/dist/components/overlays/Modal/Tray.js +1 -1
  197. package/dist/components/overlays/Modal/Underlay.js +1 -1
  198. package/dist/components/overlays/Notifications/Notification.js +1 -1
  199. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  200. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  201. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  202. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  203. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  204. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  205. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  206. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  207. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  208. package/dist/components/overlays/Notifications/index.js +1 -1
  209. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  210. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  211. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  212. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  213. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  214. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  215. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  216. package/dist/components/overlays/Toast/index.js +1 -1
  217. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  218. package/dist/components/overlays/Toast/useToast.js +1 -1
  219. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  220. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  221. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  222. package/dist/components/overlays/Tooltip/context.js +1 -1
  223. package/dist/components/portal/Portal.js +1 -1
  224. package/dist/components/portal/PortalProvider.js +1 -1
  225. package/dist/components/portal/usePortal.js +1 -1
  226. package/dist/components/shared/InvalidIcon.js +1 -1
  227. package/dist/components/shared/ValidIcon.js +1 -1
  228. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  229. package/dist/components/status/Spin/Cube.js +1 -1
  230. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  231. package/dist/components/status/Spin/Spin.js +1 -1
  232. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  233. package/dist/data/item-themes.js +1 -1
  234. package/dist/data/themes.js +1 -1
  235. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  236. package/dist/icons/AdjustmentsIcon.js +1 -1
  237. package/dist/icons/AiIcon.js +1 -1
  238. package/dist/icons/AreaChartIcon.js +1 -1
  239. package/dist/icons/BackwardIcon.js +1 -1
  240. package/dist/icons/BarChartIcon.js +1 -1
  241. package/dist/icons/BellFilledIcon.js +1 -1
  242. package/dist/icons/BellIcon.js +1 -1
  243. package/dist/icons/BooleanIcon.js +1 -1
  244. package/dist/icons/CalendarEditIcon.js +1 -1
  245. package/dist/icons/CalendarIcon.js +1 -1
  246. package/dist/icons/CaretDownIcon.js +1 -1
  247. package/dist/icons/CaretUpIcon.js +1 -1
  248. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  249. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  250. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  251. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  252. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  253. package/dist/icons/ChartBarLineIcon.js +1 -1
  254. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  255. package/dist/icons/ChartBarStackedIcon.js +1 -1
  256. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  257. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  258. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  259. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  260. package/dist/icons/ChartBubbleIcon.js +1 -1
  261. package/dist/icons/ChartDonut2Icon.js +1 -1
  262. package/dist/icons/ChartFunnelIcon.js +1 -1
  263. package/dist/icons/ChartHeatmapIcon.js +1 -1
  264. package/dist/icons/ChartKPIIcon.js +1 -1
  265. package/dist/icons/ChartPie2Icon.js +1 -1
  266. package/dist/icons/ChartScatterIcon.js +1 -1
  267. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  268. package/dist/icons/CheckCircleIcon.js +1 -1
  269. package/dist/icons/CheckIcon.js +1 -1
  270. package/dist/icons/CircleFilledIcon.js +1 -1
  271. package/dist/icons/ClearIcon.js +1 -1
  272. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  273. package/dist/icons/CloseCircleIcon.js +1 -1
  274. package/dist/icons/CloseIcon.js +1 -1
  275. package/dist/icons/CodeIcon.js +1 -1
  276. package/dist/icons/ColumnTotalIcon.js +1 -1
  277. package/dist/icons/CopyIcon.js +1 -1
  278. package/dist/icons/CountIcon.js +1 -1
  279. package/dist/icons/CubeIcon.js +1 -1
  280. package/dist/icons/CubePauseIcon.js +1 -1
  281. package/dist/icons/CubePlayIcon.js +1 -1
  282. package/dist/icons/CurrencyDollarIcon.js +1 -1
  283. package/dist/icons/DangerIcon.js +1 -1
  284. package/dist/icons/DashboardIcon.js +1 -1
  285. package/dist/icons/DatabaseIcon.js +1 -1
  286. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  287. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  288. package/dist/icons/DirectionIcon.js +1 -1
  289. package/dist/icons/DonutIcon.js +1 -1
  290. package/dist/icons/DownIcon.js +1 -1
  291. package/dist/icons/EditIcon.js +1 -1
  292. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  293. package/dist/icons/ExclamationCircleIcon.js +1 -1
  294. package/dist/icons/ExclamationIcon.js +1 -1
  295. package/dist/icons/EyeIcon.js +1 -1
  296. package/dist/icons/EyeInvisibleIcon.js +1 -1
  297. package/dist/icons/FilterIcon.js +1 -1
  298. package/dist/icons/FolderFilledIcon.js +1 -1
  299. package/dist/icons/FolderIcon.js +1 -1
  300. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  301. package/dist/icons/FolderOpenIcon.js +1 -1
  302. package/dist/icons/ForwardIcon.js +1 -1
  303. package/dist/icons/HierarchyIcon.js +1 -1
  304. package/dist/icons/HierarchyOpenIcon.js +1 -1
  305. package/dist/icons/Icon.js +1 -1
  306. package/dist/icons/InfoCircleIcon.js +1 -1
  307. package/dist/icons/InfoIcon.js +1 -1
  308. package/dist/icons/KeyIcon.js +1 -1
  309. package/dist/icons/LeftIcon.js +1 -1
  310. package/dist/icons/LineChartIcon.js +1 -1
  311. package/dist/icons/LoadingIcon.js +1 -1
  312. package/dist/icons/LockFilledIcon.js +1 -1
  313. package/dist/icons/LockIcon.js +1 -1
  314. package/dist/icons/MoreIcon.js +1 -1
  315. package/dist/icons/NotAllowedIcon.js +1 -1
  316. package/dist/icons/Number123Icon.js +1 -1
  317. package/dist/icons/NumberIcon.js +1 -1
  318. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  319. package/dist/icons/PauseCircleIcon.js +1 -1
  320. package/dist/icons/PauseIcon.js +1 -1
  321. package/dist/icons/PercentageIcon.js +1 -1
  322. package/dist/icons/PieChartIcon.js +1 -1
  323. package/dist/icons/PlayCircleIcon.js +1 -1
  324. package/dist/icons/PlayIcon.js +1 -1
  325. package/dist/icons/PlusIcon.js +1 -1
  326. package/dist/icons/ProgressBarIcon.js +1 -1
  327. package/dist/icons/ReloadIcon.js +1 -1
  328. package/dist/icons/ReportIcon.js +1 -1
  329. package/dist/icons/ReturnIcon.js +1 -1
  330. package/dist/icons/RightIcon.js +1 -1
  331. package/dist/icons/RowTotalsIcon.js +1 -1
  332. package/dist/icons/SchemeIcon.js +1 -1
  333. package/dist/icons/SearchIcon.js +1 -1
  334. package/dist/icons/SemanticQueryIcon.js +1 -1
  335. package/dist/icons/SettingsIcon.js +1 -1
  336. package/dist/icons/ShieldFilledIcon.js +1 -1
  337. package/dist/icons/ShieldIcon.js +1 -1
  338. package/dist/icons/SlashIcon.js +1 -1
  339. package/dist/icons/SparklesIcon.js +1 -1
  340. package/dist/icons/SqlIcon.js +1 -1
  341. package/dist/icons/StatsIcon.js +1 -1
  342. package/dist/icons/StopIcon.js +1 -1
  343. package/dist/icons/StringIcon.js +1 -1
  344. package/dist/icons/SubtotalsIcon.js +1 -1
  345. package/dist/icons/SwitchIcon.js +1 -1
  346. package/dist/icons/TableIcon.js +1 -1
  347. package/dist/icons/ThumbsDownIcon.js +1 -1
  348. package/dist/icons/ThumbsUpIcon.js +1 -1
  349. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  350. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  351. package/dist/icons/ThunderboltIcon.js +1 -1
  352. package/dist/icons/TimeIcon.js +1 -1
  353. package/dist/icons/TrashIcon.js +1 -1
  354. package/dist/icons/UnlockIcon.js +1 -1
  355. package/dist/icons/UpIcon.js +1 -1
  356. package/dist/icons/UserGroupIcon.js +1 -1
  357. package/dist/icons/UserIcon.js +1 -1
  358. package/dist/icons/UserLockIcon.js +1 -1
  359. package/dist/icons/ViewIcon.js +1 -1
  360. package/dist/icons/WarningFilledIcon.js +1 -1
  361. package/dist/icons/WarningIcon.js +1 -1
  362. package/dist/icons/wrap-icon.js +1 -1
  363. package/dist/index.js +1 -1
  364. package/dist/provider.js +1 -1
  365. package/dist/providers/TrackingProvider.js +1 -1
  366. package/dist/providers/navigationAdapter.default.js +1 -1
  367. package/dist/tokens/base.js +1 -1
  368. package/dist/tokens/colors.js +1 -1
  369. package/dist/tokens/index.js +1 -1
  370. package/dist/tokens/layout.js +1 -1
  371. package/dist/tokens/shadows.js +1 -1
  372. package/dist/tokens/sizes.js +1 -1
  373. package/dist/tokens/spacing.js +1 -1
  374. package/dist/tokens/typography.js +1 -1
  375. package/dist/utils/ResizeSensor.js +1 -1
  376. package/dist/utils/is-dev-env.js +1 -1
  377. package/dist/utils/modules.js +1 -1
  378. package/dist/utils/promise.js +1 -1
  379. package/dist/utils/raf.js +1 -1
  380. package/dist/utils/random.js +1 -1
  381. package/dist/utils/range.js +1 -1
  382. package/dist/utils/react/RenderCache.js +1 -1
  383. package/dist/utils/react/Slots.js +1 -1
  384. package/dist/utils/react/chain.js +1 -1
  385. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  386. package/dist/utils/react/index.js +1 -1
  387. package/dist/utils/react/interactions.js +1 -1
  388. package/dist/utils/react/isTextOnly.js +1 -1
  389. package/dist/utils/react/mapProps.js +1 -1
  390. package/dist/utils/react/mergeProps.js +1 -1
  391. package/dist/utils/react/nullableValue.js +1 -1
  392. package/dist/utils/react/resolveIcon.js +1 -1
  393. package/dist/utils/react/sharedStore.js +1 -1
  394. package/dist/utils/react/useCombinedRefs.js +1 -1
  395. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  396. package/dist/utils/react/useEventBus.js +1 -1
  397. package/dist/utils/react/useId.js +1 -1
  398. package/dist/utils/react/useIsDarwin.js +1 -1
  399. package/dist/utils/react/useKeySymbols.js +1 -1
  400. package/dist/utils/react/useLayoutEffect.js +1 -1
  401. package/dist/utils/react/useLocalStorage.js +1 -1
  402. package/dist/utils/react/useMergeStyles.js +1 -1
  403. package/dist/utils/react/useQaProps.js +1 -1
  404. package/dist/utils/react/useViewportSize.js +1 -1
  405. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  406. package/dist/utils/selection.js +1 -1
  407. package/dist/utils/styles.js +1 -1
  408. package/dist/utils/tree.js +1 -1
  409. package/dist/utils/warnings.js +1 -1
  410. package/dist/version.js +2 -2
  411. package/docs/components/fields/FilterListBox.md +27 -17
  412. package/docs/components/fields/FilterPicker.md +58 -59
  413. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/tokens/sizes.ts
3
3
  /**
4
4
  * Component size values in pixels.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/tokens/spacing.ts
3
3
  /**
4
4
  * Spacing tokens using tasty multiplier syntax.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/tokens/typography.ts
3
3
  /**
4
4
  * Typography presets for headings, text, and special styles.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/ResizeSensor.ts
3
3
  /**
4
4
  * Iterate over each of the provided element(s).
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/is-dev-env.ts
3
3
  function isDevEnv() {
4
4
  if (typeof window !== "undefined" && window.localStorage) try {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/modules.ts
3
3
  function extractModule(promise) {
4
4
  return promise.then((module) => module.default || module);
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/promise.ts
3
3
  function timeout(ms = 30) {
4
4
  return new Promise((resolve) => {
package/dist/utils/raf.js CHANGED
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/raf.ts
3
3
  /**
4
4
  * Chains N requestAnimationFrame calls and returns a cancel function.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/random.ts
3
3
  function random(min, max) {
4
4
  const realMin = min < max ? min : max;
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/range.ts
3
3
  function range(count) {
4
4
  return Array.from({ length: count }, (_, i) => i);
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { useRef } from "react";
3
3
  import { Fragment as Fragment$1, jsx } from "react/jsx-runtime";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { mergeProps } from "./mergeProps.js";
3
3
  import { Children, cloneElement, createContext, useContext, useMemo } from "react";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/react/chain.ts
3
3
  /**
4
4
  * Calls all functions in the order they were chained with the same arguments.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/react/forwardRefWithGenerics.tsx
3
3
  /**
4
4
  * A helper for creating forwardRef components with generic types.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { chain } from "./chain.js";
3
3
  import { forwardRefWithGenerics } from "./forwardRefWithGenerics.js";
4
4
  import { isTextOnly } from "./isTextOnly.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { useState } from "react";
3
3
  import { useFocus, useFocusVisible } from "react-aria";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { Children, isValidElement } from "react";
3
3
 
4
4
  //#region src/utils/react/isTextOnly.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/react/mapProps.ts
3
3
  /** Converts AriaButtonProps to CubeButtonProps */
4
4
  function ariaToCubeButtonProps(props) {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { chain } from "./chain.js";
3
3
  import { mergeIds } from "./useId.js";
4
4
  import { mergeStyles } from "@tenphi/tasty";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/react/nullableValue.ts
3
3
  function castNullableStringValue(props) {
4
4
  return castNullableField(props, ["value", "defaultValue"], "string", (v) => String(v));
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/react/resolveIcon.ts
3
3
  /**
4
4
  * Resolves a dynamic icon prop to its content and slot state.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { useSyncExternalStore } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { useEffect, useRef } from "react";
3
3
 
4
4
  //#region src/utils/react/useCombinedRefs.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { createSharedStore } from "./sharedStore.js";
3
3
  import { useEffect } from "react";
4
4
  import { useFocusVisible } from "react-aria";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import React, { createContext, useCallback, useContext, useEffect, useRef } from "react";
3
3
 
4
4
  //#region src/utils/react/useEventBus.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { useLayoutEffect as useLayoutEffect$1 } from "./useLayoutEffect.js";
3
3
  import { useEffect, useRef, useState } from "react";
4
4
  import { useSSRSafeId } from "@react-aria/ssr";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { useEffect, useState } from "react";
3
3
 
4
4
  //#region src/utils/react/useIsDarwin.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { useIsDarwin } from "./useIsDarwin.js";
3
3
  import { useMemo } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import * as React$1 from "react";
3
3
 
4
4
  //#region src/utils/react/useLayoutEffect.tsx
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { useEvent } from "../../_internal/hooks/use-event.js";
3
3
  import { useCallback, useSyncExternalStore } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { mergeStyles } from "@tenphi/tasty";
3
3
  import { useMemo } from "react";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/react/useQaProps.ts
3
3
  /**
4
4
  * Processes QA props.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { useEffect, useState } from "react";
3
3
 
4
4
  //#region src/utils/react/useViewportSize.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  import { isValidElement } from "react";
3
3
  import { isFragment } from "react-is";
4
4
 
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/selection.ts
3
3
  /**
4
4
  * Deduplicate/toggle keys in a selection: if a key appears twice it is
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/styles.ts
3
3
  /**
4
4
  * Split properties into style and non-style properties.
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/tree.ts
3
3
  function toFlatTree(tree, includingFolders) {
4
4
  return tree.reduce((result, node) => {
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/utils/warnings.ts
3
3
  const SUGGESTED_PROP_MAP = {
4
4
  disabled: "isDisabled",
package/dist/version.js CHANGED
@@ -1,6 +1,6 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.127.3 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.128.0 | Cube Dev Team */
2
2
  //#region src/version.ts
3
- const VERSION = "0.127.3";
3
+ const VERSION = "0.128.0";
4
4
  if (typeof window !== "undefined") {
5
5
  const version = VERSION;
6
6
  window.CubeUIKit = window.CubeUIKit || { version };
@@ -28,7 +28,7 @@ A searchable list selection component that combines a ListBox with an integrated
28
28
  - **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — FilterListBox size
29
29
  - **`searchPlaceholder`** `string` (default: `Search...`) — Placeholder text in the search input
30
30
  - **`filter`** `((textValue: string, inputValue: string) => boolean) | false` — Custom filter function or `false` to disable filtering
31
- - **`emptyLabel`** `ReactNode` (default: `No items` / `No results found`) — Label displayed when no items match
31
+ - **`emptyLabel`** `ReactNode` (default: context-aware: `No items` or `No results found`) — Label shown when the list is empty. When provided, overrides both defaults for any empty state
32
32
  - **`allowsCustomValue`** `boolean` (default: `false`) — Whether to allow custom values not in the options list
33
33
  - **`isCheckable`** `boolean` (default: `false`) — Whether to show checkboxes for multiple selection
34
34
  - **`shouldFocusWrap`** `boolean` (default: `false`) — Whether keyboard navigation should wrap around
@@ -44,6 +44,7 @@ A searchable list selection component that combines a ListBox with an integrated
44
44
  - **`onOptionClick`** `(key: Key) => void` — Callback when an option is clicked
45
45
  - **`items`** `Iterable<T>` — Array of items for dynamic content with render function pattern
46
46
  - **`isLoading`** `boolean` (default: `false`) — Whether the FilterListBox is in a loading state (shows loading icon in search input)
47
+ - **`isLoadingItems`** `boolean` (default: `false`) — Whether items are currently loading. Shows a loading icon in the search input suffix
47
48
  - **`autoFocus`** `boolean` — Whether the search input should have autofocus
48
49
  - **`customValueProps`** `Partial<CubeItemProps>` — Props to apply to existing custom values (already selected but not in predefined options)
49
50
  - **`newCustomValueProps`** `Partial<CubeItemProps>` — Props to apply to new custom values appearing in search results (merged with `customValueProps`)
@@ -142,6 +143,7 @@ The `mods` property accepts the following modifiers you can override:
142
143
  - `disabled` `boolean` — Applied when `isDisabled={true}`
143
144
  - `focused` `boolean` — Applied when the FilterListBox has focus
144
145
  - `loading` `boolean` — Applied when `isLoading={true}`
146
+ - `loading-items` `boolean` — Applied when `isLoadingItems={true}`
145
147
  - `searchable` `boolean` — Always true for FilterListBox
146
148
  - `prefix` `boolean` — Applied when loading icon is shown
147
149
 
@@ -622,36 +624,44 @@ Use `customValueProps` to style existing custom values and `newCustomValueProps`
622
624
  - `customValueProps` - Applied to custom values that are already selected
623
625
  - `newCustomValueProps` - Applied to new custom values appearing when typing in search (merged with `customValueProps`)
624
626
 
625
- ### External Filtering
627
+ ### Server-Side / Dynamic Search
626
628
 
627
- For server-side filtering or complex custom logic, use `filter={false}` with controlled search:
629
+ For server-side filtering, use `filter={false}` with controlled search and dynamic `items`. Items are replaced when the server responds, and `isLoadingItems` shows a subtle spinner in the search input while the fetch is in flight.
628
630
 
629
631
  ```jsx
632
+ const [items, setItems] = useState(initialItems);
630
633
  const [searchValue, setSearchValue] = useState('');
631
- const [filteredItems, setFilteredItems] = useState(allItems);
634
+ const [isLoadingItems, setIsLoadingItems] = useState(false);
632
635
 
633
- useEffect(() => {
634
- // Your custom filtering logic (e.g., API call, complex algorithm)
635
- const filtered = customFilterLogic(allItems, searchValue);
636
- setFilteredItems(filtered);
637
- }, [searchValue, allItems]);
636
+ const handleSearchChange = useCallback((value) => {
637
+ setSearchValue(value);
638
+ setIsLoadingItems(true);
639
+ debouncedFetch(value)
640
+ .then(setItems)
641
+ .finally(() => setIsLoadingItems(false));
642
+ }, []);
638
643
 
639
644
  <FilterListBox
645
+ items={items}
640
646
  searchValue={searchValue}
641
- onSearchChange={setSearchValue}
647
+ onSearchChange={handleSearchChange}
642
648
  filter={false}
649
+ isLoadingItems={isLoadingItems}
643
650
  >
644
- {filteredItems.map(item => (
651
+ {(item) => (
645
652
  <FilterListBox.Item key={item.id}>{item.name}</FilterListBox.Item>
646
- ))}
653
+ )}
647
654
  </FilterListBox>
648
655
  ```
649
656
 
650
- **When to use:**
651
- - Server-side filtering for large datasets
652
- - Complex custom search algorithms
653
- - Debounced API calls
654
- - Multi-field search logic
657
+ **How it works:**
658
+ - **`filter={false}`** disables client-side filtering so items appear exactly as the server returns them
659
+ - **`searchValue` + `onSearchChange`** give you control over the search input; debounce and fetch on your side
660
+ - **`items`** is reactive — replace it with server results and the list updates automatically
661
+ - **`isLoadingItems`** shows a loading spinner in the search input suffix while fetching. While loading, stale items that do not text-match the current search are hidden client-side so the user only sees relevant suggestions
662
+ - **Selected custom values** (with `allowsCustomValue` in multi-select) are filtered against the search input too, so they don't appear when they don't match
663
+ - **`emptyLabel`** can be used to customize the empty state message (e.g. `"Loading items..."` during initial load)
664
+ - Debouncing is the consumer's responsibility (300-500ms is typical)
655
665
 
656
666
  ### Escape Key Handling
657
667
 
@@ -24,6 +24,7 @@ A versatile selection component that combines a trigger button with a searchable
24
24
  - **`selectionMode`** `'single' | 'multiple'` (default: `single`) — Selection mode for the picker
25
25
  - **`allowsCustomValue`** `boolean` (default: `false`) — Whether to allow entering custom values that are not present in the predefined options
26
26
  - **`isClearable`** `boolean` (default: `false`) — Whether the filter picker is clearable using a clear button in the rightIcon slot
27
+ - **`isLoadingItems`** `boolean` (default: `false`) — Whether items are currently loading. Shows a loading spinner in the search input suffix inside the popover. Unlike `isLoading`, does not disable the trigger.
27
28
  - **`disallowEmptySelection`** `boolean` (default: `false`) — Whether to disallow empty selection
28
29
  - **`disabledKeys`** `Key[]` — Array of keys for disabled items
29
30
  - **`items`** `Iterable<T>` — Array of items to render when using the render function pattern for large datasets with dynamic content
@@ -33,7 +34,7 @@ A versatile selection component that combines a trigger button with a searchable
33
34
  - **`theme`** `'default' | 'special'` (default: `default`) — Button theme
34
35
  - **`size`** `'small' | 'medium' | 'large'` (default: `medium`) — Size of the picker component
35
36
  - **`searchPlaceholder`** `string` — Placeholder text in the search input
36
- - **`emptyLabel`** `string` Custom label to display when no results are found after filtering
37
+ - **`emptyLabel`** `ReactNode` (default: context-aware: `No items` or `No results found`) — Label shown when the list is empty. When provided, overrides both defaults for any empty state
37
38
  - **`filter`** `((textValue: string, inputValue: string) => boolean) | false` — Custom filter function for determining if an option should be included in search results
38
39
  - **`header`** `ReactNode` — Custom header content
39
40
  - **`footer`** `ReactNode` — Custom footer content
@@ -455,6 +456,22 @@ const categories = [
455
456
  </FilterPicker>
456
457
  ```
457
458
 
459
+ ### Loading Items
460
+
461
+ Use `isLoadingItems` to indicate that items are currently being fetched. Unlike `isLoading`, the trigger stays enabled so users can still open the popover and interact with items that have already loaded. A loading spinner appears in the search input suffix.
462
+
463
+ ```jsx
464
+ <FilterPicker
465
+ label="Loading Items"
466
+ placeholder="Select a fruit..."
467
+ isLoadingItems={true}
468
+ selectionMode="multiple"
469
+ >
470
+ <FilterPicker.Item key="apple">Apple</FilterPicker.Item>
471
+ <FilterPicker.Item key="banana">Banana</FilterPicker.Item>
472
+ </FilterPicker>
473
+ ```
474
+
458
475
  ### Complex Example
459
476
 
460
477
  ```jsx
@@ -714,78 +731,60 @@ The clear button:
714
731
  - Calls the optional `onClear` callback
715
732
  - Is hidden when the picker is disabled or read-only
716
733
 
717
- ### External Filtering
718
-
719
- FilterPicker provides two approaches for implementing external filtering when you need to control the filtering logic outside the component:
734
+ ### Server-Side / Dynamic Search
720
735
 
721
- #### Approach 1: Disabled Internal Filtering
722
-
723
- Use `filter={false}` to disable internal filtering while providing pre-filtered items:
724
-
725
- ```jsx
726
- const [externalSearch, setExternalSearch] = useState('');
727
-
728
- const filteredFruits = useMemo(() => {
729
- if (!externalSearch.trim()) return allFruits;
730
- return allFruits.filter((fruit) =>
731
- fruit.label.toLowerCase().includes(externalSearch.toLowerCase())
732
- );
733
- }, [externalSearch]);
734
-
735
- <FilterPicker
736
- label="Select Fruits"
737
- placeholder="Choose fruits..."
738
- selectionMode="multiple"
739
- filter={false}
740
- items={filteredFruits}
741
- searchPlaceholder="Type to search..."
742
- >
743
- {(fruit) => (
744
- <FilterPicker.Item key={fruit.key}>{fruit.label}</FilterPicker.Item>
745
- )}
746
- </FilterPicker>
747
- ```
748
-
749
- #### Approach 2: Controlled Search Input
750
-
751
- Use `searchValue` and `onSearchChange` for complete control over the search behavior:
736
+ When items come from a backend API, use `filter={false}` with controlled search to let the server handle filtering. Items are replaced when the response arrives, and `isLoadingItems` shows a subtle spinner in the search input while the fetch is in flight.
752
737
 
753
738
  ```jsx
739
+ const [items, setItems] = useState(initialItems);
754
740
  const [searchValue, setSearchValue] = useState('');
741
+ const [isLoadingItems, setIsLoadingItems] = useState(false);
755
742
 
756
- // Simulate debounced search
757
- const [processedSearch, setProcessedSearch] = useState('');
758
- useEffect(() => {
759
- const timer = setTimeout(() => setProcessedSearch(searchValue), 300);
760
- return () => clearTimeout(timer);
761
- }, [searchValue]);
762
-
763
- const filteredFruits = useMemo(() => {
764
- if (!processedSearch.trim()) return allFruits;
765
- return allFruits.filter((fruit) =>
766
- fruit.label.toLowerCase().includes(processedSearch.toLowerCase())
767
- );
768
- }, [processedSearch]);
743
+ const handleSearchChange = useCallback((value) => {
744
+ setSearchValue(value);
745
+ setIsLoadingItems(true);
746
+ debouncedFetch(value)
747
+ .then(setItems)
748
+ .finally(() => setIsLoadingItems(false));
749
+ }, []);
769
750
 
770
751
  <FilterPicker
771
- label="Select Fruits"
772
- placeholder="Choose fruits..."
773
- selectionMode="multiple"
752
+ items={items}
774
753
  searchValue={searchValue}
754
+ onSearchChange={handleSearchChange}
775
755
  filter={false}
776
- items={filteredFruits}
777
- onSearchChange={setSearchValue}
756
+ sortSelectedToTop={false}
757
+ isLoadingItems={isLoadingItems}
758
+ placeholder="Search items..."
759
+ selectionMode="multiple"
760
+ onOpenChange={(isOpen) => {
761
+ if (!isOpen) {
762
+ setSearchValue('');
763
+ setItems(initialItems);
764
+ }
765
+ }}
778
766
  >
779
- {(fruit) => (
780
- <FilterPicker.Item key={fruit.key}>{fruit.label}</FilterPicker.Item>
767
+ {(item) => (
768
+ <FilterPicker.Item key={item.id} textValue={item.name}>
769
+ {item.name}
770
+ </FilterPicker.Item>
781
771
  )}
782
772
  </FilterPicker>
783
773
  ```
784
774
 
785
- **When to use each approach:**
786
- - **`filter={false}`**: Simpler approach when you just need to pre-filter items without controlling the search input itself. Good for server-side filtering or custom filter logic.
787
- - **Controlled Search**: Use when you need full control over the search input (debouncing, external UI sync, clearing from outside, or tracking search analytics).
788
- - **Combine Both**: You can use both together for maximum control - controlled search input with external filtering.
775
+ **How it works:**
776
+ - **`filter={false}`** disables client-side filtering so items are shown exactly as the server returns them
777
+ - **`searchValue` + `onSearchChange`** give you control over the search input; debounce and fetch on your side
778
+ - **`items`** is a reactive prop replace it with server results and the list updates automatically
779
+ - **`isLoadingItems`** shows a loading spinner in the search input suffix while fetching. While loading, stale items that do not text-match the current search are hidden client-side so the user only sees relevant suggestions
780
+ - **Selected custom values** (with `allowsCustomValue` in multi-select) are filtered against the search input too, so they don't appear when they don't match
781
+ - **`sortSelectedToTop={false}`** is recommended when the server controls item order
782
+ - **`emptyLabel`** can be used to customize the empty state message (e.g. `"Loading items..."` during initial load)
783
+ - **Reset on close** — use `onOpenChange` to restore the initial item set and clear the search when the popover closes, ensuring the trigger label resolves correctly
784
+
785
+ **Tips:**
786
+ - Debouncing is the consumer's responsibility (300-500ms is typical)
787
+ - During the debounce delay, old items remain visible — if you want instant client-side feedback while waiting, use a filter function instead of `false`
789
788
 
790
789
  ## Performance
791
790
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cube-dev/ui-kit",
3
- "version": "0.127.3",
3
+ "version": "0.128.0",
4
4
  "type": "module",
5
5
  "description": "UIKit for Cube Projects",
6
6
  "repository": {