@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":"Menu.js","names":["React","PureComponent","ContextActionUtils","ContextMenuItem","jsx","_jsx","Menu","constructor","props","_options$initialKeybo","_defineProperty","handleKeyDown","bind","handleMenuItemClick","handleMenuItemMouseMove","handleMouseLeave","handleCloseMenu","container","createRef","oldFocus","document","activeElement","rAF","options","keyboardIndex","initialKeyboardIndex","state","menuItems","mouseIndex","componentDidMount","initMenu","window","requestAnimationFrame","_this$container$curre","current","focus","onMenuOpened","componentDidUpdate","prevProps","actions","componentWillUnmount","cancelAnimationFrame","getKeyboardIndex","separateKeyboardMouse","undefined","getMouseIndex","setKeyboardIndex","index","setState","setMouseIndex","getMenuItems","length","sortActions","concat","e","newFocus","key","shiftKey","getNextMenuItem","closeMenu","HTMLElement","preventDefault","stopPropagation","closeAll","arguments","onMenuClosed","menuItem","disabled","action","nativeEvent","focusIndex","indexOf","render","menuItemElements","dataTestId","i","group","push","menuItemElement","isKeyboardSelected","isMouseSelected","onMenuItemClick","onMenuItemMouseMove","onMenuItemContextMenu","menuStyle","className","style","_objectSpread","ref","onKeyDown","onMouseLeave","role","tabIndex","children"],"sources":["../../src/menu-actions/Menu.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport ContextActionUtils, {\n type ContextAction,\n} from '../context-actions/ContextActionUtils';\nimport ContextMenuItem from '../context-actions/ContextMenuItem';\n\nexport type MenuOptions = {\n doNotVerifyPosition?: boolean;\n separateKeyboardMouse?: boolean;\n initialKeyboardIndex?: number;\n};\n\ntype MenuProps = {\n actions: (() => ContextAction[]) | ContextAction | ContextAction[];\n closeMenu: (closeAll: boolean) => void;\n onMenuClosed: (menu: Menu) => void;\n onMenuOpened: (menu: Menu) => void;\n options: MenuOptions;\n menuStyle: React.CSSProperties;\n 'data-testid'?: string;\n};\n\ntype MenuState = {\n menuItems: ContextAction[];\n keyboardIndex: number;\n mouseIndex: number;\n};\n\n/**\n * Do not use this class directly. Use DropdownMenu instead.\n *\n * Generates list from actions for use by DropdownMenu.\n * It has beem split from the context-actions component, due to divergering requirements,\n * but still re-uses styling from context-menu. Depending on how usage evolves, may get split further.\n *\n */\n\nclass Menu extends PureComponent<MenuProps, MenuState> {\n static defaultProps = {\n closeMenu(): void {\n // no-op\n },\n onMenuOpened(): void {\n // no-op\n },\n onMenuClosed(): void {\n // no-op\n },\n options: {},\n menuStyle: {},\n 'data-testid': undefined,\n };\n\n constructor(props: MenuProps) {\n super(props);\n\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleMenuItemMouseMove = this.handleMenuItemMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleCloseMenu = this.handleCloseMenu.bind(this);\n\n this.container = React.createRef();\n this.oldFocus = document.activeElement;\n this.rAF = 0;\n\n const { options } = props;\n const keyboardIndex = options.initialKeyboardIndex ?? -1;\n this.state = {\n menuItems: [],\n keyboardIndex,\n mouseIndex: -1,\n };\n }\n\n componentDidMount(): void {\n this.initMenu();\n\n this.rAF = window.requestAnimationFrame(() => {\n // set initial focus to container so keyboard navigation works\n // components can still override focus in onMenuOpened callback\n this.container.current?.focus();\n const { onMenuOpened } = this.props;\n onMenuOpened(this);\n });\n }\n\n componentDidUpdate(prevProps: MenuProps): void {\n const { actions } = this.props;\n if (prevProps.actions !== actions) {\n this.initMenu();\n }\n }\n\n componentWillUnmount(): void {\n cancelAnimationFrame(this.rAF);\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n oldFocus: Element | null;\n\n rAF: number;\n\n getKeyboardIndex(): number | null {\n const { options } = this.props;\n if (\n options.separateKeyboardMouse !== undefined &&\n options.separateKeyboardMouse\n ) {\n const { keyboardIndex } = this.state;\n return keyboardIndex;\n }\n\n return this.getMouseIndex();\n }\n\n setKeyboardIndex(index: number): void {\n const { options } = this.props;\n if (\n options.separateKeyboardMouse !== undefined &&\n options.separateKeyboardMouse\n ) {\n this.setState({ keyboardIndex: index });\n } else {\n this.setMouseIndex(index);\n }\n }\n\n getMouseIndex(): number {\n const { mouseIndex } = this.state;\n return mouseIndex;\n }\n\n setMouseIndex(index: number): void {\n this.setState({ mouseIndex: index });\n }\n\n initMenu(): void {\n // cancel any pending close\n cancelAnimationFrame(this.rAF);\n\n this.setState({\n menuItems: [],\n });\n\n const { actions } = this.props;\n const menuItems = ContextActionUtils.getMenuItems(actions, false);\n\n if (menuItems.length > 0) {\n this.setState(state => ({\n menuItems: ContextActionUtils.sortActions(\n state.menuItems.concat(menuItems)\n ),\n }));\n }\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { menuItems } = this.state;\n const oldFocus = this.getKeyboardIndex();\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (oldFocus != null && oldFocus >= 0 && oldFocus < menuItems.length) {\n this.handleMenuItemClick(menuItems[oldFocus], e);\n }\n return;\n }\n\n if (e.key === 'Escape') {\n newFocus = null;\n } else if (\n e.key === 'ArrowUp' ||\n (e.key === 'Tab' && e.shiftKey === true)\n ) {\n newFocus = ContextActionUtils.getNextMenuItem(\n newFocus ?? 0,\n -1,\n menuItems\n );\n } else if (\n e.key === 'ArrowDown' ||\n (e.key === 'Tab' && e.shiftKey === false)\n ) {\n newFocus = ContextActionUtils.getNextMenuItem(\n newFocus ?? 0,\n 1,\n menuItems\n );\n }\n\n if (oldFocus !== newFocus) {\n if (newFocus !== null) {\n this.setKeyboardIndex(newFocus);\n } else {\n this.closeMenu();\n if (this.oldFocus instanceof HTMLElement) {\n this.oldFocus.focus();\n }\n }\n\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n closeMenu(closeAll = false): void {\n const { closeMenu, onMenuClosed } = this.props;\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n closeMenu(closeAll);\n onMenuClosed(this);\n });\n }\n\n handleCloseMenu(): void {\n this.closeMenu();\n }\n\n handleMenuItemClick(menuItem: ContextAction, e: React.SyntheticEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n if (\n menuItem != null &&\n (menuItem.disabled === undefined || !menuItem.disabled) &&\n menuItem.action != null\n ) {\n menuItem.action(e.nativeEvent);\n this.closeMenu(true);\n }\n }\n\n handleMenuItemMouseMove(menuItem: ContextAction): void {\n const { menuItems } = this.state;\n const focusIndex = menuItems.indexOf(menuItem);\n this.setMouseIndex(focusIndex);\n }\n\n handleMouseLeave(): void {\n this.setMouseIndex(-1);\n }\n\n render(): JSX.Element {\n const menuItemElements = [];\n const { 'data-testid': dataTestId } = this.props;\n const { keyboardIndex, menuItems, mouseIndex } = this.state;\n for (let i = 0; i < menuItems.length; i += 1) {\n const menuItem = menuItems[i];\n\n if (i > 0 && menuItem.group !== menuItems[i - 1].group) {\n menuItemElements.push(<hr key={`${i}.separator`} />);\n }\n\n const menuItemElement = (\n <ContextMenuItem\n key={i}\n isKeyboardSelected={keyboardIndex === i}\n isMouseSelected={mouseIndex === i}\n menuItem={menuItem}\n closeMenu={this.handleCloseMenu}\n onMenuItemClick={this.handleMenuItemClick}\n onMenuItemMouseMove={this.handleMenuItemMouseMove}\n onMenuItemContextMenu={() => false}\n />\n );\n\n menuItemElements.push(menuItemElement);\n }\n\n const { menuStyle } = this.props;\n\n return (\n <div\n className=\"context-menu-container\"\n style={{ ...menuStyle }}\n ref={this.container}\n onKeyDown={this.handleKeyDown}\n onMouseLeave={this.handleMouseLeave}\n role=\"menuitem\"\n tabIndex={0}\n data-testid={dataTestId}\n >\n {menuItemElements}\n </div>\n );\n }\n}\n\nexport default Menu;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Menu.js","names":["React","PureComponent","ContextActionUtils","ContextMenuItem","jsx","_jsx","Menu","constructor","props","_options$initialKeybo","_defineProperty","handleKeyDown","bind","handleMenuItemClick","handleMenuItemMouseMove","handleMouseLeave","handleCloseMenu","container","createRef","oldFocus","document","activeElement","rAF","options","keyboardIndex","initialKeyboardIndex","state","menuItems","mouseIndex","componentDidMount","initMenu","window","requestAnimationFrame","_this$container$curre","current","focus","onMenuOpened","componentDidUpdate","prevProps","actions","componentWillUnmount","cancelAnimationFrame","getKeyboardIndex","separateKeyboardMouse","undefined","getMouseIndex","setKeyboardIndex","index","setState","setMouseIndex","getMenuItems","length","sortActions","concat","e","newFocus","key","shiftKey","getNextMenuItem","closeMenu","HTMLElement","preventDefault","stopPropagation","closeAll","arguments","_this$props","onMenuClosed","menuItem","disabled","action","nativeEvent","focusIndex","indexOf","render","menuItemElements","dataTestId","_this$state","i","group","push","menuItemElement","isKeyboardSelected","isMouseSelected","onMenuItemClick","onMenuItemMouseMove","onMenuItemContextMenu","menuStyle","className","style","_objectSpread","ref","onKeyDown","onMouseLeave","role","tabIndex","children"],"sources":["../../src/menu-actions/Menu.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport ContextActionUtils, {\n type ContextAction,\n} from '../context-actions/ContextActionUtils';\nimport ContextMenuItem from '../context-actions/ContextMenuItem';\n\nexport type MenuOptions = {\n doNotVerifyPosition?: boolean;\n separateKeyboardMouse?: boolean;\n initialKeyboardIndex?: number;\n};\n\ntype MenuProps = {\n actions: (() => ContextAction[]) | ContextAction | ContextAction[];\n closeMenu: (closeAll: boolean) => void;\n onMenuClosed: (menu: Menu) => void;\n onMenuOpened: (menu: Menu) => void;\n options: MenuOptions;\n menuStyle: React.CSSProperties;\n 'data-testid'?: string;\n};\n\ntype MenuState = {\n menuItems: ContextAction[];\n keyboardIndex: number;\n mouseIndex: number;\n};\n\n/**\n * Do not use this class directly. Use DropdownMenu instead.\n *\n * Generates list from actions for use by DropdownMenu.\n * It has beem split from the context-actions component, due to divergering requirements,\n * but still re-uses styling from context-menu. Depending on how usage evolves, may get split further.\n *\n */\n\nclass Menu extends PureComponent<MenuProps, MenuState> {\n static defaultProps = {\n closeMenu(): void {\n // no-op\n },\n onMenuOpened(): void {\n // no-op\n },\n onMenuClosed(): void {\n // no-op\n },\n options: {},\n menuStyle: {},\n 'data-testid': undefined,\n };\n\n constructor(props: MenuProps) {\n super(props);\n\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleMenuItemMouseMove = this.handleMenuItemMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleCloseMenu = this.handleCloseMenu.bind(this);\n\n this.container = React.createRef();\n this.oldFocus = document.activeElement;\n this.rAF = 0;\n\n const { options } = props;\n const keyboardIndex = options.initialKeyboardIndex ?? -1;\n this.state = {\n menuItems: [],\n keyboardIndex,\n mouseIndex: -1,\n };\n }\n\n componentDidMount(): void {\n this.initMenu();\n\n this.rAF = window.requestAnimationFrame(() => {\n // set initial focus to container so keyboard navigation works\n // components can still override focus in onMenuOpened callback\n this.container.current?.focus();\n const { onMenuOpened } = this.props;\n onMenuOpened(this);\n });\n }\n\n componentDidUpdate(prevProps: MenuProps): void {\n const { actions } = this.props;\n if (prevProps.actions !== actions) {\n this.initMenu();\n }\n }\n\n componentWillUnmount(): void {\n cancelAnimationFrame(this.rAF);\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n oldFocus: Element | null;\n\n rAF: number;\n\n getKeyboardIndex(): number | null {\n const { options } = this.props;\n if (\n options.separateKeyboardMouse !== undefined &&\n options.separateKeyboardMouse\n ) {\n const { keyboardIndex } = this.state;\n return keyboardIndex;\n }\n\n return this.getMouseIndex();\n }\n\n setKeyboardIndex(index: number): void {\n const { options } = this.props;\n if (\n options.separateKeyboardMouse !== undefined &&\n options.separateKeyboardMouse\n ) {\n this.setState({ keyboardIndex: index });\n } else {\n this.setMouseIndex(index);\n }\n }\n\n getMouseIndex(): number {\n const { mouseIndex } = this.state;\n return mouseIndex;\n }\n\n setMouseIndex(index: number): void {\n this.setState({ mouseIndex: index });\n }\n\n initMenu(): void {\n // cancel any pending close\n cancelAnimationFrame(this.rAF);\n\n this.setState({\n menuItems: [],\n });\n\n const { actions } = this.props;\n const menuItems = ContextActionUtils.getMenuItems(actions, false);\n\n if (menuItems.length > 0) {\n this.setState(state => ({\n menuItems: ContextActionUtils.sortActions(\n state.menuItems.concat(menuItems)\n ),\n }));\n }\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { menuItems } = this.state;\n const oldFocus = this.getKeyboardIndex();\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (oldFocus != null && oldFocus >= 0 && oldFocus < menuItems.length) {\n this.handleMenuItemClick(menuItems[oldFocus], e);\n }\n return;\n }\n\n if (e.key === 'Escape') {\n newFocus = null;\n } else if (\n e.key === 'ArrowUp' ||\n (e.key === 'Tab' && e.shiftKey === true)\n ) {\n newFocus = ContextActionUtils.getNextMenuItem(\n newFocus ?? 0,\n -1,\n menuItems\n );\n } else if (\n e.key === 'ArrowDown' ||\n (e.key === 'Tab' && e.shiftKey === false)\n ) {\n newFocus = ContextActionUtils.getNextMenuItem(\n newFocus ?? 0,\n 1,\n menuItems\n );\n }\n\n if (oldFocus !== newFocus) {\n if (newFocus !== null) {\n this.setKeyboardIndex(newFocus);\n } else {\n this.closeMenu();\n if (this.oldFocus instanceof HTMLElement) {\n this.oldFocus.focus();\n }\n }\n\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n closeMenu(closeAll = false): void {\n const { closeMenu, onMenuClosed } = this.props;\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n closeMenu(closeAll);\n onMenuClosed(this);\n });\n }\n\n handleCloseMenu(): void {\n this.closeMenu();\n }\n\n handleMenuItemClick(menuItem: ContextAction, e: React.SyntheticEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n if (\n menuItem != null &&\n (menuItem.disabled === undefined || !menuItem.disabled) &&\n menuItem.action != null\n ) {\n menuItem.action(e.nativeEvent);\n this.closeMenu(true);\n }\n }\n\n handleMenuItemMouseMove(menuItem: ContextAction): void {\n const { menuItems } = this.state;\n const focusIndex = menuItems.indexOf(menuItem);\n this.setMouseIndex(focusIndex);\n }\n\n handleMouseLeave(): void {\n this.setMouseIndex(-1);\n }\n\n render(): JSX.Element {\n const menuItemElements = [];\n const { 'data-testid': dataTestId } = this.props;\n const { keyboardIndex, menuItems, mouseIndex } = this.state;\n for (let i = 0; i < menuItems.length; i += 1) {\n const menuItem = menuItems[i];\n\n if (i > 0 && menuItem.group !== menuItems[i - 1].group) {\n menuItemElements.push(<hr key={`${i}.separator`} />);\n }\n\n const menuItemElement = (\n <ContextMenuItem\n key={i}\n isKeyboardSelected={keyboardIndex === i}\n isMouseSelected={mouseIndex === i}\n menuItem={menuItem}\n closeMenu={this.handleCloseMenu}\n onMenuItemClick={this.handleMenuItemClick}\n onMenuItemMouseMove={this.handleMenuItemMouseMove}\n onMenuItemContextMenu={() => false}\n />\n );\n\n menuItemElements.push(menuItemElement);\n }\n\n const { menuStyle } = this.props;\n\n return (\n <div\n className=\"context-menu-container\"\n style={{ ...menuStyle }}\n ref={this.container}\n onKeyDown={this.handleKeyDown}\n onMouseLeave={this.handleMouseLeave}\n role=\"menuitem\"\n tabIndex={0}\n data-testid={dataTestId}\n >\n {menuItemElements}\n </div>\n );\n }\n}\n\nexport default Menu;\n"],"mappings":"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","ignoreList":[]}
@@ -6,15 +6,14 @@ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-run
6
6
  * but then waits the set debounce time before rendering the modal.
7
7
  */
8
8
  function DebouncedModal(_ref) {
9
- var {
10
- blockInteraction = true,
11
- children,
12
- debounceMs,
13
- isOpen = false
14
- } = _ref;
15
- var {
16
- value: debouncedIsOpen
17
- } = useDebouncedValue(isOpen, debounceMs);
9
+ var _ref$blockInteraction = _ref.blockInteraction,
10
+ blockInteraction = _ref$blockInteraction === void 0 ? true : _ref$blockInteraction,
11
+ children = _ref.children,
12
+ debounceMs = _ref.debounceMs,
13
+ _ref$isOpen = _ref.isOpen,
14
+ isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen;
15
+ var _useDebouncedValue = useDebouncedValue(isOpen, debounceMs),
16
+ debouncedIsOpen = _useDebouncedValue.value;
18
17
  return /*#__PURE__*/_jsxs(_Fragment, {
19
18
  children: [blockInteraction && isOpen && /*#__PURE__*/_jsx("div", {
20
19
  className: "modal-backdrop",
@@ -1 +1 @@
1
- {"version":3,"file":"DebouncedModal.js","names":["React","useDebouncedValue","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DebouncedModal","_ref","blockInteraction","children","debounceMs","isOpen","value","debouncedIsOpen","className","style","backgroundColor","cloneElement"],"sources":["../../src/modal/DebouncedModal.tsx"],"sourcesContent":["import React from 'react';\nimport { useDebouncedValue } from '@deephaven/react-hooks';\n\nexport type DebouncedModalProps = {\n /** Whether to block interaction immediately */\n blockInteraction?: boolean;\n\n /** Children to render after the alloted debounce time */\n children: React.ReactElement;\n\n /** Time to debounce */\n debounceMs: number;\n\n /**\n * Will render the `children` `debounceMs` after `isOpen` is set to `true.\n * Will stop rendering immediately after `isOpen` is set to `false`.\n */\n isOpen?: boolean;\n};\n\n/**\n * Display a modal after a debounce time. Blocks the screen from interaction immediately,\n * but then waits the set debounce time before rendering the modal.\n */\nfunction DebouncedModal({\n blockInteraction = true,\n children,\n debounceMs,\n isOpen = false,\n}: DebouncedModalProps): JSX.Element {\n const { value: debouncedIsOpen } = useDebouncedValue(isOpen, debounceMs);\n\n return (\n <>\n {blockInteraction && isOpen && (\n <div\n className=\"modal-backdrop\"\n style={{ backgroundColor: 'transparent' }}\n data-testid=\"debounced-modal-backdrop\"\n />\n )}\n {React.cloneElement(children, { isOpen: isOpen && debouncedIsOpen })}\n </>\n );\n}\n\nexport default DebouncedModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAmB3D;AACA;AACA;AACA;AACA,SAASC,cAAcA,CAAAC,IAAA,EAKc;EAAA,IALb;IACtBC,gBAAgB,GAAG,IAAI;IACvBC,QAAQ;IACRC,UAAU;IACVC,MAAM,GAAG;EACU,CAAC,GAAAJ,IAAA;EACpB,IAAM;IAAEK,KAAK,EAAEC;EAAgB,CAAC,GAAGd,iBAAiB,CAACY,MAAM,EAAED,UAAU,CAAC;EAExE,oBACEL,KAAA,CAAAF,SAAA;IAAAM,QAAA,GACGD,gBAAgB,IAAIG,MAAM,iBACzBV,IAAA;MACEa,SAAS,EAAC,gBAAgB;MAC1BC,KAAK,EAAE;QAAEC,eAAe,EAAE;MAAc,CAAE;MAC1C,eAAY;IAA0B,CACvC,CACF,eACAlB,KAAK,CAACmB,YAAY,CAACR,QAAQ,EAAE;MAAEE,MAAM,EAAEA,MAAM,IAAIE;IAAgB,CAAC,CAAC;EAAA,CACpE,CAAC;AAEP;AAEA,eAAeP,cAAc","ignoreList":[]}
1
+ {"version":3,"file":"DebouncedModal.js","names":["React","useDebouncedValue","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","DebouncedModal","_ref","_ref$blockInteraction","blockInteraction","children","debounceMs","_ref$isOpen","isOpen","_useDebouncedValue","debouncedIsOpen","value","className","style","backgroundColor","cloneElement"],"sources":["../../src/modal/DebouncedModal.tsx"],"sourcesContent":["import React from 'react';\nimport { useDebouncedValue } from '@deephaven/react-hooks';\n\nexport type DebouncedModalProps = {\n /** Whether to block interaction immediately */\n blockInteraction?: boolean;\n\n /** Children to render after the alloted debounce time */\n children: React.ReactElement;\n\n /** Time to debounce */\n debounceMs: number;\n\n /**\n * Will render the `children` `debounceMs` after `isOpen` is set to `true.\n * Will stop rendering immediately after `isOpen` is set to `false`.\n */\n isOpen?: boolean;\n};\n\n/**\n * Display a modal after a debounce time. Blocks the screen from interaction immediately,\n * but then waits the set debounce time before rendering the modal.\n */\nfunction DebouncedModal({\n blockInteraction = true,\n children,\n debounceMs,\n isOpen = false,\n}: DebouncedModalProps): JSX.Element {\n const { value: debouncedIsOpen } = useDebouncedValue(isOpen, debounceMs);\n\n return (\n <>\n {blockInteraction && isOpen && (\n <div\n className=\"modal-backdrop\"\n style={{ backgroundColor: 'transparent' }}\n data-testid=\"debounced-modal-backdrop\"\n />\n )}\n {React.cloneElement(children, { isOpen: isOpen && debouncedIsOpen })}\n </>\n );\n}\n\nexport default DebouncedModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,iBAAiB,QAAQ,wBAAwB;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAmB3D;AACA;AACA;AACA;AACA,SAASC,cAAcA,CAAAC,IAAA,EAKc;EAAA,IAAAC,qBAAA,GAAAD,IAAA,CAJnCE,gBAAgB;IAAhBA,gBAAgB,GAAAD,qBAAA,cAAG,IAAI,GAAAA,qBAAA;IACvBE,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IACRC,UAAU,GAAAJ,IAAA,CAAVI,UAAU;IAAAC,WAAA,GAAAL,IAAA,CACVM,MAAM;IAANA,MAAM,GAAAD,WAAA,cAAG,KAAK,GAAAA,WAAA;EAEd,IAAAE,kBAAA,GAAmCf,iBAAiB,CAACc,MAAM,EAAEF,UAAU,CAAC;IAAzDI,eAAe,GAAAD,kBAAA,CAAtBE,KAAK;EAEb,oBACEX,KAAA,CAAAF,SAAA;IAAAO,QAAA,GACGD,gBAAgB,IAAII,MAAM,iBACzBZ,IAAA;MACEgB,SAAS,EAAC,gBAAgB;MAC1BC,KAAK,EAAE;QAAEC,eAAe,EAAE;MAAc,CAAE;MAC1C,eAAY;IAA0B,CACvC,CACF,eACArB,KAAK,CAACsB,YAAY,CAACV,QAAQ,EAAE;MAAEG,MAAM,EAAEA,MAAM,IAAIE;IAAgB,CAAC,CAAC;EAAA,CACpE,CAAC;AAEP;AAEA,eAAeT,cAAc","ignoreList":[]}
@@ -9,13 +9,12 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
9
9
  * Does not have any buttons and cannot be dismissed.
10
10
  */
11
11
  function InfoModal(_ref) {
12
- var {
13
- className,
14
- icon,
15
- isOpen = false,
16
- subtitle,
17
- title
18
- } = _ref;
12
+ var className = _ref.className,
13
+ icon = _ref.icon,
14
+ _ref$isOpen = _ref.isOpen,
15
+ isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
16
+ subtitle = _ref.subtitle,
17
+ title = _ref.title;
19
18
  return /*#__PURE__*/_jsx(Modal, {
20
19
  isOpen: isOpen,
21
20
  className: className,
@@ -1 +1 @@
1
- {"version":3,"file":"InfoModal.js","names":["React","FontAwesomeIcon","Modal","ModalBody","jsx","_jsx","jsxs","_jsxs","InfoModal","_ref","className","icon","isOpen","subtitle","title","children"],"sources":["../../src/modal/InfoModal.tsx"],"sourcesContent":["import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconProp } from '@fortawesome/fontawesome-svg-core';\nimport Modal from './Modal';\nimport ModalBody from './ModalBody';\nimport './InfoModal.scss';\n\ntype InfoModalProps = {\n /** Class name to give the info modal */\n className?: string;\n\n /** Icon to display in the modal */\n icon?: IconProp;\n\n /** Title to display in the modal */\n title: React.ReactNode;\n\n /** Subtitle/detail to display in the modal */\n subtitle?: React.ReactNode;\n\n /** Whether the modal is open/visible or not. */\n isOpen?: boolean;\n};\n\n/**\n * A modal that displays a message with an icon. Can be used for informational messages, warnings, or errors.\n * Does not have any buttons and cannot be dismissed.\n */\nfunction InfoModal({\n className,\n icon,\n isOpen = false,\n subtitle,\n title,\n}: InfoModalProps): JSX.Element {\n return (\n <Modal isOpen={isOpen} className={className}>\n <ModalBody>\n <div className=\"info-modal\">\n {icon != null && (\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"message-header\">{title}</div>\n {subtitle != null && (\n <div className=\"message-content\">{subtitle}</div>\n )}\n </div>\n </ModalBody>\n </Modal>\n );\n}\n\nexport default InfoModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,gCAAgC;AAAC,OAE1DC,KAAK;AAAA,OACLC,SAAS;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAoBhB;AACA;AACA;AACA;AACA,SAASC,SAASA,CAAAC,IAAA,EAMc;EAAA,IANb;IACjBC,SAAS;IACTC,IAAI;IACJC,MAAM,GAAG,KAAK;IACdC,QAAQ;IACRC;EACc,CAAC,GAAAL,IAAA;EACf,oBACEJ,IAAA,CAACH,KAAK;IAACU,MAAM,EAAEA,MAAO;IAACF,SAAS,EAAEA,SAAU;IAAAK,QAAA,eAC1CV,IAAA,CAACF,SAAS;MAAAY,QAAA,eACRR,KAAA;QAAKG,SAAS,EAAC,YAAY;QAAAK,QAAA,GACxBJ,IAAI,IAAI,IAAI,iBACXN,IAAA;UAAKK,SAAS,EAAC,cAAc;UAAAK,QAAA,eAC3BV,IAAA,CAACJ,eAAe;YAACU,IAAI,EAAEA;UAAK,CAAE;QAAC,CAC5B,CACN,eACDN,IAAA;UAAKK,SAAS,EAAC,gBAAgB;UAAAK,QAAA,EAAED;QAAK,CAAM,CAAC,EAC5CD,QAAQ,IAAI,IAAI,iBACfR,IAAA;UAAKK,SAAS,EAAC,iBAAiB;UAAAK,QAAA,EAAEF;QAAQ,CAAM,CACjD;MAAA,CACE;IAAC,CACG;EAAC,CACP,CAAC;AAEZ;AAEA,eAAeL,SAAS","ignoreList":[]}
1
+ {"version":3,"file":"InfoModal.js","names":["React","FontAwesomeIcon","Modal","ModalBody","jsx","_jsx","jsxs","_jsxs","InfoModal","_ref","className","icon","_ref$isOpen","isOpen","subtitle","title","children"],"sources":["../../src/modal/InfoModal.tsx"],"sourcesContent":["import React from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconProp } from '@fortawesome/fontawesome-svg-core';\nimport Modal from './Modal';\nimport ModalBody from './ModalBody';\nimport './InfoModal.scss';\n\ntype InfoModalProps = {\n /** Class name to give the info modal */\n className?: string;\n\n /** Icon to display in the modal */\n icon?: IconProp;\n\n /** Title to display in the modal */\n title: React.ReactNode;\n\n /** Subtitle/detail to display in the modal */\n subtitle?: React.ReactNode;\n\n /** Whether the modal is open/visible or not. */\n isOpen?: boolean;\n};\n\n/**\n * A modal that displays a message with an icon. Can be used for informational messages, warnings, or errors.\n * Does not have any buttons and cannot be dismissed.\n */\nfunction InfoModal({\n className,\n icon,\n isOpen = false,\n subtitle,\n title,\n}: InfoModalProps): JSX.Element {\n return (\n <Modal isOpen={isOpen} className={className}>\n <ModalBody>\n <div className=\"info-modal\">\n {icon != null && (\n <div className=\"message-icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"message-header\">{title}</div>\n {subtitle != null && (\n <div className=\"message-content\">{subtitle}</div>\n )}\n </div>\n </ModalBody>\n </Modal>\n );\n}\n\nexport default InfoModal;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,eAAe,QAAQ,gCAAgC;AAAC,OAE1DC,KAAK;AAAA,OACLC,SAAS;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAoBhB;AACA;AACA;AACA;AACA,SAASC,SAASA,CAAAC,IAAA,EAMc;EAAA,IAL9BC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,IAAI,GAAAF,IAAA,CAAJE,IAAI;IAAAC,WAAA,GAAAH,IAAA,CACJI,MAAM;IAANA,MAAM,GAAAD,WAAA,cAAG,KAAK,GAAAA,WAAA;IACdE,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,KAAK,GAAAN,IAAA,CAALM,KAAK;EAEL,oBACEV,IAAA,CAACH,KAAK;IAACW,MAAM,EAAEA,MAAO;IAACH,SAAS,EAAEA,SAAU;IAAAM,QAAA,eAC1CX,IAAA,CAACF,SAAS;MAAAa,QAAA,eACRT,KAAA;QAAKG,SAAS,EAAC,YAAY;QAAAM,QAAA,GACxBL,IAAI,IAAI,IAAI,iBACXN,IAAA;UAAKK,SAAS,EAAC,cAAc;UAAAM,QAAA,eAC3BX,IAAA,CAACJ,eAAe;YAACU,IAAI,EAAEA;UAAK,CAAE;QAAC,CAC5B,CACN,eACDN,IAAA;UAAKK,SAAS,EAAC,gBAAgB;UAAAM,QAAA,EAAED;QAAK,CAAM,CAAC,EAC5CD,QAAQ,IAAI,IAAI,iBACfT,IAAA;UAAKK,SAAS,EAAC,iBAAiB;UAAAM,QAAA,EAAEF;QAAQ,CAAM,CACjD;MAAA,CACE;IAAC,CACG;EAAC,CACP,CAAC;AAEZ;AAEA,eAAeN,SAAS","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 classNames from 'classnames';
2
8
  import React, { useCallback, useEffect, useRef, useState } from 'react';
3
9
  import ReactDOM from 'react-dom';
@@ -6,24 +12,30 @@ import ThemeExport from "../ThemeExport.js";
6
12
  import { SpectrumThemeProvider } from "../theme/SpectrumThemeProvider.js";
7
13
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
8
14
  function Modal(_ref) {
9
- var {
10
- className,
11
- children,
12
- role = 'role',
13
- keyboard = true,
14
- clickOutside = true,
15
- isOpen = false,
16
- centered = false,
17
- size,
18
- onOpened,
19
- onClosed,
20
- toggle,
21
- 'data-testid': dataTestId
22
- } = _ref;
15
+ var className = _ref.className,
16
+ children = _ref.children,
17
+ _ref$role = _ref.role,
18
+ role = _ref$role === void 0 ? 'role' : _ref$role,
19
+ _ref$keyboard = _ref.keyboard,
20
+ keyboard = _ref$keyboard === void 0 ? true : _ref$keyboard,
21
+ _ref$clickOutside = _ref.clickOutside,
22
+ clickOutside = _ref$clickOutside === void 0 ? true : _ref$clickOutside,
23
+ _ref$isOpen = _ref.isOpen,
24
+ isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
25
+ _ref$centered = _ref.centered,
26
+ centered = _ref$centered === void 0 ? false : _ref$centered,
27
+ size = _ref.size,
28
+ onOpened = _ref.onOpened,
29
+ onClosed = _ref.onClosed,
30
+ toggle = _ref.toggle,
31
+ dataTestId = _ref['data-testid'];
23
32
  var element = useRef();
24
33
  var background = useRef(null);
25
34
  var backdropFade = useRef(null);
26
- var [backgroundClicked, setBackgroundClicked] = useState(false);
35
+ var _useState = useState(false),
36
+ _useState2 = _slicedToArray(_useState, 2),
37
+ backgroundClicked = _useState2[0],
38
+ setBackgroundClicked = _useState2[1];
27
39
  var handleKeyDown = useCallback(event => {
28
40
  switch (event.key) {
29
41
  case 'Escape':
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.js","names":["classNames","React","useCallback","useEffect","useRef","useState","ReactDOM","CSSTransition","ThemeExport","SpectrumThemeProvider","jsx","_jsx","jsxs","_jsxs","Modal","_ref","className","children","role","keyboard","clickOutside","isOpen","centered","size","onOpened","onClosed","toggle","dataTestId","element","background","backdropFade","backgroundClicked","setBackgroundClicked","handleKeyDown","event","key","addKeydownEventListener","window","addEventListener","removeEventListener","open","closed","current","document","createElement","setAttribute","body","appendChild","onExited","removeChild","undefined","createPortal","isPortal","zIndex","position","appear","mountOnEnter","unmountOnExit","in","appearActive","appearDone","timeout","transitionMs","nodeRef","ref","style","onMouseDown","e","target","onMouseUp","display"],"sources":["../../src/modal/Modal.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React, {\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport ThemeExport from '../ThemeExport';\nimport { SpectrumThemeProvider } from '../theme/SpectrumThemeProvider';\n\ninterface ModalProps {\n className?: string;\n children?: ReactNode;\n role?: string;\n keyboard?: boolean;\n clickOutside?: boolean;\n isOpen?: boolean;\n centered?: boolean;\n size?: 'sm' | 'lg' | 'xl' | undefined;\n onOpened?: () => void;\n onClosed?: () => void;\n toggle?: () => void;\n 'data-testid'?: string;\n}\n\nfunction Modal({\n className,\n children,\n role = 'role',\n keyboard = true,\n clickOutside = true,\n isOpen = false,\n centered = false,\n size,\n onOpened,\n onClosed,\n toggle,\n 'data-testid': dataTestId,\n}: ModalProps): React.ReactElement | null {\n const element = useRef<HTMLElement>();\n const background = useRef<HTMLDivElement>(null);\n const backdropFade = useRef<HTMLDivElement>(null);\n const [backgroundClicked, setBackgroundClicked] = useState(false);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'Escape':\n toggle?.();\n break;\n default:\n break;\n }\n },\n [toggle]\n );\n\n useEffect(\n function addKeydownEventListener() {\n if (isOpen && keyboard) {\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }\n },\n [handleKeyDown, isOpen, keyboard]\n );\n\n useEffect(\n function open() {\n if (isOpen && onOpened) {\n onOpened();\n }\n },\n [onOpened, isOpen]\n );\n\n useEffect(\n function closed() {\n if (!isOpen && onClosed) {\n onClosed();\n }\n },\n [onClosed, isOpen]\n );\n\n if (isOpen && !element.current) {\n element.current = document.createElement('div');\n element.current.setAttribute(\n 'style',\n 'padding-right: 15px; display: block'\n );\n element.current.setAttribute('role', 'presentation');\n document.body.appendChild(element.current);\n }\n\n const onExited = (): void => {\n if (element.current) {\n document.body.removeChild(element.current);\n element.current = undefined;\n }\n };\n\n return element.current\n ? ReactDOM.createPortal(\n // Without the zIndex and position props\n // the modal is rendered on top of nested DatePicker popovers\n <SpectrumThemeProvider isPortal zIndex={0} position=\"relative\">\n <CSSTransition\n appear\n mountOnEnter\n unmountOnExit\n in={isOpen}\n classNames={{\n appearActive: 'show',\n appearDone: 'show',\n }}\n timeout={ThemeExport.transitionMs}\n onExited={onExited}\n nodeRef={backdropFade}\n >\n <div\n ref={backdropFade}\n className={classNames('modal-backdrop fade')}\n style={{ zIndex: 1050 }}\n />\n </CSSTransition>\n <CSSTransition\n appear\n mountOnEnter\n unmountOnExit\n in={isOpen}\n classNames={{\n appearDone: 'show',\n }}\n timeout={ThemeExport.transitionMs}\n onExited={onExited}\n nodeRef={background}\n >\n <div\n ref={background}\n className=\"modal fade\"\n onMouseDown={e => {\n if (e.target === background.current) {\n setBackgroundClicked(true);\n } else {\n setBackgroundClicked(false);\n }\n }}\n onMouseUp={e => {\n if (\n backgroundClicked &&\n clickOutside &&\n e.target === background.current &&\n toggle !== undefined\n ) {\n toggle();\n }\n }}\n role=\"dialog\"\n style={{ display: 'block' }}\n >\n <div\n className={classNames('modal-dialog', className, {\n 'modal-lg': size === 'lg',\n 'modal-sm': size === 'sm',\n 'modal-xl': size === 'xl',\n 'modal-dialog-centered': centered,\n })}\n style={{ zIndex: 1040 }}\n >\n <div\n className=\"modal-content\"\n role=\"presentation\"\n data-testid={dataTestId}\n >\n {children}\n </div>\n </div>\n </div>\n </CSSTransition>\n </SpectrumThemeProvider>,\n element.current\n )\n : null;\n}\n\nexport default Modal;\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"Modal.js","names":["classNames","React","useCallback","useEffect","useRef","useState","ReactDOM","CSSTransition","ThemeExport","SpectrumThemeProvider","jsx","_jsx","jsxs","_jsxs","Modal","_ref","className","children","_ref$role","role","_ref$keyboard","keyboard","_ref$clickOutside","clickOutside","_ref$isOpen","isOpen","_ref$centered","centered","size","onOpened","onClosed","toggle","dataTestId","element","background","backdropFade","_useState","_useState2","_slicedToArray","backgroundClicked","setBackgroundClicked","handleKeyDown","event","key","addKeydownEventListener","window","addEventListener","removeEventListener","open","closed","current","document","createElement","setAttribute","body","appendChild","onExited","removeChild","undefined","createPortal","isPortal","zIndex","position","appear","mountOnEnter","unmountOnExit","in","appearActive","appearDone","timeout","transitionMs","nodeRef","ref","style","onMouseDown","e","target","onMouseUp","display"],"sources":["../../src/modal/Modal.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React, {\n type ReactNode,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport ThemeExport from '../ThemeExport';\nimport { SpectrumThemeProvider } from '../theme/SpectrumThemeProvider';\n\ninterface ModalProps {\n className?: string;\n children?: ReactNode;\n role?: string;\n keyboard?: boolean;\n clickOutside?: boolean;\n isOpen?: boolean;\n centered?: boolean;\n size?: 'sm' | 'lg' | 'xl' | undefined;\n onOpened?: () => void;\n onClosed?: () => void;\n toggle?: () => void;\n 'data-testid'?: string;\n}\n\nfunction Modal({\n className,\n children,\n role = 'role',\n keyboard = true,\n clickOutside = true,\n isOpen = false,\n centered = false,\n size,\n onOpened,\n onClosed,\n toggle,\n 'data-testid': dataTestId,\n}: ModalProps): React.ReactElement | null {\n const element = useRef<HTMLElement>();\n const background = useRef<HTMLDivElement>(null);\n const backdropFade = useRef<HTMLDivElement>(null);\n const [backgroundClicked, setBackgroundClicked] = useState(false);\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent): void => {\n switch (event.key) {\n case 'Escape':\n toggle?.();\n break;\n default:\n break;\n }\n },\n [toggle]\n );\n\n useEffect(\n function addKeydownEventListener() {\n if (isOpen && keyboard) {\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }\n },\n [handleKeyDown, isOpen, keyboard]\n );\n\n useEffect(\n function open() {\n if (isOpen && onOpened) {\n onOpened();\n }\n },\n [onOpened, isOpen]\n );\n\n useEffect(\n function closed() {\n if (!isOpen && onClosed) {\n onClosed();\n }\n },\n [onClosed, isOpen]\n );\n\n if (isOpen && !element.current) {\n element.current = document.createElement('div');\n element.current.setAttribute(\n 'style',\n 'padding-right: 15px; display: block'\n );\n element.current.setAttribute('role', 'presentation');\n document.body.appendChild(element.current);\n }\n\n const onExited = (): void => {\n if (element.current) {\n document.body.removeChild(element.current);\n element.current = undefined;\n }\n };\n\n return element.current\n ? ReactDOM.createPortal(\n // Without the zIndex and position props\n // the modal is rendered on top of nested DatePicker popovers\n <SpectrumThemeProvider isPortal zIndex={0} position=\"relative\">\n <CSSTransition\n appear\n mountOnEnter\n unmountOnExit\n in={isOpen}\n classNames={{\n appearActive: 'show',\n appearDone: 'show',\n }}\n timeout={ThemeExport.transitionMs}\n onExited={onExited}\n nodeRef={backdropFade}\n >\n <div\n ref={backdropFade}\n className={classNames('modal-backdrop fade')}\n style={{ zIndex: 1050 }}\n />\n </CSSTransition>\n <CSSTransition\n appear\n mountOnEnter\n unmountOnExit\n in={isOpen}\n classNames={{\n appearDone: 'show',\n }}\n timeout={ThemeExport.transitionMs}\n onExited={onExited}\n nodeRef={background}\n >\n <div\n ref={background}\n className=\"modal fade\"\n onMouseDown={e => {\n if (e.target === background.current) {\n setBackgroundClicked(true);\n } else {\n setBackgroundClicked(false);\n }\n }}\n onMouseUp={e => {\n if (\n backgroundClicked &&\n clickOutside &&\n e.target === background.current &&\n toggle !== undefined\n ) {\n toggle();\n }\n }}\n role=\"dialog\"\n style={{ display: 'block' }}\n >\n <div\n className={classNames('modal-dialog', className, {\n 'modal-lg': size === 'lg',\n 'modal-sm': size === 'sm',\n 'modal-xl': size === 'xl',\n 'modal-dialog-centered': centered,\n })}\n style={{ zIndex: 1040 }}\n >\n <div\n className=\"modal-content\"\n role=\"presentation\"\n data-testid={dataTestId}\n >\n {children}\n </div>\n </div>\n </div>\n </CSSTransition>\n </SpectrumThemeProvider>,\n element.current\n )\n : null;\n}\n\nexport default Modal;\n"],"mappings":"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","ignoreList":[]}
@@ -2,12 +2,10 @@ import React from 'react';
2
2
  import classNames from 'classnames';
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
4
  function ModalBody(_ref) {
5
- var {
6
- className,
7
- style,
8
- children,
9
- 'data-testid': dataTestId
10
- } = _ref;
5
+ var className = _ref.className,
6
+ style = _ref.style,
7
+ children = _ref.children,
8
+ dataTestId = _ref['data-testid'];
11
9
  return /*#__PURE__*/_jsx("div", {
12
10
  className: classNames('modal-body', className),
13
11
  "data-testid": dataTestId,
@@ -1 +1 @@
1
- {"version":3,"file":"ModalBody.js","names":["React","classNames","jsx","_jsx","ModalBody","_ref","className","style","children","dataTestId"],"sources":["../../src/modal/ModalBody.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport classNames from 'classnames';\n\ninterface ModalBodyProps {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalBody({\n className,\n style,\n children,\n 'data-testid': dataTestId,\n}: ModalBodyProps): ReactElement {\n return (\n <div\n className={classNames('modal-body', className)}\n data-testid={dataTestId}\n style={style}\n >\n {children}\n </div>\n );\n}\n\nexport default ModalBody;\n"],"mappings":"AAAA,OAAOA,KAAK,MAIL,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASpC,SAASC,SAASA,CAAAC,IAAA,EAKe;EAAA,IALd;IACjBC,SAAS;IACTC,KAAK;IACLC,QAAQ;IACR,aAAa,EAAEC;EACD,CAAC,GAAAJ,IAAA;EACf,oBACEF,IAAA;IACEG,SAAS,EAAEL,UAAU,CAAC,YAAY,EAAEK,SAAS,CAAE;IAC/C,eAAaG,UAAW;IACxBF,KAAK,EAAEA,KAAM;IAAAC,QAAA,EAEZA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeJ,SAAS","ignoreList":[]}
1
+ {"version":3,"file":"ModalBody.js","names":["React","classNames","jsx","_jsx","ModalBody","_ref","className","style","children","dataTestId"],"sources":["../../src/modal/ModalBody.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport classNames from 'classnames';\n\ninterface ModalBodyProps {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalBody({\n className,\n style,\n children,\n 'data-testid': dataTestId,\n}: ModalBodyProps): ReactElement {\n return (\n <div\n className={classNames('modal-body', className)}\n data-testid={dataTestId}\n style={style}\n >\n {children}\n </div>\n );\n}\n\nexport default ModalBody;\n"],"mappings":"AAAA,OAAOA,KAAK,MAIL,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AASpC,SAASC,SAASA,CAAAC,IAAA,EAKe;EAAA,IAJ/BC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,KAAK,GAAAF,IAAA,CAALE,KAAK;IACLC,QAAQ,GAAAH,IAAA,CAARG,QAAQ;IACOC,UAAU,GAAAJ,IAAA,CAAzB,aAAa;EAEb,oBACEF,IAAA;IACEG,SAAS,EAAEL,UAAU,CAAC,YAAY,EAAEK,SAAS,CAAE;IAC/C,eAAaG,UAAW;IACxBF,KAAK,EAAEA,KAAM;IAAAC,QAAA,EAEZA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeJ,SAAS","ignoreList":[]}
@@ -2,11 +2,9 @@ import React from 'react';
2
2
  import classNames from 'classnames';
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
4
  function ModalFooter(_ref) {
5
- var {
6
- className,
7
- children,
8
- 'data-testid': dataTestId
9
- } = _ref;
5
+ var className = _ref.className,
6
+ children = _ref.children,
7
+ dataTestId = _ref['data-testid'];
10
8
  return /*#__PURE__*/_jsx("div", {
11
9
  className: classNames('modal-footer', className),
12
10
  "data-testid": dataTestId,
@@ -1 +1 @@
1
- {"version":3,"file":"ModalFooter.js","names":["React","classNames","jsx","_jsx","ModalFooter","_ref","className","children","dataTestId"],"sources":["../../src/modal/ModalFooter.tsx"],"sourcesContent":["import React, { type ReactElement, type ReactNode } from 'react';\nimport classNames from 'classnames';\n\ninterface ModalFooterProps {\n className?: string;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalFooter({\n className,\n children,\n 'data-testid': dataTestId,\n}: ModalFooterProps): ReactElement {\n return (\n <div\n className={classNames('modal-footer', className)}\n data-testid={dataTestId}\n >\n {children}\n </div>\n );\n}\n\nexport default ModalFooter;\n"],"mappings":"AAAA,OAAOA,KAAK,MAA6C,OAAO;AAChE,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQpC,SAASC,WAAWA,CAAAC,IAAA,EAIe;EAAA,IAJd;IACnBC,SAAS;IACTC,QAAQ;IACR,aAAa,EAAEC;EACC,CAAC,GAAAH,IAAA;EACjB,oBACEF,IAAA;IACEG,SAAS,EAAEL,UAAU,CAAC,cAAc,EAAEK,SAAS,CAAE;IACjD,eAAaE,UAAW;IAAAD,QAAA,EAEvBA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeH,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"ModalFooter.js","names":["React","classNames","jsx","_jsx","ModalFooter","_ref","className","children","dataTestId"],"sources":["../../src/modal/ModalFooter.tsx"],"sourcesContent":["import React, { type ReactElement, type ReactNode } from 'react';\nimport classNames from 'classnames';\n\ninterface ModalFooterProps {\n className?: string;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nfunction ModalFooter({\n className,\n children,\n 'data-testid': dataTestId,\n}: ModalFooterProps): ReactElement {\n return (\n <div\n className={classNames('modal-footer', className)}\n data-testid={dataTestId}\n >\n {children}\n </div>\n );\n}\n\nexport default ModalFooter;\n"],"mappings":"AAAA,OAAOA,KAAK,MAA6C,OAAO;AAChE,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAQpC,SAASC,WAAWA,CAAAC,IAAA,EAIe;EAAA,IAHjCC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IACOC,UAAU,GAAAH,IAAA,CAAzB,aAAa;EAEb,oBACEF,IAAA;IACEG,SAAS,EAAEL,UAAU,CAAC,cAAc,EAAEK,SAAS,CAAE;IACjD,eAAaE,UAAW;IAAAD,QAAA,EAEvBA;EAAQ,CACN,CAAC;AAEV;AAEA,eAAeH,WAAW","ignoreList":[]}
@@ -2,14 +2,13 @@ import React from 'react';
2
2
  import classNames from 'classnames';
3
3
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
4
4
  function ModalHeader(_ref) {
5
- var {
6
- className,
7
- children,
8
- closeButton = true,
9
- style,
10
- toggle,
11
- 'data-testid': dataTestId
12
- } = _ref;
5
+ var className = _ref.className,
6
+ children = _ref.children,
7
+ _ref$closeButton = _ref.closeButton,
8
+ closeButton = _ref$closeButton === void 0 ? true : _ref$closeButton,
9
+ style = _ref.style,
10
+ toggle = _ref.toggle,
11
+ dataTestId = _ref['data-testid'];
13
12
  return /*#__PURE__*/_jsxs("div", {
14
13
  className: classNames('modal-header', className),
15
14
  style: style,
@@ -1 +1 @@
1
- {"version":3,"file":"ModalHeader.js","names":["React","classNames","jsx","_jsx","jsxs","_jsxs","ModalHeader","_ref","className","children","closeButton","style","toggle","dataTestId","type","onClick"],"sources":["../../src/modal/ModalHeader.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport classNames from 'classnames';\n\ninterface ModalHeaderProps {\n className?: string;\n children?: ReactNode;\n closeButton?: boolean;\n style?: CSSProperties;\n toggle?: () => void;\n 'data-testid'?: string;\n}\n\nfunction ModalHeader({\n className,\n children,\n closeButton = true,\n style,\n toggle,\n 'data-testid': dataTestId,\n}: ModalHeaderProps): ReactElement {\n return (\n <div className={classNames('modal-header', className)} style={style}>\n <h5 className=\"modal-title\">{children}</h5>\n {closeButton && (\n <button\n type=\"button\"\n className=\"close\"\n data-dismiss=\"modal\"\n aria-label=\"Close\"\n onClick={toggle}\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n )}\n </div>\n );\n}\n\nexport default ModalHeader;\n"],"mappings":"AAAA,OAAOA,KAAK,MAIL,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAWpC,SAASC,WAAWA,CAAAC,IAAA,EAOe;EAAA,IAPd;IACnBC,SAAS;IACTC,QAAQ;IACRC,WAAW,GAAG,IAAI;IAClBC,KAAK;IACLC,MAAM;IACN,aAAa,EAAEC;EACC,CAAC,GAAAN,IAAA;EACjB,oBACEF,KAAA;IAAKG,SAAS,EAAEP,UAAU,CAAC,cAAc,EAAEO,SAAS,CAAE;IAACG,KAAK,EAAEA,KAAM;IAAAF,QAAA,gBAClEN,IAAA;MAAIK,SAAS,EAAC,aAAa;MAAAC,QAAA,EAAEA;IAAQ,CAAK,CAAC,EAC1CC,WAAW,iBACVP,IAAA;MACEW,IAAI,EAAC,QAAQ;MACbN,SAAS,EAAC,OAAO;MACjB,gBAAa,OAAO;MACpB,cAAW,OAAO;MAClBO,OAAO,EAAEH,MAAO;MAAAH,QAAA,eAEhBN,IAAA;QAAM,eAAY,MAAM;QAAAM,QAAA,EAAC;MAAO,CAAM;IAAC,CACjC,CACT;EAAA,CACE,CAAC;AAEV;AAEA,eAAeH,WAAW","ignoreList":[]}
1
+ {"version":3,"file":"ModalHeader.js","names":["React","classNames","jsx","_jsx","jsxs","_jsxs","ModalHeader","_ref","className","children","_ref$closeButton","closeButton","style","toggle","dataTestId","type","onClick"],"sources":["../../src/modal/ModalHeader.tsx"],"sourcesContent":["import React, {\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react';\nimport classNames from 'classnames';\n\ninterface ModalHeaderProps {\n className?: string;\n children?: ReactNode;\n closeButton?: boolean;\n style?: CSSProperties;\n toggle?: () => void;\n 'data-testid'?: string;\n}\n\nfunction ModalHeader({\n className,\n children,\n closeButton = true,\n style,\n toggle,\n 'data-testid': dataTestId,\n}: ModalHeaderProps): ReactElement {\n return (\n <div className={classNames('modal-header', className)} style={style}>\n <h5 className=\"modal-title\">{children}</h5>\n {closeButton && (\n <button\n type=\"button\"\n className=\"close\"\n data-dismiss=\"modal\"\n aria-label=\"Close\"\n onClick={toggle}\n >\n <span aria-hidden=\"true\">&times;</span>\n </button>\n )}\n </div>\n );\n}\n\nexport default ModalHeader;\n"],"mappings":"AAAA,OAAOA,KAAK,MAIL,OAAO;AACd,OAAOC,UAAU,MAAM,YAAY;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAWpC,SAASC,WAAWA,CAAAC,IAAA,EAOe;EAAA,IANjCC,SAAS,GAAAD,IAAA,CAATC,SAAS;IACTC,QAAQ,GAAAF,IAAA,CAARE,QAAQ;IAAAC,gBAAA,GAAAH,IAAA,CACRI,WAAW;IAAXA,WAAW,GAAAD,gBAAA,cAAG,IAAI,GAAAA,gBAAA;IAClBE,KAAK,GAAAL,IAAA,CAALK,KAAK;IACLC,MAAM,GAAAN,IAAA,CAANM,MAAM;IACSC,UAAU,GAAAP,IAAA,CAAzB,aAAa;EAEb,oBACEF,KAAA;IAAKG,SAAS,EAAEP,UAAU,CAAC,cAAc,EAAEO,SAAS,CAAE;IAACI,KAAK,EAAEA,KAAM;IAAAH,QAAA,gBAClEN,IAAA;MAAIK,SAAS,EAAC,aAAa;MAAAC,QAAA,EAAEA;IAAQ,CAAK,CAAC,EAC1CE,WAAW,iBACVR,IAAA;MACEY,IAAI,EAAC,QAAQ;MACbP,SAAS,EAAC,OAAO;MACjB,gBAAa,OAAO;MACpB,cAAW,OAAO;MAClBQ,OAAO,EAAEH,MAAO;MAAAJ,QAAA,eAEhBN,IAAA;QAAM,eAAY,MAAM;QAAAM,QAAA,EAAC;MAAO,CAAM;IAAC,CACjC,CACT;EAAA,CACE,CAAC;AAEV;AAEA,eAAeH,WAAW","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 React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
8
  import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
3
9
  import { EMPTY_ARRAY } from '@deephaven/utils';
@@ -12,12 +18,17 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
18
  * @returns A JSX element for the list of dashboard tabs, along with search
13
19
  */
14
20
  export function DashboardList(props) {
15
- var {
16
- onSelect,
17
- tabs = EMPTY_ARRAY
18
- } = props;
19
- var [searchText, setSearchText] = useState('');
20
- var [focusedIndex, setFocusedIndex] = useState(0);
21
+ var onSelect = props.onSelect,
22
+ _props$tabs = props.tabs,
23
+ tabs = _props$tabs === void 0 ? EMPTY_ARRAY : _props$tabs;
24
+ var _useState = useState(''),
25
+ _useState2 = _slicedToArray(_useState, 2),
26
+ searchText = _useState2[0],
27
+ setSearchText = _useState2[1];
28
+ var _useState3 = useState(0),
29
+ _useState4 = _slicedToArray(_useState3, 2),
30
+ focusedIndex = _useState4[0],
31
+ setFocusedIndex = _useState4[1];
21
32
  var searchField = useRef(null);
22
33
  var listRef = useRef(null);
23
34
  var itemRefs = useRef([]);
@@ -1 +1 @@
1
- {"version":3,"file":"DashboardList.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","FontAwesomeIcon","EMPTY_ARRAY","Button","SearchInput","GLOBAL_SHORTCUTS","jsx","_jsx","jsxs","_jsxs","DashboardList","props","onSelect","tabs","searchText","setSearchText","focusedIndex","setFocusedIndex","searchField","listRef","itemRefs","_searchField$current","current","focus","_itemRefs$current$foc","scrollIntoView","behavior","block","handleSearchChange","e","target","value","handleTabSelect","tab","handleMouseDown","event","preventDefault","filteredTabs","filter","title","toLowerCase","includes","sort","a","b","_a$title$localeCompar","localeCompare","handleSearchKeyDown","key","length","prev","selectedIndex","tabElements","map","index","_tab$key","ref","el","onMouseDown","children","kind","concat","onClick","className","style","transition","icon","isValidElement","errorElement","placeholder","endPlaceholder","OPEN_DASHBOARD_LIST","getDisplayText","onChange","onKeyDown"],"sources":["../../src/navigation/DashboardList.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport { Button } from '../Button';\nimport SearchInput from '../SearchInput';\nimport type { NavTabItem } from './NavTabList';\nimport './DashboardList.scss';\nimport { GLOBAL_SHORTCUTS } from '../shortcuts';\n\nexport interface DashboardListProps {\n onSelect: (tab: NavTabItem) => void;\n tabs?: readonly NavTabItem[];\n}\n\n/**\n * Display a search field and a list of dashboard tabs\n * @param props The tabs and handlers to use for this list\n * @returns A JSX element for the list of dashboard tabs, along with search\n */\nexport function DashboardList(props: DashboardListProps): JSX.Element {\n const { onSelect, tabs = EMPTY_ARRAY } = props;\n const [searchText, setSearchText] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n const searchField = useRef<SearchInput>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const itemRefs = useRef<(HTMLLIElement | null)[]>([]);\n\n useEffect(() => {\n searchField.current?.focus();\n }, []);\n\n useEffect(() => {\n setFocusedIndex(0);\n }, [searchText]);\n\n useEffect(() => {\n if (focusedIndex >= 0 && itemRefs.current[focusedIndex]) {\n itemRefs.current[focusedIndex]?.scrollIntoView({\n behavior: 'auto',\n block: 'nearest',\n });\n }\n }, [focusedIndex]);\n\n const handleSearchChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n setSearchText(e.target.value);\n }, []);\n\n const handleTabSelect = useCallback(\n (tab: NavTabItem) => {\n onSelect(tab);\n },\n [onSelect]\n );\n\n const handleMouseDown = useCallback((event: React.MouseEvent) => {\n // Prevent mousedown from taking focus away from the search input\n event.preventDefault();\n }, []);\n\n const filteredTabs = useMemo(\n () =>\n tabs.filter(tab =>\n tab.title.toLowerCase().includes(searchText.toLowerCase())\n ),\n [searchText, tabs]\n ).sort((a, b) => a.title.localeCompare(b.title) ?? 0);\n\n const handleSearchKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowDown' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev =>\n prev === -1 ? 0 : (prev + 1) % filteredTabs.length\n );\n } else if (event.key === 'ArrowUp' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev => {\n if (prev === -1) return filteredTabs.length - 1;\n return (prev - 1 + filteredTabs.length) % filteredTabs.length;\n });\n } else if (event.key === 'Enter' && filteredTabs.length > 0) {\n event.preventDefault();\n const selectedIndex = focusedIndex >= 0 ? focusedIndex : 0;\n handleTabSelect(filteredTabs[selectedIndex]);\n } else if (event.key === 'Tab') {\n event.preventDefault();\n }\n },\n [filteredTabs, focusedIndex, handleTabSelect]\n );\n\n const tabElements = useMemo(\n () =>\n filteredTabs.map((tab, index) => (\n <li\n key={tab.key}\n ref={(el: HTMLLIElement | null) => {\n itemRefs.current[index] = el;\n }}\n onMouseDown={handleMouseDown}\n >\n <Button\n kind=\"ghost\"\n data-testid={`dashboard-list-item-${tab.key ?? ''}-button`}\n onClick={() => handleTabSelect(tab)}\n className={focusedIndex === index ? 'focused' : ''}\n style={{ transition: 'none' }}\n >\n {tab.icon ? (\n <span className=\"dashboard-list-item-icon\">\n {React.isValidElement(tab.icon) ? (\n tab.icon\n ) : (\n <FontAwesomeIcon icon={tab.icon as IconDefinition} />\n )}\n </span>\n ) : null}\n {tab.title}\n </Button>\n </li>\n )),\n [filteredTabs, handleTabSelect, focusedIndex, handleMouseDown]\n );\n\n const errorElement = useMemo(\n () =>\n tabElements.length === 0 ? <span>No open dashboard found.</span> : null,\n [tabElements]\n );\n\n return (\n <div className=\"dashboard-list-container d-flex flex-column\">\n <div className=\"dashboard-list-header\">\n <SearchInput\n value={searchText}\n placeholder=\"Find open dashboard\"\n endPlaceholder={GLOBAL_SHORTCUTS.OPEN_DASHBOARD_LIST.getDisplayText()}\n onChange={handleSearchChange}\n onKeyDown={handleSearchKeyDown}\n ref={searchField}\n />\n </div>\n <ul className=\"dashboard-list flex-grow-1\" ref={listRef}>\n {errorElement && (\n <li className=\"dashboard-list-message\">{errorElement}</li>\n )}\n {!errorElement && tabElements}\n </ul>\n </div>\n );\n}\n\nexport default DashboardList;\n"],"mappings":"AAAA,OAAOA,KAAK,IAEVC,WAAW,EACXC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SAASC,eAAe,QAAQ,gCAAgC;AAEhE,SAASC,WAAW,QAAQ,kBAAkB;AAAC,SACtCC,MAAM;AAAA,OACRC,WAAW;AAAA;AAAA,SAGTC,gBAAgB;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAOzB;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,aAAaA,CAACC,KAAyB,EAAe;EACpE,IAAM;IAAEC,QAAQ;IAAEC,IAAI,GAAGX;EAAY,CAAC,GAAGS,KAAK;EAC9C,IAAM,CAACG,UAAU,EAAEC,aAAa,CAAC,GAAGf,QAAQ,CAAC,EAAE,CAAC;EAChD,IAAM,CAACgB,YAAY,EAAEC,eAAe,CAAC,GAAGjB,QAAQ,CAAC,CAAC,CAAC;EACnD,IAAMkB,WAAW,GAAGnB,MAAM,CAAc,IAAI,CAAC;EAC7C,IAAMoB,OAAO,GAAGpB,MAAM,CAAmB,IAAI,CAAC;EAC9C,IAAMqB,QAAQ,GAAGrB,MAAM,CAA2B,EAAE,CAAC;EAErDF,SAAS,CAAC,MAAM;IAAA,IAAAwB,oBAAA;IACd,CAAAA,oBAAA,GAAAH,WAAW,CAACI,OAAO,cAAAD,oBAAA,eAAnBA,oBAAA,CAAqBE,KAAK,CAAC,CAAC;EAC9B,CAAC,EAAE,EAAE,CAAC;EAEN1B,SAAS,CAAC,MAAM;IACdoB,eAAe,CAAC,CAAC,CAAC;EACpB,CAAC,EAAE,CAACH,UAAU,CAAC,CAAC;EAEhBjB,SAAS,CAAC,MAAM;IACd,IAAImB,YAAY,IAAI,CAAC,IAAII,QAAQ,CAACE,OAAO,CAACN,YAAY,CAAC,EAAE;MAAA,IAAAQ,qBAAA;MACvD,CAAAA,qBAAA,GAAAJ,QAAQ,CAACE,OAAO,CAACN,YAAY,CAAC,cAAAQ,qBAAA,eAA9BA,qBAAA,CAAgCC,cAAc,CAAC;QAC7CC,QAAQ,EAAE,MAAM;QAChBC,KAAK,EAAE;MACT,CAAC,CAAC;IACJ;EACF,CAAC,EAAE,CAACX,YAAY,CAAC,CAAC;EAElB,IAAMY,kBAAkB,GAAGhC,WAAW,CAAEiC,CAAgC,IAAK;IAC3Ed,aAAa,CAACc,CAAC,CAACC,MAAM,CAACC,KAAK,CAAC;EAC/B,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMC,eAAe,GAAGpC,WAAW,CAChCqC,GAAe,IAAK;IACnBrB,QAAQ,CAACqB,GAAG,CAAC;EACf,CAAC,EACD,CAACrB,QAAQ,CACX,CAAC;EAED,IAAMsB,eAAe,GAAGtC,WAAW,CAAEuC,KAAuB,IAAK;IAC/D;IACAA,KAAK,CAACC,cAAc,CAAC,CAAC;EACxB,CAAC,EAAE,EAAE,CAAC;EAEN,IAAMC,YAAY,GAAGvC,OAAO,CAC1B,MACEe,IAAI,CAACyB,MAAM,CAACL,GAAG,IACbA,GAAG,CAACM,KAAK,CAACC,WAAW,CAAC,CAAC,CAACC,QAAQ,CAAC3B,UAAU,CAAC0B,WAAW,CAAC,CAAC,CAC3D,CAAC,EACH,CAAC1B,UAAU,EAAED,IAAI,CACnB,CAAC,CAAC6B,IAAI,CAAC,CAACC,CAAC,EAAEC,CAAC;IAAA,IAAAC,qBAAA;IAAA,QAAAA,qBAAA,GAAKF,CAAC,CAACJ,KAAK,CAACO,aAAa,CAACF,CAAC,CAACL,KAAK,CAAC,cAAAM,qBAAA,cAAAA,qBAAA,GAAI,CAAC;EAAA,EAAC;EAErD,IAAME,mBAAmB,GAAGnD,WAAW,CACpCuC,KAA0B,IAAK;IAC9B,IAAIA,KAAK,CAACa,GAAG,KAAK,WAAW,IAAIX,YAAY,CAACY,MAAM,GAAG,CAAC,EAAE;MACxDd,KAAK,CAACC,cAAc,CAAC,CAAC;MACtBnB,eAAe,CAACiC,IAAI,IAClBA,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,CAACA,IAAI,GAAG,CAAC,IAAIb,YAAY,CAACY,MAC9C,CAAC;IACH,CAAC,MAAM,IAAId,KAAK,CAACa,GAAG,KAAK,SAAS,IAAIX,YAAY,CAACY,MAAM,GAAG,CAAC,EAAE;MAC7Dd,KAAK,CAACC,cAAc,CAAC,CAAC;MACtBnB,eAAe,CAACiC,IAAI,IAAI;QACtB,IAAIA,IAAI,KAAK,CAAC,CAAC,EAAE,OAAOb,YAAY,CAACY,MAAM,GAAG,CAAC;QAC/C,OAAO,CAACC,IAAI,GAAG,CAAC,GAAGb,YAAY,CAACY,MAAM,IAAIZ,YAAY,CAACY,MAAM;MAC/D,CAAC,CAAC;IACJ,CAAC,MAAM,IAAId,KAAK,CAACa,GAAG,KAAK,OAAO,IAAIX,YAAY,CAACY,MAAM,GAAG,CAAC,EAAE;MAC3Dd,KAAK,CAACC,cAAc,CAAC,CAAC;MACtB,IAAMe,aAAa,GAAGnC,YAAY,IAAI,CAAC,GAAGA,YAAY,GAAG,CAAC;MAC1DgB,eAAe,CAACK,YAAY,CAACc,aAAa,CAAC,CAAC;IAC9C,CAAC,MAAM,IAAIhB,KAAK,CAACa,GAAG,KAAK,KAAK,EAAE;MAC9Bb,KAAK,CAACC,cAAc,CAAC,CAAC;IACxB;EACF,CAAC,EACD,CAACC,YAAY,EAAErB,YAAY,EAAEgB,eAAe,CAC9C,CAAC;EAED,IAAMoB,WAAW,GAAGtD,OAAO,CACzB,MACEuC,YAAY,CAACgB,GAAG,CAAC,CAACpB,GAAG,EAAEqB,KAAK;IAAA,IAAAC,QAAA;IAAA,oBAC1BhD,IAAA;MAEEiD,GAAG,EAAGC,EAAwB,IAAK;QACjCrC,QAAQ,CAACE,OAAO,CAACgC,KAAK,CAAC,GAAGG,EAAE;MAC9B,CAAE;MACFC,WAAW,EAAExB,eAAgB;MAAAyB,QAAA,eAE7BlD,KAAA,CAACN,MAAM;QACLyD,IAAI,EAAC,OAAO;QACZ,sCAAAC,MAAA,EAAAN,QAAA,GAAoCtB,GAAG,CAACe,GAAG,cAAAO,QAAA,cAAAA,QAAA,GAAI,EAAE,YAAU;QAC3DO,OAAO,EAAEA,CAAA,KAAM9B,eAAe,CAACC,GAAG,CAAE;QACpC8B,SAAS,EAAE/C,YAAY,KAAKsC,KAAK,GAAG,SAAS,GAAG,EAAG;QACnDU,KAAK,EAAE;UAAEC,UAAU,EAAE;QAAO,CAAE;QAAAN,QAAA,GAE7B1B,GAAG,CAACiC,IAAI,gBACP3D,IAAA;UAAMwD,SAAS,EAAC,0BAA0B;UAAAJ,QAAA,EACvC,aAAAhE,KAAK,CAACwE,cAAc,CAAClC,GAAG,CAACiC,IAAI,CAAC,GAC7BjC,GAAG,CAACiC,IAAI,gBAER3D,IAAA,CAACN,eAAe;YAACiE,IAAI,EAAEjC,GAAG,CAACiC;UAAuB,CAAE;QACrD,CACG,CAAC,GACL,IAAI,EACPjC,GAAG,CAACM,KAAK;MAAA,CACJ;IAAC,GAvBJN,GAAG,CAACe,GAwBP,CAAC;EAAA,CACN,CAAC,EACJ,CAACX,YAAY,EAAEL,eAAe,EAAEhB,YAAY,EAAEkB,eAAe,CAC/D,CAAC;EAED,IAAMkC,YAAY,GAAGtE,OAAO,CAC1B,MACEsD,WAAW,CAACH,MAAM,KAAK,CAAC,gBAAG1C,IAAA;IAAAoD,QAAA,EAAM;EAAwB,CAAM,CAAC,GAAG,IAAI,EACzE,CAACP,WAAW,CACd,CAAC;EAED,oBACE3C,KAAA;IAAKsD,SAAS,EAAC,6CAA6C;IAAAJ,QAAA,gBAC1DpD,IAAA;MAAKwD,SAAS,EAAC,uBAAuB;MAAAJ,QAAA,eACpCpD,IAAA,CAACH,WAAW;QACV2B,KAAK,EAAEjB,UAAW;QAClBuD,WAAW,EAAC,qBAAqB;QACjCC,cAAc,EAAEjE,gBAAgB,CAACkE,mBAAmB,CAACC,cAAc,CAAC,CAAE;QACtEC,QAAQ,EAAE7C,kBAAmB;QAC7B8C,SAAS,EAAE3B,mBAAoB;QAC/BS,GAAG,EAAEtC;MAAY,CAClB;IAAC,CACC,CAAC,eACNT,KAAA;MAAIsD,SAAS,EAAC,4BAA4B;MAACP,GAAG,EAAErC,OAAQ;MAAAwC,QAAA,GACrDS,YAAY,iBACX7D,IAAA;QAAIwD,SAAS,EAAC,wBAAwB;QAAAJ,QAAA,EAAES;MAAY,CAAK,CAC1D,EACA,CAACA,YAAY,IAAIhB,WAAW;IAAA,CAC3B,CAAC;EAAA,CACF,CAAC;AAEV;AAEA,eAAe1C,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"DashboardList.js","names":["React","useCallback","useEffect","useMemo","useRef","useState","FontAwesomeIcon","EMPTY_ARRAY","Button","SearchInput","GLOBAL_SHORTCUTS","jsx","_jsx","jsxs","_jsxs","DashboardList","props","onSelect","_props$tabs","tabs","_useState","_useState2","_slicedToArray","searchText","setSearchText","_useState3","_useState4","focusedIndex","setFocusedIndex","searchField","listRef","itemRefs","_searchField$current","current","focus","_itemRefs$current$foc","scrollIntoView","behavior","block","handleSearchChange","e","target","value","handleTabSelect","tab","handleMouseDown","event","preventDefault","filteredTabs","filter","title","toLowerCase","includes","sort","a","b","_a$title$localeCompar","localeCompare","handleSearchKeyDown","key","length","prev","selectedIndex","tabElements","map","index","_tab$key","ref","el","onMouseDown","children","kind","concat","onClick","className","style","transition","icon","isValidElement","errorElement","placeholder","endPlaceholder","OPEN_DASHBOARD_LIST","getDisplayText","onChange","onKeyDown"],"sources":["../../src/navigation/DashboardList.tsx"],"sourcesContent":["import React, {\n type ChangeEvent,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { type IconDefinition } from '@fortawesome/fontawesome-svg-core';\nimport { EMPTY_ARRAY } from '@deephaven/utils';\nimport { Button } from '../Button';\nimport SearchInput from '../SearchInput';\nimport type { NavTabItem } from './NavTabList';\nimport './DashboardList.scss';\nimport { GLOBAL_SHORTCUTS } from '../shortcuts';\n\nexport interface DashboardListProps {\n onSelect: (tab: NavTabItem) => void;\n tabs?: readonly NavTabItem[];\n}\n\n/**\n * Display a search field and a list of dashboard tabs\n * @param props The tabs and handlers to use for this list\n * @returns A JSX element for the list of dashboard tabs, along with search\n */\nexport function DashboardList(props: DashboardListProps): JSX.Element {\n const { onSelect, tabs = EMPTY_ARRAY } = props;\n const [searchText, setSearchText] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(0);\n const searchField = useRef<SearchInput>(null);\n const listRef = useRef<HTMLUListElement>(null);\n const itemRefs = useRef<(HTMLLIElement | null)[]>([]);\n\n useEffect(() => {\n searchField.current?.focus();\n }, []);\n\n useEffect(() => {\n setFocusedIndex(0);\n }, [searchText]);\n\n useEffect(() => {\n if (focusedIndex >= 0 && itemRefs.current[focusedIndex]) {\n itemRefs.current[focusedIndex]?.scrollIntoView({\n behavior: 'auto',\n block: 'nearest',\n });\n }\n }, [focusedIndex]);\n\n const handleSearchChange = useCallback((e: ChangeEvent<HTMLInputElement>) => {\n setSearchText(e.target.value);\n }, []);\n\n const handleTabSelect = useCallback(\n (tab: NavTabItem) => {\n onSelect(tab);\n },\n [onSelect]\n );\n\n const handleMouseDown = useCallback((event: React.MouseEvent) => {\n // Prevent mousedown from taking focus away from the search input\n event.preventDefault();\n }, []);\n\n const filteredTabs = useMemo(\n () =>\n tabs.filter(tab =>\n tab.title.toLowerCase().includes(searchText.toLowerCase())\n ),\n [searchText, tabs]\n ).sort((a, b) => a.title.localeCompare(b.title) ?? 0);\n\n const handleSearchKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (event.key === 'ArrowDown' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev =>\n prev === -1 ? 0 : (prev + 1) % filteredTabs.length\n );\n } else if (event.key === 'ArrowUp' && filteredTabs.length > 0) {\n event.preventDefault();\n setFocusedIndex(prev => {\n if (prev === -1) return filteredTabs.length - 1;\n return (prev - 1 + filteredTabs.length) % filteredTabs.length;\n });\n } else if (event.key === 'Enter' && filteredTabs.length > 0) {\n event.preventDefault();\n const selectedIndex = focusedIndex >= 0 ? focusedIndex : 0;\n handleTabSelect(filteredTabs[selectedIndex]);\n } else if (event.key === 'Tab') {\n event.preventDefault();\n }\n },\n [filteredTabs, focusedIndex, handleTabSelect]\n );\n\n const tabElements = useMemo(\n () =>\n filteredTabs.map((tab, index) => (\n <li\n key={tab.key}\n ref={(el: HTMLLIElement | null) => {\n itemRefs.current[index] = el;\n }}\n onMouseDown={handleMouseDown}\n >\n <Button\n kind=\"ghost\"\n data-testid={`dashboard-list-item-${tab.key ?? ''}-button`}\n onClick={() => handleTabSelect(tab)}\n className={focusedIndex === index ? 'focused' : ''}\n style={{ transition: 'none' }}\n >\n {tab.icon ? (\n <span className=\"dashboard-list-item-icon\">\n {React.isValidElement(tab.icon) ? (\n tab.icon\n ) : (\n <FontAwesomeIcon icon={tab.icon as IconDefinition} />\n )}\n </span>\n ) : null}\n {tab.title}\n </Button>\n </li>\n )),\n [filteredTabs, handleTabSelect, focusedIndex, handleMouseDown]\n );\n\n const errorElement = useMemo(\n () =>\n tabElements.length === 0 ? <span>No open dashboard found.</span> : null,\n [tabElements]\n );\n\n return (\n <div className=\"dashboard-list-container d-flex flex-column\">\n <div className=\"dashboard-list-header\">\n <SearchInput\n value={searchText}\n placeholder=\"Find open dashboard\"\n endPlaceholder={GLOBAL_SHORTCUTS.OPEN_DASHBOARD_LIST.getDisplayText()}\n onChange={handleSearchChange}\n onKeyDown={handleSearchKeyDown}\n ref={searchField}\n />\n </div>\n <ul className=\"dashboard-list flex-grow-1\" ref={listRef}>\n {errorElement && (\n <li className=\"dashboard-list-message\">{errorElement}</li>\n )}\n {!errorElement && tabElements}\n </ul>\n </div>\n );\n}\n\nexport default DashboardList;\n"],"mappings":"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","ignoreList":[]}
@@ -3,11 +3,10 @@ import MenuItem from "./MenuItem.js";
3
3
  import "./Menu.css";
4
4
  import { jsx as _jsx } from "react/jsx-runtime";
5
5
  export function Menu(_ref) {
6
- var {
7
- items,
8
- onSelect: _onSelect = () => undefined,
9
- 'data-testid': dataTestId
10
- } = _ref;
6
+ var items = _ref.items,
7
+ _ref$onSelect = _ref.onSelect,
8
+ _onSelect = _ref$onSelect === void 0 ? () => undefined : _ref$onSelect,
9
+ dataTestId = _ref['data-testid'];
11
10
  return /*#__PURE__*/_jsx("div", {
12
11
  className: "navigation-menu-view",
13
12
  "data-testid": dataTestId,
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.js","names":["React","MenuItem","jsx","_jsx","Menu","_ref","items","onSelect","undefined","dataTestId","className","children","map","item","itemIndex","title"],"sources":["../../src/navigation/Menu.tsx"],"sourcesContent":["import React from 'react';\nimport MenuItem, { type MenuItemDef } from './MenuItem';\nimport './Menu.scss';\n\nexport type MenuSelectCallback = (itemIndex: number) => void;\n\nexport type MenuProps = {\n items: readonly MenuItemDef[];\n onSelect?: MenuSelectCallback;\n 'data-testid'?: string;\n};\n\nexport function Menu({\n items,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuProps): JSX.Element {\n return (\n <div className=\"navigation-menu-view\" data-testid={dataTestId}>\n <ul className=\"navigation-menu-list\">\n {items.map((item, itemIndex) => (\n <li key={item.title}>\n <MenuItem\n item={item}\n onSelect={() => {\n onSelect(itemIndex);\n }}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nexport default Menu;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,OACnBC,QAAQ;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAWf,OAAO,SAASC,IAAIA,CAAAC,IAAA,EAIO;EAAA,IAJN;IACnBC,KAAK;IACLC,QAAQ,EAARA,SAAQ,GAAGA,CAAA,KAAMC,SAAS;IAC1B,aAAa,EAAEC;EACN,CAAC,GAAAJ,IAAA;EACV,oBACEF,IAAA;IAAKO,SAAS,EAAC,sBAAsB;IAAC,eAAaD,UAAW;IAAAE,QAAA,eAC5DR,IAAA;MAAIO,SAAS,EAAC,sBAAsB;MAAAC,QAAA,EACjCL,KAAK,CAACM,GAAG,CAAC,CAACC,IAAI,EAAEC,SAAS,kBACzBX,IAAA;QAAAQ,QAAA,eACER,IAAA,CAACF,QAAQ;UACPY,IAAI,EAAEA,IAAK;UACXN,QAAQ,EAAEA,CAAA,KAAM;YACdA,SAAQ,CAACO,SAAS,CAAC;UACrB;QAAE,CACH;MAAC,GANKD,IAAI,CAACE,KAOV,CACL;IAAC,CACA;EAAC,CACF,CAAC;AAEV;AAEA,eAAeX,IAAI","ignoreList":[]}
1
+ {"version":3,"file":"Menu.js","names":["React","MenuItem","jsx","_jsx","Menu","_ref","items","_ref$onSelect","onSelect","undefined","dataTestId","className","children","map","item","itemIndex","title"],"sources":["../../src/navigation/Menu.tsx"],"sourcesContent":["import React from 'react';\nimport MenuItem, { type MenuItemDef } from './MenuItem';\nimport './Menu.scss';\n\nexport type MenuSelectCallback = (itemIndex: number) => void;\n\nexport type MenuProps = {\n items: readonly MenuItemDef[];\n onSelect?: MenuSelectCallback;\n 'data-testid'?: string;\n};\n\nexport function Menu({\n items,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuProps): JSX.Element {\n return (\n <div className=\"navigation-menu-view\" data-testid={dataTestId}>\n <ul className=\"navigation-menu-list\">\n {items.map((item, itemIndex) => (\n <li key={item.title}>\n <MenuItem\n item={item}\n onSelect={() => {\n onSelect(itemIndex);\n }}\n />\n </li>\n ))}\n </ul>\n </div>\n );\n}\n\nexport default Menu;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,OACnBC,QAAQ;AAAA;AAAA,SAAAC,GAAA,IAAAC,IAAA;AAWf,OAAO,SAASC,IAAIA,CAAAC,IAAA,EAIO;EAAA,IAHzBC,KAAK,GAAAD,IAAA,CAALC,KAAK;IAAAC,aAAA,GAAAF,IAAA,CACLG,QAAQ;IAARA,SAAQ,GAAAD,aAAA,cAAG,MAAME,SAAS,GAAAF,aAAA;IACXG,UAAU,GAAAL,IAAA,CAAzB,aAAa;EAEb,oBACEF,IAAA;IAAKQ,SAAS,EAAC,sBAAsB;IAAC,eAAaD,UAAW;IAAAE,QAAA,eAC5DT,IAAA;MAAIQ,SAAS,EAAC,sBAAsB;MAAAC,QAAA,EACjCN,KAAK,CAACO,GAAG,CAAC,CAACC,IAAI,EAAEC,SAAS,kBACzBZ,IAAA;QAAAS,QAAA,eACET,IAAA,CAACF,QAAQ;UACPa,IAAI,EAAEA,IAAK;UACXN,QAAQ,EAAEA,CAAA,KAAM;YACdA,SAAQ,CAACO,SAAS,CAAC;UACrB;QAAE,CACH;MAAC,GANKD,IAAI,CAACE,KAOV,CACL;IAAC,CACA;EAAC,CACF,CAAC;AAEV;AAEA,eAAeZ,IAAI","ignoreList":[]}
@@ -12,16 +12,13 @@ function isSwitchMenuItemType(item) {
12
12
  * @param props.onSelect Called when the menu item is selected
13
13
  */
14
14
  export function MenuItem(_ref) {
15
- var {
16
- item,
17
- onSelect = () => undefined,
18
- 'data-testid': dataTestId
19
- } = _ref;
20
- var {
21
- icon,
22
- subtitle,
23
- title
24
- } = item;
15
+ var item = _ref.item,
16
+ _ref$onSelect = _ref.onSelect,
17
+ onSelect = _ref$onSelect === void 0 ? () => undefined : _ref$onSelect,
18
+ dataTestId = _ref['data-testid'];
19
+ var icon = item.icon,
20
+ subtitle = item.subtitle,
21
+ title = item.title;
25
22
  var handleSelect = useMemo(() => {
26
23
  if (isSwitchMenuItemType(item)) {
27
24
  return () => {
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.js","names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","jsx","_jsx","jsxs","_jsxs","isSwitchMenuItemType","item","isOn","undefined","MenuItem","_ref","onSelect","dataTestId","icon","subtitle","title","handleSelect","onChange","className","concat","onClick","onKeyDown","event","key","tabIndex","role","children","on","stopPropagation"],"sources":["../../src/navigation/MenuItem.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { type IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport './MenuItem.scss';\n\nimport UISwitch from '../UISwitch';\n\nexport type MenuItemDef = {\n title: string;\n subtitle?: string;\n icon?: IconProp;\n};\n\nexport type SwitchMenuItemDef = MenuItemDef & {\n isOn: boolean;\n onChange: (isOn: boolean) => void;\n};\n\nfunction isSwitchMenuItemType(item: MenuItemDef): item is SwitchMenuItemDef {\n return (item as SwitchMenuItemDef).isOn !== undefined;\n}\n\nexport type MenuItemProps = {\n item: MenuItemDef;\n onSelect?: () => void;\n 'data-testid'?: string;\n};\n\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport function MenuItem({\n item,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuItemProps): JSX.Element {\n const { icon, subtitle, title } = item;\n const handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return (\n <div\n className=\"btn btn-navigation-menu-item\"\n data-testid={`menu-item-${title}`}\n onClick={handleSelect}\n onKeyDown={event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n }}\n tabIndex={0}\n role=\"menuitem\"\n >\n {icon !== undefined && (\n <div className=\"icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"title\">{title}</div>\n {subtitle !== undefined && <div className=\"shortcut\">{subtitle}</div>}\n <div className=\"accessory\" data-testid={dataTestId}>\n {isSwitchMenuItemType(item) ? (\n <UISwitch\n on={item.isOn}\n onClick={event => {\n event.stopPropagation();\n handleSelect();\n }}\n />\n ) : (\n <FontAwesomeIcon icon={vsChevronRight} />\n )}\n </div>\n </div>\n );\n}\n\nexport default MenuItem;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,cAAc,QAAQ,kBAAkB;AAAC;AAAA,OAG3CC,QAAQ;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAaf,SAASC,oBAAoBA,CAACC,IAAiB,EAA6B;EAC1E,OAAQA,IAAI,CAAuBC,IAAI,KAAKC,SAAS;AACvD;AAQA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CAAAC,IAAA,EAIO;EAAA,IAJN;IACvBJ,IAAI;IACJK,QAAQ,GAAGA,CAAA,KAAMH,SAAS;IAC1B,aAAa,EAAEI;EACF,CAAC,GAAAF,IAAA;EACd,IAAM;IAAEG,IAAI;IAAEC,QAAQ;IAAEC;EAAM,CAAC,GAAGT,IAAI;EACtC,IAAMU,YAAY,GAAGnB,OAAO,CAAC,MAAM;IACjC,IAAIQ,oBAAoB,CAACC,IAAI,CAAC,EAAE;MAC9B,OAAO,MAAM;QACXA,IAAI,CAACW,QAAQ,CAAC,CAACX,IAAI,CAACC,IAAI,CAAC;MAC3B,CAAC;IACH;IACA,OAAOI,QAAQ;EACjB,CAAC,EAAE,CAACL,IAAI,EAAEK,QAAQ,CAAC,CAAC;EACpB,oBACEP,KAAA;IACEc,SAAS,EAAC,8BAA8B;IACxC,4BAAAC,MAAA,CAA0BJ,KAAK,CAAG;IAClCK,OAAO,EAAEJ,YAAa;IACtBK,SAAS,EAAEC,KAAK,IAAI;MAClB,IAAIA,KAAK,CAACC,GAAG,KAAK,OAAO,IAAID,KAAK,CAACC,GAAG,KAAK,GAAG,EAAE;QAC9CP,YAAY,CAAC,CAAC;MAChB;IACF,CAAE;IACFQ,QAAQ,EAAE,CAAE;IACZC,IAAI,EAAC,UAAU;IAAAC,QAAA,GAEdb,IAAI,KAAKL,SAAS,iBACjBN,IAAA;MAAKgB,SAAS,EAAC,MAAM;MAAAQ,QAAA,eACnBxB,IAAA,CAACJ,eAAe;QAACe,IAAI,EAAEA;MAAK,CAAE;IAAC,CAC5B,CACN,eACDX,IAAA;MAAKgB,SAAS,EAAC,OAAO;MAAAQ,QAAA,EAAEX;IAAK,CAAM,CAAC,EACnCD,QAAQ,KAAKN,SAAS,iBAAIN,IAAA;MAAKgB,SAAS,EAAC,UAAU;MAAAQ,QAAA,EAAEZ;IAAQ,CAAM,CAAC,eACrEZ,IAAA;MAAKgB,SAAS,EAAC,WAAW;MAAC,eAAaN,UAAW;MAAAc,QAAA,EAChDrB,oBAAoB,CAACC,IAAI,CAAC,gBACzBJ,IAAA,CAACF,QAAQ;QACP2B,EAAE,EAAErB,IAAI,CAACC,IAAK;QACda,OAAO,EAAEE,KAAK,IAAI;UAChBA,KAAK,CAACM,eAAe,CAAC,CAAC;UACvBZ,YAAY,CAAC,CAAC;QAChB;MAAE,CACH,CAAC,gBAEFd,IAAA,CAACJ,eAAe;QAACe,IAAI,EAAEd;MAAe,CAAE;IACzC,CACE,CAAC;EAAA,CACH,CAAC;AAEV;AAEA,eAAeU,QAAQ","ignoreList":[]}
1
+ {"version":3,"file":"MenuItem.js","names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","jsx","_jsx","jsxs","_jsxs","isSwitchMenuItemType","item","isOn","undefined","MenuItem","_ref","_ref$onSelect","onSelect","dataTestId","icon","subtitle","title","handleSelect","onChange","className","concat","onClick","onKeyDown","event","key","tabIndex","role","children","on","stopPropagation"],"sources":["../../src/navigation/MenuItem.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { type IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport './MenuItem.scss';\n\nimport UISwitch from '../UISwitch';\n\nexport type MenuItemDef = {\n title: string;\n subtitle?: string;\n icon?: IconProp;\n};\n\nexport type SwitchMenuItemDef = MenuItemDef & {\n isOn: boolean;\n onChange: (isOn: boolean) => void;\n};\n\nfunction isSwitchMenuItemType(item: MenuItemDef): item is SwitchMenuItemDef {\n return (item as SwitchMenuItemDef).isOn !== undefined;\n}\n\nexport type MenuItemProps = {\n item: MenuItemDef;\n onSelect?: () => void;\n 'data-testid'?: string;\n};\n\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport function MenuItem({\n item,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuItemProps): JSX.Element {\n const { icon, subtitle, title } = item;\n const handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return (\n <div\n className=\"btn btn-navigation-menu-item\"\n data-testid={`menu-item-${title}`}\n onClick={handleSelect}\n onKeyDown={event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n }}\n tabIndex={0}\n role=\"menuitem\"\n >\n {icon !== undefined && (\n <div className=\"icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"title\">{title}</div>\n {subtitle !== undefined && <div className=\"shortcut\">{subtitle}</div>}\n <div className=\"accessory\" data-testid={dataTestId}>\n {isSwitchMenuItemType(item) ? (\n <UISwitch\n on={item.isOn}\n onClick={event => {\n event.stopPropagation();\n handleSelect();\n }}\n />\n ) : (\n <FontAwesomeIcon icon={vsChevronRight} />\n )}\n </div>\n </div>\n );\n}\n\nexport default MenuItem;\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,eAAe,QAAQ,gCAAgC;AAChE,SAASC,cAAc,QAAQ,kBAAkB;AAAC;AAAA,OAG3CC,QAAQ;AAAA,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAaf,SAASC,oBAAoBA,CAACC,IAAiB,EAA6B;EAC1E,OAAQA,IAAI,CAAuBC,IAAI,KAAKC,SAAS;AACvD;AAQA;AACA;AACA;AACA;AACA,OAAO,SAASC,QAAQA,CAAAC,IAAA,EAIO;EAAA,IAH7BJ,IAAI,GAAAI,IAAA,CAAJJ,IAAI;IAAAK,aAAA,GAAAD,IAAA,CACJE,QAAQ;IAARA,QAAQ,GAAAD,aAAA,cAAG,MAAMH,SAAS,GAAAG,aAAA;IACXE,UAAU,GAAAH,IAAA,CAAzB,aAAa;EAEb,IAAQI,IAAI,GAAsBR,IAAI,CAA9BQ,IAAI;IAAEC,QAAQ,GAAYT,IAAI,CAAxBS,QAAQ;IAAEC,KAAK,GAAKV,IAAI,CAAdU,KAAK;EAC7B,IAAMC,YAAY,GAAGpB,OAAO,CAAC,MAAM;IACjC,IAAIQ,oBAAoB,CAACC,IAAI,CAAC,EAAE;MAC9B,OAAO,MAAM;QACXA,IAAI,CAACY,QAAQ,CAAC,CAACZ,IAAI,CAACC,IAAI,CAAC;MAC3B,CAAC;IACH;IACA,OAAOK,QAAQ;EACjB,CAAC,EAAE,CAACN,IAAI,EAAEM,QAAQ,CAAC,CAAC;EACpB,oBACER,KAAA;IACEe,SAAS,EAAC,8BAA8B;IACxC,4BAAAC,MAAA,CAA0BJ,KAAK,CAAG;IAClCK,OAAO,EAAEJ,YAAa;IACtBK,SAAS,EAAEC,KAAK,IAAI;MAClB,IAAIA,KAAK,CAACC,GAAG,KAAK,OAAO,IAAID,KAAK,CAACC,GAAG,KAAK,GAAG,EAAE;QAC9CP,YAAY,CAAC,CAAC;MAChB;IACF,CAAE;IACFQ,QAAQ,EAAE,CAAE;IACZC,IAAI,EAAC,UAAU;IAAAC,QAAA,GAEdb,IAAI,KAAKN,SAAS,iBACjBN,IAAA;MAAKiB,SAAS,EAAC,MAAM;MAAAQ,QAAA,eACnBzB,IAAA,CAACJ,eAAe;QAACgB,IAAI,EAAEA;MAAK,CAAE;IAAC,CAC5B,CACN,eACDZ,IAAA;MAAKiB,SAAS,EAAC,OAAO;MAAAQ,QAAA,EAAEX;IAAK,CAAM,CAAC,EACnCD,QAAQ,KAAKP,SAAS,iBAAIN,IAAA;MAAKiB,SAAS,EAAC,UAAU;MAAAQ,QAAA,EAAEZ;IAAQ,CAAM,CAAC,eACrEb,IAAA;MAAKiB,SAAS,EAAC,WAAW;MAAC,eAAaN,UAAW;MAAAc,QAAA,EAChDtB,oBAAoB,CAACC,IAAI,CAAC,gBACzBJ,IAAA,CAACF,QAAQ;QACP4B,EAAE,EAAEtB,IAAI,CAACC,IAAK;QACdc,OAAO,EAAEE,KAAK,IAAI;UAChBA,KAAK,CAACM,eAAe,CAAC,CAAC;UACvBZ,YAAY,CAAC,CAAC;QAChB;MAAE,CACH,CAAC,gBAEFf,IAAA,CAACJ,eAAe;QAACgB,IAAI,EAAEf;MAAe,CAAE;IACzC,CACE,CAAC;EAAA,CACH,CAAC;AAEV;AAEA,eAAeU,QAAQ","ignoreList":[]}
@@ -13,23 +13,20 @@ import ContextActions from "../context-actions/ContextActions.js";
13
13
  import { Tooltip } from "../popper/index.js";
14
14
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
15
15
  var NavTab = /*#__PURE__*/memo(_ref => {
16
- var {
17
- tab,
18
- onClose,
19
- onSelect,
20
- isActive,
21
- activeRef,
22
- index,
23
- isDraggable,
24
- contextActions,
25
- renderAfterTabContent
26
- } = _ref;
27
- var {
28
- key,
29
- isClosable = onClose != null,
30
- title,
31
- icon
32
- } = tab;
16
+ var tab = _ref.tab,
17
+ onClose = _ref.onClose,
18
+ onSelect = _ref.onSelect,
19
+ isActive = _ref.isActive,
20
+ activeRef = _ref.activeRef,
21
+ index = _ref.index,
22
+ isDraggable = _ref.isDraggable,
23
+ contextActions = _ref.contextActions,
24
+ renderAfterTabContent = _ref.renderAfterTabContent;
25
+ var key = tab.key,
26
+ _tab$isClosable = tab.isClosable,
27
+ isClosable = _tab$isClosable === void 0 ? onClose != null : _tab$isClosable,
28
+ title = tab.title,
29
+ icon = tab.icon;
33
30
  var iconElem;
34
31
  if (icon != null) {
35
32
  iconElem = /*#__PURE__*/React.isValidElement(icon) ? icon : /*#__PURE__*/_jsx(FontAwesomeIcon, {