@salt-ds/lab 1.0.0-alpha.74 → 1.0.0-alpha.75

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 (347) hide show
  1. package/CHANGELOG.md +17 -0
  2. package/css/salt-lab.css +7 -23
  3. package/dist-cjs/app-header/AppHeader.js +5 -1
  4. package/dist-cjs/app-header/AppHeader.js.map +1 -1
  5. package/dist-cjs/breadcrumbs/Breadcrumb.js.map +1 -1
  6. package/dist-cjs/breadcrumbs/Breadcrumbs.js +11 -2
  7. package/dist-cjs/breadcrumbs/Breadcrumbs.js.map +1 -1
  8. package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js +3 -6
  9. package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  10. package/dist-cjs/button-bar/ButtonBar.js +1 -1
  11. package/dist-cjs/button-bar/ButtonBar.js.map +1 -1
  12. package/dist-cjs/button-bar/internal/DescendantContext.js.map +1 -1
  13. package/dist-cjs/calendar/useCalendarSelection.js +2 -2
  14. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
  15. package/dist-cjs/cascading-menu/CascadingMenu.js +19 -13
  16. package/dist-cjs/cascading-menu/CascadingMenu.js.map +1 -1
  17. package/dist-cjs/cascading-menu/CascadingMenuItem.js +2 -4
  18. package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
  19. package/dist-cjs/cascading-menu/CascadingMenuList.js +1 -2
  20. package/dist-cjs/cascading-menu/CascadingMenuList.js.map +1 -1
  21. package/dist-cjs/cascading-menu/internal/useMenuTriggerHandlers.js +4 -1
  22. package/dist-cjs/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  23. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js +1 -1
  24. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  25. package/dist-cjs/cascading-menu/internal/useRefsManager.js +3 -1
  26. package/dist-cjs/cascading-menu/internal/useRefsManager.js.map +1 -1
  27. package/dist-cjs/collapsible/CollapsibleTrigger.js +1 -2
  28. package/dist-cjs/collapsible/CollapsibleTrigger.js.map +1 -1
  29. package/dist-cjs/color-chooser/AlphaInputField.js +1 -1
  30. package/dist-cjs/color-chooser/AlphaInputField.js.map +1 -1
  31. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  32. package/dist-cjs/color-chooser/DictTabs.js +1 -1
  33. package/dist-cjs/color-chooser/DictTabs.js.map +1 -1
  34. package/dist-cjs/color-chooser/RGBAInputField.js +2 -2
  35. package/dist-cjs/color-chooser/RGBAInputField.js.map +1 -1
  36. package/dist-cjs/combo-box/useCombobox.js.map +1 -1
  37. package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js +1 -1
  38. package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  39. package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js +1 -2
  40. package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  41. package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js +0 -4
  42. package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  43. package/dist-cjs/combo-box-deprecated/internal/useComboBox.js +4 -1
  44. package/dist-cjs/combo-box-deprecated/internal/useComboBox.js.map +1 -1
  45. package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js +7 -2
  46. package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  47. package/dist-cjs/common-hooks/useAutoSizer.js +0 -9
  48. package/dist-cjs/common-hooks/useAutoSizer.js.map +1 -1
  49. package/dist-cjs/common-hooks/useCollapsibleGroups.js +37 -49
  50. package/dist-cjs/common-hooks/useCollapsibleGroups.js.map +1 -1
  51. package/dist-cjs/common-hooks/useCollectionItems.js +6 -11
  52. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  53. package/dist-cjs/common-hooks/useKeyboardNavigationPanel.js +7 -7
  54. package/dist-cjs/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  55. package/dist-cjs/common-hooks/useSelection.js +1 -1
  56. package/dist-cjs/common-hooks/useSelection.js.map +1 -1
  57. package/dist-cjs/common-hooks/useTypeahead.js +2 -2
  58. package/dist-cjs/common-hooks/useTypeahead.js.map +1 -1
  59. package/dist-cjs/common-hooks/useViewportTracking.js +1 -1
  60. package/dist-cjs/common-hooks/useViewportTracking.js.map +1 -1
  61. package/dist-cjs/common-hooks/utils/collection-item-utils.js +1 -1
  62. package/dist-cjs/common-hooks/utils/collection-item-utils.js.map +1 -1
  63. package/dist-cjs/contact-details/ContactAction.js +1 -0
  64. package/dist-cjs/contact-details/ContactAction.js.map +1 -1
  65. package/dist-cjs/contact-details/ContactSecondaryInfo.js +1 -1
  66. package/dist-cjs/contact-details/ContactSecondaryInfo.js.map +1 -1
  67. package/dist-cjs/contact-details/internal/ContactDetailsContext.js +2 -2
  68. package/dist-cjs/contact-details/internal/ContactDetailsContext.js.map +1 -1
  69. package/dist-cjs/contact-details/internal/FavoriteToggleWithTooltip.js +10 -1
  70. package/dist-cjs/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
  71. package/dist-cjs/content-status/ContentStatus.js.map +1 -1
  72. package/dist-cjs/content-status/internal/StatusIndicator.js.map +1 -1
  73. package/dist-cjs/date-input/DateInput.css.js +1 -1
  74. package/dist-cjs/date-picker/useFocusOut.js +1 -1
  75. package/dist-cjs/date-picker/useFocusOut.js.map +1 -1
  76. package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
  77. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  78. package/dist-cjs/input-legacy/InputLegacy.css.js +1 -1
  79. package/dist-cjs/list/List.js +1 -1
  80. package/dist-cjs/list/List.js.map +1 -1
  81. package/dist-cjs/list/ListItem.css.js +1 -1
  82. package/dist-cjs/list/ListItem.js +2 -1
  83. package/dist-cjs/list/ListItem.js.map +1 -1
  84. package/dist-cjs/list/keyset.js.map +1 -1
  85. package/dist-cjs/list/useList.js +1 -3
  86. package/dist-cjs/list/useList.js.map +1 -1
  87. package/dist-cjs/list/useListHeight.js +3 -3
  88. package/dist-cjs/list/useListHeight.js.map +1 -1
  89. package/dist-cjs/list-deprecated/List.js +4 -1
  90. package/dist-cjs/list-deprecated/List.js.map +1 -1
  91. package/dist-cjs/list-deprecated/ListBase.js +18 -17
  92. package/dist-cjs/list-deprecated/ListBase.js.map +1 -1
  93. package/dist-cjs/list-deprecated/ListItem.js.map +1 -1
  94. package/dist-cjs/list-deprecated/ListItemBase.js +1 -0
  95. package/dist-cjs/list-deprecated/ListItemBase.js.map +1 -1
  96. package/dist-cjs/list-deprecated/internal/helpers.js.map +1 -1
  97. package/dist-cjs/list-deprecated/internal/scrollIntoView.js +2 -2
  98. package/dist-cjs/list-deprecated/internal/scrollIntoView.js.map +1 -1
  99. package/dist-cjs/list-deprecated/internal/useListAutoSizer.js.map +1 -1
  100. package/dist-cjs/list-deprecated/itemToString.js.map +1 -1
  101. package/dist-cjs/list-deprecated/useList.js +3 -10
  102. package/dist-cjs/list-deprecated/useList.js.map +1 -1
  103. package/dist-cjs/list-deprecated/useListItem.js.map +1 -1
  104. package/dist-cjs/list-next/ListNext.js.map +1 -1
  105. package/dist-cjs/metric/MetricContent.js +1 -0
  106. package/dist-cjs/metric/MetricContent.js.map +1 -1
  107. package/dist-cjs/number-input/NumberInput.css.js +1 -1
  108. package/dist-cjs/number-input/internal/utils.js +1 -1
  109. package/dist-cjs/number-input/internal/utils.js.map +1 -1
  110. package/dist-cjs/query-input/QueryInput.js +10 -10
  111. package/dist-cjs/query-input/QueryInput.js.map +1 -1
  112. package/dist-cjs/query-input/internal/QueryInputBody.js +1 -1
  113. package/dist-cjs/query-input/internal/QueryInputBody.js.map +1 -1
  114. package/dist-cjs/query-input/internal/SearchList.js +1 -1
  115. package/dist-cjs/query-input/internal/SearchList.js.map +1 -1
  116. package/dist-cjs/query-input/internal/usePopperStatus.js +2 -2
  117. package/dist-cjs/query-input/internal/usePopperStatus.js.map +1 -1
  118. package/dist-cjs/query-input/useQueryInput.js +6 -6
  119. package/dist-cjs/query-input/useQueryInput.js.map +1 -1
  120. package/dist-cjs/responsive/OverflowReducer.js +0 -2
  121. package/dist-cjs/responsive/OverflowReducer.js.map +1 -1
  122. package/dist-cjs/responsive/overflowUtils.js +6 -3
  123. package/dist-cjs/responsive/overflowUtils.js.map +1 -1
  124. package/dist-cjs/responsive/useDynamicCollapse.js +6 -3
  125. package/dist-cjs/responsive/useDynamicCollapse.js.map +1 -1
  126. package/dist-cjs/responsive/useOverflow.js +2 -2
  127. package/dist-cjs/responsive/useOverflow.js.map +1 -1
  128. package/dist-cjs/responsive/useOverflowCollectionItems.js +1 -1
  129. package/dist-cjs/responsive/useOverflowCollectionItems.js.map +1 -1
  130. package/dist-cjs/responsive/useOverflowLayout.js +1 -1
  131. package/dist-cjs/responsive/useOverflowLayout.js.map +1 -1
  132. package/dist-cjs/responsive/useReclaimSpace.js +1 -1
  133. package/dist-cjs/responsive/useReclaimSpace.js.map +1 -1
  134. package/dist-cjs/responsive/useResizeObserver.js +7 -2
  135. package/dist-cjs/responsive/useResizeObserver.js.map +1 -1
  136. package/dist-cjs/search-input/SearchInput.js.map +1 -1
  137. package/dist-cjs/table/TH.js +1 -1
  138. package/dist-cjs/table/TH.js.map +1 -1
  139. package/dist-cjs/table/TR.js +1 -1
  140. package/dist-cjs/table/TR.js.map +1 -1
  141. package/dist-cjs/tabs/TabActivationIndicator.css.js +1 -1
  142. package/dist-cjs/tabs/Tabs.js +0 -8
  143. package/dist-cjs/tabs/Tabs.js.map +1 -1
  144. package/dist-cjs/tabs/drag-drop/useDragSpacers.js +6 -7
  145. package/dist-cjs/tabs/drag-drop/useDragSpacers.js.map +1 -1
  146. package/dist-cjs/tabs/useActivationIndicator.js.map +1 -1
  147. package/dist-cjs/tabs-next/TabNextTrigger.js +2 -1
  148. package/dist-cjs/tabs-next/TabNextTrigger.js.map +1 -1
  149. package/dist-cjs/tabs-next/hooks/useOverflow.js +3 -5
  150. package/dist-cjs/tabs-next/hooks/useOverflow.js.map +1 -1
  151. package/dist-cjs/tokenized-input/useTokenizedInput.js +5 -5
  152. package/dist-cjs/tokenized-input/useTokenizedInput.js.map +1 -1
  153. package/dist-cjs/tokenized-input-next/TokenizedInputNext.css.js +1 -1
  154. package/dist-cjs/tree/Tree.js.map +1 -1
  155. package/dist-cjs/vertical-navigation/VerticalNavigation.css.js +1 -1
  156. package/dist-cjs/vertical-navigation/VerticalNavigation.js +4 -4
  157. package/dist-cjs/vertical-navigation/VerticalNavigation.js.map +1 -1
  158. package/dist-cjs/vertical-navigation/VerticalNavigationItem.js +1 -1
  159. package/dist-cjs/vertical-navigation/VerticalNavigationItem.js.map +1 -1
  160. package/dist-es/app-header/AppHeader.js +5 -1
  161. package/dist-es/app-header/AppHeader.js.map +1 -1
  162. package/dist-es/breadcrumbs/Breadcrumb.js.map +1 -1
  163. package/dist-es/breadcrumbs/Breadcrumbs.js +11 -2
  164. package/dist-es/breadcrumbs/Breadcrumbs.js.map +1 -1
  165. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js +3 -6
  166. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  167. package/dist-es/button-bar/ButtonBar.js +1 -1
  168. package/dist-es/button-bar/ButtonBar.js.map +1 -1
  169. package/dist-es/button-bar/internal/DescendantContext.js.map +1 -1
  170. package/dist-es/calendar/useCalendarSelection.js +2 -2
  171. package/dist-es/calendar/useCalendarSelection.js.map +1 -1
  172. package/dist-es/cascading-menu/CascadingMenu.js +19 -13
  173. package/dist-es/cascading-menu/CascadingMenu.js.map +1 -1
  174. package/dist-es/cascading-menu/CascadingMenuItem.js +2 -4
  175. package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
  176. package/dist-es/cascading-menu/CascadingMenuList.js +1 -2
  177. package/dist-es/cascading-menu/CascadingMenuList.js.map +1 -1
  178. package/dist-es/cascading-menu/internal/useMenuTriggerHandlers.js +4 -1
  179. package/dist-es/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  180. package/dist-es/cascading-menu/internal/useMouseHandlers.js +1 -1
  181. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  182. package/dist-es/cascading-menu/internal/useRefsManager.js +3 -1
  183. package/dist-es/cascading-menu/internal/useRefsManager.js.map +1 -1
  184. package/dist-es/collapsible/CollapsibleTrigger.js +1 -2
  185. package/dist-es/collapsible/CollapsibleTrigger.js.map +1 -1
  186. package/dist-es/color-chooser/AlphaInputField.js +1 -1
  187. package/dist-es/color-chooser/AlphaInputField.js.map +1 -1
  188. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  189. package/dist-es/color-chooser/DictTabs.js +1 -1
  190. package/dist-es/color-chooser/DictTabs.js.map +1 -1
  191. package/dist-es/color-chooser/RGBAInputField.js +2 -2
  192. package/dist-es/color-chooser/RGBAInputField.js.map +1 -1
  193. package/dist-es/combo-box/useCombobox.js.map +1 -1
  194. package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js +1 -1
  195. package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  196. package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js +1 -2
  197. package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  198. package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js +1 -5
  199. package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  200. package/dist-es/combo-box-deprecated/internal/useComboBox.js +4 -1
  201. package/dist-es/combo-box-deprecated/internal/useComboBox.js.map +1 -1
  202. package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js +7 -2
  203. package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  204. package/dist-es/common-hooks/useAutoSizer.js +0 -9
  205. package/dist-es/common-hooks/useAutoSizer.js.map +1 -1
  206. package/dist-es/common-hooks/useCollapsibleGroups.js +38 -50
  207. package/dist-es/common-hooks/useCollapsibleGroups.js.map +1 -1
  208. package/dist-es/common-hooks/useCollectionItems.js +6 -11
  209. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  210. package/dist-es/common-hooks/useKeyboardNavigationPanel.js +8 -8
  211. package/dist-es/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  212. package/dist-es/common-hooks/useSelection.js +1 -1
  213. package/dist-es/common-hooks/useSelection.js.map +1 -1
  214. package/dist-es/common-hooks/useTypeahead.js +2 -2
  215. package/dist-es/common-hooks/useTypeahead.js.map +1 -1
  216. package/dist-es/common-hooks/useViewportTracking.js +1 -1
  217. package/dist-es/common-hooks/useViewportTracking.js.map +1 -1
  218. package/dist-es/common-hooks/utils/collection-item-utils.js +1 -1
  219. package/dist-es/common-hooks/utils/collection-item-utils.js.map +1 -1
  220. package/dist-es/contact-details/ContactAction.js +1 -0
  221. package/dist-es/contact-details/ContactAction.js.map +1 -1
  222. package/dist-es/contact-details/ContactSecondaryInfo.js +1 -1
  223. package/dist-es/contact-details/ContactSecondaryInfo.js.map +1 -1
  224. package/dist-es/contact-details/internal/ContactDetailsContext.js +2 -2
  225. package/dist-es/contact-details/internal/ContactDetailsContext.js.map +1 -1
  226. package/dist-es/contact-details/internal/FavoriteToggleWithTooltip.js +10 -1
  227. package/dist-es/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
  228. package/dist-es/content-status/ContentStatus.js.map +1 -1
  229. package/dist-es/content-status/internal/StatusIndicator.js.map +1 -1
  230. package/dist-es/date-input/DateInput.css.js +1 -1
  231. package/dist-es/date-picker/useFocusOut.js +1 -1
  232. package/dist-es/date-picker/useFocusOut.js.map +1 -1
  233. package/dist-es/dropdown/DropdownButton.js.map +1 -1
  234. package/dist-es/dropdown/useDropdown.js.map +1 -1
  235. package/dist-es/input-legacy/InputLegacy.css.js +1 -1
  236. package/dist-es/list/List.js +2 -2
  237. package/dist-es/list/List.js.map +1 -1
  238. package/dist-es/list/ListItem.css.js +1 -1
  239. package/dist-es/list/ListItem.js +2 -1
  240. package/dist-es/list/ListItem.js.map +1 -1
  241. package/dist-es/list/keyset.js.map +1 -1
  242. package/dist-es/list/useList.js +1 -3
  243. package/dist-es/list/useList.js.map +1 -1
  244. package/dist-es/list/useListHeight.js +3 -3
  245. package/dist-es/list/useListHeight.js.map +1 -1
  246. package/dist-es/list-deprecated/List.js +4 -1
  247. package/dist-es/list-deprecated/List.js.map +1 -1
  248. package/dist-es/list-deprecated/ListBase.js +19 -18
  249. package/dist-es/list-deprecated/ListBase.js.map +1 -1
  250. package/dist-es/list-deprecated/ListItem.js.map +1 -1
  251. package/dist-es/list-deprecated/ListItemBase.js +1 -0
  252. package/dist-es/list-deprecated/ListItemBase.js.map +1 -1
  253. package/dist-es/list-deprecated/internal/helpers.js.map +1 -1
  254. package/dist-es/list-deprecated/internal/scrollIntoView.js +2 -2
  255. package/dist-es/list-deprecated/internal/scrollIntoView.js.map +1 -1
  256. package/dist-es/list-deprecated/internal/useListAutoSizer.js.map +1 -1
  257. package/dist-es/list-deprecated/itemToString.js.map +1 -1
  258. package/dist-es/list-deprecated/useList.js +3 -10
  259. package/dist-es/list-deprecated/useList.js.map +1 -1
  260. package/dist-es/list-deprecated/useListItem.js.map +1 -1
  261. package/dist-es/list-next/ListNext.js.map +1 -1
  262. package/dist-es/metric/MetricContent.js +1 -0
  263. package/dist-es/metric/MetricContent.js.map +1 -1
  264. package/dist-es/number-input/NumberInput.css.js +1 -1
  265. package/dist-es/number-input/internal/utils.js +1 -1
  266. package/dist-es/number-input/internal/utils.js.map +1 -1
  267. package/dist-es/query-input/QueryInput.js +10 -10
  268. package/dist-es/query-input/QueryInput.js.map +1 -1
  269. package/dist-es/query-input/internal/QueryInputBody.js +1 -1
  270. package/dist-es/query-input/internal/QueryInputBody.js.map +1 -1
  271. package/dist-es/query-input/internal/SearchList.js +1 -1
  272. package/dist-es/query-input/internal/SearchList.js.map +1 -1
  273. package/dist-es/query-input/internal/usePopperStatus.js +2 -2
  274. package/dist-es/query-input/internal/usePopperStatus.js.map +1 -1
  275. package/dist-es/query-input/useQueryInput.js +6 -6
  276. package/dist-es/query-input/useQueryInput.js.map +1 -1
  277. package/dist-es/responsive/OverflowReducer.js +0 -2
  278. package/dist-es/responsive/OverflowReducer.js.map +1 -1
  279. package/dist-es/responsive/overflowUtils.js +6 -3
  280. package/dist-es/responsive/overflowUtils.js.map +1 -1
  281. package/dist-es/responsive/useDynamicCollapse.js +6 -3
  282. package/dist-es/responsive/useDynamicCollapse.js.map +1 -1
  283. package/dist-es/responsive/useOverflow.js +2 -2
  284. package/dist-es/responsive/useOverflow.js.map +1 -1
  285. package/dist-es/responsive/useOverflowCollectionItems.js +1 -1
  286. package/dist-es/responsive/useOverflowCollectionItems.js.map +1 -1
  287. package/dist-es/responsive/useOverflowLayout.js +1 -1
  288. package/dist-es/responsive/useOverflowLayout.js.map +1 -1
  289. package/dist-es/responsive/useReclaimSpace.js +1 -1
  290. package/dist-es/responsive/useReclaimSpace.js.map +1 -1
  291. package/dist-es/responsive/useResizeObserver.js +7 -2
  292. package/dist-es/responsive/useResizeObserver.js.map +1 -1
  293. package/dist-es/search-input/SearchInput.js.map +1 -1
  294. package/dist-es/table/TH.js +1 -1
  295. package/dist-es/table/TH.js.map +1 -1
  296. package/dist-es/table/TR.js +1 -1
  297. package/dist-es/table/TR.js.map +1 -1
  298. package/dist-es/tabs/TabActivationIndicator.css.js +1 -1
  299. package/dist-es/tabs/Tabs.js +1 -9
  300. package/dist-es/tabs/Tabs.js.map +1 -1
  301. package/dist-es/tabs/drag-drop/useDragSpacers.js +6 -7
  302. package/dist-es/tabs/drag-drop/useDragSpacers.js.map +1 -1
  303. package/dist-es/tabs/useActivationIndicator.js.map +1 -1
  304. package/dist-es/tabs-next/TabNextTrigger.js +2 -1
  305. package/dist-es/tabs-next/TabNextTrigger.js.map +1 -1
  306. package/dist-es/tabs-next/hooks/useOverflow.js +4 -6
  307. package/dist-es/tabs-next/hooks/useOverflow.js.map +1 -1
  308. package/dist-es/tokenized-input/useTokenizedInput.js +5 -5
  309. package/dist-es/tokenized-input/useTokenizedInput.js.map +1 -1
  310. package/dist-es/tokenized-input-next/TokenizedInputNext.css.js +1 -1
  311. package/dist-es/tree/Tree.js.map +1 -1
  312. package/dist-es/vertical-navigation/VerticalNavigation.css.js +1 -1
  313. package/dist-es/vertical-navigation/VerticalNavigation.js +4 -4
  314. package/dist-es/vertical-navigation/VerticalNavigation.js.map +1 -1
  315. package/dist-es/vertical-navigation/VerticalNavigationItem.js +1 -1
  316. package/dist-es/vertical-navigation/VerticalNavigationItem.js.map +1 -1
  317. package/dist-types/breadcrumbs/Breadcrumb.d.ts +2 -2
  318. package/dist-types/breadcrumbs/Breadcrumbs.d.ts +2 -2
  319. package/dist-types/cascading-menu/CascadingMenuList.d.ts +3 -1
  320. package/dist-types/cascading-menu/CascadingMenuProps.d.ts +1 -1
  321. package/dist-types/cascading-menu/internal/useMenuTriggerHandlers.d.ts +3 -2
  322. package/dist-types/collapsible/CollapsibleTrigger.d.ts +1 -1
  323. package/dist-types/combo-box-deprecated/internal/useComboBox.d.ts +5 -5
  324. package/dist-types/combo-box-deprecated/internal/useMultiSelectComboBox.d.ts +7 -7
  325. package/dist-types/common-hooks/useAutoSizer.d.ts +1 -1
  326. package/dist-types/common-hooks/useCollapsibleGroups.d.ts +2 -2
  327. package/dist-types/common-hooks/useCollectionItems.d.ts +1 -1
  328. package/dist-types/common-hooks/useSelection.d.ts +1 -1
  329. package/dist-types/content-status/ContentStatus.d.ts +1 -1
  330. package/dist-types/dropdown/DropdownButton.d.ts +1 -1
  331. package/dist-types/dropdown/dropdownTypes.d.ts +2 -2
  332. package/dist-types/dropdown/useDropdown.d.ts +1 -1
  333. package/dist-types/list/useListHeight.d.ts +1 -1
  334. package/dist-types/list-deprecated/ListBase.d.ts +4 -8
  335. package/dist-types/list-deprecated/ListProps.d.ts +7 -6
  336. package/dist-types/list-deprecated/internal/helpers.d.ts +3 -2
  337. package/dist-types/list-deprecated/internal/useListAutoSizer.d.ts +2 -7
  338. package/dist-types/list-deprecated/itemToString.d.ts +2 -2
  339. package/dist-types/list-deprecated/useList.d.ts +1 -1
  340. package/dist-types/metric/internal/helpers.d.ts +1 -1
  341. package/dist-types/query-input/internal/usePopperStatus.d.ts +3 -3
  342. package/dist-types/responsive/overflowTypes.d.ts +1 -1
  343. package/dist-types/responsive/overflowUtils.d.ts +1 -1
  344. package/dist-types/responsive/useReclaimSpace.d.ts +1 -1
  345. package/dist-types/search-input/SearchInput.d.ts +1 -1
  346. package/dist-types/vertical-navigation/VerticalNavigation.d.ts +2 -2
  347. package/package.json +3 -6
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../src/number-input/internal/utils.ts"],"sourcesContent":["// The input should only accept numbers, decimal points, and plus/minus symbols\nexport const isAllowedNonNumeric = (inputCharacter: number | string) => {\n if (typeof inputCharacter === \"number\") return;\n return (\n (\"-+\".includes(inputCharacter) && inputCharacter.length === 1) ||\n inputCharacter === \"\"\n );\n};\n\nexport const toFloat = (inputValue: number | string) => {\n // Plus, minus, and empty characters are treated as 0\n if (isAllowedNonNumeric(inputValue)) return 0;\n return Number.parseFloat(inputValue.toString());\n};\n\nexport const isValidNumber = (num: string | number) => {\n if (typeof num === \"number\") {\n return !Number.isNaN(num);\n }\n\n // Empty\n if (!num) {\n return false;\n }\n\n return (\n // Normal type: 11.28\n /^\\s*-?\\d+(\\.\\d+)?\\s*$/.test(num) ||\n // Pre-number: 1.\n /^\\s*-?\\d+\\.\\s*$/.test(num) ||\n // Post-number: .1\n /^\\s*-?\\.\\d+\\s*$/.test(num)\n );\n};\n\nexport const sanitizeInput = (value: string | number) => {\n if (typeof value === \"number\") return value;\n let sanitizedInput = value.replace(/[^0-9.+-]/g, \"\");\n sanitizedInput = sanitizedInput.replace(\n /^([+-]?)(.*)$/,\n (match, sign, rest) => {\n return sign + rest.replace(/[+-]/g, \"\");\n },\n );\n const parts = sanitizedInput.split(\".\");\n if (parts.length > 2) {\n sanitizedInput = `${parts[0]}.${parts.slice(1).join(\"\")}`;\n }\n\n return sanitizedInput;\n};\n\nexport const isOutOfRange = (\n value: number | string | undefined,\n min: number,\n max: number,\n) => {\n if (value === undefined) return true;\n const floatValue = toFloat(value);\n return floatValue > max || floatValue < min;\n};\n\nexport const clampToRange = (min: number, max: number, value: number) => {\n if (value < min) return min;\n if (value > max) return max;\n return value;\n};\n\nconst isExponential = (number: string | number) => {\n const str = String(number);\n\n return !Number.isNaN(Number(str)) && str.includes(\"e\");\n};\n\nexport const getNumberPrecision = (number: string | number) => {\n const numStr: string = String(sanitizeInput(number));\n\n if (isExponential(number)) {\n let precision = Number(numStr.slice(numStr.indexOf(\"e-\") + 2));\n\n const decimalMatch = numStr.match(/\\.(\\d+)/);\n if (decimalMatch?.[1]) {\n precision += decimalMatch[1].length;\n }\n return precision;\n }\n\n return numStr.includes(\".\") && isValidNumber(numStr)\n ? numStr.length - numStr.indexOf(\".\") - 1\n : 0;\n};\n\nexport const isEmpty = (value: number | string) => {\n return value === \"\";\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sources":["../src/number-input/internal/utils.ts"],"sourcesContent":["// The input should only accept numbers, decimal points, and plus/minus symbols\nexport const isAllowedNonNumeric = (inputCharacter: number | string) => {\n if (typeof inputCharacter === \"number\") return;\n return (\n (\"-+\".includes(inputCharacter) && inputCharacter.length === 1) ||\n inputCharacter === \"\"\n );\n};\n\nexport const toFloat = (inputValue: number | string) => {\n // Plus, minus, and empty characters are treated as 0\n if (isAllowedNonNumeric(inputValue)) return 0;\n return Number.parseFloat(inputValue.toString());\n};\n\nexport const isValidNumber = (num: string | number) => {\n if (typeof num === \"number\") {\n return !Number.isNaN(num);\n }\n\n // Empty\n if (!num) {\n return false;\n }\n\n return (\n // Normal type: 11.28\n /^\\s*-?\\d+(\\.\\d+)?\\s*$/.test(num) ||\n // Pre-number: 1.\n /^\\s*-?\\d+\\.\\s*$/.test(num) ||\n // Post-number: .1\n /^\\s*-?\\.\\d+\\s*$/.test(num)\n );\n};\n\nexport const sanitizeInput = (value: string | number) => {\n if (typeof value === \"number\") return value;\n let sanitizedInput = value.replace(/[^0-9.+-]/g, \"\");\n sanitizedInput = sanitizedInput.replace(\n /^([+-]?)(.*)$/,\n (_match, sign, rest) => {\n return sign + rest.replace(/[+-]/g, \"\");\n },\n );\n const parts = sanitizedInput.split(\".\");\n if (parts.length > 2) {\n sanitizedInput = `${parts[0]}.${parts.slice(1).join(\"\")}`;\n }\n\n return sanitizedInput;\n};\n\nexport const isOutOfRange = (\n value: number | string | undefined,\n min: number,\n max: number,\n) => {\n if (value === undefined) return true;\n const floatValue = toFloat(value);\n return floatValue > max || floatValue < min;\n};\n\nexport const clampToRange = (min: number, max: number, value: number) => {\n if (value < min) return min;\n if (value > max) return max;\n return value;\n};\n\nconst isExponential = (number: string | number) => {\n const str = String(number);\n\n return !Number.isNaN(Number(str)) && str.includes(\"e\");\n};\n\nexport const getNumberPrecision = (number: string | number) => {\n const numStr: string = String(sanitizeInput(number));\n\n if (isExponential(number)) {\n let precision = Number(numStr.slice(numStr.indexOf(\"e-\") + 2));\n\n const decimalMatch = numStr.match(/\\.(\\d+)/);\n if (decimalMatch?.[1]) {\n precision += decimalMatch[1].length;\n }\n return precision;\n }\n\n return numStr.includes(\".\") && isValidNumber(numStr)\n ? numStr.length - numStr.indexOf(\".\") - 1\n : 0;\n};\n\nexport const isEmpty = (value: number | string) => {\n return value === \"\";\n};\n"],"names":[],"mappings":"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"}
@@ -20,17 +20,17 @@ const withBaseName = core.makePrefixer("saltQueryInput");
20
20
  const QueryInput = react.forwardRef(
21
21
  function QueryInput2(props, externalRef) {
22
22
  const {
23
- disabled,
24
- categories,
25
- selectedItems,
26
- onChange,
27
- defaultSelectedItems,
23
+ disabled: _disabled,
24
+ categories: _categories,
25
+ selectedItems: _selectedItems,
26
+ onChange: _onChange,
27
+ defaultSelectedItems: _defaultSelectedItems,
28
28
  showCategory,
29
- autoClose,
30
- displayedItemCount,
31
- booleanOperator,
32
- onBooleanOperatorChange,
33
- defaultBooleanOperator,
29
+ autoClose: _autoClose,
30
+ displayedItemCount: _displayedItemCount,
31
+ booleanOperator: _booleanOperator,
32
+ onBooleanOperatorChange: _onBooleanOperatorChange,
33
+ defaultBooleanOperator: _defaultBooleanOperator,
34
34
  className,
35
35
  ...restProps
36
36
  } = props;
@@ -1 +1 @@
1
- {"version":3,"file":"QueryInput.js","sources":["../src/query-input/QueryInput.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { QueryInputBody, ValueSelector } from \"./internal\";\nimport queryInputCss from \"./QueryInput.css\";\nimport type { QueryInputCategory, QueryInputItem } from \"./queryInputTypes\";\nimport { type BooleanOperator, useQueryInput } from \"./useQueryInput\";\n\nconst withBaseName = makePrefixer(\"saltQueryInput\");\n\nexport interface QueryInputProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n disabled?: boolean;\n categories: QueryInputCategory[];\n selectedItems?: QueryInputItem[];\n onChange?: (items: QueryInputItem[]) => void;\n defaultSelectedItems?: QueryInputItem[];\n showCategory?: boolean;\n autoClose?: boolean;\n displayedItemCount?: number;\n booleanOperator?: BooleanOperator;\n onBooleanOperatorChange?: (newOperator: BooleanOperator) => void;\n defaultBooleanOperator?: BooleanOperator;\n}\n\nexport const QueryInput = forwardRef<HTMLDivElement, QueryInputProps>(\n function QueryInput(props, externalRef) {\n const {\n disabled,\n categories,\n selectedItems,\n onChange,\n defaultSelectedItems,\n showCategory,\n autoClose,\n displayedItemCount,\n booleanOperator,\n onBooleanOperatorChange,\n defaultBooleanOperator,\n className,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-query-input\",\n css: queryInputCss,\n window: targetWindow,\n });\n\n const {\n queryInputProps,\n queryInputBodyRef,\n queryInputBodyProps,\n valueSelectorProps,\n } = useQueryInput(props, externalRef);\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n onBlur={queryInputProps.onBlur}\n onFocus={queryInputProps.onFocus}\n data-testid=\"query-input\"\n {...restProps}\n >\n <QueryInputBody\n ref={queryInputBodyRef}\n {...queryInputBodyProps}\n showCategory={showCategory}\n />\n <ValueSelector {...valueSelectorProps} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","QueryInput","useWindow","useComponentCssInjection","queryInputCss","useQueryInput","jsxs","clsx","jsx","QueryInputBody","ValueSelector"],"mappings":";;;;;;;;;;;;;;;;;;AAUA,MAAM,YAAA,GAAeA,kBAAa,gBAAgB,CAAA;AAiB3C,MAAM,UAAa,GAAAC,gBAAA;AAAA,EACxB,SAASC,WAAW,CAAA,KAAA,EAAO,WAAa,EAAA;AACtC,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,QAAA;AAAA,MACA,oBAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,kBAAA;AAAA,MACA,eAAA;AAAA,MACA,uBAAA;AAAA,MACA,sBAAA;AAAA,MACA,SAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,kBAAA;AAAA,MACR,GAAK,EAAAC,YAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAM,MAAA;AAAA,MACJ,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACF,GAAIC,2BAAc,CAAA,KAAA,EAAO,WAAW,CAAA;AAEpC,IACE,uBAAAC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACzC,QAAQ,eAAgB,CAAA,MAAA;AAAA,QACxB,SAAS,eAAgB,CAAA,OAAA;AAAA,QACzB,aAAY,EAAA,aAAA;AAAA,QACX,GAAG,SAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAACC,6BAAA;AAAA,YAAA;AAAA,cACC,GAAK,EAAA,iBAAA;AAAA,cACJ,GAAG,mBAAA;AAAA,cACJ;AAAA;AAAA,WACF;AAAA,0BACAD,cAAA,CAACE,2BAAe,EAAA,EAAA,GAAG,kBAAoB,EAAA;AAAA;AAAA;AAAA,KACzC;AAAA;AAGN;;;;"}
1
+ {"version":3,"file":"QueryInput.js","sources":["../src/query-input/QueryInput.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { clsx } from \"clsx\";\nimport { forwardRef, type HTMLAttributes } from \"react\";\nimport { QueryInputBody, ValueSelector } from \"./internal\";\nimport queryInputCss from \"./QueryInput.css\";\nimport type { QueryInputCategory, QueryInputItem } from \"./queryInputTypes\";\nimport { type BooleanOperator, useQueryInput } from \"./useQueryInput\";\n\nconst withBaseName = makePrefixer(\"saltQueryInput\");\n\nexport interface QueryInputProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n disabled?: boolean;\n categories: QueryInputCategory[];\n selectedItems?: QueryInputItem[];\n onChange?: (items: QueryInputItem[]) => void;\n defaultSelectedItems?: QueryInputItem[];\n showCategory?: boolean;\n autoClose?: boolean;\n displayedItemCount?: number;\n booleanOperator?: BooleanOperator;\n onBooleanOperatorChange?: (newOperator: BooleanOperator) => void;\n defaultBooleanOperator?: BooleanOperator;\n}\n\nexport const QueryInput = forwardRef<HTMLDivElement, QueryInputProps>(\n function QueryInput(props, externalRef) {\n const {\n disabled: _disabled,\n categories: _categories,\n selectedItems: _selectedItems,\n onChange: _onChange,\n defaultSelectedItems: _defaultSelectedItems,\n showCategory,\n autoClose: _autoClose,\n displayedItemCount: _displayedItemCount,\n booleanOperator: _booleanOperator,\n onBooleanOperatorChange: _onBooleanOperatorChange,\n defaultBooleanOperator: _defaultBooleanOperator,\n className,\n ...restProps\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-query-input\",\n css: queryInputCss,\n window: targetWindow,\n });\n\n const {\n queryInputProps,\n queryInputBodyRef,\n queryInputBodyProps,\n valueSelectorProps,\n } = useQueryInput(props, externalRef);\n\n return (\n <div\n className={clsx(withBaseName(), className)}\n onBlur={queryInputProps.onBlur}\n onFocus={queryInputProps.onFocus}\n data-testid=\"query-input\"\n {...restProps}\n >\n <QueryInputBody\n ref={queryInputBodyRef}\n {...queryInputBodyProps}\n showCategory={showCategory}\n />\n <ValueSelector {...valueSelectorProps} />\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","QueryInput","useWindow","useComponentCssInjection","queryInputCss","useQueryInput","jsxs","clsx","jsx","QueryInputBody","ValueSelector"],"mappings":";;;;;;;;;;;;;;;;;;AAUA,MAAM,YAAA,GAAeA,kBAAa,gBAAgB,CAAA;AAiB3C,MAAM,UAAa,GAAAC,gBAAA;AAAA,EACxB,SAASC,WAAW,CAAA,KAAA,EAAO,WAAa,EAAA;AACtC,IAAM,MAAA;AAAA,MACJ,QAAU,EAAA,SAAA;AAAA,MACV,UAAY,EAAA,WAAA;AAAA,MACZ,aAAe,EAAA,cAAA;AAAA,MACf,QAAU,EAAA,SAAA;AAAA,MACV,oBAAsB,EAAA,qBAAA;AAAA,MACtB,YAAA;AAAA,MACA,SAAW,EAAA,UAAA;AAAA,MACX,kBAAoB,EAAA,mBAAA;AAAA,MACpB,eAAiB,EAAA,gBAAA;AAAA,MACjB,uBAAyB,EAAA,wBAAA;AAAA,MACzB,sBAAwB,EAAA,uBAAA;AAAA,MACxB,SAAA;AAAA,MACA,GAAG;AAAA,KACD,GAAA,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,IAAyBC,+BAAA,CAAA;AAAA,MACvB,MAAQ,EAAA,kBAAA;AAAA,MACR,GAAK,EAAAC,YAAA;AAAA,MACL,MAAQ,EAAA;AAAA,KACT,CAAA;AAED,IAAM,MAAA;AAAA,MACJ,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACF,GAAIC,2BAAc,CAAA,KAAA,EAAO,WAAW,CAAA;AAEpC,IACE,uBAAAC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAW,EAAAC,SAAA,CAAK,YAAa,EAAA,EAAG,SAAS,CAAA;AAAA,QACzC,QAAQ,eAAgB,CAAA,MAAA;AAAA,QACxB,SAAS,eAAgB,CAAA,OAAA;AAAA,QACzB,aAAY,EAAA,aAAA;AAAA,QACX,GAAG,SAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAACC,6BAAA;AAAA,YAAA;AAAA,cACC,GAAK,EAAA,iBAAA;AAAA,cACJ,GAAG,mBAAA;AAAA,cACJ;AAAA;AAAA,WACF;AAAA,0BACAD,cAAA,CAACE,2BAAe,EAAA,EAAA,GAAG,kBAAoB,EAAA;AAAA;AAAA;AAAA,KACzC;AAAA;AAGN;;;;"}
@@ -35,7 +35,7 @@ const QueryInputBody = react.forwardRef(
35
35
  }
36
36
  return (item) => item.value;
37
37
  }, [showCategory]);
