@cube-dev/ui-kit 0.0.0-canary-c210a8c → 0.0.0-canary-60981ef

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 (462) hide show
  1. package/dist/_internal/hooks/use-chained-callback.js +1 -1
  2. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  3. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  4. package/dist/_internal/hooks/use-event.js +1 -1
  5. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  6. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  7. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  8. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  9. package/dist/_internal/hooks/use-warn.js +1 -1
  10. package/dist/components/Block.js +1 -1
  11. package/dist/components/CollectionItem.js +1 -1
  12. package/dist/components/GlobalStyles.js +1 -1
  13. package/dist/components/GridProvider.js +1 -1
  14. package/dist/components/HiddenInput.js +1 -1
  15. package/dist/components/Root.js +1 -1
  16. package/dist/components/actions/Action/Action.js +1 -1
  17. package/dist/components/actions/Banner/Banner.js +1 -1
  18. package/dist/components/actions/Button/Button.js +1 -1
  19. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  20. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  21. package/dist/components/actions/ButtonSplit/context.js +1 -1
  22. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  23. package/dist/components/actions/CommandMenu/styled.js +1 -1
  24. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  25. package/dist/components/actions/ItemActionContext.js +1 -1
  26. package/dist/components/actions/ItemButton/ItemButton.js +1 -1
  27. package/dist/components/actions/Link/Link.js +1 -1
  28. package/dist/components/actions/Menu/Menu.js +1 -1
  29. package/dist/components/actions/Menu/MenuItem.js +1 -1
  30. package/dist/components/actions/Menu/MenuSection.js +1 -1
  31. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  32. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  33. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  34. package/dist/components/actions/Menu/context.js +1 -1
  35. package/dist/components/actions/Menu/styled.js +1 -1
  36. package/dist/components/actions/index.js +1 -1
  37. package/dist/components/actions/use-action.js +1 -1
  38. package/dist/components/actions/use-anchored-menu.js +1 -1
  39. package/dist/components/actions/use-context-menu.js +1 -1
  40. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  41. package/dist/components/content/Alert/Alert.js +1 -1
  42. package/dist/components/content/Alert/use-alert.js +1 -1
  43. package/dist/components/content/Avatar/Avatar.js +1 -1
  44. package/dist/components/content/Badge/Badge.js +1 -1
  45. package/dist/components/content/Card/Card.js +1 -1
  46. package/dist/components/content/Content.js +1 -1
  47. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  48. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  49. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  50. package/dist/components/content/Divider.js +1 -1
  51. package/dist/components/content/Footer.js +1 -1
  52. package/dist/components/content/Header.js +1 -1
  53. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  54. package/dist/components/content/Item/Item.js +1 -1
  55. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  56. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  57. package/dist/components/content/Layout/GridLayout.js +1 -1
  58. package/dist/components/content/Layout/Layout.js +1 -1
  59. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  60. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  61. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  62. package/dist/components/content/Layout/LayoutContent.js +1 -1
  63. package/dist/components/content/Layout/LayoutContext.js +1 -1
  64. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  65. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  66. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  67. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  68. package/dist/components/content/Layout/LayoutPane.js +1 -1
  69. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  70. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  71. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  72. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  73. package/dist/components/content/Layout/index.js +1 -1
  74. package/dist/components/content/Layout/utils.js +1 -1
  75. package/dist/components/content/Paragraph.js +1 -1
  76. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  77. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  78. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  79. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  80. package/dist/components/content/Result/Result.js +1 -1
  81. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  82. package/dist/components/content/Tag/Tag.js +1 -1
  83. package/dist/components/content/Text.js +1 -1
  84. package/dist/components/content/TextItem/TextItem.js +1 -1
  85. package/dist/components/content/Title.js +1 -1
  86. package/dist/components/content/highlightText.js +1 -1
  87. package/dist/components/content/use-auto-tooltip.js +1 -1
  88. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  89. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  90. package/dist/components/fields/Checkbox/context.js +1 -1
  91. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  92. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  93. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  94. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  95. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  96. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  97. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  98. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  99. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  100. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  101. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  102. package/dist/components/fields/DatePicker/intl.js +1 -1
  103. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  104. package/dist/components/fields/DatePicker/props.js +1 -1
  105. package/dist/components/fields/DatePicker/utils.js +1 -1
  106. package/dist/components/fields/FileInput/FileInput.js +1 -1
  107. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  108. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  109. package/dist/components/fields/Input/Input.js +1 -1
  110. package/dist/components/fields/ListBox/ListBox.js +1 -1
  111. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  112. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  113. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  114. package/dist/components/fields/Picker/Picker.js +1 -1
  115. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  116. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  117. package/dist/components/fields/RadioGroup/context.js +1 -1
  118. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  119. package/dist/components/fields/Select/Select.js +1 -1
  120. package/dist/components/fields/Slider/Gradation.js +1 -1
  121. package/dist/components/fields/Slider/HueSlider.js +1 -1
  122. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  123. package/dist/components/fields/Slider/Slider.js +1 -1
  124. package/dist/components/fields/Slider/SliderBase.js +1 -1
  125. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  126. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  127. package/dist/components/fields/Slider/elements.js +1 -1
  128. package/dist/components/fields/Slider/index.js +1 -1
  129. package/dist/components/fields/Switch/Switch.js +1 -1
  130. package/dist/components/fields/TextArea/TextArea.js +1 -1
  131. package/dist/components/fields/TextInput/TextInput.js +1 -1
  132. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  133. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  134. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  135. package/dist/components/form/FieldWrapper/extract-field-wrapper-props.js +1 -1
  136. package/dist/components/form/Form/Field.js +1 -1
  137. package/dist/components/form/Form/Form.js +1 -1
  138. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  139. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  140. package/dist/components/form/Form/SubmitError.js +1 -1
  141. package/dist/components/form/Form/index.js +1 -1
  142. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  143. package/dist/components/form/Form/use-field/use-field.js +1 -1
  144. package/dist/components/form/Form/use-form.js +1 -1
  145. package/dist/components/form/Form/validation.js +1 -1
  146. package/dist/components/form/Label.js +1 -1
  147. package/dist/components/form/wrapper.js +1 -1
  148. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  149. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  150. package/dist/components/layout/Flex.js +1 -1
  151. package/dist/components/layout/Flow.js +1 -1
  152. package/dist/components/layout/Grid.js +1 -1
  153. package/dist/components/layout/Panel.js +1 -1
  154. package/dist/components/layout/Prefix.js +1 -1
  155. package/dist/components/layout/ResizablePanel.js +1 -1
  156. package/dist/components/layout/Space.js +1 -1
  157. package/dist/components/layout/Suffix.js +1 -1
  158. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  159. package/dist/components/navigation/Tabs/EditableTitle.js +1 -1
  160. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  161. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  162. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  163. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  164. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  165. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  166. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  167. package/dist/components/navigation/Tabs/styled.js +1 -1
  168. package/dist/components/navigation/Tabs/types.js +1 -1
  169. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  170. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  171. package/dist/components/organisms/FileTabs/FileTabs.js +1 -1
  172. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  173. package/dist/components/other/Calendar/Calendar.js +1 -1
  174. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  175. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  176. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  177. package/dist/components/other/CloudLogo/CloudLogo.js +1 -1
  178. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  179. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  180. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  181. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  182. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  183. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  184. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  185. package/dist/components/overlays/Dialog/context.js +1 -1
  186. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  187. package/dist/components/overlays/Modal/Modal.js +1 -1
  188. package/dist/components/overlays/Modal/OpenTransition.js +1 -1
  189. package/dist/components/overlays/Modal/Overlay.js +1 -1
  190. package/dist/components/overlays/Modal/Popover.js +1 -1
  191. package/dist/components/overlays/Modal/Tray.js +1 -1
  192. package/dist/components/overlays/Modal/Underlay.js +1 -1
  193. package/dist/components/overlays/Notifications/Notification.js +1 -1
  194. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  195. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  196. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  197. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  198. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  199. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  200. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  201. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  202. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  203. package/dist/components/overlays/Notifications/index.js +1 -1
  204. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  205. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  206. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  207. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  208. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  209. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  210. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  211. package/dist/components/overlays/Toast/index.js +1 -1
  212. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  213. package/dist/components/overlays/Toast/useToast.js +1 -1
  214. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  215. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  216. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  217. package/dist/components/overlays/Tooltip/context.js +1 -1
  218. package/dist/components/portal/Portal.js +1 -1
  219. package/dist/components/portal/PortalProvider.js +1 -1
  220. package/dist/components/portal/usePortal.js +1 -1
  221. package/dist/components/shared/InvalidIcon.js +1 -1
  222. package/dist/components/shared/ValidIcon.js +1 -1
  223. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  224. package/dist/components/status/Spin/Cube.js +1 -1
  225. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  226. package/dist/components/status/Spin/Spin.js +1 -1
  227. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  228. package/dist/data/item-themes.js +1 -1
  229. package/dist/data/themes.js +1 -1
  230. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  231. package/dist/icons/AdjustmentsIcon.js +1 -1
  232. package/dist/icons/AiIcon.js +1 -1
  233. package/dist/icons/AreaChartIcon.js +1 -1
  234. package/dist/icons/BackwardIcon.js +1 -1
  235. package/dist/icons/BarChartIcon.js +1 -1
  236. package/dist/icons/BellFilledIcon.js +1 -1
  237. package/dist/icons/BellIcon.js +1 -1
  238. package/dist/icons/BooleanIcon.js +1 -1
  239. package/dist/icons/CalendarEditIcon.js +1 -1
  240. package/dist/icons/CalendarIcon.js +1 -1
  241. package/dist/icons/CaretDownIcon.js +1 -1
  242. package/dist/icons/CaretUpIcon.js +1 -1
  243. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  244. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  245. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  246. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  247. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  248. package/dist/icons/ChartBarLineIcon.js +1 -1
  249. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  250. package/dist/icons/ChartBarStackedIcon.js +1 -1
  251. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  252. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  253. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  254. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  255. package/dist/icons/ChartBubbleIcon.js +1 -1
  256. package/dist/icons/ChartDonut2Icon.js +1 -1
  257. package/dist/icons/ChartFunnelIcon.js +1 -1
  258. package/dist/icons/ChartHeatmapIcon.js +1 -1
  259. package/dist/icons/ChartKPIIcon.js +1 -1
  260. package/dist/icons/ChartPie2Icon.js +1 -1
  261. package/dist/icons/ChartScatterIcon.js +1 -1
  262. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  263. package/dist/icons/CheckCircleIcon.js +1 -1
  264. package/dist/icons/CheckIcon.js +1 -1
  265. package/dist/icons/CircleFilledIcon.js +1 -1
  266. package/dist/icons/ClearIcon.js +1 -1
  267. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  268. package/dist/icons/CloseCircleIcon.js +1 -1
  269. package/dist/icons/CloseIcon.js +1 -1
  270. package/dist/icons/CodeIcon.js +1 -1
  271. package/dist/icons/ColumnTotalIcon.js +1 -1
  272. package/dist/icons/CopyIcon.js +1 -1
  273. package/dist/icons/CountIcon.js +1 -1
  274. package/dist/icons/CubeIcon.js +1 -1
  275. package/dist/icons/CubePauseIcon.js +1 -1
  276. package/dist/icons/CubePlayIcon.js +1 -1
  277. package/dist/icons/CurrencyDollarIcon.js +1 -1
  278. package/dist/icons/DangerIcon.js +1 -1
  279. package/dist/icons/DashboardIcon.js +1 -1
  280. package/dist/icons/DatabaseIcon.js +1 -1
  281. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  282. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  283. package/dist/icons/DirectionIcon.js +1 -1
  284. package/dist/icons/DonutIcon.js +1 -1
  285. package/dist/icons/DownIcon.js +1 -1
  286. package/dist/icons/EditIcon.js +1 -1
  287. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  288. package/dist/icons/ExclamationCircleIcon.js +1 -1
  289. package/dist/icons/ExclamationIcon.js +1 -1
  290. package/dist/icons/EyeIcon.js +1 -1
  291. package/dist/icons/EyeInvisibleIcon.js +1 -1
  292. package/dist/icons/FilterIcon.js +1 -1
  293. package/dist/icons/FolderFilledIcon.js +1 -1
  294. package/dist/icons/FolderIcon.js +1 -1
  295. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  296. package/dist/icons/FolderOpenIcon.js +1 -1
  297. package/dist/icons/ForwardIcon.js +1 -1
  298. package/dist/icons/HierarchyIcon.js +1 -1
  299. package/dist/icons/HierarchyOpenIcon.js +1 -1
  300. package/dist/icons/Icon.js +1 -1
  301. package/dist/icons/InfoCircleIcon.js +1 -1
  302. package/dist/icons/InfoIcon.js +1 -1
  303. package/dist/icons/KeyIcon.js +1 -1
  304. package/dist/icons/LeftIcon.js +1 -1
  305. package/dist/icons/LineChartIcon.js +1 -1
  306. package/dist/icons/LoadingIcon.js +1 -1
  307. package/dist/icons/LockFilledIcon.js +1 -1
  308. package/dist/icons/LockIcon.js +1 -1
  309. package/dist/icons/MoreIcon.js +1 -1
  310. package/dist/icons/NotAllowedIcon.js +1 -1
  311. package/dist/icons/Number123Icon.js +1 -1
  312. package/dist/icons/NumberIcon.js +1 -1
  313. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  314. package/dist/icons/PauseCircleIcon.js +1 -1
  315. package/dist/icons/PauseIcon.js +1 -1
  316. package/dist/icons/PercentageIcon.js +1 -1
  317. package/dist/icons/PieChartIcon.js +1 -1
  318. package/dist/icons/PlayCircleIcon.js +1 -1
  319. package/dist/icons/PlayIcon.js +1 -1
  320. package/dist/icons/PlusIcon.js +1 -1
  321. package/dist/icons/ProgressBarIcon.js +1 -1
  322. package/dist/icons/ReloadIcon.js +1 -1
  323. package/dist/icons/ReportIcon.js +1 -1
  324. package/dist/icons/ReturnIcon.js +1 -1
  325. package/dist/icons/RightIcon.js +1 -1
  326. package/dist/icons/RowTotalsIcon.js +1 -1
  327. package/dist/icons/SchemeIcon.js +1 -1
  328. package/dist/icons/SearchIcon.js +1 -1
  329. package/dist/icons/SemanticQueryIcon.js +1 -1
  330. package/dist/icons/SettingsIcon.js +1 -1
  331. package/dist/icons/ShieldFilledIcon.js +1 -1
  332. package/dist/icons/ShieldIcon.js +1 -1
  333. package/dist/icons/SlashIcon.js +1 -1
  334. package/dist/icons/SparklesIcon.js +1 -1
  335. package/dist/icons/SqlIcon.js +1 -1
  336. package/dist/icons/StatsIcon.js +1 -1
  337. package/dist/icons/StopIcon.js +1 -1
  338. package/dist/icons/StringIcon.js +1 -1
  339. package/dist/icons/SubtotalsIcon.js +1 -1
  340. package/dist/icons/SwitchIcon.js +1 -1
  341. package/dist/icons/TableIcon.js +1 -1
  342. package/dist/icons/ThumbsDownIcon.js +1 -1
  343. package/dist/icons/ThumbsUpIcon.js +1 -1
  344. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  345. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  346. package/dist/icons/ThunderboltIcon.js +1 -1
  347. package/dist/icons/TimeIcon.js +1 -1
  348. package/dist/icons/TrashIcon.js +1 -1
  349. package/dist/icons/UnlockIcon.js +1 -1
  350. package/dist/icons/UpIcon.js +1 -1
  351. package/dist/icons/UserGroupIcon.js +1 -1
  352. package/dist/icons/UserIcon.js +1 -1
  353. package/dist/icons/UserLockIcon.js +1 -1
  354. package/dist/icons/ViewIcon.js +1 -1
  355. package/dist/icons/WarningFilledIcon.js +1 -1
  356. package/dist/icons/WarningIcon.js +1 -1
  357. package/dist/icons/wrap-icon.js +1 -1
  358. package/dist/index.js +1 -1
  359. package/dist/provider.js +1 -1
  360. package/dist/providers/TrackingProvider.js +1 -1
  361. package/dist/providers/navigationAdapter.default.js +1 -1
  362. package/dist/tokens/base.js +1 -1
  363. package/dist/tokens/colors.js +1 -1
  364. package/dist/tokens/index.js +1 -1
  365. package/dist/tokens/layout.js +1 -1
  366. package/dist/tokens/shadows.js +1 -1
  367. package/dist/tokens/sizes.js +1 -1
  368. package/dist/tokens/spacing.js +1 -1
  369. package/dist/utils/ResizeSensor.js +1 -1
  370. package/dist/utils/is-dev-env.js +1 -1
  371. package/dist/utils/modules.js +1 -1
  372. package/dist/utils/promise.js +1 -1
  373. package/dist/utils/raf.js +1 -1
  374. package/dist/utils/random.js +1 -1
  375. package/dist/utils/range.js +1 -1
  376. package/dist/utils/react/RenderCache.js +1 -1
  377. package/dist/utils/react/Slots.js +1 -1
  378. package/dist/utils/react/chain.js +1 -1
  379. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  380. package/dist/utils/react/index.js +1 -1
  381. package/dist/utils/react/interactions.js +1 -1
  382. package/dist/utils/react/isTextOnly.js +1 -1
  383. package/dist/utils/react/mapProps.js +1 -1
  384. package/dist/utils/react/mergeProps.js +1 -1
  385. package/dist/utils/react/nullableValue.js +1 -1
  386. package/dist/utils/react/resolveIcon.js +1 -1
  387. package/dist/utils/react/sharedStore.js +1 -1
  388. package/dist/utils/react/useCombinedRefs.js +1 -1
  389. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  390. package/dist/utils/react/useEventBus.js +1 -1
  391. package/dist/utils/react/useId.js +1 -1
  392. package/dist/utils/react/useIsDarwin.js +1 -1
  393. package/dist/utils/react/useKeySymbols.js +1 -1
  394. package/dist/utils/react/useLayoutEffect.js +1 -1
  395. package/dist/utils/react/useLocalStorage.js +1 -1
  396. package/dist/utils/react/useMergeStyles.js +1 -1
  397. package/dist/utils/react/useQaProps.js +1 -1
  398. package/dist/utils/react/useViewportSize.js +1 -1
  399. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  400. package/dist/utils/tree.js +1 -1
  401. package/dist/utils/warnings.js +1 -1
  402. package/dist/version.js +2 -2
  403. package/docs/ComplexLayout.md +469 -0
  404. package/docs/CreateComponent.md +410 -0
  405. package/docs/Introduction.md +122 -0
  406. package/docs/RenderCache.md +172 -0
  407. package/docs/Result.md +35 -0
  408. package/docs/SimpleLayout.md +26 -0
  409. package/docs/Typography.md +38 -0
  410. package/docs/components/CollectionItem.md +299 -0
  411. package/docs/components/actions/Banner.md +189 -0
  412. package/docs/components/actions/Button.md +183 -0
  413. package/docs/components/actions/ButtonSplit.md +189 -0
  414. package/docs/components/actions/CommandMenu.md +430 -0
  415. package/docs/components/actions/ItemButton.md +304 -0
  416. package/docs/components/actions/Link.md +325 -0
  417. package/docs/components/actions/Menu.md +509 -0
  418. package/docs/components/actions/use-anchored-menu.md +211 -0
  419. package/docs/components/actions/use-context-menu.md +220 -0
  420. package/docs/components/content/Badge.md +187 -0
  421. package/docs/components/content/Disclosure.md +177 -0
  422. package/docs/components/content/HotKeys.md +352 -0
  423. package/docs/components/content/Item.md +488 -0
  424. package/docs/components/content/ItemCard.md +125 -0
  425. package/docs/components/content/Layout.md +866 -0
  426. package/docs/components/content/Tag.md +156 -0
  427. package/docs/components/content/TextItem.md +211 -0
  428. package/docs/components/fields/Checkbox.md +180 -0
  429. package/docs/components/fields/ComboBox.md +617 -0
  430. package/docs/components/fields/DatePicker.md +231 -0
  431. package/docs/components/fields/FileInput.md +197 -0
  432. package/docs/components/fields/FilterListBox.md +703 -0
  433. package/docs/components/fields/FilterPicker.md +736 -0
  434. package/docs/components/fields/HueSlider.md +175 -0
  435. package/docs/components/fields/ListBox.md +691 -0
  436. package/docs/components/fields/NumberInput.md +184 -0
  437. package/docs/components/fields/PasswordInput.md +218 -0
  438. package/docs/components/fields/Picker.md +884 -0
  439. package/docs/components/fields/RadioGroup.md +314 -0
  440. package/docs/components/fields/SearchInput.md +227 -0
  441. package/docs/components/fields/Select.md +583 -0
  442. package/docs/components/fields/Slider.md +53 -0
  443. package/docs/components/fields/Switch.md +174 -0
  444. package/docs/components/fields/TextArea.md +61 -0
  445. package/docs/components/fields/TextInput.md +204 -0
  446. package/docs/components/fields/TextInputMapper.md +34 -0
  447. package/docs/components/form/Field.md +341 -0
  448. package/docs/components/form/Form.md +455 -0
  449. package/docs/components/form/FormInstance.md +319 -0
  450. package/docs/components/helpers/DisplayTransition.md +259 -0
  451. package/docs/components/helpers/IconSwitch.md +156 -0
  452. package/docs/components/navigation/Tabs.md +704 -0
  453. package/docs/components/overlays/Dialog.md +202 -0
  454. package/docs/components/overlays/DialogContainer.md +201 -0
  455. package/docs/components/overlays/DialogForm.md +290 -0
  456. package/docs/components/overlays/DialogTrigger.md +191 -0
  457. package/docs/components/overlays/Notifications.md +406 -0
  458. package/docs/components/overlays/Toast.md +285 -0
  459. package/docs/components/overlays/Tooltip.md +371 -0
  460. package/docs/components/overlays/UseDialogContainer.md +603 -0
  461. package/package.json +1 -1
  462. package/docs/.gitignore +0 -3
