@cube-dev/ui-kit 0.0.0-canary-bada6bd → 0.0.0-canary-09a7efe

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 (602) hide show
  1. package/README.md +1 -1
  2. package/dist/README.md +1 -1
  3. package/dist/_internal/hooks/use-debounced-value.js +1 -1
  4. package/dist/_internal/hooks/use-deprecation-warning.js +1 -1
  5. package/dist/_internal/hooks/use-event.js +1 -1
  6. package/dist/_internal/hooks/use-is-first-render.js +1 -1
  7. package/dist/_internal/hooks/use-sync-ref.js +1 -1
  8. package/dist/_internal/hooks/use-timer/timer.js +1 -1
  9. package/dist/_internal/hooks/use-timer/use-timer.js +1 -1
  10. package/dist/_internal/hooks/use-warn.js +1 -1
  11. package/dist/components/Block.js +1 -1
  12. package/dist/components/CollectionItem.js +1 -1
  13. package/dist/components/GlobalStyles.js +1 -1
  14. package/dist/components/GridProvider.js +1 -1
  15. package/dist/components/HiddenInput.js +1 -1
  16. package/dist/components/Root.js +1 -1
  17. package/dist/components/actions/Action/Action.js +1 -1
  18. package/dist/components/actions/Banner/Banner.js +1 -1
  19. package/dist/components/actions/Button/Button.js +1 -1
  20. package/dist/components/actions/ButtonGroup/ButtonGroup.js +1 -1
  21. package/dist/components/actions/ButtonSplit/ButtonSplit.js +1 -1
  22. package/dist/components/actions/ButtonSplit/context.js +1 -1
  23. package/dist/components/actions/CommandMenu/CommandMenu.js +1 -1
  24. package/dist/components/actions/CommandMenu/styled.js +1 -1
  25. package/dist/components/actions/ItemAction/ItemAction.js +1 -1
  26. package/dist/components/actions/ItemActionContext.js +1 -1
  27. package/dist/components/actions/ItemActionsWrapper.js +1 -1
  28. package/dist/components/actions/ItemButton/ItemButton.js +3 -1
  29. package/dist/components/actions/ItemButton/ItemButton.js.map +1 -1
  30. package/dist/components/actions/Link/Link.js +1 -1
  31. package/dist/components/actions/Menu/Menu.js +1 -1
  32. package/dist/components/actions/Menu/MenuItem.js +1 -1
  33. package/dist/components/actions/Menu/MenuSection.js +1 -1
  34. package/dist/components/actions/Menu/MenuTrigger.js +1 -1
  35. package/dist/components/actions/Menu/SubMenuTrigger.js +1 -1
  36. package/dist/components/actions/Menu/SubmenuTriggerContext.js +1 -1
  37. package/dist/components/actions/Menu/context.js +1 -1
  38. package/dist/components/actions/Menu/styled.js +1 -1
  39. package/dist/components/actions/actions-run.js +1 -1
  40. package/dist/components/actions/index.js +1 -1
  41. package/dist/components/actions/use-action.js +3 -5
  42. package/dist/components/actions/use-action.js.map +1 -1
  43. package/dist/components/actions/use-anchored-menu.js +1 -1
  44. package/dist/components/actions/use-context-menu.js +1 -1
  45. package/dist/components/content/ActiveZone/ActiveZone.js +1 -1
  46. package/dist/components/content/Alert/Alert.js +1 -1
  47. package/dist/components/content/Alert/use-alert.js +1 -1
  48. package/dist/components/content/Avatar/Avatar.js +1 -1
  49. package/dist/components/content/Badge/Badge.js +1 -1
  50. package/dist/components/content/Card/Card.js +1 -1
  51. package/dist/components/content/Content.js +1 -1
  52. package/dist/components/content/CopyPasteBlock/CopyPasteBlock.js +1 -1
  53. package/dist/components/content/CopySnippet/CopySnippet.js +1 -1
  54. package/dist/components/content/Disclosure/Disclosure.js +1 -1
  55. package/dist/components/content/Divider.js +1 -1
  56. package/dist/components/content/Footer.js +1 -1
  57. package/dist/components/content/Header.js +1 -1
  58. package/dist/components/content/HotKeys/HotKeys.js +1 -1
  59. package/dist/components/content/InfoBadge/InfoBadge.js +1 -1
  60. package/dist/components/content/InlineInput/InlineInput.js +1 -1
  61. package/dist/components/content/Item/Item.js +3 -3
  62. package/dist/components/content/Item/Item.js.map +1 -1
  63. package/dist/components/content/ItemBadge/ItemBadge.js +1 -1
  64. package/dist/components/content/ItemCard/ItemCard.js +1 -1
  65. package/dist/components/content/Layout/GridLayout.js +1 -1
  66. package/dist/components/content/Layout/Layout.js +1 -1
  67. package/dist/components/content/Layout/LayoutBlock.js +1 -1
  68. package/dist/components/content/Layout/LayoutCenter.js +1 -1
  69. package/dist/components/content/Layout/LayoutContainer.js +1 -1
  70. package/dist/components/content/Layout/LayoutContent.js +1 -1
  71. package/dist/components/content/Layout/LayoutContext.js +1 -1
  72. package/dist/components/content/Layout/LayoutFlex.js +1 -1
  73. package/dist/components/content/Layout/LayoutFooter.js +1 -1
  74. package/dist/components/content/Layout/LayoutGrid.js +1 -1
  75. package/dist/components/content/Layout/LayoutHeader.js +1 -1
  76. package/dist/components/content/Layout/LayoutPane.js +1 -1
  77. package/dist/components/content/Layout/LayoutPanel.js +1 -1
  78. package/dist/components/content/Layout/LayoutPanelHeader.js +1 -1
  79. package/dist/components/content/Layout/LayoutToolbar.js +1 -1
  80. package/dist/components/content/Layout/hooks/useTinyScrollbar.js +1 -1
  81. package/dist/components/content/Layout/index.js +1 -1
  82. package/dist/components/content/Layout/utils.js +1 -1
  83. package/dist/components/content/Paragraph.js +1 -1
  84. package/dist/components/content/Placeholder/Placeholder.js +1 -1
  85. package/dist/components/content/PrismCode/PrismCode.js +1 -1
  86. package/dist/components/content/PrismCode/prismSetup.js +1 -1
  87. package/dist/components/content/PrismDiffCode/PrismDiffCode.js +1 -1
  88. package/dist/components/content/Result/Result.js +1 -1
  89. package/dist/components/content/Skeleton/Skeleton.js +1 -1
  90. package/dist/components/content/Tag/Tag.js +1 -1
  91. package/dist/components/content/Text.d.ts +14 -14
  92. package/dist/components/content/Text.js +1 -1
  93. package/dist/components/content/TextItem/TextItem.js +1 -1
  94. package/dist/components/content/Title.js +1 -1
  95. package/dist/components/content/Tree/Tree.js +1 -1
  96. package/dist/components/content/Tree/TreeNode.js +1 -1
  97. package/dist/components/content/Tree/styled.js +1 -1
  98. package/dist/components/content/Tree/tree-index.js +1 -1
  99. package/dist/components/content/Tree/use-checkbox-tree.js +1 -1
  100. package/dist/components/content/Tree/use-load-data.js +1 -1
  101. package/dist/components/content/highlightText.js +1 -1
  102. package/dist/components/content/use-auto-tooltip.js +3 -3
  103. package/dist/components/content/use-auto-tooltip.js.map +1 -1
  104. package/dist/components/data/DataTable/DataTable.js +1 -1
  105. package/dist/components/data/ItemTable/ItemTable.js +1 -1
  106. package/dist/components/data/ItemTable/ItemTableBulkBar.js +1 -1
  107. package/dist/components/data/ItemTable/ItemTableDragPreview.js +1 -1
  108. package/dist/components/data/ItemTable/ItemTableFooter.js +1 -1
  109. package/dist/components/data/ItemTable/ItemTableToolbar.js +1 -1
  110. package/dist/components/data/TableBase/ColumnResizer.js +1 -1
  111. package/dist/components/data/TableBase/RowCollection.js +1 -1
  112. package/dist/components/data/TableBase/TableHeaderCell.js +1 -1
  113. package/dist/components/data/TableBase/TableRow.js +1 -1
  114. package/dist/components/data/TableBase/TableView.js +1 -1
  115. package/dist/components/data/TableBase/column-menu.js +1 -1
  116. package/dist/components/data/TableBase/column-tint.js +1 -1
  117. package/dist/components/data/TableBase/row-menu.js +1 -1
  118. package/dist/components/data/TableBase/styled.js +1 -1
  119. package/dist/components/data/TableBase/table-tree.js +1 -1
  120. package/dist/components/data/TableBase/types.js +1 -1
  121. package/dist/components/data/TableBase/use-cell-selection.js +0 -0
  122. package/dist/components/data/TableBase/use-column-order.js +1 -1
  123. package/dist/components/data/TableBase/use-container-width.js +1 -1
  124. package/dist/components/data/TableBase/use-row-move-animation.js +1 -1
  125. package/dist/components/data/TableBase/use-scrollability.js +1 -1
  126. package/dist/components/data/TableBase/use-table-columns.js +1 -1
  127. package/dist/components/data/TableBase/use-table-search.js +1 -1
  128. package/dist/components/data/TableBase/use-table-selection.js +1 -1
  129. package/dist/components/data/TableBase/use-table-sort.js +1 -1
  130. package/dist/components/data/TableBase/use-table-sorts.js +1 -1
  131. package/dist/components/data/TableBase/use-table-storage.js +1 -1
  132. package/dist/components/data/TableBase/use-table-tree-state.js +1 -1
  133. package/dist/components/fields/Checkbox/Checkbox.js +1 -1
  134. package/dist/components/fields/Checkbox/CheckboxGroup.js +1 -1
  135. package/dist/components/fields/Checkbox/context.js +1 -1
  136. package/dist/components/fields/ColorInput/ColorInput.js +1 -1
  137. package/dist/components/fields/ColorPicker/ColorPicker.js +1 -1
  138. package/dist/components/fields/ColorSwatch/ColorSwatch.js +1 -1
  139. package/dist/components/fields/ColorSwatchGroup/ColorSwatchGroup.js +1 -1
  140. package/dist/components/fields/ComboBox/ComboBox.js +90 -43
  141. package/dist/components/fields/ComboBox/ComboBox.js.map +1 -1
  142. package/dist/components/fields/CommandTextArea/CommandTextArea.js +3 -2
  143. package/dist/components/fields/CommandTextArea/CommandTextArea.js.map +1 -1
  144. package/dist/components/fields/CommandTextArea/caretPosition.js +1 -1
  145. package/dist/components/fields/CommandTextArea/useCaretAnchor.js +1 -1
  146. package/dist/components/fields/DatePicker/DateInput.js +1 -1
  147. package/dist/components/fields/DatePicker/DateInputBase.js +1 -1
  148. package/dist/components/fields/DatePicker/DatePicker.js +1 -1
  149. package/dist/components/fields/DatePicker/DatePickerButton.js +1 -1
  150. package/dist/components/fields/DatePicker/DatePickerElement.js +1 -1
  151. package/dist/components/fields/DatePicker/DatePickerInput.js +1 -1
  152. package/dist/components/fields/DatePicker/DatePickerSegment.js +1 -1
  153. package/dist/components/fields/DatePicker/DateRangePicker.js +1 -1
  154. package/dist/components/fields/DatePicker/DateRangeSeparatedPicker.js +1 -1
  155. package/dist/components/fields/DatePicker/MonthPicker.js +1 -1
  156. package/dist/components/fields/DatePicker/PeriodPicker.js +1 -1
  157. package/dist/components/fields/DatePicker/QuarterPicker.js +1 -1
  158. package/dist/components/fields/DatePicker/TimeInput.js +1 -1
  159. package/dist/components/fields/DatePicker/WeekPicker.js +1 -1
  160. package/dist/components/fields/DatePicker/YearPicker.js +1 -1
  161. package/dist/components/fields/DatePicker/parseDate.js +1 -1
  162. package/dist/components/fields/DatePicker/period.js +1 -1
  163. package/dist/components/fields/DatePicker/props.js +1 -1
  164. package/dist/components/fields/DatePicker/utils.js +1 -1
  165. package/dist/components/fields/FileInput/FileInput.js +1 -1
  166. package/dist/components/fields/FilterListBox/FilterListBox.js +28 -18
  167. package/dist/components/fields/FilterListBox/FilterListBox.js.map +1 -1
  168. package/dist/components/fields/FilterPicker/FilterPicker.js +1 -1
  169. package/dist/components/fields/Input/Input.js +1 -1
  170. package/dist/components/fields/ListBox/DraggableListBox.js +1 -1
  171. package/dist/components/fields/ListBox/ListBox.d.ts +2 -2
  172. package/dist/components/fields/ListBox/ListBox.js +1 -2
  173. package/dist/components/fields/ListBox/ListBox.js.map +1 -1
  174. package/dist/components/fields/ListBox/optionId.js +16 -0
  175. package/dist/components/fields/ListBox/optionId.js.map +1 -0
  176. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js +120 -110
  177. package/dist/components/fields/ListBoxPopover/ListBoxPopover.js.map +1 -1
  178. package/dist/components/fields/ListBoxPopover/listNavigation.js +1 -1
  179. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js +44 -22
  180. package/dist/components/fields/ListBoxPopover/useCompositeFocus.js.map +1 -1
  181. package/dist/components/fields/NumberInput/NumberInput.js +1 -1
  182. package/dist/components/fields/NumberInput/StepButton.js +1 -1
  183. package/dist/components/fields/PasswordInput/PasswordInput.js +1 -1
  184. package/dist/components/fields/Picker/Picker.js +1 -1
  185. package/dist/components/fields/RadioGroup/Radio.js +1 -1
  186. package/dist/components/fields/RadioGroup/RadioGroup.js +1 -1
  187. package/dist/components/fields/RadioGroup/context.js +1 -1
  188. package/dist/components/fields/SearchComboBox/SearchComboBox.js +3 -2
  189. package/dist/components/fields/SearchComboBox/SearchComboBox.js.map +1 -1
  190. package/dist/components/fields/SearchInput/SearchInput.js +1 -1
  191. package/dist/components/fields/Select/Select.js +1 -1
  192. package/dist/components/fields/Slider/Gradation.js +1 -1
  193. package/dist/components/fields/Slider/HueSlider.js +1 -1
  194. package/dist/components/fields/Slider/RangeSlider.js +1 -1
  195. package/dist/components/fields/Slider/Slider.js +1 -1
  196. package/dist/components/fields/Slider/SliderBase.js +1 -1
  197. package/dist/components/fields/Slider/SliderThumb.js +1 -1
  198. package/dist/components/fields/Slider/SliderTrack.js +1 -1
  199. package/dist/components/fields/Slider/elements.js +1 -1
  200. package/dist/components/fields/Slider/index.js +1 -1
  201. package/dist/components/fields/Switch/Switch.js +1 -1
  202. package/dist/components/fields/TagInput/TagInput.d.ts +182 -0
  203. package/dist/components/fields/TagInput/TagInput.js +1856 -0
  204. package/dist/components/fields/TagInput/TagInput.js.map +1 -0
  205. package/dist/components/fields/TagInput/TagList.js +355 -0
  206. package/dist/components/fields/TagInput/TagList.js.map +1 -0
  207. package/dist/components/fields/TagInput/index.d.ts +2 -0
  208. package/dist/components/fields/TextArea/TextArea.js +1 -1
  209. package/dist/components/fields/TextInput/TextInput.js +1 -1
  210. package/dist/components/fields/TextInput/TextInputBase.d.ts +6 -0
  211. package/dist/components/fields/TextInput/TextInputBase.js +8 -6
  212. package/dist/components/fields/TextInput/TextInputBase.js.map +1 -1
  213. package/dist/components/fields/TextInput/useAutoSizeTextArea.js +1 -1
  214. package/dist/components/fields/TextInputMapper/TextInputMapper.js +1 -1
  215. package/dist/components/fields/TriggerActions.js +1 -1
  216. package/dist/components/fields/color/ColorPanel.js +1 -1
  217. package/dist/components/fields/color/channels.js +1 -1
  218. package/dist/components/fields/color/color.js +1 -1
  219. package/dist/components/fields/color/context.js +1 -1
  220. package/dist/components/fields/index.d.ts +2 -0
  221. package/dist/components/form/FieldWrapper/FieldWrapper.js +13 -2
  222. package/dist/components/form/FieldWrapper/FieldWrapper.js.map +1 -1
  223. package/dist/components/form/Form/Field.js +1 -1
  224. package/dist/components/form/Form/Form.js +1 -1
  225. package/dist/components/form/Form/ModernFormRoot.js +1 -1
  226. package/dist/components/form/Form/ResetButton/ResetButton.js +1 -1
  227. package/dist/components/form/Form/SubmitButton/SubmitButton.js +1 -1
  228. package/dist/components/form/Form/SubmitError.js +1 -1
  229. package/dist/components/form/Form/backend.js +1 -1
  230. package/dist/components/form/Form/index.js +1 -1
  231. package/dist/components/form/Form/modern/actions.js +1 -1
  232. package/dist/components/form/Form/modern/context.js +1 -1
  233. package/dist/components/form/Form/modern/controller.js +1 -1
  234. package/dist/components/form/Form/modern/field-binding.js +1 -1
  235. package/dist/components/form/Form/modern/field.js +1 -1
  236. package/dist/components/form/Form/modern/react.js +1 -1
  237. package/dist/components/form/Form/modern/store.js +1 -1
  238. package/dist/components/form/Form/modern/validation.js +1 -1
  239. package/dist/components/form/Form/modern/values.js +1 -1
  240. package/dist/components/form/Form/use-field/use-field-binding.js +1 -1
  241. package/dist/components/form/Form/use-field/use-field-props.js +1 -1
  242. package/dist/components/form/Form/use-field/use-field.js +1 -1
  243. package/dist/components/form/Form/use-form.js +1 -1
  244. package/dist/components/form/Form/validation.js +1 -1
  245. package/dist/components/form/Label.js +1 -1
  246. package/dist/components/form/legacy-tooltip.js +1 -1
  247. package/dist/components/form/validation/ValidationIndicator.js +1 -1
  248. package/dist/components/form/validation/resolve-validation-props.js +1 -1
  249. package/dist/components/form/validation/use-validation-props.js +1 -1
  250. package/dist/components/form/wrapper.js +1 -1
  251. package/dist/components/helpers/DisplayTransition/DisplayTransition.js +1 -1
  252. package/dist/components/helpers/IconSwitch/IconSwitch.js +1 -1
  253. package/dist/components/layout/Board/Board.js +1 -1
  254. package/dist/components/layout/Board/BoardProvider.js +1 -1
  255. package/dist/components/layout/Board/BoardResponsive.js +1 -1
  256. package/dist/components/layout/Board/Widget.js +1 -1
  257. package/dist/components/layout/Board/WidgetHost.js +1 -1
  258. package/dist/components/layout/Board/board-context.js +1 -1
  259. package/dist/components/layout/Board/board-store.js +1 -1
  260. package/dist/components/layout/Board/grid-core/calculate.js +1 -1
  261. package/dist/components/layout/Board/grid-core/collision-modes.js +1 -1
  262. package/dist/components/layout/Board/grid-core/collision.js +1 -1
  263. package/dist/components/layout/Board/grid-core/compactors.js +1 -1
  264. package/dist/components/layout/Board/grid-core/constraints.js +1 -1
  265. package/dist/components/layout/Board/grid-core/group-move.js +1 -1
  266. package/dist/components/layout/Board/grid-core/layout.js +1 -1
  267. package/dist/components/layout/Board/grid-core/placement.js +1 -1
  268. package/dist/components/layout/Board/grid-core/sort.js +1 -1
  269. package/dist/components/layout/Board/index.js +1 -1
  270. package/dist/components/layout/Board/responsive-utils.js +1 -1
  271. package/dist/components/layout/Board/use-board-layout.js +1 -1
  272. package/dist/components/layout/Board/use-board-registry.js +1 -1
  273. package/dist/components/layout/Board/use-board-select-modifier-key.js +1 -1
  274. package/dist/components/layout/Board/use-board-selection.js +1 -1
  275. package/dist/components/layout/Flex.js +1 -1
  276. package/dist/components/layout/Flow.js +1 -1
  277. package/dist/components/layout/Grid.js +1 -1
  278. package/dist/components/layout/Panel.js +1 -1
  279. package/dist/components/layout/Prefix.js +1 -1
  280. package/dist/components/layout/ResizablePanel.js +1 -1
  281. package/dist/components/layout/Space.js +1 -1
  282. package/dist/components/layout/Suffix.js +1 -1
  283. package/dist/components/navigation/Pagination/Pagination.js +1 -1
  284. package/dist/components/navigation/Pagination/use-pagination.js +1 -1
  285. package/dist/components/navigation/Tabs/DraggableTabList.js +1 -1
  286. package/dist/components/navigation/Tabs/TabButton.js +1 -1
  287. package/dist/components/navigation/Tabs/TabDropIndicator.js +1 -1
  288. package/dist/components/navigation/Tabs/TabPanel.js +1 -1
  289. package/dist/components/navigation/Tabs/TabPicker.js +1 -1
  290. package/dist/components/navigation/Tabs/Tabs.js +1 -1
  291. package/dist/components/navigation/Tabs/TabsAction.js +1 -1
  292. package/dist/components/navigation/Tabs/TabsContext.js +1 -1
  293. package/dist/components/navigation/Tabs/popover-placement.js +1 -1
  294. package/dist/components/navigation/Tabs/styled.js +1 -1
  295. package/dist/components/navigation/Tabs/types.js +1 -1
  296. package/dist/components/navigation/Tabs/use-tab-editing.js +1 -1
  297. package/dist/components/navigation/Tabs/use-tab-indicator.js +1 -1
  298. package/dist/components/organisms/StatsCard/StatsCard.js +1 -1
  299. package/dist/components/other/Calendar/Calendar.js +1 -1
  300. package/dist/components/other/Calendar/CalendarCell.js +1 -1
  301. package/dist/components/other/Calendar/CalendarGrid.js +1 -1
  302. package/dist/components/other/Calendar/CalendarHeader.js +1 -1
  303. package/dist/components/other/Calendar/CalendarPanel.js +1 -1
  304. package/dist/components/other/Calendar/PeriodCalendar.js +1 -1
  305. package/dist/components/other/Calendar/PeriodGrid.js +1 -1
  306. package/dist/components/other/Calendar/RangeCalendar.js +1 -1
  307. package/dist/components/other/Calendar/styled.js +1 -1
  308. package/dist/components/other/CubeLogo/CubeLogo.js +1 -1
  309. package/dist/components/other/NoDataIcon/NoDataIcon.js +1 -1
  310. package/dist/components/overlays/AlertDialog/AlertDialog.js +1 -1
  311. package/dist/components/overlays/AlertDialog/AlertDialogApiProvider.js +1 -1
  312. package/dist/components/overlays/AlertDialog/AlertDialogZone.js +1 -1
  313. package/dist/components/overlays/Dialog/Dialog.js +1 -1
  314. package/dist/components/overlays/Dialog/DialogContainer.js +1 -1
  315. package/dist/components/overlays/Dialog/DialogForm.js +1 -1
  316. package/dist/components/overlays/Dialog/DialogTrigger.js +1 -1
  317. package/dist/components/overlays/Dialog/ModernDialogForm.js +1 -1
  318. package/dist/components/overlays/Dialog/context.js +1 -1
  319. package/dist/components/overlays/Dialog/use-content-overflow.js +1 -1
  320. package/dist/components/overlays/Dialog/use-dialog-container.js +1 -1
  321. package/dist/components/overlays/Modal/Modal.js +1 -1
  322. package/dist/components/overlays/Modal/OpenTransitionContext.js +1 -1
  323. package/dist/components/overlays/Modal/Overlay.js +1 -1
  324. package/dist/components/overlays/Modal/Popover.js +1 -1
  325. package/dist/components/overlays/Modal/Tray.js +1 -1
  326. package/dist/components/overlays/Modal/Underlay.js +1 -1
  327. package/dist/components/overlays/Notifications/Notification.js +1 -1
  328. package/dist/components/overlays/Notifications/NotificationAction.js +1 -1
  329. package/dist/components/overlays/Notifications/NotificationCard.js +1 -1
  330. package/dist/components/overlays/Notifications/NotificationContext.js +1 -1
  331. package/dist/components/overlays/Notifications/NotificationItem.js +1 -1
  332. package/dist/components/overlays/Notifications/OverlayContainer.js +1 -1
  333. package/dist/components/overlays/Notifications/OverlayProvider.js +1 -1
  334. package/dist/components/overlays/Notifications/PersistentNotificationsList.js +1 -1
  335. package/dist/components/overlays/Notifications/dismissed-storage.js +1 -1
  336. package/dist/components/overlays/Notifications/format-relative-time.js +1 -1
  337. package/dist/components/overlays/Notifications/index.js +1 -1
  338. package/dist/components/overlays/Notifications/use-notification-state.js +1 -1
  339. package/dist/components/overlays/Notifications/use-notifications.js +1 -1
  340. package/dist/components/overlays/Notifications/use-overlay-timers.js +1 -1
  341. package/dist/components/overlays/Notifications/use-persistent-notifications.js +1 -1
  342. package/dist/components/overlays/Notifications/use-persistent-state.js +1 -1
  343. package/dist/components/overlays/Notifications/use-toast-state.js +1 -1
  344. package/dist/components/overlays/Toast/ToastItem.js +1 -1
  345. package/dist/components/overlays/Toast/index.js +1 -1
  346. package/dist/components/overlays/Toast/useProgressToast.js +1 -1
  347. package/dist/components/overlays/Toast/useToast.js +1 -1
  348. package/dist/components/overlays/Tooltip/Tooltip.js +14 -12
  349. package/dist/components/overlays/Tooltip/Tooltip.js.map +1 -1
  350. package/dist/components/overlays/Tooltip/TooltipProvider.d.ts +6 -0
  351. package/dist/components/overlays/Tooltip/TooltipProvider.js +43 -38
  352. package/dist/components/overlays/Tooltip/TooltipProvider.js.map +1 -1
  353. package/dist/components/overlays/Tooltip/TooltipTrigger.js +1 -1
  354. package/dist/components/overlays/Tooltip/context.js +1 -1
  355. package/dist/components/overlays/Tooltip/split-trigger-props.js +1 -1
  356. package/dist/components/portal/Portal.js +1 -1
  357. package/dist/components/portal/PortalProvider.js +1 -1
  358. package/dist/components/portal/usePortal.js +1 -1
  359. package/dist/components/shared/DraggableCollection.js +1 -1
  360. package/dist/components/shared/InvalidIcon.js +1 -1
  361. package/dist/components/shared/ValidIcon.js +1 -1
  362. package/dist/components/status/LoadingAnimation/LoadingAnimation.js +1 -1
  363. package/dist/components/status/Spin/Cube.js +1 -1
  364. package/dist/components/status/Spin/InternalSpinner.js +1 -1
  365. package/dist/components/status/Spin/Spin.js +1 -1
  366. package/dist/components/status/Spin/SpinsContainer.js +1 -1
  367. package/dist/data/item-themes.js +1 -1
  368. package/dist/data/themes.js +1 -1
  369. package/dist/eslint-plugin/defaults.generated.js +47 -1
  370. package/dist/eslint-plugin/defaults.generated.js.map +1 -1
  371. package/dist/eslint-plugin/index.js +1 -1
  372. package/dist/eslint-plugin/rules/no-redundant-default-prop.js +1 -1
  373. package/dist/i18n/I18nProvider.js +1 -1
  374. package/dist/i18n/createFormatter.js +1 -1
  375. package/dist/i18n/index.js +1 -1
  376. package/dist/i18n/instance.js +1 -1
  377. package/dist/i18n/locales/de-DE/uikit.js +18 -1
  378. package/dist/i18n/locales/en-US/uikit.js +18 -1
  379. package/dist/i18n/locales/en-US/uikit.json.d.ts +22 -2
  380. package/dist/i18n/locales/es-ES/uikit.js +18 -1
  381. package/dist/i18n/locales/es-MX/uikit.js +18 -1
  382. package/dist/i18n/locales/fr-FR/uikit.js +18 -1
  383. package/dist/i18n/locales/it-IT/uikit.js +18 -1
  384. package/dist/i18n/locales/ja-JP/uikit.js +18 -1
  385. package/dist/i18n/locales/nb-NO/uikit.js +18 -1
  386. package/dist/i18n/locales/pt-BR/uikit.js +18 -1
  387. package/dist/i18n/locales/pt-PT/uikit.js +18 -1
  388. package/dist/i18n/locales/sv-SE/uikit.js +18 -1
  389. package/dist/i18n/locales/vi-VN/uikit.js +18 -1
  390. package/dist/i18n/locales.js +1 -1
  391. package/dist/i18n/useFormatter.js +1 -1
  392. package/dist/i18n/useI18n.js +1 -1
  393. package/dist/icons/AdjustmentsHorizontalIcon.js +1 -1
  394. package/dist/icons/AdjustmentsIcon.js +1 -1
  395. package/dist/icons/AiIcon.js +1 -1
  396. package/dist/icons/AreaChartIcon.js +1 -1
  397. package/dist/icons/ArrowNarrowDownIcon.js +1 -1
  398. package/dist/icons/ArrowNarrowUpIcon.js +1 -1
  399. package/dist/icons/BackwardIcon.js +1 -1
  400. package/dist/icons/BarChartIcon.js +1 -1
  401. package/dist/icons/BellFilledIcon.js +1 -1
  402. package/dist/icons/BellIcon.js +1 -1
  403. package/dist/icons/BooleanIcon.js +1 -1
  404. package/dist/icons/CalendarEditIcon.js +1 -1
  405. package/dist/icons/CalendarIcon.js +1 -1
  406. package/dist/icons/CaretDownIcon.js +1 -1
  407. package/dist/icons/CaretUpIcon.js +1 -1
  408. package/dist/icons/ChartAreaStackedIcon.js +1 -1
  409. package/dist/icons/ChartAreaStackedPercentageIcon.js +1 -1
  410. package/dist/icons/ChartBarGroupedHorizontalIcon.js +1 -1
  411. package/dist/icons/ChartBarGroupedIcon.js +1 -1
  412. package/dist/icons/ChartBarHorizontalIcon.js +1 -1
  413. package/dist/icons/ChartBarLineIcon.js +1 -1
  414. package/dist/icons/ChartBarStackedHorizontalIcon.js +1 -1
  415. package/dist/icons/ChartBarStackedIcon.js +1 -1
  416. package/dist/icons/ChartBarStackedPercentageHorizontalIcon.js +1 -1
  417. package/dist/icons/ChartBarStackedPercentageIcon.js +1 -1
  418. package/dist/icons/ChartBoxPlot2Icon.js +1 -1
  419. package/dist/icons/ChartBoxPlotIcon.js +1 -1
  420. package/dist/icons/ChartBubbleIcon.js +1 -1
  421. package/dist/icons/ChartDonut2Icon.js +1 -1
  422. package/dist/icons/ChartFunnelIcon.js +1 -1
  423. package/dist/icons/ChartHeatmapIcon.js +1 -1
  424. package/dist/icons/ChartKPIIcon.js +1 -1
  425. package/dist/icons/ChartPie2Icon.js +1 -1
  426. package/dist/icons/ChartScatterIcon.js +1 -1
  427. package/dist/icons/CheckCircleFilledIcon.js +1 -1
  428. package/dist/icons/CheckCircleIcon.js +1 -1
  429. package/dist/icons/CheckIcon.js +1 -1
  430. package/dist/icons/CircleFilledIcon.js +1 -1
  431. package/dist/icons/ClearIcon.js +1 -1
  432. package/dist/icons/CloseCircleFilledIcon.js +1 -1
  433. package/dist/icons/CloseCircleIcon.js +1 -1
  434. package/dist/icons/CloseIcon.js +1 -1
  435. package/dist/icons/CodeIcon.js +1 -1
  436. package/dist/icons/ColumnTotalIcon.js +1 -1
  437. package/dist/icons/CopyIcon.js +1 -1
  438. package/dist/icons/CountIcon.js +1 -1
  439. package/dist/icons/CubeIcon.js +1 -1
  440. package/dist/icons/CubePauseIcon.js +1 -1
  441. package/dist/icons/CubePlayIcon.js +1 -1
  442. package/dist/icons/CurrencyDollarIcon.js +1 -1
  443. package/dist/icons/DangerIcon.js +1 -1
  444. package/dist/icons/DashboardIcon.js +1 -1
  445. package/dist/icons/DatabaseIcon.js +1 -1
  446. package/dist/icons/DecimalDecreaseIcon.js +1 -1
  447. package/dist/icons/DecimalIncreaseIcon.js +1 -1
  448. package/dist/icons/DirectionIcon.js +1 -1
  449. package/dist/icons/DonutIcon.js +1 -1
  450. package/dist/icons/DownIcon.js +1 -1
  451. package/dist/icons/EditIcon.js +1 -1
  452. package/dist/icons/ExclamationCircleFilledIcon.js +1 -1
  453. package/dist/icons/ExclamationCircleIcon.js +1 -1
  454. package/dist/icons/ExclamationIcon.js +1 -1
  455. package/dist/icons/EyeIcon.js +1 -1
  456. package/dist/icons/EyeInvisibleIcon.js +1 -1
  457. package/dist/icons/FilterIcon.js +1 -1
  458. package/dist/icons/FolderFilledIcon.js +1 -1
  459. package/dist/icons/FolderIcon.js +1 -1
  460. package/dist/icons/FolderOpenFilledIcon.js +1 -1
  461. package/dist/icons/FolderOpenIcon.js +1 -1
  462. package/dist/icons/ForwardIcon.js +1 -1
  463. package/dist/icons/GripVerticalIcon.js +1 -1
  464. package/dist/icons/HierarchyIcon.js +1 -1
  465. package/dist/icons/HierarchyOpenIcon.js +1 -1
  466. package/dist/icons/Icon.js +1 -1
  467. package/dist/icons/InfoCircleIcon.js +1 -1
  468. package/dist/icons/InfoIcon.js +1 -1
  469. package/dist/icons/KeyIcon.js +1 -1
  470. package/dist/icons/LeftIcon.js +1 -1
  471. package/dist/icons/LineChartIcon.js +1 -1
  472. package/dist/icons/LoadingIcon.js +1 -1
  473. package/dist/icons/LockFilledIcon.js +1 -1
  474. package/dist/icons/LockIcon.js +1 -1
  475. package/dist/icons/MoreIcon.js +1 -1
  476. package/dist/icons/NotAllowedIcon.js +1 -1
  477. package/dist/icons/Number123Icon.js +1 -1
  478. package/dist/icons/NumberIcon.js +1 -1
  479. package/dist/icons/PauseCircleFilledIcon.js +1 -1
  480. package/dist/icons/PauseCircleIcon.js +1 -1
  481. package/dist/icons/PauseIcon.js +1 -1
  482. package/dist/icons/PercentageIcon.js +1 -1
  483. package/dist/icons/PieChartIcon.js +1 -1
  484. package/dist/icons/PipetteIcon.js +1 -1
  485. package/dist/icons/PlayCircleIcon.js +1 -1
  486. package/dist/icons/PlayIcon.js +1 -1
  487. package/dist/icons/PlusIcon.js +1 -1
  488. package/dist/icons/ProgressBarIcon.js +1 -1
  489. package/dist/icons/ReloadIcon.js +1 -1
  490. package/dist/icons/ReportIcon.js +1 -1
  491. package/dist/icons/ReturnIcon.js +1 -1
  492. package/dist/icons/RightIcon.js +1 -1
  493. package/dist/icons/RowTotalsIcon.js +1 -1
  494. package/dist/icons/SchemeIcon.js +1 -1
  495. package/dist/icons/SearchIcon.js +1 -1
  496. package/dist/icons/SemanticQueryIcon.js +1 -1
  497. package/dist/icons/SettingsIcon.js +1 -1
  498. package/dist/icons/ShieldFilledIcon.js +1 -1
  499. package/dist/icons/ShieldIcon.js +1 -1
  500. package/dist/icons/SlashIcon.js +1 -1
  501. package/dist/icons/SparklesIcon.js +1 -1
  502. package/dist/icons/SqlIcon.js +1 -1
  503. package/dist/icons/StatsIcon.js +1 -1
  504. package/dist/icons/StopIcon.js +1 -1
  505. package/dist/icons/StringIcon.js +1 -1
  506. package/dist/icons/SubtotalsIcon.js +1 -1
  507. package/dist/icons/SwitchIcon.js +1 -1
  508. package/dist/icons/TableIcon.js +1 -1
  509. package/dist/icons/ThumbsDownIcon.js +1 -1
  510. package/dist/icons/ThumbsUpIcon.js +1 -1
  511. package/dist/icons/ThunderboltCrossedIcon.js +1 -1
  512. package/dist/icons/ThunderboltFilledIcon.js +1 -1
  513. package/dist/icons/ThunderboltIcon.js +1 -1
  514. package/dist/icons/TimeIcon.js +1 -1
  515. package/dist/icons/TrashIcon.js +1 -1
  516. package/dist/icons/UnlockIcon.js +1 -1
  517. package/dist/icons/UpIcon.js +1 -1
  518. package/dist/icons/UserGroupIcon.js +1 -1
  519. package/dist/icons/UserIcon.js +1 -1
  520. package/dist/icons/UserLockIcon.js +1 -1
  521. package/dist/icons/ViewIcon.js +1 -1
  522. package/dist/icons/WarningFilledIcon.js +1 -1
  523. package/dist/icons/WarningIcon.js +1 -1
  524. package/dist/icons/wrap-icon.js +1 -1
  525. package/dist/index.d.ts +2 -1
  526. package/dist/index.js +3 -2
  527. package/dist/index.js.map +1 -1
  528. package/dist/probe/canonicalize.js +1 -1
  529. package/dist/probe/css.js +1 -1
  530. package/dist/probe/index.js +1 -1
  531. package/dist/provider.js +1 -1
  532. package/dist/providers/TrackingProvider.js +1 -1
  533. package/dist/providers/navigationAdapter.default.js +1 -1
  534. package/dist/tokens/all-tokens.js +1 -1
  535. package/dist/tokens/base.js +1 -1
  536. package/dist/tokens/color-seed.js +1 -1
  537. package/dist/tokens/color-theme.js +1 -1
  538. package/dist/tokens/colors.js +1 -1
  539. package/dist/tokens/layout.js +1 -1
  540. package/dist/tokens/lazy-styles.js +1 -1
  541. package/dist/tokens/legacy-color.js +1 -1
  542. package/dist/tokens/palette-config.js +1 -1
  543. package/dist/tokens/palette.js +1 -1
  544. package/dist/tokens/resolve.js +1 -1
  545. package/dist/tokens/shadows.js +1 -1
  546. package/dist/tokens/sizes.js +1 -1
  547. package/dist/tokens/spacing.js +1 -1
  548. package/dist/tokens/typography.d.ts +1 -0
  549. package/dist/tokens/typography.js +10 -1
  550. package/dist/tokens/typography.js.map +1 -1
  551. package/dist/utils/ResizeSensor.js +1 -1
  552. package/dist/utils/colors.js +1 -1
  553. package/dist/utils/dotize.js +1 -1
  554. package/dist/utils/is-dev-env.js +1 -1
  555. package/dist/utils/modules.js +1 -1
  556. package/dist/utils/promise.js +1 -1
  557. package/dist/utils/raf.js +1 -1
  558. package/dist/utils/random.js +1 -1
  559. package/dist/utils/range.js +1 -1
  560. package/dist/utils/react/RenderCache.js +1 -1
  561. package/dist/utils/react/Slots.js +1 -1
  562. package/dist/utils/react/chain.js +1 -1
  563. package/dist/utils/react/disabledProps.js +1 -1
  564. package/dist/utils/react/escapePropagation.js +1 -1
  565. package/dist/utils/react/forwardRefWithGenerics.js +1 -1
  566. package/dist/utils/react/index.js +1 -1
  567. package/dist/utils/react/interactions.js +1 -1
  568. package/dist/utils/react/isTextOnly.js +1 -1
  569. package/dist/utils/react/mapProps.js +1 -1
  570. package/dist/utils/react/mergeProps.js +1 -1
  571. package/dist/utils/react/nullableValue.js +1 -1
  572. package/dist/utils/react/programmaticFocus.js +1 -1
  573. package/dist/utils/react/resolveIcon.js +1 -1
  574. package/dist/utils/react/sharedStore.js +1 -1
  575. package/dist/utils/react/useBufferedValue.js +1 -1
  576. package/dist/utils/react/useCombinedRefs.js +1 -1
  577. package/dist/utils/react/useControlledFocusVisible.js +1 -1
  578. package/dist/utils/react/useEventBus.js +1 -1
  579. package/dist/utils/react/useId.js +1 -1
  580. package/dist/utils/react/useIsDarwin.js +1 -1
  581. package/dist/utils/react/useKeySymbols.js +1 -1
  582. package/dist/utils/react/useLayoutEffect.js +1 -1
  583. package/dist/utils/react/useLocalStorage.js +1 -1
  584. package/dist/utils/react/useMergeStyles.js +1 -1
  585. package/dist/utils/react/useOverlayEscapeGuard.js +1 -1
  586. package/dist/utils/react/usePopoverSync.js +1 -1
  587. package/dist/utils/react/useQaProps.js +1 -1
  588. package/dist/utils/react/useScheme.js +1 -1
  589. package/dist/utils/react/useViewportSize.js +1 -1
  590. package/dist/utils/react/wrapNodeIfPlain.js +3 -4
  591. package/dist/utils/react/wrapNodeIfPlain.js.map +1 -1
  592. package/dist/utils/selection.js +1 -1
  593. package/dist/utils/styles.js +1 -1
  594. package/dist/utils/tree.js +1 -1
  595. package/dist/utils/warnings.js +1 -1
  596. package/dist/version.js +2 -2
  597. package/docs/Usage.md +10 -9
  598. package/docs/components/actions/ItemButton.md +2 -2
  599. package/docs/components/fields/TagInput.md +429 -0
  600. package/docs/components/overlays/TooltipProvider.md +1 -0
  601. package/package.json +1 -1
  602. package/tasty.config.ts +2 -1
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | 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";
@@ -61,21 +61,23 @@ const ListBoxPopoverElement = tasty({
61
61
  }
62
62
  });
