@cube-dev/ui-kit 0.0.0-canary-8700a46 → 0.0.0-canary-3b2471f

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 (571) hide show
  1. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  2. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  3. package/dist/_internal/hooks/use-event.js +1 -1
  4. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  5. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  6. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  7. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  8. package/dist/_internal/hooks/use-warn.js +1 -1
  9. package/dist/components/Block.js +1 -1
  10. package/dist/components/CollectionItem.js +1 -1
  11. package/dist/components/GlobalStyles.js +1 -1
  12. package/dist/components/GridProvider.js +1 -1
  13. package/dist/components/HiddenInput.js +1 -1
  14. package/dist/components/Root.js +1 -1
  15. package/dist/components/actions/Action/Action.js +1 -1
  16. package/dist/components/actions/Banner/Banner.js +1 -1
  17. package/dist/components/actions/Button/Button.js +1 -1
  18. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  19. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  20. package/dist/components/actions/ButtonSplit/context.js +1 -1
  21. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  22. package/dist/components/actions/CommandMenu/styled.js +1 -1
  23. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  24. package/dist/components/actions/ItemActionContext.js +1 -1
  25. package/dist/components/actions/ItemActionsWrapper.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/actions-run.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/InfoBadge/InfoBadge.js +1 -1
  56. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  57. package/dist/components/content/Item/Item.js +1 -1
  58. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  59. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  60. package/dist/components/content/Layout/GridLayout.js +1 -1
  61. package/dist/components/content/Layout/Layout.js +1 -1
  62. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  63. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  64. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  65. package/dist/components/content/Layout/LayoutContent.js +1 -1
  66. package/dist/components/content/Layout/LayoutContext.js +1 -1
  67. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  68. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  69. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  70. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  71. package/dist/components/content/Layout/LayoutPane.js +1 -1
  72. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  73. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  74. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  75. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  76. package/dist/components/content/Layout/index.js +1 -1
  77. package/dist/components/content/Layout/utils.js +1 -1
  78. package/dist/components/content/Paragraph.js +1 -1
  79. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  80. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  81. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  82. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  83. package/dist/components/content/Result/Result.js +1 -1
  84. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  85. package/dist/components/content/Tag/Tag.js +1 -1
  86. package/dist/components/content/Text.js +1 -1
  87. package/dist/components/content/TextItem/TextItem.js +1 -1
  88. package/dist/components/content/Title.js +1 -1
  89. package/dist/components/content/Tree/Tree.js +1 -1
  90. package/dist/components/content/Tree/TreeNode.js +1 -1
  91. package/dist/components/content/Tree/styled.js +1 -1
  92. package/dist/components/content/Tree/tree-index.js +1 -1
  93. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  94. package/dist/components/content/Tree/use-load-data.js +1 -1
  95. package/dist/components/content/highlightText.js +1 -1
  96. package/dist/components/content/use-auto-tooltip.js +1 -1
  97. package/dist/components/data/DataTable/DataTable.js +1 -1
  98. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  99. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  100. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  101. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  102. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  103. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  104. package/dist/components/data/TableBase/RowCollection.js +1 -1
  105. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  106. package/dist/components/data/TableBase/TableRow.js +1 -1
  107. package/dist/components/data/TableBase/TableView.js +1 -1
  108. package/dist/components/data/TableBase/column-menu.js +1 -1
  109. package/dist/components/data/TableBase/column-tint.js +1 -1
  110. package/dist/components/data/TableBase/row-menu.js +1 -1
  111. package/dist/components/data/TableBase/styled.js +1 -1
  112. package/dist/components/data/TableBase/table-tree.js +1 -1
  113. package/dist/components/data/TableBase/types.js +1 -1
  114. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  115. package/dist/components/data/TableBase/use-column-order.js +1 -1
  116. package/dist/components/data/TableBase/use-container-width.js +1 -1
  117. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  118. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  119. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  120. package/dist/components/data/TableBase/use-table-search.js +1 -1
  121. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  122. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  123. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  124. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  125. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  126. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  127. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  128. package/dist/components/fields/Checkbox/context.js +1 -1
  129. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  130. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  131. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  132. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  133. package/dist/components/fields/ComboBox/ComboBox.js +1 -1
  134. package/dist/components/fields/CommandTextArea/CommandTextArea.js +1 -1
  135. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  136. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  137. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  138. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  139. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  140. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  141. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  142. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  143. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  144. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  145. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  146. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  147. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  148. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  149. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  150. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  151. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  152. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  153. package/dist/components/fields/DatePicker/period.js +1 -1
  154. package/dist/components/fields/DatePicker/props.js +1 -1
  155. package/dist/components/fields/DatePicker/utils.js +1 -1
  156. package/dist/components/fields/FileInput/FileInput.js +1 -1
  157. package/dist/components/fields/FilterListBox/FilterListBox.js +1 -1
  158. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  159. package/dist/components/fields/Input/Input.js +1 -1
  160. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  161. package/dist/components/fields/ListBox/ListBox.js +1 -1
  162. package/dist/components/fields/ListBox/optionId.js +1 -1
  163. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +111 -108
  164. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  165. package/dist/components/fields/ListBoxPopover/listNavigation.js +4 -3
  166. package/dist/components/fields/ListBoxPopover/listNavigation.js.map +1 -1
  167. package/dist/components/fields/ListBoxPopover/useCompositeFocus.d.ts +1 -1
  168. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +110 -64
  169. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
  170. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  171. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  172. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  173. package/dist/components/fields/Picker/Picker.js +1 -1
  174. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  175. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  176. package/dist/components/fields/RadioGroup/context.js +1 -1
  177. package/dist/components/fields/SearchComboBox/SearchComboBox.js +1 -1
  178. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  179. package/dist/components/fields/Select/Select.js +1 -1
  180. package/dist/components/fields/Slider/Gradation.js +1 -1
  181. package/dist/components/fields/Slider/HueSlider.js +1 -1
  182. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  183. package/dist/components/fields/Slider/Slider.js +1 -1
  184. package/dist/components/fields/Slider/SliderBase.js +1 -1
  185. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  186. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  187. package/dist/components/fields/Slider/elements.js +1 -1
  188. package/dist/components/fields/Slider/index.js +1 -1
  189. package/dist/components/fields/Switch/Switch.js +1 -1
  190. package/dist/components/fields/TagInput/TagInput.d.ts +9 -2
  191. package/dist/components/fields/TagInput/TagInput.js +462 -394
  192. package/dist/components/fields/TagInput/TagInput.js.map +1 -1
  193. package/dist/components/fields/TagInput/TagList.js +1 -1
  194. package/dist/components/fields/TextArea/TextArea.js +1 -1
  195. package/dist/components/fields/TextInput/TextInput.js +1 -1
  196. package/dist/components/fields/TextInput/TextInputBase.js +1 -1
  197. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  198. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  199. package/dist/components/fields/TriggerActions.js +1 -1
  200. package/dist/components/fields/color/ColorPanel.js +1 -1
  201. package/dist/components/fields/color/channels.js +1 -1
  202. package/dist/components/fields/color/color.js +1 -1
  203. package/dist/components/fields/color/context.js +1 -1
  204. package/dist/components/form/FieldWrapper/FieldWrapper.js +1 -1
  205. package/dist/components/form/Form/Field.js +1 -1
  206. package/dist/components/form/Form/Form.js +1 -1
  207. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  208. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  209. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  210. package/dist/components/form/Form/SubmitError.js +1 -1
  211. package/dist/components/form/Form/backend.js +1 -1
  212. package/dist/components/form/Form/index.js +1 -1
  213. package/dist/components/form/Form/modern/actions.js +1 -1
  214. package/dist/components/form/Form/modern/context.js +1 -1
  215. package/dist/components/form/Form/modern/controller.js +1 -1
  216. package/dist/components/form/Form/modern/field-binding.js +1 -1
  217. package/dist/components/form/Form/modern/field.js +1 -1
  218. package/dist/components/form/Form/modern/react.js +1 -1
  219. package/dist/components/form/Form/modern/store.js +1 -1
  220. package/dist/components/form/Form/modern/validation.js +1 -1
  221. package/dist/components/form/Form/modern/values.js +1 -1
  222. package/dist/components/form/Form/reset-unbound-controls.js +1 -1
  223. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  224. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  225. package/dist/components/form/Form/use-field/use-field.js +1 -1
  226. package/dist/components/form/Form/use-form.js +1 -1
  227. package/dist/components/form/Form/validation.js +1 -1
  228. package/dist/components/form/Label.js +1 -1
  229. package/dist/components/form/legacy-tooltip.js +1 -1
  230. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  231. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  232. package/dist/components/form/validation/use-validation-props.js +1 -1
  233. package/dist/components/form/wrapper.js +1 -1
  234. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  235. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  236. package/dist/components/layout/Board/Board.js +1 -1
  237. package/dist/components/layout/Board/BoardProvider.js +1 -1
  238. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  239. package/dist/components/layout/Board/Widget.js +1 -1
  240. package/dist/components/layout/Board/WidgetHost.js +1 -1
  241. package/dist/components/layout/Board/board-context.js +1 -1
  242. package/dist/components/layout/Board/board-store.js +1 -1
  243. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  244. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  245. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  246. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  247. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  248. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  249. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  250. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  251. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  252. package/dist/components/layout/Board/index.js +1 -1
  253. package/dist/components/layout/Board/responsive-utils.js +1 -1
  254. package/dist/components/layout/Board/use-board-layout.js +1 -1
  255. package/dist/components/layout/Board/use-board-registry.js +1 -1
  256. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  257. package/dist/components/layout/Board/use-board-selection.js +1 -1
  258. package/dist/components/layout/Flex.js +1 -1
  259. package/dist/components/layout/Flow.js +1 -1
  260. package/dist/components/layout/Grid.js +1 -1
  261. package/dist/components/layout/Panel.js +1 -1
  262. package/dist/components/layout/Prefix.js +1 -1
  263. package/dist/components/layout/ResizablePanel.js +1 -1
  264. package/dist/components/layout/Space.js +1 -1
  265. package/dist/components/layout/Suffix.js +1 -1
  266. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  267. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  268. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  269. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  270. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  271. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  272. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  273. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  274. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  275. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  276. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  277. package/dist/components/navigation/Tabs/styled.js +1 -1
  278. package/dist/components/navigation/Tabs/types.js +1 -1
  279. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  280. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  281. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  282. package/dist/components/other/Calendar/Calendar.js +1 -1
  283. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  284. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  285. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  286. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  287. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  288. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  289. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  290. package/dist/components/other/Calendar/styled.js +1 -1
  291. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  292. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  293. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  294. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  295. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  296. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  297. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  298. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  299. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  300. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  301. package/dist/components/overlays/Dialog/context.js +1 -1
  302. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  303. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  304. package/dist/components/overlays/Modal/Modal.js +1 -1
  305. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  306. package/dist/components/overlays/Modal/Overlay.js +1 -1
  307. package/dist/components/overlays/Modal/Popover.js +1 -1
  308. package/dist/components/overlays/Modal/Tray.js +1 -1
  309. package/dist/components/overlays/Modal/Underlay.js +1 -1
  310. package/dist/components/overlays/Notifications/Notification.js +1 -1
  311. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  312. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  313. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  314. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  315. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  316. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  317. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  318. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  319. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  320. package/dist/components/overlays/Notifications/index.js +1 -1
  321. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  322. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  323. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  324. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  325. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  326. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  327. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  328. package/dist/components/overlays/Toast/index.js +1 -1
  329. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  330. package/dist/components/overlays/Toast/useToast.js +1 -1
  331. package/dist/components/overlays/Tooltip/Tooltip.js +1 -1
  332. package/dist/components/overlays/Tooltip/TooltipProvider.js +1 -1
  333. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  334. package/dist/components/overlays/Tooltip/context.js +1 -1
  335. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  336. package/dist/components/portal/Portal.js +1 -1
  337. package/dist/components/portal/PortalProvider.js +1 -1
  338. package/dist/components/portal/usePortal.js +1 -1
  339. package/dist/components/shared/DraggableCollection.js +1 -1
  340. package/dist/components/shared/InvalidIcon.js +1 -1
  341. package/dist/components/shared/ValidIcon.js +1 -1
  342. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  343. package/dist/components/status/Spin/Cube.js +1 -1
  344. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  345. package/dist/components/status/Spin/Spin.js +1 -1
  346. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  347. package/dist/data/item-themes.js +1 -1
  348. package/dist/data/themes.js +1 -1
  349. package/dist/eslint-plugin/defaults.generated.js +1 -1
  350. package/dist/eslint-plugin/index.js +1 -1
  351. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  352. package/dist/i18n/I18nProvider.js +1 -1
  353. package/dist/i18n/createFormatter.js +1 -1
  354. package/dist/i18n/index.js +1 -1
  355. package/dist/i18n/instance.js +1 -1
  356. package/dist/i18n/locales/de-DE/uikit.js +1 -1
  357. package/dist/i18n/locales/en-US/uikit.js +1 -1
  358. package/dist/i18n/locales/es-ES/uikit.js +1 -1
  359. package/dist/i18n/locales/es-MX/uikit.js +1 -1
  360. package/dist/i18n/locales/fr-FR/uikit.js +1 -1
  361. package/dist/i18n/locales/it-IT/uikit.js +1 -1
  362. package/dist/i18n/locales/ja-JP/uikit.js +1 -1
  363. package/dist/i18n/locales/nb-NO/uikit.js +1 -1
  364. package/dist/i18n/locales/pt-BR/uikit.js +1 -1
  365. package/dist/i18n/locales/pt-PT/uikit.js +1 -1
  366. package/dist/i18n/locales/sv-SE/uikit.js +1 -1
  367. package/dist/i18n/locales/vi-VN/uikit.js +1 -1
  368. package/dist/i18n/locales.js +1 -1
  369. package/dist/i18n/useFormatter.js +1 -1
  370. package/dist/i18n/useI18n.js +1 -1
  371. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  372. package/dist/icons/AdjustmentsIcon.js +1 -1
  373. package/dist/icons/AiIcon.js +1 -1
  374. package/dist/icons/AreaChartIcon.js +1 -1
  375. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  376. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  377. package/dist/icons/BackwardIcon.js +1 -1
  378. package/dist/icons/BarChartIcon.js +1 -1
  379. package/dist/icons/BellFilledIcon.js +1 -1
  380. package/dist/icons/BellIcon.js +1 -1
  381. package/dist/icons/BooleanIcon.js +1 -1
  382. package/dist/icons/CalendarEditIcon.js +1 -1
  383. package/dist/icons/CalendarIcon.js +1 -1
  384. package/dist/icons/CaretDownIcon.js +1 -1
  385. package/dist/icons/CaretUpIcon.js +1 -1
  386. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  387. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  388. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  389. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  390. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  391. package/dist/icons/ChartBarLineIcon.js +1 -1
  392. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  393. package/dist/icons/ChartBarStackedIcon.js +1 -1
  394. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  395. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  396. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  397. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  398. package/dist/icons/ChartBubbleIcon.js +1 -1
  399. package/dist/icons/ChartDonut2Icon.js +1 -1
  400. package/dist/icons/ChartFunnelIcon.js +1 -1
  401. package/dist/icons/ChartHeatmapIcon.js +1 -1
  402. package/dist/icons/ChartKPIIcon.js +1 -1
  403. package/dist/icons/ChartPie2Icon.js +1 -1
  404. package/dist/icons/ChartScatterIcon.js +1 -1
  405. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  406. package/dist/icons/CheckCircleIcon.js +1 -1
  407. package/dist/icons/CheckIcon.js +1 -1
  408. package/dist/icons/CircleFilledIcon.js +1 -1
  409. package/dist/icons/ClearIcon.js +1 -1
  410. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  411. package/dist/icons/CloseCircleIcon.js +1 -1
  412. package/dist/icons/CloseIcon.js +1 -1
  413. package/dist/icons/CodeIcon.js +1 -1
  414. package/dist/icons/ColumnTotalIcon.js +1 -1
  415. package/dist/icons/CopyIcon.js +1 -1
  416. package/dist/icons/CountIcon.js +1 -1
  417. package/dist/icons/CubeIcon.js +1 -1
  418. package/dist/icons/CubePauseIcon.js +1 -1
  419. package/dist/icons/CubePlayIcon.js +1 -1
  420. package/dist/icons/CurrencyDollarIcon.js +1 -1
  421. package/dist/icons/DangerIcon.js +1 -1
  422. package/dist/icons/DashboardIcon.js +1 -1
  423. package/dist/icons/DatabaseIcon.js +1 -1
  424. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  425. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  426. package/dist/icons/DirectionIcon.js +1 -1
  427. package/dist/icons/DonutIcon.js +1 -1
  428. package/dist/icons/DownIcon.js +1 -1
  429. package/dist/icons/EditIcon.js +1 -1
  430. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  431. package/dist/icons/ExclamationCircleIcon.js +1 -1
  432. package/dist/icons/ExclamationIcon.js +1 -1
  433. package/dist/icons/EyeIcon.js +1 -1
  434. package/dist/icons/EyeInvisibleIcon.js +1 -1
  435. package/dist/icons/FilterIcon.js +1 -1
  436. package/dist/icons/FolderFilledIcon.js +1 -1
  437. package/dist/icons/FolderIcon.js +1 -1
  438. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  439. package/dist/icons/FolderOpenIcon.js +1 -1
  440. package/dist/icons/ForwardIcon.js +1 -1
  441. package/dist/icons/GripVerticalIcon.js +1 -1
  442. package/dist/icons/HierarchyIcon.js +1 -1
  443. package/dist/icons/HierarchyOpenIcon.js +1 -1
  444. package/dist/icons/Icon.js +1 -1
  445. package/dist/icons/InfoCircleIcon.js +1 -1
  446. package/dist/icons/InfoIcon.js +1 -1
  447. package/dist/icons/KeyIcon.js +1 -1
  448. package/dist/icons/LeftIcon.js +1 -1
  449. package/dist/icons/LineChartIcon.js +1 -1
  450. package/dist/icons/LoadingIcon.js +1 -1
  451. package/dist/icons/LockFilledIcon.js +1 -1
  452. package/dist/icons/LockIcon.js +1 -1
  453. package/dist/icons/MoreIcon.js +1 -1
  454. package/dist/icons/NotAllowedIcon.js +1 -1
  455. package/dist/icons/Number123Icon.js +1 -1
  456. package/dist/icons/NumberIcon.js +1 -1
  457. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  458. package/dist/icons/PauseCircleIcon.js +1 -1
  459. package/dist/icons/PauseIcon.js +1 -1
  460. package/dist/icons/PercentageIcon.js +1 -1
  461. package/dist/icons/PieChartIcon.js +1 -1
  462. package/dist/icons/PipetteIcon.js +1 -1
  463. package/dist/icons/PlayCircleIcon.js +1 -1
  464. package/dist/icons/PlayIcon.js +1 -1
  465. package/dist/icons/PlusIcon.js +1 -1
  466. package/dist/icons/ProgressBarIcon.js +1 -1
  467. package/dist/icons/ReloadIcon.js +1 -1
  468. package/dist/icons/ReportIcon.js +1 -1
  469. package/dist/icons/ReturnIcon.js +1 -1
  470. package/dist/icons/RightIcon.js +1 -1
  471. package/dist/icons/RowTotalsIcon.js +1 -1
  472. package/dist/icons/SchemeIcon.js +1 -1
  473. package/dist/icons/SearchIcon.js +1 -1
  474. package/dist/icons/SemanticQueryIcon.js +1 -1
  475. package/dist/icons/SettingsIcon.js +1 -1
  476. package/dist/icons/ShieldFilledIcon.js +1 -1
  477. package/dist/icons/ShieldIcon.js +1 -1
  478. package/dist/icons/SlashIcon.js +1 -1
  479. package/dist/icons/SparklesIcon.js +1 -1
  480. package/dist/icons/SqlIcon.js +1 -1
  481. package/dist/icons/StatsIcon.js +1 -1
  482. package/dist/icons/StopIcon.js +1 -1
  483. package/dist/icons/StringIcon.js +1 -1
  484. package/dist/icons/SubtotalsIcon.js +1 -1
  485. package/dist/icons/SwitchIcon.js +1 -1
  486. package/dist/icons/TableIcon.js +1 -1
  487. package/dist/icons/ThumbsDownIcon.js +1 -1
  488. package/dist/icons/ThumbsUpIcon.js +1 -1
  489. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  490. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  491. package/dist/icons/ThunderboltIcon.js +1 -1
  492. package/dist/icons/TimeIcon.js +1 -1
  493. package/dist/icons/TrashIcon.js +1 -1
  494. package/dist/icons/UnlockIcon.js +1 -1
  495. package/dist/icons/UpIcon.js +1 -1
  496. package/dist/icons/UserGroupIcon.js +1 -1
  497. package/dist/icons/UserIcon.js +1 -1
  498. package/dist/icons/UserLockIcon.js +1 -1
  499. package/dist/icons/ViewIcon.js +1 -1
  500. package/dist/icons/WarningFilledIcon.js +1 -1
  501. package/dist/icons/WarningIcon.js +1 -1
  502. package/dist/icons/wrap-icon.js +1 -1
  503. package/dist/index.js +1 -1
  504. package/dist/probe/canonicalize.js +1 -1
  505. package/dist/probe/css.js +1 -1
  506. package/dist/probe/index.js +1 -1
  507. package/dist/provider.js +1 -1
  508. package/dist/providers/TrackingProvider.js +1 -1
  509. package/dist/providers/navigationAdapter.default.js +1 -1
  510. package/dist/tokens/all-tokens.js +1 -1
  511. package/dist/tokens/base.js +1 -1
  512. package/dist/tokens/color-seed.js +1 -1
  513. package/dist/tokens/color-theme.js +1 -1
  514. package/dist/tokens/colors.js +1 -1
  515. package/dist/tokens/layout.js +1 -1
  516. package/dist/tokens/lazy-styles.js +1 -1
  517. package/dist/tokens/legacy-color.js +1 -1
  518. package/dist/tokens/palette-config.js +1 -1
  519. package/dist/tokens/palette.js +1 -1
  520. package/dist/tokens/resolve.js +1 -1
  521. package/dist/tokens/shadows.js +1 -1
  522. package/dist/tokens/sizes.js +1 -1
  523. package/dist/tokens/spacing.js +1 -1
  524. package/dist/tokens/typography.js +1 -1
  525. package/dist/utils/ResizeSensor.js +1 -1
  526. package/dist/utils/colors.js +1 -1
  527. package/dist/utils/dotize.js +1 -1
  528. package/dist/utils/is-dev-env.js +1 -1
  529. package/dist/utils/modules.js +1 -1
  530. package/dist/utils/promise.js +1 -1
  531. package/dist/utils/raf.js +1 -1
  532. package/dist/utils/random.js +1 -1
  533. package/dist/utils/range.js +1 -1
  534. package/dist/utils/react/RenderCache.js +1 -1
  535. package/dist/utils/react/Slots.js +1 -1
  536. package/dist/utils/react/chain.js +1 -1
  537. package/dist/utils/react/disabledProps.js +1 -1
  538. package/dist/utils/react/escapePropagation.js +1 -1
  539. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  540. package/dist/utils/react/index.js +1 -1
  541. package/dist/utils/react/interactions.js +1 -1
  542. package/dist/utils/react/isTextOnly.js +1 -1
  543. package/dist/utils/react/mapProps.js +1 -1
  544. package/dist/utils/react/mergeProps.js +1 -1
  545. package/dist/utils/react/nullableValue.js +1 -1
  546. package/dist/utils/react/programmaticFocus.js +1 -1
  547. package/dist/utils/react/resolveIcon.js +1 -1
  548. package/dist/utils/react/sharedStore.js +1 -1
  549. package/dist/utils/react/useBufferedValue.js +1 -1
  550. package/dist/utils/react/useCombinedRefs.js +1 -1
  551. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  552. package/dist/utils/react/useEventBus.js +1 -1
  553. package/dist/utils/react/useId.js +1 -1
  554. package/dist/utils/react/useIsDarwin.js +1 -1
  555. package/dist/utils/react/useKeySymbols.js +1 -1
  556. package/dist/utils/react/useLayoutEffect.js +1 -1
  557. package/dist/utils/react/useLocalStorage.js +1 -1
  558. package/dist/utils/react/useMergeStyles.js +1 -1
  559. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  560. package/dist/utils/react/usePopoverSync.js +1 -1
  561. package/dist/utils/react/useQaProps.js +1 -1
  562. package/dist/utils/react/useScheme.js +1 -1
  563. package/dist/utils/react/useViewportSize.js +1 -1
  564. package/dist/utils/react/wrapNodeIfPlain.js +1 -1
  565. package/dist/utils/selection.js +1 -1
  566. package/dist/utils/styles.js +1 -1
  567. package/dist/utils/tree.js +1 -1
  568. package/dist/utils/warnings.js +1 -1
  569. package/dist/version.js +2 -2
  570. package/docs/components/fields/TagInput.md +8 -8
  571. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-8700a46 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
