@deephaven/components 0.16.1-beta.0 → 0.16.1-vite.20

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 (73) hide show
  1. package/dist/AutoCompleteInput.js.map +1 -1
  2. package/dist/AutoResizeTextarea.js.map +1 -1
  3. package/dist/BasicModal.js.map +1 -1
  4. package/dist/Button.js.map +1 -1
  5. package/dist/ButtonGroup.js.map +1 -1
  6. package/dist/ButtonOld.js.map +1 -1
  7. package/dist/CardFlip.js.map +1 -1
  8. package/dist/Checkbox.js.map +1 -1
  9. package/dist/Collapse.js.map +1 -1
  10. package/dist/ComboBox.js.map +1 -1
  11. package/dist/CustomTimeSelect.js.map +1 -1
  12. package/dist/DebouncedSearchInput.js.map +1 -1
  13. package/dist/DeephavenSpinner.js.map +1 -1
  14. package/dist/DragUtils.js.map +1 -1
  15. package/dist/DraggableItemList.js +1 -1
  16. package/dist/DraggableItemList.js.map +1 -1
  17. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  18. package/dist/ItemList.js +1 -1
  19. package/dist/ItemList.js.map +1 -1
  20. package/dist/ItemListItem.js.map +1 -1
  21. package/dist/LoadingOverlay.js.map +1 -1
  22. package/dist/LoadingSpinner.js.map +1 -1
  23. package/dist/MaskedInput.js.map +1 -1
  24. package/dist/Option.js.map +1 -1
  25. package/dist/RadioGroup.js.map +1 -1
  26. package/dist/RadioItem.js.map +1 -1
  27. package/dist/SearchInput.js.map +1 -1
  28. package/dist/Select.js.map +1 -1
  29. package/dist/SelectValueList.js.map +1 -1
  30. package/dist/SocketedButton.js.map +1 -1
  31. package/dist/ThemeExport.js.map +1 -1
  32. package/dist/TimeInput.js.map +1 -1
  33. package/dist/TimeSlider.js.map +1 -1
  34. package/dist/ToastNotification.js.map +1 -1
  35. package/dist/UISwitch.js.map +1 -1
  36. package/dist/ValidateLabelInput.js.map +1 -1
  37. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  38. package/dist/context-actions/ContextActions.js.map +1 -1
  39. package/dist/context-actions/ContextMenu.js.map +1 -1
  40. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  41. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  42. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  43. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  44. package/dist/context-actions/index.js.map +1 -1
  45. package/dist/declaration.d.js.map +1 -1
  46. package/dist/index.d.ts +1 -1
  47. package/dist/index.d.ts.map +1 -1
  48. package/dist/index.js +1 -1
  49. package/dist/index.js.map +1 -1
  50. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  51. package/dist/menu-actions/Menu.js.map +1 -1
  52. package/dist/menu-actions/index.js.map +1 -1
  53. package/dist/modal/Modal.js.map +1 -1
  54. package/dist/modal/ModalBody.js.map +1 -1
  55. package/dist/modal/ModalFooter.js.map +1 -1
  56. package/dist/modal/ModalHeader.js.map +1 -1
  57. package/dist/modal/index.js.map +1 -1
  58. package/dist/navigation/Menu.js.map +1 -1
  59. package/dist/navigation/MenuItem.js.map +1 -1
  60. package/dist/navigation/Page.js.map +1 -1
  61. package/dist/navigation/Stack.js.map +1 -1
  62. package/dist/navigation/index.js.map +1 -1
  63. package/dist/popper/Popper.js.map +1 -1
  64. package/dist/popper/Tooltip.js.map +1 -1
  65. package/dist/popper/index.js.map +1 -1
  66. package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
  67. package/dist/shortcuts/Shortcut.js.map +1 -1
  68. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  69. package/dist/shortcuts/index.js.map +1 -1
  70. package/package.json +9 -9
  71. package/scss/BaseStyleSheet.scss +847 -0
  72. package/dist/BaseStyleSheet.css +0 -11560
  73. package/dist/BaseStyleSheet.css.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context-actions/ContextMenu.tsx"],"names":["React","PureComponent","classNames","Log","PromiseUtils","ContextActionUtils","ContextMenuItem","LoadingSpinner","log","module","ContextMenu","handleContextMenu","e","metaKey","stopPropagation","preventDefault","constructor","props","handleBlur","bind","handleCloseSubMenu","handleKeyDown","handleMenuItemClick","handleMenuItemContextMenu","handleMenuItemMouseMove","handleMouseLeave","handleWindowResize","container","createRef","oldFocus","document","activeElement","activeSubMenuRef","subMenuTimer","rAF","initialPosition","top","left","state","menuItems","pendingItems","activeSubMenu","hasOverflow","subMenuTop","subMenuLeft","subMenuParentWidth","subMenuParentHeight","keyboardIndex","mouseIndex","componentDidMount","initMenu","verifyPosition","window","addEventListener","requestAnimationFrame","current","focus","onMenuOpened","componentDidUpdate","prevProps","prevState","actions","setActiveSubMenuPosition","contains","componentWillUnmount","cancelPromises","removeEventListener","cancelAnimationFrame","getKeyboardIndex","options","separateKeyboardMouse","getMouseIndex","setKeyboardIndex","index","setState","setMouseIndex","initialKeyboardIndex","undefined","getMenuItems","nonPromiseItems","i","length","menuItem","Promise","initMenuPromise","push","sortActions","promise","cancellablePromise","makeCancelable","concat","then","resolvedMenuItems","indexOf","slice","splice","error","isCanceled","map","item","cancel","parentRect","getBoundingClientRect","right","height","width","updatePosition","oldTop","oldLeft","doNotVerifyPosition","scrollHeight","innerHeight","innerWidth","closeMenu","warn","relatedTarget","element","isContextMenuChild","hasAttribute","parentElement","isEscapeKey","key","newFocus","openSubMenu","shiftKey","getNextMenuItem","HTMLElement","newSubMenu","closeAll","onMenuClosed","closeSubMenu","closeAllMenus","disabled","action","focusIndex","render","menuItemElements","group","menuItemElement","pendingElement","menuStyle","dataTestId","showSubmenu","verifiedTop","verifiedLeft"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { PromiseUtils, CancelablePromise } from '@deephaven/utils';\nimport ContextActionUtils, {\n ContextAction,\n ResolvableContextAction,\n} from './ContextActionUtils';\nimport ContextMenuItem from './ContextMenuItem';\nimport LoadingSpinner from '../LoadingSpinner';\n\nconst log = Log.module('ContextMenu');\n\ninterface ContextMenuProps {\n top: number;\n left: number;\n updatePosition(top: number, left: number): void;\n // only submenus will have these, defaults to 0 otherwise\n // represents the width height of the parent menu item\n subMenuParentWidth: number;\n subMenuParentHeight: number;\n actions: ResolvableContextAction[];\n closeMenu(closeAll: boolean): void;\n onMenuClosed(menu: ContextMenu): void;\n onMenuOpened(menu: ContextMenu): void;\n options: {\n doNotVerifyPosition?: boolean;\n separateKeyboardMouse?: boolean;\n initialKeyboardIndex?: number;\n };\n menuStyle: React.CSSProperties;\n 'data-testid'?: string;\n}\n\ninterface ContextMenuState {\n menuItems: ContextAction[];\n pendingItems: CancelablePromise<ContextAction[]>[];\n activeSubMenu: number | null;\n hasOverflow: boolean;\n subMenuTop: number | null;\n subMenuLeft: number | null;\n subMenuParentWidth: number;\n subMenuParentHeight: number;\n keyboardIndex: number;\n mouseIndex: number;\n}\n\n/** Do not use this class directly. Use ContextMenuRoot and ContextActions instead. */\nclass ContextMenu extends PureComponent<ContextMenuProps, ContextMenuState> {\n static defaultProps = {\n subMenuParentWidth: 0,\n subMenuParentHeight: 0,\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 static handleContextMenu(e: React.MouseEvent): void {\n if (e.metaKey) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n constructor(props: ContextMenuProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseSubMenu = this.handleCloseSubMenu.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleMenuItemContextMenu = this.handleMenuItemContextMenu.bind(this);\n this.handleMenuItemMouseMove = this.handleMenuItemMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowResize = this.handleWindowResize.bind(this);\n\n this.container = React.createRef();\n this.oldFocus = document.activeElement;\n this.activeSubMenuRef = React.createRef();\n this.subMenuTimer = 0;\n this.rAF = 0;\n\n this.initialPosition = { top: props.top, left: props.left };\n\n this.state = {\n menuItems: [],\n pendingItems: [],\n activeSubMenu: null,\n hasOverflow: false,\n subMenuTop: null,\n subMenuLeft: null,\n subMenuParentWidth: 0,\n subMenuParentHeight: 0,\n keyboardIndex: -1,\n mouseIndex: -1,\n };\n }\n\n componentDidMount(): void {\n this.initMenu();\n\n this.verifyPosition();\n\n window.addEventListener('resize', this.handleWindowResize);\n\n // rAF is needed to wait for a submenus popper to be created before\n // attempting to set focus, however on a quick mount/unmount when\n // mousing past an item, the submenu could be unmounted before the\n // async rAF finishes, so it is cancelled in willUnmount()\n this.rAF = window.requestAnimationFrame(() => {\n this.container.current?.focus();\n\n const { onMenuOpened } = this.props;\n onMenuOpened(this);\n });\n }\n\n componentDidUpdate(\n prevProps: ContextMenuProps,\n prevState: ContextMenuState\n ): void {\n const { actions } = this.props;\n const { activeSubMenu } = this.state;\n\n if (activeSubMenu !== prevState.activeSubMenu) {\n if (activeSubMenu == null) {\n // close sub menu, refocus parent menu\n this.container.current?.focus();\n } else {\n // open sub menu, set its initial position\n this.setActiveSubMenuPosition();\n }\n }\n\n if (prevProps.actions !== actions) {\n this.initMenu();\n\n if (!this.container.current?.contains(document.activeElement)) {\n this.container.current?.focus();\n }\n }\n\n this.verifyPosition();\n }\n\n componentWillUnmount(): void {\n this.cancelPromises();\n window.removeEventListener('resize', this.handleWindowResize);\n cancelAnimationFrame(this.rAF);\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n oldFocus: Element | null;\n\n activeSubMenuRef: React.RefObject<HTMLDivElement>;\n\n subMenuTimer: number;\n\n rAF: number;\n\n initialPosition: { top: number; left: number };\n\n getKeyboardIndex(): number {\n const { options } = this.props;\n if (options.separateKeyboardMouse) {\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 (options.separateKeyboardMouse) {\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 and promises\n this.cancelPromises();\n cancelAnimationFrame(this.rAF);\n\n const { options } = this.props;\n let keyboardIndex = options.initialKeyboardIndex;\n if (keyboardIndex === undefined) {\n keyboardIndex = -1;\n }\n\n const { actions } = this.props;\n const menuItems = ContextActionUtils.getMenuItems(actions);\n const nonPromiseItems: ContextAction[] = [];\n for (let i = menuItems.length - 1; i >= 0; i -= 1) {\n const menuItem = menuItems[i];\n if (menuItem instanceof Promise) {\n this.initMenuPromise(menuItem as Promise<ContextAction[]>);\n } else {\n nonPromiseItems.push(menuItem as ContextAction);\n }\n }\n\n this.setState({\n mouseIndex: -1,\n keyboardIndex,\n activeSubMenu: null,\n menuItems: ContextActionUtils.sortActions(nonPromiseItems),\n });\n }\n\n initMenuPromise(promise: Promise<ContextAction[]>): void {\n // make all promises cancellable\n const cancellablePromise = PromiseUtils.makeCancelable(promise);\n\n this.setState(state => ({\n pendingItems: state.pendingItems.concat(cancellablePromise),\n }));\n\n cancellablePromise.then(\n resolvedMenuItems => {\n this.setState(state => {\n const index = state.pendingItems.indexOf(cancellablePromise);\n if (index >= 0) {\n const pendingItems = state.pendingItems.slice();\n pendingItems.splice(index, 1);\n\n return {\n menuItems: ContextActionUtils.sortActions(\n state.menuItems.concat(resolvedMenuItems)\n ),\n pendingItems,\n };\n }\n // This item is stale, don't update the menu\n return null;\n });\n },\n error => {\n if (PromiseUtils.isCanceled(error)) {\n return; // Canceled promise is ignored\n }\n\n // remove failed item from pending list\n this.setState(state => {\n const index = state.pendingItems.indexOf(cancellablePromise);\n if (index >= 0) {\n const pendingItems = state.pendingItems.slice();\n pendingItems.splice(index, 1);\n return {\n pendingItems,\n };\n }\n return null;\n });\n\n // Log the error\n log.error(error);\n }\n );\n }\n\n cancelPromises(): void {\n const { pendingItems } = this.state;\n pendingItems.map(item => item.cancel());\n }\n\n /**\n * Sets the unverfied start position of a submenu. Submenu then self-verfies\n * its own position and potentially reports back a new position.\n */\n setActiveSubMenuPosition(): void {\n if (this.activeSubMenuRef.current === null) return;\n const parentRect = this.activeSubMenuRef.current.getBoundingClientRect();\n\n // intentionally rect.right, we want the sub menu to start at the right edge of the current menu\n this.setState({\n subMenuTop: parentRect.top,\n subMenuLeft: parentRect.right,\n subMenuParentHeight: parentRect.height,\n subMenuParentWidth: parentRect.width,\n });\n }\n\n /**\n * Verifies the position of this menu in relation to the parent to make sure it's on screen.\n * Will update the top left state (updatePosition) if necessary (causing a re-render)\n * By default it tries to top-align with parent, at the right side of the parent.\n * Because we aren't a native context menu and can't escape window bounds, we also do\n * somethings to better fit on screen, such as the \"nudge\" offset position, and further\n * allow overflow scrolling for large menus in a small window.\n */\n verifyPosition(): void {\n const {\n options,\n updatePosition,\n subMenuParentWidth,\n subMenuParentHeight,\n top: oldTop,\n left: oldLeft,\n } = this.props;\n\n if (!this.container.current || options.doNotVerifyPosition) {\n return;\n }\n\n // initial position is used rather than current position,\n // as the number of menu items can change (actions can bubble)\n // and menu should always be positioned relative to spawn point\n let { top, left } = this.initialPosition;\n const {\n width,\n height,\n } = this.container.current?.getBoundingClientRect() ?? {\n width: 0,\n height: 0,\n };\n const hasOverflow =\n (this.container.current?.scrollHeight ?? 0) > window.innerHeight;\n\n if (height === 0 || width === 0) {\n // We don't have a height or width yet, don't bother doing anything\n return;\n }\n\n // does it fit below?\n if (top + height > window.innerHeight) {\n // can it be flipped to above? include offset if submenu (defaults to 0 if not submenu)\n if (top - height - subMenuParentHeight > 0) {\n // flip like a native menu would\n top -= height - subMenuParentHeight;\n } else {\n // still doesnt fit? okay, position at bottom edge\n top = window.innerHeight - height;\n }\n }\n\n if (left + width > window.innerWidth) {\n // less picky about left right positioning, just keep it going off to right\n left = left - width - subMenuParentWidth;\n }\n\n if (oldLeft !== left || oldTop !== top) {\n // parent owns positioning as single source of truth, ask to update props\n this.setState({ hasOverflow });\n updatePosition(top, left);\n }\n }\n\n // since window resize doesn't trigger blur, listen and close the menu\n handleWindowResize(): void {\n if (!this.container.current) {\n return;\n }\n this.closeMenu(true);\n }\n\n handleBlur(e: React.FocusEvent<HTMLDivElement>): void {\n if (!this.container.current) {\n log.warn('Container is null!');\n return;\n }\n\n if (!this.container.current.contains(e.relatedTarget as Node)) {\n let element: HTMLElement | null = e.relatedTarget as HTMLElement;\n let isContextMenuChild = false;\n while (element && !isContextMenuChild) {\n isContextMenuChild = element.hasAttribute('data-dh-context-menu');\n element = element.parentElement;\n }\n\n if (!isContextMenuChild) {\n // close all submenus on blur\n this.closeMenu(true);\n }\n }\n }\n\n /** Returns whether the specified key should remove the menu. Depends on the side the parent is on. */\n isEscapeKey(key: string): boolean {\n const { left } = this.props;\n return (\n key === 'Escape' ||\n (left < 0 && key === 'ArrowRight') ||\n key === 'ArrowLeft'\n );\n }\n\n handleKeyDown(e: React.KeyboardEvent<HTMLDivElement>): void {\n const { menuItems } = this.state;\n const oldFocus = this.getKeyboardIndex();\n let newFocus: number | null = oldFocus;\n let openSubMenu = false;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (oldFocus >= 0 && oldFocus < menuItems.length) {\n this.handleMenuItemClick(\n menuItems[oldFocus],\n (e as React.SyntheticEvent) as React.MouseEvent\n );\n }\n return;\n }\n\n if (e.key === 'ArrowRight') {\n if (oldFocus >= 0 && oldFocus <= menuItems.length) {\n openSubMenu = true;\n } else {\n newFocus = 0;\n }\n } else if (this.isEscapeKey(e.key)) {\n newFocus = null;\n } else if (e.key === 'ArrowUp' || (e.shiftKey && e.key === 'Tab')) {\n newFocus = ContextActionUtils.getNextMenuItem(newFocus, -1, menuItems);\n } else if (e.key === 'ArrowDown' || e.key === 'Tab') {\n newFocus = ContextActionUtils.getNextMenuItem(newFocus, 1, menuItems);\n }\n\n if (openSubMenu) {\n this.openSubMenu(oldFocus);\n e.preventDefault();\n e.stopPropagation();\n return;\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 openSubMenu(index: number): void {\n const { menuItems, activeSubMenu } = this.state;\n const newSubMenu = menuItems[index].actions ? index : null;\n if (activeSubMenu === newSubMenu) return;\n this.setState({\n activeSubMenu: newSubMenu,\n subMenuTop: null,\n subMenuLeft: null,\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 closeSubMenu(): void {\n this.setState({\n activeSubMenu: null,\n });\n }\n\n handleCloseSubMenu(closeAllMenus: boolean): void {\n if (closeAllMenus) {\n this.closeMenu(true);\n } else {\n this.closeSubMenu();\n }\n }\n\n handleMenuItemClick(menuItem: ContextAction, e: React.MouseEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n const { menuItems } = this.state;\n if (menuItem != null && !menuItem.disabled) {\n if (menuItem.actions != null) {\n this.openSubMenu(menuItems.indexOf(menuItem));\n } else if (menuItem.action != null) {\n menuItem.action();\n this.closeMenu(true);\n }\n }\n }\n\n handleMenuItemContextMenu(\n menuItem: ContextAction,\n e: React.MouseEvent\n ): void {\n if (e.metaKey) {\n return;\n }\n\n this.handleMenuItemClick(menuItem, e);\n }\n\n handleMenuItemMouseMove(menuItem: ContextAction): void {\n const { menuItems } = this.state;\n const focusIndex = menuItems.indexOf(menuItem);\n this.setMouseIndex(focusIndex);\n\n if (\n focusIndex >= 0 &&\n focusIndex < menuItems.length &&\n !menuItem.disabled\n ) {\n this.openSubMenu(focusIndex);\n }\n }\n\n handleMouseLeave(): void {\n this.setMouseIndex(-1);\n }\n\n render(): JSX.Element {\n const menuItemElements = [];\n const { top, left } = this.props;\n const {\n activeSubMenu,\n hasOverflow,\n keyboardIndex,\n menuItems,\n mouseIndex,\n pendingItems,\n subMenuTop,\n subMenuLeft,\n subMenuParentWidth,\n subMenuParentHeight,\n } = 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 ref={activeSubMenu === i ? this.activeSubMenuRef : null}\n isKeyboardSelected={keyboardIndex === i}\n isMouseSelected={mouseIndex === i}\n menuItem={menuItem}\n closeMenu={this.handleCloseSubMenu}\n onMenuItemClick={this.handleMenuItemClick}\n onMenuItemMouseMove={this.handleMenuItemMouseMove}\n onMenuItemContextMenu={this.handleMenuItemContextMenu}\n />\n );\n\n menuItemElements.push(menuItemElement);\n }\n\n let pendingElement = null;\n if (pendingItems.length > 0) {\n pendingElement = (\n <div className=\"loading\">\n <LoadingSpinner />\n </div>\n );\n }\n\n const { menuStyle, 'data-testid': dataTestId } = this.props;\n\n // don't show submenu until it has an position initialized\n const showSubmenu =\n activeSubMenu !== null && subMenuTop !== null && subMenuLeft !== null;\n\n return (\n <>\n <div\n className={classNames(\n { 'has-overflow': hasOverflow },\n 'context-menu-container'\n )}\n style={{ top, left, ...menuStyle }}\n ref={this.container}\n data-dh-context-menu\n onBlur={this.handleBlur}\n onKeyDown={this.handleKeyDown}\n onMouseLeave={this.handleMouseLeave}\n onContextMenu={ContextMenu.handleContextMenu}\n role=\"menuitem\"\n tabIndex={0}\n data-testid={dataTestId}\n >\n {menuItemElements}\n {pendingElement}\n </div>\n {showSubmenu &&\n activeSubMenu !== null &&\n subMenuTop !== null &&\n subMenuLeft !== null && (\n <ContextMenu\n key={`sub-${activeSubMenu}`}\n actions={menuItems[activeSubMenu].actions || []}\n closeMenu={this.handleCloseSubMenu}\n top={subMenuTop}\n left={subMenuLeft}\n updatePosition={(verifiedTop, verifiedLeft) => {\n this.setState({\n subMenuTop: verifiedTop,\n subMenuLeft: verifiedLeft,\n });\n }}\n subMenuParentWidth={subMenuParentWidth}\n subMenuParentHeight={subMenuParentHeight}\n />\n )}\n </>\n );\n }\n}\n\nexport default ContextMenu;\n"],"file":"ContextMenu.js"}