63
63
  const ListBoxPopover = function ListBoxPopover(props) {
64
- const $ = c(62);
64
+ const $ = c(66);
65
65
  const { t } = useI18n();
66
- const { isOpen, triggerRef, popoverRef, listBoxRef, direction, shouldFlip, overlayOffset, containerPadding, comboBoxWidth, listBoxId, overlayStyles, listBoxStyles, optionStyles, optionHighlight, sectionStyles, headingStyles, selectedKey, isDisabled, disabledKeys, items, children, listStateRef, onSelectionChange, onClose, label, ariaLabel, compositeFocusProps, filter, size: t0, emptyLabel, positionTargetRef, positionApiRef } = props;
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 selectionMode = t0 === void 0 ? "single" : t0;
68
+ const shouldCloseOnTriggerInteraction = t1 === void 0 ? true : t1;
67
69
  const mergedPopoverRef = popoverRef;
68
70
  const overlayScrollRef = useRef(null);
69
- const t1 = positionTargetRef ?? triggerRef;
70
- const t2 = mergedPopoverRef;
71
- const t3 = `${direction} start`;
72
- let t4;
73
- if ($[0] !== containerPadding || $[1] !== isOpen || $[2] !== overlayOffset || $[3] !== shouldFlip || $[4] !== t1 || $[5] !== t2 || $[6] !== t3) {
74
- t4 = {
75
- targetRef: t1,
76
- overlayRef: t2,
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,
77
79
  scrollRef: overlayScrollRef,
78
- placement: t3,
80
+ placement: t5,
79
81
  shouldFlip,
80
82
  isOpen,
81
83
  offset: overlayOffset,
@@ -85,25 +87,25 @@ const ListBoxPopover = function ListBoxPopover(props) {
85
87
  $[1] = isOpen;
86
88
  $[2] = overlayOffset;
87
89
  $[3] = shouldFlip;
88
- $[4] = t1;
89
- $[5] = t2;
90
- $[6] = t3;
91
- $[7] = t4;
92
- } else t4 = $[7];
93
- const { overlayProps: overlayPositionProps, placement, updatePosition } = useOverlayPosition(t4);
94
- let t5;
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;
95
97
  if ($[8] !== overlayPositionProps.style) {
96
- t5 = overlayPositionProps.style ?? {};
98
+ t7 = overlayPositionProps.style ?? {};
97
99
  $[8] = overlayPositionProps.style;
98
- $[9] = t5;
99
- } else t5 = $[9];
100
- const t6 = t5;
100
+ $[9] = t7;
101
+ } else t7 = $[9];
102
+ const t8 = t7;
101
103
  let maxHeight;
102
104
  let maxWidth;
103
105
  let positionStyle;
104
- if ($[10] !== t6) {
105
- ({maxHeight, maxWidth, ...positionStyle} = t6);
106
- $[10] = t6;
106
+ if ($[10] !== t8) {
107
+ ({maxHeight, maxWidth, ...positionStyle} = t8);
108
+ $[10] = t8;
107
109
  $[11] = maxHeight;
108
110
  $[12] = maxWidth;
109
111
  $[13] = positionStyle;
@@ -112,30 +114,31 @@ const ListBoxPopover = function ListBoxPopover(props) {
112
114
  maxWidth = $[12];
113
115
  positionStyle = $[13];
114
116
  }
115
- let t7;
116
- let t8;
117
+ let t10;
118
+ let t9;
117
119
  if ($[14] !== positionApiRef || $[15] !== updatePosition) {
118
- t7 = () => {
120
+ t9 = () => {
119
121
  if (positionApiRef) positionApiRef.current = { updatePosition };
120
122
  return () => {
121
123
  if (positionApiRef) positionApiRef.current = null;
122
124
  };
123
125
  };
124
- t8 = [positionApiRef, updatePosition];
126
+ t10 = [positionApiRef, updatePosition];
125
127
  $[14] = positionApiRef;
126
128
  $[15] = updatePosition;
127
- $[16] = t7;
128
- $[17] = t8;
129
+ $[16] = t10;
130
+ $[17] = t9;
129
131
  } else {
130
- t7 = $[16];
131
- t8 = $[17];
132
+ t10 = $[16];
133
+ t9 = $[17];
132
134
  }
133
- useEffect(t7, t8);
134
- let t9;
135
- if ($[18] !== onClose || $[19] !== triggerRef) {
136
- t9 = (el) => {
135
+ useEffect(t9, t10);
136
+ let t11;
137
+ if ($[18] !== onClose || $[19] !== shouldCloseOnTriggerInteraction || $[20] !== triggerRef) {
138
+ t11 = (el) => {
137
139
  const menuTriggerEl = el.closest("[data-popover-trigger]");
138
140
  if (!menuTriggerEl) {
141
+ if (!shouldCloseOnTriggerInteraction && triggerRef?.current?.contains(el)) return false;
139
142
  if (el.closest("[data-popover-keep]")) return false;
140
143
  if (el.closest("[data-popover-dismiss]")) {
141
144
  setTimeout(onClose, 0);
@@ -147,46 +150,47 @@ const ListBoxPopover = function ListBoxPopover(props) {
147
150
  return false;
148
151
  };
149
152
  $[18] = onClose;
150
- $[19] = triggerRef;
151
- $[20] = t9;
152
- } else t9 = $[20];
153
- let t10;
154
- if ($[21] !== isOpen || $[22] !== onClose || $[23] !== t9) {
155
- t10 = {
153
+ $[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
160
  onClose,
157
161
  shouldCloseOnBlur: true,
158
162
  isOpen,
159
163
  isDismissable: true,
160
- shouldCloseOnInteractOutside: t9
164
+ shouldCloseOnInteractOutside: t11
161
165
  };
162
- $[21] = isOpen;
163
- $[22] = onClose;
164
- $[23] = t9;
165
- $[24] = t10;
166
- } else t10 = $[24];
167
- const { overlayProps: overlayBehaviorProps } = useOverlay(t10, mergedPopoverRef);
168
- let t11;
169
- if ($[25] !== direction || $[26] !== placement) {
170
- t11 = placement?.split(" ")[0] || direction;
171
- $[25] = direction;
172
- $[26] = placement;
173
- $[27] = t11;
174
- } else t11 = $[27];
175
- const placementDirection = t11;
166
+ $[22] = isOpen;
167
+ $[23] = onClose;
168
+ $[24] = t11;
169
+ $[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;
176
180
  const transitionRefHolder = useRef(null);
177
- let t12;
178
- if ($[28] === Symbol.for("react.memo_cache_sentinel")) {
179
- t12 = (node) => {
181
+ let t14;
182
+ if ($[29] === Symbol.for("react.memo_cache_sentinel")) {
183
+ t14 = (node) => {
180
184
  overlayScrollRef.current = node;
181
185
  transitionRefHolder.current?.(node);
182
186
  };
183
- $[28] = t12;
184
- } else t12 = $[28];
185
- const setScrollRef = t12;
186
- let t13;
187
- if ($[29] !== ariaLabel || $[30] !== children || $[31] !== comboBoxWidth || $[32] !== compositeFocusProps || $[33] !== disabledKeys || $[34] !== emptyLabel || $[35] !== filter || $[36] !== headingStyles || $[37] !== isDisabled || $[38] !== items || $[39] !== label || $[40] !== listBoxId || $[41] !== listBoxRef || $[42] !== listBoxStyles || $[43] !== listStateRef || $[44] !== maxHeight || $[45] !== maxWidth || $[46] !== mergedPopoverRef || $[47] !== onSelectionChange || $[48] !== optionHighlight || $[49] !== optionStyles || $[50] !== overlayBehaviorProps || $[51] !== overlayPositionProps || $[52] !== overlayStyles || $[53] !== placementDirection || $[54] !== positionStyle || $[55] !== sectionStyles || $[56] !== selectedKey || $[57] !== t) {
188
- t13 = (t14) => {
189
- const { phase, isShown, ref: transitionRef } = t14;
187
+ $[29] = t14;
188
+ } else t14 = $[29];
189
+ const setScrollRef = t14;
190
+ 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;
190
194
  transitionRefHolder.current = transitionRef;
191
195
  return /* @__PURE__ */ jsx(ListBoxPopoverWrapper, {
192
196
  ...mergeProps$1({
@@ -214,7 +218,10 @@ const ListBoxPopover = function ListBoxPopover(props) {
214
218
  disableSelectionToggle: true,
215
219
  id: listBoxId,
216
220
  "aria-label": ariaLabel || (typeof label === "string" ? label : t("listBoxPopover.options", "Options")),
217
- selectedKey,
221
+ selectionMode: selectionMode === "multiple" ? "multiple" : void 0,
222
+ selectedKey: selectionMode === "single" ? selectedKey : void 0,
223
+ selectedKeys: selectionMode === "multiple" ? selectedKeys : void 0,
224
+ isCheckable: selectionMode === "multiple" ? isCheckable : void 0,
218
225
  isDisabled,
219
226
  disabledKeys,
220
227
  shouldUseVirtualFocus: true,
@@ -234,48 +241,51 @@ const ListBoxPopover = function ListBoxPopover(props) {
234
241
  })
235
242
  });
236
243
  };
237
- $[29] = ariaLabel;
238
- $[30] = children;
239
- $[31] = comboBoxWidth;
240
- $[32] = compositeFocusProps;
241
- $[33] = disabledKeys;
242
- $[34] = emptyLabel;
243
- $[35] = filter;
244
- $[36] = headingStyles;
245
- $[37] = isDisabled;
246
- $[38] = items;
247
- $[39] = label;
248
- $[40] = listBoxId;
249
- $[41] = listBoxRef;
250
- $[42] = listBoxStyles;
251
- $[43] = listStateRef;
252
- $[44] = maxHeight;
253
- $[45] = maxWidth;
254
- $[46] = mergedPopoverRef;
255
- $[47] = onSelectionChange;
256
- $[48] = optionHighlight;
257
- $[49] = optionStyles;
258
- $[50] = overlayBehaviorProps;
259
- $[51] = overlayPositionProps;
260
- $[52] = overlayStyles;
261
- $[53] = placementDirection;
262
- $[54] = positionStyle;
263
- $[55] = sectionStyles;
264
- $[56] = selectedKey;
265
- $[57] = t;
266
- $[58] = t13;
267
- } else t13 = $[58];
268
- let t14;
269
- if ($[59] !== isOpen || $[60] !== t13) {
270
- t14 = /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(DisplayTransition, {
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, {
271
281
  isShown: isOpen,
272
- children: t13
282
+ children: t15
273
283
  }) });
274
- $[59] = isOpen;
275
- $[60] = t13;
276
- $[61] = t14;
277
- } else t14 = $[61];
278
- return t14;
284
+ $[63] = isOpen;
285
+ $[64] = t15;
286
+ $[65] = t16;
287
+ } else t16 = $[65];
288
+ return t16;
279
289
  };
280
290
 
281
291
  //#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","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","undefined","mergedPopoverRef","overlayScrollRef","t1","t2","t3","t4","targetRef","overlayRef","scrollRef","placement","offset","overlayProps","overlayPositionProps","t5","style","t6","maxHeight","maxWidth","positionStyle","t7","t8","current","t9","el","menuTriggerEl","closest","setTimeout","t10","shouldCloseOnBlur","isDismissable","shouldCloseOnInteractOutside","overlayBehaviorProps","t11","split","placementDirection","transitionRefHolder","t12","Symbol","for","node","setScrollRef","t13","t14","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 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 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 (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 selectedKey={selectedKey}\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":";;;;;;;;;;;;;AA0EA,MAAM6D,wBAAwB3D,MAAM;CAClC4D,IAAI;CACJC,QAAQ;EACNC,UAAU;EACVC,QAAQ;EACV;CACD,CAAC;AAEF,MAAMC,wBAAwBhE,MAAM;CAClC4D,IAAI;CACJC,QAAQ;EACNI,SAAS;EACTC,UAAU;EACVC,aAAa;EACbC,OAAO;EACPC,QAAQ;EACRC,UAAU;EACVC,MAAM;EACNC,QAAQ;EACRC,QAAQ;EACRC,SAAS;EACTC,QAAQ;EACRC,MAAM;GACJ,IAAI;GACJC,QAAQ;GACT;EACDC,WAAW;EACXC,YACE;EACFC,WAAW;GACT,IAAI;GACJ,mCAAiC;GACjC,oCAAkC;GAClC,4DAA0D;GAC1D,6DAA2D;GAC5D;EACDC,iBAAiB;GACf,IAAI;GACJ,4BAA0B;GAC3B;EACDC,OAAO;GACL,IAAI;GACJ,SAAS;GACV;EACDC,SAAS;GACP,IAAI;GACJ,SAAS;GACV;EAED,sBAAsB;EACxB;CACD,CAAC;AAEF,MAAaC,iBAAiB,SAAAA,eAAAC,OAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAG5B,MAAA,EAAAC,MAAc9E,SAAS;CACvB,MAAA,EAAAM,QAAAC,YAAAE,YAAAE,YAAAC,WAAAC,YAAAC,eAAAC,kBAAAC,eAAAC,WAAAC,eAAAC,eAAAC,cAAAC,iBAAAC,eAAAC,eAAAC,aAAAC,YAAAC,cAAAE,OAAAC,UAAAC,cAAAC,mBAAAE,SAAAC,OAAAC,WAAAC,qBAAAK,QAAAE,MAAAoC,IAAAnC,YAAAC,mBAAAE,mBAiCI4B;CAEJ,MAAAM,mBAAyBxE;CAMzB,MAAAyE,mBAAyBrF,OAA8B,KAAK;CAU/C,MAAAsF,KAACtC,qBAAAtC;CACA,MAAA6E,KAAAH;CAED,MAAAI,KAAA,GAAGzE,UAAS;CAAe,IAAA0E;AAAA,KAAAV,EAAA,OAAA7D,oBAAA6D,EAAA,OAAAtE,UAAAsE,EAAA,OAAA9D,iBAAA8D,EAAA,OAAA/D,cAAA+D,EAAA,OAAAO,MAAAP,EAAA,OAAAQ,MAAAR,EAAA,OAAAS,IAAA;AAJjBC,OAAA;GAAAC,WACVJ;GAAwCK,YACvCJ;GAAuBK,WACxBP;GAAuBQ,WACvBL;GAA2BxE;GAAAP;GAAAqF,QAG9B7E;GAAaC;GAEtB;AAAA6D,IAAA,KAAA7D;AAAA6D,IAAA,KAAAtE;AAAAsE,IAAA,KAAA9D;AAAA8D,IAAA,KAAA/D;AAAA+D,IAAA,KAAAO;AAAAP,IAAA,KAAAQ;AAAAR,IAAA,KAAAS;AAAAT,IAAA,KAAAU;OAAAA,MAAAV,EAAA;CAbD,MAAA,EAAAgB,cAAAC,sBAAAH,WAAA1C,mBAIIjD,mBAAmBuF,GASrB;CAAC,IAAAQ;AAAA,KAAAlB,EAAA,OAAAiB,qBAAAE,OAAA;AAKAD,OAAAD,qBAAoBE,SAApB,EAAgC;AAAAnB,IAAA,KAAAiB,qBAAAE;AAAAnB,IAAA,KAAAkB;OAAAA,MAAAlB,EAAA;CAAjC,MAAAoB,KAACF;CAAkD,IAAAG;CAAA,IAAAC;CAAA,IAAAC;AAAA,KAAAvB,EAAA,QAAAoB,IAAA;AADrD,GAAA,CAAAC,WAAAC,aAAAC,iBACEH;AAAoDpB,IAAA,MAAAoB;AAAApB,IAAA,MAAAqB;AAAArB,IAAA,MAAAsB;AAAAtB,IAAA,MAAAuB;QAAA;AAAAF,cAAArB,EAAA;AAAAsB,aAAAtB,EAAA;AAAAuB,kBAAAvB,EAAA;;CAAA,IAAAwB;CAAA,IAAAC;AAAA,KAAAzB,EAAA,QAAA7B,kBAAA6B,EAAA,QAAA5B,gBAAA;AAG5CoD,aAAA;AACR,OAAIrD,eACFA,gBAAcuD,UAAW,EAAAtD,gBAAH;AACvB,gBACM;AACL,QAAID,eACFA,gBAAcuD,UAAW;;;AAG5BD,OAAA,CAACtD,gBAAgBC,eAAe;AAAA4B,IAAA,MAAA7B;AAAA6B,IAAA,MAAA5B;AAAA4B,IAAA,MAAAwB;AAAAxB,IAAA,MAAAyB;QAAA;AAAAD,OAAAxB,EAAA;AAAAyB,OAAAzB,EAAA;;AATnChF,WAAUwG,IASPC,GAAiC;CAAA,IAAAE;AAAA,KAAA3B,EAAA,QAAA3C,WAAA2C,EAAA,QAAArE,YAAA;AASFgG,QAAAC,OAAA;GAC5B,MAAAC,gBAAsBD,GAAEE,QAAS,yBAAyB;AAC1D,OAAI,CAACD,eAAa;AAChB,QAAID,GAAEE,QAAS,sBAAsB,CAAA,QAAS;AAK9C,QAAIF,GAAEE,QAAS,yBAAyB,EAAA;AACtCC,gBAAW1E,SAAS,EAAE;AAAA,YACf;;AACR,WACM;;AAET,OAAIwE,kBAAkBlG,YAAU+F,QAAS,QAAS;AAAK,UAChD;;AACR1B,IAAA,MAAA3C;AAAA2C,IAAA,MAAArE;AAAAqE,IAAA,MAAA2B;OAAAA,MAAA3B,EAAA;CAAA,IAAAgC;AAAA,KAAAhC,EAAA,QAAAtE,UAAAsE,EAAA,QAAA3C,WAAA2C,EAAA,QAAA2B,IAAA;AArBHK,QAAA;GAAA3E;GAAA4E,mBAEqB;GAAIvG;GAAAwG,eAER;GAAIC,8BACWR;GAiB/B;AAAA3B,IAAA,MAAAtE;AAAAsE,IAAA,MAAA3C;AAAA2C,IAAA,MAAA2B;AAAA3B,IAAA,MAAAgC;OAAAA,OAAAhC,EAAA;CAvBH,MAAA,EAAAgB,cAAAoB,yBAA+ClH,WAC7C8G,KAuBA3B,iBACD;CAAC,IAAAgC;AAAA,KAAArC,EAAA,QAAAhE,aAAAgE,EAAA,QAAAc,WAAA;AAGyBuB,QAAAvB,WAASwB,MAAQ,IAAO,CAAA,MAAxBtG;AAAqCgE,IAAA,MAAAhE;AAAAgE,IAAA,MAAAc;AAAAd,IAAA,MAAAqC;OAAAA,OAAArC,EAAA;CAAhE,MAAAuC,qBAA2BF;CAI3B,MAAAG,sBAA4BvH,OAE1B,KAAK;CAAC,IAAAwH;AAAA,KAAAzC,EAAA,QAAA0C,OAAAC,IAAA,4BAAA,EAAA;AACyBF,SAAAG,SAAA;AAC/BtC,oBAAgBoB,UAAWkB;AAC3BJ,uBAAmBd,UAAWkB,KAAK;;AACpC5C,IAAA,MAAAyC;OAAAA,OAAAzC,EAAA;CAHD,MAAA6C,eAAqBJ;CAGd,IAAAK;AAAA,KAAA9C,EAAA,QAAAzC,aAAAyC,EAAA,QAAA/C,YAAA+C,EAAA,QAAA5D,iBAAA4D,EAAA,QAAAxC,uBAAAwC,EAAA,QAAAlD,gBAAAkD,EAAA,QAAAhC,cAAAgC,EAAA,QAAAnC,UAAAmC,EAAA,QAAArD,iBAAAqD,EAAA,QAAAnD,cAAAmD,EAAA,QAAAhD,SAAAgD,EAAA,QAAA1C,SAAA0C,EAAA,QAAA3D,aAAA2D,EAAA,QAAAjE,cAAAiE,EAAA,QAAAzD,iBAAAyD,EAAA,QAAA9C,gBAAA8C,EAAA,QAAAqB,aAAArB,EAAA,QAAAsB,YAAAtB,EAAA,QAAAK,oBAAAL,EAAA,QAAA7C,qBAAA6C,EAAA,QAAAvD,mBAAAuD,EAAA,QAAAxD,gBAAAwD,EAAA,QAAAoC,wBAAApC,EAAA,QAAAiB,wBAAAjB,EAAA,QAAA1D,iBAAA0D,EAAA,QAAAuC,sBAAAvC,EAAA,QAAAuB,iBAAAvB,EAAA,QAAAtD,iBAAAsD,EAAA,QAAApD,eAAAoD,EAAA,QAAAE,GAAA;AAIF4C,SAAAC,QAAA;GAAC,MAAA,EAAAC,OAAAC,SAAAC,KAAAC,kBAAAJ;AACAP,uBAAmBd,UAAWyB;AAAH,UAEzB,oBAAC;IAAqB,GAChB9H,aACF;KAAA,GAAK4F;KAAoBE,OAASI;KAAe,EACjDa,sBACA5E,oBACD;IACI6C,KAAAA;IACEkB,OAAAA;cAEP,oBAAC;KACMsB,KAAAA;KACWN,kBAAAA;KACJS,cAAAA;KACN,MAAA;MAAAI,MACEH;MAAO1D,QACLyD,UAAU;MACpB;KACQ1G,QAAAA;KACD,OAAA;MAAA,uBACkBF,gBAAA,GAChBA,cAAa,MADGgE;MAEViB;MAAAC;MAGf;eAEA,oBAAC;MACMvF,KAAAA;MACL,wBAAA;MACIM,IAAAA;MAEF,cAAAkB,cACC,OAAOD,UAAU,WAAjBA,QAEG4C,EAAE,0BAA0B,UAAW;MAEhCtD;MACDC;MACEC;MACS,uBAAA;MAChBE;MACCa;MACAtB,QAAAA;MACMC;MACGC;MACFC;MACAC;MACLO,UAAAA;MACJ,OAAA;MACMc;MACOb;MAElBF;OAEL;MACF;KAAwB;;AAE3B+C,IAAA,MAAAzC;AAAAyC,IAAA,MAAA/C;AAAA+C,IAAA,MAAA5D;AAAA4D,IAAA,MAAAxC;AAAAwC,IAAA,MAAAlD;AAAAkD,IAAA,MAAAhC;AAAAgC,IAAA,MAAAnC;AAAAmC,IAAA,MAAArD;AAAAqD,IAAA,MAAAnD;AAAAmD,IAAA,MAAAhD;AAAAgD,IAAA,MAAA1C;AAAA0C,IAAA,MAAA3D;AAAA2D,IAAA,MAAAjE;AAAAiE,IAAA,MAAAzD;AAAAyD,IAAA,MAAA9C;AAAA8C,IAAA,MAAAqB;AAAArB,IAAA,MAAAsB;AAAAtB,IAAA,MAAAK;AAAAL,IAAA,MAAA7C;AAAA6C,IAAA,MAAAvD;AAAAuD,IAAA,MAAAxD;AAAAwD,IAAA,MAAAoC;AAAApC,IAAA,MAAAiB;AAAAjB,IAAA,MAAA1D;AAAA0D,IAAA,MAAAuC;AAAAvC,IAAA,MAAAuB;AAAAvB,IAAA,MAAAtD;AAAAsD,IAAA,MAAApD;AAAAoD,IAAA,MAAAE;AAAAF,IAAA,MAAA8C;OAAAA,OAAA9C,EAAA;CAAA,IAAA+C;AAAA,KAAA/C,EAAA,QAAAtE,UAAAsE,EAAA,QAAA8C,KAAA;AAIEC,QAAA,oBAAC,oBAjEN,oBAAC;GAA2BrH,SAAAA;aACzBoH;IA6DiB,GAGkB;AAAA9C,IAAA,MAAAtE;AAAAsE,IAAA,MAAA8C;AAAA9C,IAAA,MAAA+C;OAAAA,OAAA/C,EAAA;AAAA,QAAjC+C"}
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,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | 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
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | Cube Dev Team */
2
2
  import { c } from "react-compiler-runtime";
3
3
  import { useEffect, useRef } from "react";
4
4
 
@@ -10,19 +10,30 @@ import { useEffect, useRef } from "react";
10
10
  * that clicking an option does not look like a blur of the whole component.
11
11
  *
12
12
  * Focus checks are deferred to the next animation frame to tolerate the
13
- * synchronous focus shuffles React Aria and portals perform on selection.
13
+ * synchronous focus shuffles React Aria and portals perform on selection. Focus
14
+ * that enters and leaves again within that frame still reports both edges, so a
15
+ * fast focus-type-blur sequence (an automated test, a quick Tab through) does
16
+ * not skip the blur.
14
17
  */
15
18
  function useCompositeFocus(t0) {
16
- const $ = c(12);
19
+ const $ = c(15);
17
20
  const { wrapperRef, popoverRef, onFocus, onBlur, isDisabled } = t0;
18
21
  const wasInsideRef = useRef(false);
22
+ const enteredRef = useRef(false);
19
23
  const rafRef = useRef(null);
20
24
  let t1;
21
25
  if ($[0] !== isDisabled || $[1] !== onBlur || $[2] !== onFocus || $[3] !== popoverRef || $[4] !== wrapperRef) {
22
26
  t1 = () => {
27
+ const entered = enteredRef.current;
28
+ enteredRef.current = false;
23
29
  if (isDisabled) return;
24
30
  const activeElement = document.activeElement;
25
31
  const isInside = (wrapperRef.current?.contains(activeElement) ?? false) || (popoverRef.current?.contains(activeElement) ?? false);
32
+ if (!isInside && !wasInsideRef.current && entered) {
33
+ onFocus?.();
34
+ onBlur?.();
35
+ return;
36
+ }
26
37
  if (isInside !== wasInsideRef.current) {
27
38
  wasInsideRef.current = isInside;
28
39
  if (isInside) onFocus?.();
@@ -39,7 +50,7 @@ function useCompositeFocus(t0) {
39
50
  const checkFocus = t1;
40
51
  let t2;
41
52
  if ($[6] !== checkFocus) {
42
- t2 = (e) => {
53
+ t2 = () => {
43
54
  if (rafRef.current !== null) cancelAnimationFrame(rafRef.current);
44
55
  rafRef.current = requestAnimationFrame(() => {
45
56
  rafRef.current = null;
@@ -49,31 +60,42 @@ function useCompositeFocus(t0) {
49
60
  $[6] = checkFocus;
50
61
  $[7] = t2;
51
62
  } else t2 = $[7];
52
- const handleFocusOrBlur = t2;
63
+ const scheduleCheck = t2;
53
64
  let t3;
65
+ if ($[8] !== scheduleCheck) {
66
+ t3 = () => {
67
+ enteredRef.current = true;
68
+ scheduleCheck();
69
+ };
70
+ $[8] = scheduleCheck;
71
+ $[9] = t3;
72
+ } else t3 = $[9];
73
+ const handleFocus = t3;
54
74
  let t4;
55
- if ($[8] === Symbol.for("react.memo_cache_sentinel")) {
56
- t3 = () => () => {
75
+ let t5;
76
+ if ($[10] === Symbol.for("react.memo_cache_sentinel")) {
77
+ t4 = () => () => {
57
78
  if (rafRef.current !== null) cancelAnimationFrame(rafRef.current);
58
79
  };
59
- t4 = [];
60
- $[8] = t3;
61
- $[9] = t4;
80
+ t5 = [];
81
+ $[10] = t4;
82
+ $[11] = t5;
62
83
  } else {
63
- t3 = $[8];
64
- t4 = $[9];
84
+ t4 = $[10];
85
+ t5 = $[11];
65
86
  }
66
- useEffect(t3, t4);
67
- let t5;
68
- if ($[10] !== handleFocusOrBlur) {
69
- t5 = { compositeFocusProps: {
70
- onFocus: handleFocusOrBlur,
71
- onBlur: handleFocusOrBlur
87
+ useEffect(t4, t5);
88
+ let t6;
89
+ if ($[12] !== handleFocus || $[13] !== scheduleCheck) {
90
+ t6 = { compositeFocusProps: {
91
+ onFocus: handleFocus,
92
+ onBlur: scheduleCheck
72
93
  } };
73
- $[10] = handleFocusOrBlur;
74
- $[11] = t5;
75
- } else t5 = $[11];
76
- return t5;
94
+ $[12] = handleFocus;
95
+ $[13] = scheduleCheck;
96
+ $[14] = t6;
97
+ } else t6 = $[14];
98
+ return t6;
77
99
  }
78
100
 
79
101
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"useCompositeFocus.js","names":["React","RefObject","useCallback","useEffect","useRef","UseCompositeFocusProps","wrapperRef","HTMLElement","popoverRef","onFocus","onBlur","isDisabled","UseCompositeFocusReturn","compositeFocusProps","e","FocusEvent","useCompositeFocus","t0","$","_c","wasInsideRef","rafRef","t1","activeElement","document","isInside","current","contains","checkFocus","t2","cancelAnimationFrame","requestAnimationFrame","handleFocusOrBlur","t3","t4","Symbol","for","t5"],"sources":["../../../../src/components/fields/ListBoxPopover/useCompositeFocus.ts"],"sourcesContent":["import React, { RefObject, useCallback, useEffect, useRef } from 'react';\n\nexport interface UseCompositeFocusProps {\n wrapperRef: RefObject<HTMLElement>;\n popoverRef: RefObject<HTMLElement>;\n onFocus?: () => void;\n onBlur?: () => void;\n isDisabled?: boolean;\n}\n\nexport interface UseCompositeFocusReturn {\n compositeFocusProps: {\n onFocus: (e: React.FocusEvent) => void;\n onBlur: (e: React.FocusEvent) => void;\n };\n}\n\n/**\n * Tracks focus across a wrapper element and its (portaled) popover as a single\n * logical focus scope. Fires `onFocus` when focus enters either and `onBlur`\n * when it leaves both — essential for components whose overlay is portaled, so\n * that clicking an option does not look like a blur of the whole component.\n *\n * Focus checks are deferred to the next animation frame to tolerate the\n * synchronous focus shuffles React Aria and portals perform on selection.\n */\nexport function useCompositeFocus({\n wrapperRef,\n popoverRef,\n onFocus,\n onBlur,\n isDisabled,\n}: UseCompositeFocusProps): UseCompositeFocusReturn {\n const wasInsideRef = useRef(false);\n const rafRef = useRef<number | null>(null);\n\n const checkFocus = useCallback(() => {\n if (isDisabled) return;\n\n const activeElement = document.activeElement;\n const isInside =\n (wrapperRef.current?.contains(activeElement) ?? false) ||\n (popoverRef.current?.contains(activeElement) ?? false);\n\n if (isInside !== wasInsideRef.current) {\n wasInsideRef.current = isInside;\n if (isInside) {\n onFocus?.();\n } else {\n onBlur?.();\n }\n }\n }, [wrapperRef, popoverRef, onFocus, onBlur, isDisabled]);\n\n const handleFocusOrBlur = useCallback(\n (e: React.FocusEvent) => {\n // Cancel any pending check\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n\n // Schedule focus check for next frame\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = null;\n checkFocus();\n });\n },\n [checkFocus],\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, []);\n\n return {\n compositeFocusProps: {\n onFocus: handleFocusOrBlur,\n onBlur: handleFocusOrBlur,\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;AA0BA,SAAOgB,kBAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAA2B,MAAA,EAAAb,YAAAE,YAAAC,SAAAC,QAAAC,eAAAM;CAOhC,MAAAG,eAAqBhB,OAAO,MAAM;CAClC,MAAAiB,SAAejB,OAAsB,KAAK;CAAC,IAAAkB;AAAA,KAAAJ,EAAA,OAAAP,cAAAO,EAAA,OAAAR,UAAAQ,EAAA,OAAAT,WAAAS,EAAA,OAAAV,cAAAU,EAAA,OAAAZ,YAAA;AAEZgB,aAAA;AAC7B,OAAIX,WAAU;GAEd,MAAAY,gBAAsBC,SAAQD;GAC9B,MAAAE,YACGnB,WAAUoB,SAAkBC,SAACJ,cAAuB,IAApD,WACAf,WAAUkB,SAAkBC,SAACJ,cAAuB,IAApD;AAEH,OAAIE,aAAaL,aAAYM,SAAQ;AACnCN,iBAAYM,UAAWD;AACvB,QAAIA,SACFhB,YAAW;QAEXC,WAAU;;;AAGfQ,IAAA,KAAAP;AAAAO,IAAA,KAAAR;AAAAQ,IAAA,KAAAT;AAAAS,IAAA,KAAAV;AAAAU,IAAA,KAAAZ;AAAAY,IAAA,KAAAI;OAAAA,MAAAJ,EAAA;CAhBD,MAAAU,aAAmBN;CAgBuC,IAAAO;AAAA,KAAAX,EAAA,OAAAU,YAAA;AAGxDC,QAAAf,MAAA;AAEE,OAAIO,OAAMK,YAAa,KACrBI,sBAAqBT,OAAMK,QAAS;AAItCL,UAAMK,UAAWK,4BAAsB;AACrCV,WAAMK,UAAW;AACjBE,gBAAY;KAFA;;AAIfV,IAAA,KAAAU;AAAAV,IAAA,KAAAW;OAAAA,MAAAX,EAAA;CAZH,MAAAc,oBAA0BH;CAcxB,IAAAI;CAAA,IAAAC;AAAA,KAAAhB,EAAA,OAAAiB,OAAAC,IAAA,4BAAA,EAAA;AAGQH,mBACD;AACL,OAAIZ,OAAMK,YAAa,KACrBI,sBAAqBT,OAAMK,QAAS;;AAGvCQ,OAAA,EAAE;AAAAhB,IAAA,KAAAe;AAAAf,IAAA,KAAAgB;QAAA;AAAAD,OAAAf,EAAA;AAAAgB,OAAAhB,EAAA;;AANLf,WAAU8B,IAMPC,GAAG;CAAA,IAAAG;AAAA,KAAAnB,EAAA,QAAAc,mBAAA;AAECK,OAAA,EAAAxB,qBACgB;GAAAJ,SACVuB;GAAiBtB,QAClBsB;GACV,EACD;AAAAd,IAAA,MAAAc;AAAAd,IAAA,MAAAmB;OAAAA,MAAAnB,EAAA;AAAA,QALMmB"}
1
+ {"version":3,"file":"useCompositeFocus.js","names":["React","RefObject","useCallback","useEffect","useRef","UseCompositeFocusProps","wrapperRef","HTMLElement","popoverRef","onFocus","onBlur","isDisabled","UseCompositeFocusReturn","compositeFocusProps","e","FocusEvent","useCompositeFocus","t0","$","_c","wasInsideRef","enteredRef","rafRef","t1","entered","current","activeElement","document","isInside","contains","checkFocus","t2","cancelAnimationFrame","requestAnimationFrame","scheduleCheck","t3","handleFocus","t4","t5","Symbol","for","t6"],"sources":["../../../../src/components/fields/ListBoxPopover/useCompositeFocus.ts"],"sourcesContent":["import React, { RefObject, useCallback, useEffect, useRef } from 'react';\n\nexport interface UseCompositeFocusProps {\n wrapperRef: RefObject<HTMLElement>;\n popoverRef: RefObject<HTMLElement>;\n onFocus?: () => void;\n onBlur?: () => void;\n isDisabled?: boolean;\n}\n\nexport interface UseCompositeFocusReturn {\n compositeFocusProps: {\n onFocus: (e: React.FocusEvent) => void;\n onBlur: (e: React.FocusEvent) => void;\n };\n}\n\n/**\n * Tracks focus across a wrapper element and its (portaled) popover as a single\n * logical focus scope. Fires `onFocus` when focus enters either and `onBlur`\n * when it leaves both — essential for components whose overlay is portaled, so\n * that clicking an option does not look like a blur of the whole component.\n *\n * Focus checks are deferred to the next animation frame to tolerate the\n * synchronous focus shuffles React Aria and portals perform on selection. Focus\n * that enters and leaves again within that frame still reports both edges, so a\n * fast focus-type-blur sequence (an automated test, a quick Tab through) does\n * not skip the blur.\n */\nexport function useCompositeFocus({\n wrapperRef,\n popoverRef,\n onFocus,\n onBlur,\n isDisabled,\n}: UseCompositeFocusProps): UseCompositeFocusReturn {\n const wasInsideRef = useRef(false);\n const enteredRef = useRef(false);\n const rafRef = useRef<number | null>(null);\n\n const checkFocus = useCallback(() => {\n const entered = enteredRef.current;\n\n enteredRef.current = false;\n\n if (isDisabled) return;\n\n const activeElement = document.activeElement;\n const isInside =\n (wrapperRef.current?.contains(activeElement) ?? false) ||\n (popoverRef.current?.contains(activeElement) ?? false);\n\n if (!isInside && !wasInsideRef.current && entered) {\n onFocus?.();\n onBlur?.();\n\n return;\n }\n\n if (isInside !== wasInsideRef.current) {\n wasInsideRef.current = isInside;\n if (isInside) {\n onFocus?.();\n } else {\n onBlur?.();\n }\n }\n }, [wrapperRef, popoverRef, onFocus, onBlur, isDisabled]);\n\n const scheduleCheck = useCallback(() => {\n // Cancel any pending check\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n\n // Schedule focus check for next frame\n rafRef.current = requestAnimationFrame(() => {\n rafRef.current = null;\n checkFocus();\n });\n }, [checkFocus]);\n\n const handleFocus = useCallback(() => {\n enteredRef.current = true;\n scheduleCheck();\n }, [scheduleCheck]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (rafRef.current !== null) {\n cancelAnimationFrame(rafRef.current);\n }\n };\n }, []);\n\n return {\n compositeFocusProps: {\n onFocus: handleFocus,\n onBlur: scheduleCheck,\n },\n };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;AA6BA,SAAOgB,kBAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,GAAA;CAA2B,MAAA,EAAAb,YAAAE,YAAAC,SAAAC,QAAAC,eAAAM;CAOhC,MAAAG,eAAqBhB,OAAO,MAAM;CAClC,MAAAiB,aAAmBjB,OAAO,MAAM;CAChC,MAAAkB,SAAelB,OAAsB,KAAK;CAAC,IAAAmB;AAAA,KAAAL,EAAA,OAAAP,cAAAO,EAAA,OAAAR,UAAAQ,EAAA,OAAAT,WAAAS,EAAA,OAAAV,cAAAU,EAAA,OAAAZ,YAAA;AAEZiB,aAAA;GAC7B,MAAAC,UAAgBH,WAAUI;AAE1BJ,cAAUI,UAAW;AAErB,OAAId,WAAU;GAEd,MAAAe,gBAAsBC,SAAQD;GAC9B,MAAAE,YACGtB,WAAUmB,SAAkBI,SAACH,cAAuB,IAApD,WACAlB,WAAUiB,SAAkBI,SAACH,cAAuB,IAApD;AAEH,OAAI,CAACE,YAAD,CAAcR,aAAYK,WAA1BD,SAA6C;AAC/Cf,eAAW;AACXC,cAAU;AAAA;;AAKZ,OAAIkB,aAAaR,aAAYK,SAAQ;AACnCL,iBAAYK,UAAWG;AACvB,QAAIA,SACFnB,YAAW;QAEXC,WAAU;;;AAGfQ,IAAA,KAAAP;AAAAO,IAAA,KAAAR;AAAAQ,IAAA,KAAAT;AAAAS,IAAA,KAAAV;AAAAU,IAAA,KAAAZ;AAAAY,IAAA,KAAAK;OAAAA,MAAAL,EAAA;CA3BD,MAAAY,aAAmBP;CA2BuC,IAAAQ;AAAA,KAAAb,EAAA,OAAAY,YAAA;AAExBC,aAAA;AAEhC,OAAIT,OAAMG,YAAa,KACrBO,sBAAqBV,OAAMG,QAAS;AAItCH,UAAMG,UAAWQ,4BAAsB;AACrCX,WAAMG,UAAW;AACjBK,gBAAY;KAFA;;AAIfZ,IAAA,KAAAY;AAAAZ,IAAA,KAAAa;OAAAA,MAAAb,EAAA;CAXD,MAAAgB,gBAAsBH;CAWL,IAAAI;AAAA,KAAAjB,EAAA,OAAAgB,eAAA;AAEeC,aAAA;AAC9Bd,cAAUI,UAAW;AACrBS,kBAAe;;AAChBhB,IAAA,KAAAgB;AAAAhB,IAAA,KAAAiB;OAAAA,MAAAjB,EAAA;CAHD,MAAAkB,cAAoBD;CAGA,IAAAE;CAAA,IAAAC;AAAA,KAAApB,EAAA,QAAAqB,OAAAC,IAAA,4BAAA,EAAA;AAGVH,mBACD;AACL,OAAIf,OAAMG,YAAa,KACrBO,sBAAqBV,OAAMG,QAAS;;AAGvCa,OAAA,EAAE;AAAApB,IAAA,MAAAmB;AAAAnB,IAAA,MAAAoB;QAAA;AAAAD,OAAAnB,EAAA;AAAAoB,OAAApB,EAAA;;AANLf,WAAUkC,IAMPC,GAAG;CAAA,IAAAG;AAAA,KAAAvB,EAAA,QAAAkB,eAAAlB,EAAA,QAAAgB,eAAA;AAECO,OAAA,EAAA5B,qBACgB;GAAAJ,SACV2B;GAAW1B,QACZwB;GACV,EACD;AAAAhB,IAAA,MAAAkB;AAAAlB,IAAA,MAAAgB;AAAAhB,IAAA,MAAAuB;OAAAA,MAAAvB,EAAA;AAAA,QALMuB"}
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | Cube Dev Team */
2
2
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
3
3
  import { castNullableNumberValue } from "../../../utils/react/nullableValue.js";
4
4
  import { useFieldProps } from "../../form/Form/use-field/use-field-props.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | Cube Dev Team */
2
2
  import { useI18n } from "../../../i18n/useI18n.js";
3
3
  import { DirectionIcon } from "../../../icons/DirectionIcon.js";
4
4
  import { Button } from "../../actions/index.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | Cube Dev Team */
2
2
  import { chain } from "../../../utils/react/chain.js";
3
3
  import { mergeProps as mergeProps$1 } from "../../../utils/react/mergeProps.js";
4
4
  import { useBufferedValue } from "../../../utils/react/useBufferedValue.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useEvent } from "../../../_internal/hooks/use-event.js";
4
4
  import { _Text } from "../../content/Text.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | 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 { useFocus as useFocus$1 } from "../../../utils/react/interactions.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | 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 { castNullableStringValue } from "../../../utils/react/nullableValue.js";
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | Cube Dev Team */
2
2
  import { createContext, useContext } from "react";
3
3
 
4
4
  //#region src/components/fields/RadioGroup/context.ts
@@ -1,4 +1,4 @@
1
- /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-bada6bd | Cube Dev Team */
1
+ /** @license MIT | @cube-dev/ui-kit v0.0.0-canary-09a7efe | Cube Dev Team */
2
2
  import { extractStyles } from "../../../utils/styles.js";
3
3
  import { useCombinedRefs } from "../../../utils/react/useCombinedRefs.js";
4
4
  import { usePopoverSync } from "../../../utils/react/usePopoverSync.js";
@@ -15,6 +15,7 @@ import { getValidationMods } from "../../form/validation/resolve-validation-prop
15
15
  import { useValidationProps } from "../../form/validation/use-validation-props.js";
16
16
  import { getValidationIcon } from "../../form/validation/ValidationIndicator.js";
17
17
  import { wrapWithField } from "../../form/wrapper.js";
18
+ import { getListBoxOptionId } from "../ListBox/optionId.js";
18
19
  import { DEFAULT_INPUT_STYLES, INPUT_WRAPPER_STYLES } from "../TextInput/TextInputBase.js";
19
20
  import { SearchIcon } from "../../../icons/SearchIcon.js";
20
21
  import { ListBoxPopover } from "../ListBoxPopover/ListBoxPopover.js";
@@ -96,7 +97,7 @@ const SearchComboBoxInput = forwardRef(function SearchComboBoxInput({ qa, inputR
96
97
  "aria-expanded": isExpanded,
97
98
  "aria-haspopup": "listbox",
98
99
  "aria-controls": isExpanded ? `SearchComboBoxListBox-${searchComboBoxId}` : void 0,
99
- "aria-activedescendant": isExpanded && listStateRef.current?.selectionManager.focusedKey != null ? `ListBoxItem-${listStateRef.current?.selectionManager.focusedKey}` : void 0
100
+ "aria-activedescendant": isExpanded && listStateRef.current?.selectionManager.focusedKey != null ? getListBoxOptionId(`SearchComboBoxListBox-${searchComboBoxId}`, listStateRef.current.selectionManager.focusedKey) : void 0
100
101
  });
101
102
  });
102
103
  const SearchComboBox = forwardRef(function SearchComboBox(props, ref) {