@salt-ds/lab 1.0.0-alpha.76 → 1.0.0-alpha.78

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 (686) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/css/salt-lab.css +274 -79
  3. package/dist-cjs/app-header/AppHeader.js.map +1 -1
  4. package/dist-cjs/breadcrumbs/Breadcrumb.js.map +1 -1
  5. package/dist-cjs/breadcrumbs/Breadcrumbs.js.map +1 -1
  6. package/dist-cjs/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  7. package/dist-cjs/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
  8. package/dist-cjs/breadcrumbs/internal/BreadcrumbsSeparator.js.map +1 -1
  9. package/dist-cjs/breadcrumbs/internal/useFocusMenuRemount.js.map +1 -1
  10. package/dist-cjs/button-bar/ButtonBar.js.map +1 -1
  11. package/dist-cjs/button-bar/OrderedButton.js.map +1 -1
  12. package/dist-cjs/button-bar/internal/ButtonBarContext.js.map +1 -1
  13. package/dist-cjs/button-bar/internal/DescendantContext.js.map +1 -1
  14. package/dist-cjs/button-bar/internal/useDescendant.js.map +1 -1
  15. package/dist-cjs/button-bar/internal/useDescendants.js.map +1 -1
  16. package/dist-cjs/calendar/Calendar.css.js +1 -1
  17. package/dist-cjs/calendar/Calendar.js +11 -2
  18. package/dist-cjs/calendar/Calendar.js.map +1 -1
  19. package/dist-cjs/calendar/CalendarGrid.js +38 -36
  20. package/dist-cjs/calendar/CalendarGrid.js.map +1 -1
  21. package/dist-cjs/calendar/CalendarMonthHeader.js +1 -1
  22. package/dist-cjs/calendar/CalendarMonthHeader.js.map +1 -1
  23. package/dist-cjs/calendar/CalendarNavigation.css.js +1 -1
  24. package/dist-cjs/calendar/CalendarNavigation.js +20 -13
  25. package/dist-cjs/calendar/CalendarNavigation.js.map +1 -1
  26. package/dist-cjs/calendar/CalendarWeekHeader.css.js +1 -1
  27. package/dist-cjs/calendar/CalendarWeekHeader.js +1 -1
  28. package/dist-cjs/calendar/CalendarWeekHeader.js.map +1 -1
  29. package/dist-cjs/calendar/internal/CalendarContext.js.map +1 -1
  30. package/dist-cjs/calendar/internal/CalendarDay.css.js +1 -1
  31. package/dist-cjs/calendar/internal/CalendarDay.js +26 -36
  32. package/dist-cjs/calendar/internal/CalendarDay.js.map +1 -1
  33. package/dist-cjs/calendar/internal/CalendarMonth.css.js +1 -1
  34. package/dist-cjs/calendar/internal/CalendarMonth.js +30 -9
  35. package/dist-cjs/calendar/internal/CalendarMonth.js.map +1 -1
  36. package/dist-cjs/calendar/internal/useFocusManagement.js.map +1 -1
  37. package/dist-cjs/calendar/internal/utils.js.map +1 -1
  38. package/dist-cjs/calendar/useCalendar.js +7 -9
  39. package/dist-cjs/calendar/useCalendar.js.map +1 -1
  40. package/dist-cjs/calendar/useCalendarDay.js +7 -11
  41. package/dist-cjs/calendar/useCalendarDay.js.map +1 -1
  42. package/dist-cjs/calendar/useCalendarSelection.js +144 -76
  43. package/dist-cjs/calendar/useCalendarSelection.js.map +1 -1
  44. package/dist-cjs/cascading-menu/CascadingMenu.js.map +1 -1
  45. package/dist-cjs/cascading-menu/CascadingMenuItem.js.map +1 -1
  46. package/dist-cjs/cascading-menu/CascadingMenuList.js.map +1 -1
  47. package/dist-cjs/cascading-menu/internal/CascadingMenuAction.js.map +1 -1
  48. package/dist-cjs/cascading-menu/internal/keydownHandlers.js.map +1 -1
  49. package/dist-cjs/cascading-menu/internal/menuPositioning.js.map +1 -1
  50. package/dist-cjs/cascading-menu/internal/stateUtils.js.map +1 -1
  51. package/dist-cjs/cascading-menu/internal/useClickAway.js.map +1 -1
  52. package/dist-cjs/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  53. package/dist-cjs/cascading-menu/internal/useMountedRef.js.map +1 -1
  54. package/dist-cjs/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  55. package/dist-cjs/cascading-menu/internal/useRefsManager.js.map +1 -1
  56. package/dist-cjs/cascading-menu/internal/useStateReducer.js.map +1 -1
  57. package/dist-cjs/cascading-menu/stateChangeTypes.js.map +1 -1
  58. package/dist-cjs/color-chooser/AlphaInputField.js.map +1 -1
  59. package/dist-cjs/color-chooser/Color.js.map +1 -1
  60. package/dist-cjs/color-chooser/ColorChooser.js.map +1 -1
  61. package/dist-cjs/color-chooser/ColorHelpers.js.map +1 -1
  62. package/dist-cjs/color-chooser/ColorPicker.js.map +1 -1
  63. package/dist-cjs/color-chooser/DictTabs.js.map +1 -1
  64. package/dist-cjs/color-chooser/GetColorPalettes.js.map +1 -1
  65. package/dist-cjs/color-chooser/HexInput.js.map +1 -1
  66. package/dist-cjs/color-chooser/RGBAInput.js.map +1 -1
  67. package/dist-cjs/color-chooser/RGBAInputField.js.map +1 -1
  68. package/dist-cjs/color-chooser/Swatch.js.map +1 -1
  69. package/dist-cjs/color-chooser/Swatches.js.map +1 -1
  70. package/dist-cjs/color-chooser/SwatchesPicker.js.map +1 -1
  71. package/dist-cjs/color-chooser/color-utils.js.map +1 -1
  72. package/dist-cjs/color-chooser/colorMap.js.map +1 -1
  73. package/dist-cjs/color-chooser/createTabsMapping.js.map +1 -1
  74. package/dist-cjs/combo-box/ComboBox.js.map +1 -1
  75. package/dist-cjs/combo-box/useCombobox.js.map +1 -1
  76. package/dist-cjs/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  77. package/dist-cjs/combo-box-deprecated/filterHelpers.js.map +1 -1
  78. package/dist-cjs/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  79. package/dist-cjs/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  80. package/dist-cjs/combo-box-deprecated/internal/useComboBox.js.map +1 -1
  81. package/dist-cjs/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  82. package/dist-cjs/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
  83. package/dist-cjs/common-hooks/calcPreferredHeight.js.map +1 -1
  84. package/dist-cjs/common-hooks/collectionProvider.js.map +1 -1
  85. package/dist-cjs/common-hooks/itemToString.js.map +1 -1
  86. package/dist-cjs/common-hooks/keyUtils.js.map +1 -1
  87. package/dist-cjs/common-hooks/list-dom-utils.js.map +1 -1
  88. package/dist-cjs/common-hooks/selectionTypes.js.map +1 -1
  89. package/dist-cjs/common-hooks/useAutoSizer.js.map +1 -1
  90. package/dist-cjs/common-hooks/useCollapsibleGroups.js.map +1 -1
  91. package/dist-cjs/common-hooks/useCollectionItems.js.map +1 -1
  92. package/dist-cjs/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  93. package/dist-cjs/common-hooks/useKeyboardNavigation.js.map +1 -1
  94. package/dist-cjs/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  95. package/dist-cjs/common-hooks/useSelection.js.map +1 -1
  96. package/dist-cjs/common-hooks/useTypeahead.js.map +1 -1
  97. package/dist-cjs/common-hooks/useViewportTracking.js.map +1 -1
  98. package/dist-cjs/common-hooks/utils/collection-item-utils.js.map +1 -1
  99. package/dist-cjs/common-hooks/utils/filter-utils.js.map +1 -1
  100. package/dist-cjs/common-hooks/utils/isSelected.js.map +1 -1
  101. package/dist-cjs/contact-details/ContactAction.js.map +1 -1
  102. package/dist-cjs/contact-details/ContactActions.js.map +1 -1
  103. package/dist-cjs/contact-details/ContactAvatar.js.map +1 -1
  104. package/dist-cjs/contact-details/ContactDetails.js.map +1 -1
  105. package/dist-cjs/contact-details/ContactFavoriteToggle.js.map +1 -1
  106. package/dist-cjs/contact-details/ContactMetadata.js.map +1 -1
  107. package/dist-cjs/contact-details/ContactMetadataItem.js.map +1 -1
  108. package/dist-cjs/contact-details/ContactPrimaryInfo.js.map +1 -1
  109. package/dist-cjs/contact-details/ContactSecondaryInfo.js.map +1 -1
  110. package/dist-cjs/contact-details/ContactTertiaryInfo.js.map +1 -1
  111. package/dist-cjs/contact-details/MailLinkComponent.js.map +1 -1
  112. package/dist-cjs/contact-details/internal/ContactDetailsContext.js.map +1 -1
  113. package/dist-cjs/contact-details/internal/FavoriteToggle.js.map +1 -1
  114. package/dist-cjs/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
  115. package/dist-cjs/contact-details/internal/StarIcon.js.map +1 -1
  116. package/dist-cjs/contact-details/internal/StarIconContainer.js.map +1 -1
  117. package/dist-cjs/contact-details/internal/useComponentSize.js.map +1 -1
  118. package/dist-cjs/content-status/ContentStatus.js.map +1 -1
  119. package/dist-cjs/content-status/internal/StatusIndicator.js.map +1 -1
  120. package/dist-cjs/date-input/DateInputRange.js +3 -2
  121. package/dist-cjs/date-input/DateInputRange.js.map +1 -1
  122. package/dist-cjs/date-input/DateInputSingle.js +5 -2
  123. package/dist-cjs/date-input/DateInputSingle.js.map +1 -1
  124. package/dist-cjs/date-picker/DatePicker.js +0 -2
  125. package/dist-cjs/date-picker/DatePicker.js.map +1 -1
  126. package/dist-cjs/date-picker/DatePickerActions.js +1 -1
  127. package/dist-cjs/date-picker/DatePickerActions.js.map +1 -1
  128. package/dist-cjs/date-picker/DatePickerContext.js.map +1 -1
  129. package/dist-cjs/date-picker/DatePickerHelperText.js.map +1 -1
  130. package/dist-cjs/date-picker/DatePickerOverlay.js.map +1 -1
  131. package/dist-cjs/date-picker/DatePickerOverlayProvider.js.map +1 -1
  132. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js +2 -3
  133. package/dist-cjs/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  134. package/dist-cjs/date-picker/DatePickerRangeInput.js +22 -8
  135. package/dist-cjs/date-picker/DatePickerRangeInput.js.map +1 -1
  136. package/dist-cjs/date-picker/DatePickerRangePanel.js +2 -4
  137. package/dist-cjs/date-picker/DatePickerRangePanel.js.map +1 -1
  138. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js +2 -4
  139. package/dist-cjs/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  140. package/dist-cjs/date-picker/DatePickerSingleInput.js +12 -7
  141. package/dist-cjs/date-picker/DatePickerSingleInput.js.map +1 -1
  142. package/dist-cjs/date-picker/DatePickerSinglePanel.js.map +1 -1
  143. package/dist-cjs/date-picker/DatePickerTrigger.js.map +1 -1
  144. package/dist-cjs/date-picker/useDatePicker.js +0 -17
  145. package/dist-cjs/date-picker/useDatePicker.js.map +1 -1
  146. package/dist-cjs/date-picker/useFocusOut.js.map +1 -1
  147. package/dist-cjs/date-picker/useKeyboard.js.map +1 -1
  148. package/dist-cjs/deck-item/DeckItem.js.map +1 -1
  149. package/dist-cjs/deck-layout/DeckLayout.js.map +1 -1
  150. package/dist-cjs/dropdown/Dropdown.js.map +1 -1
  151. package/dist-cjs/dropdown/DropdownBase.js.map +1 -1
  152. package/dist-cjs/dropdown/DropdownButton.js.map +1 -1
  153. package/dist-cjs/dropdown/useClickAway.js.map +1 -1
  154. package/dist-cjs/dropdown/useDropdown.js.map +1 -1
  155. package/dist-cjs/dropdown/useDropdownBase.js.map +1 -1
  156. package/dist-cjs/editable-label/EditableLabel.js.map +1 -1
  157. package/dist-cjs/form-field-context-legacy/FormFieldLegacyContext.js.map +1 -1
  158. package/dist-cjs/form-field-context-legacy/useFormFieldLegacyProps.js.map +1 -1
  159. package/dist-cjs/form-field-legacy/FormActivationIndicator.js.map +1 -1
  160. package/dist-cjs/form-field-legacy/FormFieldLegacy.js.map +1 -1
  161. package/dist-cjs/form-field-legacy/FormHelperText.js.map +1 -1
  162. package/dist-cjs/form-field-legacy/FormLabel.js.map +1 -1
  163. package/dist-cjs/form-field-legacy/NecessityIndicator.js.map +1 -1
  164. package/dist-cjs/form-field-legacy/StatusIndicator.js.map +1 -1
  165. package/dist-cjs/form-field-legacy/constant.js.map +1 -1
  166. package/dist-cjs/form-group/FormGroup.js.map +1 -1
  167. package/dist-cjs/formatted-input/FormattedInput.js.map +1 -1
  168. package/dist-cjs/formatted-input/internal/InputWithMask.js.map +1 -1
  169. package/dist-cjs/input-legacy/InputLegacy.js.map +1 -1
  170. package/dist-cjs/input-legacy/StaticInputAdornment.js.map +1 -1
  171. package/dist-cjs/input-legacy/useCursorOnFocus.js.map +1 -1
  172. package/dist-cjs/layer-layout/LayerLayout.js.map +1 -1
  173. package/dist-cjs/list/Highlighter.js.map +1 -1
  174. package/dist-cjs/list/List.js.map +1 -1
  175. package/dist-cjs/list/ListItem.js.map +1 -1
  176. package/dist-cjs/list/ListItemGroup.js.map +1 -1
  177. package/dist-cjs/list/ListItemHeader.js.map +1 -1
  178. package/dist-cjs/list/VirtualizedList.js.map +1 -1
  179. package/dist-cjs/list/keyset.js.map +1 -1
  180. package/dist-cjs/list/useList.js.map +1 -1
  181. package/dist-cjs/list/useListHeight.js.map +1 -1
  182. package/dist-cjs/list/useVirtualization.js.map +1 -1
  183. package/dist-cjs/list-deprecated/List.js.map +1 -1
  184. package/dist-cjs/list-deprecated/ListBase.js.map +1 -1
  185. package/dist-cjs/list-deprecated/ListItem.js.map +1 -1
  186. package/dist-cjs/list-deprecated/ListItemBase.js.map +1 -1
  187. package/dist-cjs/list-deprecated/ListItemContext.js.map +1 -1
  188. package/dist-cjs/list-deprecated/ListStateContext.js.map +1 -1
  189. package/dist-cjs/list-deprecated/internal/DescendantContext.js.map +1 -1
  190. package/dist-cjs/list-deprecated/internal/Highlighter.js.map +1 -1
  191. package/dist-cjs/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
  192. package/dist-cjs/list-deprecated/internal/helpers.js.map +1 -1
  193. package/dist-cjs/list-deprecated/internal/scrollIntoView.js.map +1 -1
  194. package/dist-cjs/list-deprecated/internal/useListAutoSizer.js.map +1 -1
  195. package/dist-cjs/list-deprecated/internal/useWidth.js.map +1 -1
  196. package/dist-cjs/list-deprecated/itemToString.js.map +1 -1
  197. package/dist-cjs/list-deprecated/useList.js.map +1 -1
  198. package/dist-cjs/list-deprecated/useListItem.js.map +1 -1
  199. package/dist-cjs/list-deprecated/useTypeSelect.js.map +1 -1
  200. package/dist-cjs/list-next/ListItemNext.js.map +1 -1
  201. package/dist-cjs/list-next/ListNext.js.map +1 -1
  202. package/dist-cjs/list-next/ListNextContext.js.map +1 -1
  203. package/dist-cjs/list-next/useList.js.map +1 -1
  204. package/dist-cjs/localization-provider/LocalizationProvider.js.map +1 -1
  205. package/dist-cjs/logo/Logo.js.map +1 -1
  206. package/dist-cjs/logo/LogoImage.js.map +1 -1
  207. package/dist-cjs/logo/LogoSeparator.js.map +1 -1
  208. package/dist-cjs/menu-button/MenuButton.js.map +1 -1
  209. package/dist-cjs/menu-button/MenuButtonTrigger.js.map +1 -1
  210. package/dist-cjs/metric/Metric.js.map +1 -1
  211. package/dist-cjs/metric/MetricContent.js.map +1 -1
  212. package/dist-cjs/metric/MetricHeader.js.map +1 -1
  213. package/dist-cjs/metric/internal/MetricContext.js.map +1 -1
  214. package/dist-cjs/number-input/NumberInput.js.map +1 -1
  215. package/dist-cjs/number-input/internal/useActivateWhileMouseDown.js.map +1 -1
  216. package/dist-cjs/number-input/internal/useCaret.js.map +1 -1
  217. package/dist-cjs/number-input/internal/useInterval.js.map +1 -1
  218. package/dist-cjs/number-input/internal/utils.js.map +1 -1
  219. package/dist-cjs/number-input/useNumberInput.js.map +1 -1
  220. package/dist-cjs/portal/Portal.js.map +1 -1
  221. package/dist-cjs/query-input/QueryInput.js.map +1 -1
  222. package/dist-cjs/query-input/internal/CategoryList.js.map +1 -1
  223. package/dist-cjs/query-input/internal/CategoryListContext.js.map +1 -1
  224. package/dist-cjs/query-input/internal/CategoryListItem.js.map +1 -1
  225. package/dist-cjs/query-input/internal/QueryInputBody.js.map +1 -1
  226. package/dist-cjs/query-input/internal/SearchList.js.map +1 -1
  227. package/dist-cjs/query-input/internal/ValueList.js.map +1 -1
  228. package/dist-cjs/query-input/internal/ValueSelector.js.map +1 -1
  229. package/dist-cjs/query-input/internal/usePopperStatus.js.map +1 -1
  230. package/dist-cjs/query-input/useQueryInput.js.map +1 -1
  231. package/dist-cjs/responsive/OverflowReducer.js.map +1 -1
  232. package/dist-cjs/responsive/overflowUtils.js.map +1 -1
  233. package/dist-cjs/responsive/useDynamicCollapse.js.map +1 -1
  234. package/dist-cjs/responsive/useInstantCollapse.js.map +1 -1
  235. package/dist-cjs/responsive/useOverflow.js.map +1 -1
  236. package/dist-cjs/responsive/useOverflowCollectionItems.js.map +1 -1
  237. package/dist-cjs/responsive/useOverflowLayout.js.map +1 -1
  238. package/dist-cjs/responsive/useReclaimSpace.js.map +1 -1
  239. package/dist-cjs/responsive/useResizeObserver.js.map +1 -1
  240. package/dist-cjs/responsive/useWidth.js.map +1 -1
  241. package/dist-cjs/responsive/utils.js.map +1 -1
  242. package/dist-cjs/search-input/SearchInput.js.map +1 -1
  243. package/dist-cjs/static-list/StaticList.js.map +1 -1
  244. package/dist-cjs/static-list/StaticListItem.js.map +1 -1
  245. package/dist-cjs/static-list/StaticListItemContent.js.map +1 -1
  246. package/dist-cjs/system-status/SystemStatus.js.map +1 -1
  247. package/dist-cjs/system-status/SystemStatusActions.js.map +1 -1
  248. package/dist-cjs/system-status/SystemStatusContent.js.map +1 -1
  249. package/dist-cjs/table/TBody.js.map +1 -1
  250. package/dist-cjs/table/TD.js +6 -2
  251. package/dist-cjs/table/TD.js.map +1 -1
  252. package/dist-cjs/table/TFoot.js.map +1 -1
  253. package/dist-cjs/table/TH.js +6 -2
  254. package/dist-cjs/table/TH.js.map +1 -1
  255. package/dist-cjs/table/THead.js.map +1 -1
  256. package/dist-cjs/table/TR.js.map +1 -1
  257. package/dist-cjs/table/Table.css.js +1 -1
  258. package/dist-cjs/table/Table.js +2 -2
  259. package/dist-cjs/table/Table.js.map +1 -1
  260. package/dist-cjs/tabs/Tab.js.map +1 -1
  261. package/dist-cjs/tabs/TabActivationIndicator.js.map +1 -1
  262. package/dist-cjs/tabs/TabPanel.js.map +1 -1
  263. package/dist-cjs/tabs/Tabs.js.map +1 -1
  264. package/dist-cjs/tabs/Tabstrip.js.map +1 -1
  265. package/dist-cjs/tabs/drag-drop/Draggable.js.map +1 -1
  266. package/dist-cjs/tabs/drag-drop/drag-utils.js.map +1 -1
  267. package/dist-cjs/tabs/drag-drop/dragDropTypes.js.map +1 -1
  268. package/dist-cjs/tabs/drag-drop/useDragDrop.js.map +1 -1
  269. package/dist-cjs/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  270. package/dist-cjs/tabs/drag-drop/useDragSpacers.js.map +1 -1
  271. package/dist-cjs/tabs/useActivationIndicator.js.map +1 -1
  272. package/dist-cjs/tabs/useEditableItem.js.map +1 -1
  273. package/dist-cjs/tabs/useItemsWithIds.js.map +1 -1
  274. package/dist-cjs/tabs/useKeyboardNavigation.js.map +1 -1
  275. package/dist-cjs/tabs/useSelection.js.map +1 -1
  276. package/dist-cjs/tabs/useTabs.js.map +1 -1
  277. package/dist-cjs/tabs/useTabstrip.js.map +1 -1
  278. package/dist-cjs/tabs-next/TabBar.js.map +1 -1
  279. package/dist-cjs/tabs-next/TabListNext.js.map +1 -1
  280. package/dist-cjs/tabs-next/TabNext.js.map +1 -1
  281. package/dist-cjs/tabs-next/TabNextAction.js.map +1 -1
  282. package/dist-cjs/tabs-next/TabNextContext.js.map +1 -1
  283. package/dist-cjs/tabs-next/TabNextPanel.js.map +1 -1
  284. package/dist-cjs/tabs-next/TabNextTrigger.css.js +1 -1
  285. package/dist-cjs/tabs-next/TabNextTrigger.js.map +1 -1
  286. package/dist-cjs/tabs-next/TabOverflowList.js.map +1 -1
  287. package/dist-cjs/tabs-next/TabsNext.js.map +1 -1
  288. package/dist-cjs/tabs-next/TabsNextContext.js.map +1 -1
  289. package/dist-cjs/tabs-next/hooks/useCollection.js.map +1 -1
  290. package/dist-cjs/tabs-next/hooks/useFocusOutside.js.map +1 -1
  291. package/dist-cjs/tabs-next/hooks/useOverflow.js.map +1 -1
  292. package/dist-cjs/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
  293. package/dist-cjs/toast-group/ToastGroup.js.map +1 -1
  294. package/dist-cjs/tokenized-input/TokenizedInput.js.map +1 -1
  295. package/dist-cjs/tokenized-input/TokenizedInputBase.js.map +1 -1
  296. package/dist-cjs/tokenized-input/internal/InputPill.js.map +1 -1
  297. package/dist-cjs/tokenized-input/internal/InputRuler.js.map +1 -1
  298. package/dist-cjs/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
  299. package/dist-cjs/tokenized-input/internal/defaultItemToString.js.map +1 -1
  300. package/dist-cjs/tokenized-input/internal/getCursorPosition.js.map +1 -1
  301. package/dist-cjs/tokenized-input/internal/isPlainObject.js.map +1 -1
  302. package/dist-cjs/tokenized-input/internal/useResizeObserver.js.map +1 -1
  303. package/dist-cjs/tokenized-input/internal/useWidth.js.map +1 -1
  304. package/dist-cjs/tokenized-input/useTokenizedInput.js.map +1 -1
  305. package/dist-cjs/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  306. package/dist-cjs/tokenized-input-next/internal/InputPill.js.map +1 -1
  307. package/dist-cjs/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
  308. package/dist-cjs/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
  309. package/dist-cjs/tokenized-input-next/internal/useWidth.js.map +1 -1
  310. package/dist-cjs/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
  311. package/dist-cjs/toolbar/Toolbar.js.map +1 -1
  312. package/dist-cjs/toolbar/ToolbarButton.js.map +1 -1
  313. package/dist-cjs/toolbar/Tooltray.js.map +1 -1
  314. package/dist-cjs/toolbar/internal/renderToolbarItems.js.map +1 -1
  315. package/dist-cjs/toolbar/internal/renderTrayTools.js.map +1 -1
  316. package/dist-cjs/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  317. package/dist-cjs/toolbar/overflow-panel/OverflowSeparator.js.map +1 -1
  318. package/dist-cjs/toolbar/toolbar-field/ToolbarField.js.map +1 -1
  319. package/dist-cjs/toolbar/toolbar-field/useToolbarField.js.map +1 -1
  320. package/dist-cjs/tree/Tree.js.map +1 -1
  321. package/dist-cjs/tree/TreeNode.js.map +1 -1
  322. package/dist-cjs/tree/use-tree-keyboard-navigation.js.map +1 -1
  323. package/dist-cjs/tree/useTree.js.map +1 -1
  324. package/dist-cjs/utils/escapeRegExp.js.map +1 -1
  325. package/dist-cjs/utils/forwardCallbackProps.js.map +1 -1
  326. package/dist-cjs/utils/isEmail.js.map +1 -1
  327. package/dist-cjs/utils/isPlainObject.js.map +1 -1
  328. package/dist-cjs/utils/partition.js.map +1 -1
  329. package/dist-cjs/utils/useClickOutside.js.map +1 -1
  330. package/dist-cjs/utils/useEventCallback.js.map +1 -1
  331. package/dist-cjs/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
  332. package/dist-cjs/utils/useLayoutEffectOnce.js.map +1 -1
  333. package/dist-cjs/utils/useLayoutEffectSkipFirst.js.map +1 -1
  334. package/dist-cjs/utils/useOverflowDetection.js.map +1 -1
  335. package/dist-cjs/utils/useSlideSelection.js.map +1 -1
  336. package/dist-cjs/window/ElectronWindow.js.map +1 -1
  337. package/dist-cjs/window/WindowContext.js.map +1 -1
  338. package/dist-cjs/window/desktop-utils.js.map +1 -1
  339. package/dist-es/app-header/AppHeader.js.map +1 -1
  340. package/dist-es/breadcrumbs/Breadcrumb.js.map +1 -1
  341. package/dist-es/breadcrumbs/Breadcrumbs.js.map +1 -1
  342. package/dist-es/breadcrumbs/internal/BreadcrumbsCollapsed.js.map +1 -1
  343. package/dist-es/breadcrumbs/internal/BreadcrumbsContext.js.map +1 -1
  344. package/dist-es/breadcrumbs/internal/BreadcrumbsSeparator.js.map +1 -1
  345. package/dist-es/breadcrumbs/internal/useFocusMenuRemount.js.map +1 -1
  346. package/dist-es/button-bar/ButtonBar.js.map +1 -1
  347. package/dist-es/button-bar/OrderedButton.js.map +1 -1
  348. package/dist-es/button-bar/internal/ButtonBarContext.js.map +1 -1
  349. package/dist-es/button-bar/internal/DescendantContext.js.map +1 -1
  350. package/dist-es/button-bar/internal/useDescendant.js.map +1 -1
  351. package/dist-es/button-bar/internal/useDescendants.js.map +1 -1
  352. package/dist-es/calendar/Calendar.css.js +1 -1
  353. package/dist-es/calendar/Calendar.js +12 -3
  354. package/dist-es/calendar/Calendar.js.map +1 -1
  355. package/dist-es/calendar/CalendarGrid.js +39 -37
  356. package/dist-es/calendar/CalendarGrid.js.map +1 -1
  357. package/dist-es/calendar/CalendarMonthHeader.js +1 -1
  358. package/dist-es/calendar/CalendarMonthHeader.js.map +1 -1
  359. package/dist-es/calendar/CalendarNavigation.css.js +1 -1
  360. package/dist-es/calendar/CalendarNavigation.js +21 -14
  361. package/dist-es/calendar/CalendarNavigation.js.map +1 -1
  362. package/dist-es/calendar/CalendarWeekHeader.css.js +1 -1
  363. package/dist-es/calendar/CalendarWeekHeader.js +2 -2
  364. package/dist-es/calendar/CalendarWeekHeader.js.map +1 -1
  365. package/dist-es/calendar/internal/CalendarContext.js.map +1 -1
  366. package/dist-es/calendar/internal/CalendarDay.css.js +1 -1
  367. package/dist-es/calendar/internal/CalendarDay.js +27 -37
  368. package/dist-es/calendar/internal/CalendarDay.js.map +1 -1
  369. package/dist-es/calendar/internal/CalendarMonth.css.js +1 -1
  370. package/dist-es/calendar/internal/CalendarMonth.js +31 -10
  371. package/dist-es/calendar/internal/CalendarMonth.js.map +1 -1
  372. package/dist-es/calendar/internal/useFocusManagement.js.map +1 -1
  373. package/dist-es/calendar/internal/utils.js.map +1 -1
  374. package/dist-es/calendar/useCalendar.js +7 -9
  375. package/dist-es/calendar/useCalendar.js.map +1 -1
  376. package/dist-es/calendar/useCalendarDay.js +7 -11
  377. package/dist-es/calendar/useCalendarDay.js.map +1 -1
  378. package/dist-es/calendar/useCalendarSelection.js +144 -76
  379. package/dist-es/calendar/useCalendarSelection.js.map +1 -1
  380. package/dist-es/cascading-menu/CascadingMenu.js.map +1 -1
  381. package/dist-es/cascading-menu/CascadingMenuItem.js.map +1 -1
  382. package/dist-es/cascading-menu/CascadingMenuList.js.map +1 -1
  383. package/dist-es/cascading-menu/internal/CascadingMenuAction.js.map +1 -1
  384. package/dist-es/cascading-menu/internal/keydownHandlers.js.map +1 -1
  385. package/dist-es/cascading-menu/internal/menuPositioning.js.map +1 -1
  386. package/dist-es/cascading-menu/internal/stateUtils.js.map +1 -1
  387. package/dist-es/cascading-menu/internal/useClickAway.js.map +1 -1
  388. package/dist-es/cascading-menu/internal/useMenuTriggerHandlers.js.map +1 -1
  389. package/dist-es/cascading-menu/internal/useMountedRef.js.map +1 -1
  390. package/dist-es/cascading-menu/internal/useMouseHandlers.js.map +1 -1
  391. package/dist-es/cascading-menu/internal/useRefsManager.js.map +1 -1
  392. package/dist-es/cascading-menu/internal/useStateReducer.js.map +1 -1
  393. package/dist-es/cascading-menu/stateChangeTypes.js.map +1 -1
  394. package/dist-es/color-chooser/AlphaInputField.js.map +1 -1
  395. package/dist-es/color-chooser/Color.js.map +1 -1
  396. package/dist-es/color-chooser/ColorChooser.js.map +1 -1
  397. package/dist-es/color-chooser/ColorHelpers.js.map +1 -1
  398. package/dist-es/color-chooser/ColorPicker.js.map +1 -1
  399. package/dist-es/color-chooser/DictTabs.js.map +1 -1
  400. package/dist-es/color-chooser/GetColorPalettes.js.map +1 -1
  401. package/dist-es/color-chooser/HexInput.js.map +1 -1
  402. package/dist-es/color-chooser/RGBAInput.js.map +1 -1
  403. package/dist-es/color-chooser/RGBAInputField.js.map +1 -1
  404. package/dist-es/color-chooser/Swatch.js.map +1 -1
  405. package/dist-es/color-chooser/Swatches.js.map +1 -1
  406. package/dist-es/color-chooser/SwatchesPicker.js.map +1 -1
  407. package/dist-es/color-chooser/color-utils.js.map +1 -1
  408. package/dist-es/color-chooser/colorMap.js.map +1 -1
  409. package/dist-es/color-chooser/createTabsMapping.js.map +1 -1
  410. package/dist-es/combo-box/ComboBox.js.map +1 -1
  411. package/dist-es/combo-box/useCombobox.js.map +1 -1
  412. package/dist-es/combo-box-deprecated/ComboBoxDeprecated.js.map +1 -1
  413. package/dist-es/combo-box-deprecated/filterHelpers.js.map +1 -1
  414. package/dist-es/combo-box-deprecated/internal/DefaultComboBox.js.map +1 -1
  415. package/dist-es/combo-box-deprecated/internal/MultiSelectComboBox.js.map +1 -1
  416. package/dist-es/combo-box-deprecated/internal/useComboBox.js.map +1 -1
  417. package/dist-es/combo-box-deprecated/internal/useMultiSelectComboBox.js.map +1 -1
  418. package/dist-es/combo-box-deprecated/internal/usePopperStatus.js.map +1 -1
  419. package/dist-es/common-hooks/calcPreferredHeight.js.map +1 -1
  420. package/dist-es/common-hooks/collectionProvider.js.map +1 -1
  421. package/dist-es/common-hooks/itemToString.js.map +1 -1
  422. package/dist-es/common-hooks/keyUtils.js.map +1 -1
  423. package/dist-es/common-hooks/list-dom-utils.js.map +1 -1
  424. package/dist-es/common-hooks/selectionTypes.js.map +1 -1
  425. package/dist-es/common-hooks/useAutoSizer.js.map +1 -1
  426. package/dist-es/common-hooks/useCollapsibleGroups.js.map +1 -1
  427. package/dist-es/common-hooks/useCollectionItems.js.map +1 -1
  428. package/dist-es/common-hooks/useImperativeScrollingAPI.js.map +1 -1
  429. package/dist-es/common-hooks/useKeyboardNavigation.js.map +1 -1
  430. package/dist-es/common-hooks/useKeyboardNavigationPanel.js.map +1 -1
  431. package/dist-es/common-hooks/useSelection.js.map +1 -1
  432. package/dist-es/common-hooks/useTypeahead.js.map +1 -1
  433. package/dist-es/common-hooks/useViewportTracking.js.map +1 -1
  434. package/dist-es/common-hooks/utils/collection-item-utils.js.map +1 -1
  435. package/dist-es/common-hooks/utils/filter-utils.js.map +1 -1
  436. package/dist-es/common-hooks/utils/isSelected.js.map +1 -1
  437. package/dist-es/contact-details/ContactAction.js.map +1 -1
  438. package/dist-es/contact-details/ContactActions.js.map +1 -1
  439. package/dist-es/contact-details/ContactAvatar.js.map +1 -1
  440. package/dist-es/contact-details/ContactDetails.js.map +1 -1
  441. package/dist-es/contact-details/ContactFavoriteToggle.js.map +1 -1
  442. package/dist-es/contact-details/ContactMetadata.js.map +1 -1
  443. package/dist-es/contact-details/ContactMetadataItem.js.map +1 -1
  444. package/dist-es/contact-details/ContactPrimaryInfo.js.map +1 -1
  445. package/dist-es/contact-details/ContactSecondaryInfo.js.map +1 -1
  446. package/dist-es/contact-details/ContactTertiaryInfo.js.map +1 -1
  447. package/dist-es/contact-details/MailLinkComponent.js.map +1 -1
  448. package/dist-es/contact-details/internal/ContactDetailsContext.js.map +1 -1
  449. package/dist-es/contact-details/internal/FavoriteToggle.js.map +1 -1
  450. package/dist-es/contact-details/internal/FavoriteToggleWithTooltip.js.map +1 -1
  451. package/dist-es/contact-details/internal/StarIcon.js.map +1 -1
  452. package/dist-es/contact-details/internal/StarIconContainer.js.map +1 -1
  453. package/dist-es/contact-details/internal/useComponentSize.js.map +1 -1
  454. package/dist-es/content-status/ContentStatus.js.map +1 -1
  455. package/dist-es/content-status/internal/StatusIndicator.js.map +1 -1
  456. package/dist-es/date-input/DateInputRange.js +3 -2
  457. package/dist-es/date-input/DateInputRange.js.map +1 -1
  458. package/dist-es/date-input/DateInputSingle.js +5 -2
  459. package/dist-es/date-input/DateInputSingle.js.map +1 -1
  460. package/dist-es/date-picker/DatePicker.js +0 -2
  461. package/dist-es/date-picker/DatePicker.js.map +1 -1
  462. package/dist-es/date-picker/DatePickerActions.js +1 -1
  463. package/dist-es/date-picker/DatePickerActions.js.map +1 -1
  464. package/dist-es/date-picker/DatePickerContext.js.map +1 -1
  465. package/dist-es/date-picker/DatePickerHelperText.js.map +1 -1
  466. package/dist-es/date-picker/DatePickerOverlay.js.map +1 -1
  467. package/dist-es/date-picker/DatePickerOverlayProvider.js.map +1 -1
  468. package/dist-es/date-picker/DatePickerRangeGridPanel.js +2 -3
  469. package/dist-es/date-picker/DatePickerRangeGridPanel.js.map +1 -1
  470. package/dist-es/date-picker/DatePickerRangeInput.js +22 -8
  471. package/dist-es/date-picker/DatePickerRangeInput.js.map +1 -1
  472. package/dist-es/date-picker/DatePickerRangePanel.js +2 -4
  473. package/dist-es/date-picker/DatePickerRangePanel.js.map +1 -1
  474. package/dist-es/date-picker/DatePickerSingleGridPanel.js +2 -4
  475. package/dist-es/date-picker/DatePickerSingleGridPanel.js.map +1 -1
  476. package/dist-es/date-picker/DatePickerSingleInput.js +12 -7
  477. package/dist-es/date-picker/DatePickerSingleInput.js.map +1 -1
  478. package/dist-es/date-picker/DatePickerSinglePanel.js.map +1 -1
  479. package/dist-es/date-picker/DatePickerTrigger.js.map +1 -1
  480. package/dist-es/date-picker/useDatePicker.js +0 -17
  481. package/dist-es/date-picker/useDatePicker.js.map +1 -1
  482. package/dist-es/date-picker/useFocusOut.js.map +1 -1
  483. package/dist-es/date-picker/useKeyboard.js.map +1 -1
  484. package/dist-es/deck-item/DeckItem.js.map +1 -1
  485. package/dist-es/deck-layout/DeckLayout.js.map +1 -1
  486. package/dist-es/dropdown/Dropdown.js.map +1 -1
  487. package/dist-es/dropdown/DropdownBase.js.map +1 -1
  488. package/dist-es/dropdown/DropdownButton.js.map +1 -1
  489. package/dist-es/dropdown/useClickAway.js.map +1 -1
  490. package/dist-es/dropdown/useDropdown.js.map +1 -1
  491. package/dist-es/dropdown/useDropdownBase.js.map +1 -1
  492. package/dist-es/editable-label/EditableLabel.js.map +1 -1
  493. package/dist-es/form-field-context-legacy/FormFieldLegacyContext.js.map +1 -1
  494. package/dist-es/form-field-context-legacy/useFormFieldLegacyProps.js.map +1 -1
  495. package/dist-es/form-field-legacy/FormActivationIndicator.js.map +1 -1
  496. package/dist-es/form-field-legacy/FormFieldLegacy.js.map +1 -1
  497. package/dist-es/form-field-legacy/FormHelperText.js.map +1 -1
  498. package/dist-es/form-field-legacy/FormLabel.js.map +1 -1
  499. package/dist-es/form-field-legacy/NecessityIndicator.js.map +1 -1
  500. package/dist-es/form-field-legacy/StatusIndicator.js.map +1 -1
  501. package/dist-es/form-field-legacy/constant.js.map +1 -1
  502. package/dist-es/form-group/FormGroup.js.map +1 -1
  503. package/dist-es/formatted-input/FormattedInput.js.map +1 -1
  504. package/dist-es/formatted-input/internal/InputWithMask.js.map +1 -1
  505. package/dist-es/input-legacy/InputLegacy.js.map +1 -1
  506. package/dist-es/input-legacy/StaticInputAdornment.js.map +1 -1
  507. package/dist-es/input-legacy/useCursorOnFocus.js.map +1 -1
  508. package/dist-es/layer-layout/LayerLayout.js.map +1 -1
  509. package/dist-es/list/Highlighter.js.map +1 -1
  510. package/dist-es/list/List.js.map +1 -1
  511. package/dist-es/list/ListItem.js.map +1 -1
  512. package/dist-es/list/ListItemGroup.js.map +1 -1
  513. package/dist-es/list/ListItemHeader.js.map +1 -1
  514. package/dist-es/list/VirtualizedList.js.map +1 -1
  515. package/dist-es/list/keyset.js.map +1 -1
  516. package/dist-es/list/useList.js.map +1 -1
  517. package/dist-es/list/useListHeight.js.map +1 -1
  518. package/dist-es/list/useVirtualization.js.map +1 -1
  519. package/dist-es/list-deprecated/List.js.map +1 -1
  520. package/dist-es/list-deprecated/ListBase.js.map +1 -1
  521. package/dist-es/list-deprecated/ListItem.js.map +1 -1
  522. package/dist-es/list-deprecated/ListItemBase.js.map +1 -1
  523. package/dist-es/list-deprecated/ListItemContext.js.map +1 -1
  524. package/dist-es/list-deprecated/ListStateContext.js.map +1 -1
  525. package/dist-es/list-deprecated/internal/DescendantContext.js.map +1 -1
  526. package/dist-es/list-deprecated/internal/Highlighter.js.map +1 -1
  527. package/dist-es/list-deprecated/internal/calcPreferredListHeight.js.map +1 -1
  528. package/dist-es/list-deprecated/internal/helpers.js.map +1 -1
  529. package/dist-es/list-deprecated/internal/scrollIntoView.js.map +1 -1
  530. package/dist-es/list-deprecated/internal/useListAutoSizer.js.map +1 -1
  531. package/dist-es/list-deprecated/internal/useWidth.js.map +1 -1
  532. package/dist-es/list-deprecated/itemToString.js.map +1 -1
  533. package/dist-es/list-deprecated/useList.js.map +1 -1
  534. package/dist-es/list-deprecated/useListItem.js.map +1 -1
  535. package/dist-es/list-deprecated/useTypeSelect.js.map +1 -1
  536. package/dist-es/list-next/ListItemNext.js.map +1 -1
  537. package/dist-es/list-next/ListNext.js.map +1 -1
  538. package/dist-es/list-next/ListNextContext.js.map +1 -1
  539. package/dist-es/list-next/useList.js.map +1 -1
  540. package/dist-es/localization-provider/LocalizationProvider.js.map +1 -1
  541. package/dist-es/logo/Logo.js.map +1 -1
  542. package/dist-es/logo/LogoImage.js.map +1 -1
  543. package/dist-es/logo/LogoSeparator.js.map +1 -1
  544. package/dist-es/menu-button/MenuButton.js.map +1 -1
  545. package/dist-es/menu-button/MenuButtonTrigger.js.map +1 -1
  546. package/dist-es/metric/Metric.js.map +1 -1
  547. package/dist-es/metric/MetricContent.js.map +1 -1
  548. package/dist-es/metric/MetricHeader.js.map +1 -1
  549. package/dist-es/metric/internal/MetricContext.js.map +1 -1
  550. package/dist-es/number-input/NumberInput.js.map +1 -1
  551. package/dist-es/number-input/internal/useActivateWhileMouseDown.js.map +1 -1
  552. package/dist-es/number-input/internal/useCaret.js.map +1 -1
  553. package/dist-es/number-input/internal/useInterval.js.map +1 -1
  554. package/dist-es/number-input/internal/utils.js.map +1 -1
  555. package/dist-es/number-input/useNumberInput.js.map +1 -1
  556. package/dist-es/portal/Portal.js.map +1 -1
  557. package/dist-es/query-input/QueryInput.js.map +1 -1
  558. package/dist-es/query-input/internal/CategoryList.js.map +1 -1
  559. package/dist-es/query-input/internal/CategoryListContext.js.map +1 -1
  560. package/dist-es/query-input/internal/CategoryListItem.js.map +1 -1
  561. package/dist-es/query-input/internal/QueryInputBody.js.map +1 -1
  562. package/dist-es/query-input/internal/SearchList.js.map +1 -1
  563. package/dist-es/query-input/internal/ValueList.js.map +1 -1
  564. package/dist-es/query-input/internal/ValueSelector.js.map +1 -1
  565. package/dist-es/query-input/internal/usePopperStatus.js.map +1 -1
  566. package/dist-es/query-input/useQueryInput.js.map +1 -1
  567. package/dist-es/responsive/OverflowReducer.js.map +1 -1
  568. package/dist-es/responsive/overflowUtils.js.map +1 -1
  569. package/dist-es/responsive/useDynamicCollapse.js.map +1 -1
  570. package/dist-es/responsive/useInstantCollapse.js.map +1 -1
  571. package/dist-es/responsive/useOverflow.js.map +1 -1
  572. package/dist-es/responsive/useOverflowCollectionItems.js.map +1 -1
  573. package/dist-es/responsive/useOverflowLayout.js.map +1 -1
  574. package/dist-es/responsive/useReclaimSpace.js.map +1 -1
  575. package/dist-es/responsive/useResizeObserver.js.map +1 -1
  576. package/dist-es/responsive/useWidth.js.map +1 -1
  577. package/dist-es/responsive/utils.js.map +1 -1
  578. package/dist-es/search-input/SearchInput.js.map +1 -1
  579. package/dist-es/static-list/StaticList.js.map +1 -1
  580. package/dist-es/static-list/StaticListItem.js.map +1 -1
  581. package/dist-es/static-list/StaticListItemContent.js.map +1 -1
  582. package/dist-es/system-status/SystemStatus.js.map +1 -1
  583. package/dist-es/system-status/SystemStatusActions.js.map +1 -1
  584. package/dist-es/system-status/SystemStatusContent.js.map +1 -1
  585. package/dist-es/table/TBody.js.map +1 -1
  586. package/dist-es/table/TD.js +6 -2
  587. package/dist-es/table/TD.js.map +1 -1
  588. package/dist-es/table/TFoot.js.map +1 -1
  589. package/dist-es/table/TH.js +6 -2
  590. package/dist-es/table/TH.js.map +1 -1
  591. package/dist-es/table/THead.js.map +1 -1
  592. package/dist-es/table/TR.js.map +1 -1
  593. package/dist-es/table/Table.css.js +1 -1
  594. package/dist-es/table/Table.js +2 -2
  595. package/dist-es/table/Table.js.map +1 -1
  596. package/dist-es/tabs/Tab.js.map +1 -1
  597. package/dist-es/tabs/TabActivationIndicator.js.map +1 -1
  598. package/dist-es/tabs/TabPanel.js.map +1 -1
  599. package/dist-es/tabs/Tabs.js.map +1 -1
  600. package/dist-es/tabs/Tabstrip.js.map +1 -1
  601. package/dist-es/tabs/drag-drop/Draggable.js.map +1 -1
  602. package/dist-es/tabs/drag-drop/drag-utils.js.map +1 -1
  603. package/dist-es/tabs/drag-drop/dragDropTypes.js.map +1 -1
  604. package/dist-es/tabs/drag-drop/useDragDrop.js.map +1 -1
  605. package/dist-es/tabs/drag-drop/useDragDropNaturalMovement.js.map +1 -1
  606. package/dist-es/tabs/drag-drop/useDragSpacers.js.map +1 -1
  607. package/dist-es/tabs/useActivationIndicator.js.map +1 -1
  608. package/dist-es/tabs/useEditableItem.js.map +1 -1
  609. package/dist-es/tabs/useItemsWithIds.js.map +1 -1
  610. package/dist-es/tabs/useKeyboardNavigation.js.map +1 -1
  611. package/dist-es/tabs/useSelection.js.map +1 -1
  612. package/dist-es/tabs/useTabs.js.map +1 -1
  613. package/dist-es/tabs/useTabstrip.js.map +1 -1
  614. package/dist-es/tabs-next/TabBar.js.map +1 -1
  615. package/dist-es/tabs-next/TabListNext.js.map +1 -1
  616. package/dist-es/tabs-next/TabNext.js.map +1 -1
  617. package/dist-es/tabs-next/TabNextAction.js.map +1 -1
  618. package/dist-es/tabs-next/TabNextContext.js.map +1 -1
  619. package/dist-es/tabs-next/TabNextPanel.js.map +1 -1
  620. package/dist-es/tabs-next/TabNextTrigger.css.js +1 -1
  621. package/dist-es/tabs-next/TabNextTrigger.js.map +1 -1
  622. package/dist-es/tabs-next/TabOverflowList.js.map +1 -1
  623. package/dist-es/tabs-next/TabsNext.js.map +1 -1
  624. package/dist-es/tabs-next/TabsNextContext.js.map +1 -1
  625. package/dist-es/tabs-next/hooks/useCollection.js.map +1 -1
  626. package/dist-es/tabs-next/hooks/useFocusOutside.js.map +1 -1
  627. package/dist-es/tabs-next/hooks/useOverflow.js.map +1 -1
  628. package/dist-es/tabs-next/hooks/useRestoreActiveTab.js.map +1 -1
  629. package/dist-es/toast-group/ToastGroup.js.map +1 -1
  630. package/dist-es/tokenized-input/TokenizedInput.js.map +1 -1
  631. package/dist-es/tokenized-input/TokenizedInputBase.js.map +1 -1
  632. package/dist-es/tokenized-input/internal/InputPill.js.map +1 -1
  633. package/dist-es/tokenized-input/internal/InputRuler.js.map +1 -1
  634. package/dist-es/tokenized-input/internal/calcFirstHiddenIndex.js.map +1 -1
  635. package/dist-es/tokenized-input/internal/defaultItemToString.js.map +1 -1
  636. package/dist-es/tokenized-input/internal/getCursorPosition.js.map +1 -1
  637. package/dist-es/tokenized-input/internal/isPlainObject.js.map +1 -1
  638. package/dist-es/tokenized-input/internal/useResizeObserver.js.map +1 -1
  639. package/dist-es/tokenized-input/internal/useWidth.js.map +1 -1
  640. package/dist-es/tokenized-input/useTokenizedInput.js.map +1 -1
  641. package/dist-es/tokenized-input-next/TokenizedInputNext.js.map +1 -1
  642. package/dist-es/tokenized-input-next/internal/InputPill.js.map +1 -1
  643. package/dist-es/tokenized-input-next/internal/calcFirstHiddenIndex.js.map +1 -1
  644. package/dist-es/tokenized-input-next/internal/useResizeObserver.js.map +1 -1
  645. package/dist-es/tokenized-input-next/internal/useWidth.js.map +1 -1
  646. package/dist-es/tokenized-input-next/useTokenizedInputNext.js.map +1 -1
  647. package/dist-es/toolbar/Toolbar.js.map +1 -1
  648. package/dist-es/toolbar/ToolbarButton.js.map +1 -1
  649. package/dist-es/toolbar/Tooltray.js.map +1 -1
  650. package/dist-es/toolbar/internal/renderToolbarItems.js.map +1 -1
  651. package/dist-es/toolbar/internal/renderTrayTools.js.map +1 -1
  652. package/dist-es/toolbar/overflow-panel/OverflowPanel.js.map +1 -1
  653. package/dist-es/toolbar/overflow-panel/OverflowSeparator.js.map +1 -1
  654. package/dist-es/toolbar/toolbar-field/ToolbarField.js.map +1 -1
  655. package/dist-es/toolbar/toolbar-field/useToolbarField.js.map +1 -1
  656. package/dist-es/tree/Tree.js.map +1 -1
  657. package/dist-es/tree/TreeNode.js.map +1 -1
  658. package/dist-es/tree/use-tree-keyboard-navigation.js.map +1 -1
  659. package/dist-es/tree/useTree.js.map +1 -1
  660. package/dist-es/utils/escapeRegExp.js.map +1 -1
  661. package/dist-es/utils/forwardCallbackProps.js.map +1 -1
  662. package/dist-es/utils/isEmail.js.map +1 -1
  663. package/dist-es/utils/isPlainObject.js.map +1 -1
  664. package/dist-es/utils/partition.js.map +1 -1
  665. package/dist-es/utils/useClickOutside.js.map +1 -1
  666. package/dist-es/utils/useEventCallback.js.map +1 -1
  667. package/dist-es/utils/useIsViewportLargerThanBreakpoint.js.map +1 -1
  668. package/dist-es/utils/useLayoutEffectOnce.js.map +1 -1
  669. package/dist-es/utils/useLayoutEffectSkipFirst.js.map +1 -1
  670. package/dist-es/utils/useOverflowDetection.js.map +1 -1
  671. package/dist-es/utils/useSlideSelection.js.map +1 -1
  672. package/dist-es/window/ElectronWindow.js.map +1 -1
  673. package/dist-es/window/WindowContext.js.map +1 -1
  674. package/dist-es/window/desktop-utils.js.map +1 -1
  675. package/dist-types/calendar/useCalendar.d.ts +26 -25
  676. package/dist-types/calendar/useCalendarDay.d.ts +1 -5
  677. package/dist-types/calendar/useCalendarSelection.d.ts +14 -11
  678. package/dist-types/date-picker/DatePickerContext.d.ts +0 -6
  679. package/dist-types/date-picker/DatePickerRangeGridPanel.d.ts +2 -2
  680. package/dist-types/date-picker/DatePickerRangePanel.d.ts +4 -4
  681. package/dist-types/date-picker/DatePickerSingleGridPanel.d.ts +2 -2
  682. package/dist-types/date-picker/useDatePicker.d.ts +0 -6
  683. package/dist-types/table/TD.d.ts +6 -0
  684. package/dist-types/table/TH.d.ts +6 -0
  685. package/dist-types/table/Table.d.ts +3 -3
  686. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"useNumberInput.js","sources":["../src/number-input/useNumberInput.ts"],"sourcesContent":["import {\n type Dispatch,\n type MouseEvent,\n type MutableRefObject,\n type SetStateAction,\n type SyntheticEvent,\n useCallback,\n} from \"react\";\nimport { useActivateWhileMouseDown } from \"./internal/useActivateWhileMouseDown\";\nimport { toFloat } from \"./internal/utils\";\nimport type { NumberInputProps } from \"./NumberInput\";\n\nexport interface UseNumberInputProps\n extends Pick<\n NumberInputProps,\n | \"decimalScale\"\n | \"disabled\"\n | \"format\"\n | \"inputRef\"\n | \"max\"\n | \"min\"\n | \"onChange\"\n | \"parse\"\n | \"readOnly\"\n | \"step\"\n | \"stepMultiplier\"\n > {\n clampAndFix: (value: number) => string | number;\n inputRef: MutableRefObject<HTMLInputElement | null>;\n isAdjustingRef: MutableRefObject<boolean>;\n setIsEditing: Dispatch<SetStateAction<boolean>>;\n setValue: Dispatch<SetStateAction<string | number>>;\n value: string | number;\n}\n\n/**\n * Manages increment / decrement logic\n */\nexport const useNumberInput = ({\n clampAndFix,\n decimalScale,\n disabled,\n format,\n inputRef,\n isAdjustingRef,\n max = Number.MAX_SAFE_INTEGER,\n min = Number.MIN_SAFE_INTEGER,\n onChange,\n parse,\n readOnly,\n setIsEditing,\n setValue,\n step = 1,\n stepMultiplier = 2,\n value,\n}: UseNumberInputProps) => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: Refs cannot be added to dependency arrays\n const updateValue = useCallback(\n (event: SyntheticEvent | undefined, nextValue: number) => {\n if (readOnly) return;\n isAdjustingRef.current = true;\n\n const updatedValue = clampAndFix(nextValue);\n setValue(toFloat(updatedValue));\n onChange?.(event, toFloat(updatedValue));\n },\n [onChange, readOnly, setValue, decimalScale, format],\n );\n\n const decrementValue = useCallback(\n (event?: SyntheticEvent, block?: boolean) => {\n const decrementStep = block ? stepMultiplier * step : step;\n const parsedValue = parse?.(value) || value;\n const nextValue = toFloat(parsedValue) - decrementStep;\n if (nextValue < min) return;\n updateValue(event, nextValue);\n },\n [value, min, step, stepMultiplier, updateValue, parse],\n );\n\n const incrementValue = useCallback(\n (event?: SyntheticEvent, block?: boolean) => {\n const incrementStep = block ? stepMultiplier * step : step;\n const parsedValue = parse?.(value) || value;\n const nextValue = toFloat(parsedValue) + incrementStep;\n if (nextValue > max) return;\n updateValue(event, nextValue);\n },\n [value, max, step, stepMultiplier, updateValue, parse],\n );\n\n const { activate: decrementSpinner } = useActivateWhileMouseDown(\n (event?: SyntheticEvent) => decrementValue(event),\n toFloat(value) <= min,\n );\n\n const { activate: incrementSpinner } = useActivateWhileMouseDown(\n (event?: SyntheticEvent) => incrementValue(event),\n toFloat(value) >= max,\n );\n\n const handleButtonMouseUp = () => inputRef.current?.focus();\n\n const commonButtonProps = {\n \"aria-hidden\": true,\n tabIndex: -1,\n onMouseUp: handleButtonMouseUp,\n };\n\n const incrementButtonProps = {\n ...commonButtonProps,\n \"aria-label\": \"increment value\",\n disabled: disabled || toFloat(value) + step > max,\n onMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n setIsEditing(true);\n if (event.nativeEvent.button !== 0) {\n // To match closely with <input type='input'>\n return;\n }\n incrementSpinner(event);\n },\n };\n\n const decrementButtonProps = {\n ...commonButtonProps,\n \"aria-label\": \"decrement value\",\n disabled: disabled || toFloat(value) - step < min,\n onMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n setIsEditing(true);\n if (event.nativeEvent.button !== 0) {\n // To match closely with <input type='input'>\n return;\n }\n decrementSpinner(event);\n },\n };\n\n return {\n incrementButtonProps,\n decrementButtonProps,\n incrementValue,\n decrementValue,\n };\n};\n"],"names":["useCallback","toFloat","useActivateWhileMouseDown"],"mappings":"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"}