@@ -0,0 +1,736 @@
1
+ # FilterPicker
2
+
3
+ A versatile selection component that combines a trigger button with a searchable dropdown. It provides a space-efficient interface for selecting one or multiple items from a filtered list, with support for sections, custom summaries, and various UI states. Built with React Aria's accessibility features and the Cube `tasty` style system.
4
+
5
+ ## When to Use
6
+
7
+ - Creating filter interfaces where users need to select from predefined options
8
+ - Building advanced search and filtering systems with multiple criteria
9
+ - Implementing tag-based selection systems with multiple categories
10
+ - Designing compact selection interfaces where space is limited
11
+ - Providing searchable selection without taking up permanent screen space
12
+ - Building user preference panels with organized option groups
13
+
14
+ ## Component
15
+
16
+ ---
17
+
18
+ ### Properties
19
+
20
+ ### Base Properties
21
+
22
+ Supports [Base properties](../../tasty/tasty.md)
23
+
24
+ ### Styling Properties
25
+
26
+ #### styles
27
+
28
+ Customizes the main wrapper element of the FilterPicker component.
29
+
30
+ **Sub-elements:**
31
+ - None - styles apply directly to the wrapper
32
+
33
+ #### triggerStyles
34
+
35
+ Customizes the trigger button element.
36
+
37
+ **Sub-elements:**
38
+ - None - styles apply directly to the trigger button
39
+
40
+ #### listBoxStyles
41
+
42
+ Customizes the dropdown list container within the popover.
43
+
44
+ **Sub-elements:**
45
+ - Same as FilterListBox: `Label`, `Description`, `Content`, `Checkbox`, `CheckboxWrapper`
46
+
47
+ #### popoverStyles
48
+
49
+ Customizes the popover dialog that contains the FilterListBox.
50
+
51
+ **Sub-elements:**
52
+ - Same as Dialog component sub-elements
53
+
54
+ #### headerStyles
55
+
56
+ Customizes the header area when header prop is provided.
57
+
58
+ **Sub-elements:**
59
+ - None - styles apply directly to the header container
60
+
61
+ #### footerStyles
62
+
63
+ Customizes the footer area when footer prop is provided.
64
+
65
+ **Sub-elements:**
66
+ - None - styles apply directly to the footer container
67
+
68
+ ### Style Properties
69
+
70
+ These properties allow direct style application without using the `styles` prop: `width`, `height`, `margin`, `padding`, `position`, `inset`, `zIndex`, `gridArea`, `order`, `gridColumn`, `gridRow`, `placeSelf`, `alignSelf`, `justifySelf`, `opacity`, `color`, `fill`, `fade`.
71
+
72
+ ### Modifiers
73
+
74
+ The `mods` property accepts the following modifiers you can override:
75
+
76
+ | Modifier | Type | Description |
77
+ |----------|------|-------------|
78
+ | `placeholder` | `boolean` | Applied when no selection is made |
79
+ | `selected` | `boolean` | Applied when items are selected |
80
+
81
+ ## Sub-components
82
+
83
+ ### FilterPicker.Item
84
+
85
+ Individual items within the FilterPicker dropdown. Each item is rendered using [Item](../content/Item.md) and supports all Item properties for layout, icons, descriptions, and interactive features.
86
+
87
+ #### Item API
88
+
89
+ For detailed information about all available item properties, see [Item documentation](../content/Item.md). Key properties include:
90
+
91
+ | Property | Type | Description |
92
+ |----------|------|-------------|
93
+ | key | `string \| number` | Unique identifier for the item (required) |
94
+ | children | `ReactNode` | The main content/label for the option |
95
+ | icon | `ReactNode` | Icon displayed before the content |
96
+ | rightIcon | `ReactNode` | Icon displayed after the content |
97
+ | description | `ReactNode` | Secondary text below the main content |
98
+ | descriptionPlacement | `'inline' \| 'block'` | How the description is positioned |
99
+ | prefix | `ReactNode` | Content before the main text |
100
+ | suffix | `ReactNode` | Content after the main text |
101
+ | tooltip | `string \| boolean \| object` | Tooltip configuration |
102
+ | styles | `Styles` | Custom styling for the item |
103
+ | qa | `string` | QA identifier for testing |
104
+
105
+ #### Example with Rich Items
106
+
107
+ ```jsx
108
+ <FilterPicker label="Team Filters" selectionMode="multiple">
109
+ <FilterPicker.Item
110
+ key="active-users"
111
+ icon={<IconUsers />}
112
+ description="Filter by active users"
113
+ suffix="12 users"
114
+ >
115
+ Active Users
116
+ </FilterPicker.Item>
117
+ <FilterPicker.Item
118
+ key="recent-activity"
119
+ icon={<IconClock />}
120
+ description="Recent activity in the last week"
121
+ rightIcon={<IconBadge />}
122
+ >
123
+ Recent Activity
124
+ </FilterPicker.Item>
125
+ </FilterPicker>
126
+ ```
127
+
128
+ ### FilterPicker.Section
129
+
130
+ Groups related items together with an optional heading.
131
+
132
+ | Property | Type | Default | Description |
133
+ |----------|------|---------|-------------|
134
+ | title | `ReactNode` | - | Optional heading text for the section |
135
+ | children | `FilterPicker.Item[]` | - | Collection of FilterPicker.Item components |
136
+
137
+ ## Content Patterns
138
+
139
+ ### Static Children Pattern
140
+
141
+ The most common pattern for FilterPicker is to provide static children using `FilterPicker.Item` and `FilterPicker.Section` components:
142
+
143
+ ```jsx
144
+ <FilterPicker label="Select Options">
145
+ <FilterPicker.Item key="apple">Apple</FilterPicker.Item>
146
+ <FilterPicker.Item key="banana">Banana</FilterPicker.Item>
147
+ <FilterPicker.Section title="Vegetables">
148
+ <FilterPicker.Item key="carrot">Carrot</FilterPicker.Item>
149
+ </FilterPicker.Section>
150
+ </FilterPicker>
151
+ ```
152
+
153
+ ### Dynamic Content Pattern
154
+
155
+ For large datasets or dynamic content, use the `items` prop with a render function. This pattern enables automatic virtualization for performance:
156
+
157
+ ```jsx
158
+ <FilterPicker
159
+ label="Large Dataset"
160
+ items={largeDataArray}
161
+ >
162
+ {(item) => (
163
+ <FilterPicker.Item key={item.id} textValue={item.name}>
164
+ {item.name}
165
+ </FilterPicker.Item>
166
+ )}
167
+ </FilterPicker>
168
+ ```
169
+
170
+ **Key Benefits:**
171
+ - **Virtualization**: Automatically enabled for large lists without sections
172
+ - **Performance**: Only renders visible items in the DOM
173
+ - **Dynamic Content**: Perfect for data fetched from APIs or changing datasets
174
+ - **Memory Efficient**: Handles thousands of items smoothly
175
+ - **Selected Items Sorting**: When using the `items` prop, selected items are automatically sorted to the top when the popover reopens (can be controlled with `sortSelectedToTop`)
176
+
177
+ **When to Use:**
178
+ - Lists with 50+ items
179
+ - Dynamic data from APIs
180
+ - Content that changes frequently
181
+ - When virtualization performance is needed
182
+
183
+ ## Variants
184
+
185
+ ### Selection Modes
186
+
187
+ - `single` - Allows selecting only one item at a time
188
+ - `multiple` - Allows selecting multiple items
189
+
190
+ ### Button Types
191
+
192
+ - `outline` - Default outlined button style
193
+ - `clear` - Transparent background button
194
+ - `primary` - Primary brand color button
195
+ - `secondary` - Secondary color button
196
+ - `neutral` - Neutral color button
197
+
198
+ ### Sizes
199
+
200
+ - `small` - Compact size for dense interfaces (28px height)
201
+ - `medium` - Standard size for general use (32px height, default)
202
+ - `large` - Emphasized size for important actions (40px height)
203
+
204
+ ## Examples
205
+
206
+ ### Basic Usage
207
+
208
+ ```jsx
209
+ <FilterPicker
210
+ label="Select Options"
211
+ placeholder="Choose items..."
212
+ searchPlaceholder="Search options..."
213
+ >
214
+ <FilterPicker.Item key="apple">Apple</FilterPicker.Item>
215
+ <FilterPicker.Item key="banana">Banana</FilterPicker.Item>
216
+ <FilterPicker.Item key="cherry">Cherry</FilterPicker.Item>
217
+ </FilterPicker>
218
+ ```
219
+
220
+ ### Clearable Selection
221
+
222
+ ```jsx
223
+ <FilterPicker
224
+ label="Clearable Filter Picker"
225
+ placeholder="Choose items..."
226
+ selectionMode="single"
227
+ isClearable={true}
228
+ defaultSelectedKey="apple"
229
+ >
230
+ <FilterPicker.Item key="apple">Apple</FilterPicker.Item>
231
+ <FilterPicker.Item key="banana">Banana</FilterPicker.Item>
232
+ <FilterPicker.Item key="cherry">Cherry</FilterPicker.Item>
233
+ </FilterPicker>
234
+ ```
235
+
236
+ ### Multiple Selection
237
+
238
+ ```jsx
239
+ <FilterPicker
240
+ label="Select Multiple Options"
241
+ placeholder="Choose items..."
242
+ selectionMode="multiple"
243
+ searchPlaceholder="Search options..."
244
+ >
245
+ <FilterPicker.Section title="Fruits">
246
+ <FilterPicker.Item key="apple">Apple</FilterPicker.Item>
247
+ <FilterPicker.Item key="banana">Banana</FilterPicker.Item>
248
+ </FilterPicker.Section>
249
+ <FilterPicker.Section title="Vegetables">
250
+ <FilterPicker.Item key="carrot">Carrot</FilterPicker.Item>
251
+ <FilterPicker.Item key="broccoli">Broccoli</FilterPicker.Item>
252
+ </FilterPicker.Section>
253
+ </FilterPicker>
254
+ ```
255
+
256
+ ### With Checkboxes
257
+
258
+ ```jsx
259
+ <FilterPicker
260
+ label="Select with Checkboxes"
261
+ selectionMode="multiple"
262
+ isCheckable={true}
263
+ searchPlaceholder="Search options..."
264
+ >
265
+ <FilterPicker.Item key="option1">Option 1</FilterPicker.Item>
266
+ <FilterPicker.Item key="option2">Option 2</FilterPicker.Item>
267
+ </FilterPicker>
268
+ ```
269
+
270
+ ### Multiple Selection with Select All
271
+
272
+ ```jsx
273
+ <FilterPicker
274
+ label="Select permissions"
275
+ placeholder="Choose permissions"
276
+ selectionMode="multiple"
277
+ showSelectAll={true}
278
+ selectAllLabel="All Permissions"
279
+ >
280
+ <FilterPicker.Item key="read">Read</FilterPicker.Item>
281
+ <FilterPicker.Item key="write">Write</FilterPicker.Item>
282
+ <FilterPicker.Item key="execute">Execute</FilterPicker.Item>
283
+ </FilterPicker>
284
+ ```
285
+
286
+ ### Custom Summary
287
+
288
+ ```jsx
289
+ <FilterPicker
290
+ label="Custom Summary Display"
291
+ selectionMode="multiple"
292
+ renderSummary={({ selectedLabels, selectedKeys }) => {
293
+ if (selectedKeys.length === 0) return null;
294
+ if (selectedKeys.length === 1) return `${selectedLabels[0]} selected`;
295
+ return `${selectedKeys.length} items selected`;
296
+ }}
297
+ >
298
+ <FilterPicker.Item key="item1">Item 1</FilterPicker.Item>
299
+ <FilterPicker.Item key="item2">Item 2</FilterPicker.Item>
300
+ </FilterPicker>
301
+ ```
302
+
303
+ ### No Summary (Icon Only)
304
+
305
+ ```jsx
306
+ <FilterPicker
307
+ selectionMode="multiple"
308
+ renderSummary={false}
309
+ icon={<FilterIcon />}
310
+ aria-label="Apply filters"
311
+ >
312
+ <FilterPicker.Item key="filter1">Filter 1</FilterPicker.Item>
313
+ <FilterPicker.Item key="filter2">Filter 2</FilterPicker.Item>
314
+ </FilterPicker>
315
+ ```
316
+
317
+ ### With Header and Footer
318
+
319
+ ```jsx
320
+ <FilterPicker
321
+ label="Programming Languages"
322
+ selectionMode="multiple"
323
+ header={
324
+ <Space gap="1x" flow="row" placeItems="center">
325
+ <Title level={6}>Languages</Title>
326
+ <Badge type="purple">12</Badge>
327
+ </Space>
328
+ }
329
+ footer={
330
+ <Text color="#dark.50" preset="t4">
331
+ Popular languages shown
332
+ </Text>
333
+ }
334
+ >
335
+ <FilterPicker.Section title="Frontend">
336
+ <FilterPicker.Item key="javascript">JavaScript</FilterPicker.Item>
337
+ <FilterPicker.Item key="react">React</FilterPicker.Item>
338
+ </FilterPicker.Section>
339
+ </FilterPicker>
340
+ ```
341
+
342
+ ### With Custom Values
343
+
344
+ ```jsx
345
+ <FilterPicker
346
+ label="Custom Values Allowed"
347
+ placeholder="Type or select..."
348
+ selectionMode="multiple"
349
+ allowsCustomValue={true}
350
+ searchPlaceholder="Search or add custom value..."
351
+ >
352
+ <FilterPicker.Item key="existing1">Existing Option 1</FilterPicker.Item>
353
+ <FilterPicker.Item key="existing2">Existing Option 2</FilterPicker.Item>
354
+ </FilterPicker>
355
+ ```
356
+
357
+ ### Complex Example
358
+
359
+ ```jsx
360
+ <FilterPicker
361
+ label="Advanced Filter System"
362
+ selectionMode="multiple"
363
+ isCheckable={true}
364
+ renderSummary={({ selectedKeys, selectedLabels }) => {
365
+ if (selectedKeys.length === 0) return null;
366
+ if (selectedKeys.length <= 3)
367
+ return `${selectedKeys.length} filters: ${selectedLabels.join(', ')}`;
368
+ return `${selectedKeys.length} filters applied`;
369
+ }}
370
+ header={
371
+ <Space gap="1x" flow="row" placeItems="center">
372
+ <FilterIcon />
373
+ <Title level={6}>Filter Options</Title>
374
+ </Space>
375
+ }
376
+ >
377
+ <FilterPicker.Section title="Date & Time">
378
+ <FilterPicker.Item key="today">Created Today</FilterPicker.Item>
379
+ <FilterPicker.Item key="week">Created This Week</FilterPicker.Item>
380
+ </FilterPicker.Section>
381
+ <FilterPicker.Section title="Status">
382
+ <FilterPicker.Item key="active">Active Items</FilterPicker.Item>
383
+ <FilterPicker.Item key="draft">Draft Items</FilterPicker.Item>
384
+ </FilterPicker.Section>
385
+ </FilterPicker>
386
+ ```
387
+
388
+ ## Accessibility
389
+
390
+ ### Keyboard Navigation
391
+
392
+ - `Tab` - Moves focus to the trigger button
393
+ - `Space/Enter` - Opens the dropdown popover
394
+ - `Arrow Up/Down` - Opens the popover (when closed) or navigates through options (when open)
395
+ - `Escape` - Closes the popover or clears search
396
+ - `Home/End` - Navigate to first/last option
397
+
398
+ ### Screen Reader Support
399
+
400
+ - Trigger button announces current selection state
401
+ - Popover opening/closing is announced
402
+ - Search functionality is properly communicated
403
+ - Selection changes are announced immediately
404
+ - Loading and validation states are communicated
405
+
406
+ ### ARIA Properties
407
+
408
+ - `aria-label` - Provides accessible label for the trigger button
409
+ - `aria-expanded` - Indicates whether the popover is open
410
+ - `aria-haspopup` - Indicates the button controls a listbox
411
+ - `aria-describedby` - Associates help text and descriptions
412
+
413
+ ## Best Practices
414
+
415
+ 1. **Do**: Provide clear, descriptive labels for the trigger
416
+ ```jsx
417
+ <FilterPicker label="Filter by Category" placeholder="Choose categories...">
418
+ <FilterPicker.Item key="electronics">Electronics</FilterPicker.Item>
419
+ </FilterPicker>
420
+ ```
421
+
422
+ 2. **Don't**: Use overly long option texts that will be truncated
423
+ ```jsx
424
+ // ❌ Avoid very long option text
425
+ <FilterPicker.Item key="long">
426
+ This is an extremely long option text that will be truncated
427
+ </FilterPicker.Item>
428
+ ```
429
+
430
+ 3. **Do**: Use sections for logical grouping of small to medium lists
431
+ ```jsx
432
+ <FilterPicker.Section title="Categories">
433
+ <FilterPicker.Item key="tech">Technology</FilterPicker.Item>
434
+ </FilterPicker.Section>
435
+ ```
436
+
437
+ 4. **Do**: Use dynamic content pattern for large datasets
438
+ ```jsx
439
+ // ✅ For large lists (50+ items)
440
+ <FilterPicker items={largeDataset}>
441
+ {(item) => <FilterPicker.Item key={item.id}>{item.name}</FilterPicker.Item>}
442
+ </FilterPicker>
443
+ ```
444
+
445
+ 5. **Do**: Use `showSelectAll` for efficient multiple selection in compact interfaces
446
+ ```jsx
447
+ <FilterPicker
448
+ selectionMode="multiple"
449
+ showSelectAll
450
+ selectAllLabel="Select All Options"
451
+ placeholder="Choose items..."
452
+ >
453
+ {/* many items */}
454
+ </FilterPicker>
455
+ ```
456
+
457
+ 6. **Do**: Use `isClearable` when users need to quickly clear selections
458
+ ```jsx
459
+ <FilterPicker
460
+ isClearable
461
+ selectionMode="single"
462
+ label="Choose option"
463
+ >
464
+ {/* items */}
465
+ </FilterPicker>
466
+ ```
467
+
468
+ 7. **Do**: Use `triggerStyles` for custom styling needs beyond standard types
469
+ 8. **Accessibility**: Always provide meaningful labels and placeholders
470
+ 9. **Performance**: Use `textValue` prop for complex option content
471
+ 10. **UX**: Consider using `isCheckable` for multiple selection clarity
472
+
473
+ ## Integration with Forms
474
+
475
+ This component supports all [Field properties](../form/Field.md) when used within a Form. The component automatically handles form validation, field states, and integrates with form submission.
476
+
477
+ ```jsx
478
+ <Form onSubmit={handleSubmit}>
479
+ <FilterPicker
480
+ name="categories"
481
+ label="Product Categories"
482
+ isRequired
483
+ selectionMode="multiple"
484
+ placeholder="Select categories..."
485
+ rules={[{ required: true }]}
486
+ >
487
+ <FilterPicker.Section title="Electronics">
488
+ <FilterPicker.Item key="phones">Phones</FilterPicker.Item>
489
+ <FilterPicker.Item key="laptops">Laptops</FilterPicker.Item>
490
+ </FilterPicker.Section>
491
+ <FilterPicker.Section title="Clothing">
492
+ <FilterPicker.Item key="shirts">Shirts</FilterPicker.Item>
493
+ <FilterPicker.Item key="pants">Pants</FilterPicker.Item>
494
+ </FilterPicker.Section>
495
+ </FilterPicker>
496
+ </Form>
497
+ ```
498
+
499
+ ## Advanced Features
500
+
501
+ ### Custom Summary Rendering
502
+
503
+ FilterPicker supports custom summary functions for the trigger display:
504
+
505
+ ```jsx
506
+ const renderSummary = ({ selectedLabels, selectedKeys, selectionMode }) => {
507
+ if (selectionMode === 'single') {
508
+ return selectedLabels[0] ? `Selected: ${selectedLabels[0]}` : null;
509
+ }
510
+
511
+ if (selectedKeys.length === 0) return null;
512
+ if (selectedKeys.length === 1) return selectedLabels[0];
513
+ if (selectedKeys.length <= 3) return selectedLabels.join(', ');
514
+ return `${selectedKeys.length} items selected`;
515
+ };
516
+
517
+ <FilterPicker renderSummary={renderSummary}>
518
+ {/* items */}
519
+ </FilterPicker>
520
+ ```
521
+
522
+ ### Custom Values
523
+
524
+ When `allowsCustomValue={true}`, users can add new options:
525
+
526
+ ```jsx
527
+ <FilterPicker
528
+ allowsCustomValue={true}
529
+ selectionMode="multiple"
530
+ searchPlaceholder="Search or add new..."
531
+ >
532
+ <FilterPicker.Item key="existing">Existing Option</FilterPicker.Item>
533
+ </FilterPicker>
534
+ ```
535
+
536
+ Custom values:
537
+ - Are automatically added when typed and selected
538
+ - Persist across popover sessions
539
+ - Appear in the selection summary
540
+ - Can be removed like any other selection
541
+
542
+ ### Selected Items Sorting
543
+
544
+ When using the `items` prop, FilterPicker automatically sorts selected items to the top when the popover reopens. This helps users quickly see and manage their selections.
545
+
546
+ ```jsx
547
+ // ✅ Default behavior - sorting enabled with items prop
548
+ <FilterPicker
549
+ items={fruits}
550
+ selectionMode="multiple"
551
+ >
552
+ {(item) => <FilterPicker.Item key={item.key}>{item.label}</FilterPicker.Item>}
553
+ </FilterPicker>
554
+
555
+ // Explicitly disable sorting
556
+ <FilterPicker
557
+ items={fruits}
558
+ sortSelectedToTop={false}
559
+ selectionMode="multiple"
560
+ >
561
+ {(item) => <FilterPicker.Item key={item.key}>{item.label}</FilterPicker.Item>}
562
+ </FilterPicker>
563
+
564
+ // ❌ Sorting not available with JSX children
565
+ <FilterPicker selectionMode="multiple">
566
+ <FilterPicker.Item key="apple">Apple</FilterPicker.Item>
567
+ <FilterPicker.Item key="banana">Banana</FilterPicker.Item>
568
+ </FilterPicker>
569
+ ```
570
+
571
+ **Key behaviors:**
572
+ - Sorting only works when using the `items` prop
573
+ - Selected items move to the top when the popover reopens
574
+ - Within sections, selected items sort to the top of their section
575
+ - Sorting is cached during a session to maintain order while the popover is open
576
+ - Defaults to `true` for items prop, `false` for JSX children
577
+ - Can be explicitly controlled with the `sortSelectedToTop` prop
578
+
579
+ ### Icon-Only Mode
580
+
581
+ For space-constrained interfaces:
582
+
583
+ ```jsx
584
+ <FilterPicker
585
+ renderSummary={false}
586
+ icon={<FilterIcon />}
587
+ aria-label="Apply filters"
588
+ type="clear"
589
+ >
590
+ {/* options */}
591
+ </FilterPicker>
592
+ ```
593
+
594
+ ### Clearable Selection
595
+
596
+ Add a clear button to quickly reset selection:
597
+
598
+ ```jsx
599
+ <FilterPicker
600
+ isClearable
601
+ selectionMode="single"
602
+ label="Choose option"
603
+ onClear={() => console.log('Selection cleared')}
604
+ >
605
+ {/* options */}
606
+ </FilterPicker>
607
+ ```
608
+
609
+ The clear button:
610
+ - Appears in the `rightIcon` slot when there's a selection
611
+ - Only shows when `isClearable={true}` and a selection exists
612
+ - Closes the popover when clicked
613
+ - Calls the optional `onClear` callback
614
+ - Is hidden when the picker is disabled or read-only
615
+
616
+ ### External Filtering
617
+
618
+ FilterPicker provides two approaches for implementing external filtering when you need to control the filtering logic outside the component:
619
+
620
+ #### Approach 1: Disabled Internal Filtering
621
+
622
+ Use `filter={false}` to disable internal filtering while providing pre-filtered items:
623
+
624
+ ```jsx
625
+ const [externalSearch, setExternalSearch] = useState('');
626
+
627
+ const filteredFruits = useMemo(() => {
628
+ if (!externalSearch.trim()) return allFruits;
629
+ return allFruits.filter((fruit) =>
630
+ fruit.label.toLowerCase().includes(externalSearch.toLowerCase())
631
+ );
632
+ }, [externalSearch]);
633
+
634
+ <FilterPicker
635
+ label="Select Fruits"
636
+ placeholder="Choose fruits..."
637
+ selectionMode="multiple"
638
+ filter={false}
639
+ items={filteredFruits}
640
+ searchPlaceholder="Type to search..."
641
+ >
642
+ {(fruit) => (
643
+ <FilterPicker.Item key={fruit.key}>{fruit.label}</FilterPicker.Item>
644
+ )}
645
+ </FilterPicker>
646
+ ```
647
+
648
+ #### Approach 2: Controlled Search Input
649
+
650
+ Use `searchValue` and `onSearchChange` for complete control over the search behavior:
651
+
652
+ ```jsx
653
+ const [searchValue, setSearchValue] = useState('');
654
+
655
+ // Simulate debounced search
656
+ const [processedSearch, setProcessedSearch] = useState('');
657
+ useEffect(() => {
658
+ const timer = setTimeout(() => setProcessedSearch(searchValue), 300);
659
+ return () => clearTimeout(timer);
660
+ }, [searchValue]);
661
+
662
+ const filteredFruits = useMemo(() => {
663
+ if (!processedSearch.trim()) return allFruits;
664
+ return allFruits.filter((fruit) =>
665
+ fruit.label.toLowerCase().includes(processedSearch.toLowerCase())
666
+ );
667
+ }, [processedSearch]);
668
+
669
+ <FilterPicker
670
+ label="Select Fruits"
671
+ placeholder="Choose fruits..."
672
+ selectionMode="multiple"
673
+ searchValue={searchValue}
674
+ filter={false}
675
+ items={filteredFruits}
676
+ onSearchChange={setSearchValue}
677
+ >
678
+ {(fruit) => (
679
+ <FilterPicker.Item key={fruit.key}>{fruit.label}</FilterPicker.Item>
680
+ )}
681
+ </FilterPicker>
682
+ ```
683
+
684
+ **When to use each approach:**
685
+ - **`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.
686
+ - **Controlled Search**: Use when you need full control over the search input (debouncing, external UI sync, clearing from outside, or tracking search analytics).
687
+ - **Combine Both**: You can use both together for maximum control - controlled search input with external filtering.
688
+
689
+ ## Performance
690
+
691
+ ### Optimization Tips
692
+
693
+ - **Use Dynamic Content Pattern**: For large datasets (50+ items), use the `items` prop with render function to enable automatic virtualization
694
+ - **Avoid Sections for Large Lists**: Virtualization is disabled when sections are present, so avoid sections for very large datasets
695
+ - **Use `textValue` prop**: For complex option content, provide searchable text that includes more context than just the visible label
696
+ - **Implement custom filter functions**: For specific search needs or performance-critical filtering
697
+ - **Consider debounced selection changes**: For real-time updates that trigger expensive operations
698
+ - **Use external filtering**: For server-side filtering or complex custom logic
699
+
700
+ ### Virtualization
701
+
702
+ When using the dynamic content pattern (`items` prop) without sections, FilterPicker automatically enables virtualization:
703
+
704
+ ```jsx
705
+ // ✅ Virtualization enabled - excellent performance with large datasets
706
+ <FilterPicker items={largeArray}>
707
+ {(item) => <FilterPicker.Item key={item.id}>{item.name}</FilterPicker.Item>}
708
+ </FilterPicker>
709
+
710
+ // ❌ Virtualization disabled - sections prevent virtualization
711
+ <FilterPicker items={largeArray}>
712
+ <FilterPicker.Section title="All Items">
713
+ {(item) => <FilterPicker.Item key={item.id}>{item.name}</FilterPicker.Item>}
714
+ </FilterPicker.Section>
715
+ </FilterPicker>
716
+ ```
717
+
718
+ ### Content Optimization
719
+
720
+ ```jsx
721
+ // Optimized for performance
722
+ <FilterPicker.Item
723
+ key="complex"
724
+ textValue="John Doe - Senior Developer"
725
+ >
726
+ <UserCard user={user} />
727
+ </FilterPicker.Item>
728
+ ```
729
+
730
+ ## Related Components
731
+
732
+ - [FilterListBox](./FilterListBox.md) - The underlying searchable list component
733
+ - [Select](./Select.md) - Use for simple selection without search functionality
734
+ - [ComboBox](./ComboBox.md) - Use when users need to enter custom values
735
+ - [ListBox](./ListBox.md) - Use for basic list selection without search
736
+ - [Button](../actions/Button.md) - The underlying trigger component