38
- const stringToItem = (selectedItems2, value) => {
38
+ const stringToItem = (_selectedItems, value) => {
39
39
  return {
40
40
  category: null,
41
41
  value
@@ -1 +1 @@
1
- {"version":3,"file":"QueryInputBody.js","sources":["../src/query-input/internal/QueryInputBody.tsx"],"sourcesContent":["import { makePrefixer, ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { FilterIcon } from \"@salt-ds/icons\";\nimport {\n type ChangeEventHandler,\n type FocusEventHandler,\n forwardRef,\n type KeyboardEventHandler,\n type Ref,\n type SyntheticEvent,\n useMemo,\n} from \"react\";\n\nimport {\n type ChangeHandler,\n type StringToItem,\n TokenizedInput,\n} from \"../../tokenized-input\";\nimport type { QueryInputItem } from \"../queryInputTypes\";\nimport type { BooleanOperator } from \"../useQueryInput\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputBody\");\n\nexport interface QueryInputBodyProps {\n inputRef: Ref<HTMLInputElement>;\n disabled?: boolean;\n showCategory?: boolean;\n selectedItems: QueryInputItem[];\n onBlur: FocusEventHandler<HTMLInputElement>;\n onFocus: FocusEventHandler<HTMLInputElement>;\n onInputFocus: FocusEventHandler<HTMLInputElement>;\n onInputBlur: FocusEventHandler<HTMLInputElement>;\n onInputClick: (event: SyntheticEvent) => void;\n onInputClear: () => void;\n inputValue?: string;\n onInputChange: ChangeEventHandler<HTMLInputElement>;\n isFocused?: boolean;\n onSelectedItemsChange: ChangeHandler<QueryInputItem>;\n onKeyDown: KeyboardEventHandler<HTMLInputElement | HTMLButtonElement>;\n booleanOperator: BooleanOperator;\n onBooleanOperatorChange: (newBooleanOperator: BooleanOperator) => void;\n}\n\nexport const QueryInputBody = forwardRef<HTMLDivElement, QueryInputBodyProps>(\n function QueryInputBody(props, ref) {\n const {\n inputRef,\n disabled,\n selectedItems,\n onInputFocus,\n onInputBlur,\n showCategory,\n inputValue,\n onInputChange,\n isFocused,\n onInputClear,\n onSelectedItemsChange,\n onKeyDown,\n onInputClick,\n booleanOperator,\n onBooleanOperatorChange,\n } = props;\n\n const itemToString = useMemo(() => {\n if (showCategory) {\n return (item: QueryInputItem) => [item.category, item.value].join(\": \");\n }\n return (item: QueryInputItem) => item.value;\n }, [showCategory]);\n\n const stringToItem: StringToItem<QueryInputItem> = (\n selectedItems,\n value,\n ) => {\n return {\n category: null,\n value,\n };\n };\n\n const onChange = (event: SyntheticEvent<HTMLButtonElement>) => {\n const newBooleanOperator = event.currentTarget.value as BooleanOperator;\n onBooleanOperatorChange(newBooleanOperator);\n };\n\n return (\n <div ref={ref} className={withBaseName()}>\n <FilterIcon />\n <TokenizedInput\n inputRef={inputRef}\n disabled={disabled}\n className={withBaseName(\"input\")}\n selectedItems={selectedItems}\n // @ts-ignore\n itemToString={itemToString}\n // @ts-ignore\n stringToItem={stringToItem}\n onInputFocus={onInputFocus}\n onInputBlur={onInputBlur}\n value={inputValue}\n onClick={onInputClick}\n onInputChange={onInputChange}\n expanded={isFocused}\n onClear={onInputClear}\n // @ts-ignore\n onChange={onSelectedItemsChange}\n onKeyDown={onKeyDown}\n />\n <div className={withBaseName(\"separator\")} />\n <ToggleButtonGroup\n className={withBaseName(\"buttonGroup\")}\n data-testid=\"boolean-selector\"\n value={booleanOperator}\n onChange={onChange}\n >\n <ToggleButton value=\"and\">And</ToggleButton>\n <ToggleButton value=\"or\">Or</ToggleButton>\n </ToggleButtonGroup>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","QueryInputBody","useMemo","selectedItems","jsxs","jsx","FilterIcon","TokenizedInput","ToggleButtonGroup","ToggleButton"],"mappings":";;;;;;;;;;;AAoBA,MAAM,YAAA,GAAeA,kBAAa,oBAAoB,CAAA;AAsB/C,MAAM,cAAiB,GAAAC,gBAAA;AAAA,EAC5B,SAASC,eAAe,CAAA,KAAA,EAAO,GAAK,EAAA;AAClC,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,qBAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACE,GAAA,KAAA;AAEJ,IAAM,MAAA,YAAA,GAAeC,cAAQ,MAAM;AACjC,MAAA,IAAI,YAAc,EAAA;AAChB,QAAO,OAAA,CAAC,SAAyB,CAAC,IAAA,CAAK,UAAU,IAAK,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA;AAExE,MAAO,OAAA,CAAC,SAAyB,IAAK,CAAA,KAAA;AAAA,KACxC,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,IAAM,MAAA,YAAA,GAA6C,CACjDC,cAAAA,EACA,KACG,KAAA;AACH,MAAO,OAAA;AAAA,QACL,QAAU,EAAA,IAAA;AAAA,QACV;AAAA,OACF;AAAA,KACF;AAEA,IAAM,MAAA,QAAA,GAAW,CAAC,KAA6C,KAAA;AAC7D,MAAM,MAAA,kBAAA,GAAqB,MAAM,aAAc,CAAA,KAAA;AAC/C,MAAA,uBAAA,CAAwB,kBAAkB,CAAA;AAAA,KAC5C;AAEA,IAAA,uBACGC,eAAA,CAAA,KAAA,EAAA,EAAI,GAAU,EAAA,SAAA,EAAW,cACxB,EAAA,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACC,gBAAW,EAAA,EAAA,CAAA;AAAA,sBACZD,cAAA;AAAA,QAACE,6BAAA;AAAA,QAAA;AAAA,UACC,QAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,UAC/B,aAAA;AAAA,UAEA,YAAA;AAAA,UAEA,YAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA;AAAA,UACA,KAAO,EAAA,UAAA;AAAA,UACP,OAAS,EAAA,YAAA;AAAA,UACT,aAAA;AAAA,UACA,QAAU,EAAA,SAAA;AAAA,UACV,OAAS,EAAA,YAAA;AAAA,UAET,QAAU,EAAA,qBAAA;AAAA,UACV;AAAA;AAAA,OACF;AAAA,sBACCF,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,CAAa,WAAW,CAAG,EAAA,CAAA;AAAA,sBAC3CD,eAAA;AAAA,QAACI,sBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,aAAa,aAAa,CAAA;AAAA,UACrC,aAAY,EAAA,kBAAA;AAAA,UACZ,KAAO,EAAA,eAAA;AAAA,UACP,QAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAACH,cAAA,CAAAI,iBAAA,EAAA,EAAa,KAAM,EAAA,KAAA,EAAM,QAAG,EAAA,KAAA,EAAA,CAAA;AAAA,4BAC5BJ,cAAA,CAAAI,iBAAA,EAAA,EAAa,KAAM,EAAA,IAAA,EAAK,QAAE,EAAA,IAAA,EAAA;AAAA;AAAA;AAAA;AAC7B,KACF,EAAA,CAAA;AAAA;AAGN;;;;"}
1
+ {"version":3,"file":"QueryInputBody.js","sources":["../src/query-input/internal/QueryInputBody.tsx"],"sourcesContent":["import { makePrefixer, ToggleButton, ToggleButtonGroup } from \"@salt-ds/core\";\nimport { FilterIcon } from \"@salt-ds/icons\";\nimport {\n type ChangeEventHandler,\n type FocusEventHandler,\n forwardRef,\n type KeyboardEventHandler,\n type Ref,\n type SyntheticEvent,\n useMemo,\n} from \"react\";\n\nimport {\n type ChangeHandler,\n type StringToItem,\n TokenizedInput,\n} from \"../../tokenized-input\";\nimport type { QueryInputItem } from \"../queryInputTypes\";\nimport type { BooleanOperator } from \"../useQueryInput\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputBody\");\n\nexport interface QueryInputBodyProps {\n inputRef: Ref<HTMLInputElement>;\n disabled?: boolean;\n showCategory?: boolean;\n selectedItems: QueryInputItem[];\n onBlur: FocusEventHandler<HTMLInputElement>;\n onFocus: FocusEventHandler<HTMLInputElement>;\n onInputFocus: FocusEventHandler<HTMLInputElement>;\n onInputBlur: FocusEventHandler<HTMLInputElement>;\n onInputClick: (event: SyntheticEvent) => void;\n onInputClear: () => void;\n inputValue?: string;\n onInputChange: ChangeEventHandler<HTMLInputElement>;\n isFocused?: boolean;\n onSelectedItemsChange: ChangeHandler<QueryInputItem>;\n onKeyDown: KeyboardEventHandler<HTMLInputElement | HTMLButtonElement>;\n booleanOperator: BooleanOperator;\n onBooleanOperatorChange: (newBooleanOperator: BooleanOperator) => void;\n}\n\nexport const QueryInputBody = forwardRef<HTMLDivElement, QueryInputBodyProps>(\n function QueryInputBody(props, ref) {\n const {\n inputRef,\n disabled,\n selectedItems,\n onInputFocus,\n onInputBlur,\n showCategory,\n inputValue,\n onInputChange,\n isFocused,\n onInputClear,\n onSelectedItemsChange,\n onKeyDown,\n onInputClick,\n booleanOperator,\n onBooleanOperatorChange,\n } = props;\n\n const itemToString = useMemo(() => {\n if (showCategory) {\n return (item: QueryInputItem) => [item.category, item.value].join(\": \");\n }\n return (item: QueryInputItem) => item.value;\n }, [showCategory]);\n\n const stringToItem: StringToItem<QueryInputItem> = (\n _selectedItems,\n value,\n ) => {\n return {\n category: null,\n value,\n };\n };\n\n const onChange = (event: SyntheticEvent<HTMLButtonElement>) => {\n const newBooleanOperator = event.currentTarget.value as BooleanOperator;\n onBooleanOperatorChange(newBooleanOperator);\n };\n\n return (\n <div ref={ref} className={withBaseName()}>\n <FilterIcon />\n <TokenizedInput\n inputRef={inputRef}\n disabled={disabled}\n className={withBaseName(\"input\")}\n selectedItems={selectedItems}\n // @ts-expect-error\n itemToString={itemToString}\n // @ts-expect-error\n stringToItem={stringToItem}\n onInputFocus={onInputFocus}\n onInputBlur={onInputBlur}\n value={inputValue}\n onClick={onInputClick}\n onInputChange={onInputChange}\n expanded={isFocused}\n onClear={onInputClear}\n // @ts-expect-error\n onChange={onSelectedItemsChange}\n onKeyDown={onKeyDown}\n />\n <div className={withBaseName(\"separator\")} />\n <ToggleButtonGroup\n className={withBaseName(\"buttonGroup\")}\n data-testid=\"boolean-selector\"\n value={booleanOperator}\n onChange={onChange}\n >\n <ToggleButton value=\"and\">And</ToggleButton>\n <ToggleButton value=\"or\">Or</ToggleButton>\n </ToggleButtonGroup>\n </div>\n );\n },\n);\n"],"names":["makePrefixer","forwardRef","QueryInputBody","useMemo","jsxs","jsx","FilterIcon","TokenizedInput","ToggleButtonGroup","ToggleButton"],"mappings":";;;;;;;;;;;AAoBA,MAAM,YAAA,GAAeA,kBAAa,oBAAoB,CAAA;AAsB/C,MAAM,cAAiB,GAAAC,gBAAA;AAAA,EAC5B,SAASC,eAAe,CAAA,KAAA,EAAO,GAAK,EAAA;AAClC,IAAM,MAAA;AAAA,MACJ,QAAA;AAAA,MACA,QAAA;AAAA,MACA,aAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,qBAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACE,GAAA,KAAA;AAEJ,IAAM,MAAA,YAAA,GAAeC,cAAQ,MAAM;AACjC,MAAA,IAAI,YAAc,EAAA;AAChB,QAAO,OAAA,CAAC,SAAyB,CAAC,IAAA,CAAK,UAAU,IAAK,CAAA,KAAK,CAAE,CAAA,IAAA,CAAK,IAAI,CAAA;AAAA;AAExE,MAAO,OAAA,CAAC,SAAyB,IAAK,CAAA,KAAA;AAAA,KACxC,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,IAAM,MAAA,YAAA,GAA6C,CACjD,cAAA,EACA,KACG,KAAA;AACH,MAAO,OAAA;AAAA,QACL,QAAU,EAAA,IAAA;AAAA,QACV;AAAA,OACF;AAAA,KACF;AAEA,IAAM,MAAA,QAAA,GAAW,CAAC,KAA6C,KAAA;AAC7D,MAAM,MAAA,kBAAA,GAAqB,MAAM,aAAc,CAAA,KAAA;AAC/C,MAAA,uBAAA,CAAwB,kBAAkB,CAAA;AAAA,KAC5C;AAEA,IAAA,uBACGC,eAAA,CAAA,KAAA,EAAA,EAAI,GAAU,EAAA,SAAA,EAAW,cACxB,EAAA,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACC,gBAAW,EAAA,EAAA,CAAA;AAAA,sBACZD,cAAA;AAAA,QAACE,6BAAA;AAAA,QAAA;AAAA,UACC,QAAA;AAAA,UACA,QAAA;AAAA,UACA,SAAA,EAAW,aAAa,OAAO,CAAA;AAAA,UAC/B,aAAA;AAAA,UAEA,YAAA;AAAA,UAEA,YAAA;AAAA,UACA,YAAA;AAAA,UACA,WAAA;AAAA,UACA,KAAO,EAAA,UAAA;AAAA,UACP,OAAS,EAAA,YAAA;AAAA,UACT,aAAA;AAAA,UACA,QAAU,EAAA,SAAA;AAAA,UACV,OAAS,EAAA,YAAA;AAAA,UAET,QAAU,EAAA,qBAAA;AAAA,UACV;AAAA;AAAA,OACF;AAAA,sBACCF,cAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,CAAa,WAAW,CAAG,EAAA,CAAA;AAAA,sBAC3CD,eAAA;AAAA,QAACI,sBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,aAAa,aAAa,CAAA;AAAA,UACrC,aAAY,EAAA,kBAAA;AAAA,UACZ,KAAO,EAAA,eAAA;AAAA,UACP,QAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAACH,cAAA,CAAAI,iBAAA,EAAA,EAAa,KAAM,EAAA,KAAA,EAAM,QAAG,EAAA,KAAA,EAAA,CAAA;AAAA,4BAC5BJ,cAAA,CAAAI,iBAAA,EAAA,EAAa,KAAM,EAAA,IAAA,EAAK,QAAE,EAAA,IAAA,EAAA;AAAA;AAAA;AAAA;AAC7B,KACF,EAAA,CAAA;AAAA;AAGN;;;;"}
@@ -36,7 +36,7 @@ function SearchList(props) {
36
36
  window: targetWindow
37
37
  });
38
38
  const onChange = react.useCallback(
39
- (event, items) => {
39
+ (_event, items) => {
40
40
  onChangeProp(items || []);
41
41
  },
42
42
  [onChangeProp]
@@ -1 +1 @@
1
- {"version":3,"file":"SearchList.js","sources":["../src/query-input/internal/SearchList.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { type Dispatch, type SetStateAction, useCallback } from \"react\";\nimport type { SelectionChangeHandler } from \"../../common-hooks\";\nimport { List, ListItem, ListItemGroup } from \"../../list\";\nimport queryInputCss from \"../QueryInput.css\";\nimport type { QueryInputCategory, QueryInputItem } from \"../queryInputTypes\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputSearchList\");\n\nexport interface SearchListProps {\n inputValue?: string;\n selectedItems?: QueryInputItem[];\n onChange: (items: QueryInputItem[]) => void;\n rootWidth: number;\n highlightedIndex?: number;\n visibleCategories: QueryInputCategory[];\n setHighlightedIndex: Dispatch<SetStateAction<number>>;\n}\n\nfunction itemToString(item: QueryInputItem) {\n return [item.category, item.value].join(\": \");\n}\n\nexport function SearchList(props: SearchListProps) {\n const {\n inputValue,\n selectedItems,\n onChange: onChangeProp,\n rootWidth,\n highlightedIndex,\n setHighlightedIndex,\n visibleCategories,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-query-input\",\n css: queryInputCss,\n window: targetWindow,\n });\n\n const onChange: SelectionChangeHandler<QueryInputItem, \"multiple\"> =\n useCallback(\n (event, items) => {\n onChangeProp(items || []);\n },\n [onChangeProp],\n );\n\n return (\n <List\n checkable={false}\n data-testid=\"search-list\"\n highlightedIndex={highlightedIndex}\n itemTextHighlightPattern={inputValue}\n itemToString={itemToString}\n onHighlight={setHighlightedIndex}\n onSelectionChange={onChange}\n selectionStrategy=\"multiple\"\n selected={selectedItems}\n width={rootWidth}\n >\n {visibleCategories.map((inputCategory: QueryInputCategory) => {\n return (\n <ListItemGroup key={inputCategory.name} label={inputCategory.name}>\n {inputCategory.values.map((label) => (\n <ListItem key={label} label={label} />\n ))}\n </ListItemGroup>\n );\n })}\n <ListItem className={withBaseName(\"addKeyword\")}>\n {`Add keyword: \"${inputValue}\"`}\n </ListItem>\n </List>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","queryInputCss","useCallback","jsxs","List","ListItemGroup","ListItem","jsx"],"mappings":";;;;;;;;;;;;;;;;;AASA,MAAM,YAAA,GAAeA,kBAAa,0BAA0B,CAAA;AAY5D,SAAS,aAAa,IAAsB,EAAA;AAC1C,EAAA,OAAO,CAAC,IAAK,CAAA,QAAA,EAAU,KAAK,KAAK,CAAA,CAAE,KAAK,IAAI,CAAA;AAC9C;AAEO,SAAS,WAAW,KAAwB,EAAA;AACjD,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACE,GAAA,KAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,kBAAA;AAAA,IACR,GAAK,EAAAC,UAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,QACJ,GAAAC,iBAAA;AAAA,IACE,CAAC,OAAO,KAAU,KAAA;AAChB,MAAa,YAAA,CAAA,KAAA,IAAS,EAAE,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEF,EACE,uBAAAC,eAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,KAAA;AAAA,MACX,aAAY,EAAA,aAAA;AAAA,MACZ,gBAAA;AAAA,MACA,wBAA0B,EAAA,UAAA;AAAA,MAC1B,YAAA;AAAA,MACA,WAAa,EAAA,mBAAA;AAAA,MACb,iBAAmB,EAAA,QAAA;AAAA,MACnB,iBAAkB,EAAA,UAAA;AAAA,MAClB,QAAU,EAAA,aAAA;AAAA,MACV,KAAO,EAAA,SAAA;AAAA,MAEN,QAAA,EAAA;AAAA,QAAkB,iBAAA,CAAA,GAAA,CAAI,CAAC,aAAsC,KAAA;AAC5D,UAAA,sCACGC,2BAAuC,EAAA,EAAA,KAAA,EAAO,aAAc,CAAA,IAAA,EAC1D,wBAAc,MAAO,CAAA,GAAA,CAAI,CAAC,KAAA,oCACxBC,iBAAqB,EAAA,EAAA,KAAA,EAAA,EAAP,KAAqB,CACrC,CAAA,EAAA,EAHiB,cAAc,IAIlC,CAAA;AAAA,SAEH,CAAA;AAAA,wBACDC,cAAA,CAACD,qBAAS,SAAW,EAAA,YAAA,CAAa,YAAY,CAC3C,EAAA,QAAA,EAAA,CAAA,cAAA,EAAiB,UAAU,CAC9B,CAAA,CAAA,EAAA;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
1
+ {"version":3,"file":"SearchList.js","sources":["../src/query-input/internal/SearchList.tsx"],"sourcesContent":["import { makePrefixer } from \"@salt-ds/core\";\nimport { useComponentCssInjection } from \"@salt-ds/styles\";\nimport { useWindow } from \"@salt-ds/window\";\nimport { type Dispatch, type SetStateAction, useCallback } from \"react\";\nimport type { SelectionChangeHandler } from \"../../common-hooks\";\nimport { List, ListItem, ListItemGroup } from \"../../list\";\nimport queryInputCss from \"../QueryInput.css\";\nimport type { QueryInputCategory, QueryInputItem } from \"../queryInputTypes\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputSearchList\");\n\nexport interface SearchListProps {\n inputValue?: string;\n selectedItems?: QueryInputItem[];\n onChange: (items: QueryInputItem[]) => void;\n rootWidth: number;\n highlightedIndex?: number;\n visibleCategories: QueryInputCategory[];\n setHighlightedIndex: Dispatch<SetStateAction<number>>;\n}\n\nfunction itemToString(item: QueryInputItem) {\n return [item.category, item.value].join(\": \");\n}\n\nexport function SearchList(props: SearchListProps) {\n const {\n inputValue,\n selectedItems,\n onChange: onChangeProp,\n rootWidth,\n highlightedIndex,\n setHighlightedIndex,\n visibleCategories,\n } = props;\n\n const targetWindow = useWindow();\n useComponentCssInjection({\n testId: \"salt-query-input\",\n css: queryInputCss,\n window: targetWindow,\n });\n\n const onChange: SelectionChangeHandler<QueryInputItem, \"multiple\"> =\n useCallback(\n (_event, items) => {\n onChangeProp(items || []);\n },\n [onChangeProp],\n );\n\n return (\n <List\n checkable={false}\n data-testid=\"search-list\"\n highlightedIndex={highlightedIndex}\n itemTextHighlightPattern={inputValue}\n itemToString={itemToString}\n onHighlight={setHighlightedIndex}\n onSelectionChange={onChange}\n selectionStrategy=\"multiple\"\n selected={selectedItems}\n width={rootWidth}\n >\n {visibleCategories.map((inputCategory: QueryInputCategory) => {\n return (\n <ListItemGroup key={inputCategory.name} label={inputCategory.name}>\n {inputCategory.values.map((label) => (\n <ListItem key={label} label={label} />\n ))}\n </ListItemGroup>\n );\n })}\n <ListItem className={withBaseName(\"addKeyword\")}>\n {`Add keyword: \"${inputValue}\"`}\n </ListItem>\n </List>\n );\n}\n"],"names":["makePrefixer","useWindow","useComponentCssInjection","queryInputCss","useCallback","jsxs","List","ListItemGroup","ListItem","jsx"],"mappings":";;;;;;;;;;;;;;;;;AASA,MAAM,YAAA,GAAeA,kBAAa,0BAA0B,CAAA;AAY5D,SAAS,aAAa,IAAsB,EAAA;AAC1C,EAAA,OAAO,CAAC,IAAK,CAAA,QAAA,EAAU,KAAK,KAAK,CAAA,CAAE,KAAK,IAAI,CAAA;AAC9C;AAEO,SAAS,WAAW,KAAwB,EAAA;AACjD,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAU,EAAA,YAAA;AAAA,IACV,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACE,GAAA,KAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAU,EAAA;AAC/B,EAAyBC,+BAAA,CAAA;AAAA,IACvB,MAAQ,EAAA,kBAAA;AAAA,IACR,GAAK,EAAAC,UAAA;AAAA,IACL,MAAQ,EAAA;AAAA,GACT,CAAA;AAED,EAAA,MAAM,QACJ,GAAAC,iBAAA;AAAA,IACE,CAAC,QAAQ,KAAU,KAAA;AACjB,MAAa,YAAA,CAAA,KAAA,IAAS,EAAE,CAAA;AAAA,KAC1B;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEF,EACE,uBAAAC,eAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,SAAW,EAAA,KAAA;AAAA,MACX,aAAY,EAAA,aAAA;AAAA,MACZ,gBAAA;AAAA,MACA,wBAA0B,EAAA,UAAA;AAAA,MAC1B,YAAA;AAAA,MACA,WAAa,EAAA,mBAAA;AAAA,MACb,iBAAmB,EAAA,QAAA;AAAA,MACnB,iBAAkB,EAAA,UAAA;AAAA,MAClB,QAAU,EAAA,aAAA;AAAA,MACV,KAAO,EAAA,SAAA;AAAA,MAEN,QAAA,EAAA;AAAA,QAAkB,iBAAA,CAAA,GAAA,CAAI,CAAC,aAAsC,KAAA;AAC5D,UAAA,sCACGC,2BAAuC,EAAA,EAAA,KAAA,EAAO,aAAc,CAAA,IAAA,EAC1D,wBAAc,MAAO,CAAA,GAAA,CAAI,CAAC,KAAA,oCACxBC,iBAAqB,EAAA,EAAA,KAAA,EAAA,EAAP,KAAqB,CACrC,CAAA,EAAA,EAHiB,cAAc,IAIlC,CAAA;AAAA,SAEH,CAAA;AAAA,wBACDC,cAAA,CAACD,qBAAS,SAAW,EAAA,YAAA,CAAa,YAAY,CAC3C,EAAA,QAAA,EAAA,CAAA,cAAA,EAAiB,UAAU,CAC9B,CAAA,CAAA,EAAA;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -16,10 +16,10 @@ function usePopperStatus(props) {
16
16
  setIsOpen(false);
17
17
  }
18
18
  };
19
- const onFocus = (event) => {
19
+ const onFocus = () => {
20
20
  setIsOpen(true);
21
21
  };
22
- const onBlur = (event) => {
22
+ const onBlur = () => {
23
23
  setIsOpen(false);
24
24
  };
25
25
  const onChange = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"usePopperStatus.js","sources":["../src/query-input/internal/usePopperStatus.ts"],"sourcesContent":["import { type FocusEvent, type KeyboardEvent, useState } from \"react\";\n\nexport interface UsePopperStatusProps {\n initialOpen?: boolean;\n autoClose?: boolean;\n}\n\nexport function usePopperStatus(props: UsePopperStatusProps) {\n const { initialOpen, autoClose } = props;\n const [isOpen, setIsOpen] = useState<boolean>(!!initialOpen);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.altKey && [\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n setIsOpen((x) => !x);\n } else if (\n !isOpen &&\n [\"Alt\", \"Tab\", \"Escape\", \"Control\", \"Shift\", \"Meta\"].includes(event.key)\n ) {\n setIsOpen(true);\n } else if (isOpen && event.key === \"Escape\") {\n setIsOpen(false);\n } else if (isOpen && autoClose && event.key === \"Enter\") {\n setIsOpen(false);\n }\n };\n\n const onFocus = (event: FocusEvent) => {\n setIsOpen(true);\n };\n\n const onBlur = (event: FocusEvent) => {\n setIsOpen(false);\n };\n\n const onChange = () => {\n if (autoClose) {\n setIsOpen(false);\n }\n };\n\n const onClick = () => {\n if (!isOpen) {\n setIsOpen(true);\n }\n };\n\n return {\n isOpen,\n onKeyDown,\n onFocus,\n onBlur,\n onChange,\n onClick,\n };\n}\n"],"names":["useState"],"mappings":";;;;AAOO,SAAS,gBAAgB,KAA6B,EAAA;AAC3D,EAAM,MAAA,EAAe,SAAA,EAAc,GAAA,KAAA;AACnC,EAAA,MAAM,CAAC,MAAQ,EAAA,SAAS,IAAIA,cAAkB,CAAA,KAAa,CAAA;AAE3D,EAAM,MAAA,SAAA,GAAY,CAAC,KAAyB,KAAA;AAC1C,IAAI,IAAA,KAAA,CAAM,UAAU,CAAC,SAAA,EAAW,WAAW,CAAE,CAAA,QAAA,CAAS,KAAM,CAAA,GAAG,CAAG,EAAA;AAChE,MAAU,SAAA,CAAA,CAAC,CAAM,KAAA,CAAC,CAAC,CAAA;AAAA,KAEnB,MAAA,IAAA,CAAC,MACD,IAAA,CAAC,OAAO,KAAO,EAAA,QAAA,EAAU,SAAW,EAAA,OAAA,EAAS,MAAM,CAAA,CAAE,QAAS,CAAA,KAAA,CAAM,GAAG,CACvE,EAAA;AACA,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,KACL,MAAA,IAAA,MAAA,IAAU,KAAM,CAAA,GAAA,KAAQ,QAAU,EAAA;AAC3C,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,KACN,MAAA,IAAA,MAAA,IAAU,SAAa,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACvD,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,GACF;AAEA,EAAM,MAAA,OAAA,GAAU,CAAC,KAAsB,KAAA;AACrC,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,GAChB;AAEA,EAAM,MAAA,MAAA,GAAS,CAAC,KAAsB,KAAA;AACpC,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,GACjB;AAEA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,GACF;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA;AAChB,GACF;AAEA,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
1
+ {"version":3,"file":"usePopperStatus.js","sources":["../src/query-input/internal/usePopperStatus.ts"],"sourcesContent":["import { type KeyboardEvent, useState } from \"react\";\n\nexport interface UsePopperStatusProps {\n initialOpen?: boolean;\n autoClose?: boolean;\n}\n\nexport function usePopperStatus(props: UsePopperStatusProps) {\n const { initialOpen, autoClose } = props;\n const [isOpen, setIsOpen] = useState<boolean>(!!initialOpen);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.altKey && [\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n setIsOpen((x) => !x);\n } else if (\n !isOpen &&\n [\"Alt\", \"Tab\", \"Escape\", \"Control\", \"Shift\", \"Meta\"].includes(event.key)\n ) {\n setIsOpen(true);\n } else if (isOpen && event.key === \"Escape\") {\n setIsOpen(false);\n } else if (isOpen && autoClose && event.key === \"Enter\") {\n setIsOpen(false);\n }\n };\n\n const onFocus = () => {\n setIsOpen(true);\n };\n\n const onBlur = () => {\n setIsOpen(false);\n };\n\n const onChange = () => {\n if (autoClose) {\n setIsOpen(false);\n }\n };\n\n const onClick = () => {\n if (!isOpen) {\n setIsOpen(true);\n }\n };\n\n return {\n isOpen,\n onKeyDown,\n onFocus,\n onBlur,\n onChange,\n onClick,\n };\n}\n"],"names":["useState"],"mappings":";;;;AAOO,SAAS,gBAAgB,KAA6B,EAAA;AAC3D,EAAM,MAAA,EAAe,SAAA,EAAc,GAAA,KAAA;AACnC,EAAA,MAAM,CAAC,MAAQ,EAAA,SAAS,IAAIA,cAAkB,CAAA,KAAa,CAAA;AAE3D,EAAM,MAAA,SAAA,GAAY,CAAC,KAAyB,KAAA;AAC1C,IAAI,IAAA,KAAA,CAAM,UAAU,CAAC,SAAA,EAAW,WAAW,CAAE,CAAA,QAAA,CAAS,KAAM,CAAA,GAAG,CAAG,EAAA;AAChE,MAAU,SAAA,CAAA,CAAC,CAAM,KAAA,CAAC,CAAC,CAAA;AAAA,KAEnB,MAAA,IAAA,CAAC,MACD,IAAA,CAAC,OAAO,KAAO,EAAA,QAAA,EAAU,SAAW,EAAA,OAAA,EAAS,MAAM,CAAA,CAAE,QAAS,CAAA,KAAA,CAAM,GAAG,CACvE,EAAA;AACA,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,KACL,MAAA,IAAA,MAAA,IAAU,KAAM,CAAA,GAAA,KAAQ,QAAU,EAAA;AAC3C,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,KACN,MAAA,IAAA,MAAA,IAAU,SAAa,IAAA,KAAA,CAAM,QAAQ,OAAS,EAAA;AACvD,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,GACF;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,GAChB;AAEA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,GACjB;AAEA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,SAAW,EAAA;AACb,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA;AACjB,GACF;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAQ,EAAA;AACX,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA;AAChB,GACF;AAEA,EAAO,OAAA;AAAA,IACL,MAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -43,8 +43,8 @@ function useQueryInput(props, forwardedRef) {
43
43
  const searchListIndexPositions = react.useRef(
44
44
  []
45
45
  );
46
- const onInputFocus = (event) => {
47
- popperStatus.onFocus(event);
46
+ const onInputFocus = () => {
47
+ popperStatus.onFocus();
48
48
  setIsFocused(true);
49
49
  };
50
50
  const onInputBlur = (event) => {
@@ -68,11 +68,11 @@ function useQueryInput(props, forwardedRef) {
68
68
  return;
69
69
  }
70
70
  setIsFocused(false);
71
- popperStatus.onBlur(event);
71
+ popperStatus.onBlur();
72
72
  };
73
- const onFocus = (event) => {
73
+ const onFocus = () => {
74
74
  setIsFocused(true);
75
- popperStatus.onFocus(event);
75
+ popperStatus.onFocus();
76
76
  };
77
77
  const onBlur = (event) => {
78
78
  var _a, _b;
@@ -90,7 +90,7 @@ function useQueryInput(props, forwardedRef) {
90
90
  return;
91
91
  }
92
92
  setIsFocused(false);
93
- popperStatus.onBlur(event);
93
+ popperStatus.onBlur();
94
94
  };
95
95
  const onSelectedItemsChange = (newItems) => {
96
96
  const newItem = newItems == null ? void 0 : newItems.find(
@@ -1 +1 @@
1
- {"version":3,"file":"useQueryInput.js","sources":["../src/query-input/useQueryInput.ts"],"sourcesContent":["import { useControlled, useForkRef } from \"@salt-ds/core\";\nimport {\n type ChangeEventHandler,\n type FocusEventHandler,\n type ForwardedRef,\n type KeyboardEventHandler,\n type Ref,\n type RefObject,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useWidth } from \"../responsive\";\nimport type { QueryInputBodyProps } from \"./internal/QueryInputBody\";\nimport { usePopperStatus } from \"./internal/usePopperStatus\";\nimport type { ValueSelectorProps } from \"./internal/ValueSelector\";\nimport type { QueryInputProps } from \"./QueryInput\";\nimport type { QueryInputCategory, QueryInputItem } from \"./queryInputTypes\";\n\nexport type BooleanOperator = \"or\" | \"and\";\n\nexport interface UseQueryInputResult {\n queryInputProps: {\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n };\n queryInputBodyRef: Ref<HTMLDivElement>;\n queryInputBodyProps: QueryInputBodyProps;\n valueSelectorProps: ValueSelectorProps;\n}\n\nexport function useQueryInput(\n props: QueryInputProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n): UseQueryInputResult {\n const bodyRef = useRef<HTMLDivElement>(null);\n const popperRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [widthBodyRef, bodyWidth] = useWidth<HTMLDivElement>(true);\n\n const forkedRef1 = useForkRef<HTMLDivElement>(\n forwardedRef,\n bodyRef,\n ) as RefObject<HTMLDivElement>;\n const queryInputBodyRef = useForkRef<HTMLDivElement>(\n forkedRef1,\n widthBodyRef,\n );\n\n const [selectedItems, setSelectedItems] = useControlled({\n controlled: props.selectedItems,\n default: props.defaultSelectedItems || [],\n name: \"QueryInput\",\n state: \"selectedItems\",\n });\n\n const [booleanOperator, setBooleanOperator] = useControlled({\n controlled: props.booleanOperator,\n default: props.defaultBooleanOperator || \"and\",\n name: \"QueryInput\",\n state: \"booleanOperator\",\n });\n\n const popperStatus = usePopperStatus({\n initialOpen: false,\n autoClose: props.autoClose,\n });\n\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const [highlightedCategoryIndex, setHighlightedCategoryIndex] = useState(0);\n const [highlightedValueIndex, setHighlightedValueIndex] = useState(0);\n const [selectedCategory, setSelectedCategory] =\n useState<QueryInputCategory | null>(null);\n const searchListIndexPositions = useRef<Array<QueryInputCategory | string>>(\n [],\n );\n\n const onInputFocus: FocusEventHandler<HTMLInputElement> = (event) => {\n popperStatus.onFocus(event);\n setIsFocused(true);\n };\n\n const onInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n if (!inputRef.current) {\n return;\n }\n const relatedTarget = event.relatedTarget as Node | null;\n const isBodyFocused = bodyRef.current === relatedTarget;\n if (isBodyFocused) {\n inputRef.current.focus();\n return;\n }\n const isFocusWithinBody = bodyRef.current?.contains(relatedTarget);\n if (isFocusWithinBody) {\n return;\n }\n const isFocusWithinPopper = popperRef.current?.contains(relatedTarget);\n if (isFocusWithinPopper) {\n inputRef.current.focus();\n return;\n }\n setIsFocused(false);\n popperStatus.onBlur(event);\n };\n\n const onFocus: FocusEventHandler<HTMLDivElement> = (event) => {\n setIsFocused(true);\n popperStatus.onFocus(event);\n };\n\n const onBlur: FocusEventHandler<HTMLDivElement> = (event) => {\n const relatedTarget = event.relatedTarget as Node | null;\n const isBodyFocused = bodyRef.current === relatedTarget;\n if (isBodyFocused) {\n return;\n }\n const isFocusWithinBody = bodyRef.current?.contains(relatedTarget);\n if (isFocusWithinBody) {\n return;\n }\n const isFocusWithinPopper = popperRef.current?.contains(relatedTarget);\n if (isFocusWithinPopper) {\n return;\n }\n setIsFocused(false);\n popperStatus.onBlur(event);\n };\n\n const onSelectedItemsChange = (newItems: QueryInputItem[] | undefined) => {\n const newItem = newItems?.find(\n (item) => item.category == null && item.value === inputValue,\n );\n if (newItem) {\n setInputValue(\"\");\n }\n setSelectedItems(newItems || []);\n if (props.onChange) {\n props.onChange(newItems || []);\n }\n popperStatus.onChange();\n };\n\n const onBooleanOperatorChange = (operator: BooleanOperator) => {\n setBooleanOperator(operator);\n if (props.onBooleanOperatorChange) {\n props.onBooleanOperatorChange(operator);\n }\n };\n\n const onSelectedCategoryChange = (category: QueryInputCategory | null) => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n setSelectedCategory(category);\n };\n\n const [inputValue, setInputValue] = useState<string>(\"\");\n\n const searchListItems = useMemo(() => {\n const [searchListItems, indexPositions] = filterCategories(\n props.categories,\n inputValue,\n );\n searchListIndexPositions.current = indexPositions;\n return searchListItems;\n }, [props.categories, inputValue]);\n\n const onInputChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newInputValue = event.target.value;\n setInputValue(newInputValue);\n // If we have search results, the first index position will be a header\n setHighlightedIndex(searchListIndexPositions.current.length === 0 ? 0 : 1);\n };\n\n const searchListItemCount = useMemo(() => {\n return searchListItems.reduce(\n (acc, category) => acc + category.values.length,\n 0,\n );\n }, [searchListItems]);\n\n const onInputClear = () => {\n onSelectedItemsChange([]);\n };\n\n const onInputClick = () => {\n popperStatus.onClick();\n };\n\n const newItemFromSelected = (): QueryInputItem | undefined => {\n const i = highlightedIndex;\n for (const category of searchListItems) {\n if (i < category.values.length) {\n const value = category.values[i];\n return {\n category: category.name,\n value,\n };\n }\n }\n };\n\n const { displayedItemCount = 10 } = props;\n\n const onSearchListKeyDown = (key: string) => {\n switch (key) {\n case \"Home\":\n setHighlightedIndex(0);\n return;\n case \"End\":\n setHighlightedIndex(searchListItemCount);\n return;\n case \"ArrowUp\":\n setHighlightedIndex((i) =>\n prevSearchItemIndex(i, searchListIndexPositions.current),\n );\n return;\n case \"ArrowDown\":\n // setHighlightedIndex((i) => Math.min(searchListItemCount, i + 1));\n setHighlightedIndex((i) =>\n nextSearchItemIndex(i, searchListIndexPositions.current),\n );\n return;\n case \"PageDown\":\n setHighlightedIndex((i) =>\n Math.min(searchListItemCount, i + displayedItemCount),\n );\n return;\n case \"PageUp\":\n setHighlightedIndex((i) => Math.max(0, i - displayedItemCount));\n return;\n case \"Enter\":\n if (highlightedIndex === searchListItemCount) {\n const newItems = [\n ...selectedItems,\n { category: null, value: inputValue },\n ];\n onSelectedItemsChange(newItems);\n } else {\n if (highlightedIndex >= 0 && highlightedIndex < searchListItemCount) {\n const newItem = newItemFromSelected();\n if (newItem) {\n const newItems = [...selectedItems, newItem];\n onSelectedItemsChange(newItems);\n }\n }\n setInputValue(\"\");\n }\n return;\n default:\n return;\n }\n };\n\n const onCategoryListKeyDown = (key: string) => {\n switch (key) {\n case \"Home\":\n setHighlightedCategoryIndex(0);\n return;\n case \"End\":\n setHighlightedCategoryIndex(props.categories.length - 1);\n return;\n case \"ArrowUp\":\n setHighlightedCategoryIndex((i) => Math.max(0, i - 1));\n return;\n case \"ArrowDown\":\n setHighlightedCategoryIndex((i) =>\n Math.min(props.categories.length - 1, i + 1),\n );\n return;\n case \"PageUp\":\n setHighlightedCategoryIndex((i) => Math.max(0, i - displayedItemCount));\n return;\n case \"PageDown\":\n setHighlightedCategoryIndex((i) =>\n Math.min(props.categories.length - 1, i + displayedItemCount),\n );\n return;\n case \"Enter\":\n if (\n highlightedCategoryIndex >= 0 &&\n highlightedCategoryIndex < props.categories.length\n ) {\n const category = props.categories[highlightedCategoryIndex];\n setSelectedCategory(category);\n }\n return;\n case \"ArrowRight\":\n if (\n highlightedCategoryIndex >= 0 &&\n highlightedCategoryIndex < props.categories.length\n ) {\n const category = props.categories[highlightedCategoryIndex];\n setSelectedCategory(category);\n }\n return;\n default:\n return;\n }\n };\n\n const onValueListKeyDown = (key: string) => {\n switch (key) {\n case \"Home\":\n setHighlightedValueIndex(0);\n return;\n case \"End\":\n if (selectedCategory != null) {\n setHighlightedValueIndex(selectedCategory.values.length);\n }\n return;\n case \"ArrowUp\":\n setHighlightedValueIndex((i) => Math.max(0, i - 1));\n return;\n case \"ArrowDown\":\n setHighlightedValueIndex((i) => {\n if (selectedCategory != null) {\n return Math.min(selectedCategory.values.length, i + 1);\n }\n return i;\n });\n return;\n case \"PageUp\":\n setHighlightedValueIndex((i) => Math.max(0, i - displayedItemCount));\n return;\n case \"PageDown\":\n setHighlightedValueIndex((i) => {\n if (selectedCategory != null) {\n return Math.min(\n selectedCategory.values.length,\n i + displayedItemCount,\n );\n }\n return i;\n });\n return;\n case \"Enter\":\n if (highlightedValueIndex === 0 || selectedCategory == null) {\n setSelectedCategory(null);\n } else {\n const value = selectedCategory.values[highlightedValueIndex - 1];\n const newItems = selectedItems.filter(\n (item) =>\n !(\n item.category === selectedCategory.name && item.value === value\n ),\n );\n if (newItems.length === selectedItems.length) {\n newItems.push({ category: selectedCategory.name, value });\n }\n onSelectedItemsChange(newItems);\n }\n return;\n case \"ArrowLeft\":\n setSelectedCategory(null);\n return;\n default:\n return;\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n popperStatus.onKeyDown(event);\n let key = event.key;\n if (event.key === \" \" && event.ctrlKey) {\n key = \"Enter\";\n }\n const isSearchListActive = inputValue !== \"\";\n const isCategoryListActive = !isSearchListActive && !selectedCategory;\n const isValueListActive = !isSearchListActive && !isCategoryListActive;\n if (isSearchListActive) {\n onSearchListKeyDown(key);\n } else if (isCategoryListActive) {\n onCategoryListKeyDown(key);\n } else {\n onValueListKeyDown(key);\n }\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n case \"Enter\":\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n if (isValueListActive) {\n event.preventDefault();\n }\n break;\n case \"ArrowRight\":\n if (isCategoryListActive) {\n event.preventDefault();\n }\n break;\n case \"Escape\":\n setInputValue(\"\");\n }\n };\n\n const onValueToggle = (category: QueryInputCategory, value: string) => {\n const newItems = selectedItems.filter(\n (item) => !(item.category === category.name && item.value === value),\n );\n if (newItems.length === selectedItems.length) {\n newItems.push({ category: category.name, value });\n }\n onSelectedItemsChange(newItems);\n };\n\n return {\n queryInputBodyRef,\n queryInputProps: {\n onFocus,\n onBlur,\n },\n queryInputBodyProps: {\n inputRef: inputRef,\n disabled: props.disabled,\n selectedItems,\n onFocus,\n onBlur,\n onInputClick,\n onInputFocus,\n onInputBlur,\n onInputClear,\n inputValue,\n onInputChange,\n onSelectedItemsChange,\n onKeyDown,\n isFocused,\n booleanOperator,\n onBooleanOperatorChange,\n },\n valueSelectorProps: {\n isOpen: popperStatus.isOpen,\n categories: props.categories,\n selectedCategory,\n selectedItems,\n onValueToggle,\n onSearchListChange: onSelectedItemsChange,\n anchorElement: bodyRef.current,\n width: bodyWidth,\n onSelectedCategoryChange,\n popperRef,\n inputValue,\n highlightedIndex,\n visibleCategories: searchListItems,\n highlightedCategoryIndex,\n highlightedValueIndex,\n setHighlightedCategoryIndex,\n setHighlightedValueIndex,\n setHighlightedIndex,\n },\n };\n}\n\nfunction filterCategories(\n categories: QueryInputCategory[],\n inputValue?: string,\n): [QueryInputCategory[], Array<QueryInputCategory | string>] {\n // Note: if there is no input value, this List would not be display\n if (!inputValue) {\n return [categories, []];\n }\n const query = inputValue.toUpperCase();\n const visibleCategories: QueryInputCategory[] = [];\n const indexPositions: Array<QueryInputCategory | string> = [];\n for (const c of categories) {\n const values = c.values.filter((v) => v.toUpperCase().includes(query));\n if (values.length > 0) {\n const queryInputCategory = {\n name: c.name,\n values,\n };\n visibleCategories.push(queryInputCategory);\n indexPositions.push(queryInputCategory, ...values);\n }\n }\n return [visibleCategories, indexPositions];\n}\n\nfunction nextSearchItemIndex(\n index: number,\n indexPositions: Array<QueryInputCategory | string>,\n) {\n const nextIndex = index + 1;\n // Note: allow 1 for the extra ListItem we append to end of List\n if (nextIndex === indexPositions.length + 1) {\n return index;\n }\n if (nextIndex === indexPositions.length) {\n return nextIndex;\n }\n if (typeof indexPositions[nextIndex] === \"string\") {\n return nextIndex;\n }\n return nextIndex + 1;\n}\n\nfunction prevSearchItemIndex(\n index: number,\n indexPositions: Array<QueryInputCategory | string>,\n) {\n const nextIndex = index - 1;\n if (nextIndex === 0) {\n return index;\n }\n if (typeof indexPositions[nextIndex] === \"string\") {\n return nextIndex;\n }\n return nextIndex - 1;\n}\n"],"names":["useRef","useWidth","useForkRef","useControlled","usePopperStatus","useState","useMemo","searchListItems"],"mappings":"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"}
1
+ {"version":3,"file":"useQueryInput.js","sources":["../src/query-input/useQueryInput.ts"],"sourcesContent":["import { useControlled, useForkRef } from \"@salt-ds/core\";\nimport {\n type ChangeEventHandler,\n type FocusEventHandler,\n type ForwardedRef,\n type KeyboardEventHandler,\n type Ref,\n type RefObject,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { useWidth } from \"../responsive\";\nimport type { QueryInputBodyProps } from \"./internal/QueryInputBody\";\nimport { usePopperStatus } from \"./internal/usePopperStatus\";\nimport type { ValueSelectorProps } from \"./internal/ValueSelector\";\nimport type { QueryInputProps } from \"./QueryInput\";\nimport type { QueryInputCategory, QueryInputItem } from \"./queryInputTypes\";\n\nexport type BooleanOperator = \"or\" | \"and\";\n\nexport interface UseQueryInputResult {\n queryInputProps: {\n onFocus: FocusEventHandler<HTMLDivElement>;\n onBlur: FocusEventHandler<HTMLDivElement>;\n };\n queryInputBodyRef: Ref<HTMLDivElement>;\n queryInputBodyProps: QueryInputBodyProps;\n valueSelectorProps: ValueSelectorProps;\n}\n\nexport function useQueryInput(\n props: QueryInputProps,\n forwardedRef: ForwardedRef<HTMLDivElement>,\n): UseQueryInputResult {\n const bodyRef = useRef<HTMLDivElement>(null);\n const popperRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const [widthBodyRef, bodyWidth] = useWidth<HTMLDivElement>(true);\n\n const forkedRef1 = useForkRef<HTMLDivElement>(\n forwardedRef,\n bodyRef,\n ) as RefObject<HTMLDivElement>;\n const queryInputBodyRef = useForkRef<HTMLDivElement>(\n forkedRef1,\n widthBodyRef,\n );\n\n const [selectedItems, setSelectedItems] = useControlled({\n controlled: props.selectedItems,\n default: props.defaultSelectedItems || [],\n name: \"QueryInput\",\n state: \"selectedItems\",\n });\n\n const [booleanOperator, setBooleanOperator] = useControlled({\n controlled: props.booleanOperator,\n default: props.defaultBooleanOperator || \"and\",\n name: \"QueryInput\",\n state: \"booleanOperator\",\n });\n\n const popperStatus = usePopperStatus({\n initialOpen: false,\n autoClose: props.autoClose,\n });\n\n const [isFocused, setIsFocused] = useState<boolean>(false);\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n const [highlightedCategoryIndex, setHighlightedCategoryIndex] = useState(0);\n const [highlightedValueIndex, setHighlightedValueIndex] = useState(0);\n const [selectedCategory, setSelectedCategory] =\n useState<QueryInputCategory | null>(null);\n const searchListIndexPositions = useRef<Array<QueryInputCategory | string>>(\n [],\n );\n\n const onInputFocus: FocusEventHandler<HTMLInputElement> = () => {\n popperStatus.onFocus();\n setIsFocused(true);\n };\n\n const onInputBlur: FocusEventHandler<HTMLInputElement> = (event) => {\n if (!inputRef.current) {\n return;\n }\n const relatedTarget = event.relatedTarget as Node | null;\n const isBodyFocused = bodyRef.current === relatedTarget;\n if (isBodyFocused) {\n inputRef.current.focus();\n return;\n }\n const isFocusWithinBody = bodyRef.current?.contains(relatedTarget);\n if (isFocusWithinBody) {\n return;\n }\n const isFocusWithinPopper = popperRef.current?.contains(relatedTarget);\n if (isFocusWithinPopper) {\n inputRef.current.focus();\n return;\n }\n setIsFocused(false);\n popperStatus.onBlur();\n };\n\n const onFocus: FocusEventHandler<HTMLDivElement> = () => {\n setIsFocused(true);\n popperStatus.onFocus();\n };\n\n const onBlur: FocusEventHandler<HTMLDivElement> = (event) => {\n const relatedTarget = event.relatedTarget as Node | null;\n const isBodyFocused = bodyRef.current === relatedTarget;\n if (isBodyFocused) {\n return;\n }\n const isFocusWithinBody = bodyRef.current?.contains(relatedTarget);\n if (isFocusWithinBody) {\n return;\n }\n const isFocusWithinPopper = popperRef.current?.contains(relatedTarget);\n if (isFocusWithinPopper) {\n return;\n }\n setIsFocused(false);\n popperStatus.onBlur();\n };\n\n const onSelectedItemsChange = (newItems: QueryInputItem[] | undefined) => {\n const newItem = newItems?.find(\n (item) => item.category == null && item.value === inputValue,\n );\n if (newItem) {\n setInputValue(\"\");\n }\n setSelectedItems(newItems || []);\n if (props.onChange) {\n props.onChange(newItems || []);\n }\n popperStatus.onChange();\n };\n\n const onBooleanOperatorChange = (operator: BooleanOperator) => {\n setBooleanOperator(operator);\n if (props.onBooleanOperatorChange) {\n props.onBooleanOperatorChange(operator);\n }\n };\n\n const onSelectedCategoryChange = (category: QueryInputCategory | null) => {\n if (inputRef.current) {\n inputRef.current.focus();\n }\n setSelectedCategory(category);\n };\n\n const [inputValue, setInputValue] = useState<string>(\"\");\n\n const searchListItems = useMemo(() => {\n const [searchListItems, indexPositions] = filterCategories(\n props.categories,\n inputValue,\n );\n searchListIndexPositions.current = indexPositions;\n return searchListItems;\n }, [props.categories, inputValue]);\n\n const onInputChange: ChangeEventHandler<HTMLInputElement> = (event) => {\n const newInputValue = event.target.value;\n setInputValue(newInputValue);\n // If we have search results, the first index position will be a header\n setHighlightedIndex(searchListIndexPositions.current.length === 0 ? 0 : 1);\n };\n\n const searchListItemCount = useMemo(() => {\n return searchListItems.reduce(\n (acc, category) => acc + category.values.length,\n 0,\n );\n }, [searchListItems]);\n\n const onInputClear = () => {\n onSelectedItemsChange([]);\n };\n\n const onInputClick = () => {\n popperStatus.onClick();\n };\n\n const newItemFromSelected = (): QueryInputItem | undefined => {\n const i = highlightedIndex;\n for (const category of searchListItems) {\n if (i < category.values.length) {\n const value = category.values[i];\n return {\n category: category.name,\n value,\n };\n }\n }\n };\n\n const { displayedItemCount = 10 } = props;\n\n const onSearchListKeyDown = (key: string) => {\n switch (key) {\n case \"Home\":\n setHighlightedIndex(0);\n return;\n case \"End\":\n setHighlightedIndex(searchListItemCount);\n return;\n case \"ArrowUp\":\n setHighlightedIndex((i) =>\n prevSearchItemIndex(i, searchListIndexPositions.current),\n );\n return;\n case \"ArrowDown\":\n // setHighlightedIndex((i) => Math.min(searchListItemCount, i + 1));\n setHighlightedIndex((i) =>\n nextSearchItemIndex(i, searchListIndexPositions.current),\n );\n return;\n case \"PageDown\":\n setHighlightedIndex((i) =>\n Math.min(searchListItemCount, i + displayedItemCount),\n );\n return;\n case \"PageUp\":\n setHighlightedIndex((i) => Math.max(0, i - displayedItemCount));\n return;\n case \"Enter\":\n if (highlightedIndex === searchListItemCount) {\n const newItems = [\n ...selectedItems,\n { category: null, value: inputValue },\n ];\n onSelectedItemsChange(newItems);\n } else {\n if (highlightedIndex >= 0 && highlightedIndex < searchListItemCount) {\n const newItem = newItemFromSelected();\n if (newItem) {\n const newItems = [...selectedItems, newItem];\n onSelectedItemsChange(newItems);\n }\n }\n setInputValue(\"\");\n }\n return;\n default:\n return;\n }\n };\n\n const onCategoryListKeyDown = (key: string) => {\n switch (key) {\n case \"Home\":\n setHighlightedCategoryIndex(0);\n return;\n case \"End\":\n setHighlightedCategoryIndex(props.categories.length - 1);\n return;\n case \"ArrowUp\":\n setHighlightedCategoryIndex((i) => Math.max(0, i - 1));\n return;\n case \"ArrowDown\":\n setHighlightedCategoryIndex((i) =>\n Math.min(props.categories.length - 1, i + 1),\n );\n return;\n case \"PageUp\":\n setHighlightedCategoryIndex((i) => Math.max(0, i - displayedItemCount));\n return;\n case \"PageDown\":\n setHighlightedCategoryIndex((i) =>\n Math.min(props.categories.length - 1, i + displayedItemCount),\n );\n return;\n case \"Enter\":\n if (\n highlightedCategoryIndex >= 0 &&\n highlightedCategoryIndex < props.categories.length\n ) {\n const category = props.categories[highlightedCategoryIndex];\n setSelectedCategory(category);\n }\n return;\n case \"ArrowRight\":\n if (\n highlightedCategoryIndex >= 0 &&\n highlightedCategoryIndex < props.categories.length\n ) {\n const category = props.categories[highlightedCategoryIndex];\n setSelectedCategory(category);\n }\n return;\n default:\n return;\n }\n };\n\n const onValueListKeyDown = (key: string) => {\n switch (key) {\n case \"Home\":\n setHighlightedValueIndex(0);\n return;\n case \"End\":\n if (selectedCategory != null) {\n setHighlightedValueIndex(selectedCategory.values.length);\n }\n return;\n case \"ArrowUp\":\n setHighlightedValueIndex((i) => Math.max(0, i - 1));\n return;\n case \"ArrowDown\":\n setHighlightedValueIndex((i) => {\n if (selectedCategory != null) {\n return Math.min(selectedCategory.values.length, i + 1);\n }\n return i;\n });\n return;\n case \"PageUp\":\n setHighlightedValueIndex((i) => Math.max(0, i - displayedItemCount));\n return;\n case \"PageDown\":\n setHighlightedValueIndex((i) => {\n if (selectedCategory != null) {\n return Math.min(\n selectedCategory.values.length,\n i + displayedItemCount,\n );\n }\n return i;\n });\n return;\n case \"Enter\":\n if (highlightedValueIndex === 0 || selectedCategory == null) {\n setSelectedCategory(null);\n } else {\n const value = selectedCategory.values[highlightedValueIndex - 1];\n const newItems = selectedItems.filter(\n (item) =>\n !(\n item.category === selectedCategory.name && item.value === value\n ),\n );\n if (newItems.length === selectedItems.length) {\n newItems.push({ category: selectedCategory.name, value });\n }\n onSelectedItemsChange(newItems);\n }\n return;\n case \"ArrowLeft\":\n setSelectedCategory(null);\n return;\n default:\n return;\n }\n };\n\n const onKeyDown: KeyboardEventHandler<HTMLInputElement> = (event) => {\n popperStatus.onKeyDown(event);\n let key = event.key;\n if (event.key === \" \" && event.ctrlKey) {\n key = \"Enter\";\n }\n const isSearchListActive = inputValue !== \"\";\n const isCategoryListActive = !isSearchListActive && !selectedCategory;\n const isValueListActive = !isSearchListActive && !isCategoryListActive;\n if (isSearchListActive) {\n onSearchListKeyDown(key);\n } else if (isCategoryListActive) {\n onCategoryListKeyDown(key);\n } else {\n onValueListKeyDown(key);\n }\n switch (event.key) {\n case \"ArrowUp\":\n case \"ArrowDown\":\n case \"Enter\":\n event.preventDefault();\n break;\n case \"ArrowLeft\":\n if (isValueListActive) {\n event.preventDefault();\n }\n break;\n case \"ArrowRight\":\n if (isCategoryListActive) {\n event.preventDefault();\n }\n break;\n case \"Escape\":\n setInputValue(\"\");\n }\n };\n\n const onValueToggle = (category: QueryInputCategory, value: string) => {\n const newItems = selectedItems.filter(\n (item) => !(item.category === category.name && item.value === value),\n );\n if (newItems.length === selectedItems.length) {\n newItems.push({ category: category.name, value });\n }\n onSelectedItemsChange(newItems);\n };\n\n return {\n queryInputBodyRef,\n queryInputProps: {\n onFocus,\n onBlur,\n },\n queryInputBodyProps: {\n inputRef: inputRef,\n disabled: props.disabled,\n selectedItems,\n onFocus,\n onBlur,\n onInputClick,\n onInputFocus,\n onInputBlur,\n onInputClear,\n inputValue,\n onInputChange,\n onSelectedItemsChange,\n onKeyDown,\n isFocused,\n booleanOperator,\n onBooleanOperatorChange,\n },\n valueSelectorProps: {\n isOpen: popperStatus.isOpen,\n categories: props.categories,\n selectedCategory,\n selectedItems,\n onValueToggle,\n onSearchListChange: onSelectedItemsChange,\n anchorElement: bodyRef.current,\n width: bodyWidth,\n onSelectedCategoryChange,\n popperRef,\n inputValue,\n highlightedIndex,\n visibleCategories: searchListItems,\n highlightedCategoryIndex,\n highlightedValueIndex,\n setHighlightedCategoryIndex,\n setHighlightedValueIndex,\n setHighlightedIndex,\n },\n };\n}\n\nfunction filterCategories(\n categories: QueryInputCategory[],\n inputValue?: string,\n): [QueryInputCategory[], Array<QueryInputCategory | string>] {\n // Note: if there is no input value, this List would not be display\n if (!inputValue) {\n return [categories, []];\n }\n const query = inputValue.toUpperCase();\n const visibleCategories: QueryInputCategory[] = [];\n const indexPositions: Array<QueryInputCategory | string> = [];\n for (const c of categories) {\n const values = c.values.filter((v) => v.toUpperCase().includes(query));\n if (values.length > 0) {\n const queryInputCategory = {\n name: c.name,\n values,\n };\n visibleCategories.push(queryInputCategory);\n indexPositions.push(queryInputCategory, ...values);\n }\n }\n return [visibleCategories, indexPositions];\n}\n\nfunction nextSearchItemIndex(\n index: number,\n indexPositions: Array<QueryInputCategory | string>,\n) {\n const nextIndex = index + 1;\n // Note: allow 1 for the extra ListItem we append to end of List\n if (nextIndex === indexPositions.length + 1) {\n return index;\n }\n if (nextIndex === indexPositions.length) {\n return nextIndex;\n }\n if (typeof indexPositions[nextIndex] === \"string\") {\n return nextIndex;\n }\n return nextIndex + 1;\n}\n\nfunction prevSearchItemIndex(\n index: number,\n indexPositions: Array<QueryInputCategory | string>,\n) {\n const nextIndex = index - 1;\n if (nextIndex === 0) {\n return index;\n }\n if (typeof indexPositions[nextIndex] === \"string\") {\n return nextIndex;\n }\n return nextIndex - 1;\n}\n"],"names":["useRef","useWidth","useForkRef","useControlled","usePopperStatus","useState","useMemo","searchListItems"],"mappings":"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"}
@@ -34,8 +34,6 @@ const sourceItem = (item, id, index, options) => {
34
34
  const createSourceItems = (source, idRoot, options) => {
35
35
  if (Array.isArray(source)) {
36
36
  return source.map((item, index) => {
37
- var _a;
38
- (_a = options == null ? void 0 : options.getPriority) == null ? void 0 : _a.call(options, source, index);
39
37
  return sourceItem(item, `${idRoot}-${index}`, index, options);
40
38
  });
41
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OverflowReducer.js","sources":["../src/responsive/OverflowReducer.ts"],"sourcesContent":["/**\n * This reducer manages a collection of items that represent the content of an overflowable container.\n * The items are mostly content configured by the caller of the container, either data passed though\n * the source prop or as child elements. We also support 'injected' items. These allow for additional UI\n * controls to be inserted into the container, eg an 'Add Item' button.\n */\nimport {\n Children,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Reducer,\n} from \"react\";\n\nimport type {\n InjectedChildItem,\n InjectedSourceItem,\n OverflowCollectionOptions,\n OverflowItem,\n OverflowItems,\n OverflowSource,\n} from \"./overflowTypes\";\n\ninterface InitAction {\n type: \"init\";\n overflowItems?: OverflowItem[];\n}\n\ninterface SourceAction {\n type: \"add-source-item\";\n idRoot: string;\n source: any;\n}\ninterface AddChildAction {\n type: \"add-child-item\";\n idRoot: string;\n indexPosition?: number;\n element: ReactElement;\n}\ninterface RemoveItemAction {\n type: \"remove-item\";\n indexPosition: number;\n}\n\ninterface MultiItemAction {\n type: \"update-items\" | \"update-items-remove-overflow-indicator\";\n overflowItems: (Partial<Omit<OverflowItem, \"id\">> &\n Pick<OverflowItem, \"id\">)[];\n}\ninterface SingleItemAction {\n type:\n | \"add-overflow-indicator\"\n | \"replace-item\"\n | \"collapsing-item\"\n | \"uncollapse-dynamic-item\"\n | \"collapse-instant-item\";\n\n overflowItem: OverflowItem;\n}\n\ninterface CombinedItemAction {\n type: \"update-items-add-overflow-indicator\";\n overflowItem: OverflowItem<any>;\n overflowItems: OverflowItem[];\n}\n\ninterface EmptyPayloadAction {\n type: \"restore-collapsing-item\";\n}\ninterface DynamicCollapseAction extends Omit<SingleItemAction, \"type\"> {\n type: \"collapse-dynamic-item\";\n collapsedSize: number;\n minSize: number;\n}\n\nexport type OverflowAction =\n | AddChildAction\n | CombinedItemAction\n | DynamicCollapseAction\n | EmptyPayloadAction\n | InitAction\n | MultiItemAction\n | RemoveItemAction\n | SingleItemAction\n | SourceAction;\n\nconst DEFAULT_PRIORITY = 3;\n\nconst mapReactElementChildren = (\n children: ReactNode,\n fn: (el: ReactElement, index: number) => OverflowItem,\n): OverflowItem[] => {\n const childElements: OverflowItem[] = [];\n Children.forEach(children, (child, i) => {\n if (isValidElement(child)) {\n childElements.push(fn(child, i));\n }\n });\n return childElements;\n};\n\nconst sourceItem = (\n item: OverflowSource,\n id: string,\n index: number,\n options?: OverflowCollectionOptions,\n): OverflowItem<\"source\"> => {\n const priority =\n options?.getPriority?.(item, index) ?? item.priority ?? DEFAULT_PRIORITY;\n\n return {\n //TODO editable closeable configurable via item\n closeable: item.closeable || options?.closeable,\n editable: options?.editable,\n element: null,\n fullSize: null,\n id: item.id ?? id,\n index,\n label: item.label,\n position: item.position,\n priority,\n size: 0,\n source: item,\n type: \"source\",\n };\n};\n\nconst createSourceItems = (\n source: any,\n idRoot: string,\n options?: OverflowCollectionOptions,\n): OverflowItem<\"source\">[] | undefined => {\n if (Array.isArray(source)) {\n return source.map((item, index) => {\n const priority = options?.getPriority?.(source, index);\n return sourceItem(item, `${idRoot}-${index}`, index, options);\n });\n }\n};\n\ntype OverflowChild = {\n closeable?: boolean;\n disabled?: boolean;\n id?: string;\n label?: string;\n \"data-collapsible\"?: boolean;\n \"data-editable\"?: boolean;\n \"data-position\"?: number;\n \"data-priority\"?: string;\n};\n\nconst childItem = (\n child: ReactElement,\n id: string,\n index: number,\n options?: OverflowCollectionOptions,\n): OverflowItem<\"child\"> => {\n const {\n closeable,\n disabled,\n id: idProp,\n label,\n \"data-collapsible\": collapsible,\n \"data-editable\": editable,\n \"data-position\": dataPosition,\n \"data-priority\": dataPriority = \"2\",\n } = child.props as OverflowChild;\n\n const priority = options?.getPriority?.(child, index);\n\n return {\n closeable: closeable || options?.closeable,\n collapsible,\n editable: editable ? true : options?.editable,\n disabled,\n fullSize: null,\n id: idProp ?? id,\n index,\n element: child,\n label,\n position: dataPosition,\n priority: priority ?? Number.parseInt(dataPriority),\n size: 0,\n source: null,\n type: \"child\",\n } as OverflowItem;\n};\n\nconst createChildItems = (\n children: ReactNode,\n idRoot: string,\n options?: OverflowCollectionOptions,\n): OverflowItem<\"child\">[] | undefined => {\n if (children) {\n return mapReactElementChildren(children, (child, index) => {\n const id = `${idRoot}-${index}`;\n return childItem(child, id, index, options);\n });\n }\n};\n\nconst createInjectedContent = (\n items: Array<InjectedSourceItem | InjectedChildItem>,\n idRoot: string,\n startIndex: number,\n): OverflowItem<\"source\" | \"child\">[] => {\n return items.map((item, i) => {\n const index = startIndex + i;\n const id = `${idRoot}-${index}`;\n const { source } = item as InjectedSourceItem;\n if (source) {\n const injectedItem = sourceItem(source, id, index);\n injectedItem.isInjectedItem = true;\n return injectedItem;\n }\n const { element } = item as InjectedChildItem;\n const injectedItem = childItem(element, id, index);\n injectedItem.isInjectedItem = true;\n return injectedItem;\n });\n};\n\nexport type OverflowReducer = Reducer<OverflowItems, OverflowAction>;\n\nconst defaultOptions = {};\n\nexport type OverflowReducerInitialisationProps = {\n children?: ReactNode;\n source?: OverflowSource[];\n injectedItems?: any[];\n idRoot: string;\n options?: OverflowCollectionOptions;\n};\n\nexport const reducerInitialiser: (\n props: OverflowReducerInitialisationProps,\n) => OverflowItems = ({\n children,\n source,\n injectedItems = [],\n idRoot,\n options = defaultOptions,\n}) => {\n const providedContent: OverflowItems =\n createChildItems(children, idRoot, options) ||\n createSourceItems(source, idRoot, options) ||\n [];\n const injectedContent = createInjectedContent(\n injectedItems,\n idRoot,\n providedContent.length,\n );\n return providedContent.concat(injectedContent);\n};\n\nconst collapsingItem = (\n items: OverflowItem[],\n { overflowItem }: SingleItemAction,\n) =>\n items.map((item) =>\n item === overflowItem\n ? {\n ...item,\n collapsing: true,\n }\n : item,\n );\n\nconst uncollapseDynamicItem = (\n items: OverflowItem[],\n { overflowItem }: SingleItemAction,\n) =>\n items.map((item) =>\n item === overflowItem\n ? {\n ...item,\n collapsed: false,\n collapsing: true,\n size: item.fullSize as number,\n fullSize: null,\n }\n : item,\n );\n\nconst collapseInstantItem = (\n items: OverflowItem[],\n { overflowItem }: SingleItemAction,\n) =>\n items.map((item) =>\n item === overflowItem\n ? {\n ...item,\n collapsed: true,\n }\n : item,\n );\n\nconst replaceItem = (\n items: OverflowItem[],\n { overflowItem }: SingleItemAction,\n) =>\n items.map((item) =>\n item.index === overflowItem?.index ? overflowItem : item,\n );\n\nconst updateItems = (\n items: OverflowItem[],\n { overflowItems = [] }: MultiItemAction,\n) => {\n return items.map((item) => {\n const targetItem = overflowItems.find((i) => i.id === item.id);\n return targetItem ? { ...item, ...targetItem } : item;\n });\n};\n\nconst restoreCollapsingItem = (items: OverflowItem[]) => {\n const collapsingItem = items.find(\n ({ collapsible, collapsing }) => collapsible === \"dynamic\" && collapsing,\n );\n const collapsedItem = items.find(\n ({ collapsible, collapsed }) => collapsible === \"dynamic\" && collapsed,\n );\n return items.map((item) => {\n if (item === collapsingItem) {\n return {\n ...item,\n collapsing: false,\n };\n }\n if (item === collapsedItem) {\n return {\n ...item,\n collapsed: false,\n collapsing: true,\n };\n }\n return item;\n });\n};\n\nconst collapseDynamicItem = (\n items: OverflowItem[],\n { overflowItem, collapsedSize = 0, minSize = 0 }: DynamicCollapseAction,\n) => {\n const remainingUncollpasedItems = items.filter(\n (i) => i.collapsible === \"dynamic\" && !i.collapsed && i !== overflowItem,\n );\n const lastUncollapsedItem = remainingUncollpasedItems.pop();\n\n return items.map((item) => {\n if (item === overflowItem) {\n return {\n ...item,\n collapsing: false,\n collapsed: true,\n fullSize: item.size,\n minSize,\n size: collapsedSize,\n };\n }\n if (item === lastUncollapsedItem) {\n return {\n ...item,\n collapsing: true,\n };\n }\n return item;\n });\n};\n\nconst addSourceItem = (\n items: OverflowItem<any>[],\n { idRoot, source }: SourceAction,\n): OverflowItem[] => {\n const index = items.length;\n return items.concat(sourceItem(source, `${idRoot}-${index}`, index));\n};\n\nconst removeItem = (\n items: OverflowItem<any>[],\n { indexPosition }: RemoveItemAction,\n): OverflowItem[] => {\n return items.slice(0, indexPosition).concat(items.slice(indexPosition + 1));\n};\n\nconst addOverflowIndicator = (\n items: OverflowItem<any>[],\n { overflowItem }: SingleItemAction,\n) => {\n // Guard against accidental duplicate overflowIndicator\n if (!items.find((i) => i.isOverflowIndicator)) {\n if (items.find((i) => i.label === \"Add Tab\")) {\n const [addTab] = items.slice(-1);\n return items\n .slice(0, -1)\n .concat({ ...overflowItem, index: addTab.index })\n .concat({ ...addTab, index: overflowItem.index });\n }\n return items.concat(overflowItem);\n }\n return items;\n};\n\nexport const overflowReducer: OverflowReducer = (state, action) => {\n switch (action.type) {\n case \"init\":\n return action.overflowItems ?? state;\n case \"add-overflow-indicator\":\n return addOverflowIndicator(state, action);\n\n case \"update-items\":\n return updateItems(state, action);\n\n case \"replace-item\":\n return replaceItem(state, action);\n\n case \"update-items-add-overflow-indicator\":\n return addOverflowIndicator(\n updateItems(state, {\n type: \"update-items\",\n overflowItems: action.overflowItems,\n }),\n { type: \"add-overflow-indicator\", overflowItem: action.overflowItem },\n );\n\n case \"update-items-remove-overflow-indicator\":\n return updateItems(state, {\n type: \"update-items\",\n overflowItems: action.overflowItems,\n }).filter((item) => !item.isOverflowIndicator);\n\n case \"collapsing-item\":\n return collapsingItem(state, action);\n\n case \"collapse-dynamic-item\":\n return collapseDynamicItem(state, action);\n\n case \"uncollapse-dynamic-item\":\n return uncollapseDynamicItem(state, action);\n\n case \"restore-collapsing-item\":\n return restoreCollapsingItem(state);\n\n case \"collapse-instant-item\":\n return collapseInstantItem(state, action);\n\n case \"add-source-item\":\n return addSourceItem(state, action);\n\n case \"remove-item\":\n return removeItem(state, action);\n\n default:\n return state;\n }\n};\n"],"names":["Children","isValidElement","injectedItem","collapsingItem"],"mappings":"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"}
1
+ {"version":3,"file":"OverflowReducer.js","sources":["../src/responsive/OverflowReducer.ts"],"sourcesContent":["/**\n * This reducer manages a collection of items that represent the content of an overflowable container.\n * The items are mostly content configured by the caller of the container, either data passed though\n * the source prop or as child elements. We also support 'injected' items. These allow for additional UI\n * controls to be inserted into the container, eg an 'Add Item' button.\n */\nimport {\n Children,\n isValidElement,\n type ReactElement,\n type ReactNode,\n type Reducer,\n} from \"react\";\n\nimport type {\n InjectedChildItem,\n InjectedSourceItem,\n OverflowCollectionOptions,\n OverflowItem,\n OverflowItems,\n OverflowSource,\n} from \"./overflowTypes\";\n\ninterface InitAction {\n type: \"init\";\n overflowItems?: OverflowItem[];\n}\n\ninterface SourceAction {\n type: \"add-source-item\";\n idRoot: string;\n source: any;\n}\ninterface AddChildAction {\n type: \"add-child-item\";\n idRoot: string;\n indexPosition?: number;\n element: ReactElement;\n}\ninterface RemoveItemAction {\n type: \"remove-item\";\n indexPosition: number;\n}\n\ninterface MultiItemAction {\n type: \"update-items\" | \"update-items-remove-overflow-indicator\";\n overflowItems: (Partial<Omit<OverflowItem, \"id\">> &\n Pick<OverflowItem, \"id\">)[];\n}\ninterface SingleItemAction {\n type:\n | \"add-overflow-indicator\"\n | \"replace-item\"\n | \"collapsing-item\"\n | \"uncollapse-dynamic-item\"\n | \"collapse-instant-item\";\n\n overflowItem: OverflowItem;\n}\n\ninterface CombinedItemAction {\n type: \"update-items-add-overflow-indicator\";\n overflowItem: OverflowItem<any>;\n overflowItems: OverflowItem[];\n}\n\ninterface EmptyPayloadAction {\n type: \"restore-collapsing-item\";\n}\ninterface DynamicCollapseAction extends Omit<SingleItemAction, \"type\"> {\n type: \"collapse-dynamic-item\";\n collapsedSize: number;\n minSize: number;\n}\n\nexport type OverflowAction =\n | AddChildAction\n | CombinedItemAction\n | DynamicCollapseAction\n | EmptyPayloadAction\n | InitAction\n | MultiItemAction\n | RemoveItemAction\n | SingleItemAction\n | SourceAction;\n\nconst DEFAULT_PRIORITY = 3;\n\nconst mapReactElementChildren = (\n children: ReactNode,\n fn: (el: ReactElement, index: number) => OverflowItem,\n): OverflowItem[] => {\n const childElements: OverflowItem[] = [];\n Children.forEach(children, (child, i) => {\n if (isValidElement(child)) {\n childElements.push(fn(child, i));\n }\n });\n return childElements;\n};\n\nconst sourceItem = (\n item: OverflowSource,\n id: string,\n index: number,\n options?: OverflowCollectionOptions,\n): OverflowItem<\"source\"> => {\n const priority =\n options?.getPriority?.(item, index) ?? item.priority ?? DEFAULT_PRIORITY;\n\n return {\n //TODO editable closeable configurable via item\n closeable: item.closeable || options?.closeable,\n editable: options?.editable,\n element: null,\n fullSize: null,\n id: item.id ?? id,\n index,\n label: item.label,\n position: item.position,\n priority,\n size: 0,\n source: item,\n type: \"source\",\n };\n};\n\nconst createSourceItems = (\n source: any,\n idRoot: string,\n options?: OverflowCollectionOptions,\n): OverflowItem<\"source\">[] | undefined => {\n if (Array.isArray(source)) {\n return source.map((item, index) => {\n return sourceItem(item, `${idRoot}-${index}`, index, options);\n });\n }\n};\n\ntype OverflowChild = {\n closeable?: boolean;\n disabled?: boolean;\n id?: string;\n label?: string;\n \"data-collapsible\"?: boolean;\n \"data-editable\"?: boolean;\n \"data-position\"?: number;\n \"data-priority\"?: string;\n};\n\nconst childItem = (\n child: ReactElement,\n id: string,\n index: number,\n options?: OverflowCollectionOptions,\n): OverflowItem<\"child\"> => {\n const {\n closeable,\n disabled,\n id: idProp,\n label,\n \"data-collapsible\": collapsible,\n \"data-editable\": editable,\n \"data-position\": dataPosition,\n \"data-priority\": dataPriority = \"2\",\n } = child.props as OverflowChild;\n\n const priority = options?.getPriority?.(child, index);\n\n return {\n closeable: closeable || options?.closeable,\n collapsible,\n editable: editable ? true : options?.editable,\n disabled,\n fullSize: null,\n id: idProp ?? id,\n index,\n element: child,\n label,\n position: dataPosition,\n priority: priority ?? Number.parseInt(dataPriority),\n size: 0,\n source: null,\n type: \"child\",\n } as OverflowItem;\n};\n\nconst createChildItems = (\n children: ReactNode,\n idRoot: string,\n options?: OverflowCollectionOptions,\n): OverflowItem<\"child\">[] | undefined => {\n if (children) {\n return mapReactElementChildren(children, (child, index) => {\n const id = `${idRoot}-${index}`;\n return childItem(child, id, index, options);\n });\n }\n};\n\nconst createInjectedContent = (\n items: Array<InjectedSourceItem | InjectedChildItem>,\n idRoot: string,\n startIndex: number,\n): OverflowItem<\"source\" | \"child\">[] => {\n return items.map((item, i) => {\n const index = startIndex + i;\n const id = `${idRoot}-${index}`;\n const { source } = item as InjectedSourceItem;\n if (source) {\n const injectedItem = sourceItem(source, id, index);\n injectedItem.isInjectedItem = true;\n return injectedItem;\n }\n const { element } = item as InjectedChildItem;\n const injectedItem = childItem(element, id, index);\n injectedItem.isInjectedItem = true;\n return injectedItem;\n });\n};\n\nexport type OverflowReducer = Reducer<OverflowItems, OverflowAction>;\n\nconst defaultOptions = {};\n\nexport type OverflowReducerInitialisationProps = {\n children?: ReactNode;\n source?: OverflowSource[];\n injectedItems?: any[];\n idRoot: string;\n options?: OverflowCollectionOptions;\n};\n\nexport const reducerInitialiser: (\n props: OverflowReducerInitialisationProps,\n) => OverflowItems = ({\n children,\n source,\n injectedItems = [],\n idRoot,\n options = defaultOptions,\n}) => {\n const providedContent: OverflowItems =\n createChildItems(children, idRoot, options) ||\n createSourceItems(source, idRoot, options) ||\n [];\n const injectedContent = createInjectedContent(\n injectedItems,\n idRoot,\n providedContent.length,\n );\n return providedContent.concat(injectedContent);\n};\n\nconst collapsingItem = (\n items: OverflowItem[],\n { overflowItem }: SingleItemAction,\n) =>\n items.map((item) =>\n item === overflowItem\n ? {\n ...item,\n collapsing: true,\n }\n : item,\n );\n\nconst uncollapseDynamicItem = (\n items: OverflowItem[],\n { overflowItem }: SingleItemAction,\n) =>\n items.map((item) =>\n item === overflowItem\n ? {\n ...item,\n collapsed: false,\n collapsing: true,\n size: item.fullSize as number,\n fullSize: null,\n }\n : item,\n );\n\nconst collapseInstantItem = (\n items: OverflowItem[],\n { overflowItem }: SingleItemAction,\n) =>\n items.map((item) =>\n item === overflowItem\n ? {\n ...item,\n collapsed: true,\n }\n : item,\n );\n\nconst replaceItem = (\n items: OverflowItem[],\n { overflowItem }: SingleItemAction,\n) =>\n items.map((item) =>\n item.index === overflowItem?.index ? overflowItem : item,\n );\n\nconst updateItems = (\n items: OverflowItem[],\n { overflowItems = [] }: MultiItemAction,\n) => {\n return items.map((item) => {\n const targetItem = overflowItems.find((i) => i.id === item.id);\n return targetItem ? { ...item, ...targetItem } : item;\n });\n};\n\nconst restoreCollapsingItem = (items: OverflowItem[]) => {\n const collapsingItem = items.find(\n ({ collapsible, collapsing }) => collapsible === \"dynamic\" && collapsing,\n );\n const collapsedItem = items.find(\n ({ collapsible, collapsed }) => collapsible === \"dynamic\" && collapsed,\n );\n return items.map((item) => {\n if (item === collapsingItem) {\n return {\n ...item,\n collapsing: false,\n };\n }\n if (item === collapsedItem) {\n return {\n ...item,\n collapsed: false,\n collapsing: true,\n };\n }\n return item;\n });\n};\n\nconst collapseDynamicItem = (\n items: OverflowItem[],\n { overflowItem, collapsedSize = 0, minSize = 0 }: DynamicCollapseAction,\n) => {\n const remainingUncollpasedItems = items.filter(\n (i) => i.collapsible === \"dynamic\" && !i.collapsed && i !== overflowItem,\n );\n const lastUncollapsedItem = remainingUncollpasedItems.pop();\n\n return items.map((item) => {\n if (item === overflowItem) {\n return {\n ...item,\n collapsing: false,\n collapsed: true,\n fullSize: item.size,\n minSize,\n size: collapsedSize,\n };\n }\n if (item === lastUncollapsedItem) {\n return {\n ...item,\n collapsing: true,\n };\n }\n return item;\n });\n};\n\nconst addSourceItem = (\n items: OverflowItem<any>[],\n { idRoot, source }: SourceAction,\n): OverflowItem[] => {\n const index = items.length;\n return items.concat(sourceItem(source, `${idRoot}-${index}`, index));\n};\n\nconst removeItem = (\n items: OverflowItem<any>[],\n { indexPosition }: RemoveItemAction,\n): OverflowItem[] => {\n return items.slice(0, indexPosition).concat(items.slice(indexPosition + 1));\n};\n\nconst addOverflowIndicator = (\n items: OverflowItem<any>[],\n { overflowItem }: SingleItemAction,\n) => {\n // Guard against accidental duplicate overflowIndicator\n if (!items.find((i) => i.isOverflowIndicator)) {\n if (items.find((i) => i.label === \"Add Tab\")) {\n const [addTab] = items.slice(-1);\n return items\n .slice(0, -1)\n .concat({ ...overflowItem, index: addTab.index })\n .concat({ ...addTab, index: overflowItem.index });\n }\n return items.concat(overflowItem);\n }\n return items;\n};\n\nexport const overflowReducer: OverflowReducer = (state, action) => {\n switch (action.type) {\n case \"init\":\n return action.overflowItems ?? state;\n case \"add-overflow-indicator\":\n return addOverflowIndicator(state, action);\n\n case \"update-items\":\n return updateItems(state, action);\n\n case \"replace-item\":\n return replaceItem(state, action);\n\n case \"update-items-add-overflow-indicator\":\n return addOverflowIndicator(\n updateItems(state, {\n type: \"update-items\",\n overflowItems: action.overflowItems,\n }),\n { type: \"add-overflow-indicator\", overflowItem: action.overflowItem },\n );\n\n case \"update-items-remove-overflow-indicator\":\n return updateItems(state, {\n type: \"update-items\",\n overflowItems: action.overflowItems,\n }).filter((item) => !item.isOverflowIndicator);\n\n case \"collapsing-item\":\n return collapsingItem(state, action);\n\n case \"collapse-dynamic-item\":\n return collapseDynamicItem(state, action);\n\n case \"uncollapse-dynamic-item\":\n return uncollapseDynamicItem(state, action);\n\n case \"restore-collapsing-item\":\n return restoreCollapsingItem(state);\n\n case \"collapse-instant-item\":\n return collapseInstantItem(state, action);\n\n case \"add-source-item\":\n return addSourceItem(state, action);\n\n case \"remove-item\":\n return removeItem(state, action);\n\n default:\n return state;\n }\n};\n"],"names":["Children","isValidElement","injectedItem","collapsingItem"],"mappings":"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"}
@@ -114,9 +114,12 @@ const measureOverflowItems = (items, dimension) => {
114
114
  return items;
115
115
  };
116
116
  const addAll = (sum, m) => sum + m.size;
117
- const getElementForItem = (ref, item) => ref.current.querySelector(
118
- `:scope > [data-index='${item.index}']`
119
- );
117
+ const getElementForItem = (ref, item) => {
118
+ var _a;
119
+ return (_a = ref.current) == null ? void 0 : _a.querySelector(
120
+ `:scope > [data-index='${item.index}']`
121
+ );
122
+ };
120
123
  const getRuntimePadding = (el, ...dimensions) => {
121
124
  const targetStyle = getComputedStyle(el);
122
125
  return dimensions.map(
@@ -1 +1 @@
1
- {"version":3,"file":"overflowUtils.js","sources":["../src/responsive/overflowUtils.tsx"],"sourcesContent":["import type {\n ElementRef,\n OverflowItem,\n orientationType,\n} from \"./overflowTypes\";\n\nexport const DropdownPlaceholder = () => null;\nexport const getDropdownPlaceholder = () => <DropdownPlaceholder />;\n\nexport type heightOrWidth = \"width\" | \"height\";\nexport const NO_DATA = {};\nconst LEFT_RIGHT = [\"left\", \"right\"];\nconst TOP_BOTTOM = [\"top\", \"bottom\"];\n\nexport const allExceptOverflowIndicator = (sum: number, m: OverflowItem) =>\n sum + (m.isOverflowIndicator ? 0 : m.size);\n\nexport const isCollapsed = (item: OverflowItem): boolean =>\n item.collapsed === true;\nexport const isCollapsing = (item: OverflowItem): boolean =>\n item.collapsing === true;\nexport const isCollapsedOrCollapsing = (item: OverflowItem): boolean =>\n isCollapsed(item) || isCollapsing(item);\nexport const isOverflowed = (item: OverflowItem): boolean =>\n item.overflowed === true;\nexport const notOverflowed = (item: OverflowItem): boolean =>\n !isOverflowed(item);\n\nexport const isCollapsible = (item: OverflowItem) =>\n item.collapsible === \"instant\" || item.collapsible === \"dynamic\";\n\nexport const getIsOverflowed = (managedItems: OverflowItem[]) =>\n managedItems.some(isOverflowed);\n\nexport const measureContainer = (\n ref: ElementRef,\n orientation: orientationType = \"horizontal\",\n): {\n innerContainerSize: number;\n rootContainerDepth: number;\n innerContainerDepth: number;\n} => {\n const innerElement = ref.current as HTMLElement;\n const container = innerElement.parentElement;\n if (container) {\n const { width: innerWidth, height: innerHeight } =\n innerElement.getBoundingClientRect();\n const { width, height } = container.getBoundingClientRect();\n if (orientation === \"horizontal\") {\n return {\n innerContainerSize: innerWidth,\n rootContainerDepth: height,\n innerContainerDepth: innerHeight,\n };\n }\n return {\n innerContainerSize: innerHeight,\n rootContainerDepth: width,\n innerContainerDepth: innerWidth,\n };\n }\n throw Error(\"measureContainer, innerContainer has no parent element\");\n};\n\nconst isContainerOverflowing = (\n containerDepth: number,\n parentContainerDepth: number,\n innerElement: HTMLElement,\n orientation: orientationType,\n) => {\n const isHorizontal = orientation === \"horizontal\";\n // If true, this is a reliable indication of content wrapping, but the containerDepth\n // is not always correct\n if (containerDepth > parentContainerDepth) {\n return true;\n }\n // ... hence - expensive, but catches those situations where the containerDepth is wrong\n const { bottom, right } = innerElement.getBoundingClientRect();\n const maxPos = Array.from(innerElement.childNodes).reduce<number>(\n (maxVal, child) => {\n const rect = (child as HTMLElement).getBoundingClientRect();\n return Math.max(isHorizontal ? rect.bottom : rect.right, maxVal);\n },\n isHorizontal ? bottom : right,\n );\n return isHorizontal ? maxPos > bottom : maxPos > right;\n};\n\nexport const measureContainerOverflow = (\n ref: ElementRef,\n orientation: orientationType = \"horizontal\",\n): {\n isOverflowing: boolean;\n innerContainerSize: number;\n rootContainerDepth: number;\n} => {\n const { innerContainerDepth, innerContainerSize, rootContainerDepth } =\n measureContainer(ref, orientation);\n const innerElement = ref.current as HTMLElement;\n const isOverflowing = isContainerOverflowing(\n innerContainerDepth,\n rootContainerDepth,\n innerElement,\n orientation,\n );\n\n return { isOverflowing, innerContainerSize, rootContainerDepth };\n};\n\n/**\n * Compute element size including margin.\n * Exclude margin where this has been applied for alignment, via margin: auto\n * which can be identified by the data-pad-end, data-pad-start attributes.\n **/\nexport function measureElementSize(\n element: HTMLElement,\n dimension: heightOrWidth = \"width\",\n includeAutoMargin = false,\n): number {\n const { [dimension]: size } = element.getBoundingClientRect();\n const { padEnd = false, padStart = false } = element.dataset;\n const style = getComputedStyle(element);\n const [start, end] = dimension === \"width\" ? LEFT_RIGHT : TOP_BOTTOM;\n const marginStart =\n padStart && !includeAutoMargin\n ? 0\n : Number.parseInt(style.getPropertyValue(`margin-${start}`), 10);\n const marginEnd =\n padEnd && !includeAutoMargin\n ? 0\n : Number.parseInt(style.getPropertyValue(`margin-${end}`), 10);\n\n let minWidth = size;\n const flexShrink = Number.parseInt(style.getPropertyValue(\"flex-shrink\"), 10);\n if (flexShrink > 0) {\n const flexBasis = Number.parseInt(style.getPropertyValue(\"flex-basis\"), 10);\n // TODO should we consider percentage values ?\n // TODO are we still using flexBasis ?\n if (!Number.isNaN(flexBasis) && flexBasis > 0) {\n minWidth = flexBasis;\n }\n }\n\n return marginStart + minWidth + marginEnd;\n}\n\nexport const byDescendingPriority = (m1: OverflowItem, m2: OverflowItem) => {\n let result = m1.priority - m2.priority;\n if (result === 0) {\n result = m1.index - m2.index;\n }\n return result;\n};\n\n// Helper function to try and determine the display label for an overflow item\n// Currently, Tab uses data-text, so this works for any Tab. Need to decide\n// whether this is appropriate for other components.\n// Note: Tab uses data-text for another reason, it is not implemented there just to\n// support this function.\n// There may be an aria attribute we should use instead\n// function getElementText(element: HTMLElement) {\n// if (element.dataset.text) {\n// return element.dataset.text;\n// }\n// const textNode = element.querySelector(\"[data-text]\") as HTMLElement;\n// if (textNode) {\n// return textNode.dataset.text;\n// }\n// return \"\";\n// }\n// const asCollapsibleType = (value?: string): collapsibleType | undefined =>\n// value === \"instant\" || value == \"dynamic\"\n// ? (value as collapsibleType)\n// : undefined;\n\nexport const getOverflowIndicator = (managedItems: OverflowItem[]) =>\n managedItems.find((item) => item.isOverflowIndicator);\n\n// TODO whats the right way to deduce the label. AccessibleText added\n// to eg delete button makes innerText unreliable.\n// const getLabelForElement = (element: HTMLElement) =>\n// element.title || getElementText(element) || element.innerText;\n\nconst getPriority = (item: OverflowItem) => item.priority;\n\nexport const popNextItemByPriority = (\n items: OverflowItem[],\n): OverflowItem | null => {\n const maxPriority = Math.max(...items.map(getPriority));\n for (let i = items.length - 1; i >= 0; i--) {\n if (!items[i].isOverflowIndicator && items[i].priority === maxPriority) {\n return items.splice(i, 1)[0];\n }\n }\n return null;\n};\n\nexport const measureOverflowItems = (\n items: OverflowItem[],\n dimension: heightOrWidth,\n): OverflowItem[] => {\n const measurements = items.map(({ id }) => {\n const childElement = document.getElementById(id);\n const size = childElement ? measureElementSize(childElement, dimension) : 0;\n return size;\n });\n\n if (measurements.some((size, i) => size !== items[i].size)) {\n return items.map((item, i) =>\n item.size === measurements[i]\n ? item\n : {\n ...item,\n size: measurements[i],\n },\n );\n }\n return items;\n};\n\nexport const addAll = (sum: number, m: OverflowItem): number => sum + m.size;\n\nexport const getElementForItem = (ref: ElementRef, item: OverflowItem) =>\n ref.current!.querySelector(\n `:scope > [data-index='${item.index}']`,\n ) as HTMLElement;\n\ntype dimension = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport const getRuntimePadding = (\n el: HTMLElement,\n ...dimensions: dimension[]\n): number[] => {\n const targetStyle = getComputedStyle(el);\n return dimensions.map((dimension) =>\n Number.parseInt(targetStyle.getPropertyValue(`padding-${dimension}`), 10),\n );\n};\n"],"names":["jsx"],"mappings":"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"}
1
+ {"version":3,"file":"overflowUtils.js","sources":["../src/responsive/overflowUtils.tsx"],"sourcesContent":["import type {\n ElementRef,\n OverflowItem,\n orientationType,\n} from \"./overflowTypes\";\n\nexport const DropdownPlaceholder = () => null;\nexport const getDropdownPlaceholder = () => <DropdownPlaceholder />;\n\nexport type heightOrWidth = \"width\" | \"height\";\nexport const NO_DATA = {};\nconst LEFT_RIGHT = [\"left\", \"right\"];\nconst TOP_BOTTOM = [\"top\", \"bottom\"];\n\nexport const allExceptOverflowIndicator = (sum: number, m: OverflowItem) =>\n sum + (m.isOverflowIndicator ? 0 : m.size);\n\nexport const isCollapsed = (item: OverflowItem): boolean =>\n item.collapsed === true;\nexport const isCollapsing = (item: OverflowItem): boolean =>\n item.collapsing === true;\nexport const isCollapsedOrCollapsing = (item: OverflowItem): boolean =>\n isCollapsed(item) || isCollapsing(item);\nexport const isOverflowed = (item: OverflowItem): boolean =>\n item.overflowed === true;\nexport const notOverflowed = (item: OverflowItem): boolean =>\n !isOverflowed(item);\n\nexport const isCollapsible = (item: OverflowItem) =>\n item.collapsible === \"instant\" || item.collapsible === \"dynamic\";\n\nexport const getIsOverflowed = (managedItems: OverflowItem[]) =>\n managedItems.some(isOverflowed);\n\nexport const measureContainer = (\n ref: ElementRef,\n orientation: orientationType = \"horizontal\",\n): {\n innerContainerSize: number;\n rootContainerDepth: number;\n innerContainerDepth: number;\n} => {\n const innerElement = ref.current as HTMLElement;\n const container = innerElement.parentElement;\n if (container) {\n const { width: innerWidth, height: innerHeight } =\n innerElement.getBoundingClientRect();\n const { width, height } = container.getBoundingClientRect();\n if (orientation === \"horizontal\") {\n return {\n innerContainerSize: innerWidth,\n rootContainerDepth: height,\n innerContainerDepth: innerHeight,\n };\n }\n return {\n innerContainerSize: innerHeight,\n rootContainerDepth: width,\n innerContainerDepth: innerWidth,\n };\n }\n throw Error(\"measureContainer, innerContainer has no parent element\");\n};\n\nconst isContainerOverflowing = (\n containerDepth: number,\n parentContainerDepth: number,\n innerElement: HTMLElement,\n orientation: orientationType,\n) => {\n const isHorizontal = orientation === \"horizontal\";\n // If true, this is a reliable indication of content wrapping, but the containerDepth\n // is not always correct\n if (containerDepth > parentContainerDepth) {\n return true;\n }\n // ... hence - expensive, but catches those situations where the containerDepth is wrong\n const { bottom, right } = innerElement.getBoundingClientRect();\n const maxPos = Array.from(innerElement.childNodes).reduce<number>(\n (maxVal, child) => {\n const rect = (child as HTMLElement).getBoundingClientRect();\n return Math.max(isHorizontal ? rect.bottom : rect.right, maxVal);\n },\n isHorizontal ? bottom : right,\n );\n return isHorizontal ? maxPos > bottom : maxPos > right;\n};\n\nexport const measureContainerOverflow = (\n ref: ElementRef,\n orientation: orientationType = \"horizontal\",\n): {\n isOverflowing: boolean;\n innerContainerSize: number;\n rootContainerDepth: number;\n} => {\n const { innerContainerDepth, innerContainerSize, rootContainerDepth } =\n measureContainer(ref, orientation);\n const innerElement = ref.current as HTMLElement;\n const isOverflowing = isContainerOverflowing(\n innerContainerDepth,\n rootContainerDepth,\n innerElement,\n orientation,\n );\n\n return { isOverflowing, innerContainerSize, rootContainerDepth };\n};\n\n/**\n * Compute element size including margin.\n * Exclude margin where this has been applied for alignment, via margin: auto\n * which can be identified by the data-pad-end, data-pad-start attributes.\n **/\nexport function measureElementSize(\n element: HTMLElement,\n dimension: heightOrWidth = \"width\",\n includeAutoMargin = false,\n): number {\n const { [dimension]: size } = element.getBoundingClientRect();\n const { padEnd = false, padStart = false } = element.dataset;\n const style = getComputedStyle(element);\n const [start, end] = dimension === \"width\" ? LEFT_RIGHT : TOP_BOTTOM;\n const marginStart =\n padStart && !includeAutoMargin\n ? 0\n : Number.parseInt(style.getPropertyValue(`margin-${start}`), 10);\n const marginEnd =\n padEnd && !includeAutoMargin\n ? 0\n : Number.parseInt(style.getPropertyValue(`margin-${end}`), 10);\n\n let minWidth = size;\n const flexShrink = Number.parseInt(style.getPropertyValue(\"flex-shrink\"), 10);\n if (flexShrink > 0) {\n const flexBasis = Number.parseInt(style.getPropertyValue(\"flex-basis\"), 10);\n // TODO should we consider percentage values ?\n // TODO are we still using flexBasis ?\n if (!Number.isNaN(flexBasis) && flexBasis > 0) {\n minWidth = flexBasis;\n }\n }\n\n return marginStart + minWidth + marginEnd;\n}\n\nexport const byDescendingPriority = (m1: OverflowItem, m2: OverflowItem) => {\n let result = m1.priority - m2.priority;\n if (result === 0) {\n result = m1.index - m2.index;\n }\n return result;\n};\n\n// Helper function to try and determine the display label for an overflow item\n// Currently, Tab uses data-text, so this works for any Tab. Need to decide\n// whether this is appropriate for other components.\n// Note: Tab uses data-text for another reason, it is not implemented there just to\n// support this function.\n// There may be an aria attribute we should use instead\n// function getElementText(element: HTMLElement) {\n// if (element.dataset.text) {\n// return element.dataset.text;\n// }\n// const textNode = element.querySelector(\"[data-text]\") as HTMLElement;\n// if (textNode) {\n// return textNode.dataset.text;\n// }\n// return \"\";\n// }\n// const asCollapsibleType = (value?: string): collapsibleType | undefined =>\n// value === \"instant\" || value == \"dynamic\"\n// ? (value as collapsibleType)\n// : undefined;\n\nexport const getOverflowIndicator = (managedItems: OverflowItem[]) =>\n managedItems.find((item) => item.isOverflowIndicator);\n\n// TODO whats the right way to deduce the label. AccessibleText added\n// to eg delete button makes innerText unreliable.\n// const getLabelForElement = (element: HTMLElement) =>\n// element.title || getElementText(element) || element.innerText;\n\nconst getPriority = (item: OverflowItem) => item.priority;\n\nexport const popNextItemByPriority = (\n items: OverflowItem[],\n): OverflowItem | null => {\n const maxPriority = Math.max(...items.map(getPriority));\n for (let i = items.length - 1; i >= 0; i--) {\n if (!items[i].isOverflowIndicator && items[i].priority === maxPriority) {\n return items.splice(i, 1)[0];\n }\n }\n return null;\n};\n\nexport const measureOverflowItems = (\n items: OverflowItem[],\n dimension: heightOrWidth,\n): OverflowItem[] => {\n const measurements = items.map(({ id }) => {\n const childElement = document.getElementById(id);\n const size = childElement ? measureElementSize(childElement, dimension) : 0;\n return size;\n });\n\n if (measurements.some((size, i) => size !== items[i].size)) {\n return items.map((item, i) =>\n item.size === measurements[i]\n ? item\n : {\n ...item,\n size: measurements[i],\n },\n );\n }\n return items;\n};\n\nexport const addAll = (sum: number, m: OverflowItem): number => sum + m.size;\n\nexport const getElementForItem = (ref: ElementRef, item: OverflowItem) =>\n ref.current?.querySelector<HTMLElement>(\n `:scope > [data-index='${item.index}']`,\n );\n\ntype dimension = \"left\" | \"right\" | \"top\" | \"bottom\";\n\nexport const getRuntimePadding = (\n el: HTMLElement,\n ...dimensions: dimension[]\n): number[] => {\n const targetStyle = getComputedStyle(el);\n return dimensions.map((dimension) =>\n Number.parseInt(targetStyle.getPropertyValue(`padding-${dimension}`), 10),\n );\n};\n"],"names":["jsx"],"mappings":"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"}
@@ -62,13 +62,16 @@ const useDynamicCollapse = ({
62
62
  if (containerHasGrown && collapsedChild) {
63
63
  const collapsingElement = overflowUtils.getElementForItem(ref, collapsingChild);
64
64
  const dimension = orientation === "horizontal" ? "width" : "height";
65
- const size = overflowUtils.measureElementSize(collapsingElement, dimension);
66
- if (collapsedChild && size === collapsingChild.size) {
67
- restoreCollapsingItem();
65
+ if (collapsingElement) {
66
+ const size = overflowUtils.measureElementSize(collapsingElement, dimension);
67
+ if (collapsedChild && size === collapsingChild.size) {
68
+ restoreCollapsingItem();
69
+ }
68
70
  }
69
71
  } else {
70
72
  const dimension = orientation === "horizontal" ? "width" : "height";
71
73
  const collapsingElement = overflowUtils.getElementForItem(ref, collapsingChild);
74
+ if (!collapsingElement) return;
72
75
  const { [dimension]: measuredSizeOfCollapsingElement } = collapsingElement.getBoundingClientRect();
73
76
  const [padStart, padEnd] = overflowUtils.getRuntimePadding(
74
77
  collapsingElement,