2
2
  import { TextInput } from "../TextInput/TextInput.js";
3
3
  import { _FileInput } from "../FileInput/FileInput.js";
4
4
  import { _NumberInput } from "../NumberInput/NumberInput.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-8700a46 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
2
2
  import { DraggableCollection } from "../../shared/DraggableCollection.js";
3
3
  import { c } from "react-compiler-runtime";
4
4
  import { jsx } from "react/jsx-runtime";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-8700a46 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-8700a46 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
2
2
  //#region src/components/fields/ListBox/optionId.ts
3
3
  /**
4
4
  * The DOM id of the option with `key` in the listbox whose id is `listBoxId`,
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-8700a46 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { DisplayTransition } from "../../helpers/DisplayTransition/DisplayTransition.js";
4
4
  import { Portal } from "../../portal/Portal.js";
@@ -11,6 +11,7 @@ import { jsx } from "react/jsx-runtime";
11
11
  import { useOverlay, useOverlayPosition } from "react-aria";
12
12
 
13
13
  //#region src/components/fields/ListBoxPopover/ListBoxPopover.tsx
14
+ const CONTROL_SELECTOR = "button, a[href], input, select, textarea, [tabindex], [contenteditable]:not([contenteditable=\"false\"])";
14
15
  const ListBoxPopoverWrapper = tasty({
15
16
  qa: "ComboBoxOverlayWrapper",
16
17
  styles: {
@@ -61,23 +62,24 @@ const ListBoxPopoverElement = tasty({
61
62
  }
62
63
  });
63
64
  const ListBoxPopover = function ListBoxPopover(props) {
64
- const $ = c(66);
65
+ const $ = c(67);
65
66
  const { t } = useI18n();
66
- const { isOpen, triggerRef, popoverRef, listBoxRef, direction, shouldFlip, overlayOffset, containerPadding, comboBoxWidth, listBoxId, overlayStyles, listBoxStyles, optionStyles, optionHighlight, sectionStyles, headingStyles, selectedKey, selectionMode: t0, selectedKeys, isCheckable, shouldCloseOnTriggerInteraction: t1, isDisabled, disabledKeys, items, children, listStateRef, onSelectionChange, onClose, label, ariaLabel, compositeFocusProps, filter, size: t2, emptyLabel, positionTargetRef, positionApiRef } = props;
67
+ const { isOpen, triggerRef, popoverRef, listBoxRef, direction, shouldFlip, overlayOffset, containerPadding, comboBoxWidth, listBoxId, overlayStyles, listBoxStyles, optionStyles, optionHighlight, sectionStyles, headingStyles, selectedKey, selectionMode: t0, selectedKeys, isCheckable, shouldCloseOnTriggerInteraction: t1, shouldPassControlPresses: t2, isDisabled, disabledKeys, items, children, listStateRef, onSelectionChange, onClose, label, ariaLabel, compositeFocusProps, filter, size: t3, emptyLabel, positionTargetRef, positionApiRef } = props;
67
68
  const selectionMode = t0 === void 0 ? "single" : t0;
68
69
  const shouldCloseOnTriggerInteraction = t1 === void 0 ? true : t1;
70
+ const shouldPassControlPresses = t2 === void 0 ? false : t2;
69
71
  const mergedPopoverRef = popoverRef;
70
72
  const overlayScrollRef = useRef(null);
71
- const t3 = positionTargetRef ?? triggerRef;
72
- const t4 = mergedPopoverRef;
73
- const t5 = `${direction} start`;
74
- let t6;
75
- if ($[0] !== containerPadding || $[1] !== isOpen || $[2] !== overlayOffset || $[3] !== shouldFlip || $[4] !== t3 || $[5] !== t4 || $[6] !== t5) {
76
- t6 = {
77
- targetRef: t3,
78
- overlayRef: t4,
73
+ const t4 = positionTargetRef ?? triggerRef;
74
+ const t5 = mergedPopoverRef;
75
+ const t6 = `${direction} start`;
76
+ let t7;
77
+ if ($[0] !== containerPadding || $[1] !== isOpen || $[2] !== overlayOffset || $[3] !== shouldFlip || $[4] !== t4 || $[5] !== t5 || $[6] !== t6) {
78
+ t7 = {
79
+ targetRef: t4,
80
+ overlayRef: t5,
79
81
  scrollRef: overlayScrollRef,
80
- placement: t5,
82
+ placement: t6,
81
83
  shouldFlip,
82
84
  isOpen,
83
85
  offset: overlayOffset,
@@ -87,25 +89,25 @@ const ListBoxPopover = function ListBoxPopover(props) {
87
89
  $[1] = isOpen;
88
90
  $[2] = overlayOffset;
89
91
  $[3] = shouldFlip;
90
- $[4] = t3;
91
- $[5] = t4;
92
- $[6] = t5;
93
- $[7] = t6;
94
- } else t6 = $[7];
95
- const { overlayProps: overlayPositionProps, placement, updatePosition } = useOverlayPosition(t6);
96
- let t7;
92
+ $[4] = t4;
93
+ $[5] = t5;
94
+ $[6] = t6;
95
+ $[7] = t7;
96
+ } else t7 = $[7];
97
+ const { overlayProps: overlayPositionProps, placement, updatePosition } = useOverlayPosition(t7);
98
+ let t8;
97
99
  if ($[8] !== overlayPositionProps.style) {
98
- t7 = overlayPositionProps.style ?? {};
100
+ t8 = overlayPositionProps.style ?? {};
99
101
  $[8] = overlayPositionProps.style;
100
- $[9] = t7;
101
- } else t7 = $[9];
102
- const t8 = t7;
102
+ $[9] = t8;
103
+ } else t8 = $[9];
104
+ const t9 = t8;
103
105
  let maxHeight;
104
106
  let maxWidth;
105
107
  let positionStyle;
106
- if ($[10] !== t8) {
107
- ({maxHeight, maxWidth, ...positionStyle} = t8);
108
- $[10] = t8;
108
+ if ($[10] !== t9) {
109
+ ({maxHeight, maxWidth, ...positionStyle} = t9);
110
+ $[10] = t9;
109
111
  $[11] = maxHeight;
110
112
  $[12] = maxWidth;
111
113
  $[13] = positionStyle;
@@ -115,32 +117,32 @@ const ListBoxPopover = function ListBoxPopover(props) {
115
117
  positionStyle = $[13];
116
118
  }
117
119
  let t10;
118
- let t9;
120
+ let t11;
119
121
  if ($[14] !== positionApiRef || $[15] !== updatePosition) {
120
- t9 = () => {
122
+ t10 = () => {
121
123
  if (positionApiRef) positionApiRef.current = { updatePosition };
122
124
  return () => {
123
125
  if (positionApiRef) positionApiRef.current = null;
124
126
  };
125
127
  };
126
- t10 = [positionApiRef, updatePosition];
128
+ t11 = [positionApiRef, updatePosition];
127
129
  $[14] = positionApiRef;
128
130
  $[15] = updatePosition;
129
131
  $[16] = t10;
130
- $[17] = t9;
132
+ $[17] = t11;
131
133
  } else {
132
134
  t10 = $[16];
133
- t9 = $[17];
135
+ t11 = $[17];
134
136
  }
135
- useEffect(t9, t10);
136
- let t11;
137
- if ($[18] !== onClose || $[19] !== shouldCloseOnTriggerInteraction || $[20] !== triggerRef) {
138
- t11 = (el) => {
137
+ useEffect(t10, t11);
138
+ let t12;
139
+ if ($[18] !== onClose || $[19] !== shouldCloseOnTriggerInteraction || $[20] !== shouldPassControlPresses || $[21] !== triggerRef) {
140
+ t12 = (el) => {
139
141
  const menuTriggerEl = el.closest("[data-popover-trigger]");
140
142
  if (!menuTriggerEl) {
141
143
  if (!shouldCloseOnTriggerInteraction && triggerRef?.current?.contains(el)) return false;
142
144
  if (el.closest("[data-popover-keep]")) return false;
143
- if (el.closest("[data-popover-dismiss]")) {
145
+ if (shouldPassControlPresses && el.closest(CONTROL_SELECTOR) || el.closest("[data-popover-dismiss]")) {
144
146
  setTimeout(onClose, 0);
145
147
  return false;
146
148
  }
@@ -151,46 +153,47 @@ const ListBoxPopover = function ListBoxPopover(props) {
151
153
  };
152
154
  $[18] = onClose;
153
155
  $[19] = shouldCloseOnTriggerInteraction;
154
- $[20] = triggerRef;
155
- $[21] = t11;
156
- } else t11 = $[21];
157
- let t12;
158
- if ($[22] !== isOpen || $[23] !== onClose || $[24] !== t11) {
159
- t12 = {
156
+ $[20] = shouldPassControlPresses;
157
+ $[21] = triggerRef;
158
+ $[22] = t12;
159
+ } else t12 = $[22];
160
+ let t13;
161
+ if ($[23] !== isOpen || $[24] !== onClose || $[25] !== t12) {
162
+ t13 = {
160
163
  onClose,
161
164
  shouldCloseOnBlur: true,
162
165
  isOpen,
163
166
  isDismissable: true,
164
- shouldCloseOnInteractOutside: t11
167
+ shouldCloseOnInteractOutside: t12
165
168
  };
166
- $[22] = isOpen;
167
- $[23] = onClose;
168
- $[24] = t11;
169
+ $[23] = isOpen;
170
+ $[24] = onClose;
169
171
  $[25] = t12;
170
- } else t12 = $[25];
171
- const { overlayProps: overlayBehaviorProps } = useOverlay(t12, mergedPopoverRef);
172
- let t13;
173
- if ($[26] !== direction || $[27] !== placement) {
174
- t13 = placement?.split(" ")[0] || direction;
175
- $[26] = direction;
176
- $[27] = placement;
177
- $[28] = t13;
178
- } else t13 = $[28];
179
- const placementDirection = t13;
180
- const transitionRefHolder = useRef(null);
172
+ $[26] = t13;
173
+ } else t13 = $[26];
174
+ const { overlayProps: overlayBehaviorProps } = useOverlay(t13, mergedPopoverRef);
181
175
  let t14;
182
- if ($[29] === Symbol.for("react.memo_cache_sentinel")) {
183
- t14 = (node) => {
184
- overlayScrollRef.current = node;
185
- transitionRefHolder.current?.(node);
186
- };
176
+ if ($[27] !== direction || $[28] !== placement) {
177
+ t14 = placement?.split(" ")[0] || direction;
178
+ $[27] = direction;
179
+ $[28] = placement;
187
180
  $[29] = t14;
188
181
  } else t14 = $[29];
189
- const setScrollRef = t14;
182
+ const placementDirection = t14;
183
+ const transitionRefHolder = useRef(null);
190
184
  let t15;
191
- if ($[30] !== ariaLabel || $[31] !== children || $[32] !== comboBoxWidth || $[33] !== compositeFocusProps || $[34] !== disabledKeys || $[35] !== emptyLabel || $[36] !== filter || $[37] !== headingStyles || $[38] !== isCheckable || $[39] !== isDisabled || $[40] !== items || $[41] !== label || $[42] !== listBoxId || $[43] !== listBoxRef || $[44] !== listBoxStyles || $[45] !== listStateRef || $[46] !== maxHeight || $[47] !== maxWidth || $[48] !== mergedPopoverRef || $[49] !== onSelectionChange || $[50] !== optionHighlight || $[51] !== optionStyles || $[52] !== overlayBehaviorProps || $[53] !== overlayPositionProps || $[54] !== overlayStyles || $[55] !== placementDirection || $[56] !== positionStyle || $[57] !== sectionStyles || $[58] !== selectedKey || $[59] !== selectedKeys || $[60] !== selectionMode || $[61] !== t) {
192
- t15 = (t16) => {
193
- const { phase, isShown, ref: transitionRef } = t16;
185
+ if ($[30] === Symbol.for("react.memo_cache_sentinel")) {
186
+ t15 = (node) => {
187
+ overlayScrollRef.current = node;
188
+ transitionRefHolder.current?.(node);
189
+ };
190
+ $[30] = t15;
191
+ } else t15 = $[30];
192
+ const setScrollRef = t15;
193
+ let t16;
194
+ if ($[31] !== ariaLabel || $[32] !== children || $[33] !== comboBoxWidth || $[34] !== compositeFocusProps || $[35] !== disabledKeys || $[36] !== emptyLabel || $[37] !== filter || $[38] !== headingStyles || $[39] !== isCheckable || $[40] !== isDisabled || $[41] !== items || $[42] !== label || $[43] !== listBoxId || $[44] !== listBoxRef || $[45] !== listBoxStyles || $[46] !== listStateRef || $[47] !== maxHeight || $[48] !== maxWidth || $[49] !== mergedPopoverRef || $[50] !== onSelectionChange || $[51] !== optionHighlight || $[52] !== optionStyles || $[53] !== overlayBehaviorProps || $[54] !== overlayPositionProps || $[55] !== overlayStyles || $[56] !== placementDirection || $[57] !== positionStyle || $[58] !== sectionStyles || $[59] !== selectedKey || $[60] !== selectedKeys || $[61] !== selectionMode || $[62] !== t) {
195
+ t16 = (t17) => {
196
+ const { phase, isShown, ref: transitionRef } = t17;
194
197
  transitionRefHolder.current = transitionRef;
195
198
  return /* @__PURE__ */ jsx(ListBoxPopoverWrapper, {
196
199
  ...mergeProps$1({
@@ -241,51 +244,51 @@ const ListBoxPopover = function ListBoxPopover(props) {
241
244
  })
242
245
  });
243
246
  };
