@deephaven/components 1.22.1 → 1.22.2-alpha-pivot-builder.0

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 (241) hide show
  1. package/dist/AutoCompleteInput.js +41 -79
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/AutoResizeTextarea.js +29 -13
  4. package/dist/AutoResizeTextarea.js.map +1 -1
  5. package/dist/BasicModal.js +17 -15
  6. package/dist/BasicModal.js.map +1 -1
  7. package/dist/BulkActionBar.js +3 -5
  8. package/dist/BulkActionBar.js.map +1 -1
  9. package/dist/Button.js +24 -25
  10. package/dist/Button.js.map +1 -1
  11. package/dist/CardFlip.js +4 -6
  12. package/dist/CardFlip.js.map +1 -1
  13. package/dist/Checkbox.js +22 -13
  14. package/dist/Checkbox.js.map +1 -1
  15. package/dist/Collapse.js +6 -9
  16. package/dist/Collapse.js.map +1 -1
  17. package/dist/CopyButton.js +14 -6
  18. package/dist/CopyButton.js.map +1 -1
  19. package/dist/CustomTimeSelect.js +49 -88
  20. package/dist/CustomTimeSelect.js.map +1 -1
  21. package/dist/DateInput.js +25 -10
  22. package/dist/DateInput.js.map +1 -1
  23. package/dist/DateInputUtils.js +1 -3
  24. package/dist/DateInputUtils.js.map +1 -1
  25. package/dist/DateTimeInput.js +28 -12
  26. package/dist/DateTimeInput.js.map +1 -1
  27. package/dist/DebouncedSearchInput.js +10 -19
  28. package/dist/DebouncedSearchInput.js.map +1 -1
  29. package/dist/DragUtils.js +15 -6
  30. package/dist/DragUtils.js.map +1 -1
  31. package/dist/DraggableItemList.js +42 -57
  32. package/dist/DraggableItemList.js.map +1 -1
  33. package/dist/EditableItemList.js +28 -13
  34. package/dist/EditableItemList.js.map +1 -1
  35. package/dist/ErrorBoundary.js +6 -11
  36. package/dist/ErrorBoundary.js.map +1 -1
  37. package/dist/ErrorView.js +20 -8
  38. package/dist/ErrorView.js.map +1 -1
  39. package/dist/HierarchicalCheckboxMenu.js +30 -28
  40. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  41. package/dist/ItemList.js +96 -168
  42. package/dist/ItemList.js.map +1 -1
  43. package/dist/ItemListItem.js +46 -60
  44. package/dist/ItemListItem.js.map +1 -1
  45. package/dist/LoadingOverlay.js +13 -9
  46. package/dist/LoadingOverlay.js.map +1 -1
  47. package/dist/LoadingSpinner.js +3 -4
  48. package/dist/LoadingSpinner.js.map +1 -1
  49. package/dist/MaskedInput.js +44 -41
  50. package/dist/MaskedInput.js.map +1 -1
  51. package/dist/MaskedInputUtils.js +1 -3
  52. package/dist/MaskedInputUtils.js.map +1 -1
  53. package/dist/Option.js +1 -3
  54. package/dist/Option.js.map +1 -1
  55. package/dist/RadioGroup.js +17 -9
  56. package/dist/RadioGroup.js.map +1 -1
  57. package/dist/RadioItem.js +25 -14
  58. package/dist/RadioItem.js.map +1 -1
  59. package/dist/RandomAreaPlotAnimation.js +17 -13
  60. package/dist/RandomAreaPlotAnimation.js.map +1 -1
  61. package/dist/SearchInput.js +13 -14
  62. package/dist/SearchInput.js.map +1 -1
  63. package/dist/SearchableCombobox.js +3 -5
  64. package/dist/SearchableCombobox.js.map +1 -1
  65. package/dist/Select.js +5 -7
  66. package/dist/Select.js.map +1 -1
  67. package/dist/SelectValueList.js +21 -30
  68. package/dist/SelectValueList.js.map +1 -1
  69. package/dist/SocketedButton.js +18 -17
  70. package/dist/SocketedButton.js.map +1 -1
  71. package/dist/SplitButtonGroup.js +4 -6
  72. package/dist/SplitButtonGroup.js.map +1 -1
  73. package/dist/TableViewEmptyState.js +14 -6
  74. package/dist/TableViewEmptyState.js.map +1 -1
  75. package/dist/TextWithTooltip.js +3 -4
  76. package/dist/TextWithTooltip.js.map +1 -1
  77. package/dist/TimeInput.js +29 -12
  78. package/dist/TimeInput.js.map +1 -1
  79. package/dist/TimeSlider.js +46 -38
  80. package/dist/TimeSlider.js.map +1 -1
  81. package/dist/ToastNotification.js +9 -10
  82. package/dist/ToastNotification.js.map +1 -1
  83. package/dist/UISwitch.js +8 -9
  84. package/dist/UISwitch.js.map +1 -1
  85. package/dist/actions/ConfirmActionButton.js +7 -9
  86. package/dist/actions/ConfirmActionButton.js.map +1 -1
  87. package/dist/actions/IconActionButton.js +3 -5
  88. package/dist/actions/IconActionButton.js.map +1 -1
  89. package/dist/context-actions/ContextActionUtils.js +1 -3
  90. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  91. package/dist/context-actions/ContextActions.js +8 -18
  92. package/dist/context-actions/ContextActions.js.map +1 -1
  93. package/dist/context-actions/ContextMenu.js +53 -89
  94. package/dist/context-actions/ContextMenu.js.map +1 -1
  95. package/dist/context-actions/ContextMenuItem.js +11 -11
  96. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  97. package/dist/context-actions/ContextMenuRoot.js +6 -11
  98. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  99. package/dist/context-actions/GlobalContextAction.js +2 -6
  100. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  101. package/dist/context-actions/GlobalContextActions.js +4 -7
  102. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  103. package/dist/dialogs/ActionButtonDialogTrigger.js +7 -9
  104. package/dist/dialogs/ActionButtonDialogTrigger.js.map +1 -1
  105. package/dist/dialogs/ConfirmationDialog.js +8 -11
  106. package/dist/dialogs/ConfirmationDialog.js.map +1 -1
  107. package/dist/menu-actions/DropdownMenu.js +12 -22
  108. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  109. package/dist/menu-actions/Menu.js +19 -45
  110. package/dist/menu-actions/Menu.js.map +1 -1
  111. package/dist/modal/DebouncedModal.js +8 -9
  112. package/dist/modal/DebouncedModal.js.map +1 -1
  113. package/dist/modal/InfoModal.js +6 -7
  114. package/dist/modal/InfoModal.js.map +1 -1
  115. package/dist/modal/Modal.js +27 -15
  116. package/dist/modal/Modal.js.map +1 -1
  117. package/dist/modal/ModalBody.js +4 -6
  118. package/dist/modal/ModalBody.js.map +1 -1
  119. package/dist/modal/ModalFooter.js +3 -5
  120. package/dist/modal/ModalFooter.js.map +1 -1
  121. package/dist/modal/ModalHeader.js +7 -8
  122. package/dist/modal/ModalHeader.js.map +1 -1
  123. package/dist/navigation/DashboardList.js +17 -6
  124. package/dist/navigation/DashboardList.js.map +1 -1
  125. package/dist/navigation/Menu.js +4 -5
  126. package/dist/navigation/Menu.js.map +1 -1
  127. package/dist/navigation/MenuItem.js +7 -10
  128. package/dist/navigation/MenuItem.js.map +1 -1
  129. package/dist/navigation/NavTab.js +14 -17
  130. package/dist/navigation/NavTab.js.map +1 -1
  131. package/dist/navigation/NavTabList.js +39 -33
  132. package/dist/navigation/NavTabList.js.map +1 -1
  133. package/dist/navigation/Page.js +5 -7
  134. package/dist/navigation/Page.js.map +1 -1
  135. package/dist/navigation/Stack.js +20 -7
  136. package/dist/navigation/Stack.js.map +1 -1
  137. package/dist/popper/Popper.js +30 -57
  138. package/dist/popper/Popper.js.map +1 -1
  139. package/dist/popper/Tooltip.js +24 -54
  140. package/dist/popper/Tooltip.js.map +1 -1
  141. package/dist/shortcuts/Shortcut.js +10 -15
  142. package/dist/shortcuts/Shortcut.js.map +1 -1
  143. package/dist/shortcuts/ShortcutRegistry.js +1 -3
  144. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  145. package/dist/spectrum/ActionGroup.js +7 -9
  146. package/dist/spectrum/ActionGroup.js.map +1 -1
  147. package/dist/spectrum/ActionMenu.js +3 -5
  148. package/dist/spectrum/ActionMenu.js.map +1 -1
  149. package/dist/spectrum/CheckboxGroup.js +1 -3
  150. package/dist/spectrum/CheckboxGroup.js.map +1 -1
  151. package/dist/spectrum/Heading.js +2 -4
  152. package/dist/spectrum/Heading.js.map +1 -1
  153. package/dist/spectrum/ItemContent.js +16 -10
  154. package/dist/spectrum/ItemContent.js.map +1 -1
  155. package/dist/spectrum/ItemTooltip.js +2 -4
  156. package/dist/spectrum/ItemTooltip.js.map +1 -1
  157. package/dist/spectrum/TabPanels.js +3 -4
  158. package/dist/spectrum/TabPanels.js.map +1 -1
  159. package/dist/spectrum/Text.js +2 -4
  160. package/dist/spectrum/Text.js.map +1 -1
  161. package/dist/spectrum/View.js +11 -14
  162. package/dist/spectrum/View.js.map +1 -1
  163. package/dist/spectrum/comboBox/ComboBox.js +5 -9
  164. package/dist/spectrum/comboBox/ComboBox.js.map +1 -1
  165. package/dist/spectrum/comboBox/ComboBoxNormalized.js +3 -7
  166. package/dist/spectrum/comboBox/ComboBoxNormalized.js.map +1 -1
  167. package/dist/spectrum/listView/ListView.js +11 -11
  168. package/dist/spectrum/listView/ListView.js.map +1 -1
  169. package/dist/spectrum/listView/ListViewNormalized.js +22 -24
  170. package/dist/spectrum/listView/ListViewNormalized.js.map +1 -1
  171. package/dist/spectrum/listView/ListViewWrapper.js +11 -15
  172. package/dist/spectrum/listView/ListViewWrapper.js.map +1 -1
  173. package/dist/spectrum/multiSelect/MultiSelect.js +113 -100
  174. package/dist/spectrum/multiSelect/MultiSelect.js.map +1 -1
  175. package/dist/spectrum/multiSelect/MultiSelectListBox.js +9 -11
  176. package/dist/spectrum/multiSelect/MultiSelectListBox.js.map +1 -1
  177. package/dist/spectrum/multiSelect/MultiSelectNormalized.js +3 -7
  178. package/dist/spectrum/multiSelect/MultiSelectNormalized.js.map +1 -1
  179. package/dist/spectrum/multiSelect/MultiSelectTag.js +5 -7
  180. package/dist/spectrum/multiSelect/MultiSelectTag.js.map +1 -1
  181. package/dist/spectrum/multiSelect/useMultiSelectFilter.js +20 -14
  182. package/dist/spectrum/multiSelect/useMultiSelectFilter.js.map +1 -1
  183. package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js +27 -20
  184. package/dist/spectrum/multiSelect/useMultiSelectKeyboard.js.map +1 -1
  185. package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js +14 -7
  186. package/dist/spectrum/multiSelect/useMultiSelectLoadingSpinner.js.map +1 -1
  187. package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js +20 -22
  188. package/dist/spectrum/multiSelect/useMultiSelectNormalizedProps.js.map +1 -1
  189. package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js +13 -6
  190. package/dist/spectrum/multiSelect/useMultiSelectScrollListener.js.map +1 -1
  191. package/dist/spectrum/multiSelect/useMultiSelectState.js +16 -9
  192. package/dist/spectrum/multiSelect/useMultiSelectState.js.map +1 -1
  193. package/dist/spectrum/picker/Picker.js +5 -9
  194. package/dist/spectrum/picker/Picker.js.map +1 -1
  195. package/dist/spectrum/picker/PickerNormalized.js +2 -6
  196. package/dist/spectrum/picker/PickerNormalized.js.map +1 -1
  197. package/dist/spectrum/picker/usePickerItemScale.js +2 -3
  198. package/dist/spectrum/picker/usePickerItemScale.js.map +1 -1
  199. package/dist/spectrum/picker/usePickerNormalizedProps.js +31 -33
  200. package/dist/spectrum/picker/usePickerNormalizedProps.js.map +1 -1
  201. package/dist/spectrum/picker/usePickerProps.js +26 -29
  202. package/dist/spectrum/picker/usePickerProps.js.map +1 -1
  203. package/dist/spectrum/picker/usePickerScrollOnOpen.js +6 -9
  204. package/dist/spectrum/picker/usePickerScrollOnOpen.js.map +1 -1
  205. package/dist/spectrum/utils/itemUtils.js +4 -6
  206. package/dist/spectrum/utils/itemUtils.js.map +1 -1
  207. package/dist/spectrum/utils/propsUtils.js +35 -37
  208. package/dist/spectrum/utils/propsUtils.js.map +1 -1
  209. package/dist/spectrum/utils/themeUtils.js +5 -7
  210. package/dist/spectrum/utils/themeUtils.js.map +1 -1
  211. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js +13 -6
  212. package/dist/spectrum/utils/useOnChangeTrackUncontrolled.js.map +1 -1
  213. package/dist/spectrum/utils/useRenderNormalizedItem.js +5 -7
  214. package/dist/spectrum/utils/useRenderNormalizedItem.js.map +1 -1
  215. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js +4 -6
  216. package/dist/spectrum/utils/useStaticItemInitialScrollPosition.js.map +1 -1
  217. package/dist/spectrum/utils/useStringifiedMultiSelection.js +5 -7
  218. package/dist/spectrum/utils/useStringifiedMultiSelection.js.map +1 -1
  219. package/dist/spectrum/utils/useStringifiedSelection.js +5 -7
  220. package/dist/spectrum/utils/useStringifiedSelection.js.map +1 -1
  221. package/dist/theme/FontBootstrap.js +13 -5
  222. package/dist/theme/FontBootstrap.js.map +1 -1
  223. package/dist/theme/FontsLoaded.js +1 -3
  224. package/dist/theme/FontsLoaded.js.map +1 -1
  225. package/dist/theme/Logo.js +2 -4
  226. package/dist/theme/Logo.js.map +1 -1
  227. package/dist/theme/SpectrumThemeProvider.js +17 -9
  228. package/dist/theme/SpectrumThemeProvider.js.map +1 -1
  229. package/dist/theme/ThemePicker.js +4 -5
  230. package/dist/theme/ThemePicker.js.map +1 -1
  231. package/dist/theme/ThemeProvider.js +20 -8
  232. package/dist/theme/ThemeProvider.js.map +1 -1
  233. package/dist/theme/ThemeUtils.js +35 -19
  234. package/dist/theme/ThemeUtils.js.map +1 -1
  235. package/dist/theme/useExternalTheme.js +16 -7
  236. package/dist/theme/useExternalTheme.js.map +1 -1
  237. package/dist/transitions/FadeTransition.js +5 -6
  238. package/dist/transitions/FadeTransition.js.map +1 -1
  239. package/dist/transitions/SlideTransition.js +6 -7
  240. package/dist/transitions/SlideTransition.js.map +1 -1
  241. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelect.js","names":["React","useCallback","useId","useMemo","useRef","Field","FocusRing","Popover","useUnwrapDOMRef","useOverlayTriggerState","ChevronDownMedium","AlertMedium","ProgressCircle","cl","EMPTY_FUNCTION","ensureArray","useMergeRef","normalizeTooltipOptions","wrapItemChildren","flattenJsxChildren","flattenEntriesToItems","useMultiSelectState","useMultiSelectFilter","useMultiSelectKeyboard","useMultiSelectLoadingSpinner","useMultiSelectScrollListener","MultiSelectTag","MultiSelectListBox","jsx","_jsx","jsxs","_jsxs","toCssDimension","value","undefined","concat","test","MultiSelectInner","props","forwardedRef","_ref2","_toCssDimension","_triggerRef$current2","children","tooltip","selectedKeys","propSelectedKeys","defaultSelectedKeys","disabledKeys","propDisabledKeys","onChange","propOnChange","onSelectionChange","propOnSelectionChange","onOpenChange","onScroll","label","description","errorMessage","isRequired","isDisabled","isReadOnly","validationState","isQuiet","labelPosition","labelAlign","necessityIndicator","contextualHelp","inputValue","controlledInputValue","defaultInputValue","onInputChange","shouldFocusWrap","loadingState","menuTrigger","align","direction","shouldFlip","menuWidth","allowsCustomValue","formValue","validationBehavior","autoFocus","name","id","isHidden","onFocus","onBlur","onFocusChange","onKeyDown","onKeyUp","onSearchTextChange","selectedItemLabels","UNSAFE_className","ariaLabel","ariaLabelledby","ariaDescribedby","ariaDetails","styleProps","_objectWithoutProperties","_excluded","lastTriggerReasonRef","handleOverlayOpenChange","isOpen","current","overlayState","openOverlay","reason","open","closeOverlay","close","listBoxId","placement","triggerRef","inputRef","popoverRef","unwrappedPopoverRef","listBoxRef","unwrappedListBoxRef","isFocusedRef","mergedTriggerRef","tooltipOptions","wrappedChildren","allEntries","allItems","allKeys","map","i","key","labelCacheRef","Map","itemLabelMap","cache","forEach","set","getLabelFor","_ref","_itemLabelMap$get","get","searchText","setSearchText","filteredItems","filteredJsxChildren","emptyMessage","length","selectedKeyArray","listBoxDisabledKeys","toggleKey","applyListBoxSelection","handleInputKeyDown","listBoxContainerRef","containerRef","shouldShowInlineSpinner","refocusInput","requestAnimationFrame","_inputRef$current","focus","handleTagRemove","handleListBoxSelectionChange","selection","handleInputFocus","e","handleInputBlur","related","relatedTarget","contains","active","document","activeElement","handleTriggerAreaClick","_inputRef$current2","handleChevronClick","_inputRef$current3","stopPropagation","_objectSpread","wrapperClassName","style","display","within","focusRingClass","focusClass","ref","onClick","className","tagKey","onRemove","target","disabled","readOnly","role","isIndeterminate","size","onPointerDown","preventDefault","tabIndex","type","join","required","state","hideArrow","isNonModal","shouldCloseOnInteractOutside","_triggerRef$current","UNSAFE_style","width","offsetWidth","MultiSelect","forwardRef","displayName"],"sources":["../../../src/spectrum/multiSelect/MultiSelect.tsx"],"sourcesContent":["import React, { useCallback, useId, useMemo, useRef } from 'react';\nimport type { DOMRefValue } from '@react-types/shared';\nimport type { Placement } from '@react-types/overlays';\nimport { Field } from '@react-spectrum/label';\nimport { FocusRing } from '@react-aria/focus';\nimport { Popover } from '@react-spectrum/overlays';\nimport { useUnwrapDOMRef } from '@react-spectrum/utils';\nimport { useOverlayTriggerState } from '@react-stately/overlays';\nimport ChevronDownMedium from '@spectrum-icons/ui/ChevronDownMedium';\nimport AlertMedium from '@spectrum-icons/ui/AlertMedium';\nimport { ProgressCircle } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { EMPTY_FUNCTION, ensureArray } from '@deephaven/utils';\nimport { useMergeRef } from '@deephaven/react-hooks';\nimport { normalizeTooltipOptions, wrapItemChildren } from '../utils';\nimport type { MenuTriggerAction } from '../comboBox';\nimport { type MultiSelectProps } from './MultiSelectProps';\nimport {\n flattenJsxChildren,\n flattenEntriesToItems,\n type MultiSelectFlatEntry,\n} from './multiSelectUtils';\nimport { useMultiSelectState } from './useMultiSelectState';\nimport { useMultiSelectFilter } from './useMultiSelectFilter';\nimport { useMultiSelectKeyboard } from './useMultiSelectKeyboard';\nimport { useMultiSelectLoadingSpinner } from './useMultiSelectLoadingSpinner';\nimport { useMultiSelectScrollListener } from './useMultiSelectScrollListener';\nimport { MultiSelectTag } from './MultiSelectTag';\nimport { MultiSelectListBox } from './MultiSelectListBox';\nimport './MultiSelect.scss';\n\n/**\n * Convert a Spectrum dimension value (e.g. `\"size-3000\"`) to its CSS variable\n * form. Numbers are converted to px. Already-valid CSS strings pass through.\n */\nfunction toCssDimension(\n value: string | number | undefined\n): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'number') {\n return `${value}px`;\n }\n if (/^(size|static-size)-/.test(value)) {\n return `var(--spectrum-global-dimension-${value})`;\n }\n return value;\n}\n\n/**\n * Multi-select styled to match Spectrum ComboBox. Renders selected items as\n * tags inside the trigger area alongside a filter input. Accepts the same\n * `Item` / `Section` JSX children as `Picker`.\n */\nfunction MultiSelectInner(\n props: MultiSelectProps,\n forwardedRef: React.Ref<HTMLDivElement>\n): JSX.Element {\n const {\n children,\n tooltip = true,\n selectedKeys: propSelectedKeys,\n defaultSelectedKeys,\n disabledKeys: propDisabledKeys,\n onChange: propOnChange,\n onSelectionChange: propOnSelectionChange,\n onOpenChange,\n onScroll = EMPTY_FUNCTION,\n label,\n description,\n errorMessage,\n isRequired = false,\n isDisabled = false,\n isReadOnly = false,\n validationState,\n isQuiet = false,\n labelPosition = 'top',\n labelAlign,\n necessityIndicator,\n contextualHelp,\n inputValue: controlledInputValue,\n defaultInputValue = '',\n onInputChange,\n shouldFocusWrap = false,\n loadingState,\n menuTrigger = 'input',\n align = 'start',\n direction = 'bottom',\n shouldFlip = true,\n menuWidth,\n allowsCustomValue = false,\n formValue = 'key',\n validationBehavior = 'aria',\n autoFocus = false,\n name,\n id,\n isHidden = false,\n onFocus,\n onBlur,\n onFocusChange,\n onKeyDown,\n onKeyUp,\n onSearchTextChange,\n selectedItemLabels,\n UNSAFE_className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n ...styleProps\n } = props;\n\n // Spectrum's onOpenChange omits the trigger reason; relay it via ref.\n const lastTriggerReasonRef = useRef<MenuTriggerAction | undefined>(undefined);\n\n const handleOverlayOpenChange = useCallback(\n (isOpen: boolean) => {\n onOpenChange?.(isOpen, lastTriggerReasonRef.current);\n },\n [onOpenChange]\n );\n\n const overlayState = useOverlayTriggerState({\n onOpenChange: handleOverlayOpenChange,\n });\n\n const openOverlay = useCallback(\n (reason: MenuTriggerAction) => {\n lastTriggerReasonRef.current = reason;\n overlayState.open();\n },\n [overlayState]\n );\n const closeOverlay = useCallback(() => {\n lastTriggerReasonRef.current = undefined;\n overlayState.close();\n }, [overlayState]);\n\n const listBoxId = useId();\n\n const placement = `${direction} ${align}` as Placement;\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const popoverRef = useRef<DOMRefValue<HTMLDivElement>>(null);\n const unwrappedPopoverRef = useUnwrapDOMRef(popoverRef);\n const listBoxRef = useRef<DOMRefValue<HTMLDivElement>>(null);\n const unwrappedListBoxRef = useUnwrapDOMRef(listBoxRef);\n const isFocusedRef = useRef(false);\n const mergedTriggerRef = useMergeRef(triggerRef, forwardedRef);\n\n // Ensures Item/ItemContent wrapping for tooltips/overflow.\n const tooltipOptions = useMemo(\n () => normalizeTooltipOptions(tooltip),\n [tooltip]\n );\n const wrappedChildren = useMemo(\n () => ensureArray(wrapItemChildren(children, tooltipOptions)),\n [children, tooltipOptions]\n );\n\n // Flat {key,label} entries for filter/keyboard hooks. ListBox renders JSX directly.\n const allEntries: MultiSelectFlatEntry[] = useMemo(\n () => flattenJsxChildren(wrappedChildren),\n [wrappedChildren]\n );\n\n const allItems = useMemo(\n () => flattenEntriesToItems(allEntries),\n [allEntries]\n );\n const allKeys = useMemo(() => allItems.map(i => i.key), [allItems]);\n\n // Persistent label cache: accumulates labels from items as they appear in\n // children. When server-side search filters items out of the children, the\n // cache ensures tags still display the correct label.\n const labelCacheRef = useRef<Map<string, string>>(new Map());\n const itemLabelMap = useMemo(() => {\n const cache = labelCacheRef.current;\n allItems.forEach(i => cache.set(i.key, i.label));\n return new Map(cache);\n }, [allItems]);\n\n const getLabelFor = useCallback(\n (key: string): string =>\n itemLabelMap.get(key) ?? selectedItemLabels?.get(key) ?? key,\n [itemLabelMap, selectedItemLabels]\n );\n\n const { searchText, setSearchText, filteredItems, filteredJsxChildren } =\n useMultiSelectFilter({\n allEntries,\n wrappedChildren,\n inputValue: controlledInputValue,\n defaultInputValue,\n onInputChange,\n onSearchTextChange,\n });\n\n const emptyMessage: string | undefined = useMemo(() => {\n if (filteredItems.length > 0) {\n return undefined;\n }\n if (loadingState === 'loading') {\n return 'Loading...';\n }\n // loadingMore + empty: defer to ListBox's loader pill instead of \"No results\".\n if (loadingState === 'loadingMore') {\n return undefined;\n }\n return 'No results';\n }, [filteredItems.length, loadingState]);\n\n const {\n selectedKeys,\n selectedKeyArray,\n listBoxDisabledKeys,\n toggleKey,\n applyListBoxSelection,\n } = useMultiSelectState({\n selectedKeys: propSelectedKeys,\n defaultSelectedKeys,\n disabledKeys: propDisabledKeys,\n onChange: propOnChange,\n onSelectionChange: propOnSelectionChange,\n allKeys,\n });\n\n const { handleInputKeyDown } = useMultiSelectKeyboard({\n filteredItems,\n allItems,\n shouldFocusWrap,\n overlayState,\n openOverlay,\n closeOverlay,\n isReadOnly,\n isDisabled,\n searchText,\n setSearchText,\n selectedKeys,\n toggleKey,\n allowsCustomValue,\n menuTrigger,\n onKeyDown,\n listBoxContainerRef: unwrappedListBoxRef,\n inputRef,\n });\n\n useMultiSelectScrollListener({\n containerRef: unwrappedListBoxRef,\n isOpen: overlayState.isOpen,\n onScroll,\n });\n\n const shouldShowInlineSpinner = useMultiSelectLoadingSpinner({\n loadingState,\n searchText,\n isOpen: overlayState.isOpen,\n menuTrigger,\n });\n\n const refocusInput = useCallback(() => {\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n }, []);\n\n const handleTagRemove = useCallback(\n (key: string) => {\n toggleKey(key);\n refocusInput();\n },\n [toggleKey, refocusInput]\n );\n\n const handleListBoxSelectionChange = useCallback(\n (selection: Parameters<typeof applyListBoxSelection>[0]) => {\n if (isReadOnly) {\n return;\n }\n applyListBoxSelection(selection, filteredItems);\n refocusInput();\n },\n [isReadOnly, applyListBoxSelection, filteredItems, refocusInput]\n );\n\n const handleInputFocus = useCallback(\n (e: React.FocusEvent) => {\n if (isFocusedRef.current) {\n return;\n }\n isFocusedRef.current = true;\n if (menuTrigger === 'focus' && !overlayState.isOpen && !isDisabled) {\n openOverlay('focus');\n }\n onFocus?.(e);\n onFocusChange?.(true);\n },\n [onFocus, onFocusChange, menuTrigger, overlayState, isDisabled, openOverlay]\n );\n\n const handleInputBlur = useCallback(\n (e: React.FocusEvent) => {\n const related = e.relatedTarget as HTMLElement | null;\n\n if (related != null) {\n if (\n triggerRef.current != null &&\n triggerRef.current.contains(related)\n ) {\n return;\n }\n if (\n unwrappedPopoverRef.current != null &&\n unwrappedPopoverRef.current.contains(related)\n ) {\n return;\n }\n } else {\n // relatedTarget can be null when clicking non-focusable content.\n // Use rAF to check if focus moved back into the component.\n requestAnimationFrame(() => {\n const active = document.activeElement as HTMLElement | null;\n if (\n active != null &&\n ((triggerRef.current != null &&\n triggerRef.current.contains(active)) ||\n (unwrappedPopoverRef.current != null &&\n unwrappedPopoverRef.current.contains(active)))\n ) {\n return;\n }\n isFocusedRef.current = false;\n if (overlayState.isOpen) {\n closeOverlay();\n }\n onBlur?.(e);\n onFocusChange?.(false);\n });\n return;\n }\n\n isFocusedRef.current = false;\n if (overlayState.isOpen) {\n closeOverlay();\n }\n onBlur?.(e);\n onFocusChange?.(false);\n },\n [onBlur, onFocusChange, overlayState, closeOverlay, unwrappedPopoverRef]\n );\n\n const handleTriggerAreaClick = useCallback(() => {\n if (isDisabled) {\n return;\n }\n if (!overlayState.isOpen) {\n openOverlay('manual');\n }\n inputRef.current?.focus();\n }, [isDisabled, overlayState, openOverlay]);\n\n const handleChevronClick = useCallback(\n (e: React.MouseEvent) => {\n // Stop trigger-area handler from re-opening the popover on close.\n e.stopPropagation();\n if (isDisabled) {\n return;\n }\n if (overlayState.isOpen) {\n closeOverlay();\n } else {\n openOverlay('manual');\n }\n inputRef.current?.focus();\n },\n [isDisabled, overlayState, openOverlay, closeOverlay]\n );\n\n return (\n <Field\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...styleProps}\n label={label}\n description={description}\n errorMessage={validationState === 'invalid' ? errorMessage : undefined}\n isRequired={isRequired}\n isDisabled={isDisabled}\n validationState={validationState}\n labelPosition={labelPosition}\n labelAlign={labelAlign}\n necessityIndicator={necessityIndicator}\n contextualHelp={contextualHelp}\n wrapperClassName={cl('dh-multi-select', UNSAFE_className)}\n >\n <div style={isHidden ? { display: 'none' } : undefined}>\n <FocusRing within focusRingClass=\"focus-ring\" focusClass=\"is-focused\">\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={mergedTriggerRef}\n id={id}\n onClick={handleTriggerAreaClick}\n className={cl('dh-multi-select-trigger', {\n 'is-disabled': isDisabled,\n 'is-read-only': isReadOnly,\n 'is-quiet': isQuiet,\n 'is-invalid': validationState === 'invalid',\n })}\n >\n <div className=\"dh-multi-select-content\">\n {selectedKeyArray.map(key => (\n <MultiSelectTag\n key={key}\n tagKey={key}\n label={getLabelFor(key)}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n onRemove={handleTagRemove}\n />\n ))}\n <input\n ref={inputRef}\n className=\"dh-multi-select-input\"\n value={searchText}\n onChange={e => setSearchText(e.target.value)}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n onKeyUp={onKeyUp}\n disabled={isDisabled}\n readOnly={isReadOnly}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={overlayState.isOpen}\n aria-controls={overlayState.isOpen ? listBoxId : undefined}\n aria-autocomplete=\"list\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-describedby={ariaDescribedby}\n aria-details={ariaDetails}\n />\n </div>\n\n {shouldShowInlineSpinner && (\n <div className=\"dh-multi-select-loading-circle\">\n <ProgressCircle aria-label=\"Loading\" isIndeterminate size=\"S\" />\n </div>\n )}\n\n {validationState === 'invalid' && !isDisabled && (\n <div className=\"dh-multi-select-invalid-icon\" aria-hidden=\"true\">\n <AlertMedium />\n </div>\n )}\n\n <div\n className={cl('dh-multi-select-chevron', {\n 'is-open': overlayState.isOpen,\n })}\n onClick={handleChevronClick}\n // Suppress default to keep input focus on chevron click.\n onPointerDown={e => e.preventDefault()}\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Toggle dropdown\"\n >\n <ChevronDownMedium />\n </div>\n </div>\n </FocusRing>\n\n {name != null && (\n <input\n type=\"hidden\"\n name={name}\n value={\n formValue === 'text'\n ? selectedKeyArray.map(getLabelFor).join(',')\n : selectedKeyArray.join(',')\n }\n required={\n validationBehavior === 'native' && isRequired ? true : undefined\n }\n />\n )}\n\n {overlayState.isOpen && !isDisabled && (\n <Popover\n ref={popoverRef}\n triggerRef={triggerRef}\n state={overlayState}\n hideArrow\n isNonModal\n placement={placement}\n shouldFlip={shouldFlip}\n shouldCloseOnInteractOutside={target =>\n triggerRef.current?.contains(target) !== true\n }\n UNSAFE_style={{\n width:\n toCssDimension(menuWidth) ??\n triggerRef.current?.offsetWidth ??\n undefined,\n }}\n >\n <MultiSelectListBox\n listBoxRef={listBoxRef}\n listBoxId={listBoxId}\n loadingState={loadingState}\n selectedKeys={selectedKeys}\n disabledKeys={listBoxDisabledKeys}\n onSelectionChange={handleListBoxSelectionChange}\n ariaLabel={typeof label === 'string' ? label : 'Options'}\n emptyMessage={emptyMessage}\n >\n {filteredJsxChildren}\n </MultiSelectListBox>\n </Popover>\n )}\n </div>\n </Field>\n );\n}\n\n/** Forwarded-ref wrapper. Trigger is a <div>, matching Picker's DOMRef shape. */\nexport const MultiSelect = React.forwardRef(MultiSelectInner);\nMultiSelect.displayName = 'MultiSelect';\n\nexport default MultiSelect;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"MultiSelect.js","names":["React","useCallback","useId","useMemo","useRef","Field","FocusRing","Popover","useUnwrapDOMRef","useOverlayTriggerState","ChevronDownMedium","AlertMedium","ProgressCircle","cl","EMPTY_FUNCTION","ensureArray","useMergeRef","normalizeTooltipOptions","wrapItemChildren","flattenJsxChildren","flattenEntriesToItems","useMultiSelectState","useMultiSelectFilter","useMultiSelectKeyboard","useMultiSelectLoadingSpinner","useMultiSelectScrollListener","MultiSelectTag","MultiSelectListBox","jsx","_jsx","jsxs","_jsxs","toCssDimension","value","undefined","concat","test","MultiSelectInner","props","forwardedRef","_ref2","_toCssDimension","_triggerRef$current2","children","_props$tooltip","tooltip","propSelectedKeys","selectedKeys","defaultSelectedKeys","propDisabledKeys","disabledKeys","propOnChange","onChange","propOnSelectionChange","onSelectionChange","onOpenChange","_props$onScroll","onScroll","label","description","errorMessage","_props$isRequired","isRequired","_props$isDisabled","isDisabled","_props$isReadOnly","isReadOnly","validationState","_props$isQuiet","isQuiet","_props$labelPosition","labelPosition","labelAlign","necessityIndicator","contextualHelp","controlledInputValue","inputValue","_props$defaultInputVa","defaultInputValue","onInputChange","_props$shouldFocusWra","shouldFocusWrap","loadingState","_props$menuTrigger","menuTrigger","_props$align","align","_props$direction","direction","_props$shouldFlip","shouldFlip","menuWidth","_props$allowsCustomVa","allowsCustomValue","_props$formValue","formValue","_props$validationBeha","validationBehavior","_props$autoFocus","autoFocus","name","id","_props$isHidden","isHidden","onFocus","onBlur","onFocusChange","onKeyDown","onKeyUp","onSearchTextChange","selectedItemLabels","UNSAFE_className","ariaLabel","ariaLabelledby","ariaDescribedby","ariaDetails","styleProps","_objectWithoutProperties","_excluded","lastTriggerReasonRef","handleOverlayOpenChange","isOpen","current","overlayState","openOverlay","reason","open","closeOverlay","close","listBoxId","placement","triggerRef","inputRef","popoverRef","unwrappedPopoverRef","listBoxRef","unwrappedListBoxRef","isFocusedRef","mergedTriggerRef","tooltipOptions","wrappedChildren","allEntries","allItems","allKeys","map","i","key","labelCacheRef","Map","itemLabelMap","cache","forEach","set","getLabelFor","_ref","_itemLabelMap$get","get","_useMultiSelectFilter","searchText","setSearchText","filteredItems","filteredJsxChildren","emptyMessage","length","_useMultiSelectState","selectedKeyArray","listBoxDisabledKeys","toggleKey","applyListBoxSelection","_useMultiSelectKeyboa","listBoxContainerRef","handleInputKeyDown","containerRef","shouldShowInlineSpinner","refocusInput","requestAnimationFrame","_inputRef$current","focus","handleTagRemove","handleListBoxSelectionChange","selection","handleInputFocus","e","handleInputBlur","related","relatedTarget","contains","active","document","activeElement","handleTriggerAreaClick","_inputRef$current2","handleChevronClick","_inputRef$current3","stopPropagation","_objectSpread","wrapperClassName","style","display","within","focusRingClass","focusClass","ref","onClick","className","tagKey","onRemove","target","disabled","readOnly","role","isIndeterminate","size","onPointerDown","preventDefault","tabIndex","type","join","required","state","hideArrow","isNonModal","shouldCloseOnInteractOutside","_triggerRef$current","UNSAFE_style","width","offsetWidth","MultiSelect","forwardRef","displayName"],"sources":["../../../src/spectrum/multiSelect/MultiSelect.tsx"],"sourcesContent":["import React, { useCallback, useId, useMemo, useRef } from 'react';\nimport type { DOMRefValue } from '@react-types/shared';\nimport type { Placement } from '@react-types/overlays';\nimport { Field } from '@react-spectrum/label';\nimport { FocusRing } from '@react-aria/focus';\nimport { Popover } from '@react-spectrum/overlays';\nimport { useUnwrapDOMRef } from '@react-spectrum/utils';\nimport { useOverlayTriggerState } from '@react-stately/overlays';\nimport ChevronDownMedium from '@spectrum-icons/ui/ChevronDownMedium';\nimport AlertMedium from '@spectrum-icons/ui/AlertMedium';\nimport { ProgressCircle } from '@adobe/react-spectrum';\nimport cl from 'classnames';\nimport { EMPTY_FUNCTION, ensureArray } from '@deephaven/utils';\nimport { useMergeRef } from '@deephaven/react-hooks';\nimport { normalizeTooltipOptions, wrapItemChildren } from '../utils';\nimport type { MenuTriggerAction } from '../comboBox';\nimport { type MultiSelectProps } from './MultiSelectProps';\nimport {\n flattenJsxChildren,\n flattenEntriesToItems,\n type MultiSelectFlatEntry,\n} from './multiSelectUtils';\nimport { useMultiSelectState } from './useMultiSelectState';\nimport { useMultiSelectFilter } from './useMultiSelectFilter';\nimport { useMultiSelectKeyboard } from './useMultiSelectKeyboard';\nimport { useMultiSelectLoadingSpinner } from './useMultiSelectLoadingSpinner';\nimport { useMultiSelectScrollListener } from './useMultiSelectScrollListener';\nimport { MultiSelectTag } from './MultiSelectTag';\nimport { MultiSelectListBox } from './MultiSelectListBox';\nimport './MultiSelect.scss';\n\n/**\n * Convert a Spectrum dimension value (e.g. `\"size-3000\"`) to its CSS variable\n * form. Numbers are converted to px. Already-valid CSS strings pass through.\n */\nfunction toCssDimension(\n value: string | number | undefined\n): string | undefined {\n if (value == null) {\n return undefined;\n }\n if (typeof value === 'number') {\n return `${value}px`;\n }\n if (/^(size|static-size)-/.test(value)) {\n return `var(--spectrum-global-dimension-${value})`;\n }\n return value;\n}\n\n/**\n * Multi-select styled to match Spectrum ComboBox. Renders selected items as\n * tags inside the trigger area alongside a filter input. Accepts the same\n * `Item` / `Section` JSX children as `Picker`.\n */\nfunction MultiSelectInner(\n props: MultiSelectProps,\n forwardedRef: React.Ref<HTMLDivElement>\n): JSX.Element {\n const {\n children,\n tooltip = true,\n selectedKeys: propSelectedKeys,\n defaultSelectedKeys,\n disabledKeys: propDisabledKeys,\n onChange: propOnChange,\n onSelectionChange: propOnSelectionChange,\n onOpenChange,\n onScroll = EMPTY_FUNCTION,\n label,\n description,\n errorMessage,\n isRequired = false,\n isDisabled = false,\n isReadOnly = false,\n validationState,\n isQuiet = false,\n labelPosition = 'top',\n labelAlign,\n necessityIndicator,\n contextualHelp,\n inputValue: controlledInputValue,\n defaultInputValue = '',\n onInputChange,\n shouldFocusWrap = false,\n loadingState,\n menuTrigger = 'input',\n align = 'start',\n direction = 'bottom',\n shouldFlip = true,\n menuWidth,\n allowsCustomValue = false,\n formValue = 'key',\n validationBehavior = 'aria',\n autoFocus = false,\n name,\n id,\n isHidden = false,\n onFocus,\n onBlur,\n onFocusChange,\n onKeyDown,\n onKeyUp,\n onSearchTextChange,\n selectedItemLabels,\n UNSAFE_className,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n 'aria-describedby': ariaDescribedby,\n 'aria-details': ariaDetails,\n ...styleProps\n } = props;\n\n // Spectrum's onOpenChange omits the trigger reason; relay it via ref.\n const lastTriggerReasonRef = useRef<MenuTriggerAction | undefined>(undefined);\n\n const handleOverlayOpenChange = useCallback(\n (isOpen: boolean) => {\n onOpenChange?.(isOpen, lastTriggerReasonRef.current);\n },\n [onOpenChange]\n );\n\n const overlayState = useOverlayTriggerState({\n onOpenChange: handleOverlayOpenChange,\n });\n\n const openOverlay = useCallback(\n (reason: MenuTriggerAction) => {\n lastTriggerReasonRef.current = reason;\n overlayState.open();\n },\n [overlayState]\n );\n const closeOverlay = useCallback(() => {\n lastTriggerReasonRef.current = undefined;\n overlayState.close();\n }, [overlayState]);\n\n const listBoxId = useId();\n\n const placement = `${direction} ${align}` as Placement;\n\n const triggerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const popoverRef = useRef<DOMRefValue<HTMLDivElement>>(null);\n const unwrappedPopoverRef = useUnwrapDOMRef(popoverRef);\n const listBoxRef = useRef<DOMRefValue<HTMLDivElement>>(null);\n const unwrappedListBoxRef = useUnwrapDOMRef(listBoxRef);\n const isFocusedRef = useRef(false);\n const mergedTriggerRef = useMergeRef(triggerRef, forwardedRef);\n\n // Ensures Item/ItemContent wrapping for tooltips/overflow.\n const tooltipOptions = useMemo(\n () => normalizeTooltipOptions(tooltip),\n [tooltip]\n );\n const wrappedChildren = useMemo(\n () => ensureArray(wrapItemChildren(children, tooltipOptions)),\n [children, tooltipOptions]\n );\n\n // Flat {key,label} entries for filter/keyboard hooks. ListBox renders JSX directly.\n const allEntries: MultiSelectFlatEntry[] = useMemo(\n () => flattenJsxChildren(wrappedChildren),\n [wrappedChildren]\n );\n\n const allItems = useMemo(\n () => flattenEntriesToItems(allEntries),\n [allEntries]\n );\n const allKeys = useMemo(() => allItems.map(i => i.key), [allItems]);\n\n // Persistent label cache: accumulates labels from items as they appear in\n // children. When server-side search filters items out of the children, the\n // cache ensures tags still display the correct label.\n const labelCacheRef = useRef<Map<string, string>>(new Map());\n const itemLabelMap = useMemo(() => {\n const cache = labelCacheRef.current;\n allItems.forEach(i => cache.set(i.key, i.label));\n return new Map(cache);\n }, [allItems]);\n\n const getLabelFor = useCallback(\n (key: string): string =>\n itemLabelMap.get(key) ?? selectedItemLabels?.get(key) ?? key,\n [itemLabelMap, selectedItemLabels]\n );\n\n const { searchText, setSearchText, filteredItems, filteredJsxChildren } =\n useMultiSelectFilter({\n allEntries,\n wrappedChildren,\n inputValue: controlledInputValue,\n defaultInputValue,\n onInputChange,\n onSearchTextChange,\n });\n\n const emptyMessage: string | undefined = useMemo(() => {\n if (filteredItems.length > 0) {\n return undefined;\n }\n if (loadingState === 'loading') {\n return 'Loading...';\n }\n // loadingMore + empty: defer to ListBox's loader pill instead of \"No results\".\n if (loadingState === 'loadingMore') {\n return undefined;\n }\n return 'No results';\n }, [filteredItems.length, loadingState]);\n\n const {\n selectedKeys,\n selectedKeyArray,\n listBoxDisabledKeys,\n toggleKey,\n applyListBoxSelection,\n } = useMultiSelectState({\n selectedKeys: propSelectedKeys,\n defaultSelectedKeys,\n disabledKeys: propDisabledKeys,\n onChange: propOnChange,\n onSelectionChange: propOnSelectionChange,\n allKeys,\n });\n\n const { handleInputKeyDown } = useMultiSelectKeyboard({\n filteredItems,\n allItems,\n shouldFocusWrap,\n overlayState,\n openOverlay,\n closeOverlay,\n isReadOnly,\n isDisabled,\n searchText,\n setSearchText,\n selectedKeys,\n toggleKey,\n allowsCustomValue,\n menuTrigger,\n onKeyDown,\n listBoxContainerRef: unwrappedListBoxRef,\n inputRef,\n });\n\n useMultiSelectScrollListener({\n containerRef: unwrappedListBoxRef,\n isOpen: overlayState.isOpen,\n onScroll,\n });\n\n const shouldShowInlineSpinner = useMultiSelectLoadingSpinner({\n loadingState,\n searchText,\n isOpen: overlayState.isOpen,\n menuTrigger,\n });\n\n const refocusInput = useCallback(() => {\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n }, []);\n\n const handleTagRemove = useCallback(\n (key: string) => {\n toggleKey(key);\n refocusInput();\n },\n [toggleKey, refocusInput]\n );\n\n const handleListBoxSelectionChange = useCallback(\n (selection: Parameters<typeof applyListBoxSelection>[0]) => {\n if (isReadOnly) {\n return;\n }\n applyListBoxSelection(selection, filteredItems);\n refocusInput();\n },\n [isReadOnly, applyListBoxSelection, filteredItems, refocusInput]\n );\n\n const handleInputFocus = useCallback(\n (e: React.FocusEvent) => {\n if (isFocusedRef.current) {\n return;\n }\n isFocusedRef.current = true;\n if (menuTrigger === 'focus' && !overlayState.isOpen && !isDisabled) {\n openOverlay('focus');\n }\n onFocus?.(e);\n onFocusChange?.(true);\n },\n [onFocus, onFocusChange, menuTrigger, overlayState, isDisabled, openOverlay]\n );\n\n const handleInputBlur = useCallback(\n (e: React.FocusEvent) => {\n const related = e.relatedTarget as HTMLElement | null;\n\n if (related != null) {\n if (\n triggerRef.current != null &&\n triggerRef.current.contains(related)\n ) {\n return;\n }\n if (\n unwrappedPopoverRef.current != null &&\n unwrappedPopoverRef.current.contains(related)\n ) {\n return;\n }\n } else {\n // relatedTarget can be null when clicking non-focusable content.\n // Use rAF to check if focus moved back into the component.\n requestAnimationFrame(() => {\n const active = document.activeElement as HTMLElement | null;\n if (\n active != null &&\n ((triggerRef.current != null &&\n triggerRef.current.contains(active)) ||\n (unwrappedPopoverRef.current != null &&\n unwrappedPopoverRef.current.contains(active)))\n ) {\n return;\n }\n isFocusedRef.current = false;\n if (overlayState.isOpen) {\n closeOverlay();\n }\n onBlur?.(e);\n onFocusChange?.(false);\n });\n return;\n }\n\n isFocusedRef.current = false;\n if (overlayState.isOpen) {\n closeOverlay();\n }\n onBlur?.(e);\n onFocusChange?.(false);\n },\n [onBlur, onFocusChange, overlayState, closeOverlay, unwrappedPopoverRef]\n );\n\n const handleTriggerAreaClick = useCallback(() => {\n if (isDisabled) {\n return;\n }\n if (!overlayState.isOpen) {\n openOverlay('manual');\n }\n inputRef.current?.focus();\n }, [isDisabled, overlayState, openOverlay]);\n\n const handleChevronClick = useCallback(\n (e: React.MouseEvent) => {\n // Stop trigger-area handler from re-opening the popover on close.\n e.stopPropagation();\n if (isDisabled) {\n return;\n }\n if (overlayState.isOpen) {\n closeOverlay();\n } else {\n openOverlay('manual');\n }\n inputRef.current?.focus();\n },\n [isDisabled, overlayState, openOverlay, closeOverlay]\n );\n\n return (\n <Field\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...styleProps}\n label={label}\n description={description}\n errorMessage={validationState === 'invalid' ? errorMessage : undefined}\n isRequired={isRequired}\n isDisabled={isDisabled}\n validationState={validationState}\n labelPosition={labelPosition}\n labelAlign={labelAlign}\n necessityIndicator={necessityIndicator}\n contextualHelp={contextualHelp}\n wrapperClassName={cl('dh-multi-select', UNSAFE_className)}\n >\n <div style={isHidden ? { display: 'none' } : undefined}>\n <FocusRing within focusRingClass=\"focus-ring\" focusClass=\"is-focused\">\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n ref={mergedTriggerRef}\n id={id}\n onClick={handleTriggerAreaClick}\n className={cl('dh-multi-select-trigger', {\n 'is-disabled': isDisabled,\n 'is-read-only': isReadOnly,\n 'is-quiet': isQuiet,\n 'is-invalid': validationState === 'invalid',\n })}\n >\n <div className=\"dh-multi-select-content\">\n {selectedKeyArray.map(key => (\n <MultiSelectTag\n key={key}\n tagKey={key}\n label={getLabelFor(key)}\n isDisabled={isDisabled}\n isReadOnly={isReadOnly}\n onRemove={handleTagRemove}\n />\n ))}\n <input\n ref={inputRef}\n className=\"dh-multi-select-input\"\n value={searchText}\n onChange={e => setSearchText(e.target.value)}\n onFocus={handleInputFocus}\n onBlur={handleInputBlur}\n onKeyDown={handleInputKeyDown}\n onKeyUp={onKeyUp}\n disabled={isDisabled}\n readOnly={isReadOnly}\n // eslint-disable-next-line jsx-a11y/no-autofocus\n autoFocus={autoFocus}\n role=\"combobox\"\n aria-haspopup=\"listbox\"\n aria-expanded={overlayState.isOpen}\n aria-controls={overlayState.isOpen ? listBoxId : undefined}\n aria-autocomplete=\"list\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledby}\n aria-describedby={ariaDescribedby}\n aria-details={ariaDetails}\n />\n </div>\n\n {shouldShowInlineSpinner && (\n <div className=\"dh-multi-select-loading-circle\">\n <ProgressCircle aria-label=\"Loading\" isIndeterminate size=\"S\" />\n </div>\n )}\n\n {validationState === 'invalid' && !isDisabled && (\n <div className=\"dh-multi-select-invalid-icon\" aria-hidden=\"true\">\n <AlertMedium />\n </div>\n )}\n\n <div\n className={cl('dh-multi-select-chevron', {\n 'is-open': overlayState.isOpen,\n })}\n onClick={handleChevronClick}\n // Suppress default to keep input focus on chevron click.\n onPointerDown={e => e.preventDefault()}\n role=\"button\"\n tabIndex={-1}\n aria-label=\"Toggle dropdown\"\n >\n <ChevronDownMedium />\n </div>\n </div>\n </FocusRing>\n\n {name != null && (\n <input\n type=\"hidden\"\n name={name}\n value={\n formValue === 'text'\n ? selectedKeyArray.map(getLabelFor).join(',')\n : selectedKeyArray.join(',')\n }\n required={\n validationBehavior === 'native' && isRequired ? true : undefined\n }\n />\n )}\n\n {overlayState.isOpen && !isDisabled && (\n <Popover\n ref={popoverRef}\n triggerRef={triggerRef}\n state={overlayState}\n hideArrow\n isNonModal\n placement={placement}\n shouldFlip={shouldFlip}\n shouldCloseOnInteractOutside={target =>\n triggerRef.current?.contains(target) !== true\n }\n UNSAFE_style={{\n width:\n toCssDimension(menuWidth) ??\n triggerRef.current?.offsetWidth ??\n undefined,\n }}\n >\n <MultiSelectListBox\n listBoxRef={listBoxRef}\n listBoxId={listBoxId}\n loadingState={loadingState}\n selectedKeys={selectedKeys}\n disabledKeys={listBoxDisabledKeys}\n onSelectionChange={handleListBoxSelectionChange}\n ariaLabel={typeof label === 'string' ? label : 'Options'}\n emptyMessage={emptyMessage}\n >\n {filteredJsxChildren}\n </MultiSelectListBox>\n </Popover>\n )}\n </div>\n </Field>\n );\n}\n\n/** Forwarded-ref wrapper. Trigger is a <div>, matching Picker's DOMRef shape. */\nexport const MultiSelect = React.forwardRef(MultiSelectInner);\nMultiSelect.displayName = 'MultiSelect';\n\nexport default MultiSelect;\n"],"mappings":"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","ignoreList":[]}
@@ -5,17 +5,15 @@ import { jsx as _jsx } from "react/jsx-runtime";
5
5
  * or the Spectrum `<ListBox>`. Private subcomponent of `MultiSelect`.
6
6
  */
7
7
  export function MultiSelectListBox(_ref) {
8
- var {
9
- listBoxRef,
10
- listBoxId,
11
- loadingState,
12
- children,
13
- selectedKeys,
14
- disabledKeys,
15
- onSelectionChange,
16
- ariaLabel,
17
- emptyMessage
18
- } = _ref;
8
+ var listBoxRef = _ref.listBoxRef,
9
+ listBoxId = _ref.listBoxId,
10
+ loadingState = _ref.loadingState,
11
+ children = _ref.children,
12
+ selectedKeys = _ref.selectedKeys,
13
+ disabledKeys = _ref.disabledKeys,
14
+ onSelectionChange = _ref.onSelectionChange,
15
+ ariaLabel = _ref.ariaLabel,
16
+ emptyMessage = _ref.emptyMessage;
19
17
  if (emptyMessage != null) {
20
18
  return /*#__PURE__*/_jsx("div", {
21
19
  className: "dh-multi-select-empty",
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectListBox.js","names":["ListBox","jsx","_jsx","MultiSelectListBox","_ref","listBoxRef","listBoxId","loadingState","children","selectedKeys","disabledKeys","onSelectionChange","ariaLabel","emptyMessage","className","ref","id","selectionMode","isLoading","UNSAFE_style","maxHeight"],"sources":["../../../src/spectrum/multiSelect/MultiSelectListBox.tsx"],"sourcesContent":["import { type ReactElement } from 'react';\nimport { ListBox } from '@adobe/react-spectrum';\nimport type { DOMRef, LoadingState, Selection } from '@react-types/shared';\n\nexport interface MultiSelectListBoxProps {\n /** DOMRef forwarded to the inner Spectrum `<ListBox>`. */\n listBoxRef: DOMRef<HTMLDivElement>;\n /** ID applied to the inner Spectrum `<ListBox>`. */\n listBoxId: string;\n /** Spectrum `LoadingState` for the items collection. */\n loadingState: LoadingState | undefined;\n /** JSX children to render inside `<ListBox>`. */\n children: ReactElement[];\n /** Selected keys */\n selectedKeys: Iterable<string>;\n /** Disabled keys for `<ListBox>`. */\n disabledKeys: Iterable<string> | undefined;\n /** Selection change handler from `<ListBox>`. */\n onSelectionChange: (selection: Selection) => void;\n /** ARIA label applied to the `<ListBox>`. */\n ariaLabel: string;\n /** When provided, the ListBox is replaced with this empty-state message. */\n emptyMessage?: string;\n}\n\n/**\n * Popover content for `MultiSelect`. Renders either an empty-state message (text-only)\n * or the Spectrum `<ListBox>`. Private subcomponent of `MultiSelect`.\n */\nexport function MultiSelectListBox({\n listBoxRef,\n listBoxId,\n loadingState,\n children,\n selectedKeys,\n disabledKeys,\n onSelectionChange,\n ariaLabel,\n emptyMessage,\n}: MultiSelectListBoxProps): JSX.Element {\n if (emptyMessage != null) {\n return <div className=\"dh-multi-select-empty\">{emptyMessage}</div>;\n }\n\n return (\n <ListBox\n ref={listBoxRef}\n id={listBoxId}\n selectionMode=\"multiple\"\n selectedKeys={selectedKeys}\n onSelectionChange={onSelectionChange}\n disabledKeys={disabledKeys}\n aria-label={ariaLabel}\n isLoading={loadingState === 'loadingMore'}\n UNSAFE_style={{ maxHeight: 'inherit' }}\n >\n {children}\n </ListBox>\n );\n}\n\nexport default MultiSelectListBox;\n"],"mappings":"AACA,SAASA,OAAO,QAAQ,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAwBhD;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAAC,IAAA,EAUO;EAAA,IAVN;IACjCC,UAAU;IACVC,SAAS;IACTC,YAAY;IACZC,QAAQ;IACRC,YAAY;IACZC,YAAY;IACZC,iBAAiB;IACjBC,SAAS;IACTC;EACuB,CAAC,GAAAT,IAAA;EACxB,IAAIS,YAAY,IAAI,IAAI,EAAE;IACxB,oBAAOX,IAAA;MAAKY,SAAS,EAAC,uBAAuB;MAAAN,QAAA,EAAEK;IAAY,CAAM,CAAC;EACpE;EAEA,oBACEX,IAAA,CAACF,OAAO;IACNe,GAAG,EAAEV,UAAW;IAChBW,EAAE,EAAEV,SAAU;IACdW,aAAa,EAAC,UAAU;IACxBR,YAAY,EAAEA,YAAa;IAC3BE,iBAAiB,EAAEA,iBAAkB;IACrCD,YAAY,EAAEA,YAAa;IAC3B,cAAYE,SAAU;IACtBM,SAAS,EAAEX,YAAY,KAAK,aAAc;IAC1CY,YAAY,EAAE;MAAEC,SAAS,EAAE;IAAU,CAAE;IAAAZ,QAAA,EAEtCA;EAAQ,CACF,CAAC;AAEd;AAEA,eAAeL,kBAAkB","ignoreList":[]}
1
+ {"version":3,"file":"MultiSelectListBox.js","names":["ListBox","jsx","_jsx","MultiSelectListBox","_ref","listBoxRef","listBoxId","loadingState","children","selectedKeys","disabledKeys","onSelectionChange","ariaLabel","emptyMessage","className","ref","id","selectionMode","isLoading","UNSAFE_style","maxHeight"],"sources":["../../../src/spectrum/multiSelect/MultiSelectListBox.tsx"],"sourcesContent":["import { type ReactElement } from 'react';\nimport { ListBox } from '@adobe/react-spectrum';\nimport type { DOMRef, LoadingState, Selection } from '@react-types/shared';\n\nexport interface MultiSelectListBoxProps {\n /** DOMRef forwarded to the inner Spectrum `<ListBox>`. */\n listBoxRef: DOMRef<HTMLDivElement>;\n /** ID applied to the inner Spectrum `<ListBox>`. */\n listBoxId: string;\n /** Spectrum `LoadingState` for the items collection. */\n loadingState: LoadingState | undefined;\n /** JSX children to render inside `<ListBox>`. */\n children: ReactElement[];\n /** Selected keys */\n selectedKeys: Iterable<string>;\n /** Disabled keys for `<ListBox>`. */\n disabledKeys: Iterable<string> | undefined;\n /** Selection change handler from `<ListBox>`. */\n onSelectionChange: (selection: Selection) => void;\n /** ARIA label applied to the `<ListBox>`. */\n ariaLabel: string;\n /** When provided, the ListBox is replaced with this empty-state message. */\n emptyMessage?: string;\n}\n\n/**\n * Popover content for `MultiSelect`. Renders either an empty-state message (text-only)\n * or the Spectrum `<ListBox>`. Private subcomponent of `MultiSelect`.\n */\nexport function MultiSelectListBox({\n listBoxRef,\n listBoxId,\n loadingState,\n children,\n selectedKeys,\n disabledKeys,\n onSelectionChange,\n ariaLabel,\n emptyMessage,\n}: MultiSelectListBoxProps): JSX.Element {\n if (emptyMessage != null) {\n return <div className=\"dh-multi-select-empty\">{emptyMessage}</div>;\n }\n\n return (\n <ListBox\n ref={listBoxRef}\n id={listBoxId}\n selectionMode=\"multiple\"\n selectedKeys={selectedKeys}\n onSelectionChange={onSelectionChange}\n disabledKeys={disabledKeys}\n aria-label={ariaLabel}\n isLoading={loadingState === 'loadingMore'}\n UNSAFE_style={{ maxHeight: 'inherit' }}\n >\n {children}\n </ListBox>\n );\n}\n\nexport default MultiSelectListBox;\n"],"mappings":"AACA,SAASA,OAAO,QAAQ,uBAAuB;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAwBhD;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAAAC,IAAA,EAUO;EAAA,IATvCC,UAAU,GAAAD,IAAA,CAAVC,UAAU;IACVC,SAAS,GAAAF,IAAA,CAATE,SAAS;IACTC,YAAY,GAAAH,IAAA,CAAZG,YAAY;IACZC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;IACRC,YAAY,GAAAL,IAAA,CAAZK,YAAY;IACZC,YAAY,GAAAN,IAAA,CAAZM,YAAY;IACZC,iBAAiB,GAAAP,IAAA,CAAjBO,iBAAiB;IACjBC,SAAS,GAAAR,IAAA,CAATQ,SAAS;IACTC,YAAY,GAAAT,IAAA,CAAZS,YAAY;EAEZ,IAAIA,YAAY,IAAI,IAAI,EAAE;IACxB,oBAAOX,IAAA;MAAKY,SAAS,EAAC,uBAAuB;MAAAN,QAAA,EAAEK;IAAY,CAAM,CAAC;EACpE;EAEA,oBACEX,IAAA,CAACF,OAAO;IACNe,GAAG,EAAEV,UAAW;IAChBW,EAAE,EAAEV,SAAU;IACdW,aAAa,EAAC,UAAU;IACxBR,YAAY,EAAEA,YAAa;IAC3BE,iBAAiB,EAAEA,iBAAkB;IACrCD,YAAY,EAAEA,YAAa;IAC3B,cAAYE,SAAU;IACtBM,SAAS,EAAEX,YAAY,KAAK,aAAc;IAC1CY,YAAY,EAAE;MAAEC,SAAS,EAAE;IAAU,CAAE;IAAAZ,QAAA,EAEtCA;EAAQ,CACF,CAAC;AAEd;AAEA,eAAeL,kBAAkB","ignoreList":[]}
@@ -16,15 +16,11 @@ import { useMultiSelectNormalizedProps } from "./useMultiSelectNormalizedProps.j
16
16
  */
17
17
  import { createElement as _createElement } from "react";
18
18
  export function MultiSelectNormalized(_ref) {
19
- var {
20
- UNSAFE_className
21
- } = _ref,
19
+ var UNSAFE_className = _ref.UNSAFE_className,
22
20
  props = _objectWithoutProperties(_ref, _excluded);
23
21
  var _useMultiSelectNormal = useMultiSelectNormalizedProps(props),
24
- {
25
- forceRerenderKey,
26
- children
27
- } = _useMultiSelectNormal,
22
+ forceRerenderKey = _useMultiSelectNormal.forceRerenderKey,
23
+ children = _useMultiSelectNormal.children,
28
24
  multiSelectProps = _objectWithoutProperties(_useMultiSelectNormal, _excluded2);
29
25
  return /*#__PURE__*/_createElement(MultiSelect
30
26
  // eslint-disable-next-line react/jsx-props-no-spreading
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectNormalized.js","names":["cl","MultiSelect","useMultiSelectNormalizedProps","createElement","_createElement","MultiSelectNormalized","_ref","UNSAFE_className","props","_objectWithoutProperties","_excluded","_useMultiSelectNormal","forceRerenderKey","children","multiSelectProps","_excluded2","_objectSpread","key"],"sources":["../../../src/spectrum/multiSelect/MultiSelectNormalized.tsx"],"sourcesContent":["import cl from 'classnames';\nimport { MultiSelect } from './MultiSelect';\nimport { type MultiSelectNormalizedProps } from './MultiSelectProps';\nimport { useMultiSelectNormalizedProps } from './useMultiSelectNormalizedProps';\n\n/**\n * MultiSelect that takes an array of `NormalizedItem` or `NormalizedSection` items as children.\n * Handles converting selection keys and uses `useRenderNormalizedItem` to render items.\n */\nexport function MultiSelectNormalized({\n UNSAFE_className,\n ...props\n}: MultiSelectNormalizedProps): JSX.Element {\n const { forceRerenderKey, children, ...multiSelectProps } =\n useMultiSelectNormalizedProps(props);\n\n return (\n <MultiSelect\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...multiSelectProps}\n key={forceRerenderKey}\n UNSAFE_className={cl('dh-multi-select-normalized', UNSAFE_className)}\n >\n {children}\n </MultiSelect>\n );\n}\n\nexport default MultiSelectNormalized;\n"],"mappings":";;;;;;;;;AAAA,OAAOA,EAAE,MAAM,YAAY;AAAC,SACnBC,WAAW;AAAA,SAEXC,6BAA6B;AAEtC;AACA;AACA;AACA;AAHA,SAAAC,aAAA,IAAAC,cAAA;AAIA,OAAO,SAASC,qBAAqBA,CAAAC,IAAA,EAGO;EAAA,IAHN;MACpCC;IAE0B,CAAC,GAAAD,IAAA;IADxBE,KAAK,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;EAER,IAAAC,qBAAA,GACET,6BAA6B,CAACM,KAAK,CAAC;IADhC;MAAEI,gBAAgB;MAAEC;IAA8B,CAAC,GAAAF,qBAAA;IAAlBG,gBAAgB,GAAAL,wBAAA,CAAAE,qBAAA,EAAAI,UAAA;EAGvD,oBACEX,cAAA,CAACH;EACC;EAAA,EAAAe,aAAA,CAAAA,aAAA,KACIF,gBAAgB;IACpBG,GAAG,EAAEL,gBAAiB;IACtBL,gBAAgB,EAAEP,EAAE,CAAC,4BAA4B,EAAEO,gBAAgB;EAAE,IAEpEM,QACU,CAAC;AAElB;AAEA,eAAeR,qBAAqB","ignoreList":[]}
1
+ {"version":3,"file":"MultiSelectNormalized.js","names":["cl","MultiSelect","useMultiSelectNormalizedProps","createElement","_createElement","MultiSelectNormalized","_ref","UNSAFE_className","props","_objectWithoutProperties","_excluded","_useMultiSelectNormal","forceRerenderKey","children","multiSelectProps","_excluded2","_objectSpread","key"],"sources":["../../../src/spectrum/multiSelect/MultiSelectNormalized.tsx"],"sourcesContent":["import cl from 'classnames';\nimport { MultiSelect } from './MultiSelect';\nimport { type MultiSelectNormalizedProps } from './MultiSelectProps';\nimport { useMultiSelectNormalizedProps } from './useMultiSelectNormalizedProps';\n\n/**\n * MultiSelect that takes an array of `NormalizedItem` or `NormalizedSection` items as children.\n * Handles converting selection keys and uses `useRenderNormalizedItem` to render items.\n */\nexport function MultiSelectNormalized({\n UNSAFE_className,\n ...props\n}: MultiSelectNormalizedProps): JSX.Element {\n const { forceRerenderKey, children, ...multiSelectProps } =\n useMultiSelectNormalizedProps(props);\n\n return (\n <MultiSelect\n // eslint-disable-next-line react/jsx-props-no-spreading\n {...multiSelectProps}\n key={forceRerenderKey}\n UNSAFE_className={cl('dh-multi-select-normalized', UNSAFE_className)}\n >\n {children}\n </MultiSelect>\n );\n}\n\nexport default MultiSelectNormalized;\n"],"mappings":";;;;;;;;;AAAA,OAAOA,EAAE,MAAM,YAAY;AAAC,SACnBC,WAAW;AAAA,SAEXC,6BAA6B;AAEtC;AACA;AACA;AACA;AAHA,SAAAC,aAAA,IAAAC,cAAA;AAIA,OAAO,SAASC,qBAAqBA,CAAAC,IAAA,EAGO;EAAA,IAF1CC,gBAAgB,GAAAD,IAAA,CAAhBC,gBAAgB;IACbC,KAAK,GAAAC,wBAAA,CAAAH,IAAA,EAAAI,SAAA;EAER,IAAAC,qBAAA,GACET,6BAA6B,CAACM,KAAK,CAAC;IAD9BI,gBAAgB,GAAAD,qBAAA,CAAhBC,gBAAgB;IAAEC,QAAQ,GAAAF,qBAAA,CAARE,QAAQ;IAAKC,gBAAgB,GAAAL,wBAAA,CAAAE,qBAAA,EAAAI,UAAA;EAGvD,oBACEX,cAAA,CAACH;EACC;EAAA,EAAAe,aAAA,CAAAA,aAAA,KACIF,gBAAgB;IACpBG,GAAG,EAAEL,gBAAiB;IACtBL,gBAAgB,EAAEP,EAAE,CAAC,4BAA4B,EAAEO,gBAAgB;EAAE,IAEpEM,QACU,CAAC;AAElB;AAEA,eAAeR,qBAAqB","ignoreList":[]}
@@ -5,13 +5,11 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
5
5
  * Private subcomponent of `MultiSelect`.
6
6
  */
7
7
  export function MultiSelectTag(_ref) {
8
- var {
9
- tagKey,
10
- label,
11
- isDisabled,
12
- isReadOnly,
13
- onRemove
14
- } = _ref;
8
+ var tagKey = _ref.tagKey,
9
+ label = _ref.label,
10
+ isDisabled = _ref.isDisabled,
11
+ isReadOnly = _ref.isReadOnly,
12
+ onRemove = _ref.onRemove;
15
13
  return /*#__PURE__*/_jsxs("span", {
16
14
  className: "dh-multi-select-tag",
17
15
  children: [/*#__PURE__*/_jsx("span", {
@@ -1 +1 @@
1
- {"version":3,"file":"MultiSelectTag.js","names":["CrossSmall","jsx","_jsx","jsxs","_jsxs","MultiSelectTag","_ref","tagKey","label","isDisabled","isReadOnly","onRemove","className","children","type","tabIndex","concat","onPointerDown","e","preventDefault","onClick"],"sources":["../../../src/spectrum/multiSelect/MultiSelectTag.tsx"],"sourcesContent":["import CrossSmall from '@spectrum-icons/ui/CrossSmall';\n\nexport interface MultiSelectTagProps {\n tagKey: string;\n label: string;\n isDisabled: boolean;\n isReadOnly: boolean;\n onRemove: (key: string) => void;\n}\n\n/**\n * A tag rendered inside the `MultiSelect` trigger area.\n * Private subcomponent of `MultiSelect`.\n */\nexport function MultiSelectTag({\n tagKey,\n label,\n isDisabled,\n isReadOnly,\n onRemove,\n}: MultiSelectTagProps): JSX.Element {\n return (\n <span className=\"dh-multi-select-tag\">\n <span className=\"dh-multi-select-tag-label\">{label}</span>\n {!isDisabled && !isReadOnly && (\n <button\n type=\"button\"\n className=\"dh-multi-select-tag-remove\"\n tabIndex={-1}\n aria-label={`Remove ${label}`}\n // Prevent the search input from losing focus when the user clicks the tag's remove\n // button. `onPointerDown` fires before the input's blur, so suppressing its default\n // keeps focus on the input.\n onPointerDown={e => e.preventDefault()}\n onClick={() => onRemove(tagKey)}\n >\n <CrossSmall />\n </button>\n )}\n </span>\n );\n}\n\nexport default MultiSelectTag;\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,+BAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAUvD;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAAC,IAAA,EAMO;EAAA,IANN;IAC7BC,MAAM;IACNC,KAAK;IACLC,UAAU;IACVC,UAAU;IACVC;EACmB,CAAC,GAAAL,IAAA;EACpB,oBACEF,KAAA;IAAMQ,SAAS,EAAC,qBAAqB;IAAAC,QAAA,gBACnCX,IAAA;MAAMU,SAAS,EAAC,2BAA2B;MAAAC,QAAA,EAAEL;IAAK,CAAO,CAAC,EACzD,CAACC,UAAU,IAAI,CAACC,UAAU,iBACzBR,IAAA;MACEY,IAAI,EAAC,QAAQ;MACbF,SAAS,EAAC,4BAA4B;MACtCG,QAAQ,EAAE,CAAC,CAAE;MACb,wBAAAC,MAAA,CAAsBR,KAAK;MAC3B;MACA;MACA;MAAA;MACAS,aAAa,EAAEC,CAAC,IAAIA,CAAC,CAACC,cAAc,CAAC,CAAE;MACvCC,OAAO,EAAEA,CAAA,KAAMT,QAAQ,CAACJ,MAAM,CAAE;MAAAM,QAAA,eAEhCX,IAAA,CAACF,UAAU,IAAE;IAAC,CACR,CACT;EAAA,CACG,CAAC;AAEX;AAEA,eAAeK,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"MultiSelectTag.js","names":["CrossSmall","jsx","_jsx","jsxs","_jsxs","MultiSelectTag","_ref","tagKey","label","isDisabled","isReadOnly","onRemove","className","children","type","tabIndex","concat","onPointerDown","e","preventDefault","onClick"],"sources":["../../../src/spectrum/multiSelect/MultiSelectTag.tsx"],"sourcesContent":["import CrossSmall from '@spectrum-icons/ui/CrossSmall';\n\nexport interface MultiSelectTagProps {\n tagKey: string;\n label: string;\n isDisabled: boolean;\n isReadOnly: boolean;\n onRemove: (key: string) => void;\n}\n\n/**\n * A tag rendered inside the `MultiSelect` trigger area.\n * Private subcomponent of `MultiSelect`.\n */\nexport function MultiSelectTag({\n tagKey,\n label,\n isDisabled,\n isReadOnly,\n onRemove,\n}: MultiSelectTagProps): JSX.Element {\n return (\n <span className=\"dh-multi-select-tag\">\n <span className=\"dh-multi-select-tag-label\">{label}</span>\n {!isDisabled && !isReadOnly && (\n <button\n type=\"button\"\n className=\"dh-multi-select-tag-remove\"\n tabIndex={-1}\n aria-label={`Remove ${label}`}\n // Prevent the search input from losing focus when the user clicks the tag's remove\n // button. `onPointerDown` fires before the input's blur, so suppressing its default\n // keeps focus on the input.\n onPointerDown={e => e.preventDefault()}\n onClick={() => onRemove(tagKey)}\n >\n <CrossSmall />\n </button>\n )}\n </span>\n );\n}\n\nexport default MultiSelectTag;\n"],"mappings":"AAAA,OAAOA,UAAU,MAAM,+BAA+B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAUvD;AACA;AACA;AACA;AACA,OAAO,SAASC,cAAcA,CAAAC,IAAA,EAMO;EAAA,IALnCC,MAAM,GAAAD,IAAA,CAANC,MAAM;IACNC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,UAAU,GAAAH,IAAA,CAAVG,UAAU;IACVC,UAAU,GAAAJ,IAAA,CAAVI,UAAU;IACVC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;EAER,oBACEP,KAAA;IAAMQ,SAAS,EAAC,qBAAqB;IAAAC,QAAA,gBACnCX,IAAA;MAAMU,SAAS,EAAC,2BAA2B;MAAAC,QAAA,EAAEL;IAAK,CAAO,CAAC,EACzD,CAACC,UAAU,IAAI,CAACC,UAAU,iBACzBR,IAAA;MACEY,IAAI,EAAC,QAAQ;MACbF,SAAS,EAAC,4BAA4B;MACtCG,QAAQ,EAAE,CAAC,CAAE;MACb,wBAAAC,MAAA,CAAsBR,KAAK;MAC3B;MACA;MACA;MAAA;MACAS,aAAa,EAAEC,CAAC,IAAIA,CAAC,CAACC,cAAc,CAAC,CAAE;MACvCC,OAAO,EAAEA,CAAA,KAAMT,QAAQ,CAACJ,MAAM,CAAE;MAAAM,QAAA,eAEhCX,IAAA,CAACF,UAAU,IAAE;IAAC,CACR,CACT;EAAA,CACG,CAAC;AAEX;AAEA,eAAeK,cAAc","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { useCallback, useMemo } from 'react';
2
8
  import { useFilter } from '@react-aria/i18n';
3
9
  import { useControlledState } from '@react-stately/utils';
@@ -7,24 +13,24 @@ import { collectEntryItemKeys, filterEntries, filterJsxChildrenByKeys, flattenEn
7
13
  * uncontrolled `inputValue`.
8
14
  */
9
15
  export function useMultiSelectFilter(_ref) {
10
- var {
11
- allEntries,
12
- wrappedChildren,
13
- inputValue,
14
- defaultInputValue,
15
- onInputChange,
16
- onSearchTextChange
17
- } = _ref;
18
- var [searchText, setSearchTextInternal] = useControlledState(inputValue, defaultInputValue, onInputChange);
16
+ var allEntries = _ref.allEntries,
17
+ wrappedChildren = _ref.wrappedChildren,
18
+ inputValue = _ref.inputValue,
19
+ defaultInputValue = _ref.defaultInputValue,
20
+ onInputChange = _ref.onInputChange,
21
+ onSearchTextChange = _ref.onSearchTextChange;
22
+ var _useControlledState = useControlledState(inputValue, defaultInputValue, onInputChange),
23
+ _useControlledState2 = _slicedToArray(_useControlledState, 2),
24
+ searchText = _useControlledState2[0],
25
+ setSearchTextInternal = _useControlledState2[1];
19
26
  var setSearchText = useCallback(value => {
20
27
  setSearchTextInternal(value);
21
28
  onSearchTextChange === null || onSearchTextChange === void 0 || onSearchTextChange(value);
22
29
  }, [setSearchTextInternal, onSearchTextChange]);
23
- var {
24
- contains
25
- } = useFilter({
26
- sensitivity: 'base'
27
- });
30
+ var _useFilter = useFilter({
31
+ sensitivity: 'base'
32
+ }),
33
+ contains = _useFilter.contains;
28
34
  var shouldSkipFiltering = onSearchTextChange != null || searchText === '';
29
35
  var filteredEntries = useMemo(() => {
30
36
  if (shouldSkipFiltering) {
@@ -1 +1 @@
1
- {"version":3,"file":"useMultiSelectFilter.js","names":["useCallback","useMemo","useFilter","useControlledState","collectEntryItemKeys","filterEntries","filterJsxChildrenByKeys","flattenEntriesToItems","useMultiSelectFilter","_ref","allEntries","wrappedChildren","inputValue","defaultInputValue","onInputChange","onSearchTextChange","searchText","setSearchTextInternal","setSearchText","value","contains","sensitivity","shouldSkipFiltering","filteredEntries","filteredItems","filteredJsxChildren","survivingKeys"],"sources":["../../../src/spectrum/multiSelect/useMultiSelectFilter.ts"],"sourcesContent":["import { type ReactElement, useCallback, useMemo } from 'react';\nimport { useFilter } from '@react-aria/i18n';\nimport { useControlledState } from '@react-stately/utils';\nimport {\n collectEntryItemKeys,\n filterEntries,\n filterJsxChildrenByKeys,\n flattenEntriesToItems,\n type MultiSelectFlatEntry,\n type MultiSelectFlatItem,\n} from './multiSelectUtils';\n\nexport interface UseMultiSelectFilterOptions {\n allEntries: readonly MultiSelectFlatEntry[];\n wrappedChildren: readonly ReactElement[];\n inputValue: string | undefined;\n defaultInputValue: string;\n onInputChange: ((value: string) => void) | undefined;\n onSearchTextChange: ((text: string) => void) | undefined;\n}\n\nexport interface UseMultiSelectFilterResult {\n /** Current search text (controlled or uncontrolled). */\n searchText: string;\n /** Set the search text and forward to onSearchTextChange if provided. */\n setSearchText: (value: string) => void;\n /** Flat list of items surviving the current filter (sections expanded). */\n filteredItems: MultiSelectFlatItem[];\n /** Filtered JSX children for `<ListBox>`. */\n filteredJsxChildren: ReactElement[];\n}\n\n/**\n * Owns the search/filter state for `MultiSelect`. Supports controlled and\n * uncontrolled `inputValue`.\n */\nexport function useMultiSelectFilter({\n allEntries,\n wrappedChildren,\n inputValue,\n defaultInputValue,\n onInputChange,\n onSearchTextChange,\n}: UseMultiSelectFilterOptions): UseMultiSelectFilterResult {\n const [searchText, setSearchTextInternal] = useControlledState<string>(\n inputValue,\n defaultInputValue,\n onInputChange\n );\n\n const setSearchText = useCallback(\n (value: string) => {\n setSearchTextInternal(value);\n onSearchTextChange?.(value);\n },\n [setSearchTextInternal, onSearchTextChange]\n );\n\n const { contains } = useFilter({ sensitivity: 'base' });\n\n const shouldSkipFiltering = onSearchTextChange != null || searchText === '';\n\n const filteredEntries = useMemo<readonly MultiSelectFlatEntry[]>(() => {\n if (shouldSkipFiltering) {\n return allEntries;\n }\n return filterEntries(allEntries, searchText, contains);\n }, [allEntries, searchText, contains, shouldSkipFiltering]);\n\n const filteredItems = useMemo(\n () => flattenEntriesToItems(filteredEntries),\n [filteredEntries]\n );\n\n const filteredJsxChildren = useMemo<ReactElement[]>(() => {\n if (shouldSkipFiltering) {\n return wrappedChildren as ReactElement[];\n }\n const survivingKeys = collectEntryItemKeys(filteredEntries);\n return filterJsxChildrenByKeys(wrappedChildren, survivingKeys);\n }, [wrappedChildren, filteredEntries, shouldSkipFiltering]);\n\n return {\n searchText,\n setSearchText,\n filteredItems,\n filteredJsxChildren,\n };\n}\n\nexport default useMultiSelectFilter;\n"],"mappings":"AAAA,SAA4BA,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAC/D,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,kBAAkB,QAAQ,sBAAsB;AAAC,SAExDC,oBAAoB,EACpBC,aAAa,EACbC,uBAAuB,EACvBC,qBAAqB;AAyBvB;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAAC,IAAA,EAOwB;EAAA,IAPvB;IACnCC,UAAU;IACVC,eAAe;IACfC,UAAU;IACVC,iBAAiB;IACjBC,aAAa;IACbC;EAC2B,CAAC,GAAAN,IAAA;EAC5B,IAAM,CAACO,UAAU,EAAEC,qBAAqB,CAAC,GAAGd,kBAAkB,CAC5DS,UAAU,EACVC,iBAAiB,EACjBC,aACF,CAAC;EAED,IAAMI,aAAa,GAAGlB,WAAW,CAC9BmB,KAAa,IAAK;IACjBF,qBAAqB,CAACE,KAAK,CAAC;IAC5BJ,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAGI,KAAK,CAAC;EAC7B,CAAC,EACD,CAACF,qBAAqB,EAAEF,kBAAkB,CAC5C,CAAC;EAED,IAAM;IAAEK;EAAS,CAAC,GAAGlB,SAAS,CAAC;IAAEmB,WAAW,EAAE;EAAO,CAAC,CAAC;EAEvD,IAAMC,mBAAmB,GAAGP,kBAAkB,IAAI,IAAI,IAAIC,UAAU,KAAK,EAAE;EAE3E,IAAMO,eAAe,GAAGtB,OAAO,CAAkC,MAAM;IACrE,IAAIqB,mBAAmB,EAAE;MACvB,OAAOZ,UAAU;IACnB;IACA,OAAOL,aAAa,CAACK,UAAU,EAAEM,UAAU,EAAEI,QAAQ,CAAC;EACxD,CAAC,EAAE,CAACV,UAAU,EAAEM,UAAU,EAAEI,QAAQ,EAAEE,mBAAmB,CAAC,CAAC;EAE3D,IAAME,aAAa,GAAGvB,OAAO,CAC3B,MAAMM,qBAAqB,CAACgB,eAAe,CAAC,EAC5C,CAACA,eAAe,CAClB,CAAC;EAED,IAAME,mBAAmB,GAAGxB,OAAO,CAAiB,MAAM;IACxD,IAAIqB,mBAAmB,EAAE;MACvB,OAAOX,eAAe;IACxB;IACA,IAAMe,aAAa,GAAGtB,oBAAoB,CAACmB,eAAe,CAAC;IAC3D,OAAOjB,uBAAuB,CAACK,eAAe,EAAEe,aAAa,CAAC;EAChE,CAAC,EAAE,CAACf,eAAe,EAAEY,eAAe,EAAED,mBAAmB,CAAC,CAAC;EAE3D,OAAO;IACLN,UAAU;IACVE,aAAa;IACbM,aAAa;IACbC;EACF,CAAC;AACH;AAEA,eAAejB,oBAAoB","ignoreList":[]}
1
+ {"version":3,"file":"useMultiSelectFilter.js","names":["useCallback","useMemo","useFilter","useControlledState","collectEntryItemKeys","filterEntries","filterJsxChildrenByKeys","flattenEntriesToItems","useMultiSelectFilter","_ref","allEntries","wrappedChildren","inputValue","defaultInputValue","onInputChange","onSearchTextChange","_useControlledState","_useControlledState2","_slicedToArray","searchText","setSearchTextInternal","setSearchText","value","_useFilter","sensitivity","contains","shouldSkipFiltering","filteredEntries","filteredItems","filteredJsxChildren","survivingKeys"],"sources":["../../../src/spectrum/multiSelect/useMultiSelectFilter.ts"],"sourcesContent":["import { type ReactElement, useCallback, useMemo } from 'react';\nimport { useFilter } from '@react-aria/i18n';\nimport { useControlledState } from '@react-stately/utils';\nimport {\n collectEntryItemKeys,\n filterEntries,\n filterJsxChildrenByKeys,\n flattenEntriesToItems,\n type MultiSelectFlatEntry,\n type MultiSelectFlatItem,\n} from './multiSelectUtils';\n\nexport interface UseMultiSelectFilterOptions {\n allEntries: readonly MultiSelectFlatEntry[];\n wrappedChildren: readonly ReactElement[];\n inputValue: string | undefined;\n defaultInputValue: string;\n onInputChange: ((value: string) => void) | undefined;\n onSearchTextChange: ((text: string) => void) | undefined;\n}\n\nexport interface UseMultiSelectFilterResult {\n /** Current search text (controlled or uncontrolled). */\n searchText: string;\n /** Set the search text and forward to onSearchTextChange if provided. */\n setSearchText: (value: string) => void;\n /** Flat list of items surviving the current filter (sections expanded). */\n filteredItems: MultiSelectFlatItem[];\n /** Filtered JSX children for `<ListBox>`. */\n filteredJsxChildren: ReactElement[];\n}\n\n/**\n * Owns the search/filter state for `MultiSelect`. Supports controlled and\n * uncontrolled `inputValue`.\n */\nexport function useMultiSelectFilter({\n allEntries,\n wrappedChildren,\n inputValue,\n defaultInputValue,\n onInputChange,\n onSearchTextChange,\n}: UseMultiSelectFilterOptions): UseMultiSelectFilterResult {\n const [searchText, setSearchTextInternal] = useControlledState<string>(\n inputValue,\n defaultInputValue,\n onInputChange\n );\n\n const setSearchText = useCallback(\n (value: string) => {\n setSearchTextInternal(value);\n onSearchTextChange?.(value);\n },\n [setSearchTextInternal, onSearchTextChange]\n );\n\n const { contains } = useFilter({ sensitivity: 'base' });\n\n const shouldSkipFiltering = onSearchTextChange != null || searchText === '';\n\n const filteredEntries = useMemo<readonly MultiSelectFlatEntry[]>(() => {\n if (shouldSkipFiltering) {\n return allEntries;\n }\n return filterEntries(allEntries, searchText, contains);\n }, [allEntries, searchText, contains, shouldSkipFiltering]);\n\n const filteredItems = useMemo(\n () => flattenEntriesToItems(filteredEntries),\n [filteredEntries]\n );\n\n const filteredJsxChildren = useMemo<ReactElement[]>(() => {\n if (shouldSkipFiltering) {\n return wrappedChildren as ReactElement[];\n }\n const survivingKeys = collectEntryItemKeys(filteredEntries);\n return filterJsxChildrenByKeys(wrappedChildren, survivingKeys);\n }, [wrappedChildren, filteredEntries, shouldSkipFiltering]);\n\n return {\n searchText,\n setSearchText,\n filteredItems,\n filteredJsxChildren,\n };\n}\n\nexport default useMultiSelectFilter;\n"],"mappings":";;;;;;AAAA,SAA4BA,WAAW,EAAEC,OAAO,QAAQ,OAAO;AAC/D,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,SAASC,kBAAkB,QAAQ,sBAAsB;AAAC,SAExDC,oBAAoB,EACpBC,aAAa,EACbC,uBAAuB,EACvBC,qBAAqB;AAyBvB;AACA;AACA;AACA;AACA,OAAO,SAASC,oBAAoBA,CAAAC,IAAA,EAOwB;EAAA,IAN1DC,UAAU,GAAAD,IAAA,CAAVC,UAAU;IACVC,eAAe,GAAAF,IAAA,CAAfE,eAAe;IACfC,UAAU,GAAAH,IAAA,CAAVG,UAAU;IACVC,iBAAiB,GAAAJ,IAAA,CAAjBI,iBAAiB;IACjBC,aAAa,GAAAL,IAAA,CAAbK,aAAa;IACbC,kBAAkB,GAAAN,IAAA,CAAlBM,kBAAkB;EAElB,IAAAC,mBAAA,GAA4Cb,kBAAkB,CAC5DS,UAAU,EACVC,iBAAiB,EACjBC,aACF,CAAC;IAAAG,oBAAA,GAAAC,cAAA,CAAAF,mBAAA;IAJMG,UAAU,GAAAF,oBAAA;IAAEG,qBAAqB,GAAAH,oBAAA;EAMxC,IAAMI,aAAa,GAAGrB,WAAW,CAC9BsB,KAAa,IAAK;IACjBF,qBAAqB,CAACE,KAAK,CAAC;IAC5BP,kBAAkB,aAAlBA,kBAAkB,eAAlBA,kBAAkB,CAAGO,KAAK,CAAC;EAC7B,CAAC,EACD,CAACF,qBAAqB,EAAEL,kBAAkB,CAC5C,CAAC;EAED,IAAAQ,UAAA,GAAqBrB,SAAS,CAAC;MAAEsB,WAAW,EAAE;IAAO,CAAC,CAAC;IAA/CC,QAAQ,GAAAF,UAAA,CAARE,QAAQ;EAEhB,IAAMC,mBAAmB,GAAGX,kBAAkB,IAAI,IAAI,IAAII,UAAU,KAAK,EAAE;EAE3E,IAAMQ,eAAe,GAAG1B,OAAO,CAAkC,MAAM;IACrE,IAAIyB,mBAAmB,EAAE;MACvB,OAAOhB,UAAU;IACnB;IACA,OAAOL,aAAa,CAACK,UAAU,EAAES,UAAU,EAAEM,QAAQ,CAAC;EACxD,CAAC,EAAE,CAACf,UAAU,EAAES,UAAU,EAAEM,QAAQ,EAAEC,mBAAmB,CAAC,CAAC;EAE3D,IAAME,aAAa,GAAG3B,OAAO,CAC3B,MAAMM,qBAAqB,CAACoB,eAAe,CAAC,EAC5C,CAACA,eAAe,CAClB,CAAC;EAED,IAAME,mBAAmB,GAAG5B,OAAO,CAAiB,MAAM;IACxD,IAAIyB,mBAAmB,EAAE;MACvB,OAAOf,eAAe;IACxB;IACA,IAAMmB,aAAa,GAAG1B,oBAAoB,CAACuB,eAAe,CAAC;IAC3D,OAAOrB,uBAAuB,CAACK,eAAe,EAAEmB,aAAa,CAAC;EAChE,CAAC,EAAE,CAACnB,eAAe,EAAEgB,eAAe,EAAED,mBAAmB,CAAC,CAAC;EAE3D,OAAO;IACLP,UAAU;IACVE,aAAa;IACbO,aAAa;IACbC;EACF,CAAC;AACH;AAEA,eAAerB,oBAAoB","ignoreList":[]}
@@ -1,3 +1,9 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { useCallback, useEffect, useRef, useState } from 'react';
2
8
  /**
3
9
  * Replicates the key-normalization Spectrum applies to listbox option ids
@@ -19,26 +25,27 @@ function normalizeKey(key) {
19
25
  * intended focus target.
20
26
  */
21
27
  export function useMultiSelectKeyboard(_ref) {
22
- var {
23
- filteredItems,
24
- allItems,
25
- shouldFocusWrap,
26
- overlayState,
27
- openOverlay,
28
- closeOverlay,
29
- isReadOnly,
30
- isDisabled,
31
- searchText,
32
- setSearchText,
33
- selectedKeys,
34
- toggleKey,
35
- allowsCustomValue,
36
- menuTrigger,
37
- onKeyDown,
38
- listBoxContainerRef,
39
- inputRef
40
- } = _ref;
41
- var [focusedKey, setFocusedKey] = useState(null);
28
+ var filteredItems = _ref.filteredItems,
29
+ allItems = _ref.allItems,
30
+ shouldFocusWrap = _ref.shouldFocusWrap,
31
+ overlayState = _ref.overlayState,
32
+ openOverlay = _ref.openOverlay,
33
+ closeOverlay = _ref.closeOverlay,
34
+ isReadOnly = _ref.isReadOnly,
35
+ isDisabled = _ref.isDisabled,
36
+ searchText = _ref.searchText,
37
+ setSearchText = _ref.setSearchText,
38
+ selectedKeys = _ref.selectedKeys,
39
+ toggleKey = _ref.toggleKey,
40
+ allowsCustomValue = _ref.allowsCustomValue,
41
+ menuTrigger = _ref.menuTrigger,
42
+ onKeyDown = _ref.onKeyDown,
43
+ listBoxContainerRef = _ref.listBoxContainerRef,
44
+ inputRef = _ref.inputRef;
45
+ var _useState = useState(null),
46
+ _useState2 = _slicedToArray(_useState, 2),
47
+ focusedKey = _useState2[0],
48
+ setFocusedKey = _useState2[1];
42
49
  var moveFocus = useCallback(dir => {
43
50
  var len = filteredItems.length;
44
51
  if (len === 0) {
@@ -1 +1 @@
1
- {"version":3,"file":"useMultiSelectKeyboard.js","names":["useCallback","useEffect","useRef","useState","normalizeKey","key","replace","useMultiSelectKeyboard","_ref","filteredItems","allItems","shouldFocusWrap","overlayState","openOverlay","closeOverlay","isReadOnly","isDisabled","searchText","setSearchText","selectedKeys","toggleKey","allowsCustomValue","menuTrigger","onKeyDown","listBoxContainerRef","inputRef","focusedKey","setFocusedKey","moveFocus","dir","len","length","prev","currentIdx","findIndex","i","nextIdx","Math","min","max","handleInputKeyDown","e","preventDefault","isOpen","focusedItemStillExists","some","trim","trimmed","matchingItem","find","item","label","toLowerCase","size","keys","lastKey","wasOpenRef","current","container","_inputRef$current","removeAttribute","options","querySelectorAll","focusedSuffix","concat","focusedOptionId","forEach","el","matches","id","endsWith","setAttribute","scrollIntoView","block","input"],"sources":["../../../src/spectrum/multiSelect/useMultiSelectKeyboard.ts"],"sourcesContent":["import {\n type KeyboardEvent,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport type { OverlayTriggerState } from '@react-stately/overlays';\nimport type { MenuTriggerAction } from '../comboBox';\nimport { type MultiSelectFlatItem } from './multiSelectUtils';\n\nexport interface UseMultiSelectKeyboardOptions {\n filteredItems: MultiSelectFlatItem[];\n allItems: MultiSelectFlatItem[];\n shouldFocusWrap: boolean;\n overlayState: OverlayTriggerState;\n openOverlay: (reason: MenuTriggerAction) => void;\n closeOverlay: () => void;\n isReadOnly: boolean;\n isDisabled: boolean;\n searchText: string;\n setSearchText: (value: string) => void;\n selectedKeys: Set<string>;\n toggleKey: (key: string) => void;\n allowsCustomValue: boolean;\n menuTrigger: 'focus' | 'input' | 'manual';\n onKeyDown: ((e: KeyboardEvent) => void) | undefined;\n listBoxContainerRef: RefObject<HTMLElement | null>;\n inputRef: RefObject<HTMLInputElement | null>;\n}\n\nexport interface UseMultiSelectKeyboardResult {\n /** `onKeyDown` handler for the inline input. */\n handleInputKeyDown: (e: KeyboardEvent) => void;\n}\n\n/**\n * Replicates the key-normalization Spectrum applies to listbox option ids\n * (see https://github.com/adobe/react-spectrum/blob/9508b15bf8c0e968c56220548207cc57c7e4f57c/packages/react-aria/src/listbox/utils.ts#L31). Whitespace is stripped so that\n * `<listId>-option-<normalizedKey>` matches the actual rendered DOM `id`.\n */\nfunction normalizeKey(key: string): string {\n return key.replace(/\\s+/g, '');\n}\n\n/**\n * Owns virtual-focus tracking, keyboard handling, and the DOM/scroll\n * side-effects for option highlighting in MultiSelect. Keyboard navigation\n * is handled outside Spectrum's ListBox because the input retains real\n * focus while options are visually highlighted via `data-dh-focused`.\n *\n * Focus is tracked by item key, so it survives filtering, virtualization, etc\n * where the underlying filteredItems array shifts independently of the user's\n * intended focus target.\n */\nexport function useMultiSelectKeyboard({\n filteredItems,\n allItems,\n shouldFocusWrap,\n overlayState,\n openOverlay,\n closeOverlay,\n isReadOnly,\n isDisabled,\n searchText,\n setSearchText,\n selectedKeys,\n toggleKey,\n allowsCustomValue,\n menuTrigger,\n onKeyDown,\n listBoxContainerRef,\n inputRef,\n}: UseMultiSelectKeyboardOptions): UseMultiSelectKeyboardResult {\n const [focusedKey, setFocusedKey] = useState<string | null>(null);\n\n const moveFocus = useCallback(\n (dir: 'down' | 'up') => {\n const len = filteredItems.length;\n if (len === 0) {\n return;\n }\n setFocusedKey(prev => {\n const currentIdx =\n prev == null ? -1 : filteredItems.findIndex(i => i.key === prev);\n let nextIdx: number;\n if (dir === 'down') {\n if (currentIdx === -1) {\n nextIdx = 0;\n } else if (shouldFocusWrap) {\n nextIdx = (currentIdx + 1) % len;\n } else {\n nextIdx = Math.min(currentIdx + 1, len - 1);\n }\n } else if (currentIdx === -1) {\n nextIdx = len - 1;\n } else if (shouldFocusWrap) {\n nextIdx = (currentIdx - 1 + len) % len;\n } else {\n nextIdx = Math.max(currentIdx - 1, 0);\n }\n return filteredItems[nextIdx].key;\n });\n },\n [filteredItems, shouldFocusWrap]\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isDisabled) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!overlayState.isOpen) {\n openOverlay('manual');\n } else {\n moveFocus('down');\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (overlayState.isOpen) {\n moveFocus('up');\n }\n break;\n\n case 'Enter': {\n if (!overlayState.isOpen) {\n e.preventDefault();\n openOverlay('manual');\n break;\n }\n const focusedItemStillExists =\n focusedKey != null && filteredItems.some(i => i.key === focusedKey);\n if (!isReadOnly && focusedItemStillExists) {\n e.preventDefault();\n toggleKey(focusedKey);\n } else if (\n !isReadOnly &&\n allowsCustomValue &&\n searchText.trim() !== ''\n ) {\n e.preventDefault();\n const trimmed = searchText.trim();\n // Check if typed text exactly matches an existing item label\n const matchingItem = allItems.find(\n item => item.label.toLowerCase() === trimmed.toLowerCase()\n );\n toggleKey(matchingItem != null ? matchingItem.key : trimmed);\n setSearchText('');\n } else {\n // No focused item, no custom value — clear search and close\n setSearchText('');\n closeOverlay();\n }\n break;\n }\n\n case 'Escape':\n if (overlayState.isOpen) {\n e.preventDefault();\n closeOverlay();\n }\n break;\n\n case 'Tab':\n if (overlayState.isOpen) {\n closeOverlay();\n }\n break;\n\n case 'Backspace':\n if (searchText === '' && !isReadOnly && selectedKeys.size > 0) {\n const keys = [...selectedKeys];\n const lastKey = keys[keys.length - 1];\n if (lastKey != null) {\n toggleKey(lastKey);\n }\n }\n break;\n\n default:\n break;\n }\n\n onKeyDown?.(e);\n },\n [\n isDisabled,\n overlayState,\n openOverlay,\n closeOverlay,\n moveFocus,\n isReadOnly,\n focusedKey,\n filteredItems,\n allItems,\n allowsCustomValue,\n toggleKey,\n searchText,\n setSearchText,\n selectedKeys,\n onKeyDown,\n ]\n );\n\n // Reset state only when the dropdown closes (not every render). This avoids clearing the input\n // on each keystroke, especially in menuTrigger='manual' mode.\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (wasOpenRef.current && !overlayState.isOpen) {\n if (!allowsCustomValue) {\n setSearchText('');\n }\n setFocusedKey(null);\n }\n wasOpenRef.current = overlayState.isOpen;\n }, [overlayState.isOpen, setSearchText, allowsCustomValue]);\n\n // Open dropdown when user starts typing (unless menuTrigger is 'manual').\n // Intentionally watches only searchText: including overlayState.isOpen would\n // re-fire on close and auto-reopen if the input still has text.\n useEffect(() => {\n if (\n menuTrigger !== 'manual' &&\n searchText !== '' &&\n !overlayState.isOpen &&\n !isDisabled\n ) {\n openOverlay('input');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchText]);\n\n // Spectrum's <ListBox> doesn't expose its own focus management, so we mark the focused option\n // with data-dh-focused for SCSS styling and copy the option's id onto\n // the input's aria-activedescendant.\n useEffect(() => {\n const container = listBoxContainerRef.current;\n if (container == null) {\n inputRef.current?.removeAttribute('aria-activedescendant');\n return;\n }\n const options = container.querySelectorAll<HTMLElement>('[role=\"option\"]');\n const focusedSuffix =\n focusedKey != null ? `-option-${normalizeKey(focusedKey)}` : null;\n let focusedOptionId: string | undefined;\n options.forEach(el => {\n const matches = focusedSuffix != null && el.id.endsWith(focusedSuffix);\n if (matches) {\n el.setAttribute('data-dh-focused', 'true');\n el.scrollIntoView({ block: 'nearest' });\n focusedOptionId = el.id;\n } else {\n el.removeAttribute('data-dh-focused');\n }\n });\n\n const input = inputRef.current;\n if (input != null) {\n if (focusedOptionId != null) {\n input.setAttribute('aria-activedescendant', focusedOptionId);\n } else {\n input.removeAttribute('aria-activedescendant');\n }\n }\n }, [focusedKey, filteredItems, inputRef, listBoxContainerRef]);\n\n return { handleInputKeyDown };\n}\n\nexport default useMultiSelectKeyboard;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"useMultiSelectKeyboard.js","names":["useCallback","useEffect","useRef","useState","normalizeKey","key","replace","useMultiSelectKeyboard","_ref","filteredItems","allItems","shouldFocusWrap","overlayState","openOverlay","closeOverlay","isReadOnly","isDisabled","searchText","setSearchText","selectedKeys","toggleKey","allowsCustomValue","menuTrigger","onKeyDown","listBoxContainerRef","inputRef","_useState","_useState2","_slicedToArray","focusedKey","setFocusedKey","moveFocus","dir","len","length","prev","currentIdx","findIndex","i","nextIdx","Math","min","max","handleInputKeyDown","e","preventDefault","isOpen","focusedItemStillExists","some","trim","trimmed","matchingItem","find","item","label","toLowerCase","size","keys","lastKey","wasOpenRef","current","container","_inputRef$current","removeAttribute","options","querySelectorAll","focusedSuffix","concat","focusedOptionId","forEach","el","matches","id","endsWith","setAttribute","scrollIntoView","block","input"],"sources":["../../../src/spectrum/multiSelect/useMultiSelectKeyboard.ts"],"sourcesContent":["import {\n type KeyboardEvent,\n type RefObject,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport type { OverlayTriggerState } from '@react-stately/overlays';\nimport type { MenuTriggerAction } from '../comboBox';\nimport { type MultiSelectFlatItem } from './multiSelectUtils';\n\nexport interface UseMultiSelectKeyboardOptions {\n filteredItems: MultiSelectFlatItem[];\n allItems: MultiSelectFlatItem[];\n shouldFocusWrap: boolean;\n overlayState: OverlayTriggerState;\n openOverlay: (reason: MenuTriggerAction) => void;\n closeOverlay: () => void;\n isReadOnly: boolean;\n isDisabled: boolean;\n searchText: string;\n setSearchText: (value: string) => void;\n selectedKeys: Set<string>;\n toggleKey: (key: string) => void;\n allowsCustomValue: boolean;\n menuTrigger: 'focus' | 'input' | 'manual';\n onKeyDown: ((e: KeyboardEvent) => void) | undefined;\n listBoxContainerRef: RefObject<HTMLElement | null>;\n inputRef: RefObject<HTMLInputElement | null>;\n}\n\nexport interface UseMultiSelectKeyboardResult {\n /** `onKeyDown` handler for the inline input. */\n handleInputKeyDown: (e: KeyboardEvent) => void;\n}\n\n/**\n * Replicates the key-normalization Spectrum applies to listbox option ids\n * (see https://github.com/adobe/react-spectrum/blob/9508b15bf8c0e968c56220548207cc57c7e4f57c/packages/react-aria/src/listbox/utils.ts#L31). Whitespace is stripped so that\n * `<listId>-option-<normalizedKey>` matches the actual rendered DOM `id`.\n */\nfunction normalizeKey(key: string): string {\n return key.replace(/\\s+/g, '');\n}\n\n/**\n * Owns virtual-focus tracking, keyboard handling, and the DOM/scroll\n * side-effects for option highlighting in MultiSelect. Keyboard navigation\n * is handled outside Spectrum's ListBox because the input retains real\n * focus while options are visually highlighted via `data-dh-focused`.\n *\n * Focus is tracked by item key, so it survives filtering, virtualization, etc\n * where the underlying filteredItems array shifts independently of the user's\n * intended focus target.\n */\nexport function useMultiSelectKeyboard({\n filteredItems,\n allItems,\n shouldFocusWrap,\n overlayState,\n openOverlay,\n closeOverlay,\n isReadOnly,\n isDisabled,\n searchText,\n setSearchText,\n selectedKeys,\n toggleKey,\n allowsCustomValue,\n menuTrigger,\n onKeyDown,\n listBoxContainerRef,\n inputRef,\n}: UseMultiSelectKeyboardOptions): UseMultiSelectKeyboardResult {\n const [focusedKey, setFocusedKey] = useState<string | null>(null);\n\n const moveFocus = useCallback(\n (dir: 'down' | 'up') => {\n const len = filteredItems.length;\n if (len === 0) {\n return;\n }\n setFocusedKey(prev => {\n const currentIdx =\n prev == null ? -1 : filteredItems.findIndex(i => i.key === prev);\n let nextIdx: number;\n if (dir === 'down') {\n if (currentIdx === -1) {\n nextIdx = 0;\n } else if (shouldFocusWrap) {\n nextIdx = (currentIdx + 1) % len;\n } else {\n nextIdx = Math.min(currentIdx + 1, len - 1);\n }\n } else if (currentIdx === -1) {\n nextIdx = len - 1;\n } else if (shouldFocusWrap) {\n nextIdx = (currentIdx - 1 + len) % len;\n } else {\n nextIdx = Math.max(currentIdx - 1, 0);\n }\n return filteredItems[nextIdx].key;\n });\n },\n [filteredItems, shouldFocusWrap]\n );\n\n const handleInputKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (isDisabled) {\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n if (!overlayState.isOpen) {\n openOverlay('manual');\n } else {\n moveFocus('down');\n }\n break;\n\n case 'ArrowUp':\n e.preventDefault();\n if (overlayState.isOpen) {\n moveFocus('up');\n }\n break;\n\n case 'Enter': {\n if (!overlayState.isOpen) {\n e.preventDefault();\n openOverlay('manual');\n break;\n }\n const focusedItemStillExists =\n focusedKey != null && filteredItems.some(i => i.key === focusedKey);\n if (!isReadOnly && focusedItemStillExists) {\n e.preventDefault();\n toggleKey(focusedKey);\n } else if (\n !isReadOnly &&\n allowsCustomValue &&\n searchText.trim() !== ''\n ) {\n e.preventDefault();\n const trimmed = searchText.trim();\n // Check if typed text exactly matches an existing item label\n const matchingItem = allItems.find(\n item => item.label.toLowerCase() === trimmed.toLowerCase()\n );\n toggleKey(matchingItem != null ? matchingItem.key : trimmed);\n setSearchText('');\n } else {\n // No focused item, no custom value — clear search and close\n setSearchText('');\n closeOverlay();\n }\n break;\n }\n\n case 'Escape':\n if (overlayState.isOpen) {\n e.preventDefault();\n closeOverlay();\n }\n break;\n\n case 'Tab':\n if (overlayState.isOpen) {\n closeOverlay();\n }\n break;\n\n case 'Backspace':\n if (searchText === '' && !isReadOnly && selectedKeys.size > 0) {\n const keys = [...selectedKeys];\n const lastKey = keys[keys.length - 1];\n if (lastKey != null) {\n toggleKey(lastKey);\n }\n }\n break;\n\n default:\n break;\n }\n\n onKeyDown?.(e);\n },\n [\n isDisabled,\n overlayState,\n openOverlay,\n closeOverlay,\n moveFocus,\n isReadOnly,\n focusedKey,\n filteredItems,\n allItems,\n allowsCustomValue,\n toggleKey,\n searchText,\n setSearchText,\n selectedKeys,\n onKeyDown,\n ]\n );\n\n // Reset state only when the dropdown closes (not every render). This avoids clearing the input\n // on each keystroke, especially in menuTrigger='manual' mode.\n const wasOpenRef = useRef(false);\n useEffect(() => {\n if (wasOpenRef.current && !overlayState.isOpen) {\n if (!allowsCustomValue) {\n setSearchText('');\n }\n setFocusedKey(null);\n }\n wasOpenRef.current = overlayState.isOpen;\n }, [overlayState.isOpen, setSearchText, allowsCustomValue]);\n\n // Open dropdown when user starts typing (unless menuTrigger is 'manual').\n // Intentionally watches only searchText: including overlayState.isOpen would\n // re-fire on close and auto-reopen if the input still has text.\n useEffect(() => {\n if (\n menuTrigger !== 'manual' &&\n searchText !== '' &&\n !overlayState.isOpen &&\n !isDisabled\n ) {\n openOverlay('input');\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchText]);\n\n // Spectrum's <ListBox> doesn't expose its own focus management, so we mark the focused option\n // with data-dh-focused for SCSS styling and copy the option's id onto\n // the input's aria-activedescendant.\n useEffect(() => {\n const container = listBoxContainerRef.current;\n if (container == null) {\n inputRef.current?.removeAttribute('aria-activedescendant');\n return;\n }\n const options = container.querySelectorAll<HTMLElement>('[role=\"option\"]');\n const focusedSuffix =\n focusedKey != null ? `-option-${normalizeKey(focusedKey)}` : null;\n let focusedOptionId: string | undefined;\n options.forEach(el => {\n const matches = focusedSuffix != null && el.id.endsWith(focusedSuffix);\n if (matches) {\n el.setAttribute('data-dh-focused', 'true');\n el.scrollIntoView({ block: 'nearest' });\n focusedOptionId = el.id;\n } else {\n el.removeAttribute('data-dh-focused');\n }\n });\n\n const input = inputRef.current;\n if (input != null) {\n if (focusedOptionId != null) {\n input.setAttribute('aria-activedescendant', focusedOptionId);\n } else {\n input.removeAttribute('aria-activedescendant');\n }\n }\n }, [focusedKey, filteredItems, inputRef, listBoxContainerRef]);\n\n return { handleInputKeyDown };\n}\n\nexport default useMultiSelectKeyboard;\n"],"mappings":"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","ignoreList":[]}
@@ -1,13 +1,20 @@
1
+ function _slicedToArray(r, e) { return _arrayWithHoles(r) || _iterableToArrayLimit(r, e) || _unsupportedIterableToArray(r, e) || _nonIterableRest(); }
2
+ function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
3
+ function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
4
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
5
+ function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
6
+ function _arrayWithHoles(r) { if (Array.isArray(r)) return r; }
1
7
  import { useEffect, useRef, useState } from 'react';
2
8
  var LOADING_DEBOUNCE_MS = 500;
3
9
  export function useMultiSelectLoadingSpinner(_ref) {
4
- var {
5
- loadingState,
6
- searchText,
7
- isOpen,
8
- menuTrigger
9
- } = _ref;
10
- var [showLoading, setShowLoading] = useState(false);
10
+ var loadingState = _ref.loadingState,
11
+ searchText = _ref.searchText,
12
+ isOpen = _ref.isOpen,
13
+ menuTrigger = _ref.menuTrigger;
14
+ var _useState = useState(false),
15
+ _useState2 = _slicedToArray(_useState, 2),
16
+ showLoading = _useState2[0],
17
+ setShowLoading = _useState2[1];
11
18
  var loadingTimeoutRef = useRef(null);
12
19
  var isLoadingForSpinner = loadingState === 'loading' || loadingState === 'filtering';
13
20
  var lastSearchTextRef = useRef(searchText);
@@ -1 +1 @@
1
- {"version":3,"file":"useMultiSelectLoadingSpinner.js","names":["useEffect","useRef","useState","LOADING_DEBOUNCE_MS","useMultiSelectLoadingSpinner","_ref","loadingState","searchText","isOpen","menuTrigger","showLoading","setShowLoading","loadingTimeoutRef","isLoadingForSpinner","lastSearchTextRef","searchChanged","current","clearTimeout","setTimeout"],"sources":["../../../src/spectrum/multiSelect/useMultiSelectLoadingSpinner.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { type LoadingState } from '@react-types/shared';\nimport { type MenuTriggerAction } from '../comboBox/ComboBox';\n\nconst LOADING_DEBOUNCE_MS = 500;\n\nexport interface UseMultiSelectLoadingSpinnerOptions {\n loadingState: LoadingState | undefined;\n searchText: string;\n isOpen: boolean;\n menuTrigger: MenuTriggerAction;\n}\n\nexport function useMultiSelectLoadingSpinner({\n loadingState,\n searchText,\n isOpen,\n menuTrigger,\n}: UseMultiSelectLoadingSpinnerOptions): boolean {\n const [showLoading, setShowLoading] = useState(false);\n const loadingTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isLoadingForSpinner =\n loadingState === 'loading' || loadingState === 'filtering';\n const lastSearchTextRef = useRef(searchText);\n\n useEffect(() => {\n if (isLoadingForSpinner && !showLoading) {\n const searchChanged = searchText !== lastSearchTextRef.current;\n if (loadingTimeoutRef.current !== null && searchChanged) {\n clearTimeout(loadingTimeoutRef.current);\n loadingTimeoutRef.current = null;\n }\n if (loadingTimeoutRef.current === null) {\n loadingTimeoutRef.current = setTimeout(() => {\n setShowLoading(true);\n }, LOADING_DEBOUNCE_MS);\n }\n } else if (!isLoadingForSpinner) {\n setShowLoading(false);\n if (loadingTimeoutRef.current != null) {\n clearTimeout(loadingTimeoutRef.current);\n loadingTimeoutRef.current = null;\n }\n }\n lastSearchTextRef.current = searchText;\n }, [isLoadingForSpinner, showLoading, searchText]);\n\n useEffect(\n () => () => {\n if (loadingTimeoutRef.current != null) {\n clearTimeout(loadingTimeoutRef.current);\n loadingTimeoutRef.current = null;\n }\n },\n []\n );\n\n return (\n showLoading &&\n (isOpen || menuTrigger === 'manual' || loadingState === 'loading')\n );\n}\n\nexport default useMultiSelectLoadingSpinner;\n"],"mappings":"AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAInD,IAAMC,mBAAmB,GAAG,GAAG;AAS/B,OAAO,SAASC,4BAA4BA,CAAAC,IAAA,EAKK;EAAA,IALJ;IAC3CC,YAAY;IACZC,UAAU;IACVC,MAAM;IACNC;EACmC,CAAC,GAAAJ,IAAA;EACpC,IAAM,CAACK,WAAW,EAAEC,cAAc,CAAC,GAAGT,QAAQ,CAAC,KAAK,CAAC;EACrD,IAAMU,iBAAiB,GAAGX,MAAM,CAAuC,IAAI,CAAC;EAC5E,IAAMY,mBAAmB,GACvBP,YAAY,KAAK,SAAS,IAAIA,YAAY,KAAK,WAAW;EAC5D,IAAMQ,iBAAiB,GAAGb,MAAM,CAACM,UAAU,CAAC;EAE5CP,SAAS,CAAC,MAAM;IACd,IAAIa,mBAAmB,IAAI,CAACH,WAAW,EAAE;MACvC,IAAMK,aAAa,GAAGR,UAAU,KAAKO,iBAAiB,CAACE,OAAO;MAC9D,IAAIJ,iBAAiB,CAACI,OAAO,KAAK,IAAI,IAAID,aAAa,EAAE;QACvDE,YAAY,CAACL,iBAAiB,CAACI,OAAO,CAAC;QACvCJ,iBAAiB,CAACI,OAAO,GAAG,IAAI;MAClC;MACA,IAAIJ,iBAAiB,CAACI,OAAO,KAAK,IAAI,EAAE;QACtCJ,iBAAiB,CAACI,OAAO,GAAGE,UAAU,CAAC,MAAM;UAC3CP,cAAc,CAAC,IAAI,CAAC;QACtB,CAAC,EAAER,mBAAmB,CAAC;MACzB;IACF,CAAC,MAAM,IAAI,CAACU,mBAAmB,EAAE;MAC/BF,cAAc,CAAC,KAAK,CAAC;MACrB,IAAIC,iBAAiB,CAACI,OAAO,IAAI,IAAI,EAAE;QACrCC,YAAY,CAACL,iBAAiB,CAACI,OAAO,CAAC;QACvCJ,iBAAiB,CAACI,OAAO,GAAG,IAAI;MAClC;IACF;IACAF,iBAAiB,CAACE,OAAO,GAAGT,UAAU;EACxC,CAAC,EAAE,CAACM,mBAAmB,EAAEH,WAAW,EAAEH,UAAU,CAAC,CAAC;EAElDP,SAAS,CACP,MAAM,MAAM;IACV,IAAIY,iBAAiB,CAACI,OAAO,IAAI,IAAI,EAAE;MACrCC,YAAY,CAACL,iBAAiB,CAACI,OAAO,CAAC;MACvCJ,iBAAiB,CAACI,OAAO,GAAG,IAAI;IAClC;EACF,CAAC,EACD,EACF,CAAC;EAED,OACEN,WAAW,KACVF,MAAM,IAAIC,WAAW,KAAK,QAAQ,IAAIH,YAAY,KAAK,SAAS,CAAC;AAEtE;AAEA,eAAeF,4BAA4B","ignoreList":[]}
1
+ {"version":3,"file":"useMultiSelectLoadingSpinner.js","names":["useEffect","useRef","useState","LOADING_DEBOUNCE_MS","useMultiSelectLoadingSpinner","_ref","loadingState","searchText","isOpen","menuTrigger","_useState","_useState2","_slicedToArray","showLoading","setShowLoading","loadingTimeoutRef","isLoadingForSpinner","lastSearchTextRef","searchChanged","current","clearTimeout","setTimeout"],"sources":["../../../src/spectrum/multiSelect/useMultiSelectLoadingSpinner.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\nimport { type LoadingState } from '@react-types/shared';\nimport { type MenuTriggerAction } from '../comboBox/ComboBox';\n\nconst LOADING_DEBOUNCE_MS = 500;\n\nexport interface UseMultiSelectLoadingSpinnerOptions {\n loadingState: LoadingState | undefined;\n searchText: string;\n isOpen: boolean;\n menuTrigger: MenuTriggerAction;\n}\n\nexport function useMultiSelectLoadingSpinner({\n loadingState,\n searchText,\n isOpen,\n menuTrigger,\n}: UseMultiSelectLoadingSpinnerOptions): boolean {\n const [showLoading, setShowLoading] = useState(false);\n const loadingTimeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const isLoadingForSpinner =\n loadingState === 'loading' || loadingState === 'filtering';\n const lastSearchTextRef = useRef(searchText);\n\n useEffect(() => {\n if (isLoadingForSpinner && !showLoading) {\n const searchChanged = searchText !== lastSearchTextRef.current;\n if (loadingTimeoutRef.current !== null && searchChanged) {\n clearTimeout(loadingTimeoutRef.current);\n loadingTimeoutRef.current = null;\n }\n if (loadingTimeoutRef.current === null) {\n loadingTimeoutRef.current = setTimeout(() => {\n setShowLoading(true);\n }, LOADING_DEBOUNCE_MS);\n }\n } else if (!isLoadingForSpinner) {\n setShowLoading(false);\n if (loadingTimeoutRef.current != null) {\n clearTimeout(loadingTimeoutRef.current);\n loadingTimeoutRef.current = null;\n }\n }\n lastSearchTextRef.current = searchText;\n }, [isLoadingForSpinner, showLoading, searchText]);\n\n useEffect(\n () => () => {\n if (loadingTimeoutRef.current != null) {\n clearTimeout(loadingTimeoutRef.current);\n loadingTimeoutRef.current = null;\n }\n },\n []\n );\n\n return (\n showLoading &&\n (isOpen || menuTrigger === 'manual' || loadingState === 'loading')\n );\n}\n\nexport default useMultiSelectLoadingSpinner;\n"],"mappings":";;;;;;AAAA,SAASA,SAAS,EAAEC,MAAM,EAAEC,QAAQ,QAAQ,OAAO;AAInD,IAAMC,mBAAmB,GAAG,GAAG;AAS/B,OAAO,SAASC,4BAA4BA,CAAAC,IAAA,EAKK;EAAA,IAJ/CC,YAAY,GAAAD,IAAA,CAAZC,YAAY;IACZC,UAAU,GAAAF,IAAA,CAAVE,UAAU;IACVC,MAAM,GAAAH,IAAA,CAANG,MAAM;IACNC,WAAW,GAAAJ,IAAA,CAAXI,WAAW;EAEX,IAAAC,SAAA,GAAsCR,QAAQ,CAAC,KAAK,CAAC;IAAAS,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAA9CG,WAAW,GAAAF,UAAA;IAAEG,cAAc,GAAAH,UAAA;EAClC,IAAMI,iBAAiB,GAAGd,MAAM,CAAuC,IAAI,CAAC;EAC5E,IAAMe,mBAAmB,GACvBV,YAAY,KAAK,SAAS,IAAIA,YAAY,KAAK,WAAW;EAC5D,IAAMW,iBAAiB,GAAGhB,MAAM,CAACM,UAAU,CAAC;EAE5CP,SAAS,CAAC,MAAM;IACd,IAAIgB,mBAAmB,IAAI,CAACH,WAAW,EAAE;MACvC,IAAMK,aAAa,GAAGX,UAAU,KAAKU,iBAAiB,CAACE,OAAO;MAC9D,IAAIJ,iBAAiB,CAACI,OAAO,KAAK,IAAI,IAAID,aAAa,EAAE;QACvDE,YAAY,CAACL,iBAAiB,CAACI,OAAO,CAAC;QACvCJ,iBAAiB,CAACI,OAAO,GAAG,IAAI;MAClC;MACA,IAAIJ,iBAAiB,CAACI,OAAO,KAAK,IAAI,EAAE;QACtCJ,iBAAiB,CAACI,OAAO,GAAGE,UAAU,CAAC,MAAM;UAC3CP,cAAc,CAAC,IAAI,CAAC;QACtB,CAAC,EAAEX,mBAAmB,CAAC;MACzB;IACF,CAAC,MAAM,IAAI,CAACa,mBAAmB,EAAE;MAC/BF,cAAc,CAAC,KAAK,CAAC;MACrB,IAAIC,iBAAiB,CAACI,OAAO,IAAI,IAAI,EAAE;QACrCC,YAAY,CAACL,iBAAiB,CAACI,OAAO,CAAC;QACvCJ,iBAAiB,CAACI,OAAO,GAAG,IAAI;MAClC;IACF;IACAF,iBAAiB,CAACE,OAAO,GAAGZ,UAAU;EACxC,CAAC,EAAE,CAACS,mBAAmB,EAAEH,WAAW,EAAEN,UAAU,CAAC,CAAC;EAElDP,SAAS,CACP,MAAM,MAAM;IACV,IAAIe,iBAAiB,CAACI,OAAO,IAAI,IAAI,EAAE;MACrCC,YAAY,CAACL,iBAAiB,CAACI,OAAO,CAAC;MACvCJ,iBAAiB,CAACI,OAAO,GAAG,IAAI;IAClC;EACF,CAAC,EACD,EACF,CAAC;EAED,OACEN,WAAW,KACVL,MAAM,IAAIC,WAAW,KAAK,QAAQ,IAAIH,YAAY,KAAK,SAAS,CAAC;AAEtE;AAEA,eAAeF,4BAA4B","ignoreList":[]}