1
+ {"version":3,"file":"useNumberInput.js","sources":["../src/number-input/useNumberInput.ts"],"sourcesContent":["import {\n type Dispatch,\n type MouseEvent,\n type MutableRefObject,\n type SetStateAction,\n type SyntheticEvent,\n useCallback,\n} from \"react\";\nimport { useActivateWhileMouseDown } from \"./internal/useActivateWhileMouseDown\";\nimport { toFloat } from \"./internal/utils\";\nimport type { NumberInputProps } from \"./NumberInput\";\n\nexport interface UseNumberInputProps\n extends Pick<\n NumberInputProps,\n | \"decimalScale\"\n | \"disabled\"\n | \"format\"\n | \"inputRef\"\n | \"max\"\n | \"min\"\n | \"onChange\"\n | \"parse\"\n | \"readOnly\"\n | \"step\"\n | \"stepMultiplier\"\n > {\n clampAndFix: (value: number) => string | number;\n inputRef: MutableRefObject<HTMLInputElement | null>;\n isAdjustingRef: MutableRefObject<boolean>;\n setIsEditing: Dispatch<SetStateAction<boolean>>;\n setValue: Dispatch<SetStateAction<string | number>>;\n value: string | number;\n}\n\n/**\n * Manages increment / decrement logic\n */\nexport const useNumberInput = ({\n clampAndFix,\n decimalScale,\n disabled,\n format,\n inputRef,\n isAdjustingRef,\n max = Number.MAX_SAFE_INTEGER,\n min = Number.MIN_SAFE_INTEGER,\n onChange,\n parse,\n readOnly,\n setIsEditing,\n setValue,\n step = 1,\n stepMultiplier = 2,\n value,\n}: UseNumberInputProps) => {\n // biome-ignore lint/correctness/useExhaustiveDependencies: Refs cannot be added to dependency arrays\n const updateValue = useCallback(\n (event: SyntheticEvent | undefined, nextValue: number) => {\n if (readOnly) return;\n isAdjustingRef.current = true;\n\n const updatedValue = clampAndFix(nextValue);\n setValue(toFloat(updatedValue));\n onChange?.(event, toFloat(updatedValue));\n },\n [onChange, readOnly, setValue, decimalScale, format],\n );\n\n const decrementValue = useCallback(\n (event?: SyntheticEvent, block?: boolean) => {\n const decrementStep = block ? stepMultiplier * step : step;\n const parsedValue = parse?.(value) || value;\n const nextValue = toFloat(parsedValue) - decrementStep;\n if (nextValue < min) return;\n updateValue(event, nextValue);\n },\n [value, min, step, stepMultiplier, updateValue, parse],\n );\n\n const incrementValue = useCallback(\n (event?: SyntheticEvent, block?: boolean) => {\n const incrementStep = block ? stepMultiplier * step : step;\n const parsedValue = parse?.(value) || value;\n const nextValue = toFloat(parsedValue) + incrementStep;\n if (nextValue > max) return;\n updateValue(event, nextValue);\n },\n [value, max, step, stepMultiplier, updateValue, parse],\n );\n\n const { activate: decrementSpinner } = useActivateWhileMouseDown(\n (event?: SyntheticEvent) => decrementValue(event),\n toFloat(value) <= min,\n );\n\n const { activate: incrementSpinner } = useActivateWhileMouseDown(\n (event?: SyntheticEvent) => incrementValue(event),\n toFloat(value) >= max,\n );\n\n const handleButtonMouseUp = () => inputRef.current?.focus();\n\n const commonButtonProps = {\n \"aria-hidden\": true,\n tabIndex: -1,\n onMouseUp: handleButtonMouseUp,\n };\n\n const incrementButtonProps = {\n ...commonButtonProps,\n \"aria-label\": \"increment value\",\n disabled: disabled || toFloat(value) + step > max,\n onMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n setIsEditing(true);\n if (event.nativeEvent.button !== 0) {\n // To match closely with <input type='input'>\n return;\n }\n incrementSpinner(event);\n },\n };\n\n const decrementButtonProps = {\n ...commonButtonProps,\n \"aria-label\": \"decrement value\",\n disabled: disabled || toFloat(value) - step < min,\n onMouseDown: (event: MouseEvent<HTMLButtonElement>) => {\n event.preventDefault();\n setIsEditing(true);\n if (event.nativeEvent.button !== 0) {\n // To match closely with <input type='input'>\n return;\n }\n decrementSpinner(event);\n },\n };\n\n return {\n incrementButtonProps,\n decrementButtonProps,\n incrementValue,\n decrementValue,\n };\n};\n"],"names":["useCallback","toFloat","useActivateWhileMouseDown"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Portal.js","sources":["../src/portal/Portal.tsx"],"sourcesContent":["import {\n getRefFromChildren,\n ownerDocument,\n SaltProvider,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ReactNode,\n type Ref,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface PortalProps {\n /**\n * The children to render into the `container`.\n */\n children?: ReactNode;\n /**\n * An HTML element, component instance, or function that returns either.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container?: Element | (() => Element | null) | null;\n /**\n * Disable the portal behavior.\n * The children stay within it's parent DOM hierarchy.\n */\n disablePortal?: boolean;\n /**\n * If this node does not exist on the document, it will be created for you.\n */\n id?: string;\n}\n\nfunction getContainer(container: PortalProps[\"container\"]) {\n return typeof container === \"function\" ? container() : container;\n}\n\nconst DEFAULT_ID = \"portal-root\";\n\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\nexport const Portal = forwardRef<HTMLElement, PortalProps>(function Portal(\n {\n children,\n container: containerProp = document.body,\n disablePortal = false,\n id = DEFAULT_ID,\n },\n ref,\n) {\n const [mounted, setMounted] = useState(false);\n const portalRef = useRef<HTMLElement | null>(null);\n const handleRef = useForkRef(getRefFromChildren(children), ref);\n\n const container = getContainer(containerProp) ?? document.body;\n\n useIsomorphicLayoutEffect(() => {\n const root = ownerDocument(container).getElementById(id);\n\n if (root) {\n portalRef.current = root;\n } else {\n portalRef.current = ownerDocument(container).createElement(\"div\");\n portalRef.current.id = id;\n }\n\n const el = portalRef.current;\n\n if (!container.contains(el)) {\n container.appendChild(el);\n }\n\n setMounted(true);\n }, [id, container]);\n\n if (disablePortal) {\n if (isValidElement<{ ref?: Ref<unknown> }>(children)) {\n return cloneElement(children, {\n ref: handleRef,\n });\n }\n return <>{children}</>;\n }\n\n if (mounted && portalRef.current && children) {\n return createPortal(\n <SaltProvider>{children}</SaltProvider>,\n portalRef.current,\n );\n }\n\n return null;\n});\n"],"names":["forwardRef","Portal","useState","useRef","useForkRef","getRefFromChildren","useIsomorphicLayoutEffect","ownerDocument","isValidElement","cloneElement","createPortal","jsx","SaltProvider"],"mappings":";;;;;;;AA0CA,SAAS,aAAa,SAAqC,EAAA;AACzD,EAAA,OAAO,OAAO,SAAA,KAAc,UAAa,GAAA,SAAA,EAAc,GAAA,SAAA;AACzD;AAEA,MAAM,UAAa,GAAA,aAAA;AAMN,MAAA,MAAA,GAASA,gBAAqC,CAAA,SAASC,OAClE,CAAA;AAAA,EACE,QAAA;AAAA,EACA,SAAA,EAAW,gBAAgB,QAAS,CAAA,IAAA;AAAA,EACpC,aAAgB,GAAA,KAAA;AAAA,EAChB,EAAK,GAAA;AACP,CAAA,EACA,GACA,EAAA;AACA,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC5C,EAAM,MAAA,SAAA,GAAYC,aAA2B,IAAI,CAAA;AACjD,EAAA,MAAM,SAAY,GAAAC,eAAA,CAAWC,uBAAmB,CAAA,QAAQ,GAAG,GAAG,CAAA;AAE9D,EAAA,MAAM,SAAY,GAAA,YAAA,CAAa,aAAa,CAAA,IAAK,QAAS,CAAA,IAAA;AAE1D,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAA,MAAM,IAAO,GAAAC,kBAAA,CAAc,SAAS,CAAA,CAAE,eAAe,EAAE,CAAA;AAEvD,IAAA,IAAI,IAAM,EAAA;AACR,MAAA,SAAA,CAAU,OAAU,GAAA,IAAA;AAAA,KACf,MAAA;AACL,MAAA,SAAA,CAAU,OAAU,GAAAA,kBAAA,CAAc,SAAS,CAAA,CAAE,cAAc,KAAK,CAAA;AAChE,MAAA,SAAA,CAAU,QAAQ,EAAK,GAAA,EAAA;AAAA;AAGzB,IAAA,MAAM,KAAK,SAAU,CAAA,OAAA;AAErB,IAAA,IAAI,CAAC,SAAA,CAAU,QAAS,CAAA,EAAE,CAAG,EAAA;AAC3B,MAAA,SAAA,CAAU,YAAY,EAAE,CAAA;AAAA;AAG1B,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,GACd,EAAA,CAAC,EAAI,EAAA,SAAS,CAAC,CAAA;AAElB,EAAA,IAAI,aAAe,EAAA;AACjB,IAAI,IAAAC,oBAAA,CAAuC,QAAQ,CAAG,EAAA;AACpD,MAAA,OAAOC,mBAAa,QAAU,EAAA;AAAA,QAC5B,GAAK,EAAA;AAAA,OACN,CAAA;AAAA;AAEH,IAAA,6DAAU,QAAS,EAAA,CAAA;AAAA;AAGrB,EAAI,IAAA,OAAA,IAAW,SAAU,CAAA,OAAA,IAAW,QAAU,EAAA;AAC5C,IAAO,OAAAC,qBAAA;AAAA,sBACLC,cAAA,CAACC,qBAAc,QAAS,EAAA,CAAA;AAAA,MACxB,SAAU,CAAA;AAAA,KACZ;AAAA;AAGF,EAAO,OAAA,IAAA;AACT,CAAC;;;;"}
1
+ {"version":3,"file":"Portal.js","sources":["../src/portal/Portal.tsx"],"sourcesContent":["import {\n getRefFromChildren,\n ownerDocument,\n SaltProvider,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport {\n cloneElement,\n forwardRef,\n isValidElement,\n type ReactNode,\n type Ref,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nexport interface PortalProps {\n /**\n * The children to render into the `container`.\n */\n children?: ReactNode;\n /**\n * An HTML element, component instance, or function that returns either.\n * The `container` will have the portal children appended to it.\n *\n * By default, it uses the body of the top-level document object,\n * so it's simply `document.body` most of the time.\n */\n container?: Element | (() => Element | null) | null;\n /**\n * Disable the portal behavior.\n * The children stay within it's parent DOM hierarchy.\n */\n disablePortal?: boolean;\n /**\n * If this node does not exist on the document, it will be created for you.\n */\n id?: string;\n}\n\nfunction getContainer(container: PortalProps[\"container\"]) {\n return typeof container === \"function\" ? container() : container;\n}\n\nconst DEFAULT_ID = \"portal-root\";\n\n/**\n * Portals provide a first-class way to render children into a DOM node\n * that exists outside the DOM hierarchy of the parent component.\n */\nexport const Portal = forwardRef<HTMLElement, PortalProps>(function Portal(\n {\n children,\n container: containerProp = document.body,\n disablePortal = false,\n id = DEFAULT_ID,\n },\n ref,\n) {\n const [mounted, setMounted] = useState(false);\n const portalRef = useRef<HTMLElement | null>(null);\n const handleRef = useForkRef(getRefFromChildren(children), ref);\n\n const container = getContainer(containerProp) ?? document.body;\n\n useIsomorphicLayoutEffect(() => {\n const root = ownerDocument(container).getElementById(id);\n\n if (root) {\n portalRef.current = root;\n } else {\n portalRef.current = ownerDocument(container).createElement(\"div\");\n portalRef.current.id = id;\n }\n\n const el = portalRef.current;\n\n if (!container.contains(el)) {\n container.appendChild(el);\n }\n\n setMounted(true);\n }, [id, container]);\n\n if (disablePortal) {\n if (isValidElement<{ ref?: Ref<unknown> }>(children)) {\n return cloneElement(children, {\n ref: handleRef,\n });\n }\n return <>{children}</>;\n }\n\n if (mounted && portalRef.current && children) {\n return createPortal(\n <SaltProvider>{children}</SaltProvider>,\n portalRef.current,\n );\n }\n\n return null;\n});\n"],"names":["forwardRef","Portal","useState","useRef","useForkRef","getRefFromChildren","useIsomorphicLayoutEffect","ownerDocument","isValidElement","cloneElement","createPortal","jsx","SaltProvider"],"mappings":";;;;;;;AA0CA,SAAS,aAAa,SAAA,EAAqC;AACzD,EAAA,OAAO,OAAO,SAAA,KAAc,UAAA,GAAa,SAAA,EAAU,GAAI,SAAA;AACzD;AAEA,MAAM,UAAA,GAAa,aAAA;AAMZ,MAAM,MAAA,GAASA,gBAAA,CAAqC,SAASC,OAAAA,CAClE;AAAA,EACE,QAAA;AAAA,EACA,SAAA,EAAW,gBAAgB,QAAA,CAAS,IAAA;AAAA,EACpC,aAAA,GAAgB,KAAA;AAAA,EAChB,EAAA,GAAK;AACP,CAAA,EACA,GAAA,EACA;AACA,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAIC,eAAS,KAAK,CAAA;AAC5C,EAAA,MAAM,SAAA,GAAYC,aAA2B,IAAI,CAAA;AACjD,EAAA,MAAM,SAAA,GAAYC,eAAA,CAAWC,uBAAA,CAAmB,QAAQ,GAAG,GAAG,CAAA;AAE9D,EAAA,MAAM,SAAA,GAAY,YAAA,CAAa,aAAa,CAAA,IAAK,QAAA,CAAS,IAAA;AAE1D,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAA,MAAM,IAAA,GAAOC,kBAAA,CAAc,SAAS,CAAA,CAAE,eAAe,EAAE,CAAA;AAEvD,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,SAAA,CAAU,OAAA,GAAU,IAAA;AAAA,IACtB,CAAA,MAAO;AACL,MAAA,SAAA,CAAU,OAAA,GAAUA,kBAAA,CAAc,SAAS,CAAA,CAAE,cAAc,KAAK,CAAA;AAChE,MAAA,SAAA,CAAU,QAAQ,EAAA,GAAK,EAAA;AAAA,IACzB;AAEA,IAAA,MAAM,KAAK,SAAA,CAAU,OAAA;AAErB,IAAA,IAAI,CAAC,SAAA,CAAU,QAAA,CAAS,EAAE,CAAA,EAAG;AAC3B,MAAA,SAAA,CAAU,YAAY,EAAE,CAAA;AAAA,IAC1B;AAEA,IAAA,UAAA,CAAW,IAAI,CAAA;AAAA,EACjB,CAAA,EAAG,CAAC,EAAA,EAAI,SAAS,CAAC,CAAA;AAElB,EAAA,IAAI,aAAA,EAAe;AACjB,IAAA,IAAIC,oBAAA,CAAuC,QAAQ,CAAA,EAAG;AACpD,MAAA,OAAOC,mBAAa,QAAA,EAAU;AAAA,QAC5B,GAAA,EAAK;AAAA,OACN,CAAA;AAAA,IACH;AACA,IAAA,6DAAU,QAAA,EAAS,CAAA;AAAA,EACrB;AAEA,EAAA,IAAI,OAAA,IAAW,SAAA,CAAU,OAAA,IAAW,QAAA,EAAU;AAC5C,IAAA,OAAOC,qBAAA;AAAA,sBACLC,cAAA,CAACC,qBAAc,QAAA,EAAS,CAAA;AAAA,MACxB,SAAA,CAAU;AAAA,KACZ;AAAA,EACF;AAEA,EAAA,OAAO,IAAA;AACT,CAAC;;;;"}
@@ -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: _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;;;;"}
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,WAAAA,CAAW,KAAA,EAAO,WAAA,EAAa;AACtC,IAAA,MAAM;AAAA,MACJ,QAAA,EAAU,SAAA;AAAA,MACV,UAAA,EAAY,WAAA;AAAA,MACZ,aAAA,EAAe,cAAA;AAAA,MACf,QAAA,EAAU,SAAA;AAAA,MACV,oBAAA,EAAsB,qBAAA;AAAA,MACtB,YAAA;AAAA,MACA,SAAA,EAAW,UAAA;AAAA,MACX,kBAAA,EAAoB,mBAAA;AAAA,MACpB,eAAA,EAAiB,gBAAA;AAAA,MACjB,uBAAA,EAAyB,wBAAA;AAAA,MACzB,sBAAA,EAAwB,uBAAA;AAAA,MACxB,SAAA;AAAA,MACA,GAAG;AAAA,KACL,GAAI,KAAA;AAEJ,IAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,IAAAC,+BAAA,CAAyB;AAAA,MACvB,MAAA,EAAQ,kBAAA;AAAA,MACR,GAAA,EAAKC,YAAA;AAAA,MACL,MAAA,EAAQ;AAAA,KACT,CAAA;AAED,IAAA,MAAM;AAAA,MACJ,eAAA;AAAA,MACA,iBAAA;AAAA,MACA,mBAAA;AAAA,MACA;AAAA,KACF,GAAIC,2BAAA,CAAc,KAAA,EAAO,WAAW,CAAA;AAEpC,IAAA,uBACEC,eAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAWC,SAAA,CAAK,YAAA,EAAa,EAAG,SAAS,CAAA;AAAA,QACzC,QAAQ,eAAA,CAAgB,MAAA;AAAA,QACxB,SAAS,eAAA,CAAgB,OAAA;AAAA,QACzB,aAAA,EAAY,aAAA;AAAA,QACX,GAAG,SAAA;AAAA,QAEJ,QAAA,EAAA;AAAA,0BAAAC,cAAA;AAAA,YAACC,6BAAA;AAAA,YAAA;AAAA,cACC,GAAA,EAAK,iBAAA;AAAA,cACJ,GAAG,mBAAA;AAAA,cACJ;AAAA;AAAA,WACF;AAAA,0BACAD,cAAA,CAACE,2BAAA,EAAA,EAAe,GAAG,kBAAA,EAAoB;AAAA;AAAA;AAAA,KACzC;AAAA,EAEJ;AACF;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CategoryList.js","sources":["../src/query-input/internal/CategoryList.tsx"],"sourcesContent":["import { makePrefixer, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport {\n type Dispatch,\n type SetStateAction,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport type { SelectHandler } from \"../../common-hooks\";\nimport { List } from \"../../list\";\nimport type { QueryInputCategory } from \"../queryInputTypes\";\nimport { CategoryListContext } from \"./CategoryListContext\";\nimport { CategoryListItem } from \"./CategoryListItem\";\n\nconst withBaseName = makePrefixer(\"saltCategoryList\");\n\nexport interface CategoryListProps {\n categories: QueryInputCategory[];\n rootWidth: number;\n onCategorySelect: (category: QueryInputCategory | null) => void;\n highlightedCategoryIndex?: number;\n setHighlightedCategoryIndex: Dispatch<SetStateAction<number>>;\n}\n\nconst getCategoryLabel = (category: QueryInputCategory) => category.name;\n\nexport function CategoryList(props: CategoryListProps) {\n const {\n categories,\n rootWidth,\n onCategorySelect,\n highlightedCategoryIndex,\n setHighlightedCategoryIndex,\n } = props;\n\n const measureRef = useRef<HTMLDivElement>(null);\n const [measuredCategories, setMeasuredCategories] = useState<\n QueryInputCategory[]\n >([]);\n const [contextValue, setContextValue] = useState<CategoryListContext>({\n width: 0,\n });\n\n useIsomorphicLayoutEffect(() => {\n setTimeout(() => {\n if (measureRef.current) {\n const width = measureRef.current.offsetWidth;\n setMeasuredCategories(categories);\n setContextValue({\n width,\n });\n }\n }, 0);\n }, [categories]);\n\n const onSelect: SelectHandler<QueryInputCategory> = useCallback(\n (_, item) => {\n onCategorySelect(item);\n },\n [onCategorySelect],\n );\n\n const isMeasuring = measuredCategories !== categories;\n\n if (isMeasuring) {\n return (\n <div ref={measureRef} className={withBaseName(\"categoryWidthMeasure\")}>\n {categories.map((c) => {\n return (\n <div key={c.name} className={withBaseName(\"category\")}>\n {c.name}\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <CategoryListContext.Provider value={contextValue}>\n <List<QueryInputCategory>\n ListItem={CategoryListItem}\n data-testid=\"category-list\"\n highlightedIndex={highlightedCategoryIndex}\n itemToString={getCategoryLabel}\n onHighlight={setHighlightedCategoryIndex}\n onSelect={onSelect}\n source={categories}\n width={rootWidth}\n />\n </CategoryListContext.Provider>\n );\n}\n"],"names":["makePrefixer","useRef","useState","useIsomorphicLayoutEffect","useCallback","jsx","CategoryListContext","List","CategoryListItem"],"mappings":";;;;;;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,kBAAkB,CAAA;AAUpD,MAAM,gBAAA,GAAmB,CAAC,QAAA,KAAiC,QAAS,CAAA,IAAA;AAE7D,SAAS,aAAa,KAA0B,EAAA;AACrD,EAAM,MAAA;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,wBAAA;AAAA,IACA;AAAA,GACE,GAAA,KAAA;AAEJ,EAAM,MAAA,UAAA,GAAaC,aAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,kBAAoB,EAAA,qBAAqB,CAAI,GAAAC,cAAA,CAElD,EAAE,CAAA;AACJ,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,cAA8B,CAAA;AAAA,IACpE,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,IAAI,WAAW,OAAS,EAAA;AACtB,QAAM,MAAA,KAAA,GAAQ,WAAW,OAAQ,CAAA,WAAA;AACjC,QAAA,qBAAA,CAAsB,UAAU,CAAA;AAChC,QAAgB,eAAA,CAAA;AAAA,UACd;AAAA,SACD,CAAA;AAAA;AACH,OACC,CAAC,CAAA;AAAA,GACN,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,QAA8C,GAAAC,iBAAA;AAAA,IAClD,CAAC,GAAG,IAAS,KAAA;AACX,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,KACvB;AAAA,IACA,CAAC,gBAAgB;AAAA,GACnB;AAEA,EAAA,MAAM,cAAc,kBAAuB,KAAA,UAAA;AAE3C,EAAA,IAAI,WAAa,EAAA;AACf,IACE,uBAAAC,cAAA,CAAC,KAAI,EAAA,EAAA,GAAA,EAAK,UAAY,EAAA,SAAA,EAAW,YAAa,CAAA,sBAAsB,CACjE,EAAA,QAAA,EAAA,UAAA,CAAW,GAAI,CAAA,CAAC,CAAM,KAAA;AACrB,MACE,uBAAAA,cAAA,CAAC,SAAiB,SAAW,EAAA,YAAA,CAAa,UAAU,CACjD,EAAA,QAAA,EAAA,CAAA,CAAE,IADK,EAAA,EAAA,CAAA,CAAE,IAEZ,CAAA;AAAA,KAEH,CACH,EAAA,CAAA;AAAA;AAIJ,EAAA,uBACGA,cAAA,CAAAC,uCAAA,CAAoB,QAApB,EAAA,EAA6B,OAAO,YACnC,EAAA,QAAA,kBAAAD,cAAA;AAAA,IAACE,SAAA;AAAA,IAAA;AAAA,MACC,QAAU,EAAAC,iCAAA;AAAA,MACV,aAAY,EAAA,eAAA;AAAA,MACZ,gBAAkB,EAAA,wBAAA;AAAA,MAClB,YAAc,EAAA,gBAAA;AAAA,MACd,WAAa,EAAA,2BAAA;AAAA,MACb,QAAA;AAAA,MACA,MAAQ,EAAA,UAAA;AAAA,MACR,KAAO,EAAA;AAAA;AAAA,GAEX,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"CategoryList.js","sources":["../src/query-input/internal/CategoryList.tsx"],"sourcesContent":["import { makePrefixer, useIsomorphicLayoutEffect } from \"@salt-ds/core\";\nimport {\n type Dispatch,\n type SetStateAction,\n useCallback,\n useRef,\n useState,\n} from \"react\";\nimport type { SelectHandler } from \"../../common-hooks\";\nimport { List } from \"../../list\";\nimport type { QueryInputCategory } from \"../queryInputTypes\";\nimport { CategoryListContext } from \"./CategoryListContext\";\nimport { CategoryListItem } from \"./CategoryListItem\";\n\nconst withBaseName = makePrefixer(\"saltCategoryList\");\n\nexport interface CategoryListProps {\n categories: QueryInputCategory[];\n rootWidth: number;\n onCategorySelect: (category: QueryInputCategory | null) => void;\n highlightedCategoryIndex?: number;\n setHighlightedCategoryIndex: Dispatch<SetStateAction<number>>;\n}\n\nconst getCategoryLabel = (category: QueryInputCategory) => category.name;\n\nexport function CategoryList(props: CategoryListProps) {\n const {\n categories,\n rootWidth,\n onCategorySelect,\n highlightedCategoryIndex,\n setHighlightedCategoryIndex,\n } = props;\n\n const measureRef = useRef<HTMLDivElement>(null);\n const [measuredCategories, setMeasuredCategories] = useState<\n QueryInputCategory[]\n >([]);\n const [contextValue, setContextValue] = useState<CategoryListContext>({\n width: 0,\n });\n\n useIsomorphicLayoutEffect(() => {\n setTimeout(() => {\n if (measureRef.current) {\n const width = measureRef.current.offsetWidth;\n setMeasuredCategories(categories);\n setContextValue({\n width,\n });\n }\n }, 0);\n }, [categories]);\n\n const onSelect: SelectHandler<QueryInputCategory> = useCallback(\n (_, item) => {\n onCategorySelect(item);\n },\n [onCategorySelect],\n );\n\n const isMeasuring = measuredCategories !== categories;\n\n if (isMeasuring) {\n return (\n <div ref={measureRef} className={withBaseName(\"categoryWidthMeasure\")}>\n {categories.map((c) => {\n return (\n <div key={c.name} className={withBaseName(\"category\")}>\n {c.name}\n </div>\n );\n })}\n </div>\n );\n }\n\n return (\n <CategoryListContext.Provider value={contextValue}>\n <List<QueryInputCategory>\n ListItem={CategoryListItem}\n data-testid=\"category-list\"\n highlightedIndex={highlightedCategoryIndex}\n itemToString={getCategoryLabel}\n onHighlight={setHighlightedCategoryIndex}\n onSelect={onSelect}\n source={categories}\n width={rootWidth}\n />\n </CategoryListContext.Provider>\n );\n}\n"],"names":["makePrefixer","useRef","useState","useIsomorphicLayoutEffect","useCallback","jsx","CategoryListContext","List","CategoryListItem"],"mappings":";;;;;;;;;;;;;;;AAcA,MAAM,YAAA,GAAeA,kBAAa,kBAAkB,CAAA;AAUpD,MAAM,gBAAA,GAAmB,CAAC,QAAA,KAAiC,QAAA,CAAS,IAAA;AAE7D,SAAS,aAAa,KAAA,EAA0B;AACrD,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,wBAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,UAAA,GAAaC,aAAuB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,kBAAA,EAAoB,qBAAqB,CAAA,GAAIC,cAAA,CAElD,EAAE,CAAA;AACJ,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIA,cAAA,CAA8B;AAAA,IACpE,KAAA,EAAO;AAAA,GACR,CAAA;AAED,EAAAC,8BAAA,CAA0B,MAAM;AAC9B,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,IAAI,WAAW,OAAA,EAAS;AACtB,QAAA,MAAM,KAAA,GAAQ,WAAW,OAAA,CAAQ,WAAA;AACjC,QAAA,qBAAA,CAAsB,UAAU,CAAA;AAChC,QAAA,eAAA,CAAgB;AAAA,UACd;AAAA,SACD,CAAA;AAAA,MACH;AAAA,IACF,GAAG,CAAC,CAAA;AAAA,EACN,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AAEf,EAAA,MAAM,QAAA,GAA8CC,iBAAA;AAAA,IAClD,CAAC,GAAG,IAAA,KAAS;AACX,MAAA,gBAAA,CAAiB,IAAI,CAAA;AAAA,IACvB,CAAA;AAAA,IACA,CAAC,gBAAgB;AAAA,GACnB;AAEA,EAAA,MAAM,cAAc,kBAAA,KAAuB,UAAA;AAE3C,EAAA,IAAI,WAAA,EAAa;AACf,IAAA,uBACEC,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,UAAA,EAAY,SAAA,EAAW,YAAA,CAAa,sBAAsB,CAAA,EACjE,QAAA,EAAA,UAAA,CAAW,GAAA,CAAI,CAAC,CAAA,KAAM;AACrB,MAAA,uBACEA,cAAA,CAAC,SAAiB,SAAA,EAAW,YAAA,CAAa,UAAU,CAAA,EACjD,QAAA,EAAA,CAAA,CAAE,IAAA,EAAA,EADK,CAAA,CAAE,IAEZ,CAAA;AAAA,IAEJ,CAAC,CAAA,EACH,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAA,CAACC,uCAAA,CAAoB,QAAA,EAApB,EAA6B,OAAO,YAAA,EACnC,QAAA,kBAAAD,cAAA;AAAA,IAACE,SAAA;AAAA,IAAA;AAAA,MACC,QAAA,EAAUC,iCAAA;AAAA,MACV,aAAA,EAAY,eAAA;AAAA,MACZ,gBAAA,EAAkB,wBAAA;AAAA,MAClB,YAAA,EAAc,gBAAA;AAAA,MACd,WAAA,EAAa,2BAAA;AAAA,MACb,QAAA;AAAA,MACA,MAAA,EAAQ,UAAA;AAAA,MACR,KAAA,EAAO;AAAA;AAAA,GACT,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CategoryListContext.js","sources":["../src/query-input/internal/CategoryListContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface CategoryListContext {\n width: number;\n}\n\nexport const CategoryListContext = createContext<\n CategoryListContext | undefined\n>(undefined);\n\nexport function useCategoryListContext(): CategoryListContext {\n const context = useContext(CategoryListContext);\n if (!context) {\n throw new Error(\n \"useCategoryListContext should be used inside CategoryList\",\n );\n }\n return context;\n}\n"],"names":["createContext","useContext"],"mappings":";;;;AAMa,MAAA,mBAAA,GAAsBA,oBAEjC,MAAS;AAEJ,SAAS,sBAA8C,GAAA;AAC5D,EAAM,MAAA,OAAA,GAAUC,iBAAW,mBAAmB,CAAA;AAC9C,EAAA,IAAI,CAAC,OAAS,EAAA;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA;AAEF,EAAO,OAAA,OAAA;AACT;;;;;"}
1
+ {"version":3,"file":"CategoryListContext.js","sources":["../src/query-input/internal/CategoryListContext.ts"],"sourcesContent":["import { createContext, useContext } from \"react\";\n\nexport interface CategoryListContext {\n width: number;\n}\n\nexport const CategoryListContext = createContext<\n CategoryListContext | undefined\n>(undefined);\n\nexport function useCategoryListContext(): CategoryListContext {\n const context = useContext(CategoryListContext);\n if (!context) {\n throw new Error(\n \"useCategoryListContext should be used inside CategoryList\",\n );\n }\n return context;\n}\n"],"names":["createContext","useContext"],"mappings":";;;;AAMO,MAAM,mBAAA,GAAsBA,oBAEjC,MAAS;AAEJ,SAAS,sBAAA,GAA8C;AAC5D,EAAA,MAAM,OAAA,GAAUC,iBAAW,mBAAmB,CAAA;AAC9C,EAAA,IAAI,CAAC,OAAA,EAAS;AACZ,IAAA,MAAM,IAAI,KAAA;AAAA,MACR;AAAA,KACF;AAAA,EACF;AACA,EAAA,OAAO,OAAA;AACT;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"CategoryListItem.js","sources":["../src/query-input/internal/CategoryListItem.tsx"],"sourcesContent":["import { makePrefixer, useIcon } from \"@salt-ds/core\";\nimport { type CSSProperties, useMemo, useRef } from \"react\";\nimport { ListItem, type ListItemProps, type ListItemType } from \"../../list\";\nimport type { QueryInputCategory } from \"../queryInputTypes\";\nimport { useCategoryListContext } from \"./CategoryListContext\";\n\nconst withBaseName = makePrefixer(\"saltCategoryListItem\");\n\nexport interface CategoryListItemProps\n extends ListItemProps<QueryInputCategory> {\n category: QueryInputCategory;\n}\n\nexport const CategoryListItem: ListItemType<QueryInputCategory> =\n function CategoryListItem({ item: category, ...props }) {\n const textRef = useRef<HTMLDivElement>(null);\n const context = useCategoryListContext();\n const { ExpandGroupIcon } = useIcon();\n const textStyle: CSSProperties = useMemo(\n () => ({\n minWidth: context.width,\n }),\n [context.width],\n );\n\n return (\n <ListItem {...props} label={category?.name}>\n <div ref={textRef} className={withBaseName(\"text\")} style={textStyle}>\n {category?.name}\n </div>\n <div className={withBaseName(\"valuesContainer\")}>\n <span>(</span>\n <span className={withBaseName(\"values\")}>\n {category?.values.join(\", \")}\n </span>\n <span>)</span>\n </div>\n <ExpandGroupIcon className={withBaseName(\"chevron\")} />\n </ListItem>\n );\n };\n"],"names":["makePrefixer","CategoryListItem","useRef","useCategoryListContext","useIcon","useMemo","ListItem","jsx","jsxs"],"mappings":";;;;;;;;;;;;;;AAMA,MAAM,YAAA,GAAeA,kBAAa,sBAAsB,CAAA;AAO3C,MAAA,gBAAA,GACX,SAASC,iBAAiB,CAAA,EAAE,MAAM,QAAU,EAAA,GAAG,OAAS,EAAA;AACtD,EAAM,MAAA,OAAA,GAAUC,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,UAAUC,0CAAuB,EAAA;AACvC,EAAM,MAAA,EAAE,eAAgB,EAAA,GAAIC,YAAQ,EAAA;AACpC,EAAA,MAAM,SAA2B,GAAAC,aAAA;AAAA,IAC/B,OAAO;AAAA,MACL,UAAU,OAAQ,CAAA;AAAA,KACpB,CAAA;AAAA,IACA,CAAC,QAAQ,KAAK;AAAA,GAChB;AAEA,EAAA,uCACGC,iBAAU,EAAA,EAAA,GAAG,KAAO,EAAA,KAAA,EAAO,qCAAU,IACpC,EAAA,QAAA,EAAA;AAAA,oBAACC,cAAA,CAAA,KAAA,EAAA,EAAI,GAAK,EAAA,OAAA,EAAS,SAAW,EAAA,YAAA,CAAa,MAAM,CAAG,EAAA,KAAA,EAAO,SACxD,EAAA,QAAA,EAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,IACb,EAAA,CAAA;AAAA,oBACCC,eAAA,CAAA,KAAA,EAAA,EAAI,SAAW,EAAA,YAAA,CAAa,iBAAiB,CAC5C,EAAA,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAAC,UAAK,QAAC,EAAA,GAAA,EAAA,CAAA;AAAA,sBACPA,cAAA,CAAC,UAAK,SAAW,EAAA,YAAA,CAAa,QAAQ,CACnC,EAAA,QAAA,EAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAO,CAAA,IAAA,CAAK,IACzB,CAAA,EAAA,CAAA;AAAA,sBACAA,cAAA,CAAC,UAAK,QAAC,EAAA,GAAA,EAAA;AAAA,KACT,EAAA,CAAA;AAAA,oBACCA,cAAA,CAAA,eAAA,EAAA,EAAgB,SAAW,EAAA,YAAA,CAAa,SAAS,CAAG,EAAA;AAAA,GACvD,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"CategoryListItem.js","sources":["../src/query-input/internal/CategoryListItem.tsx"],"sourcesContent":["import { makePrefixer, useIcon } from \"@salt-ds/core\";\nimport { type CSSProperties, useMemo, useRef } from \"react\";\nimport { ListItem, type ListItemProps, type ListItemType } from \"../../list\";\nimport type { QueryInputCategory } from \"../queryInputTypes\";\nimport { useCategoryListContext } from \"./CategoryListContext\";\n\nconst withBaseName = makePrefixer(\"saltCategoryListItem\");\n\nexport interface CategoryListItemProps\n extends ListItemProps<QueryInputCategory> {\n category: QueryInputCategory;\n}\n\nexport const CategoryListItem: ListItemType<QueryInputCategory> =\n function CategoryListItem({ item: category, ...props }) {\n const textRef = useRef<HTMLDivElement>(null);\n const context = useCategoryListContext();\n const { ExpandGroupIcon } = useIcon();\n const textStyle: CSSProperties = useMemo(\n () => ({\n minWidth: context.width,\n }),\n [context.width],\n );\n\n return (\n <ListItem {...props} label={category?.name}>\n <div ref={textRef} className={withBaseName(\"text\")} style={textStyle}>\n {category?.name}\n </div>\n <div className={withBaseName(\"valuesContainer\")}>\n <span>(</span>\n <span className={withBaseName(\"values\")}>\n {category?.values.join(\", \")}\n </span>\n <span>)</span>\n </div>\n <ExpandGroupIcon className={withBaseName(\"chevron\")} />\n </ListItem>\n );\n };\n"],"names":["makePrefixer","CategoryListItem","useRef","useCategoryListContext","useIcon","useMemo","ListItem","jsx","jsxs"],"mappings":";;;;;;;;;;;;;;AAMA,MAAM,YAAA,GAAeA,kBAAa,sBAAsB,CAAA;AAOjD,MAAM,gBAAA,GACX,SAASC,iBAAAA,CAAiB,EAAE,MAAM,QAAA,EAAU,GAAG,OAAM,EAAG;AACtD,EAAA,MAAM,OAAA,GAAUC,aAAuB,IAAI,CAAA;AAC3C,EAAA,MAAM,UAAUC,0CAAA,EAAuB;AACvC,EAAA,MAAM,EAAE,eAAA,EAAgB,GAAIC,YAAA,EAAQ;AACpC,EAAA,MAAM,SAAA,GAA2BC,aAAA;AAAA,IAC/B,OAAO;AAAA,MACL,UAAU,OAAA,CAAQ;AAAA,KACpB,CAAA;AAAA,IACA,CAAC,QAAQ,KAAK;AAAA,GAChB;AAEA,EAAA,uCACGC,iBAAA,EAAA,EAAU,GAAG,KAAA,EAAO,KAAA,EAAO,qCAAU,IAAA,EACpC,QAAA,EAAA;AAAA,oBAAAC,cAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,SAAA,EAAW,YAAA,CAAa,MAAM,CAAA,EAAG,KAAA,EAAO,SAAA,EACxD,QAAA,EAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,IAAA,EACb,CAAA;AAAA,oBACAC,eAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,iBAAiB,CAAA,EAC5C,QAAA,EAAA;AAAA,sBAAAD,cAAA,CAAC,UAAK,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,sBACPA,cAAA,CAAC,UAAK,SAAA,EAAW,YAAA,CAAa,QAAQ,CAAA,EACnC,QAAA,EAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAA,CAAO,IAAA,CAAK,IAAA,CAAA,EACzB,CAAA;AAAA,sBACAA,cAAA,CAAC,UAAK,QAAA,EAAA,GAAA,EAAC;AAAA,KAAA,EACT,CAAA;AAAA,oBACAA,cAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAW,YAAA,CAAa,SAAS,CAAA,EAAG;AAAA,GAAA,EACvD,CAAA;AAEJ;;;;"}
@@ -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-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;;;;"}
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,cAAA,GAAiBC,gBAAA;AAAA,EAC5B,SAASC,eAAAA,CAAe,KAAA,EAAO,GAAA,EAAK;AAClC,IAAA,MAAM;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,KACF,GAAI,KAAA;AAEJ,IAAA,MAAM,YAAA,GAAeC,cAAQ,MAAM;AACjC,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,OAAO,CAAC,SAAyB,CAAC,IAAA,CAAK,UAAU,IAAA,CAAK,KAAK,CAAA,CAAE,IAAA,CAAK,IAAI,CAAA;AAAA,MACxE;AACA,MAAA,OAAO,CAAC,SAAyB,IAAA,CAAK,KAAA;AAAA,IACxC,CAAA,EAAG,CAAC,YAAY,CAAC,CAAA;AAEjB,IAAA,MAAM,YAAA,GAA6C,CACjD,cAAA,EACA,KAAA,KACG;AACH,MAAA,OAAO;AAAA,QACL,QAAA,EAAU,IAAA;AAAA,QACV;AAAA,OACF;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,QAAA,GAAW,CAAC,KAAA,KAA6C;AAC7D,MAAA,MAAM,kBAAA,GAAqB,MAAM,aAAA,CAAc,KAAA;AAC/C,MAAA,uBAAA,CAAwB,kBAAkB,CAAA;AAAA,IAC5C,CAAA;AAEA,IAAA,uBACEC,eAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAU,SAAA,EAAW,cAAa,EACrC,QAAA,EAAA;AAAA,sBAAAC,cAAA,CAACC,gBAAA,EAAA,EAAW,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,KAAA,EAAO,UAAA;AAAA,UACP,OAAA,EAAS,YAAA;AAAA,UACT,aAAA;AAAA,UACA,QAAA,EAAU,SAAA;AAAA,UACV,OAAA,EAAS,YAAA;AAAA,UAET,QAAA,EAAU,qBAAA;AAAA,UACV;AAAA;AAAA,OACF;AAAA,sBACAF,cAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,YAAA,CAAa,WAAW,CAAA,EAAG,CAAA;AAAA,sBAC3CD,eAAA;AAAA,QAACI,sBAAA;AAAA,QAAA;AAAA,UACC,SAAA,EAAW,aAAa,aAAa,CAAA;AAAA,UACrC,aAAA,EAAY,kBAAA;AAAA,UACZ,KAAA,EAAO,eAAA;AAAA,UACP,QAAA;AAAA,UAEA,QAAA,EAAA;AAAA,4BAAAH,cAAA,CAACI,iBAAA,EAAA,EAAa,KAAA,EAAM,KAAA,EAAM,QAAA,EAAA,KAAA,EAAG,CAAA;AAAA,4BAC7BJ,cAAA,CAACI,iBAAA,EAAA,EAAa,KAAA,EAAM,IAAA,EAAK,QAAA,EAAA,IAAA,EAAE;AAAA;AAAA;AAAA;AAC7B,KAAA,EACF,CAAA;AAAA,EAEJ;AACF;;;;"}
@@ -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,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;;;;"}
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,IAAA,EAAsB;AAC1C,EAAA,OAAO,CAAC,IAAA,CAAK,QAAA,EAAU,KAAK,KAAK,CAAA,CAAE,KAAK,IAAI,CAAA;AAC9C;AAEO,SAAS,WAAW,KAAA,EAAwB;AACjD,EAAA,MAAM;AAAA,IACJ,UAAA;AAAA,IACA,aAAA;AAAA,IACA,QAAA,EAAU,YAAA;AAAA,IACV,SAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AAEJ,EAAA,MAAM,eAAeC,gBAAA,EAAU;AAC/B,EAAAC,+BAAA,CAAyB;AAAA,IACvB,MAAA,EAAQ,kBAAA;AAAA,IACR,GAAA,EAAKC,UAAA;AAAA,IACL,MAAA,EAAQ;AAAA,GACT,CAAA;AAED,EAAA,MAAM,QAAA,GACJC,iBAAA;AAAA,IACE,CAAC,QAAQ,KAAA,KAAU;AACjB,MAAA,YAAA,CAAa,KAAA,IAAS,EAAE,CAAA;AAAA,IAC1B,CAAA;AAAA,IACA,CAAC,YAAY;AAAA,GACf;AAEF,EAAA,uBACEC,eAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,KAAA;AAAA,MACX,aAAA,EAAY,aAAA;AAAA,MACZ,gBAAA;AAAA,MACA,wBAAA,EAA0B,UAAA;AAAA,MAC1B,YAAA;AAAA,MACA,WAAA,EAAa,mBAAA;AAAA,MACb,iBAAA,EAAmB,QAAA;AAAA,MACnB,iBAAA,EAAkB,UAAA;AAAA,MAClB,QAAA,EAAU,aAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MAEN,QAAA,EAAA;AAAA,QAAA,iBAAA,CAAkB,GAAA,CAAI,CAAC,aAAA,KAAsC;AAC5D,UAAA,sCACGC,2BAAA,EAAA,EAAuC,KAAA,EAAO,aAAA,CAAc,IAAA,EAC1D,wBAAc,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,oCACxBC,iBAAA,EAAA,EAAqB,KAAA,EAAA,EAAP,KAAqB,CACrC,CAAA,EAAA,EAHiB,cAAc,IAIlC,CAAA;AAAA,QAEJ,CAAC,CAAA;AAAA,wBACDC,cAAA,CAACD,qBAAS,SAAA,EAAW,YAAA,CAAa,YAAY,CAAA,EAC3C,QAAA,EAAA,CAAA,cAAA,EAAiB,UAAU,CAAA,CAAA,CAAA,EAC9B;AAAA;AAAA;AAAA,GACF;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValueList.js","sources":["../src/query-input/internal/ValueList.tsx"],"sourcesContent":["import { makePrefixer, useIcon } from \"@salt-ds/core\";\nimport type { Dispatch, ReactElement, SetStateAction } from \"react\";\nimport type { SelectHandler } from \"../../common-hooks\";\nimport { List, ListItem } from \"../../list\";\nimport type { QueryInputCategory } from \"../queryInputTypes\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputValueList\");\n\nexport interface ValueListProps {\n category: QueryInputCategory | null;\n rootWidth: number;\n onBack: () => void;\n selectedValues: string[];\n onValueToggle: (category: QueryInputCategory, value: string) => void;\n highlightedValueIndex?: number;\n setHighlightedValueIndex: Dispatch<SetStateAction<number>>;\n}\n\nexport function ValueList(props: ValueListProps) {\n const {\n category,\n rootWidth,\n onBack,\n selectedValues,\n onValueToggle,\n highlightedValueIndex,\n setHighlightedValueIndex,\n } = props;\n const { PreviousIcon } = useIcon();\n\n const handleSelect: SelectHandler = (_, value: string) => {\n onValueToggle(category!, value);\n };\n\n const items: ReactElement[] = category\n ? category.values.map((value) => (\n <ListItem key={value} item={value}>\n {value}\n </ListItem>\n ))\n : [];\n\n return (\n <div className={withBaseName()} tabIndex={0} data-testid=\"value-list\">\n <List\n borderless={true}\n checkable={false}\n highlightedIndex={highlightedValueIndex}\n onHighlight={setHighlightedValueIndex}\n onSelect={handleSelect}\n selectionStrategy=\"multiple\"\n selected={selectedValues}\n width={rootWidth}\n >\n <ListItem\n className={withBaseName(\"back\")}\n onClick={onBack}\n selectable={false}\n >\n <PreviousIcon />\n <div className={withBaseName(\"category\")}>\n {category ? category.name : \"\"}\n </div>\n </ListItem>\n {items}\n </List>\n </div>\n );\n}\n"],"names":["makePrefixer","useIcon","jsx","ListItem","jsxs","List"],"mappings":";;;;;;;;;;;;;AAMA,MAAM,YAAA,GAAeA,kBAAa,yBAAyB,CAAA;AAYpD,SAAS,UAAU,KAAuB,EAAA;AAC/C,EAAM,MAAA;AAAA,IACJ,QAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACE,GAAA,KAAA;AACJ,EAAM,MAAA,EAAE,YAAa,EAAA,GAAIC,YAAQ,EAAA;AAEjC,EAAM,MAAA,YAAA,GAA8B,CAAC,CAAA,EAAG,KAAkB,KAAA;AACxD,IAAA,aAAA,CAAc,UAAW,KAAK,CAAA;AAAA,GAChC;AAEA,EAAA,MAAM,KAAwB,GAAA,QAAA,GAC1B,QAAS,CAAA,MAAA,CAAO,IAAI,CAAC,KAAA,qBAClBC,cAAA,CAAAC,iBAAA,EAAA,EAAqB,MAAM,KACzB,EAAA,QAAA,EAAA,KAAA,EAAA,EADY,KAEf,CACD,IACD,EAAC;AAEL,EACE,uBAAAD,cAAA,CAAC,SAAI,SAAW,EAAA,YAAA,IAAgB,QAAU,EAAA,CAAA,EAAG,eAAY,YACvD,EAAA,QAAA,kBAAAE,eAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,UAAY,EAAA,IAAA;AAAA,MACZ,SAAW,EAAA,KAAA;AAAA,MACX,gBAAkB,EAAA,qBAAA;AAAA,MAClB,WAAa,EAAA,wBAAA;AAAA,MACb,QAAU,EAAA,YAAA;AAAA,MACV,iBAAkB,EAAA,UAAA;AAAA,MAClB,QAAU,EAAA,cAAA;AAAA,MACV,KAAO,EAAA,SAAA;AAAA,MAEP,QAAA,EAAA;AAAA,wBAAAD,eAAA;AAAA,UAACD,iBAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,YAC9B,OAAS,EAAA,MAAA;AAAA,YACT,UAAY,EAAA,KAAA;AAAA,YAEZ,QAAA,EAAA;AAAA,8BAAAD,cAAA,CAAC,YAAa,EAAA,EAAA,CAAA;AAAA,8BACdA,cAAA,CAAC,SAAI,SAAW,EAAA,YAAA,CAAa,UAAU,CACpC,EAAA,QAAA,EAAA,QAAA,GAAW,QAAS,CAAA,IAAA,GAAO,EAC9B,EAAA;AAAA;AAAA;AAAA,SACF;AAAA,QACC;AAAA;AAAA;AAAA,GAEL,EAAA,CAAA;AAEJ;;;;"}
1
+ {"version":3,"file":"ValueList.js","sources":["../src/query-input/internal/ValueList.tsx"],"sourcesContent":["import { makePrefixer, useIcon } from \"@salt-ds/core\";\nimport type { Dispatch, ReactElement, SetStateAction } from \"react\";\nimport type { SelectHandler } from \"../../common-hooks\";\nimport { List, ListItem } from \"../../list\";\nimport type { QueryInputCategory } from \"../queryInputTypes\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputValueList\");\n\nexport interface ValueListProps {\n category: QueryInputCategory | null;\n rootWidth: number;\n onBack: () => void;\n selectedValues: string[];\n onValueToggle: (category: QueryInputCategory, value: string) => void;\n highlightedValueIndex?: number;\n setHighlightedValueIndex: Dispatch<SetStateAction<number>>;\n}\n\nexport function ValueList(props: ValueListProps) {\n const {\n category,\n rootWidth,\n onBack,\n selectedValues,\n onValueToggle,\n highlightedValueIndex,\n setHighlightedValueIndex,\n } = props;\n const { PreviousIcon } = useIcon();\n\n const handleSelect: SelectHandler = (_, value: string) => {\n onValueToggle(category!, value);\n };\n\n const items: ReactElement[] = category\n ? category.values.map((value) => (\n <ListItem key={value} item={value}>\n {value}\n </ListItem>\n ))\n : [];\n\n return (\n <div className={withBaseName()} tabIndex={0} data-testid=\"value-list\">\n <List\n borderless={true}\n checkable={false}\n highlightedIndex={highlightedValueIndex}\n onHighlight={setHighlightedValueIndex}\n onSelect={handleSelect}\n selectionStrategy=\"multiple\"\n selected={selectedValues}\n width={rootWidth}\n >\n <ListItem\n className={withBaseName(\"back\")}\n onClick={onBack}\n selectable={false}\n >\n <PreviousIcon />\n <div className={withBaseName(\"category\")}>\n {category ? category.name : \"\"}\n </div>\n </ListItem>\n {items}\n </List>\n </div>\n );\n}\n"],"names":["makePrefixer","useIcon","jsx","ListItem","jsxs","List"],"mappings":";;;;;;;;;;;;;AAMA,MAAM,YAAA,GAAeA,kBAAa,yBAAyB,CAAA;AAYpD,SAAS,UAAU,KAAA,EAAuB;AAC/C,EAAA,MAAM;AAAA,IACJ,QAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,aAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACF,GAAI,KAAA;AACJ,EAAA,MAAM,EAAE,YAAA,EAAa,GAAIC,YAAA,EAAQ;AAEjC,EAAA,MAAM,YAAA,GAA8B,CAAC,CAAA,EAAG,KAAA,KAAkB;AACxD,IAAA,aAAA,CAAc,UAAW,KAAK,CAAA;AAAA,EAChC,CAAA;AAEA,EAAA,MAAM,KAAA,GAAwB,QAAA,GAC1B,QAAA,CAAS,MAAA,CAAO,IAAI,CAAC,KAAA,qBACnBC,cAAA,CAACC,iBAAA,EAAA,EAAqB,MAAM,KAAA,EACzB,QAAA,EAAA,KAAA,EAAA,EADY,KAEf,CACD,IACD,EAAC;AAEL,EAAA,uBACED,cAAA,CAAC,SAAI,SAAA,EAAW,YAAA,IAAgB,QAAA,EAAU,CAAA,EAAG,eAAY,YAAA,EACvD,QAAA,kBAAAE,eAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,UAAA,EAAY,IAAA;AAAA,MACZ,SAAA,EAAW,KAAA;AAAA,MACX,gBAAA,EAAkB,qBAAA;AAAA,MAClB,WAAA,EAAa,wBAAA;AAAA,MACb,QAAA,EAAU,YAAA;AAAA,MACV,iBAAA,EAAkB,UAAA;AAAA,MAClB,QAAA,EAAU,cAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MAEP,QAAA,EAAA;AAAA,wBAAAD,eAAA;AAAA,UAACD,iBAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAW,aAAa,MAAM,CAAA;AAAA,YAC9B,OAAA,EAAS,MAAA;AAAA,YACT,UAAA,EAAY,KAAA;AAAA,YAEZ,QAAA,EAAA;AAAA,8BAAAD,cAAA,CAAC,YAAA,EAAA,EAAa,CAAA;AAAA,8BACdA,cAAA,CAAC,SAAI,SAAA,EAAW,YAAA,CAAa,UAAU,CAAA,EACpC,QAAA,EAAA,QAAA,GAAW,QAAA,CAAS,IAAA,GAAO,EAAA,EAC9B;AAAA;AAAA;AAAA,SACF;AAAA,QACC;AAAA;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"ValueSelector.js","sources":["../src/query-input/internal/ValueSelector.tsx"],"sourcesContent":["import {\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { type Dispatch, type Ref, type SetStateAction, useMemo } from \"react\";\nimport { Portal } from \"../../portal\";\nimport { useWindow } from \"../../window\";\nimport type { QueryInputCategory, QueryInputItem } from \"../queryInputTypes\";\nimport { CategoryList } from \"./CategoryList\";\nimport { SearchList } from \"./SearchList\";\nimport { ValueList } from \"./ValueList\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputValueSelector\");\n\nexport interface ValueSelectorProps {\n isOpen: boolean;\n anchorElement: HTMLElement | null;\n popperRef: Ref<HTMLDivElement>;\n\n inputValue?: string;\n categories: QueryInputCategory[];\n selectedCategory: QueryInputCategory | null;\n onSelectedCategoryChange: (category: QueryInputCategory | null) => void;\n\n width: number;\n selectedItems: QueryInputItem[];\n onValueToggle: (category: QueryInputCategory, value: string) => void;\n onSearchListChange: (items: QueryInputItem[]) => void;\n\n highlightedIndex?: number;\n visibleCategories: QueryInputCategory[];\n\n highlightedCategoryIndex?: number;\n highlightedValueIndex?: number;\n setHighlightedIndex: Dispatch<SetStateAction<number>>;\n setHighlightedCategoryIndex: Dispatch<SetStateAction<number>>;\n setHighlightedValueIndex: Dispatch<SetStateAction<number>>;\n}\n\nexport function ValueSelector(props: ValueSelectorProps) {\n const {\n isOpen,\n inputValue,\n anchorElement,\n popperRef,\n categories,\n selectedCategory,\n onSelectedCategoryChange,\n width,\n selectedItems,\n onValueToggle,\n highlightedIndex,\n visibleCategories,\n highlightedCategoryIndex,\n highlightedValueIndex,\n onSearchListChange,\n setHighlightedValueIndex,\n setHighlightedCategoryIndex,\n setHighlightedIndex,\n } = props;\n\n const selectedCategoryValues = useMemo(() => {\n if (!selectedCategory) {\n return [];\n }\n return selectedItems\n .filter((item) => item.category === selectedCategory.name)\n .map(({ value }) => value);\n }, [selectedCategory, selectedItems]);\n\n const onBackToCategories = () => {\n onSelectedCategoryChange(null);\n };\n\n const renderContent = () => {\n if (inputValue) {\n return (\n <SearchList\n inputValue={inputValue}\n selectedItems={selectedItems}\n onChange={onSearchListChange}\n rootWidth={width}\n highlightedIndex={highlightedIndex}\n visibleCategories={visibleCategories}\n setHighlightedIndex={setHighlightedIndex}\n />\n );\n }\n\n if (!selectedCategory) {\n return (\n <CategoryList\n categories={categories}\n rootWidth={width}\n onCategorySelect={onSelectedCategoryChange}\n highlightedCategoryIndex={highlightedCategoryIndex}\n setHighlightedCategoryIndex={setHighlightedCategoryIndex}\n />\n );\n }\n\n return (\n <ValueList\n category={selectedCategory}\n rootWidth={width}\n onBack={onBackToCategories}\n selectedValues={selectedCategoryValues}\n onValueToggle={onValueToggle}\n highlightedValueIndex={highlightedValueIndex}\n setHighlightedValueIndex={setHighlightedValueIndex}\n />\n );\n };\n\n const Window = useWindow();\n const { reference, floating, x, y, strategy } = useFloatingUI({\n placement: \"bottom\",\n });\n const handleRef = useForkRef<HTMLDivElement>(floating, popperRef);\n useIsomorphicLayoutEffect(() => {\n if (anchorElement) {\n reference(anchorElement);\n }\n }, [reference, anchorElement]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <Portal>\n <Window\n style={{\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n }}\n ref={handleRef}\n >\n <div className={withBaseName(\"content\")}>{renderContent()}</div>\n </Window>\n </Portal>\n );\n}\n"],"names":["makePrefixer","useMemo","jsx","SearchList","CategoryList","ValueList","useWindow","useFloatingUI","useForkRef","useIsomorphicLayoutEffect","Portal"],"mappings":"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"}
1
+ {"version":3,"file":"ValueSelector.js","sources":["../src/query-input/internal/ValueSelector.tsx"],"sourcesContent":["import {\n makePrefixer,\n useFloatingUI,\n useForkRef,\n useIsomorphicLayoutEffect,\n} from \"@salt-ds/core\";\nimport { type Dispatch, type Ref, type SetStateAction, useMemo } from \"react\";\nimport { Portal } from \"../../portal\";\nimport { useWindow } from \"../../window\";\nimport type { QueryInputCategory, QueryInputItem } from \"../queryInputTypes\";\nimport { CategoryList } from \"./CategoryList\";\nimport { SearchList } from \"./SearchList\";\nimport { ValueList } from \"./ValueList\";\n\nconst withBaseName = makePrefixer(\"saltQueryInputValueSelector\");\n\nexport interface ValueSelectorProps {\n isOpen: boolean;\n anchorElement: HTMLElement | null;\n popperRef: Ref<HTMLDivElement>;\n\n inputValue?: string;\n categories: QueryInputCategory[];\n selectedCategory: QueryInputCategory | null;\n onSelectedCategoryChange: (category: QueryInputCategory | null) => void;\n\n width: number;\n selectedItems: QueryInputItem[];\n onValueToggle: (category: QueryInputCategory, value: string) => void;\n onSearchListChange: (items: QueryInputItem[]) => void;\n\n highlightedIndex?: number;\n visibleCategories: QueryInputCategory[];\n\n highlightedCategoryIndex?: number;\n highlightedValueIndex?: number;\n setHighlightedIndex: Dispatch<SetStateAction<number>>;\n setHighlightedCategoryIndex: Dispatch<SetStateAction<number>>;\n setHighlightedValueIndex: Dispatch<SetStateAction<number>>;\n}\n\nexport function ValueSelector(props: ValueSelectorProps) {\n const {\n isOpen,\n inputValue,\n anchorElement,\n popperRef,\n categories,\n selectedCategory,\n onSelectedCategoryChange,\n width,\n selectedItems,\n onValueToggle,\n highlightedIndex,\n visibleCategories,\n highlightedCategoryIndex,\n highlightedValueIndex,\n onSearchListChange,\n setHighlightedValueIndex,\n setHighlightedCategoryIndex,\n setHighlightedIndex,\n } = props;\n\n const selectedCategoryValues = useMemo(() => {\n if (!selectedCategory) {\n return [];\n }\n return selectedItems\n .filter((item) => item.category === selectedCategory.name)\n .map(({ value }) => value);\n }, [selectedCategory, selectedItems]);\n\n const onBackToCategories = () => {\n onSelectedCategoryChange(null);\n };\n\n const renderContent = () => {\n if (inputValue) {\n return (\n <SearchList\n inputValue={inputValue}\n selectedItems={selectedItems}\n onChange={onSearchListChange}\n rootWidth={width}\n highlightedIndex={highlightedIndex}\n visibleCategories={visibleCategories}\n setHighlightedIndex={setHighlightedIndex}\n />\n );\n }\n\n if (!selectedCategory) {\n return (\n <CategoryList\n categories={categories}\n rootWidth={width}\n onCategorySelect={onSelectedCategoryChange}\n highlightedCategoryIndex={highlightedCategoryIndex}\n setHighlightedCategoryIndex={setHighlightedCategoryIndex}\n />\n );\n }\n\n return (\n <ValueList\n category={selectedCategory}\n rootWidth={width}\n onBack={onBackToCategories}\n selectedValues={selectedCategoryValues}\n onValueToggle={onValueToggle}\n highlightedValueIndex={highlightedValueIndex}\n setHighlightedValueIndex={setHighlightedValueIndex}\n />\n );\n };\n\n const Window = useWindow();\n const { reference, floating, x, y, strategy } = useFloatingUI({\n placement: \"bottom\",\n });\n const handleRef = useForkRef<HTMLDivElement>(floating, popperRef);\n useIsomorphicLayoutEffect(() => {\n if (anchorElement) {\n reference(anchorElement);\n }\n }, [reference, anchorElement]);\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <Portal>\n <Window\n style={{\n top: y ?? 0,\n left: x ?? 0,\n position: strategy,\n }}\n ref={handleRef}\n >\n <div className={withBaseName(\"content\")}>{renderContent()}</div>\n </Window>\n </Portal>\n );\n}\n"],"names":["makePrefixer","useMemo","jsx","SearchList","CategoryList","ValueList","useWindow","useFloatingUI","useForkRef","useIsomorphicLayoutEffect","Portal"],"mappings":"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"}
@@ -1 +1 @@
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;;;;"}
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,KAAA,EAA6B;AAC3D,EAAA,MAAM,EAAe,SAAA,EAAU,GAAI,KAAA;AACnC,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,IAAIA,cAAA,CAAkB,KAAa,CAAA;AAE3D,EAAA,MAAM,SAAA,GAAY,CAAC,KAAA,KAAyB;AAC1C,IAAA,IAAI,KAAA,CAAM,UAAU,CAAC,SAAA,EAAW,WAAW,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,EAAG;AAChE,MAAA,SAAA,CAAU,CAAC,CAAA,KAAM,CAAC,CAAC,CAAA;AAAA,IACrB,CAAA,MAAA,IACE,CAAC,MAAA,IACD,CAAC,OAAO,KAAA,EAAO,QAAA,EAAU,SAAA,EAAW,OAAA,EAAS,MAAM,CAAA,CAAE,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,EACvE;AACA,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB,CAAA,MAAA,IAAW,MAAA,IAAU,KAAA,CAAM,GAAA,KAAQ,QAAA,EAAU;AAC3C,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB,CAAA,MAAA,IAAW,MAAA,IAAU,SAAA,IAAa,KAAA,CAAM,QAAQ,OAAA,EAAS;AACvD,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,SAAA,CAAU,IAAI,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,MAAM,SAAS,MAAM;AACnB,IAAA,SAAA,CAAU,KAAK,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,MAAM,WAAW,MAAM;AACrB,IAAA,IAAI,SAAA,EAAW;AACb,MAAA,SAAA,CAAU,KAAK,CAAA;AAAA,IACjB;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,UAAU,MAAM;AACpB,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,SAAA,CAAU,IAAI,CAAA;AAAA,IAChB;AAAA,EACF,CAAA;AAEA,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF;AACF;;;;"}
@@ -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> = () => {\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":";;;;;;;;;AA+BgB,SAAA,aAAA,CACd,OACA,YACqB,EAAA;AACrB,EAAM,MAAA,OAAA,GAAUA,aAAuB,IAAI,CAAA;AAC3C,EAAM,MAAA,SAAA,GAAYA,aAAuB,IAAI,CAAA;AAC7C,EAAM,MAAA,QAAA,GAAWA,aAAyB,IAAI,CAAA;AAC9C,EAAA,MAAM,CAAC,YAAA,EAAc,SAAS,CAAA,GAAIC,kBAAyB,IAAI,CAAA;AAE/D,EAAA,MAAM,UAAa,GAAAC,eAAA;AAAA,IACjB,YAAA;AAAA,IACA;AAAA,GACF;AACA,EAAA,MAAM,iBAAoB,GAAAA,eAAA;AAAA,IACxB,UAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,kBAAc,CAAA;AAAA,IACtD,YAAY,KAAM,CAAA,aAAA;AAAA,IAClB,OAAA,EAAS,KAAM,CAAA,oBAAA,IAAwB,EAAC;AAAA,IACxC,IAAM,EAAA,YAAA;AAAA,IACN,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAIA,kBAAc,CAAA;AAAA,IAC1D,YAAY,KAAM,CAAA,eAAA;AAAA,IAClB,OAAA,EAAS,MAAM,sBAA0B,IAAA,KAAA;AAAA,IACzC,IAAM,EAAA,YAAA;AAAA,IACN,KAAO,EAAA;AAAA,GACR,CAAA;AAED,EAAA,MAAM,eAAeC,+BAAgB,CAAA;AAAA,IAEnC,WAAW,KAAM,CAAA;AAAA,GAClB,CAAA;AAED,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIC,eAAkB,KAAK,CAAA;AACzD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC1D,EAAA,MAAM,CAAC,wBAAA,EAA0B,2BAA2B,CAAA,GAAIA,eAAS,CAAC,CAAA;AAC1E,EAAA,MAAM,CAAC,qBAAA,EAAuB,wBAAwB,CAAA,GAAIA,eAAS,CAAC,CAAA;AACpE,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAC1CA,eAAoC,IAAI,CAAA;AAC1C,EAAA,MAAM,wBAA2B,GAAAL,YAAA;AAAA,IAC/B;AAAC,GACH;AAEA,EAAA,MAAM,eAAoD,MAAM;AAC9D,IAAA,YAAA,CAAa,OAAQ,EAAA;AACrB,IAAA,YAAA,CAAa,IAAI,CAAA;AAAA,GACnB;AAEA,EAAM,MAAA,WAAA,GAAmD,CAAC,KAAU,KAAA;AAnFtE,IAAA,IAAA,EAAA,EAAA,EAAA;AAoFI,IAAI,IAAA,CAAC,SAAS,OAAS,EAAA;AACrB,MAAA;AAAA;AAEF,IAAA,MAAM,gBAAgB,KAAM,CAAA,aAAA;AAC5B,IAAM,MAAA,aAAA,GAAgB,QAAQ,OAAY,KAAA,aAAA;AAC1C,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA,QAAA,CAAS,QAAQ,KAAM,EAAA;AACvB,MAAA;AAAA;AAEF,IAAA,MAAM,iBAAoB,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,QAAS,CAAA,aAAA,CAAA;AACpD,IAAA,IAAI,iBAAmB,EAAA;AACrB,MAAA;AAAA;AAEF,IAAA,MAAM,mBAAsB,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,OAAV,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,QAAS,CAAA,aAAA,CAAA;AACxD,IAAA,IAAI,mBAAqB,EAAA;AACvB,MAAA,QAAA,CAAS,QAAQ,KAAM,EAAA;AACvB,MAAA;AAAA;AAEF,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,YAAA,CAAa,MAAO,EAAA;AAAA,GACtB;AAEA,EAAA,MAAM,UAA6C,MAAM;AACvD,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,YAAA,CAAa,OAAQ,EAAA;AAAA,GACvB;AAEA,EAAM,MAAA,MAAA,GAA4C,CAAC,KAAU,KAAA;AA/G/D,IAAA,IAAA,EAAA,EAAA,EAAA;AAgHI,IAAA,MAAM,gBAAgB,KAAM,CAAA,aAAA;AAC5B,IAAM,MAAA,aAAA,GAAgB,QAAQ,OAAY,KAAA,aAAA;AAC1C,IAAA,IAAI,aAAe,EAAA;AACjB,MAAA;AAAA;AAEF,IAAA,MAAM,iBAAoB,GAAA,CAAA,EAAA,GAAA,OAAA,CAAQ,OAAR,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAiB,QAAS,CAAA,aAAA,CAAA;AACpD,IAAA,IAAI,iBAAmB,EAAA;AACrB,MAAA;AAAA;AAEF,IAAA,MAAM,mBAAsB,GAAA,CAAA,EAAA,GAAA,SAAA,CAAU,OAAV,KAAA,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,QAAS,CAAA,aAAA,CAAA;AACxD,IAAA,IAAI,mBAAqB,EAAA;AACvB,MAAA;AAAA;AAEF,IAAA,YAAA,CAAa,KAAK,CAAA;AAClB,IAAA,YAAA,CAAa,MAAO,EAAA;AAAA,GACtB;AAEA,EAAM,MAAA,qBAAA,GAAwB,CAAC,QAA2C,KAAA;AACxE,IAAA,MAAM,UAAU,QAAU,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAA,IAAA;AAAA,MACxB,CAAC,IAAS,KAAA,IAAA,CAAK,QAAY,IAAA,IAAA,IAAQ,KAAK,KAAU,KAAA;AAAA,KAAA;AAEpD,IAAA,IAAI,OAAS,EAAA;AACX,MAAA,aAAA,CAAc,EAAE,CAAA;AAAA;AAElB,IAAiB,gBAAA,CAAA,QAAA,IAAY,EAAE,CAAA;AAC/B,IAAA,IAAI,MAAM,QAAU,EAAA;AAClB,MAAM,KAAA,CAAA,QAAA,CAAS,QAAY,IAAA,EAAE,CAAA;AAAA;AAE/B,IAAA,YAAA,CAAa,QAAS,EAAA;AAAA,GACxB;AAEA,EAAM,MAAA,uBAAA,GAA0B,CAAC,QAA8B,KAAA;AAC7D,IAAA,kBAAA,CAAmB,QAAQ,CAAA;AAC3B,IAAA,IAAI,MAAM,uBAAyB,EAAA;AACjC,MAAA,KAAA,CAAM,wBAAwB,QAAQ,CAAA;AAAA;AACxC,GACF;AAEA,EAAM,MAAA,wBAAA,GAA2B,CAAC,QAAwC,KAAA;AACxE,IAAA,IAAI,SAAS,OAAS,EAAA;AACpB,MAAA,QAAA,CAAS,QAAQ,KAAM,EAAA;AAAA;AAEzB,IAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA,GAC9B;AAEA,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIK,eAAiB,EAAE,CAAA;AAEvD,EAAM,MAAA,eAAA,GAAkBC,cAAQ,MAAM;AACpC,IAAM,MAAA,CAACC,gBAAiB,EAAA,cAAc,CAAI,GAAA,gBAAA;AAAA,MACxC,KAAM,CAAA,UAAA;AAAA,MACN;AAAA,KACF;AACA,IAAA,wBAAA,CAAyB,OAAU,GAAA,cAAA;AACnC,IAAOA,OAAAA,gBAAAA;AAAA,GACN,EAAA,CAAC,KAAM,CAAA,UAAA,EAAY,UAAU,CAAC,CAAA;AAEjC,EAAM,MAAA,aAAA,GAAsD,CAAC,KAAU,KAAA;AACrE,IAAM,MAAA,aAAA,GAAgB,MAAM,MAAO,CAAA,KAAA;AACnC,IAAA,aAAA,CAAc,aAAa,CAAA;AAE3B,IAAA,mBAAA,CAAoB,wBAAyB,CAAA,OAAA,CAAQ,MAAW,KAAA,CAAA,GAAI,IAAI,CAAC,CAAA;AAAA,GAC3E;AAEA,EAAM,MAAA,mBAAA,GAAsBD,cAAQ,MAAM;AACxC,IAAA,OAAO,eAAgB,CAAA,MAAA;AAAA,MACrB,CAAC,GAAA,EAAK,QAAa,KAAA,GAAA,GAAM,SAAS,MAAO,CAAA,MAAA;AAAA,MACzC;AAAA,KACF;AAAA,GACF,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,qBAAA,CAAsB,EAAE,CAAA;AAAA,GAC1B;AAEA,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,YAAA,CAAa,OAAQ,EAAA;AAAA,GACvB;AAEA,EAAA,MAAM,sBAAsB,MAAkC;AAC5D,IAAA,MAAM,CAAI,GAAA,gBAAA;AACV,IAAA,KAAA,MAAW,YAAY,eAAiB,EAAA;AACtC,MAAI,IAAA,CAAA,GAAI,QAAS,CAAA,MAAA,CAAO,MAAQ,EAAA;AAC9B,QAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,MAAA,CAAO,CAAC,CAAA;AAC/B,QAAO,OAAA;AAAA,UACL,UAAU,QAAS,CAAA,IAAA;AAAA,UACnB;AAAA,SACF;AAAA;AACF;AACF,GACF;AAEA,EAAM,MAAA,EAAE,kBAAqB,GAAA,EAAA,EAAO,GAAA,KAAA;AAEpC,EAAM,MAAA,mBAAA,GAAsB,CAAC,GAAgB,KAAA;AAC3C,IAAA,QAAQ,GAAK;AAAA,MACX,KAAK,MAAA;AACH,QAAA,mBAAA,CAAoB,CAAC,CAAA;AACrB,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,mBAAA,CAAoB,mBAAmB,CAAA;AACvC,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,mBAAA;AAAA,UAAoB,CAAC,CAAA,KACnB,mBAAoB,CAAA,CAAA,EAAG,yBAAyB,OAAO;AAAA,SACzD;AACA,QAAA;AAAA,MACF,KAAK,WAAA;AAEH,QAAA,mBAAA;AAAA,UAAoB,CAAC,CAAA,KACnB,mBAAoB,CAAA,CAAA,EAAG,yBAAyB,OAAO;AAAA,SACzD;AACA,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,mBAAA;AAAA,UAAoB,CAAC,CACnB,KAAA,IAAA,CAAK,GAAI,CAAA,mBAAA,EAAqB,IAAI,kBAAkB;AAAA,SACtD;AACA,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,mBAAA,CAAoB,CAAC,CAAM,KAAA,IAAA,CAAK,IAAI,CAAG,EAAA,CAAA,GAAI,kBAAkB,CAAC,CAAA;AAC9D,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IAAI,qBAAqB,mBAAqB,EAAA;AAC5C,UAAA,MAAM,QAAW,GAAA;AAAA,YACf,GAAG,aAAA;AAAA,YACH,EAAE,QAAA,EAAU,IAAM,EAAA,KAAA,EAAO,UAAW;AAAA,WACtC;AACA,UAAA,qBAAA,CAAsB,QAAQ,CAAA;AAAA,SACzB,MAAA;AACL,UAAI,IAAA,gBAAA,IAAoB,CAAK,IAAA,gBAAA,GAAmB,mBAAqB,EAAA;AACnE,YAAA,MAAM,UAAU,mBAAoB,EAAA;AACpC,YAAA,IAAI,OAAS,EAAA;AACX,cAAA,MAAM,QAAW,GAAA,CAAC,GAAG,aAAA,EAAe,OAAO,CAAA;AAC3C,cAAA,qBAAA,CAAsB,QAAQ,CAAA;AAAA;AAChC;AAEF,UAAA,aAAA,CAAc,EAAE,CAAA;AAAA;AAElB,QAAA;AAAA,MACF;AACE,QAAA;AAAA;AACJ,GACF;AAEA,EAAM,MAAA,qBAAA,GAAwB,CAAC,GAAgB,KAAA;AAC7C,IAAA,QAAQ,GAAK;AAAA,MACX,KAAK,MAAA;AACH,QAAA,2BAAA,CAA4B,CAAC,CAAA;AAC7B,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAA4B,2BAAA,CAAA,KAAA,CAAM,UAAW,CAAA,MAAA,GAAS,CAAC,CAAA;AACvD,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,2BAAA,CAA4B,CAAC,CAAM,KAAA,IAAA,CAAK,IAAI,CAAG,EAAA,CAAA,GAAI,CAAC,CAAC,CAAA;AACrD,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,2BAAA;AAAA,UAA4B,CAAC,MAC3B,IAAK,CAAA,GAAA,CAAI,MAAM,UAAW,CAAA,MAAA,GAAS,CAAG,EAAA,CAAA,GAAI,CAAC;AAAA,SAC7C;AACA,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,2BAAA,CAA4B,CAAC,CAAM,KAAA,IAAA,CAAK,IAAI,CAAG,EAAA,CAAA,GAAI,kBAAkB,CAAC,CAAA;AACtE,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,2BAAA;AAAA,UAA4B,CAAC,MAC3B,IAAK,CAAA,GAAA,CAAI,MAAM,UAAW,CAAA,MAAA,GAAS,CAAG,EAAA,CAAA,GAAI,kBAAkB;AAAA,SAC9D;AACA,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAA,IACE,wBAA4B,IAAA,CAAA,IAC5B,wBAA2B,GAAA,KAAA,CAAM,WAAW,MAC5C,EAAA;AACA,UAAM,MAAA,QAAA,GAAW,KAAM,CAAA,UAAA,CAAW,wBAAwB,CAAA;AAC1D,UAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA;AAE9B,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,IACE,wBAA4B,IAAA,CAAA,IAC5B,wBAA2B,GAAA,KAAA,CAAM,WAAW,MAC5C,EAAA;AACA,UAAM,MAAA,QAAA,GAAW,KAAM,CAAA,UAAA,CAAW,wBAAwB,CAAA;AAC1D,UAAA,mBAAA,CAAoB,QAAQ,CAAA;AAAA;AAE9B,QAAA;AAAA,MACF;AACE,QAAA;AAAA;AACJ,GACF;AAEA,EAAM,MAAA,kBAAA,GAAqB,CAAC,GAAgB,KAAA;AAC1C,IAAA,QAAQ,GAAK;AAAA,MACX,KAAK,MAAA;AACH,QAAA,wBAAA,CAAyB,CAAC,CAAA;AAC1B,QAAA;AAAA,MACF,KAAK,KAAA;AACH,QAAA,IAAI,oBAAoB,IAAM,EAAA;AAC5B,UAAyB,wBAAA,CAAA,gBAAA,CAAiB,OAAO,MAAM,CAAA;AAAA;AAEzD,QAAA;AAAA,MACF,KAAK,SAAA;AACH,QAAA,wBAAA,CAAyB,CAAC,CAAM,KAAA,IAAA,CAAK,IAAI,CAAG,EAAA,CAAA,GAAI,CAAC,CAAC,CAAA;AAClD,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,wBAAA,CAAyB,CAAC,CAAM,KAAA;AAC9B,UAAA,IAAI,oBAAoB,IAAM,EAAA;AAC5B,YAAA,OAAO,KAAK,GAAI,CAAA,gBAAA,CAAiB,MAAO,CAAA,MAAA,EAAQ,IAAI,CAAC,CAAA;AAAA;AAEvD,UAAO,OAAA,CAAA;AAAA,SACR,CAAA;AACD,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,wBAAA,CAAyB,CAAC,CAAM,KAAA,IAAA,CAAK,IAAI,CAAG,EAAA,CAAA,GAAI,kBAAkB,CAAC,CAAA;AACnE,QAAA;AAAA,MACF,KAAK,UAAA;AACH,QAAA,wBAAA,CAAyB,CAAC,CAAM,KAAA;AAC9B,UAAA,IAAI,oBAAoB,IAAM,EAAA;AAC5B,YAAA,OAAO,IAAK,CAAA,GAAA;AAAA,cACV,iBAAiB,MAAO,CAAA,MAAA;AAAA,cACxB,CAAI,GAAA;AAAA,aACN;AAAA;AAEF,UAAO,OAAA,CAAA;AAAA,SACR,CAAA;AACD,QAAA;AAAA,MACF,KAAK,OAAA;AACH,QAAI,IAAA,qBAAA,KAA0B,CAAK,IAAA,gBAAA,IAAoB,IAAM,EAAA;AAC3D,UAAA,mBAAA,CAAoB,IAAI,CAAA;AAAA,SACnB,MAAA;AACL,UAAA,MAAM,KAAQ,GAAA,gBAAA,CAAiB,MAAO,CAAA,qBAAA,GAAwB,CAAC,CAAA;AAC/D,UAAA,MAAM,WAAW,aAAc,CAAA,MAAA;AAAA,YAC7B,CAAC,SACC,EACE,IAAA,CAAK,aAAa,gBAAiB,CAAA,IAAA,IAAQ,KAAK,KAAU,KAAA,KAAA;AAAA,WAEhE;AACA,UAAI,IAAA,QAAA,CAAS,MAAW,KAAA,aAAA,CAAc,MAAQ,EAAA;AAC5C,YAAA,QAAA,CAAS,KAAK,EAAE,QAAA,EAAU,gBAAiB,CAAA,IAAA,EAAM,OAAO,CAAA;AAAA;AAE1D,UAAA,qBAAA,CAAsB,QAAQ,CAAA;AAAA;AAEhC,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,mBAAA,CAAoB,IAAI,CAAA;AACxB,QAAA;AAAA,MACF;AACE,QAAA;AAAA;AACJ,GACF;AAEA,EAAM,MAAA,SAAA,GAAoD,CAAC,KAAU,KAAA;AACnE,IAAA,YAAA,CAAa,UAAU,KAAK,CAAA;AAC5B,IAAA,IAAI,MAAM,KAAM,CAAA,GAAA;AAChB,IAAA,IAAI,KAAM,CAAA,GAAA,KAAQ,GAAO,IAAA,KAAA,CAAM,OAAS,EAAA;AACtC,MAAM,GAAA,GAAA,OAAA;AAAA;AAER,IAAA,MAAM,qBAAqB,UAAe,KAAA,EAAA;AAC1C,IAAM,MAAA,oBAAA,GAAuB,CAAC,kBAAA,IAAsB,CAAC,gBAAA;AACrD,IAAM,MAAA,iBAAA,GAAoB,CAAC,kBAAA,IAAsB,CAAC,oBAAA;AAClD,IAAA,IAAI,kBAAoB,EAAA;AACtB,MAAA,mBAAA,CAAoB,GAAG,CAAA;AAAA,eACd,oBAAsB,EAAA;AAC/B,MAAA,qBAAA,CAAsB,GAAG,CAAA;AAAA,KACpB,MAAA;AACL,MAAA,kBAAA,CAAmB,GAAG,CAAA;AAAA;AAExB,IAAA,QAAQ,MAAM,GAAK;AAAA,MACjB,KAAK,SAAA;AAAA,MACL,KAAK,WAAA;AAAA,MACL,KAAK,OAAA;AACH,QAAA,KAAA,CAAM,cAAe,EAAA;AACrB,QAAA;AAAA,MACF,KAAK,WAAA;AACH,QAAA,IAAI,iBAAmB,EAAA;AACrB,UAAA,KAAA,CAAM,cAAe,EAAA;AAAA;AAEvB,QAAA;AAAA,MACF,KAAK,YAAA;AACH,QAAA,IAAI,oBAAsB,EAAA;AACxB,UAAA,KAAA,CAAM,cAAe,EAAA;AAAA;AAEvB,QAAA;AAAA,MACF,KAAK,QAAA;AACH,QAAA,aAAA,CAAc,EAAE,CAAA;AAAA;AACpB,GACF;AAEA,EAAM,MAAA,aAAA,GAAgB,CAAC,QAAA,EAA8B,KAAkB,KAAA;AACrE,IAAA,MAAM,WAAW,aAAc,CAAA,MAAA;AAAA,MAC7B,CAAC,SAAS,EAAE,IAAA,CAAK,aAAa,QAAS,CAAA,IAAA,IAAQ,KAAK,KAAU,KAAA,KAAA;AAAA,KAChE;AACA,IAAI,IAAA,QAAA,CAAS,MAAW,KAAA,aAAA,CAAc,MAAQ,EAAA;AAC5C,MAAA,QAAA,CAAS,KAAK,EAAE,QAAA,EAAU,QAAS,CAAA,IAAA,EAAM,OAAO,CAAA;AAAA;AAElD,IAAA,qBAAA,CAAsB,QAAQ,CAAA;AAAA,GAChC;AAEA,EAAO,OAAA;AAAA,IACL,iBAAA;AAAA,IACA,eAAiB,EAAA;AAAA,MACf,OAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,mBAAqB,EAAA;AAAA,MACnB,QAAA;AAAA,MACA,UAAU,KAAM,CAAA,QAAA;AAAA,MAChB,aAAA;AAAA,MACA,OAAA;AAAA,MACA,MAAA;AAAA,MACA,YAAA;AAAA,MACA,YAAA;AAAA,MACA,WAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MACA,aAAA;AAAA,MACA,qBAAA;AAAA,MACA,SAAA;AAAA,MACA,SAAA;AAAA,MACA,eAAA;AAAA,MACA;AAAA,KACF;AAAA,IACA,kBAAoB,EAAA;AAAA,MAClB,QAAQ,YAAa,CAAA,MAAA;AAAA,MACrB,YAAY,KAAM,CAAA,UAAA;AAAA,MAClB,gBAAA;AAAA,MACA,aAAA;AAAA,MACA,aAAA;AAAA,MACA,kBAAoB,EAAA,qBAAA;AAAA,MACpB,eAAe,OAAQ,CAAA,OAAA;AAAA,MACvB,KAAO,EAAA,SAAA;AAAA,MACP,wBAAA;AAAA,MACA,SAAA;AAAA,MACA,UAAA;AAAA,MACA,gBAAA;AAAA,MACA,iBAAmB,EAAA,eAAA;AAAA,MACnB,wBAAA;AAAA,MACA,qBAAA;AAAA,MACA,2BAAA;AAAA,MACA,wBAAA;AAAA,MACA;AAAA;AACF,GACF;AACF;AAEA,SAAS,gBAAA,CACP,YACA,UAC4D,EAAA;AAE5D,EAAA,IAAI,CAAC,UAAY,EAAA;AACf,IAAO,OAAA,CAAC,UAAY,EAAA,EAAE,CAAA;AAAA;AAExB,EAAM,MAAA,KAAA,GAAQ,WAAW,WAAY,EAAA;AACrC,EAAA,MAAM,oBAA0C,EAAC;AACjD,EAAA,MAAM,iBAAqD,EAAC;AAC5D,EAAA,KAAA,MAAW,KAAK,UAAY,EAAA;AAC1B,IAAM,MAAA,MAAA,GAAS,CAAE,CAAA,MAAA,CAAO,MAAO,CAAA,CAAC,CAAM,KAAA,CAAA,CAAE,WAAY,EAAA,CAAE,QAAS,CAAA,KAAK,CAAC,CAAA;AACrE,IAAI,IAAA,MAAA,CAAO,SAAS,CAAG,EAAA;AACrB,MAAA,MAAM,kBAAqB,GAAA;AAAA,QACzB,MAAM,CAAE,CAAA,IAAA;AAAA,QACR;AAAA,OACF;AACA,MAAA,iBAAA,CAAkB,KAAK,kBAAkB,CAAA;AACzC,MAAe,cAAA,CAAA,IAAA,CAAK,kBAAoB,EAAA,GAAG,MAAM,CAAA;AAAA;AACnD;AAEF,EAAO,OAAA,CAAC,mBAAmB,cAAc,CAAA;AAC3C;AAEA,SAAS,mBAAA,CACP,OACA,cACA,EAAA;AACA,EAAA,MAAM,YAAY,KAAQ,GAAA,CAAA;AAE1B,EAAI,IAAA,SAAA,KAAc,cAAe,CAAA,MAAA,GAAS,CAAG,EAAA;AAC3C,IAAO,OAAA,KAAA;AAAA;AAET,EAAI,IAAA,SAAA,KAAc,eAAe,MAAQ,EAAA;AACvC,IAAO,OAAA,SAAA;AAAA;AAET,EAAA,IAAI,OAAO,cAAA,CAAe,SAAS,CAAA,KAAM,QAAU,EAAA;AACjD,IAAO,OAAA,SAAA;AAAA;AAET,EAAA,OAAO,SAAY,GAAA,CAAA;AACrB;AAEA,SAAS,mBAAA,CACP,OACA,cACA,EAAA;AACA,EAAA,MAAM,YAAY,KAAQ,GAAA,CAAA;AAC1B,EAAA,IAAI,cAAc,CAAG,EAAA;AACnB,IAAO,OAAA,KAAA;AAAA;AAET,EAAA,IAAI,OAAO,cAAA,CAAe,SAAS,CAAA,KAAM,QAAU,EAAA;AACjD,IAAO,OAAA,SAAA;AAAA;AAET,EAAA,OAAO,SAAY,GAAA,CAAA;AACrB;;;;"}
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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"}
@@ -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 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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"}