1
+ {"version":3,"file":"ContextMenu.js","names":["React","PureComponent","classNames","Log","PromiseUtils","ContextActionUtils","ContextMenuItem","LoadingSpinner","log","module","ContextMenu","handleContextMenu","e","metaKey","stopPropagation","preventDefault","constructor","props","handleBlur","bind","handleCloseSubMenu","handleKeyDown","handleMenuItemClick","handleMenuItemContextMenu","handleMenuItemMouseMove","handleMouseLeave","handleWindowResize","container","createRef","oldFocus","document","activeElement","activeSubMenuRef","subMenuTimer","rAF","initialPosition","top","left","state","menuItems","pendingItems","activeSubMenu","hasOverflow","subMenuTop","subMenuLeft","subMenuParentWidth","subMenuParentHeight","keyboardIndex","mouseIndex","componentDidMount","initMenu","verifyPosition","window","addEventListener","requestAnimationFrame","current","focus","onMenuOpened","componentDidUpdate","prevProps","prevState","actions","setActiveSubMenuPosition","contains","componentWillUnmount","cancelPromises","removeEventListener","cancelAnimationFrame","getKeyboardIndex","options","separateKeyboardMouse","getMouseIndex","setKeyboardIndex","index","setState","setMouseIndex","initialKeyboardIndex","undefined","getMenuItems","nonPromiseItems","i","length","menuItem","Promise","initMenuPromise","push","sortActions","promise","cancellablePromise","makeCancelable","concat","then","resolvedMenuItems","indexOf","slice","splice","error","isCanceled","map","item","cancel","parentRect","getBoundingClientRect","right","height","width","updatePosition","oldTop","oldLeft","doNotVerifyPosition","scrollHeight","innerHeight","innerWidth","closeMenu","warn","relatedTarget","element","isContextMenuChild","hasAttribute","parentElement","isEscapeKey","key","newFocus","openSubMenu","shiftKey","getNextMenuItem","HTMLElement","newSubMenu","closeAll","onMenuClosed","closeSubMenu","closeAllMenus","disabled","action","focusIndex","render","menuItemElements","group","menuItemElement","pendingElement","menuStyle","dataTestId","showSubmenu","verifiedTop","verifiedLeft"],"sources":["../../src/context-actions/ContextMenu.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport { PromiseUtils, CancelablePromise } from '@deephaven/utils';\nimport ContextActionUtils, {\n ContextAction,\n ResolvableContextAction,\n} from './ContextActionUtils';\nimport ContextMenuItem from './ContextMenuItem';\nimport LoadingSpinner from '../LoadingSpinner';\n\nconst log = Log.module('ContextMenu');\n\ninterface ContextMenuProps {\n top: number;\n left: number;\n updatePosition(top: number, left: number): void;\n // only submenus will have these, defaults to 0 otherwise\n // represents the width height of the parent menu item\n subMenuParentWidth: number;\n subMenuParentHeight: number;\n actions: ResolvableContextAction[];\n closeMenu(closeAll: boolean): void;\n onMenuClosed(menu: ContextMenu): void;\n onMenuOpened(menu: ContextMenu): void;\n options: {\n doNotVerifyPosition?: boolean;\n separateKeyboardMouse?: boolean;\n initialKeyboardIndex?: number;\n };\n menuStyle: React.CSSProperties;\n 'data-testid'?: string;\n}\n\ninterface ContextMenuState {\n menuItems: ContextAction[];\n pendingItems: CancelablePromise<ContextAction[]>[];\n activeSubMenu: number | null;\n hasOverflow: boolean;\n subMenuTop: number | null;\n subMenuLeft: number | null;\n subMenuParentWidth: number;\n subMenuParentHeight: number;\n keyboardIndex: number;\n mouseIndex: number;\n}\n\n/** Do not use this class directly. Use ContextMenuRoot and ContextActions instead. */\nclass ContextMenu extends PureComponent<ContextMenuProps, ContextMenuState> {\n static defaultProps = {\n subMenuParentWidth: 0,\n subMenuParentHeight: 0,\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 static handleContextMenu(e: React.MouseEvent): void {\n if (e.metaKey) {\n return;\n }\n\n e.stopPropagation();\n e.preventDefault();\n }\n\n constructor(props: ContextMenuProps) {\n super(props);\n\n this.handleBlur = this.handleBlur.bind(this);\n this.handleCloseSubMenu = this.handleCloseSubMenu.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.handleMenuItemClick = this.handleMenuItemClick.bind(this);\n this.handleMenuItemContextMenu = this.handleMenuItemContextMenu.bind(this);\n this.handleMenuItemMouseMove = this.handleMenuItemMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowResize = this.handleWindowResize.bind(this);\n\n this.container = React.createRef();\n this.oldFocus = document.activeElement;\n this.activeSubMenuRef = React.createRef();\n this.subMenuTimer = 0;\n this.rAF = 0;\n\n this.initialPosition = { top: props.top, left: props.left };\n\n this.state = {\n menuItems: [],\n pendingItems: [],\n activeSubMenu: null,\n hasOverflow: false,\n subMenuTop: null,\n subMenuLeft: null,\n subMenuParentWidth: 0,\n subMenuParentHeight: 0,\n keyboardIndex: -1,\n mouseIndex: -1,\n };\n }\n\n componentDidMount(): void {\n this.initMenu();\n\n this.verifyPosition();\n\n window.addEventListener('resize', this.handleWindowResize);\n\n // rAF is needed to wait for a submenus popper to be created before\n // attempting to set focus, however on a quick mount/unmount when\n // mousing past an item, the submenu could be unmounted before the\n // async rAF finishes, so it is cancelled in willUnmount()\n this.rAF = window.requestAnimationFrame(() => {\n this.container.current?.focus();\n\n const { onMenuOpened } = this.props;\n onMenuOpened(this);\n });\n }\n\n componentDidUpdate(\n prevProps: ContextMenuProps,\n prevState: ContextMenuState\n ): void {\n const { actions } = this.props;\n const { activeSubMenu } = this.state;\n\n if (activeSubMenu !== prevState.activeSubMenu) {\n if (activeSubMenu == null) {\n // close sub menu, refocus parent menu\n this.container.current?.focus();\n } else {\n // open sub menu, set its initial position\n this.setActiveSubMenuPosition();\n }\n }\n\n if (prevProps.actions !== actions) {\n this.initMenu();\n\n if (!this.container.current?.contains(document.activeElement)) {\n this.container.current?.focus();\n }\n }\n\n this.verifyPosition();\n }\n\n componentWillUnmount(): void {\n this.cancelPromises();\n window.removeEventListener('resize', this.handleWindowResize);\n cancelAnimationFrame(this.rAF);\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n oldFocus: Element | null;\n\n activeSubMenuRef: React.RefObject<HTMLDivElement>;\n\n subMenuTimer: number;\n\n rAF: number;\n\n initialPosition: { top: number; left: number };\n\n getKeyboardIndex(): number {\n const { options } = this.props;\n if (options.separateKeyboardMouse) {\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 (options.separateKeyboardMouse) {\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 and promises\n this.cancelPromises();\n cancelAnimationFrame(this.rAF);\n\n const { options } = this.props;\n let keyboardIndex = options.initialKeyboardIndex;\n if (keyboardIndex === undefined) {\n keyboardIndex = -1;\n }\n\n const { actions } = this.props;\n const menuItems = ContextActionUtils.getMenuItems(actions);\n const nonPromiseItems: ContextAction[] = [];\n for (let i = menuItems.length - 1; i >= 0; i -= 1) {\n const menuItem = menuItems[i];\n if (menuItem instanceof Promise) {\n this.initMenuPromise(menuItem as Promise<ContextAction[]>);\n } else {\n nonPromiseItems.push(menuItem as ContextAction);\n }\n }\n\n this.setState({\n mouseIndex: -1,\n keyboardIndex,\n activeSubMenu: null,\n menuItems: ContextActionUtils.sortActions(nonPromiseItems),\n });\n }\n\n initMenuPromise(promise: Promise<ContextAction[]>): void {\n // make all promises cancellable\n const cancellablePromise = PromiseUtils.makeCancelable(promise);\n\n this.setState(state => ({\n pendingItems: state.pendingItems.concat(cancellablePromise),\n }));\n\n cancellablePromise.then(\n resolvedMenuItems => {\n this.setState(state => {\n const index = state.pendingItems.indexOf(cancellablePromise);\n if (index >= 0) {\n const pendingItems = state.pendingItems.slice();\n pendingItems.splice(index, 1);\n\n return {\n menuItems: ContextActionUtils.sortActions(\n state.menuItems.concat(resolvedMenuItems)\n ),\n pendingItems,\n };\n }\n // This item is stale, don't update the menu\n return null;\n });\n },\n error => {\n if (PromiseUtils.isCanceled(error)) {\n return; // Canceled promise is ignored\n }\n\n // remove failed item from pending list\n this.setState(state => {\n const index = state.pendingItems.indexOf(cancellablePromise);\n if (index >= 0) {\n const pendingItems = state.pendingItems.slice();\n pendingItems.splice(index, 1);\n return {\n pendingItems,\n };\n }\n return null;\n });\n\n // Log the error\n log.error(error);\n }\n );\n }\n\n cancelPromises(): void {\n const { pendingItems } = this.state;\n pendingItems.map(item => item.cancel());\n }\n\n /**\n * Sets the unverfied start position of a submenu. Submenu then self-verfies\n * its own position and potentially reports back a new position.\n */\n setActiveSubMenuPosition(): void {\n if (this.activeSubMenuRef.current === null) return;\n const parentRect = this.activeSubMenuRef.current.getBoundingClientRect();\n\n // intentionally rect.right, we want the sub menu to start at the right edge of the current menu\n this.setState({\n subMenuTop: parentRect.top,\n subMenuLeft: parentRect.right,\n subMenuParentHeight: parentRect.height,\n subMenuParentWidth: parentRect.width,\n });\n }\n\n /**\n * Verifies the position of this menu in relation to the parent to make sure it's on screen.\n * Will update the top left state (updatePosition) if necessary (causing a re-render)\n * By default it tries to top-align with parent, at the right side of the parent.\n * Because we aren't a native context menu and can't escape window bounds, we also do\n * somethings to better fit on screen, such as the \"nudge\" offset position, and further\n * allow overflow scrolling for large menus in a small window.\n */\n verifyPosition(): void {\n const {\n options,\n updatePosition,\n subMenuParentWidth,\n subMenuParentHeight,\n top: oldTop,\n left: oldLeft,\n } = this.props;\n\n if (!this.container.current || options.doNotVerifyPosition) {\n return;\n }\n\n // initial position is used rather than current position,\n // as the number of menu items can change (actions can bubble)\n // and menu should always be positioned relative to spawn point\n let { top, left } = this.initialPosition;\n const {\n width,\n height,\n } = this.container.current?.getBoundingClientRect() ?? {\n width: 0,\n height: 0,\n };\n const hasOverflow =\n (this.container.current?.scrollHeight ?? 0) > window.innerHeight;\n\n if (height === 0 || width === 0) {\n // We don't have a height or width yet, don't bother doing anything\n return;\n }\n\n // does it fit below?\n if (top + height > window.innerHeight) {\n // can it be flipped to above? include offset if submenu (defaults to 0 if not submenu)\n if (top - height - subMenuParentHeight > 0) {\n // flip like a native menu would\n top -= height - subMenuParentHeight;\n } else {\n // still doesnt fit? okay, position at bottom edge\n top = window.innerHeight - height;\n }\n }\n\n if (left + width > window.innerWidth) {\n // less picky about left right positioning, just keep it going off to right\n left = left - width - subMenuParentWidth;\n }\n\n if (oldLeft !== left || oldTop !== top) {\n // parent owns positioning as single source of truth, ask to update props\n this.setState({ hasOverflow });\n updatePosition(top, left);\n }\n }\n\n // since window resize doesn't trigger blur, listen and close the menu\n handleWindowResize(): void {\n if (!this.container.current) {\n return;\n }\n this.closeMenu(true);\n }\n\n handleBlur(e: React.FocusEvent<HTMLDivElement>): void {\n if (!this.container.current) {\n log.warn('Container is null!');\n return;\n }\n\n if (!this.container.current.contains(e.relatedTarget as Node)) {\n let element: HTMLElement | null = e.relatedTarget as HTMLElement;\n let isContextMenuChild = false;\n while (element && !isContextMenuChild) {\n isContextMenuChild = element.hasAttribute('data-dh-context-menu');\n element = element.parentElement;\n }\n\n if (!isContextMenuChild) {\n // close all submenus on blur\n this.closeMenu(true);\n }\n }\n }\n\n /** Returns whether the specified key should remove the menu. Depends on the side the parent is on. */\n isEscapeKey(key: string): boolean {\n const { left } = this.props;\n return (\n key === 'Escape' ||\n (left < 0 && key === 'ArrowRight') ||\n key === 'ArrowLeft'\n );\n }\n\n handleKeyDown(e: React.KeyboardEvent<HTMLDivElement>): void {\n const { menuItems } = this.state;\n const oldFocus = this.getKeyboardIndex();\n let newFocus: number | null = oldFocus;\n let openSubMenu = false;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (oldFocus >= 0 && oldFocus < menuItems.length) {\n this.handleMenuItemClick(\n menuItems[oldFocus],\n (e as React.SyntheticEvent) as React.MouseEvent\n );\n }\n return;\n }\n\n if (e.key === 'ArrowRight') {\n if (oldFocus >= 0 && oldFocus <= menuItems.length) {\n openSubMenu = true;\n } else {\n newFocus = 0;\n }\n } else if (this.isEscapeKey(e.key)) {\n newFocus = null;\n } else if (e.key === 'ArrowUp' || (e.shiftKey && e.key === 'Tab')) {\n newFocus = ContextActionUtils.getNextMenuItem(newFocus, -1, menuItems);\n } else if (e.key === 'ArrowDown' || e.key === 'Tab') {\n newFocus = ContextActionUtils.getNextMenuItem(newFocus, 1, menuItems);\n }\n\n if (openSubMenu) {\n this.openSubMenu(oldFocus);\n e.preventDefault();\n e.stopPropagation();\n return;\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 openSubMenu(index: number): void {\n const { menuItems, activeSubMenu } = this.state;\n const newSubMenu = menuItems[index].actions ? index : null;\n if (activeSubMenu === newSubMenu) return;\n this.setState({\n activeSubMenu: newSubMenu,\n subMenuTop: null,\n subMenuLeft: null,\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 closeSubMenu(): void {\n this.setState({\n activeSubMenu: null,\n });\n }\n\n handleCloseSubMenu(closeAllMenus: boolean): void {\n if (closeAllMenus) {\n this.closeMenu(true);\n } else {\n this.closeSubMenu();\n }\n }\n\n handleMenuItemClick(menuItem: ContextAction, e: React.MouseEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n const { menuItems } = this.state;\n if (menuItem != null && !menuItem.disabled) {\n if (menuItem.actions != null) {\n this.openSubMenu(menuItems.indexOf(menuItem));\n } else if (menuItem.action != null) {\n menuItem.action();\n this.closeMenu(true);\n }\n }\n }\n\n handleMenuItemContextMenu(\n menuItem: ContextAction,\n e: React.MouseEvent\n ): void {\n if (e.metaKey) {\n return;\n }\n\n this.handleMenuItemClick(menuItem, e);\n }\n\n handleMenuItemMouseMove(menuItem: ContextAction): void {\n const { menuItems } = this.state;\n const focusIndex = menuItems.indexOf(menuItem);\n this.setMouseIndex(focusIndex);\n\n if (\n focusIndex >= 0 &&\n focusIndex < menuItems.length &&\n !menuItem.disabled\n ) {\n this.openSubMenu(focusIndex);\n }\n }\n\n handleMouseLeave(): void {\n this.setMouseIndex(-1);\n }\n\n render(): JSX.Element {\n const menuItemElements = [];\n const { top, left } = this.props;\n const {\n activeSubMenu,\n hasOverflow,\n keyboardIndex,\n menuItems,\n mouseIndex,\n pendingItems,\n subMenuTop,\n subMenuLeft,\n subMenuParentWidth,\n subMenuParentHeight,\n } = 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 ref={activeSubMenu === i ? this.activeSubMenuRef : null}\n isKeyboardSelected={keyboardIndex === i}\n isMouseSelected={mouseIndex === i}\n menuItem={menuItem}\n closeMenu={this.handleCloseSubMenu}\n onMenuItemClick={this.handleMenuItemClick}\n onMenuItemMouseMove={this.handleMenuItemMouseMove}\n onMenuItemContextMenu={this.handleMenuItemContextMenu}\n />\n );\n\n menuItemElements.push(menuItemElement);\n }\n\n let pendingElement = null;\n if (pendingItems.length > 0) {\n pendingElement = (\n <div className=\"loading\">\n <LoadingSpinner />\n </div>\n );\n }\n\n const { menuStyle, 'data-testid': dataTestId } = this.props;\n\n // don't show submenu until it has an position initialized\n const showSubmenu =\n activeSubMenu !== null && subMenuTop !== null && subMenuLeft !== null;\n\n return (\n <>\n <div\n className={classNames(\n { 'has-overflow': hasOverflow },\n 'context-menu-container'\n )}\n style={{ top, left, ...menuStyle }}\n ref={this.container}\n data-dh-context-menu\n onBlur={this.handleBlur}\n onKeyDown={this.handleKeyDown}\n onMouseLeave={this.handleMouseLeave}\n onContextMenu={ContextMenu.handleContextMenu}\n role=\"menuitem\"\n tabIndex={0}\n data-testid={dataTestId}\n >\n {menuItemElements}\n {pendingElement}\n </div>\n {showSubmenu &&\n activeSubMenu !== null &&\n subMenuTop !== null &&\n subMenuLeft !== null && (\n <ContextMenu\n key={`sub-${activeSubMenu}`}\n actions={menuItems[activeSubMenu].actions || []}\n closeMenu={this.handleCloseSubMenu}\n top={subMenuTop}\n left={subMenuLeft}\n updatePosition={(verifiedTop, verifiedLeft) => {\n this.setState({\n subMenuTop: verifiedTop,\n subMenuLeft: verifiedLeft,\n });\n }}\n subMenuParentWidth={subMenuParentWidth}\n subMenuParentHeight={subMenuParentHeight}\n />\n )}\n </>\n );\n }\n}\n\nexport default ContextMenu;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context-actions/ContextMenuItem.tsx"],"names":["React","classNames","FontAwesomeIcon","vsChevronRight","ContextMenuItem","forwardRef","props","ref","handleMenuItemClick","e","menuItem","onMenuItemClick","handleMenuItemMouseMove","onMenuItemMouseMove","handleMenuItemContextMenu","onMenuItemContextMenu","renderCustomMenuElement","element","iconElement","displayShortcut","type","closeMenu","isKeyboardSelected","isMouseSelected","dataTestId","forwardedProps","cloneElement","children","shortcut","getDisplayText","icon","menuItemIcon","isValidElement","style","iconColor","disabled","color","subMenuIndicator","isSubMenuActive","actions","content","menuElement","menuItemDisabled","iconHasOutline","iconOutline","active","description","outline","title","displayName","defaultProps","undefined"],"mappings":"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","sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight, IconDefinition } from '@deephaven/icons';\nimport type { ContextAction } from './ContextActionUtils';\n\ninterface ContextMenuItemProps {\n children?: React.ReactNode;\n closeMenu(closeAll: boolean): void;\n isKeyboardSelected?: boolean;\n isMouseSelected?: boolean;\n menuItem: ContextAction;\n onMenuItemClick(item: ContextAction, e: React.MouseEvent): void;\n onMenuItemMouseMove(item: ContextAction, e: React.MouseEvent): void;\n onMenuItemContextMenu(item: ContextAction, e: React.MouseEvent): void;\n 'data-testid'?: string;\n}\n\nconst ContextMenuItem = React.forwardRef<HTMLDivElement, ContextMenuItemProps>(\n (props: ContextMenuItemProps, ref) => {\n function handleMenuItemClick(e: React.MouseEvent) {\n const { menuItem, onMenuItemClick } = props;\n onMenuItemClick(menuItem, e);\n }\n\n function handleMenuItemMouseMove(e: React.MouseEvent) {\n const { menuItem, onMenuItemMouseMove } = props;\n onMenuItemMouseMove(menuItem, e);\n }\n\n function handleMenuItemContextMenu(e: React.MouseEvent) {\n const { menuItem, onMenuItemContextMenu } = props;\n onMenuItemContextMenu(menuItem, e);\n }\n\n function renderCustomMenuElement(\n element: React.ReactElement,\n iconElement: IconDefinition | React.ReactElement | null,\n displayShortcut: string | undefined\n ): JSX.Element {\n // Don't pass forwardedProps if menuElement is a native DOM node\n if (typeof element.type === 'string') {\n return element;\n }\n const {\n closeMenu,\n menuItem,\n isKeyboardSelected,\n isMouseSelected,\n 'data-testid': dataTestId,\n } = props;\n const forwardedProps = {\n menuItem,\n closeMenu,\n isKeyboardSelected,\n isMouseSelected,\n iconElement,\n displayShortcut,\n 'data-testid': dataTestId,\n };\n return React.cloneElement(element, {\n forwardedProps,\n });\n }\n\n const {\n children,\n menuItem,\n isKeyboardSelected,\n isMouseSelected,\n 'data-testid': dataTestId,\n } = props;\n\n const displayShortcut = menuItem.shortcut?.getDisplayText();\n let icon: IconDefinition | React.ReactElement | null = null;\n if (menuItem.icon) {\n const menuItemIcon = menuItem.icon;\n if (React.isValidElement(menuItemIcon)) {\n icon = menuItemIcon;\n } else {\n let style: React.CSSProperties | undefined;\n if (menuItem.iconColor && !menuItem.disabled) {\n style = { color: menuItem.iconColor };\n }\n icon = <FontAwesomeIcon icon={menuItemIcon} style={style} />;\n }\n }\n\n let subMenuIndicator = null;\n const isSubMenuActive = !!children;\n if (menuItem.actions) {\n subMenuIndicator = <FontAwesomeIcon icon={vsChevronRight} />;\n }\n let content = null;\n if (menuItem.menuElement) {\n content = (\n <div className=\"custom-menu-item\" onMouseMove={handleMenuItemMouseMove}>\n {renderCustomMenuElement(menuItem.menuElement, icon, displayShortcut)}\n </div>\n );\n } else {\n const menuItemDisabled = menuItem.disabled;\n const iconHasOutline = menuItem.iconOutline;\n content = (\n <button\n type=\"button\"\n className={classNames(\n 'btn-context-menu',\n { disabled: menuItemDisabled },\n {\n active: (isSubMenuActive || isMouseSelected) && !menuItemDisabled,\n },\n { 'keyboard-active': isKeyboardSelected && !menuItemDisabled }\n )}\n onClick={handleMenuItemClick}\n onMouseMove={handleMenuItemMouseMove}\n onContextMenu={handleMenuItemContextMenu}\n title={menuItem.description || ''}\n >\n <div className=\"btn-context-menu-wrapper\">\n <span className={classNames('icon', { outline: iconHasOutline })}>\n {icon}\n </span>\n <span className=\"title\">{menuItem.title}</span>\n {displayShortcut && (\n <span className=\"shortcut\">{displayShortcut}</span>\n )}\n {subMenuIndicator && (\n <span\n className={classNames('submenu-indicator', {\n disabled: menuItemDisabled,\n })}\n >\n {subMenuIndicator}\n </span>\n )}\n </div>\n </button>\n );\n }\n\n return (\n <div className=\"context-menu-item\" ref={ref} data-testid={dataTestId}>\n {children}\n {content}\n </div>\n );\n }\n);\n\nContextMenuItem.displayName = 'ContextMenuItem';\n\nContextMenuItem.defaultProps = {\n children: null,\n isKeyboardSelected: false,\n isMouseSelected: false,\n 'data-testid': undefined,\n};\n\nexport default ContextMenuItem;\n"],"file":"ContextMenuItem.js"}
1
+ {"version":3,"file":"ContextMenuItem.js","names":["React","classNames","FontAwesomeIcon","vsChevronRight","ContextMenuItem","forwardRef","props","ref","handleMenuItemClick","e","menuItem","onMenuItemClick","handleMenuItemMouseMove","onMenuItemMouseMove","handleMenuItemContextMenu","onMenuItemContextMenu","renderCustomMenuElement","element","iconElement","displayShortcut","type","closeMenu","isKeyboardSelected","isMouseSelected","dataTestId","forwardedProps","cloneElement","children","shortcut","getDisplayText","icon","menuItemIcon","isValidElement","style","iconColor","disabled","color","subMenuIndicator","isSubMenuActive","actions","content","menuElement","menuItemDisabled","iconHasOutline","iconOutline","active","description","outline","title","displayName","defaultProps","undefined"],"sources":["../../src/context-actions/ContextMenuItem.tsx"],"sourcesContent":["import React from 'react';\nimport classNames from 'classnames';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight, IconDefinition } from '@deephaven/icons';\nimport type { ContextAction } from './ContextActionUtils';\n\ninterface ContextMenuItemProps {\n children?: React.ReactNode;\n closeMenu(closeAll: boolean): void;\n isKeyboardSelected?: boolean;\n isMouseSelected?: boolean;\n menuItem: ContextAction;\n onMenuItemClick(item: ContextAction, e: React.MouseEvent): void;\n onMenuItemMouseMove(item: ContextAction, e: React.MouseEvent): void;\n onMenuItemContextMenu(item: ContextAction, e: React.MouseEvent): void;\n 'data-testid'?: string;\n}\n\nconst ContextMenuItem = React.forwardRef<HTMLDivElement, ContextMenuItemProps>(\n (props: ContextMenuItemProps, ref) => {\n function handleMenuItemClick(e: React.MouseEvent) {\n const { menuItem, onMenuItemClick } = props;\n onMenuItemClick(menuItem, e);\n }\n\n function handleMenuItemMouseMove(e: React.MouseEvent) {\n const { menuItem, onMenuItemMouseMove } = props;\n onMenuItemMouseMove(menuItem, e);\n }\n\n function handleMenuItemContextMenu(e: React.MouseEvent) {\n const { menuItem, onMenuItemContextMenu } = props;\n onMenuItemContextMenu(menuItem, e);\n }\n\n function renderCustomMenuElement(\n element: React.ReactElement,\n iconElement: IconDefinition | React.ReactElement | null,\n displayShortcut: string | undefined\n ): JSX.Element {\n // Don't pass forwardedProps if menuElement is a native DOM node\n if (typeof element.type === 'string') {\n return element;\n }\n const {\n closeMenu,\n menuItem,\n isKeyboardSelected,\n isMouseSelected,\n 'data-testid': dataTestId,\n } = props;\n const forwardedProps = {\n menuItem,\n closeMenu,\n isKeyboardSelected,\n isMouseSelected,\n iconElement,\n displayShortcut,\n 'data-testid': dataTestId,\n };\n return React.cloneElement(element, {\n forwardedProps,\n });\n }\n\n const {\n children,\n menuItem,\n isKeyboardSelected,\n isMouseSelected,\n 'data-testid': dataTestId,\n } = props;\n\n const displayShortcut = menuItem.shortcut?.getDisplayText();\n let icon: IconDefinition | React.ReactElement | null = null;\n if (menuItem.icon) {\n const menuItemIcon = menuItem.icon;\n if (React.isValidElement(menuItemIcon)) {\n icon = menuItemIcon;\n } else {\n let style: React.CSSProperties | undefined;\n if (menuItem.iconColor && !menuItem.disabled) {\n style = { color: menuItem.iconColor };\n }\n icon = <FontAwesomeIcon icon={menuItemIcon} style={style} />;\n }\n }\n\n let subMenuIndicator = null;\n const isSubMenuActive = !!children;\n if (menuItem.actions) {\n subMenuIndicator = <FontAwesomeIcon icon={vsChevronRight} />;\n }\n let content = null;\n if (menuItem.menuElement) {\n content = (\n <div className=\"custom-menu-item\" onMouseMove={handleMenuItemMouseMove}>\n {renderCustomMenuElement(menuItem.menuElement, icon, displayShortcut)}\n </div>\n );\n } else {\n const menuItemDisabled = menuItem.disabled;\n const iconHasOutline = menuItem.iconOutline;\n content = (\n <button\n type=\"button\"\n className={classNames(\n 'btn-context-menu',\n { disabled: menuItemDisabled },\n {\n active: (isSubMenuActive || isMouseSelected) && !menuItemDisabled,\n },\n { 'keyboard-active': isKeyboardSelected && !menuItemDisabled }\n )}\n onClick={handleMenuItemClick}\n onMouseMove={handleMenuItemMouseMove}\n onContextMenu={handleMenuItemContextMenu}\n title={menuItem.description || ''}\n >\n <div className=\"btn-context-menu-wrapper\">\n <span className={classNames('icon', { outline: iconHasOutline })}>\n {icon}\n </span>\n <span className=\"title\">{menuItem.title}</span>\n {displayShortcut && (\n <span className=\"shortcut\">{displayShortcut}</span>\n )}\n {subMenuIndicator && (\n <span\n className={classNames('submenu-indicator', {\n disabled: menuItemDisabled,\n })}\n >\n {subMenuIndicator}\n </span>\n )}\n </div>\n </button>\n );\n }\n\n return (\n <div className=\"context-menu-item\" ref={ref} data-testid={dataTestId}>\n {children}\n {content}\n </div>\n );\n }\n);\n\nContextMenuItem.displayName = 'ContextMenuItem';\n\nContextMenuItem.defaultProps = {\n children: null,\n isKeyboardSelected: false,\n isMouseSelected: false,\n 'data-testid': undefined,\n};\n\nexport default ContextMenuItem;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context-actions/ContextMenuRoot.tsx"],"names":["React","Component","classNames","ContextMenu","ContextActionUtils","ContextMenuRoot","constructor","props","handleMenuClose","bind","handleContextMenu","container","createRef","openMenu","state","actions","left","top","componentDidMount","current","parentElement","addEventListener","componentWillUnmount","removeEventListener","e","isContextActionEvent","metaKey","ctrlKey","contextActions","getMenuItems","parentRect","getBoundingClientRect","clientY","clientX","length","target","preventDefault","setState","element","document","elementFromPoint","mouseEvent","MouseEvent","bubbles","cancelable","dispatchEvent","menu","render","dataTestId","verifiedTop","verifiedLeft","active"],"mappings":"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","sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport ContextMenu from './ContextMenu';\nimport ContextActionUtils, { MenuItem } from './ContextActionUtils';\n\ntype ContextMenuRootProps = Record<string, never> & {\n 'data-testid'?: string;\n};\n\ninterface ContextMenuRootState {\n actions: MenuItem[] | null;\n left: number;\n top: number;\n}\n\n/**\n * Put at your root container, any contextmenu events that are unhandled in the root container will be handled by this\n */\nclass ContextMenuRoot extends Component<\n ContextMenuRootProps,\n ContextMenuRootState\n> {\n constructor(props: ContextMenuRootProps) {\n super(props);\n\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.container = React.createRef();\n this.openMenu = React.createRef();\n\n this.state = {\n actions: null,\n left: 0,\n top: 0,\n };\n }\n\n componentDidMount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.addEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n }\n }\n\n componentWillUnmount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.removeEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n openMenu: React.RefObject<ContextMenu>;\n\n handleContextMenu(e: MouseEvent): void {\n if (!ContextActionUtils.isContextActionEvent(e)) {\n return;\n }\n\n if (!this.container.current) {\n return;\n }\n\n if (e.metaKey || e.ctrlKey) {\n // debug escape hatch to native menu\n return;\n }\n\n const contextActions = ContextActionUtils.getMenuItems(e.contextActions);\n\n const parentRect = this.container.current.getBoundingClientRect();\n const top = e.clientY - parentRect.top;\n const left = e.clientX - parentRect.left;\n\n if (contextActions.length === 0) {\n // This code path seems to only exist for Chrome on Mac\n // Mac appears to trigger contextmenu events on mousedown vs. mouseup on Windows\n // Mouseup on Windows triggers blur before contextmenu which effectively does what this path does\n if (e.target === this.container.current) {\n // re-emit right clicks that hit the context-root blocking layer\n e.preventDefault();\n\n // Set actions to null removes the menu\n // That allows a new menu to be opened on a different element so initial position is set properly\n // Otherwise the instance of this menu may be reused\n // A new contextmenu event is triggered on the element at the location the user clicked on the blocking layer\n this.setState({ actions: null }, () => {\n const element = document.elementFromPoint(left, top); // x y\n\n const mouseEvent = new MouseEvent('contextmenu', {\n clientX: e.clientX,\n clientY: e.clientY,\n bubbles: true,\n cancelable: true,\n });\n\n element?.dispatchEvent(mouseEvent);\n });\n return;\n }\n\n // target was a menu item\n return;\n }\n\n // new clicks, set actions\n e.preventDefault();\n this.setState({\n actions: contextActions,\n top,\n left,\n });\n }\n\n handleMenuClose(menu: ContextMenu): void {\n if (menu === this.openMenu.current) {\n this.setState({ actions: null });\n }\n }\n\n render(): JSX.Element {\n let menu = null;\n const { 'data-testid': dataTestId } = this.props;\n const { actions, top, left } = this.state;\n if (actions) {\n menu = (\n <ContextMenu\n ref={this.openMenu}\n actions={actions}\n onMenuClosed={this.handleMenuClose}\n top={top}\n left={left}\n updatePosition={(verifiedTop, verifiedLeft) => {\n this.setState({ top: verifiedTop, left: verifiedLeft });\n }}\n data-testid={dataTestId}\n />\n );\n }\n return (\n <div\n className={classNames('context-menu-root', { active: actions })}\n ref={this.container}\n >\n {menu}\n </div>\n );\n }\n}\n\nexport default ContextMenuRoot;\n"],"file":"ContextMenuRoot.js"}
1
+ {"version":3,"file":"ContextMenuRoot.js","names":["React","Component","classNames","ContextMenu","ContextActionUtils","ContextMenuRoot","constructor","props","handleMenuClose","bind","handleContextMenu","container","createRef","openMenu","state","actions","left","top","componentDidMount","current","parentElement","addEventListener","componentWillUnmount","removeEventListener","e","isContextActionEvent","metaKey","ctrlKey","contextActions","getMenuItems","parentRect","getBoundingClientRect","clientY","clientX","length","target","preventDefault","setState","element","document","elementFromPoint","mouseEvent","MouseEvent","bubbles","cancelable","dispatchEvent","menu","render","dataTestId","verifiedTop","verifiedLeft","active"],"sources":["../../src/context-actions/ContextMenuRoot.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport ContextMenu from './ContextMenu';\nimport ContextActionUtils, { MenuItem } from './ContextActionUtils';\n\ntype ContextMenuRootProps = Record<string, never> & {\n 'data-testid'?: string;\n};\n\ninterface ContextMenuRootState {\n actions: MenuItem[] | null;\n left: number;\n top: number;\n}\n\n/**\n * Put at your root container, any contextmenu events that are unhandled in the root container will be handled by this\n */\nclass ContextMenuRoot extends Component<\n ContextMenuRootProps,\n ContextMenuRootState\n> {\n constructor(props: ContextMenuRootProps) {\n super(props);\n\n this.handleMenuClose = this.handleMenuClose.bind(this);\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.container = React.createRef();\n this.openMenu = React.createRef();\n\n this.state = {\n actions: null,\n left: 0,\n top: 0,\n };\n }\n\n componentDidMount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.addEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n }\n }\n\n componentWillUnmount(): void {\n if (this.container.current?.parentElement) {\n this.container.current.parentElement.removeEventListener(\n 'contextmenu',\n this.handleContextMenu\n );\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n openMenu: React.RefObject<ContextMenu>;\n\n handleContextMenu(e: MouseEvent): void {\n if (!ContextActionUtils.isContextActionEvent(e)) {\n return;\n }\n\n if (!this.container.current) {\n return;\n }\n\n if (e.metaKey || e.ctrlKey) {\n // debug escape hatch to native menu\n return;\n }\n\n const contextActions = ContextActionUtils.getMenuItems(e.contextActions);\n\n const parentRect = this.container.current.getBoundingClientRect();\n const top = e.clientY - parentRect.top;\n const left = e.clientX - parentRect.left;\n\n if (contextActions.length === 0) {\n // This code path seems to only exist for Chrome on Mac\n // Mac appears to trigger contextmenu events on mousedown vs. mouseup on Windows\n // Mouseup on Windows triggers blur before contextmenu which effectively does what this path does\n if (e.target === this.container.current) {\n // re-emit right clicks that hit the context-root blocking layer\n e.preventDefault();\n\n // Set actions to null removes the menu\n // That allows a new menu to be opened on a different element so initial position is set properly\n // Otherwise the instance of this menu may be reused\n // A new contextmenu event is triggered on the element at the location the user clicked on the blocking layer\n this.setState({ actions: null }, () => {\n const element = document.elementFromPoint(left, top); // x y\n\n const mouseEvent = new MouseEvent('contextmenu', {\n clientX: e.clientX,\n clientY: e.clientY,\n bubbles: true,\n cancelable: true,\n });\n\n element?.dispatchEvent(mouseEvent);\n });\n return;\n }\n\n // target was a menu item\n return;\n }\n\n // new clicks, set actions\n e.preventDefault();\n this.setState({\n actions: contextActions,\n top,\n left,\n });\n }\n\n handleMenuClose(menu: ContextMenu): void {\n if (menu === this.openMenu.current) {\n this.setState({ actions: null });\n }\n }\n\n render(): JSX.Element {\n let menu = null;\n const { 'data-testid': dataTestId } = this.props;\n const { actions, top, left } = this.state;\n if (actions) {\n menu = (\n <ContextMenu\n ref={this.openMenu}\n actions={actions}\n onMenuClosed={this.handleMenuClose}\n top={top}\n left={left}\n updatePosition={(verifiedTop, verifiedLeft) => {\n this.setState({ top: verifiedTop, left: verifiedLeft });\n }}\n data-testid={dataTestId}\n />\n );\n }\n return (\n <div\n className={classNames('context-menu-root', { active: actions })}\n ref={this.container}\n >\n {menu}\n </div>\n );\n }\n}\n\nexport default ContextMenuRoot;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context-actions/GlobalContextAction.tsx"],"names":["Component","Log","ContextActionUtils","log","module","GlobalContextAction","constructor","props","handleContextMenu","bind","handleKeyDown","componentDidMount","document","body","addEventListener","componentWillUnmount","removeEventListener","evt","e","contextActions","action","title","menuElement","push","debug","actionsDisabled","shortcut","matchesEvent","result","undefined","preventDefault","stopPropagation","render"],"mappings":"AAAA,SAASA,SAAT,QAA0B,OAA1B;AACA,OAAOC,GAAP,MAAgB,gBAAhB;OACOC,kB;AAGP,IAAMC,GAAG,GAAGF,GAAG,CAACG,MAAJ,CAAW,qBAAX,CAAZ;;AAMA,MAAMC,mBAAN,SAAkCL,SAAlC,CAAsE;AACpEM,EAAAA,WAAW,CAACC,KAAD,EAAkC;AAC3C,UAAMA,KAAN;AAEA,SAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBC,IAAvB,CAA4B,IAA5B,CAAzB;AACA,SAAKC,aAAL,GAAqB,KAAKA,aAAL,CAAmBD,IAAnB,CAAwB,IAAxB,CAArB;AACD;;AAEDE,EAAAA,iBAAiB,GAAS;AACxBC,IAAAA,QAAQ,CAACC,IAAT,CAAcC,gBAAd,CAA+B,aAA/B,EAA8C,KAAKN,iBAAnD;AACAI,IAAAA,QAAQ,CAACC,IAAT,CAAcC,gBAAd,CAA+B,SAA/B,EAA0C,KAAKJ,aAA/C;AACD;;AAEDK,EAAAA,oBAAoB,GAAS;AAC3BH,IAAAA,QAAQ,CAACC,IAAT,CAAcG,mBAAd,CAAkC,aAAlC,EAAiD,KAAKR,iBAAtD;AACAI,IAAAA,QAAQ,CAACC,IAAT,CAAcG,mBAAd,CAAkC,SAAlC,EAA6C,KAAKN,aAAlD;AACD;;AAEDF,EAAAA,iBAAiB,CAACS,GAAD,EAAwB;AACvC,QAAMC,CAAC,GAAGD,GAAV;;AACA,QAAI,CAACC,CAAC,CAACC,cAAP,EAAuB;AACrBD,MAAAA,CAAC,CAACC,cAAF,GAAmB,EAAnB;AACD;;AAED,QAAM;AAAEC,MAAAA;AAAF,QAAa,KAAKb,KAAxB;;AAEA,QAAI,CAACa,MAAM,CAACC,KAAR,IAAiB,CAACD,MAAM,CAACE,WAA7B,EAA0C;AACxC;AACD;;AAED,QAAI,CAACJ,CAAC,CAACC,cAAP,EAAuB;AACrBD,MAAAA,CAAC,CAACC,cAAF,GAAmB,EAAnB;AACD;;AAEDD,IAAAA,CAAC,CAACC,cAAF,CAAiBI,IAAjB,CAAsBH,MAAtB;AAEAjB,IAAAA,GAAG,CAACqB,KAAJ,CACE,oEADF,EAEEN,CAAC,CAACC,cAFJ;AAID;;AAEDT,EAAAA,aAAa,CAACQ,CAAD,EAAyB;AAAA;;AACpC,QAAM;AAAEE,MAAAA;AAAF,QAAa,KAAKb,KAAxB;;AACA,QACE,CAACL,kBAAkB,CAACuB,eAApB,wBACAL,MAAM,CAACM,QADP,6CACA,iBAAiBC,YAAjB,CAA8BT,CAA9B,CAFF,EAGE;AAAA;;AACAf,MAAAA,GAAG,CAACqB,KAAJ,CAAU,wBAAV,EAAoCN,CAApC;AAEA,UAAMU,MAAM,qBAAGR,MAAM,CAACA,MAAV,mDAAG,oBAAAA,MAAM,EAAUF,CAAV,CAArB;;AAEA,UAAIU,MAAM,IAAIA,MAAM,KAAKC,SAAzB,EAAoC;AAClCX,QAAAA,CAAC,CAACY,cAAF;AACAZ,QAAAA,CAAC,CAACa,eAAF;AACD;AACF;AACF;;AAEDC,EAAAA,MAAM,GAAS;AACb,WAAO,IAAP;AACD;;AA7DmE;;AAgEtE,eAAe3B,mBAAf","sourcesContent":["import { Component } from 'react';\nimport Log from '@deephaven/log';\nimport ContextActionUtils from './ContextActionUtils';\nimport type { ContextAction, ContextActionEvent } from './ContextActionUtils';\n\nconst log = Log.module('GlobalContextAction');\n\ninterface GlobalContextActionProps {\n action: ContextAction;\n}\n\nclass GlobalContextAction extends Component<GlobalContextActionProps> {\n constructor(props: GlobalContextActionProps) {\n super(props);\n\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n componentDidMount(): void {\n document.body.addEventListener('contextmenu', this.handleContextMenu);\n document.body.addEventListener('keydown', this.handleKeyDown);\n }\n\n componentWillUnmount(): void {\n document.body.removeEventListener('contextmenu', this.handleContextMenu);\n document.body.removeEventListener('keydown', this.handleKeyDown);\n }\n\n handleContextMenu(evt: MouseEvent): void {\n const e = evt as ContextActionEvent;\n if (!e.contextActions) {\n e.contextActions = [];\n }\n\n const { action } = this.props;\n\n if (!action.title && !action.menuElement) {\n return;\n }\n\n if (!e.contextActions) {\n e.contextActions = [];\n }\n\n e.contextActions.push(action);\n\n log.debug(\n 'Received context menu event at global action! Menu items are now: ',\n e.contextActions\n );\n }\n\n handleKeyDown(e: KeyboardEvent): void {\n const { action } = this.props;\n if (\n !ContextActionUtils.actionsDisabled &&\n action.shortcut?.matchesEvent(e)\n ) {\n log.debug('Global hotkey matched!', e);\n\n const result = action.action?.(e);\n\n if (result || result === undefined) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default GlobalContextAction;\n"],"file":"GlobalContextAction.js"}
1
+ {"version":3,"file":"GlobalContextAction.js","names":["Component","Log","ContextActionUtils","log","module","GlobalContextAction","constructor","props","handleContextMenu","bind","handleKeyDown","componentDidMount","document","body","addEventListener","componentWillUnmount","removeEventListener","evt","e","contextActions","action","title","menuElement","push","debug","actionsDisabled","shortcut","matchesEvent","result","undefined","preventDefault","stopPropagation","render"],"sources":["../../src/context-actions/GlobalContextAction.tsx"],"sourcesContent":["import { Component } from 'react';\nimport Log from '@deephaven/log';\nimport ContextActionUtils from './ContextActionUtils';\nimport type { ContextAction, ContextActionEvent } from './ContextActionUtils';\n\nconst log = Log.module('GlobalContextAction');\n\ninterface GlobalContextActionProps {\n action: ContextAction;\n}\n\nclass GlobalContextAction extends Component<GlobalContextActionProps> {\n constructor(props: GlobalContextActionProps) {\n super(props);\n\n this.handleContextMenu = this.handleContextMenu.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n }\n\n componentDidMount(): void {\n document.body.addEventListener('contextmenu', this.handleContextMenu);\n document.body.addEventListener('keydown', this.handleKeyDown);\n }\n\n componentWillUnmount(): void {\n document.body.removeEventListener('contextmenu', this.handleContextMenu);\n document.body.removeEventListener('keydown', this.handleKeyDown);\n }\n\n handleContextMenu(evt: MouseEvent): void {\n const e = evt as ContextActionEvent;\n if (!e.contextActions) {\n e.contextActions = [];\n }\n\n const { action } = this.props;\n\n if (!action.title && !action.menuElement) {\n return;\n }\n\n if (!e.contextActions) {\n e.contextActions = [];\n }\n\n e.contextActions.push(action);\n\n log.debug(\n 'Received context menu event at global action! Menu items are now: ',\n e.contextActions\n );\n }\n\n handleKeyDown(e: KeyboardEvent): void {\n const { action } = this.props;\n if (\n !ContextActionUtils.actionsDisabled &&\n action.shortcut?.matchesEvent(e)\n ) {\n log.debug('Global hotkey matched!', e);\n\n const result = action.action?.(e);\n\n if (result || result === undefined) {\n e.preventDefault();\n e.stopPropagation();\n }\n }\n }\n\n render(): null {\n return null;\n }\n}\n\nexport default GlobalContextAction;\n"],"mappings":"AAAA,SAASA,SAAT,QAA0B,OAA1B;AACA,OAAOC,GAAP,MAAgB,gBAAhB;OACOC,kB;AAGP,IAAMC,GAAG,GAAGF,GAAG,CAACG,MAAJ,CAAW,qBAAX,CAAZ;;AAMA,MAAMC,mBAAN,SAAkCL,SAAlC,CAAsE;EACpEM,WAAW,CAACC,KAAD,EAAkC;IAC3C,MAAMA,KAAN;IAEA,KAAKC,iBAAL,GAAyB,KAAKA,iBAAL,CAAuBC,IAAvB,CAA4B,IAA5B,CAAzB;IACA,KAAKC,aAAL,GAAqB,KAAKA,aAAL,CAAmBD,IAAnB,CAAwB,IAAxB,CAArB;EACD;;EAEDE,iBAAiB,GAAS;IACxBC,QAAQ,CAACC,IAAT,CAAcC,gBAAd,CAA+B,aAA/B,EAA8C,KAAKN,iBAAnD;IACAI,QAAQ,CAACC,IAAT,CAAcC,gBAAd,CAA+B,SAA/B,EAA0C,KAAKJ,aAA/C;EACD;;EAEDK,oBAAoB,GAAS;IAC3BH,QAAQ,CAACC,IAAT,CAAcG,mBAAd,CAAkC,aAAlC,EAAiD,KAAKR,iBAAtD;IACAI,QAAQ,CAACC,IAAT,CAAcG,mBAAd,CAAkC,SAAlC,EAA6C,KAAKN,aAAlD;EACD;;EAEDF,iBAAiB,CAACS,GAAD,EAAwB;IACvC,IAAMC,CAAC,GAAGD,GAAV;;IACA,IAAI,CAACC,CAAC,CAACC,cAAP,EAAuB;MACrBD,CAAC,CAACC,cAAF,GAAmB,EAAnB;IACD;;IAED,IAAM;MAAEC;IAAF,IAAa,KAAKb,KAAxB;;IAEA,IAAI,CAACa,MAAM,CAACC,KAAR,IAAiB,CAACD,MAAM,CAACE,WAA7B,EAA0C;MACxC;IACD;;IAED,IAAI,CAACJ,CAAC,CAACC,cAAP,EAAuB;MACrBD,CAAC,CAACC,cAAF,GAAmB,EAAnB;IACD;;IAEDD,CAAC,CAACC,cAAF,CAAiBI,IAAjB,CAAsBH,MAAtB;IAEAjB,GAAG,CAACqB,KAAJ,CACE,oEADF,EAEEN,CAAC,CAACC,cAFJ;EAID;;EAEDT,aAAa,CAACQ,CAAD,EAAyB;IAAA;;IACpC,IAAM;MAAEE;IAAF,IAAa,KAAKb,KAAxB;;IACA,IACE,CAACL,kBAAkB,CAACuB,eAApB,wBACAL,MAAM,CAACM,QADP,6CACA,iBAAiBC,YAAjB,CAA8BT,CAA9B,CAFF,EAGE;MAAA;;MACAf,GAAG,CAACqB,KAAJ,CAAU,wBAAV,EAAoCN,CAApC;MAEA,IAAMU,MAAM,qBAAGR,MAAM,CAACA,MAAV,mDAAG,oBAAAA,MAAM,EAAUF,CAAV,CAArB;;MAEA,IAAIU,MAAM,IAAIA,MAAM,KAAKC,SAAzB,EAAoC;QAClCX,CAAC,CAACY,cAAF;QACAZ,CAAC,CAACa,eAAF;MACD;IACF;EACF;;EAEDC,MAAM,GAAS;IACb,OAAO,IAAP;EACD;;AA7DmE;;AAgEtE,eAAe3B,mBAAf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context-actions/GlobalContextActions.tsx"],"names":["React","Component","GlobalContextAction","GlobalContextActions","render","actions","dataTestId","props","actionElements","i","length","action","shortcut","title","menuElement","actionElement","id","push"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;OACOC,mB;;AAQP,MAAMC,oBAAN,SAAmCF,SAAnC,CAAwE;AACtEG,EAAAA,MAAM,GAAoB;AACxB,QAAM;AAAEC,MAAAA,OAAF;AAAW,qBAAeC;AAA1B,QAAyC,KAAKC,KAApD;AACA,QAAMC,cAAc,GAAG,EAAvB;;AACA,SAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,OAAO,CAACK,MAA5B,EAAoCD,CAAC,IAAI,CAAzC,EAA4C;AAC1C,UAAME,MAAM,GAAGN,OAAO,CAACI,CAAD,CAAtB;AACA,UAAM;AAAEG,QAAAA;AAAF,UAAeD,MAArB;;AACA,UAAIA,MAAM,CAACE,KAAP,IAAgBF,MAAM,CAACG,WAAvB,IAAsCF,QAA1C,EAAoD;AAClD,YAAMG,aAAa,gBACjB,oBAAC,mBAAD;AACE,UAAA,GAAG,YAAKJ,MAAM,CAACE,KAAZ,cAAqBD,QAArB,aAAqBA,QAArB,uBAAqBA,QAAQ,CAAEI,EAA/B,CADL;AAEE,UAAA,MAAM,EAAEL,MAFV;AAGE,yBAAaL;AAHf,UADF;AAOAE,QAAAA,cAAc,CAACS,IAAf,CAAoBF,aAApB;AACD;AACF;;AACD,WAAOP,cAAP;AACD;;AAnBqE;;AAsBxE,eAAeL,oBAAf","sourcesContent":["import React, { Component } from 'react';\nimport GlobalContextAction from './GlobalContextAction';\nimport type { ContextAction } from './ContextActionUtils';\n\ninterface GlobalContextActionsProps {\n actions: ContextAction[];\n 'data-testid'?: string;\n}\n\nclass GlobalContextActions extends Component<GlobalContextActionsProps> {\n render(): React.ReactNode {\n const { actions, 'data-testid': dataTestId } = this.props;\n const actionElements = [];\n for (let i = 0; i < actions.length; i += 1) {\n const action = actions[i];\n const { shortcut } = action;\n if (action.title || action.menuElement || shortcut) {\n const actionElement = (\n <GlobalContextAction\n key={`${action.title}.${shortcut?.id}`}\n action={action}\n data-testid={dataTestId}\n />\n );\n actionElements.push(actionElement);\n }\n }\n return actionElements;\n }\n}\n\nexport default GlobalContextActions;\n"],"file":"GlobalContextActions.js"}
1
+ {"version":3,"file":"GlobalContextActions.js","names":["React","Component","GlobalContextAction","GlobalContextActions","render","actions","dataTestId","props","actionElements","i","length","action","shortcut","title","menuElement","actionElement","id","push"],"sources":["../../src/context-actions/GlobalContextActions.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport GlobalContextAction from './GlobalContextAction';\nimport type { ContextAction } from './ContextActionUtils';\n\ninterface GlobalContextActionsProps {\n actions: ContextAction[];\n 'data-testid'?: string;\n}\n\nclass GlobalContextActions extends Component<GlobalContextActionsProps> {\n render(): React.ReactNode {\n const { actions, 'data-testid': dataTestId } = this.props;\n const actionElements = [];\n for (let i = 0; i < actions.length; i += 1) {\n const action = actions[i];\n const { shortcut } = action;\n if (action.title || action.menuElement || shortcut) {\n const actionElement = (\n <GlobalContextAction\n key={`${action.title}.${shortcut?.id}`}\n action={action}\n data-testid={dataTestId}\n />\n );\n actionElements.push(actionElement);\n }\n }\n return actionElements;\n }\n}\n\nexport default GlobalContextActions;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,SAAhB,QAAiC,OAAjC;OACOC,mB;;AAQP,MAAMC,oBAAN,SAAmCF,SAAnC,CAAwE;EACtEG,MAAM,GAAoB;IACxB,IAAM;MAAEC,OAAF;MAAW,eAAeC;IAA1B,IAAyC,KAAKC,KAApD;IACA,IAAMC,cAAc,GAAG,EAAvB;;IACA,KAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGJ,OAAO,CAACK,MAA5B,EAAoCD,CAAC,IAAI,CAAzC,EAA4C;MAC1C,IAAME,MAAM,GAAGN,OAAO,CAACI,CAAD,CAAtB;MACA,IAAM;QAAEG;MAAF,IAAeD,MAArB;;MACA,IAAIA,MAAM,CAACE,KAAP,IAAgBF,MAAM,CAACG,WAAvB,IAAsCF,QAA1C,EAAoD;QAClD,IAAMG,aAAa,gBACjB,oBAAC,mBAAD;UACE,GAAG,YAAKJ,MAAM,CAACE,KAAZ,cAAqBD,QAArB,aAAqBA,QAArB,uBAAqBA,QAAQ,CAAEI,EAA/B,CADL;UAEE,MAAM,EAAEL,MAFV;UAGE,eAAaL;QAHf,EADF;QAOAE,cAAc,CAACS,IAAf,CAAoBF,aAApB;MACD;IACF;;IACD,OAAOP,cAAP;EACD;;AAnBqE;;AAsBxE,eAAeL,oBAAf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/context-actions/index.ts"],"names":["default","ContextActions","ContextActionUtils","ContextMenuItem","ContextMenuRoot"],"mappings":"SAASA,OAAO,IAAIC,c;SACXD,OAAO,IAAIE,kB;SAEXF,OAAO,IAAIG,e;SACXH,OAAO,IAAII,e","sourcesContent":["export { default as ContextActions } from './ContextActions';\nexport { default as ContextActionUtils } from './ContextActionUtils';\nexport type { ContextAction } from './ContextActionUtils';\nexport { default as ContextMenuItem } from './ContextMenuItem';\nexport { default as ContextMenuRoot } from './ContextMenuRoot';\nexport type { ResolvableContextAction } from './ContextActionUtils';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["default","ContextActions","ContextActionUtils","ContextMenuItem","ContextMenuRoot"],"sources":["../../src/context-actions/index.ts"],"sourcesContent":["export { default as ContextActions } from './ContextActions';\nexport { default as ContextActionUtils } from './ContextActionUtils';\nexport type { ContextAction } from './ContextActionUtils';\nexport { default as ContextMenuItem } from './ContextMenuItem';\nexport { default as ContextMenuRoot } from './ContextMenuRoot';\nexport type { ResolvableContextAction } from './ContextActionUtils';\n"],"mappings":"SAASA,OAAO,IAAIC,c;SACXD,OAAO,IAAIE,kB;SAEXF,OAAO,IAAIG,e;SACXH,OAAO,IAAII,e"}
@@ -1 +1 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[],"file":"declaration.d.js"}
1
+ {"version":3,"file":"declaration.d.js","names":[],"sources":["../src/declaration.d.ts"],"sourcesContent":["declare module '*.module.scss' {\n const content: Record<string, string>;\n export default content;\n}\n\ndeclare module '*.scss';\n"],"mappings":""}
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Shim for using jquery in frameworks included by react (such as bootstrap) */
2
- import * as $ from 'jquery';
2
+ import $ from 'jquery';
3
3
  declare global {
4
4
  interface Window {
5
5
  $: typeof $;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Shim for using jquery in frameworks included by react (such as bootstrap) */
2
- import * as $ from 'jquery';
2
+ import $ from 'jquery';
3
3
  window.$ = $;
4
4
  window.jQuery = $;
5
5
  export { default as AutoCompleteInput } from "./AutoCompleteInput.js";
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"names":["$","window","jQuery","default","AutoCompleteInput","AutoResizeTextarea","BasicModal","Button","ButtonGroup","ButtonOld","CardFlip","Collapse","Checkbox","ComboBox","CustomTimeSelect","DebouncedSearchInput","DeephavenSpinner","DraggableItemList","DragUtils","HierarchicalCheckboxMenu","ItemListItem","LoadingOverlay","LoadingSpinner","DropdownMenu","MaskedInput","Option","RadioGroup","RadioItem","Select","SearchInput","SelectValueList","SocketedButton","ThemeExport","TimeInput","TimeSlider","ToastNotification","UISwitch","ValidateLabelInput"],"mappings":"AAAA;AACA,OAAO,KAAKA,CAAZ,MAAmB,QAAnB;AASAC,MAAM,CAACD,CAAP,GAAWA,CAAX;AACAC,MAAM,CAACC,MAAP,GAAgBF,CAAhB;SAGSG,OAAO,IAAIC,iB;SACXD,OAAO,IAAIE,kB;SACXF,OAAO,IAAIG,U;SACXH,OAAO,IAAII,M;SACXJ,OAAO,IAAIK,W;SACXL,OAAO,IAAIM,S;SACXN,OAAO,IAAIO,Q;;SAEXP,OAAO,IAAIQ,Q;SACXR,OAAO,IAAIS,Q;SACXT,OAAO,IAAIU,Q;SACXV,OAAO,IAAIW,gB;SACXX,OAAO,IAAIY,oB;SACXZ,OAAO,IAAIa,gB;SACXb,OAAO,IAAIc,iB;;SAEXd,OAAO,IAAIe,S;SACXf,OAAO,IAAIgB,wB;;;SAGXhB,OAAO,IAAIiB,Y;SACXjB,OAAO,IAAIkB,c;SACXlB,OAAO,IAAImB,c;SACXnB,OAAO,IAAIoB,Y;;SAEXpB,OAAO,IAAIqB,W;;;SAGXrB,OAAO,IAAIsB,M;;;SAGXtB,OAAO,IAAIuB,U;SACXvB,OAAO,IAAIwB,S;SACXxB,OAAO,IAAIyB,M;SACXzB,OAAO,IAAI0B,W;SACX1B,OAAO,IAAI2B,e;;;SAGX3B,OAAO,IAAI4B,c;SACX5B,OAAO,IAAI6B,W;SACX7B,OAAO,IAAI8B,S;SACX9B,OAAO,IAAI+B,U;SACX/B,OAAO,IAAIgC,iB;SACXhC,OAAO,IAAIiC,Q;SACXjC,OAAO,IAAIkC,kB","sourcesContent":["/** Shim for using jquery in frameworks included by react (such as bootstrap) */\nimport * as $ from 'jquery';\n\ndeclare global {\n interface Window {\n $: typeof $;\n jQuery: typeof $;\n }\n}\n\nwindow.$ = $;\nwindow.jQuery = $;\n\nexport type { Range } from '@deephaven/utils';\nexport { default as AutoCompleteInput } from './AutoCompleteInput';\nexport { default as AutoResizeTextarea } from './AutoResizeTextarea';\nexport { default as BasicModal } from './BasicModal';\nexport { default as Button } from './Button';\nexport { default as ButtonGroup } from './ButtonGroup';\nexport { default as ButtonOld } from './ButtonOld';\nexport { default as CardFlip } from './CardFlip';\nexport * from './context-actions';\nexport { default as Collapse } from './Collapse';\nexport { default as Checkbox } from './Checkbox';\nexport { default as ComboBox } from './ComboBox';\nexport { default as CustomTimeSelect } from './CustomTimeSelect';\nexport { default as DebouncedSearchInput } from './DebouncedSearchInput';\nexport { default as DeephavenSpinner } from './DeephavenSpinner';\nexport { default as DraggableItemList } from './DraggableItemList';\nexport * from './DraggableItemList';\nexport { default as DragUtils } from './DragUtils';\nexport { default as HierarchicalCheckboxMenu } from './HierarchicalCheckboxMenu';\nexport * from './HierarchicalCheckboxMenu';\nexport * from './ItemList';\nexport { default as ItemListItem } from './ItemListItem';\nexport { default as LoadingOverlay } from './LoadingOverlay';\nexport { default as LoadingSpinner } from './LoadingSpinner';\nexport { default as DropdownMenu } from './menu-actions';\nexport * from './menu-actions';\nexport { default as MaskedInput } from './MaskedInput';\nexport * from './MaskedInput';\nexport * from './navigation';\nexport { default as Option } from './Option';\nexport * from './popper';\nexport * from './modal';\nexport { default as RadioGroup } from './RadioGroup';\nexport { default as RadioItem } from './RadioItem';\nexport { default as Select } from './Select';\nexport { default as SearchInput } from './SearchInput';\nexport { default as SelectValueList } from './SelectValueList';\nexport * from './SelectValueList';\nexport * from './shortcuts';\nexport { default as SocketedButton } from './SocketedButton';\nexport { default as ThemeExport } from './ThemeExport';\nexport { default as TimeInput } from './TimeInput';\nexport { default as TimeSlider } from './TimeSlider';\nexport { default as ToastNotification } from './ToastNotification';\nexport { default as UISwitch } from './UISwitch';\nexport { default as ValidateLabelInput } from './ValidateLabelInput';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["$","window","jQuery","default","AutoCompleteInput","AutoResizeTextarea","BasicModal","Button","ButtonGroup","ButtonOld","CardFlip","Collapse","Checkbox","ComboBox","CustomTimeSelect","DebouncedSearchInput","DeephavenSpinner","DraggableItemList","DragUtils","HierarchicalCheckboxMenu","ItemListItem","LoadingOverlay","LoadingSpinner","DropdownMenu","MaskedInput","Option","RadioGroup","RadioItem","Select","SearchInput","SelectValueList","SocketedButton","ThemeExport","TimeInput","TimeSlider","ToastNotification","UISwitch","ValidateLabelInput"],"sources":["../src/index.ts"],"sourcesContent":["/** Shim for using jquery in frameworks included by react (such as bootstrap) */\nimport $ from 'jquery';\n\ndeclare global {\n interface Window {\n $: typeof $;\n jQuery: typeof $;\n }\n}\n\nwindow.$ = $;\nwindow.jQuery = $;\n\nexport type { Range } from '@deephaven/utils';\nexport { default as AutoCompleteInput } from './AutoCompleteInput';\nexport { default as AutoResizeTextarea } from './AutoResizeTextarea';\nexport { default as BasicModal } from './BasicModal';\nexport { default as Button } from './Button';\nexport { default as ButtonGroup } from './ButtonGroup';\nexport { default as ButtonOld } from './ButtonOld';\nexport { default as CardFlip } from './CardFlip';\nexport * from './context-actions';\nexport { default as Collapse } from './Collapse';\nexport { default as Checkbox } from './Checkbox';\nexport { default as ComboBox } from './ComboBox';\nexport { default as CustomTimeSelect } from './CustomTimeSelect';\nexport { default as DebouncedSearchInput } from './DebouncedSearchInput';\nexport { default as DeephavenSpinner } from './DeephavenSpinner';\nexport { default as DraggableItemList } from './DraggableItemList';\nexport * from './DraggableItemList';\nexport { default as DragUtils } from './DragUtils';\nexport { default as HierarchicalCheckboxMenu } from './HierarchicalCheckboxMenu';\nexport * from './HierarchicalCheckboxMenu';\nexport * from './ItemList';\nexport { default as ItemListItem } from './ItemListItem';\nexport { default as LoadingOverlay } from './LoadingOverlay';\nexport { default as LoadingSpinner } from './LoadingSpinner';\nexport { default as DropdownMenu } from './menu-actions';\nexport * from './menu-actions';\nexport { default as MaskedInput } from './MaskedInput';\nexport * from './MaskedInput';\nexport * from './navigation';\nexport { default as Option } from './Option';\nexport * from './popper';\nexport * from './modal';\nexport { default as RadioGroup } from './RadioGroup';\nexport { default as RadioItem } from './RadioItem';\nexport { default as Select } from './Select';\nexport { default as SearchInput } from './SearchInput';\nexport { default as SelectValueList } from './SelectValueList';\nexport * from './SelectValueList';\nexport * from './shortcuts';\nexport { default as SocketedButton } from './SocketedButton';\nexport { default as ThemeExport } from './ThemeExport';\nexport { default as TimeInput } from './TimeInput';\nexport { default as TimeSlider } from './TimeSlider';\nexport { default as ToastNotification } from './ToastNotification';\nexport { default as UISwitch } from './UISwitch';\nexport { default as ValidateLabelInput } from './ValidateLabelInput';\n"],"mappings":"AAAA;AACA,OAAOA,CAAP,MAAc,QAAd;AASAC,MAAM,CAACD,CAAP,GAAWA,CAAX;AACAC,MAAM,CAACC,MAAP,GAAgBF,CAAhB;SAGSG,OAAO,IAAIC,iB;SACXD,OAAO,IAAIE,kB;SACXF,OAAO,IAAIG,U;SACXH,OAAO,IAAII,M;SACXJ,OAAO,IAAIK,W;SACXL,OAAO,IAAIM,S;SACXN,OAAO,IAAIO,Q;;SAEXP,OAAO,IAAIQ,Q;SACXR,OAAO,IAAIS,Q;SACXT,OAAO,IAAIU,Q;SACXV,OAAO,IAAIW,gB;SACXX,OAAO,IAAIY,oB;SACXZ,OAAO,IAAIa,gB;SACXb,OAAO,IAAIc,iB;;SAEXd,OAAO,IAAIe,S;SACXf,OAAO,IAAIgB,wB;;;SAGXhB,OAAO,IAAIiB,Y;SACXjB,OAAO,IAAIkB,c;SACXlB,OAAO,IAAImB,c;SACXnB,OAAO,IAAIoB,Y;;SAEXpB,OAAO,IAAIqB,W;;;SAGXrB,OAAO,IAAIsB,M;;;SAGXtB,OAAO,IAAIuB,U;SACXvB,OAAO,IAAIwB,S;SACXxB,OAAO,IAAIyB,M;SACXzB,OAAO,IAAI0B,W;SACX1B,OAAO,IAAI2B,e;;;SAGX3B,OAAO,IAAI4B,c;SACX5B,OAAO,IAAI6B,W;SACX7B,OAAO,IAAI8B,S;SACX9B,OAAO,IAAI+B,U;SACX/B,OAAO,IAAIgC,iB;SACXhC,OAAO,IAAIiC,Q;SACXjC,OAAO,IAAIkC,kB"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/menu-actions/DropdownMenu.tsx"],"names":["React","PureComponent","classNames","Popper","Menu","DropdownMenu","constructor","props","handleClick","bind","handleCloseMenu","handleExited","container","createRef","parent","popper","isOpen","componentDidMount","isShown","current","parentElement","addEventListener","openMenu","componentDidUpdate","prevProps","window","requestAnimationFrame","closeMenu","componentWillUnmount","removeEventListener","hide","show","scheduleUpdate","e","preventDefault","stopPropagation","onMenuClosed","render","actions","onMenuOpened","popperClassName","dataTestId","menuStyle","options","popperOptions","placement","separateKeyboardMouse","undefined"],"mappings":"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","sourcesContent":["/**\n * Add dropdown menu that you add onto any component.\n *\n * Similar to the context-actions package, accepts list of actions to create a dropdown menu.\n * Note: Does not support nested sub-menus.\n *\n * Usage:\n * let actions = [{\n * title: 'My Action',\n * action: () => { alert('My Action Clicked!') }\n * icon: faPrint, // Limited to FontAwesome icons for now.\n * shortcut: Shortcut, // Shortcut class instance\n * group: ContextActions.groups.default, // What group to group the context action with\n * order: null // Int where to order within group\n * }];\n *\n * Usage:\n * 1. Auto bind click to open event to parent\n * <div>\n * Click in this container\n * <DropdownMenu actions={actions}/>\n * </div>\n *\n * 2. Control via prop\n * <div>\n * DropdownMenu will not react to the click event if isShown prop is used\n * <DropdownMenu actions={actions} isShown={isShown} />\n * </div>\n *\n */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport { Popper } from '../popper';\nimport Menu, { MenuOptions } from './Menu';\nimport { ContextAction } from '../context-actions/ContextActionUtils';\nimport './DropdownMenu.scss';\n\nexport type DropdownAction = ContextAction & { actions?: never };\n\nexport type DropdownActions = DropdownAction | DropdownAction[];\n\ntype DropdownMenuProps = {\n // Override to prevent nested lists\n actions: DropdownActions;\n isShown: boolean | null;\n onMenuClosed(): void;\n onMenuOpened(): void;\n options: MenuOptions;\n popperOptions: PopperOptions;\n popperClassName: string;\n menuStyle: React.CSSProperties;\n 'data-testid'?: string;\n};\n\nclass DropdownMenu extends PureComponent<DropdownMenuProps> {\n static defaultProps = {\n isShown: null,\n onMenuClosed(): void {\n // no-op\n },\n onMenuOpened(): void {\n // no-op\n },\n options: {},\n popperOptions: {},\n popperClassName: '',\n menuStyle: {},\n 'data-testid': undefined,\n };\n\n constructor(props: DropdownMenuProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleCloseMenu = this.handleCloseMenu.bind(this);\n this.handleExited = this.handleExited.bind(this);\n\n this.container = React.createRef();\n this.parent = null;\n this.popper = React.createRef();\n\n this.isOpen = false;\n }\n\n componentDidMount(): void {\n const { isShown } = this.props;\n\n if (isShown === null) {\n if (this.container.current?.parentElement) {\n this.parent = this.container.current.parentElement;\n this.parent.addEventListener('click', this.handleClick);\n }\n } else if (isShown) {\n this.openMenu();\n }\n }\n\n componentDidUpdate(prevProps: DropdownMenuProps): void {\n const { isShown } = this.props;\n\n if (prevProps.isShown !== isShown) {\n if (isShown) {\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n this.openMenu();\n });\n } else {\n this.closeMenu();\n }\n }\n }\n\n componentWillUnmount(): void {\n if (this.parent) {\n this.parent.removeEventListener('click', this.handleClick);\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n parent: Element | null;\n\n popper: React.RefObject<Popper>;\n\n isOpen: boolean;\n\n closeMenu(): void {\n this.popper.current?.hide();\n }\n\n openMenu(): void {\n if (this.popper.current && !this.isOpen) {\n this.popper.current.show();\n this.isOpen = true;\n }\n }\n\n scheduleUpdate(): void {\n this.popper.current?.scheduleUpdate();\n }\n\n handleClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n\n this.openMenu();\n }\n\n handleCloseMenu(): void {\n this.closeMenu();\n }\n\n handleExited(): void {\n this.isOpen = false;\n\n const { onMenuClosed } = this.props;\n onMenuClosed();\n }\n\n render(): JSX.Element {\n const {\n actions,\n onMenuOpened,\n popperClassName,\n 'data-testid': dataTestId,\n } = this.props;\n const { menuStyle } = this.props;\n let { options, popperOptions } = this.props;\n popperOptions = { placement: 'bottom', ...popperOptions };\n options = {\n separateKeyboardMouse: true,\n ...options,\n };\n return (\n <div\n className=\"menu-actions-listener\"\n ref={this.container}\n data-testid={dataTestId}\n >\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('menu-popper', popperClassName)}\n onExited={this.handleExited}\n closeOnBlur\n interactive\n >\n <Menu\n actions={actions}\n closeMenu={this.handleCloseMenu}\n onMenuOpened={onMenuOpened}\n options={options}\n menuStyle={menuStyle}\n />\n </Popper>\n </div>\n );\n }\n}\n\nexport default DropdownMenu;\n"],"file":"DropdownMenu.js"}
1
+ {"version":3,"file":"DropdownMenu.js","names":["React","PureComponent","classNames","Popper","Menu","DropdownMenu","constructor","props","handleClick","bind","handleCloseMenu","handleExited","container","createRef","parent","popper","isOpen","componentDidMount","isShown","current","parentElement","addEventListener","openMenu","componentDidUpdate","prevProps","window","requestAnimationFrame","closeMenu","componentWillUnmount","removeEventListener","hide","show","scheduleUpdate","e","preventDefault","stopPropagation","onMenuClosed","render","actions","onMenuOpened","popperClassName","dataTestId","menuStyle","options","popperOptions","placement","separateKeyboardMouse","undefined"],"sources":["../../src/menu-actions/DropdownMenu.tsx"],"sourcesContent":["/**\n * Add dropdown menu that you add onto any component.\n *\n * Similar to the context-actions package, accepts list of actions to create a dropdown menu.\n * Note: Does not support nested sub-menus.\n *\n * Usage:\n * let actions = [{\n * title: 'My Action',\n * action: () => { alert('My Action Clicked!') }\n * icon: faPrint, // Limited to FontAwesome icons for now.\n * shortcut: Shortcut, // Shortcut class instance\n * group: ContextActions.groups.default, // What group to group the context action with\n * order: null // Int where to order within group\n * }];\n *\n * Usage:\n * 1. Auto bind click to open event to parent\n * <div>\n * Click in this container\n * <DropdownMenu actions={actions}/>\n * </div>\n *\n * 2. Control via prop\n * <div>\n * DropdownMenu will not react to the click event if isShown prop is used\n * <DropdownMenu actions={actions} isShown={isShown} />\n * </div>\n *\n */\nimport React, { PureComponent } from 'react';\nimport classNames from 'classnames';\nimport { PopperOptions } from 'popper.js';\nimport { Popper } from '../popper';\nimport Menu, { MenuOptions } from './Menu';\nimport { ContextAction } from '../context-actions/ContextActionUtils';\nimport './DropdownMenu.scss';\n\nexport type DropdownAction = ContextAction & { actions?: never };\n\nexport type DropdownActions = DropdownAction | DropdownAction[];\n\ntype DropdownMenuProps = {\n // Override to prevent nested lists\n actions: DropdownActions;\n isShown: boolean | null;\n onMenuClosed(): void;\n onMenuOpened(): void;\n options: MenuOptions;\n popperOptions: PopperOptions;\n popperClassName: string;\n menuStyle: React.CSSProperties;\n 'data-testid'?: string;\n};\n\nclass DropdownMenu extends PureComponent<DropdownMenuProps> {\n static defaultProps = {\n isShown: null,\n onMenuClosed(): void {\n // no-op\n },\n onMenuOpened(): void {\n // no-op\n },\n options: {},\n popperOptions: {},\n popperClassName: '',\n menuStyle: {},\n 'data-testid': undefined,\n };\n\n constructor(props: DropdownMenuProps) {\n super(props);\n\n this.handleClick = this.handleClick.bind(this);\n this.handleCloseMenu = this.handleCloseMenu.bind(this);\n this.handleExited = this.handleExited.bind(this);\n\n this.container = React.createRef();\n this.parent = null;\n this.popper = React.createRef();\n\n this.isOpen = false;\n }\n\n componentDidMount(): void {\n const { isShown } = this.props;\n\n if (isShown === null) {\n if (this.container.current?.parentElement) {\n this.parent = this.container.current.parentElement;\n this.parent.addEventListener('click', this.handleClick);\n }\n } else if (isShown) {\n this.openMenu();\n }\n }\n\n componentDidUpdate(prevProps: DropdownMenuProps): void {\n const { isShown } = this.props;\n\n if (prevProps.isShown !== isShown) {\n if (isShown) {\n // https://github.com/reactjs/react-transition-group/issues/382\n window.requestAnimationFrame(() => {\n this.openMenu();\n });\n } else {\n this.closeMenu();\n }\n }\n }\n\n componentWillUnmount(): void {\n if (this.parent) {\n this.parent.removeEventListener('click', this.handleClick);\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n parent: Element | null;\n\n popper: React.RefObject<Popper>;\n\n isOpen: boolean;\n\n closeMenu(): void {\n this.popper.current?.hide();\n }\n\n openMenu(): void {\n if (this.popper.current && !this.isOpen) {\n this.popper.current.show();\n this.isOpen = true;\n }\n }\n\n scheduleUpdate(): void {\n this.popper.current?.scheduleUpdate();\n }\n\n handleClick(e: Event): void {\n e.preventDefault();\n e.stopPropagation();\n\n this.openMenu();\n }\n\n handleCloseMenu(): void {\n this.closeMenu();\n }\n\n handleExited(): void {\n this.isOpen = false;\n\n const { onMenuClosed } = this.props;\n onMenuClosed();\n }\n\n render(): JSX.Element {\n const {\n actions,\n onMenuOpened,\n popperClassName,\n 'data-testid': dataTestId,\n } = this.props;\n const { menuStyle } = this.props;\n let { options, popperOptions } = this.props;\n popperOptions = { placement: 'bottom', ...popperOptions };\n options = {\n separateKeyboardMouse: true,\n ...options,\n };\n return (\n <div\n className=\"menu-actions-listener\"\n ref={this.container}\n data-testid={dataTestId}\n >\n <Popper\n ref={this.popper}\n options={popperOptions}\n className={classNames('menu-popper', popperClassName)}\n onExited={this.handleExited}\n closeOnBlur\n interactive\n >\n <Menu\n actions={actions}\n closeMenu={this.handleCloseMenu}\n onMenuOpened={onMenuOpened}\n options={options}\n menuStyle={menuStyle}\n />\n </Popper>\n </div>\n );\n }\n}\n\nexport default DropdownMenu;\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;AACA,OAAOC,UAAP,MAAuB,YAAvB;SAESC,M;OACFC,I;;;AAqBP,MAAMC,YAAN,SAA2BJ,aAA3B,CAA4D;EAgB1DK,WAAW,CAACC,KAAD,EAA2B;IACpC,MAAMA,KAAN;;IADoC;;IAAA;;IAAA;;IAAA;;IAGpC,KAAKC,WAAL,GAAmB,KAAKA,WAAL,CAAiBC,IAAjB,CAAsB,IAAtB,CAAnB;IACA,KAAKC,eAAL,GAAuB,KAAKA,eAAL,CAAqBD,IAArB,CAA0B,IAA1B,CAAvB;IACA,KAAKE,YAAL,GAAoB,KAAKA,YAAL,CAAkBF,IAAlB,CAAuB,IAAvB,CAApB;IAEA,KAAKG,SAAL,gBAAiBZ,KAAK,CAACa,SAAN,EAAjB;IACA,KAAKC,MAAL,GAAc,IAAd;IACA,KAAKC,MAAL,gBAAcf,KAAK,CAACa,SAAN,EAAd;IAEA,KAAKG,MAAL,GAAc,KAAd;EACD;;EAEDC,iBAAiB,GAAS;IACxB,IAAM;MAAEC;IAAF,IAAc,KAAKX,KAAzB;;IAEA,IAAIW,OAAO,KAAK,IAAhB,EAAsB;MAAA;;MACpB,6BAAI,KAAKN,SAAL,CAAeO,OAAnB,kDAAI,sBAAwBC,aAA5B,EAA2C;QACzC,KAAKN,MAAL,GAAc,KAAKF,SAAL,CAAeO,OAAf,CAAuBC,aAArC;QACA,KAAKN,MAAL,CAAYO,gBAAZ,CAA6B,OAA7B,EAAsC,KAAKb,WAA3C;MACD;IACF,CALD,MAKO,IAAIU,OAAJ,EAAa;MAClB,KAAKI,QAAL;IACD;EACF;;EAEDC,kBAAkB,CAACC,SAAD,EAAqC;IACrD,IAAM;MAAEN;IAAF,IAAc,KAAKX,KAAzB;;IAEA,IAAIiB,SAAS,CAACN,OAAV,KAAsBA,OAA1B,EAAmC;MACjC,IAAIA,OAAJ,EAAa;QACX;QACAO,MAAM,CAACC,qBAAP,CAA6B,MAAM;UACjC,KAAKJ,QAAL;QACD,CAFD;MAGD,CALD,MAKO;QACL,KAAKK,SAAL;MACD;IACF;EACF;;EAEDC,oBAAoB,GAAS;IAC3B,IAAI,KAAKd,MAAT,EAAiB;MACf,KAAKA,MAAL,CAAYe,mBAAZ,CAAgC,OAAhC,EAAyC,KAAKrB,WAA9C;IACD;EACF;;EAUDmB,SAAS,GAAS;IAAA;;IAChB,6BAAKZ,MAAL,CAAYI,OAAZ,8EAAqBW,IAArB;EACD;;EAEDR,QAAQ,GAAS;IACf,IAAI,KAAKP,MAAL,CAAYI,OAAZ,IAAuB,CAAC,KAAKH,MAAjC,EAAyC;MACvC,KAAKD,MAAL,CAAYI,OAAZ,CAAoBY,IAApB;MACA,KAAKf,MAAL,GAAc,IAAd;IACD;EACF;;EAEDgB,cAAc,GAAS;IAAA;;IACrB,8BAAKjB,MAAL,CAAYI,OAAZ,gFAAqBa,cAArB;EACD;;EAEDxB,WAAW,CAACyB,CAAD,EAAiB;IAC1BA,CAAC,CAACC,cAAF;IACAD,CAAC,CAACE,eAAF;IAEA,KAAKb,QAAL;EACD;;EAEDZ,eAAe,GAAS;IACtB,KAAKiB,SAAL;EACD;;EAEDhB,YAAY,GAAS;IACnB,KAAKK,MAAL,GAAc,KAAd;IAEA,IAAM;MAAEoB;IAAF,IAAmB,KAAK7B,KAA9B;IACA6B,YAAY;EACb;;EAEDC,MAAM,GAAgB;IACpB,IAAM;MACJC,OADI;MAEJC,YAFI;MAGJC,eAHI;MAIJ,eAAeC;IAJX,IAKF,KAAKlC,KALT;IAMA,IAAM;MAAEmC;IAAF,IAAgB,KAAKnC,KAA3B;IACA,IAAI;MAAEoC,OAAF;MAAWC;IAAX,IAA6B,KAAKrC,KAAtC;IACAqC,aAAa;MAAKC,SAAS,EAAE;IAAhB,GAA6BD,aAA7B,CAAb;IACAD,OAAO;MACLG,qBAAqB,EAAE;IADlB,GAEFH,OAFE,CAAP;IAIA,oBACE;MACE,SAAS,EAAC,uBADZ;MAEE,GAAG,EAAE,KAAK/B,SAFZ;MAGE,eAAa6B;IAHf,gBAKE,oBAAC,MAAD;MACE,GAAG,EAAE,KAAK1B,MADZ;MAEE,OAAO,EAAE6B,aAFX;MAGE,SAAS,EAAE1C,UAAU,CAAC,aAAD,EAAgBsC,eAAhB,CAHvB;MAIE,QAAQ,EAAE,KAAK7B,YAJjB;MAKE,WAAW,MALb;MAME,WAAW;IANb,gBAQE,oBAAC,IAAD;MACE,OAAO,EAAE2B,OADX;MAEE,SAAS,EAAE,KAAK5B,eAFlB;MAGE,YAAY,EAAE6B,YAHhB;MAIE,OAAO,EAAEI,OAJX;MAKE,SAAS,EAAED;IALb,EARF,CALF,CADF;EAwBD;;AA/IyD;;gBAAtDrC,Y,kBACkB;EACpBa,OAAO,EAAE,IADW;;EAEpBkB,YAAY,GAAS,CACnB;EACD,CAJmB;;EAKpBG,YAAY,GAAS,CACnB;EACD,CAPmB;;EAQpBI,OAAO,EAAE,EARW;EASpBC,aAAa,EAAE,EATK;EAUpBJ,eAAe,EAAE,EAVG;EAWpBE,SAAS,EAAE,EAXS;EAYpB,eAAeK;AAZK,C;;AAiJxB,eAAe1C,YAAf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/menu-actions/Menu.tsx"],"names":["React","PureComponent","ContextActionUtils","ContextMenuItem","Menu","constructor","props","handleKeyDown","bind","handleMenuItemClick","handleMenuItemMouseMove","handleMouseLeave","handleCloseMenu","container","createRef","oldFocus","document","activeElement","rAF","options","keyboardIndex","initialKeyboardIndex","state","menuItems","mouseIndex","componentDidMount","initMenu","window","requestAnimationFrame","current","focus","onMenuOpened","componentDidUpdate","prevProps","actions","componentWillUnmount","cancelAnimationFrame","getKeyboardIndex","separateKeyboardMouse","getMouseIndex","setKeyboardIndex","index","setState","setMouseIndex","getMenuItems","length","sortActions","concat","e","newFocus","key","shiftKey","getNextMenuItem","closeMenu","HTMLElement","preventDefault","stopPropagation","closeAll","onMenuClosed","menuItem","disabled","action","focusIndex","indexOf","render","menuItemElements","dataTestId","i","group","push","menuItemElement","menuStyle","undefined"],"mappings":"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","sourcesContent":["import React, { PureComponent } from 'react';\nimport ContextActionUtils, {\n 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[];\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\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 (options.separateKeyboardMouse) {\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 (options.separateKeyboardMouse) {\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 (menuItem != null && !menuItem.disabled && menuItem.action != null) {\n menuItem.action();\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"],"file":"Menu.js"}
1
+ {"version":3,"file":"Menu.js","names":["React","PureComponent","ContextActionUtils","ContextMenuItem","Menu","constructor","props","handleKeyDown","bind","handleMenuItemClick","handleMenuItemMouseMove","handleMouseLeave","handleCloseMenu","container","createRef","oldFocus","document","activeElement","rAF","options","keyboardIndex","initialKeyboardIndex","state","menuItems","mouseIndex","componentDidMount","initMenu","window","requestAnimationFrame","current","focus","onMenuOpened","componentDidUpdate","prevProps","actions","componentWillUnmount","cancelAnimationFrame","getKeyboardIndex","separateKeyboardMouse","getMouseIndex","setKeyboardIndex","index","setState","setMouseIndex","getMenuItems","length","sortActions","concat","e","newFocus","key","shiftKey","getNextMenuItem","closeMenu","HTMLElement","preventDefault","stopPropagation","closeAll","onMenuClosed","menuItem","disabled","action","focusIndex","indexOf","render","menuItemElements","dataTestId","i","group","push","menuItemElement","menuStyle","undefined"],"sources":["../../src/menu-actions/Menu.tsx"],"sourcesContent":["import React, { PureComponent } from 'react';\nimport ContextActionUtils, {\n 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[];\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\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 (options.separateKeyboardMouse) {\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 (options.separateKeyboardMouse) {\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 (menuItem != null && !menuItem.disabled && menuItem.action != null) {\n menuItem.action();\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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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/menu-actions/index.ts"],"names":["default"],"mappings":"AAAA;SACSA,O","sourcesContent":["// Note this exports as the default for this module\nexport { default } from './DropdownMenu';\nexport * from './DropdownMenu';\n"],"file":"index.js"}
1
+ {"version":3,"file":"index.js","names":["default"],"sources":["../../src/menu-actions/index.ts"],"sourcesContent":["// Note this exports as the default for this module\nexport { default } from './DropdownMenu';\nexport * from './DropdownMenu';\n"],"mappings":"AAAA;SACSA,O"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/modal/Modal.tsx"],"names":["classNames","React","useCallback","useEffect","useRef","ReactDOM","CSSTransition","ThemeExport","Modal","className","children","role","keyboard","isOpen","centered","size","onOpened","onClosed","toggle","dataTestId","element","handleKeyDown","event","key","addKeydownEventListener","window","addEventListener","removeEventListener","open","closed","current","document","createElement","setAttribute","body","appendChild","onExited","removeChild","undefined","createPortal","appearActive","appearDone","transitionMs","zIndex","display","e","stopPropagation"],"mappings":"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","sourcesContent":["import classNames from 'classnames';\nimport React, {\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport ThemeExport from '../ThemeExport';\n\ninterface ModalProps {\n className?: string;\n children?: ReactNode;\n role?: string;\n keyboard?: 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\nconst Modal = ({\n className = 'theme-bg-light',\n children,\n role = 'role',\n keyboard = true,\n isOpen = false,\n centered = false,\n size,\n onOpened,\n onClosed,\n toggle,\n 'data-testid': dataTestId,\n}: ModalProps): ReactElement => {\n const element = useRef<HTMLElement>();\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 = () => {\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 <>\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 >\n <div\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 >\n <div\n className=\"modal fade\"\n onClick={toggle}\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 onClick={e => e.stopPropagation()}\n role=\"presentation\"\n data-testid={dataTestId}\n >\n {children}\n </div>\n </div>\n </div>\n </CSSTransition>\n </>,\n element.current\n )\n ) : (\n <></>\n );\n};\n\nexport default Modal;\n"],"file":"Modal.js"}
1
+ {"version":3,"file":"Modal.js","names":["classNames","React","useCallback","useEffect","useRef","ReactDOM","CSSTransition","ThemeExport","Modal","className","children","role","keyboard","isOpen","centered","size","onOpened","onClosed","toggle","dataTestId","element","handleKeyDown","event","key","addKeydownEventListener","window","addEventListener","removeEventListener","open","closed","current","document","createElement","setAttribute","body","appendChild","onExited","removeChild","undefined","createPortal","appearActive","appearDone","transitionMs","zIndex","display","e","stopPropagation"],"sources":["../../src/modal/Modal.tsx"],"sourcesContent":["import classNames from 'classnames';\nimport React, {\n ReactElement,\n ReactNode,\n useCallback,\n useEffect,\n useRef,\n} from 'react';\nimport ReactDOM from 'react-dom';\nimport { CSSTransition } from 'react-transition-group';\nimport ThemeExport from '../ThemeExport';\n\ninterface ModalProps {\n className?: string;\n children?: ReactNode;\n role?: string;\n keyboard?: 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\nconst Modal = ({\n className = 'theme-bg-light',\n children,\n role = 'role',\n keyboard = true,\n isOpen = false,\n centered = false,\n size,\n onOpened,\n onClosed,\n toggle,\n 'data-testid': dataTestId,\n}: ModalProps): ReactElement => {\n const element = useRef<HTMLElement>();\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 = () => {\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 <>\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 >\n <div\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 >\n <div\n className=\"modal fade\"\n onClick={toggle}\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 onClick={e => e.stopPropagation()}\n role=\"presentation\"\n data-testid={dataTestId}\n >\n {children}\n </div>\n </div>\n </div>\n </CSSTransition>\n </>,\n element.current\n )\n ) : (\n <></>\n );\n};\n\nexport default Modal;\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/modal/ModalBody.tsx"],"names":["React","ModalBody","className","style","children","dataTestId"],"mappings":"AAAA,OAAOA,KAAP,MAA8D,OAA9D;;AASA,IAAMC,SAAS,GAAG;AAAA,MAAC;AACjBC,IAAAA,SAAS,GAAG,YADK;AAEjBC,IAAAA,KAFiB;AAGjBC,IAAAA,QAHiB;AAIjB,mBAAeC;AAJE,GAAD;AAAA,sBAMhB;AAAK,IAAA,SAAS,EAAEH,SAAhB;AAA2B,mBAAaG,UAAxC;AAAoD,IAAA,KAAK,EAAEF;AAA3D,KACGC,QADH,CANgB;AAAA,CAAlB;;AAWA,eAAeH,SAAf","sourcesContent":["import React, { CSSProperties, ReactElement, ReactNode } from 'react';\n\ninterface ModalBodyProps {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nconst ModalBody = ({\n className = 'modal-body',\n style,\n children,\n 'data-testid': dataTestId,\n}: ModalBodyProps): ReactElement => (\n <div className={className} data-testid={dataTestId} style={style}>\n {children}\n </div>\n);\n\nexport default ModalBody;\n"],"file":"ModalBody.js"}
1
+ {"version":3,"file":"ModalBody.js","names":["React","ModalBody","className","style","children","dataTestId"],"sources":["../../src/modal/ModalBody.tsx"],"sourcesContent":["import React, { CSSProperties, ReactElement, ReactNode } from 'react';\n\ninterface ModalBodyProps {\n className?: string;\n style?: CSSProperties;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nconst ModalBody = ({\n className = 'modal-body',\n style,\n children,\n 'data-testid': dataTestId,\n}: ModalBodyProps): ReactElement => (\n <div className={className} data-testid={dataTestId} style={style}>\n {children}\n </div>\n);\n\nexport default ModalBody;\n"],"mappings":"AAAA,OAAOA,KAAP,MAA8D,OAA9D;;AASA,IAAMC,SAAS,GAAG;EAAA,IAAC;IACjBC,SAAS,GAAG,YADK;IAEjBC,KAFiB;IAGjBC,QAHiB;IAIjB,eAAeC;EAJE,CAAD;EAAA,oBAMhB;IAAK,SAAS,EAAEH,SAAhB;IAA2B,eAAaG,UAAxC;IAAoD,KAAK,EAAEF;EAA3D,GACGC,QADH,CANgB;AAAA,CAAlB;;AAWA,eAAeH,SAAf"}
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/modal/ModalFooter.tsx"],"names":["React","ModalFooter","className","children","dataTestId"],"mappings":"AAAA,OAAOA,KAAP,MAA+C,OAA/C;;AAQA,IAAMC,WAAW,GAAG;AAAA,MAAC;AACnBC,IAAAA,SAAS,GAAG,cADO;AAEnBC,IAAAA,QAFmB;AAGnB,mBAAeC;AAHI,GAAD;AAAA,sBAKlB;AAAK,IAAA,SAAS,EAAEF,SAAhB;AAA2B,mBAAaE;AAAxC,KACGD,QADH,CALkB;AAAA,CAApB;;AAUA,eAAeF,WAAf","sourcesContent":["import React, { ReactElement, ReactNode } from 'react';\n\ninterface ModalFooterProps {\n className?: string;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nconst ModalFooter = ({\n className = 'modal-footer',\n children,\n 'data-testid': dataTestId,\n}: ModalFooterProps): ReactElement => (\n <div className={className} data-testid={dataTestId}>\n {children}\n </div>\n);\n\nexport default ModalFooter;\n"],"file":"ModalFooter.js"}
1
+ {"version":3,"file":"ModalFooter.js","names":["React","ModalFooter","className","children","dataTestId"],"sources":["../../src/modal/ModalFooter.tsx"],"sourcesContent":["import React, { ReactElement, ReactNode } from 'react';\n\ninterface ModalFooterProps {\n className?: string;\n children?: ReactNode;\n 'data-testid'?: string;\n}\n\nconst ModalFooter = ({\n className = 'modal-footer',\n children,\n 'data-testid': dataTestId,\n}: ModalFooterProps): ReactElement => (\n <div className={className} data-testid={dataTestId}>\n {children}\n </div>\n);\n\nexport default ModalFooter;\n"],"mappings":"AAAA,OAAOA,KAAP,MAA+C,OAA/C;;AAQA,IAAMC,WAAW,GAAG;EAAA,IAAC;IACnBC,SAAS,GAAG,cADO;IAEnBC,QAFmB;IAGnB,eAAeC;EAHI,CAAD;EAAA,oBAKlB;IAAK,SAAS,EAAEF,SAAhB;IAA2B,eAAaE;EAAxC,GACGD,QADH,CALkB;AAAA,CAApB;;AAUA,eAAeF,WAAf"}