244
- $[30] = ariaLabel;
245
- $[31] = children;
246
- $[32] = comboBoxWidth;
247
- $[33] = compositeFocusProps;
248
- $[34] = disabledKeys;
249
- $[35] = emptyLabel;
250
- $[36] = filter;
251
- $[37] = headingStyles;
252
- $[38] = isCheckable;
253
- $[39] = isDisabled;
254
- $[40] = items;
255
- $[41] = label;
256
- $[42] = listBoxId;
257
- $[43] = listBoxRef;
258
- $[44] = listBoxStyles;
259
- $[45] = listStateRef;
260
- $[46] = maxHeight;
261
- $[47] = maxWidth;
262
- $[48] = mergedPopoverRef;
263
- $[49] = onSelectionChange;
264
- $[50] = optionHighlight;
265
- $[51] = optionStyles;
266
- $[52] = overlayBehaviorProps;
267
- $[53] = overlayPositionProps;
268
- $[54] = overlayStyles;
269
- $[55] = placementDirection;
270
- $[56] = positionStyle;
271
- $[57] = sectionStyles;
272
- $[58] = selectedKey;
273
- $[59] = selectedKeys;
274
- $[60] = selectionMode;
275
- $[61] = t;
276
- $[62] = t15;
277
- } else t15 = $[62];
278
- let t16;
279
- if ($[63] !== isOpen || $[64] !== t15) {
280
- t16 = /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(DisplayTransition, {
247
+ $[31] = ariaLabel;
248
+ $[32] = children;
249
+ $[33] = comboBoxWidth;
250
+ $[34] = compositeFocusProps;
251
+ $[35] = disabledKeys;
252
+ $[36] = emptyLabel;
253
+ $[37] = filter;
254
+ $[38] = headingStyles;
255
+ $[39] = isCheckable;
256
+ $[40] = isDisabled;
257
+ $[41] = items;
258
+ $[42] = label;
259
+ $[43] = listBoxId;
260
+ $[44] = listBoxRef;
261
+ $[45] = listBoxStyles;
262
+ $[46] = listStateRef;
263
+ $[47] = maxHeight;
264
+ $[48] = maxWidth;
265
+ $[49] = mergedPopoverRef;
266
+ $[50] = onSelectionChange;
267
+ $[51] = optionHighlight;
268
+ $[52] = optionStyles;
269
+ $[53] = overlayBehaviorProps;
270
+ $[54] = overlayPositionProps;
271
+ $[55] = overlayStyles;
272
+ $[56] = placementDirection;
273
+ $[57] = positionStyle;
274
+ $[58] = sectionStyles;
275
+ $[59] = selectedKey;
276
+ $[60] = selectedKeys;
277
+ $[61] = selectionMode;
278
+ $[62] = t;
279
+ $[63] = t16;
280
+ } else t16 = $[63];
281
+ let t17;
282
+ if ($[64] !== isOpen || $[65] !== t16) {
283
+ t17 = /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(DisplayTransition, {
281
284
  isShown: isOpen,
282
- children: t15
285
+ children: t16
283
286
  }) });
284
- $[63] = isOpen;
285
- $[64] = t15;
287
+ $[64] = isOpen;
286
288
  $[65] = t16;
287
- } else t16 = $[65];
288
- return t16;
289
+ $[66] = t17;
290
+ } else t17 = $[66];
291
+ return t17;
289
292
  };
290
293
 
291
294
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"ListBoxPopover.js","names":["Key","Styles","tasty","React","CSSProperties","ReactNode","RefObject","useCallback","useEffect","useRef","useOverlay","useOverlayPosition","useI18n","mergeProps","DisplayTransition","Portal","ListBox","ListBoxPopoverProps","isOpen","triggerRef","HTMLElement","popoverRef","HTMLDivElement","listBoxRef","direction","shouldFlip","overlayOffset","containerPadding","comboBoxWidth","listBoxId","overlayStyles","listBoxStyles","optionStyles","optionHighlight","sectionStyles","headingStyles","selectedKey","selectionMode","selectedKeys","isCheckable","shouldCloseOnTriggerInteraction","isDisabled","disabledKeys","Iterable","items","children","listStateRef","onSelectionChange","selection","onClose","label","ariaLabel","compositeFocusProps","onFocus","e","FocusEvent","onBlur","filter","nodes","size","emptyLabel","positionTargetRef","Element","positionApiRef","updatePosition","ListBoxPopoverWrapper","qa","styles","position","zIndex","ListBoxPopoverElement","display","gridRows","gridColumns","width","height","overflow","fill","radius","shadow","padding","border","hide","hidden","boxSizing","transition","translate","transformOrigin","scale","opacity","ListBoxPopover","props","$","_c","t","t0","t1","t2","undefined","mergedPopoverRef","overlayScrollRef","t3","t4","t5","t6","targetRef","overlayRef","scrollRef","placement","offset","overlayProps","overlayPositionProps","t7","style","t8","maxHeight","maxWidth","positionStyle","t10","t9","current","t11","el","menuTriggerEl","closest","contains","setTimeout","t12","shouldCloseOnBlur","isDismissable","shouldCloseOnInteractOutside","overlayBehaviorProps","t13","split","placementDirection","transitionRefHolder","t14","Symbol","for","node","setScrollRef","t15","t16","phase","isShown","ref","transitionRef","open","overlayContent"],"sources":["../../../../src/components/fields/ListBoxPopover/ListBoxPopover.tsx"],"sourcesContent":["import { Key } from '@react-types/shared';\nimport { Styles, tasty } from '@tenphi/tasty';\nimport React, {\n CSSProperties,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport { useOverlay, useOverlayPosition } from 'react-aria';\n\nimport { useI18n } from '../../../i18n';\nimport { mergeProps } from '../../../utils/react';\nimport { DisplayTransition } from '../../helpers';\nimport { Portal } from '../../portal';\nimport { ListBox } from '../ListBox/ListBox';\n\nexport interface ListBoxPopoverProps {\n isOpen: boolean;\n triggerRef: RefObject<HTMLElement>;\n popoverRef: RefObject<HTMLDivElement>;\n listBoxRef: RefObject<HTMLDivElement>;\n direction: 'bottom' | 'top';\n shouldFlip: boolean;\n overlayOffset: number;\n containerPadding: number;\n /** Min width (px) for the overlay; usually the trigger's width. */\n comboBoxWidth?: number;\n /** Stable id used for the ListBox element and aria-controls wiring. */\n listBoxId: string;\n overlayStyles?: Styles;\n listBoxStyles?: Styles;\n optionStyles?: Styles;\n /** Substring to highlight within each option's (text) children. */\n optionHighlight?: string;\n sectionStyles?: Styles;\n headingStyles?: Styles;\n selectedKey?: Key | null;\n /**\n * `'multiple'` lets the list hold several selected options. The list then\n * reports the whole new selection on every toggle and never closes itself;\n * the caller decides what a toggle means. Defaults to `'single'`.\n */\n selectionMode?: 'single' | 'multiple';\n /** The selected keys in `'multiple'` mode. Ignored in `'single'` mode. */\n selectedKeys?: Key[];\n /** Whether options show a checkbox. Only applies in `'multiple'` mode. */\n isCheckable?: boolean;\n /**\n * Whether a click inside the element `triggerRef` points at closes the\n * popover, like any other outside click. Pass `false` when that element is\n * where the user keeps working with the list open, such as an input that\n * picks several options in a row. Only this popover is affected; others\n * still close. Defaults to `true`.\n */\n shouldCloseOnTriggerInteraction?: boolean;\n isDisabled?: boolean;\n disabledKeys?: Iterable<Key>;\n items?: Iterable<any>;\n children: ReactNode;\n /** Ref through which the ListBox exposes its internal list state. */\n listStateRef: RefObject<any>;\n onSelectionChange: (selection: Key | Key[] | null) => void;\n onClose: () => void;\n label?: ReactNode;\n ariaLabel?: string;\n compositeFocusProps: {\n onFocus: (e: React.FocusEvent) => void;\n onBlur: (e: React.FocusEvent) => void;\n };\n /** Collection node filter applied to the ListBox. */\n filter?: (nodes: Iterable<any>) => Iterable<any>;\n size?: 'small' | 'medium' | 'large' | (string & {});\n /**\n * Label shown when the list is empty (no items / no filter results).\n * Forwarded to the inner ListBox.\n */\n emptyLabel?: ReactNode;\n /**\n * Element to anchor the overlay to geometrically. Defaults to `triggerRef`.\n * Use this to anchor to something other than the trigger (e.g. the caret in\n * a textarea) while keeping `triggerRef` for outside-click/dismiss logic.\n */\n positionTargetRef?: RefObject<Element | null>;\n /**\n * Receives an imperative handle exposing `updatePosition()` so the caller can\n * force the overlay to re-anchor (e.g. when the caret moves).\n */\n positionApiRef?: RefObject<{ updatePosition: () => void } | null>;\n}\n\nconst ListBoxPopoverWrapper = tasty({\n qa: 'ComboBoxOverlayWrapper',\n styles: {\n position: 'absolute',\n zIndex: 1000,\n },\n});\n\nconst ListBoxPopoverElement = tasty({\n qa: 'ComboBoxOverlay',\n styles: {\n display: 'grid',\n gridRows: '1sf',\n gridColumns: '1sf',\n width: '$overlay-min-width max-content 50vw',\n height: 'initial max-content (50vh - 5x)',\n overflow: 'auto',\n fill: '#surface',\n radius: '1cr',\n shadow: true,\n padding: '0',\n border: '#border',\n hide: {\n '': false,\n hidden: true,\n },\n boxSizing: 'border-box',\n transition:\n 'translate $transition ease-out, scale $transition ease-out, theme $transition ease-out',\n translate: {\n '': '0 0',\n 'open & [data-placement=\"top\"]': '0 0',\n '!open & [data-placement=\"top\"]': '0 1x',\n 'open & ([data-placement=\"bottom\"] | ![data-placement])': '0 0',\n '!open & ([data-placement=\"bottom\"] | ![data-placement])': '0 -1x',\n },\n transformOrigin: {\n '': 'top center',\n '[data-placement=\"top\"]': 'bottom center',\n },\n scale: {\n '': '1 1',\n '!open': '1 .9',\n },\n opacity: {\n '': 1,\n '!open': 0.001,\n },\n\n '$overlay-min-width': 'min 30x',\n },\n});\n\nexport const ListBoxPopover = function ListBoxPopover(\n props: ListBoxPopoverProps,\n) {\n const { t } = useI18n();\n const {\n isOpen,\n triggerRef,\n popoverRef,\n listBoxRef,\n direction,\n shouldFlip,\n overlayOffset,\n containerPadding,\n comboBoxWidth,\n listBoxId,\n overlayStyles,\n listBoxStyles,\n optionStyles,\n optionHighlight,\n sectionStyles,\n headingStyles,\n selectedKey,\n selectionMode = 'single',\n selectedKeys,\n isCheckable,\n shouldCloseOnTriggerInteraction = true,\n isDisabled,\n disabledKeys,\n items,\n children,\n listStateRef,\n onSelectionChange,\n onClose,\n label,\n ariaLabel,\n compositeFocusProps,\n filter,\n size = 'medium',\n emptyLabel,\n positionTargetRef,\n positionApiRef,\n } = props;\n\n const mergedPopoverRef = popoverRef;\n\n // Ref to the inner scrollable element (the visible popover). react-aria\n // measures this for its flip/shrink math and writes maxHeight onto the\n // overlay (positioning wrapper); we forward that maxHeight to this element\n // below so the scroll container actually shrinks instead of overflowing.\n const overlayScrollRef = useRef<HTMLDivElement | null>(null);\n\n // Overlay positioning — anchor to the explicit position target when given\n // (e.g. a caret anchor), otherwise to the trigger. `triggerRef` is still\n // used below for outside-click/dismiss behavior.\n const {\n overlayProps: overlayPositionProps,\n placement,\n updatePosition,\n } = useOverlayPosition({\n targetRef: (positionTargetRef ?? triggerRef) as any,\n overlayRef: mergedPopoverRef as any,\n scrollRef: overlayScrollRef as any,\n placement: `${direction} start` as any,\n shouldFlip,\n isOpen,\n offset: overlayOffset,\n containerPadding: containerPadding,\n });\n\n // Keep positioning (top/left/zIndex) on the wrapper, but split out the\n // available-space cap so it can be applied to the inner scroll element.\n const { maxHeight, maxWidth, ...positionStyle } =\n (overlayPositionProps.style ?? {}) as CSSProperties;\n\n // Expose updatePosition so callers can re-anchor on demand (e.g. caret move).\n useEffect(() => {\n if (positionApiRef) {\n positionApiRef.current = { updatePosition };\n }\n return () => {\n if (positionApiRef) {\n positionApiRef.current = null;\n }\n };\n }, [positionApiRef, updatePosition]);\n\n // Overlay behavior (dismiss on outside click, escape)\n const { overlayProps: overlayBehaviorProps } = useOverlay(\n {\n onClose,\n shouldCloseOnBlur: true,\n isOpen,\n isDismissable: true,\n shouldCloseOnInteractOutside: (el) => {\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n if (!menuTriggerEl) {\n if (\n !shouldCloseOnTriggerInteraction &&\n triggerRef?.current?.contains(el)\n ) {\n return false;\n }\n if (el.closest('[data-popover-keep]')) return false;\n // Plain interactive controls (Button, ItemButton) opt in via\n // `data-popover-dismiss` to dismiss us without losing their click\n // to useOverlay's stopPropagation. Schedule the close after the\n // click finishes so the button's onPress runs first.\n if (el.closest('[data-popover-dismiss]')) {\n setTimeout(onClose, 0);\n return false;\n }\n return true;\n }\n if (menuTriggerEl === triggerRef?.current) return true;\n return false;\n },\n },\n mergedPopoverRef as any,\n );\n\n // Extract primary placement direction for consistent styling\n const placementDirection = placement?.split(' ')[0] || direction;\n\n // Hold the DisplayTransition ref so we can bind the same node to both the\n // transition listener and our scroll ref via a single stable callback.\n const transitionRefHolder = useRef<\n ((node: HTMLElement | null) => void) | null\n >(null);\n const setScrollRef = useCallback((node: HTMLElement | null) => {\n overlayScrollRef.current = node as HTMLDivElement | null;\n transitionRefHolder.current?.(node);\n }, []);\n\n const overlayContent = (\n <DisplayTransition isShown={isOpen}>\n {({ phase, isShown, ref: transitionRef }) => {\n transitionRefHolder.current = transitionRef;\n return (\n <ListBoxPopoverWrapper\n {...mergeProps(\n { ...overlayPositionProps, style: positionStyle },\n overlayBehaviorProps,\n compositeFocusProps,\n )}\n ref={mergedPopoverRef}\n style={positionStyle}\n >\n <ListBoxPopoverElement\n ref={setScrollRef}\n data-placement={placementDirection}\n data-phase={phase}\n mods={{\n open: isShown,\n hidden: phase === 'unmounted',\n }}\n styles={overlayStyles}\n style={{\n '--overlay-min-width': comboBoxWidth\n ? `${comboBoxWidth}px`\n : undefined,\n maxHeight,\n maxWidth,\n }}\n >\n <ListBox\n ref={listBoxRef}\n disableSelectionToggle\n id={listBoxId}\n aria-label={\n ariaLabel ||\n (typeof label === 'string'\n ? label\n : t('listBoxPopover.options', 'Options'))\n }\n // Left unset in single mode, as before this prop existed: an\n // explicit `'single'` switches on ListBox's no-toggle branch,\n // which changes what re-picking the selected option does.\n selectionMode={\n selectionMode === 'multiple' ? 'multiple' : undefined\n }\n selectedKey={\n selectionMode === 'single' ? selectedKey : undefined\n }\n selectedKeys={\n selectionMode === 'multiple' ? selectedKeys : undefined\n }\n isCheckable={\n selectionMode === 'multiple' ? isCheckable : undefined\n }\n isDisabled={isDisabled}\n disabledKeys={disabledKeys}\n shouldUseVirtualFocus={true}\n items={items as any}\n filter={filter}\n styles={listBoxStyles}\n optionStyles={optionStyles}\n optionHighlight={optionHighlight}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n stateRef={listStateRef}\n shape=\"popover\"\n emptyLabel={emptyLabel}\n onSelectionChange={onSelectionChange}\n >\n {children as any}\n </ListBox>\n </ListBoxPopoverElement>\n </ListBoxPopoverWrapper>\n );\n }}\n </DisplayTransition>\n );\n\n return <Portal>{overlayContent}</Portal>;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"ListBoxPopover.js","names":["Key","Styles","tasty","React","CSSProperties","ReactNode","RefObject","useCallback","useEffect","useRef","useOverlay","useOverlayPosition","useI18n","mergeProps","DisplayTransition","Portal","ListBox","ListBoxPopoverProps","isOpen","triggerRef","HTMLElement","popoverRef","HTMLDivElement","listBoxRef","direction","shouldFlip","overlayOffset","containerPadding","comboBoxWidth","listBoxId","overlayStyles","listBoxStyles","optionStyles","optionHighlight","sectionStyles","headingStyles","selectedKey","selectionMode","selectedKeys","isCheckable","shouldCloseOnTriggerInteraction","shouldPassControlPresses","isDisabled","disabledKeys","Iterable","items","children","listStateRef","onSelectionChange","selection","onClose","label","ariaLabel","compositeFocusProps","onFocus","e","FocusEvent","onBlur","filter","nodes","size","emptyLabel","positionTargetRef","Element","positionApiRef","updatePosition","CONTROL_SELECTOR","ListBoxPopoverWrapper","qa","styles","position","zIndex","ListBoxPopoverElement","display","gridRows","gridColumns","width","height","overflow","fill","radius","shadow","padding","border","hide","hidden","boxSizing","transition","translate","transformOrigin","scale","opacity","ListBoxPopover","props","$","_c","t","t0","t1","t2","t3","undefined","mergedPopoverRef","overlayScrollRef","t4","t5","t6","t7","targetRef","overlayRef","scrollRef","placement","offset","overlayProps","overlayPositionProps","t8","style","t9","maxHeight","maxWidth","positionStyle","t10","t11","current","t12","el","menuTriggerEl","closest","contains","setTimeout","t13","shouldCloseOnBlur","isDismissable","shouldCloseOnInteractOutside","overlayBehaviorProps","t14","split","placementDirection","transitionRefHolder","t15","Symbol","for","node","setScrollRef","t16","t17","phase","isShown","ref","transitionRef","open","overlayContent"],"sources":["../../../../src/components/fields/ListBoxPopover/ListBoxPopover.tsx"],"sourcesContent":["import { Key } from '@react-types/shared';\nimport { Styles, tasty } from '@tenphi/tasty';\nimport React, {\n CSSProperties,\n ReactNode,\n RefObject,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport { useOverlay, useOverlayPosition } from 'react-aria';\n\nimport { useI18n } from '../../../i18n';\nimport { mergeProps } from '../../../utils/react';\nimport { DisplayTransition } from '../../helpers';\nimport { Portal } from '../../portal';\nimport { ListBox } from '../ListBox/ListBox';\n\nexport interface ListBoxPopoverProps {\n isOpen: boolean;\n triggerRef: RefObject<HTMLElement>;\n popoverRef: RefObject<HTMLDivElement>;\n listBoxRef: RefObject<HTMLDivElement>;\n direction: 'bottom' | 'top';\n shouldFlip: boolean;\n overlayOffset: number;\n containerPadding: number;\n /** Min width (px) for the overlay; usually the trigger's width. */\n comboBoxWidth?: number;\n /** Stable id used for the ListBox element and aria-controls wiring. */\n listBoxId: string;\n overlayStyles?: Styles;\n listBoxStyles?: Styles;\n optionStyles?: Styles;\n /** Substring to highlight within each option's (text) children. */\n optionHighlight?: string;\n sectionStyles?: Styles;\n headingStyles?: Styles;\n selectedKey?: Key | null;\n /**\n * `'multiple'` lets the list hold several selected options. The list then\n * reports the whole new selection on every toggle and never closes itself;\n * the caller decides what a toggle means. Defaults to `'single'`.\n */\n selectionMode?: 'single' | 'multiple';\n /** The selected keys in `'multiple'` mode. Ignored in `'single'` mode. */\n selectedKeys?: Key[];\n /** Whether options show a checkbox. Only applies in `'multiple'` mode. */\n isCheckable?: boolean;\n /**\n * Whether a click inside the element `triggerRef` points at closes the\n * popover, like any other outside click. Pass `false` when that element is\n * where the user keeps working with the list open, such as an input that\n * picks several options in a row. Only this popover is affected; others\n * still close. Defaults to `true`.\n */\n shouldCloseOnTriggerInteraction?: boolean;\n /**\n * Whether an outside press on a control (a button, a link, a form control,\n * anything with `tabindex`, or something inside one) reaches it, as one on\n * a `data-popover-dismiss` control does: the control can take focus, and\n * the popover closes after it, so a native Save button saves on the first\n * click. A press anywhere else, such as a dialog's backdrop, still only\n * closes the popover. Defaults to `false`.\n */\n shouldPassControlPresses?: boolean;\n isDisabled?: boolean;\n disabledKeys?: Iterable<Key>;\n items?: Iterable<any>;\n children: ReactNode;\n /** Ref through which the ListBox exposes its internal list state. */\n listStateRef: RefObject<any>;\n onSelectionChange: (selection: Key | Key[] | null) => void;\n onClose: () => void;\n label?: ReactNode;\n ariaLabel?: string;\n compositeFocusProps: {\n onFocus: (e: React.FocusEvent) => void;\n onBlur: (e: React.FocusEvent) => void;\n };\n /** Collection node filter applied to the ListBox. */\n filter?: (nodes: Iterable<any>) => Iterable<any>;\n size?: 'small' | 'medium' | 'large' | (string & {});\n /**\n * Label shown when the list is empty (no items / no filter results).\n * Forwarded to the inner ListBox.\n */\n emptyLabel?: ReactNode;\n /**\n * Element to anchor the overlay to geometrically. Defaults to `triggerRef`.\n * Use this to anchor to something other than the trigger (e.g. the caret in\n * a textarea) while keeping `triggerRef` for outside-click/dismiss logic.\n */\n positionTargetRef?: RefObject<Element | null>;\n /**\n * Receives an imperative handle exposing `updatePosition()` so the caller can\n * force the overlay to re-anchor (e.g. when the caret moves).\n */\n positionApiRef?: RefObject<{ updatePosition: () => void } | null>;\n}\n\n// What `shouldPassControlPresses` lets an outside press reach.\nconst CONTROL_SELECTOR =\n 'button, a[href], input, select, textarea, [tabindex], [contenteditable]:not([contenteditable=\"false\"])';\n\nconst ListBoxPopoverWrapper = tasty({\n qa: 'ComboBoxOverlayWrapper',\n styles: {\n position: 'absolute',\n zIndex: 1000,\n },\n});\n\nconst ListBoxPopoverElement = tasty({\n qa: 'ComboBoxOverlay',\n styles: {\n display: 'grid',\n gridRows: '1sf',\n gridColumns: '1sf',\n width: '$overlay-min-width max-content 50vw',\n height: 'initial max-content (50vh - 5x)',\n overflow: 'auto',\n fill: '#surface',\n radius: '1cr',\n shadow: true,\n padding: '0',\n border: '#border',\n hide: {\n '': false,\n hidden: true,\n },\n boxSizing: 'border-box',\n transition:\n 'translate $transition ease-out, scale $transition ease-out, theme $transition ease-out',\n translate: {\n '': '0 0',\n 'open & [data-placement=\"top\"]': '0 0',\n '!open & [data-placement=\"top\"]': '0 1x',\n 'open & ([data-placement=\"bottom\"] | ![data-placement])': '0 0',\n '!open & ([data-placement=\"bottom\"] | ![data-placement])': '0 -1x',\n },\n transformOrigin: {\n '': 'top center',\n '[data-placement=\"top\"]': 'bottom center',\n },\n scale: {\n '': '1 1',\n '!open': '1 .9',\n },\n opacity: {\n '': 1,\n '!open': 0.001,\n },\n\n '$overlay-min-width': 'min 30x',\n },\n});\n\nexport const ListBoxPopover = function ListBoxPopover(\n props: ListBoxPopoverProps,\n) {\n const { t } = useI18n();\n const {\n isOpen,\n triggerRef,\n popoverRef,\n listBoxRef,\n direction,\n shouldFlip,\n overlayOffset,\n containerPadding,\n comboBoxWidth,\n listBoxId,\n overlayStyles,\n listBoxStyles,\n optionStyles,\n optionHighlight,\n sectionStyles,\n headingStyles,\n selectedKey,\n selectionMode = 'single',\n selectedKeys,\n isCheckable,\n shouldCloseOnTriggerInteraction = true,\n shouldPassControlPresses = false,\n isDisabled,\n disabledKeys,\n items,\n children,\n listStateRef,\n onSelectionChange,\n onClose,\n label,\n ariaLabel,\n compositeFocusProps,\n filter,\n size = 'medium',\n emptyLabel,\n positionTargetRef,\n positionApiRef,\n } = props;\n\n const mergedPopoverRef = popoverRef;\n\n // Ref to the inner scrollable element (the visible popover). react-aria\n // measures this for its flip/shrink math and writes maxHeight onto the\n // overlay (positioning wrapper); we forward that maxHeight to this element\n // below so the scroll container actually shrinks instead of overflowing.\n const overlayScrollRef = useRef<HTMLDivElement | null>(null);\n\n // Overlay positioning — anchor to the explicit position target when given\n // (e.g. a caret anchor), otherwise to the trigger. `triggerRef` is still\n // used below for outside-click/dismiss behavior.\n const {\n overlayProps: overlayPositionProps,\n placement,\n updatePosition,\n } = useOverlayPosition({\n targetRef: (positionTargetRef ?? triggerRef) as any,\n overlayRef: mergedPopoverRef as any,\n scrollRef: overlayScrollRef as any,\n placement: `${direction} start` as any,\n shouldFlip,\n isOpen,\n offset: overlayOffset,\n containerPadding: containerPadding,\n });\n\n // Keep positioning (top/left/zIndex) on the wrapper, but split out the\n // available-space cap so it can be applied to the inner scroll element.\n const { maxHeight, maxWidth, ...positionStyle } =\n (overlayPositionProps.style ?? {}) as CSSProperties;\n\n // Expose updatePosition so callers can re-anchor on demand (e.g. caret move).\n useEffect(() => {\n if (positionApiRef) {\n positionApiRef.current = { updatePosition };\n }\n return () => {\n if (positionApiRef) {\n positionApiRef.current = null;\n }\n };\n }, [positionApiRef, updatePosition]);\n\n // Overlay behavior (dismiss on outside click, escape)\n const { overlayProps: overlayBehaviorProps } = useOverlay(\n {\n onClose,\n shouldCloseOnBlur: true,\n isOpen,\n isDismissable: true,\n shouldCloseOnInteractOutside: (el) => {\n const menuTriggerEl = el.closest('[data-popover-trigger]');\n if (!menuTriggerEl) {\n if (\n !shouldCloseOnTriggerInteraction &&\n triggerRef?.current?.contains(el)\n ) {\n return false;\n }\n if (el.closest('[data-popover-keep]')) return false;\n // Plain interactive controls (Button, ItemButton) opt in via\n // `data-popover-dismiss` to dismiss us without losing their click\n // to useOverlay's stopPropagation, and `shouldPassControlPresses`\n // opts every control in. Schedule the close after the click\n // finishes so the button's onPress runs first. Only controls: the\n // close lands before a slow click does, and a click on a dialog's\n // backdrop would then find the dialog on top and close it too.\n if (\n (shouldPassControlPresses && el.closest(CONTROL_SELECTOR)) ||\n el.closest('[data-popover-dismiss]')\n ) {\n setTimeout(onClose, 0);\n return false;\n }\n return true;\n }\n if (menuTriggerEl === triggerRef?.current) return true;\n return false;\n },\n },\n mergedPopoverRef as any,\n );\n\n // Extract primary placement direction for consistent styling\n const placementDirection = placement?.split(' ')[0] || direction;\n\n // Hold the DisplayTransition ref so we can bind the same node to both the\n // transition listener and our scroll ref via a single stable callback.\n const transitionRefHolder = useRef<\n ((node: HTMLElement | null) => void) | null\n >(null);\n const setScrollRef = useCallback((node: HTMLElement | null) => {\n overlayScrollRef.current = node as HTMLDivElement | null;\n transitionRefHolder.current?.(node);\n }, []);\n\n const overlayContent = (\n <DisplayTransition isShown={isOpen}>\n {({ phase, isShown, ref: transitionRef }) => {\n transitionRefHolder.current = transitionRef;\n return (\n <ListBoxPopoverWrapper\n {...mergeProps(\n { ...overlayPositionProps, style: positionStyle },\n overlayBehaviorProps,\n compositeFocusProps,\n )}\n ref={mergedPopoverRef}\n style={positionStyle}\n >\n <ListBoxPopoverElement\n ref={setScrollRef}\n data-placement={placementDirection}\n data-phase={phase}\n mods={{\n open: isShown,\n hidden: phase === 'unmounted',\n }}\n styles={overlayStyles}\n style={{\n '--overlay-min-width': comboBoxWidth\n ? `${comboBoxWidth}px`\n : undefined,\n maxHeight,\n maxWidth,\n }}\n >\n <ListBox\n ref={listBoxRef}\n disableSelectionToggle\n id={listBoxId}\n aria-label={\n ariaLabel ||\n (typeof label === 'string'\n ? label\n : t('listBoxPopover.options', 'Options'))\n }\n // Left unset in single mode, as before this prop existed: an\n // explicit `'single'` switches on ListBox's no-toggle branch,\n // which changes what re-picking the selected option does.\n selectionMode={\n selectionMode === 'multiple' ? 'multiple' : undefined\n }\n selectedKey={\n selectionMode === 'single' ? selectedKey : undefined\n }\n selectedKeys={\n selectionMode === 'multiple' ? selectedKeys : undefined\n }\n isCheckable={\n selectionMode === 'multiple' ? isCheckable : undefined\n }\n isDisabled={isDisabled}\n disabledKeys={disabledKeys}\n shouldUseVirtualFocus={true}\n items={items as any}\n filter={filter}\n styles={listBoxStyles}\n optionStyles={optionStyles}\n optionHighlight={optionHighlight}\n sectionStyles={sectionStyles}\n headingStyles={headingStyles}\n stateRef={listStateRef}\n shape=\"popover\"\n emptyLabel={emptyLabel}\n onSelectionChange={onSelectionChange}\n >\n {children as any}\n </ListBox>\n </ListBoxPopoverElement>\n </ListBoxPopoverWrapper>\n );\n }}\n </DisplayTransition>\n );\n\n return <Portal>{overlayContent}</Portal>;\n};\n"],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-8700a46 | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-3b2471f | Cube Dev Team */
2
2
  //#region src/components/fields/ListBoxPopover/listNavigation.ts
3
3
  /**
4
4
  * Walks a collection (possibly nested under sections) and collects the keys of
@@ -83,9 +83,10 @@ function nodeMatchesTerm(node, term, textFilterFn, matchExtraFields) {
83
83
  function filterCollectionNodes(nodes, term, textFilterFn, options = {}) {
84
84
  if (!term) return nodes;
85
85
  const matchExtraFields = options.matchExtraFields ?? false;
86
+ const matches = (node) => !!options.keep?.(node) || nodeMatchesTerm(node, term, textFilterFn, matchExtraFields);
86
87
  return [...nodes].map((node) => {
87
88
  if (node.type === "section" && node.childNodes) {
88
- const filteredChildren = [...node.childNodes].filter((child) => nodeMatchesTerm(child, term, textFilterFn, matchExtraFields));
89
+ const filteredChildren = [...node.childNodes].filter(matches);
89
90
  if (filteredChildren.length === 0) return null;
90
91
  return {
91
92
  ...node,
@@ -93,7 +94,7 @@ function filterCollectionNodes(nodes, term, textFilterFn, options = {}) {
93
94
  hasChildNodes: true
94
95
  };
95
96
  }
96
- return nodeMatchesTerm(node, term, textFilterFn, matchExtraFields) ? node : null;
97
+ return matches(node) ? node : null;
97
98
  }).filter(Boolean);
98
99
  }
99
100
 
@@ -1 +1 @@
1
- {"version":3,"file":"listNavigation.js","names":["Key","ListStateLike","selectionManager","focusedKey","setFocusedKey","key","collection","Iterable","disabledKeys","Set","lastFocusSourceRef","current","NavigationDirection","NavigationEdge","collectVisibleKeys","nodes","out","node","type","has","push","childNodes","getVisibleKeys","listState","keys","getNextVisibleKey","direction","opts","wrap","fromKey","visibleKeys","length","isForward","currentKey","currentIndex","indexOf","newIndex","getEdgeVisibleKey","edge","markKeyboardFocus","TextFilterFn","textValue","inputValue","FilterCollectionOptions","matchExtraFields","getSearchableStrings","strings","props","children","description","nodeMatchesTerm","term","textFilterFn","some","text","filterCollectionNodes","options","map","filteredChildren","filter","child","hasChildNodes","Boolean"],"sources":["../../../../src/components/fields/ListBoxPopover/listNavigation.ts"],"sourcesContent":["import { Key } from '@react-types/shared';\n\n/**\n * Minimal view of a React Stately list state. Kept structural (no imports from\n * `react-stately`) so the helpers can be used from any collection-backed\n * component without dragging extra types in.\n */\nexport interface ListStateLike {\n selectionManager: {\n focusedKey: Key | null;\n setFocusedKey: (key: Key | null) => void;\n };\n collection: Iterable<any>;\n disabledKeys?: Set<Key>;\n lastFocusSourceRef?: { current: 'keyboard' | 'mouse' | 'other' };\n}\n\nexport type NavigationDirection = 1 | -1;\nexport type NavigationEdge = 'first' | 'last';\n\n/**\n * Walks a collection (possibly nested under sections) and collects the keys of\n * selectable items, skipping disabled ones. Mirrors the inline walker that\n * used to live in `useComboBoxKeyboard`.\n */\nexport function collectVisibleKeys(\n nodes: Iterable<any>,\n out: Key[],\n disabledKeys?: Set<Key>,\n): void {\n for (const node of nodes) {\n if (node.type === 'item') {\n if (!disabledKeys?.has(node.key)) {\n out.push(node.key);\n }\n } else if (node.childNodes) {\n collectVisibleKeys(node.childNodes, out, disabledKeys);\n }\n }\n}\n\n/** Convenience: returns the flat list of selectable keys for a list state. */\nexport function getVisibleKeys(listState: ListStateLike): Key[] {\n const keys: Key[] = [];\n collectVisibleKeys(\n listState.collection,\n keys,\n listState.disabledKeys as Set<Key> | undefined,\n );\n return keys;\n}\n\n/**\n * Computes the next key to focus when navigating with ArrowUp/ArrowDown.\n *\n * - If `fromKey` is omitted, reads `selectionManager.focusedKey`.\n * - When nothing is focused (or the focused key is no longer visible), falls\n * back to the first/last visible key depending on `direction`.\n * - When the current key is the boundary, either returns `null` (default) or\n * wraps to the opposite edge when `opts.wrap` is true.\n */\nexport function getNextVisibleKey(\n listState: ListStateLike,\n direction: NavigationDirection,\n opts?: { wrap?: boolean; fromKey?: Key | null },\n): Key | null {\n const visibleKeys = getVisibleKeys(listState);\n if (visibleKeys.length === 0) return null;\n\n const isForward = direction === 1;\n const currentKey = opts?.fromKey ?? listState.selectionManager.focusedKey;\n\n if (currentKey == null) {\n return isForward ? visibleKeys[0] : visibleKeys[visibleKeys.length - 1];\n }\n\n const currentIndex = visibleKeys.indexOf(currentKey);\n\n if (currentIndex === -1) {\n // Focused item was filtered out — restart from the matching edge.\n return isForward ? visibleKeys[0] : visibleKeys[visibleKeys.length - 1];\n }\n\n const newIndex = currentIndex + direction;\n if (newIndex >= 0 && newIndex < visibleKeys.length) {\n return visibleKeys[newIndex];\n }\n\n if (opts?.wrap) {\n return isForward ? visibleKeys[0] : visibleKeys[visibleKeys.length - 1];\n }\n\n return null;\n}\n\n/** Returns the first or last selectable key. */\nexport function getEdgeVisibleKey(\n listState: ListStateLike,\n edge: NavigationEdge,\n): Key | null {\n const visibleKeys = getVisibleKeys(listState);\n if (visibleKeys.length === 0) return null;\n return edge === 'first'\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n}\n\n/**\n * Marks a focus change as keyboard-driven so the underlying ListBox scrolls the\n * highlighted option into view. No-op when the list state doesn't expose a\n * `lastFocusSourceRef`.\n */\nexport function markKeyboardFocus(listState: ListStateLike): void {\n if (listState.lastFocusSourceRef) {\n listState.lastFocusSourceRef.current = 'keyboard';\n }\n}\n\nexport type TextFilterFn = (textValue: string, inputValue: string) => boolean;\n\n/** Options controlling how {@link filterCollectionNodes} matches nodes. */\nexport interface FilterCollectionOptions {\n /**\n * Also match against a node's plain-text `children` and `description` props\n * in addition to its `textValue`. Defaults to `false` so the search stays\n * consistent with the visible `textValue` (which is what components like\n * ComboBox document). Components that surface `children`/`description` in the\n * option list (e.g. CommandTextArea) can opt in.\n */\n matchExtraFields?: boolean;\n}\n\n/**\n * Collects the strings a node can be matched against. Always includes the\n * node's `textValue`; when `matchExtraFields` is set, also includes any\n * plain-text `children` and `description` props. Non-string children/description\n * (e.g. React elements) are ignored since we can't reliably read their text.\n */\nfunction getSearchableStrings(node: any, matchExtraFields: boolean): string[] {\n const strings: string[] = [];\n\n if (node.textValue) {\n strings.push(node.textValue);\n }\n\n if (matchExtraFields) {\n const props = node.props;\n if (props) {\n if (typeof props.children === 'string') {\n strings.push(props.children);\n }\n if (typeof props.description === 'string') {\n strings.push(props.description);\n }\n }\n }\n\n return strings.length > 0 ? strings : [node.textValue || ''];\n}\n\n/** True when the term matches any of the node's searchable strings. */\nfunction nodeMatchesTerm(\n node: any,\n term: string,\n textFilterFn: TextFilterFn,\n matchExtraFields: boolean,\n): boolean {\n return getSearchableStrings(node, matchExtraFields).some((text) =>\n textFilterFn(text, term),\n );\n}\n\n/**\n * Filters collection nodes by a search term while preserving section structure.\n * By default a node matches only when the term matches its `textValue`; pass\n * `{ matchExtraFields: true }` to also match its plain-text `children` and\n * `description`. Sections whose children all fail the filter are dropped.\n */\nexport function filterCollectionNodes(\n nodes: Iterable<any>,\n term: string,\n textFilterFn: TextFilterFn,\n options: FilterCollectionOptions = {},\n): Iterable<any> {\n if (!term) {\n return nodes;\n }\n\n const matchExtraFields = options.matchExtraFields ?? false;\n\n return [...nodes]\n .map((node: any) => {\n if (node.type === 'section' && node.childNodes) {\n const filteredChildren = [...node.childNodes].filter((child: any) =>\n nodeMatchesTerm(child, term, textFilterFn, matchExtraFields),\n );\n\n if (filteredChildren.length === 0) {\n return null;\n }\n\n return {\n ...node,\n childNodes: filteredChildren,\n hasChildNodes: true,\n };\n }\n\n return nodeMatchesTerm(node, term, textFilterFn, matchExtraFields)\n ? node\n : null;\n })\n .filter(Boolean);\n}\n"],"mappings":";;;;;;;AAyBA,SAAgBc,mBACdC,OACAC,KACAR,cACM;AACN,MAAK,MAAMS,QAAQF,MACjB,KAAIE,KAAKC,SAAS,QAChB;MAAI,CAACV,cAAcW,IAAIF,KAAKZ,IAAI,CAC9BW,KAAII,KAAKH,KAAKZ,IAAI;YAEXY,KAAKI,WACdP,oBAAmBG,KAAKI,YAAYL,KAAKR,aAAa;;;AAM5D,SAAgBc,eAAeC,WAAiC;CAC9D,MAAMC,OAAc,EAAE;AACtBV,oBACES,UAAUjB,YACVkB,MACAD,UAAUf,aACX;AACD,QAAOgB;;;;;;;;;;;AAYT,SAAgBC,kBACdF,WACAG,WACAC,MACY;CACZ,MAAMG,cAAcR,eAAeC,UAAU;AAC7C,KAAIO,YAAYC,WAAW,EAAG,QAAO;CAErC,MAAMC,YAAYN,cAAc;CAChC,MAAMO,aAAaN,MAAME,WAAWN,UAAUrB,iBAAiBC;AAE/D,KAAI8B,cAAc,KAChB,QAAOD,YAAYF,YAAY,KAAKA,YAAYA,YAAYC,SAAS;CAGvE,MAAMG,eAAeJ,YAAYK,QAAQF,WAAW;AAEpD,KAAIC,iBAAiB,GAEnB,QAAOF,YAAYF,YAAY,KAAKA,YAAYA,YAAYC,SAAS;CAGvE,MAAMK,WAAWF,eAAeR;AAChC,KAAIU,YAAY,KAAKA,WAAWN,YAAYC,OAC1C,QAAOD,YAAYM;AAGrB,KAAIT,MAAMC,KACR,QAAOI,YAAYF,YAAY,KAAKA,YAAYA,YAAYC,SAAS;AAGvE,QAAO;;;AAIT,SAAgBM,kBACdd,WACAe,MACY;CACZ,MAAMR,cAAcR,eAAeC,UAAU;AAC7C,KAAIO,YAAYC,WAAW,EAAG,QAAO;AACrC,QAAOO,SAAS,UACZR,YAAY,KACZA,YAAYA,YAAYC,SAAS;;;;;;;AAQvC,SAAgBQ,kBAAkBhB,WAAgC;AAChE,KAAIA,UAAUb,mBACZa,WAAUb,mBAAmBC,UAAU;;;;;;;;AAwB3C,SAASkC,qBAAqB5B,MAAW2B,kBAAqC;CAC5E,MAAME,UAAoB,EAAE;AAE5B,KAAI7B,KAAKwB,UACPK,SAAQ1B,KAAKH,KAAKwB,UAAU;AAG9B,KAAIG,kBAAkB;EACpB,MAAMG,QAAQ9B,KAAK8B;AACnB,MAAIA,OAAO;AACT,OAAI,OAAOA,MAAMC,aAAa,SAC5BF,SAAQ1B,KAAK2B,MAAMC,SAAS;AAE9B,OAAI,OAAOD,MAAME,gBAAgB,SAC/BH,SAAQ1B,KAAK2B,MAAME,YAAY;;;AAKrC,QAAOH,QAAQf,SAAS,IAAIe,UAAU,CAAC7B,KAAKwB,aAAa,GAAG;;;AAI9D,SAASS,gBACPjC,MACAkC,MACAC,cACAR,kBACS;AACT,QAAOC,qBAAqB5B,MAAM2B,iBAAiB,CAACS,MAAMC,SACxDF,aAAaE,MAAMH,KACrB,CAAC;;;;;;;;AASH,SAAgBI,sBACdxC,OACAoC,MACAC,cACAI,UAAmC,EAAE,EACtB;AACf,KAAI,CAACL,KACH,QAAOpC;CAGT,MAAM6B,mBAAmBY,QAAQZ,oBAAoB;AAErD,QAAO,CAAC,GAAG7B,MAAM,CACd0C,KAAKxC,SAAc;AAClB,MAAIA,KAAKC,SAAS,aAAaD,KAAKI,YAAY;GAC9C,MAAMqC,mBAAmB,CAAC,GAAGzC,KAAKI,WAAW,CAACsC,QAAQC,UACpDV,gBAAgBU,OAAOT,MAAMC,cAAcR,iBAC7C,CAAC;AAED,OAAIc,iBAAiB3B,WAAW,EAC9B,QAAO;AAGT,UAAO;IACL,GAAGd;IACHI,YAAYqC;IACZG,eAAe;IAChB;;AAGH,SAAOX,gBAAgBjC,MAAMkC,MAAMC,cAAcR,iBAAiB,GAC9D3B,OACA;GACJ,CACD0C,OAAOG,QAAQ"}
1
+ {"version":3,"file":"listNavigation.js","names":["Key","ListStateLike","selectionManager","focusedKey","setFocusedKey","key","collection","Iterable","disabledKeys","Set","lastFocusSourceRef","current","NavigationDirection","NavigationEdge","collectVisibleKeys","nodes","out","node","type","has","push","childNodes","getVisibleKeys","listState","keys","getNextVisibleKey","direction","opts","wrap","fromKey","visibleKeys","length","isForward","currentKey","currentIndex","indexOf","newIndex","getEdgeVisibleKey","edge","markKeyboardFocus","TextFilterFn","textValue","inputValue","FilterCollectionOptions","matchExtraFields","keep","getSearchableStrings","strings","props","children","description","nodeMatchesTerm","term","textFilterFn","some","text","filterCollectionNodes","options","matches","map","filteredChildren","filter","hasChildNodes","Boolean"],"sources":["../../../../src/components/fields/ListBoxPopover/listNavigation.ts"],"sourcesContent":["import { Key } from '@react-types/shared';\n\n/**\n * Minimal view of a React Stately list state. Kept structural (no imports from\n * `react-stately`) so the helpers can be used from any collection-backed\n * component without dragging extra types in.\n */\nexport interface ListStateLike {\n selectionManager: {\n focusedKey: Key | null;\n setFocusedKey: (key: Key | null) => void;\n };\n collection: Iterable<any>;\n disabledKeys?: Set<Key>;\n lastFocusSourceRef?: { current: 'keyboard' | 'mouse' | 'other' };\n}\n\nexport type NavigationDirection = 1 | -1;\nexport type NavigationEdge = 'first' | 'last';\n\n/**\n * Walks a collection (possibly nested under sections) and collects the keys of\n * selectable items, skipping disabled ones. Mirrors the inline walker that\n * used to live in `useComboBoxKeyboard`.\n */\nexport function collectVisibleKeys(\n nodes: Iterable<any>,\n out: Key[],\n disabledKeys?: Set<Key>,\n): void {\n for (const node of nodes) {\n if (node.type === 'item') {\n if (!disabledKeys?.has(node.key)) {\n out.push(node.key);\n }\n } else if (node.childNodes) {\n collectVisibleKeys(node.childNodes, out, disabledKeys);\n }\n }\n}\n\n/** Convenience: returns the flat list of selectable keys for a list state. */\nexport function getVisibleKeys(listState: ListStateLike): Key[] {\n const keys: Key[] = [];\n collectVisibleKeys(\n listState.collection,\n keys,\n listState.disabledKeys as Set<Key> | undefined,\n );\n return keys;\n}\n\n/**\n * Computes the next key to focus when navigating with ArrowUp/ArrowDown.\n *\n * - If `fromKey` is omitted, reads `selectionManager.focusedKey`.\n * - When nothing is focused (or the focused key is no longer visible), falls\n * back to the first/last visible key depending on `direction`.\n * - When the current key is the boundary, either returns `null` (default) or\n * wraps to the opposite edge when `opts.wrap` is true.\n */\nexport function getNextVisibleKey(\n listState: ListStateLike,\n direction: NavigationDirection,\n opts?: { wrap?: boolean; fromKey?: Key | null },\n): Key | null {\n const visibleKeys = getVisibleKeys(listState);\n if (visibleKeys.length === 0) return null;\n\n const isForward = direction === 1;\n const currentKey = opts?.fromKey ?? listState.selectionManager.focusedKey;\n\n if (currentKey == null) {\n return isForward ? visibleKeys[0] : visibleKeys[visibleKeys.length - 1];\n }\n\n const currentIndex = visibleKeys.indexOf(currentKey);\n\n if (currentIndex === -1) {\n // Focused item was filtered out — restart from the matching edge.\n return isForward ? visibleKeys[0] : visibleKeys[visibleKeys.length - 1];\n }\n\n const newIndex = currentIndex + direction;\n if (newIndex >= 0 && newIndex < visibleKeys.length) {\n return visibleKeys[newIndex];\n }\n\n if (opts?.wrap) {\n return isForward ? visibleKeys[0] : visibleKeys[visibleKeys.length - 1];\n }\n\n return null;\n}\n\n/** Returns the first or last selectable key. */\nexport function getEdgeVisibleKey(\n listState: ListStateLike,\n edge: NavigationEdge,\n): Key | null {\n const visibleKeys = getVisibleKeys(listState);\n if (visibleKeys.length === 0) return null;\n return edge === 'first'\n ? visibleKeys[0]\n : visibleKeys[visibleKeys.length - 1];\n}\n\n/**\n * Marks a focus change as keyboard-driven so the underlying ListBox scrolls the\n * highlighted option into view. No-op when the list state doesn't expose a\n * `lastFocusSourceRef`.\n */\nexport function markKeyboardFocus(listState: ListStateLike): void {\n if (listState.lastFocusSourceRef) {\n listState.lastFocusSourceRef.current = 'keyboard';\n }\n}\n\nexport type TextFilterFn = (textValue: string, inputValue: string) => boolean;\n\n/** Options controlling how {@link filterCollectionNodes} matches nodes. */\nexport interface FilterCollectionOptions {\n /**\n * Also match against a node's plain-text `children` and `description` props\n * in addition to its `textValue`. Defaults to `false` so the search stays\n * consistent with the visible `textValue` (which is what components like\n * ComboBox document). Components that surface `children`/`description` in the\n * option list (e.g. CommandTextArea) can opt in.\n */\n matchExtraFields?: boolean;\n /**\n * Keeps a node whatever the term, such as the option the typed text already\n * names by its key.\n */\n keep?: (node: any) => boolean;\n}\n\n/**\n * Collects the strings a node can be matched against. Always includes the\n * node's `textValue`; when `matchExtraFields` is set, also includes any\n * plain-text `children` and `description` props. Non-string children/description\n * (e.g. React elements) are ignored since we can't reliably read their text.\n */\nfunction getSearchableStrings(node: any, matchExtraFields: boolean): string[] {\n const strings: string[] = [];\n\n if (node.textValue) {\n strings.push(node.textValue);\n }\n\n if (matchExtraFields) {\n const props = node.props;\n if (props) {\n if (typeof props.children === 'string') {\n strings.push(props.children);\n }\n if (typeof props.description === 'string') {\n strings.push(props.description);\n }\n }\n }\n\n return strings.length > 0 ? strings : [node.textValue || ''];\n}\n\n/** True when the term matches any of the node's searchable strings. */\nfunction nodeMatchesTerm(\n node: any,\n term: string,\n textFilterFn: TextFilterFn,\n matchExtraFields: boolean,\n): boolean {\n return getSearchableStrings(node, matchExtraFields).some((text) =>\n textFilterFn(text, term),\n );\n}\n\n/**\n * Filters collection nodes by a search term while preserving section structure.\n * By default a node matches only when the term matches its `textValue`; pass\n * `{ matchExtraFields: true }` to also match its plain-text `children` and\n * `description`. Sections whose children all fail the filter are dropped.\n */\nexport function filterCollectionNodes(\n nodes: Iterable<any>,\n term: string,\n textFilterFn: TextFilterFn,\n options: FilterCollectionOptions = {},\n): Iterable<any> {\n if (!term) {\n return nodes;\n }\n\n const matchExtraFields = options.matchExtraFields ?? false;\n const matches = (node: any) =>\n !!options.keep?.(node) ||\n nodeMatchesTerm(node, term, textFilterFn, matchExtraFields);\n\n return [...nodes]\n .map((node: any) => {\n if (node.type === 'section' && node.childNodes) {\n const filteredChildren = [...node.childNodes].filter(matches);\n\n if (filteredChildren.length === 0) {\n return null;\n }\n\n return {\n ...node,\n childNodes: filteredChildren,\n hasChildNodes: true,\n };\n }\n\n return matches(node) ? node : null;\n })\n .filter(Boolean);\n}\n"],"mappings":";;;;;;;AAyBA,SAAgBc,mBACdC,OACAC,KACAR,cACM;AACN,MAAK,MAAMS,QAAQF,MACjB,KAAIE,KAAKC,SAAS,QAChB;MAAI,CAACV,cAAcW,IAAIF,KAAKZ,IAAI,CAC9BW,KAAII,KAAKH,KAAKZ,IAAI;YAEXY,KAAKI,WACdP,oBAAmBG,KAAKI,YAAYL,KAAKR,aAAa;;;AAM5D,SAAgBc,eAAeC,WAAiC;CAC9D,MAAMC,OAAc,EAAE;AACtBV,oBACES,UAAUjB,YACVkB,MACAD,UAAUf,aACX;AACD,QAAOgB;;;;;;;;;;;AAYT,SAAgBC,kBACdF,WACAG,WACAC,MACY;CACZ,MAAMG,cAAcR,eAAeC,UAAU;AAC7C,KAAIO,YAAYC,WAAW,EAAG,QAAO;CAErC,MAAMC,YAAYN,cAAc;CAChC,MAAMO,aAAaN,MAAME,WAAWN,UAAUrB,iBAAiBC;AAE/D,KAAI8B,cAAc,KAChB,QAAOD,YAAYF,YAAY,KAAKA,YAAYA,YAAYC,SAAS;CAGvE,MAAMG,eAAeJ,YAAYK,QAAQF,WAAW;AAEpD,KAAIC,iBAAiB,GAEnB,QAAOF,YAAYF,YAAY,KAAKA,YAAYA,YAAYC,SAAS;CAGvE,MAAMK,WAAWF,eAAeR;AAChC,KAAIU,YAAY,KAAKA,WAAWN,YAAYC,OAC1C,QAAOD,YAAYM;AAGrB,KAAIT,MAAMC,KACR,QAAOI,YAAYF,YAAY,KAAKA,YAAYA,YAAYC,SAAS;AAGvE,QAAO;;;AAIT,SAAgBM,kBACdd,WACAe,MACY;CACZ,MAAMR,cAAcR,eAAeC,UAAU;AAC7C,KAAIO,YAAYC,WAAW,EAAG,QAAO;AACrC,QAAOO,SAAS,UACZR,YAAY,KACZA,YAAYA,YAAYC,SAAS;;;;;;;AAQvC,SAAgBQ,kBAAkBhB,WAAgC;AAChE,KAAIA,UAAUb,mBACZa,WAAUb,mBAAmBC,UAAU;;;;;;;;AA6B3C,SAASmC,qBAAqB7B,MAAW2B,kBAAqC;CAC5E,MAAMG,UAAoB,EAAE;AAE5B,KAAI9B,KAAKwB,UACPM,SAAQ3B,KAAKH,KAAKwB,UAAU;AAG9B,KAAIG,kBAAkB;EACpB,MAAMI,QAAQ/B,KAAK+B;AACnB,MAAIA,OAAO;AACT,OAAI,OAAOA,MAAMC,aAAa,SAC5BF,SAAQ3B,KAAK4B,MAAMC,SAAS;AAE9B,OAAI,OAAOD,MAAME,gBAAgB,SAC/BH,SAAQ3B,KAAK4B,MAAME,YAAY;;;AAKrC,QAAOH,QAAQhB,SAAS,IAAIgB,UAAU,CAAC9B,KAAKwB,aAAa,GAAG;;;AAI9D,SAASU,gBACPlC,MACAmC,MACAC,cACAT,kBACS;AACT,QAAOE,qBAAqB7B,MAAM2B,iBAAiB,CAACU,MAAMC,SACxDF,aAAaE,MAAMH,KACrB,CAAC;;;;;;;;AASH,SAAgBI,sBACdzC,OACAqC,MACAC,cACAI,UAAmC,EAAE,EACtB;AACf,KAAI,CAACL,KACH,QAAOrC;CAGT,MAAM6B,mBAAmBa,QAAQb,oBAAoB;CACrD,MAAMc,WAAWzC,SACf,CAAC,CAACwC,QAAQZ,OAAO5B,KAAK,IACtBkC,gBAAgBlC,MAAMmC,MAAMC,cAAcT,iBAAiB;AAE7D,QAAO,CAAC,GAAG7B,MAAM,CACd4C,KAAK1C,SAAc;AAClB,MAAIA,KAAKC,SAAS,aAAaD,KAAKI,YAAY;GAC9C,MAAMuC,mBAAmB,CAAC,GAAG3C,KAAKI,WAAW,CAACwC,OAAOH,QAAQ;AAE7D,OAAIE,iBAAiB7B,WAAW,EAC9B,QAAO;AAGT,UAAO;IACL,GAAGd;IACHI,YAAYuC;IACZE,eAAe;IAChB;;AAGH,SAAOJ,QAAQzC,KAAK,GAAGA,OAAO;GAC9B,CACD4C,OAAOE,QAAQ"}
@@ -1,2 +1,2 @@
1
1
 
2
- import React, { RefObject } from "react";
2
+ import { FocusEvent, RefObject } from "react";