@deephaven/components 0.22.3-beta.18 → 0.22.3-beta.21

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 (178) hide show
  1. package/dist/AutoCompleteInput.js +12 -85
  2. package/dist/AutoCompleteInput.js.map +1 -1
  3. package/dist/AutoResizeTextarea.d.ts +5 -5
  4. package/dist/AutoResizeTextarea.d.ts.map +1 -1
  5. package/dist/AutoResizeTextarea.js +8 -23
  6. package/dist/AutoResizeTextarea.js.map +1 -1
  7. package/dist/BasicModal.d.ts +28 -1
  8. package/dist/BasicModal.d.ts.map +1 -1
  9. package/dist/BasicModal.js +2 -8
  10. package/dist/BasicModal.js.map +1 -1
  11. package/dist/Button.js +8 -34
  12. package/dist/Button.js.map +1 -1
  13. package/dist/ButtonGroup.d.ts +6 -6
  14. package/dist/ButtonGroup.d.ts.map +1 -1
  15. package/dist/ButtonGroup.js +2 -4
  16. package/dist/ButtonGroup.js.map +1 -1
  17. package/dist/ButtonOld.js.map +1 -1
  18. package/dist/CardFlip.d.ts +1 -1
  19. package/dist/CardFlip.d.ts.map +1 -1
  20. package/dist/CardFlip.js +2 -7
  21. package/dist/CardFlip.js.map +1 -1
  22. package/dist/Checkbox.js +3 -14
  23. package/dist/Checkbox.js.map +1 -1
  24. package/dist/Collapse.js +0 -15
  25. package/dist/Collapse.js.map +1 -1
  26. package/dist/ComboBox.js +4 -83
  27. package/dist/ComboBox.js.map +1 -1
  28. package/dist/CopyButton.d.ts +1 -1
  29. package/dist/CopyButton.d.ts.map +1 -1
  30. package/dist/CopyButton.js +2 -4
  31. package/dist/CopyButton.js.map +1 -1
  32. package/dist/CustomTimeSelect.js +2 -86
  33. package/dist/CustomTimeSelect.js.map +1 -1
  34. package/dist/DateInput.js.map +1 -1
  35. package/dist/DateInputUtils.js +0 -7
  36. package/dist/DateInputUtils.js.map +1 -1
  37. package/dist/DateTimeInput.js +7 -10
  38. package/dist/DateTimeInput.js.map +1 -1
  39. package/dist/DebouncedSearchInput.js +0 -14
  40. package/dist/DebouncedSearchInput.js.map +1 -1
  41. package/dist/DragUtils.js +4 -16
  42. package/dist/DragUtils.js.map +1 -1
  43. package/dist/DraggableItemList.d.ts.map +1 -1
  44. package/dist/DraggableItemList.js +22 -44
  45. package/dist/DraggableItemList.js.map +1 -1
  46. package/dist/EditableItemList.d.ts +1 -1
  47. package/dist/EditableItemList.d.ts.map +1 -1
  48. package/dist/EditableItemList.js +2 -6
  49. package/dist/EditableItemList.js.map +1 -1
  50. package/dist/HierarchicalCheckboxMenu.js +6 -28
  51. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  52. package/dist/ItemList.d.ts.map +1 -1
  53. package/dist/ItemList.js +22 -115
  54. package/dist/ItemList.js.map +1 -1
  55. package/dist/ItemListItem.d.ts +0 -1
  56. package/dist/ItemListItem.d.ts.map +1 -1
  57. package/dist/ItemListItem.js +26 -50
  58. package/dist/ItemListItem.js.map +1 -1
  59. package/dist/LoadingOverlay.d.ts +1 -1
  60. package/dist/LoadingOverlay.d.ts.map +1 -1
  61. package/dist/LoadingOverlay.js +3 -5
  62. package/dist/LoadingOverlay.js.map +1 -1
  63. package/dist/LoadingSpinner.d.ts +1 -1
  64. package/dist/LoadingSpinner.d.ts.map +1 -1
  65. package/dist/LoadingSpinner.js +2 -4
  66. package/dist/LoadingSpinner.js.map +1 -1
  67. package/dist/MaskedInput.js +26 -85
  68. package/dist/MaskedInput.js.map +1 -1
  69. package/dist/Option.d.ts +1 -1
  70. package/dist/Option.d.ts.map +1 -1
  71. package/dist/Option.js +2 -4
  72. package/dist/Option.js.map +1 -1
  73. package/dist/RadioGroup.d.ts +1 -1
  74. package/dist/RadioGroup.d.ts.map +1 -1
  75. package/dist/RadioGroup.js +4 -6
  76. package/dist/RadioGroup.js.map +1 -1
  77. package/dist/RadioItem.js +0 -1
  78. package/dist/RadioItem.js.map +1 -1
  79. package/dist/SearchInput.js +2 -13
  80. package/dist/SearchInput.js.map +1 -1
  81. package/dist/Select.d.ts +1 -1
  82. package/dist/Select.d.ts.map +1 -1
  83. package/dist/Select.js +2 -4
  84. package/dist/Select.js.map +1 -1
  85. package/dist/SelectValueList.js +0 -28
  86. package/dist/SelectValueList.js.map +1 -1
  87. package/dist/SocketedButton.js.map +1 -1
  88. package/dist/ThemeExport.js +0 -4
  89. package/dist/ThemeExport.js.map +1 -1
  90. package/dist/TimeInput.js +2 -12
  91. package/dist/TimeInput.js.map +1 -1
  92. package/dist/TimeSlider.d.ts +1 -1
  93. package/dist/TimeSlider.d.ts.map +1 -1
  94. package/dist/TimeSlider.js +19 -33
  95. package/dist/TimeSlider.js.map +1 -1
  96. package/dist/ToastNotification.d.ts +4 -4
  97. package/dist/ToastNotification.d.ts.map +1 -1
  98. package/dist/ToastNotification.js +2 -4
  99. package/dist/ToastNotification.js.map +1 -1
  100. package/dist/UISwitch.d.ts +1 -1
  101. package/dist/UISwitch.d.ts.map +1 -1
  102. package/dist/UISwitch.js +2 -4
  103. package/dist/UISwitch.js.map +1 -1
  104. package/dist/ValidateLabelInput.d.ts.map +1 -1
  105. package/dist/ValidateLabelInput.js +3 -3
  106. package/dist/ValidateLabelInput.js.map +1 -1
  107. package/dist/context-actions/ContextActionUtils.js +9 -40
  108. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  109. package/dist/context-actions/ContextActions.js +1 -34
  110. package/dist/context-actions/ContextActions.js.map +1 -1
  111. package/dist/context-actions/ContextMenu.js +29 -110
  112. package/dist/context-actions/ContextMenu.js.map +1 -1
  113. package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
  114. package/dist/context-actions/ContextMenuItem.js +3 -19
  115. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  116. package/dist/context-actions/ContextMenuRoot.js +7 -26
  117. package/dist/context-actions/ContextMenuRoot.js.map +1 -1
  118. package/dist/context-actions/GlobalContextAction.js +0 -15
  119. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  120. package/dist/context-actions/GlobalContextActions.js +0 -6
  121. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  122. package/dist/context-actions/index.js.map +1 -1
  123. package/dist/index.js.map +1 -1
  124. package/dist/menu-actions/DropdownMenu.js +4 -32
  125. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  126. package/dist/menu-actions/Menu.js +7 -52
  127. package/dist/menu-actions/Menu.js.map +1 -1
  128. package/dist/menu-actions/index.d.ts +2 -1
  129. package/dist/menu-actions/index.d.ts.map +1 -1
  130. package/dist/menu-actions/index.js +2 -2
  131. package/dist/menu-actions/index.js.map +1 -1
  132. package/dist/modal/Modal.d.ts +2 -2
  133. package/dist/modal/Modal.d.ts.map +1 -1
  134. package/dist/modal/Modal.js +3 -9
  135. package/dist/modal/Modal.js.map +1 -1
  136. package/dist/modal/ModalBody.d.ts +1 -1
  137. package/dist/modal/ModalBody.d.ts.map +1 -1
  138. package/dist/modal/ModalBody.js +2 -4
  139. package/dist/modal/ModalBody.js.map +1 -1
  140. package/dist/modal/ModalFooter.d.ts +1 -1
  141. package/dist/modal/ModalFooter.d.ts.map +1 -1
  142. package/dist/modal/ModalFooter.js +2 -4
  143. package/dist/modal/ModalFooter.js.map +1 -1
  144. package/dist/modal/ModalHeader.d.ts +1 -1
  145. package/dist/modal/ModalHeader.d.ts.map +1 -1
  146. package/dist/modal/ModalHeader.js +2 -4
  147. package/dist/modal/ModalHeader.js.map +1 -1
  148. package/dist/modal/index.js.map +1 -1
  149. package/dist/navigation/Menu.d.ts +1 -1
  150. package/dist/navigation/Menu.d.ts.map +1 -1
  151. package/dist/navigation/Menu.js +2 -2
  152. package/dist/navigation/Menu.js.map +1 -1
  153. package/dist/navigation/MenuItem.d.ts +1 -1
  154. package/dist/navigation/MenuItem.d.ts.map +1 -1
  155. package/dist/navigation/MenuItem.js +4 -7
  156. package/dist/navigation/MenuItem.js.map +1 -1
  157. package/dist/navigation/Page.d.ts +1 -1
  158. package/dist/navigation/Page.d.ts.map +1 -1
  159. package/dist/navigation/Page.js +2 -3
  160. package/dist/navigation/Page.js.map +1 -1
  161. package/dist/navigation/Stack.d.ts +1 -1
  162. package/dist/navigation/Stack.d.ts.map +1 -1
  163. package/dist/navigation/Stack.js +3 -6
  164. package/dist/navigation/Stack.js.map +1 -1
  165. package/dist/navigation/index.js.map +1 -1
  166. package/dist/popper/Popper.d.ts.map +1 -1
  167. package/dist/popper/Popper.js +13 -46
  168. package/dist/popper/Popper.js.map +1 -1
  169. package/dist/popper/Tooltip.js +0 -56
  170. package/dist/popper/Tooltip.js.map +1 -1
  171. package/dist/popper/index.js.map +1 -1
  172. package/dist/shortcuts/GlobalShortcuts.js.map +1 -1
  173. package/dist/shortcuts/Shortcut.js +19 -76
  174. package/dist/shortcuts/Shortcut.js.map +1 -1
  175. package/dist/shortcuts/ShortcutRegistry.js +3 -18
  176. package/dist/shortcuts/ShortcutRegistry.js.map +1 -1
  177. package/dist/shortcuts/index.js.map +1 -1
  178. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","names":["React","Component","classNames","Log","Popper","log","module","Tooltip","handleHidden","shownTooltipCount","lastHiddenTime","Date","now","handleShown","constructor","props","handleMouseMove","bind","handleMouseLeave","handleWindowMouseMove","handleWheel","handleTimeout","handleExited","stopShowingTooltip","container","createRef","popper","parent","timer","state","isShown","componentDidMount","startListening","timeout","show","componentDidUpdate","prevProps","prevState","oldIsShown","componentWillUnmount","stopListening","stopListeningWindow","stopTimer","current","parentElement","error","addEventListener","removeEventListener","startListeningWindow","window","startTimer","element","matches","hide","interactive","event","mouseX","clientX","mouseY","clientY","popperRect","getBoundingClientRect","parentRect","left","width","top","height","reshowTimeout","timerTimeout","triggerReshowThreshold","setTimeout","clearTimeout","setState","update","scheduleUpdate","onExited","render","children","options","referenceObject","popperClassName","dataTestId","onEntered","display","defaultReshowTimeout","defaultTimeout","undefined"],"sources":["../../src/popper/Tooltip.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport Popper, { PopperOptions, ReferenceObject } from './Popper';\n\nconst log = Log.module('Tooltip');\n\ntype TooltipProps = typeof Tooltip.defaultProps & {\n children: React.ReactNode;\n interactive?: boolean;\n options?: PopperOptions;\n popperClassName?: string;\n reshowTimeout?: number;\n timeout?: number;\n referenceObject?: ReferenceObject | null;\n onEntered?: () => void;\n onExited?: () => void;\n 'data-testid'?: string;\n};\ninterface TooltipState {\n isShown: boolean;\n}\n\n/**\n * Component that can be added to an element to automatically display a tooltip.\n * Content is mounted lazily, so don't worry about complex tooltips!\n *\n * Usage:\n * <div className=\"parent-container\">\n * Hover this container to see a tooltip\n * <Tooltip>\n * <div>My tooltip content goes here!</div>\n * </Tooltip>\n * </div>\n */\nclass Tooltip extends Component<TooltipProps, TooltipState> {\n static defaultTimeout = 500;\n\n static defaultReshowTimeout = 100;\n\n static triggerReshowThreshold = 300;\n\n static shownTooltipCount = 0;\n\n static lastHiddenTime = Date.now();\n\n static defaultProps = {\n interactive: false,\n options: {},\n popperClassName: '',\n reshowTimeout: Tooltip.defaultReshowTimeout,\n timeout: Tooltip.defaultTimeout,\n onEntered: (): void => undefined,\n onExited: (): void => undefined,\n 'data-testid': undefined,\n };\n\n static handleHidden(): void {\n Tooltip.shownTooltipCount -= 1;\n\n if (Tooltip.shownTooltipCount === 0) {\n Tooltip.lastHiddenTime = Date.now();\n }\n }\n\n static handleShown(): void {\n Tooltip.shownTooltipCount += 1;\n }\n\n constructor(props: TooltipProps) {\n super(props);\n\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowMouseMove = this.handleWindowMouseMove.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.stopShowingTooltip = this.stopShowingTooltip.bind(this);\n\n this.container = React.createRef();\n this.popper = React.createRef();\n this.parent = null;\n this.timer = null;\n\n this.state = {\n isShown: false,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n\n const { timeout } = this.props;\n if (timeout === 0) {\n this.show();\n }\n }\n\n componentDidUpdate(prevProps: TooltipProps, prevState: TooltipState): void {\n const { isShown: oldIsShown } = prevState;\n const { isShown } = this.state;\n\n if (isShown !== oldIsShown) {\n if (isShown) {\n Tooltip.handleShown();\n } else {\n Tooltip.handleHidden();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n this.stopListeningWindow();\n this.stopTimer();\n\n const { isShown } = this.state;\n\n if (isShown) {\n Tooltip.handleHidden();\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n popper: React.RefObject<Popper>;\n\n parent: HTMLElement | null;\n\n // This is platform dependent of Node/DOM\n // Jest requires Node types\n timer: number | null;\n\n startListening(): void {\n if (!this.container.current || !this.container.current.parentElement) {\n log.error(\"Tooltip doesn't have a container or a parent set!\");\n return;\n }\n\n this.parent = this.container.current.parentElement;\n this.parent.addEventListener('mousemove', this.handleMouseMove);\n this.parent.addEventListener('mouseleave', this.handleMouseLeave);\n this.parent.addEventListener('mousedown', this.stopShowingTooltip);\n }\n\n stopListening(): void {\n if (!this.parent) {\n return;\n }\n\n this.parent.removeEventListener('mousemove', this.handleMouseMove);\n this.parent.removeEventListener('mouseleave', this.handleMouseLeave);\n this.parent.removeEventListener('mousedown', this.stopShowingTooltip);\n }\n\n startListeningWindow(): void {\n window.addEventListener('mousemove', this.handleWindowMouseMove, true);\n window.addEventListener('contextmenu', this.stopShowingTooltip, true);\n window.addEventListener('wheel', this.handleWheel);\n }\n\n stopListeningWindow(): void {\n window.removeEventListener('mousemove', this.handleWindowMouseMove, true);\n window.removeEventListener('contextmenu', this.stopShowingTooltip, true);\n window.removeEventListener('wheel', this.handleWheel);\n }\n\n handleMouseMove(): void {\n this.startTimer();\n }\n\n handleWheel(): void {\n const { isShown } = this.state;\n if (this.popper.current && this.parent && isShown) {\n if (\n !this.popper.current.element.matches(':hover') &&\n !this.parent.matches(':hover')\n ) {\n this.stopTimer();\n this.hide();\n }\n }\n }\n\n handleMouseLeave(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n const { interactive } = this.props;\n if (!interactive && isShown) {\n this.hide();\n }\n }\n\n handleTimeout(): void {\n this.show();\n }\n\n handleWindowMouseMove(event: MouseEvent): void {\n const mouseX = event.clientX;\n const mouseY = event.clientY;\n const { isShown } = this.state;\n\n if (!this.popper.current || !this.parent) {\n return;\n }\n const popperRect = this.popper.current.element.getBoundingClientRect();\n const parentRect = this.parent.getBoundingClientRect();\n\n if (\n mouseX >= popperRect.left &&\n mouseX <= popperRect.left + popperRect.width &&\n mouseY >= popperRect.top &&\n mouseY <= popperRect.top + popperRect.height\n ) {\n this.handleMouseMove();\n } else if (\n mouseX >= parentRect.left &&\n mouseX <= parentRect.left + parentRect.width &&\n mouseY >= parentRect.top &&\n mouseY <= parentRect.top + parentRect.height\n ) {\n this.handleMouseMove();\n } else if (isShown) {\n this.stopTimer();\n this.hide();\n }\n }\n\n startTimer(): void {\n this.stopTimer();\n\n const { timeout, reshowTimeout } = this.props;\n let timerTimeout = timeout;\n if (\n Tooltip.shownTooltipCount > 0 ||\n Date.now() - Tooltip.lastHiddenTime < Tooltip.triggerReshowThreshold\n ) {\n timerTimeout = reshowTimeout;\n }\n this.timer = window.setTimeout(this.handleTimeout, timerTimeout);\n }\n\n stopTimer(): void {\n if (this.timer != null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n show(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n if (!isShown) {\n this.popper.current?.show();\n this.setState({ isShown: true });\n\n const { interactive } = this.props;\n if (interactive) {\n this.startListeningWindow();\n }\n }\n }\n\n hide(): void {\n this.popper.current?.hide();\n this.stopListeningWindow();\n }\n\n update(): void {\n this.popper.current?.scheduleUpdate();\n }\n\n handleExited(): void {\n this.setState({ isShown: false });\n const { onExited } = this.props;\n onExited();\n }\n\n stopShowingTooltip(): void {\n const { isShown } = this.state;\n this.stopTimer();\n if (isShown) {\n this.hide();\n }\n }\n\n render(): JSX.Element {\n const {\n interactive,\n children,\n options,\n referenceObject,\n popperClassName,\n 'data-testid': dataTestId,\n onEntered,\n } = this.props;\n const { isShown } = this.state;\n return (\n <div\n ref={this.container}\n style={{ display: 'none' }}\n data-testid={dataTestId}\n >\n <Popper\n className={classNames(popperClassName)}\n options={options}\n ref={this.popper}\n onEntered={onEntered}\n onExited={this.handleExited}\n interactive={interactive}\n referenceObject={referenceObject}\n >\n <div className=\"tooltip-content\"> {isShown && children}</div>\n </Popper>\n </div>\n );\n }\n}\n\nexport default Tooltip;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Tooltip.js","names":["React","Component","classNames","Log","Popper","log","module","Tooltip","handleHidden","shownTooltipCount","lastHiddenTime","Date","now","handleShown","constructor","props","handleMouseMove","bind","handleMouseLeave","handleWindowMouseMove","handleWheel","handleTimeout","handleExited","stopShowingTooltip","container","createRef","popper","parent","timer","state","isShown","componentDidMount","startListening","timeout","show","componentDidUpdate","prevProps","prevState","oldIsShown","componentWillUnmount","stopListening","stopListeningWindow","stopTimer","current","parentElement","error","addEventListener","removeEventListener","startListeningWindow","window","startTimer","element","matches","hide","interactive","event","mouseX","clientX","mouseY","clientY","popperRect","getBoundingClientRect","parentRect","left","width","top","height","reshowTimeout","timerTimeout","triggerReshowThreshold","setTimeout","clearTimeout","setState","update","scheduleUpdate","onExited","render","children","options","referenceObject","popperClassName","dataTestId","onEntered","display","defaultReshowTimeout","defaultTimeout","undefined"],"sources":["../../src/popper/Tooltip.tsx"],"sourcesContent":["import React, { Component } from 'react';\nimport classNames from 'classnames';\nimport Log from '@deephaven/log';\nimport Popper, { PopperOptions, ReferenceObject } from './Popper';\n\nconst log = Log.module('Tooltip');\n\ntype TooltipProps = typeof Tooltip.defaultProps & {\n children: React.ReactNode;\n interactive?: boolean;\n options?: PopperOptions;\n popperClassName?: string;\n reshowTimeout?: number;\n timeout?: number;\n referenceObject?: ReferenceObject | null;\n onEntered?: () => void;\n onExited?: () => void;\n 'data-testid'?: string;\n};\ninterface TooltipState {\n isShown: boolean;\n}\n\n/**\n * Component that can be added to an element to automatically display a tooltip.\n * Content is mounted lazily, so don't worry about complex tooltips!\n *\n * Usage:\n * <div className=\"parent-container\">\n * Hover this container to see a tooltip\n * <Tooltip>\n * <div>My tooltip content goes here!</div>\n * </Tooltip>\n * </div>\n */\nclass Tooltip extends Component<TooltipProps, TooltipState> {\n static defaultTimeout = 500;\n\n static defaultReshowTimeout = 100;\n\n static triggerReshowThreshold = 300;\n\n static shownTooltipCount = 0;\n\n static lastHiddenTime = Date.now();\n\n static defaultProps = {\n interactive: false,\n options: {},\n popperClassName: '',\n reshowTimeout: Tooltip.defaultReshowTimeout,\n timeout: Tooltip.defaultTimeout,\n onEntered: (): void => undefined,\n onExited: (): void => undefined,\n 'data-testid': undefined,\n };\n\n static handleHidden(): void {\n Tooltip.shownTooltipCount -= 1;\n\n if (Tooltip.shownTooltipCount === 0) {\n Tooltip.lastHiddenTime = Date.now();\n }\n }\n\n static handleShown(): void {\n Tooltip.shownTooltipCount += 1;\n }\n\n constructor(props: TooltipProps) {\n super(props);\n\n this.handleMouseMove = this.handleMouseMove.bind(this);\n this.handleMouseLeave = this.handleMouseLeave.bind(this);\n this.handleWindowMouseMove = this.handleWindowMouseMove.bind(this);\n this.handleWheel = this.handleWheel.bind(this);\n this.handleTimeout = this.handleTimeout.bind(this);\n this.handleExited = this.handleExited.bind(this);\n this.stopShowingTooltip = this.stopShowingTooltip.bind(this);\n\n this.container = React.createRef();\n this.popper = React.createRef();\n this.parent = null;\n this.timer = null;\n\n this.state = {\n isShown: false,\n };\n }\n\n componentDidMount(): void {\n this.startListening();\n\n const { timeout } = this.props;\n if (timeout === 0) {\n this.show();\n }\n }\n\n componentDidUpdate(prevProps: TooltipProps, prevState: TooltipState): void {\n const { isShown: oldIsShown } = prevState;\n const { isShown } = this.state;\n\n if (isShown !== oldIsShown) {\n if (isShown) {\n Tooltip.handleShown();\n } else {\n Tooltip.handleHidden();\n }\n }\n }\n\n componentWillUnmount(): void {\n this.stopListening();\n this.stopListeningWindow();\n this.stopTimer();\n\n const { isShown } = this.state;\n\n if (isShown) {\n Tooltip.handleHidden();\n }\n }\n\n container: React.RefObject<HTMLDivElement>;\n\n popper: React.RefObject<Popper>;\n\n parent: HTMLElement | null;\n\n // This is platform dependent of Node/DOM\n // Jest requires Node types\n timer: number | null;\n\n startListening(): void {\n if (!this.container.current || !this.container.current.parentElement) {\n log.error(\"Tooltip doesn't have a container or a parent set!\");\n return;\n }\n\n this.parent = this.container.current.parentElement;\n this.parent.addEventListener('mousemove', this.handleMouseMove);\n this.parent.addEventListener('mouseleave', this.handleMouseLeave);\n this.parent.addEventListener('mousedown', this.stopShowingTooltip);\n }\n\n stopListening(): void {\n if (!this.parent) {\n return;\n }\n\n this.parent.removeEventListener('mousemove', this.handleMouseMove);\n this.parent.removeEventListener('mouseleave', this.handleMouseLeave);\n this.parent.removeEventListener('mousedown', this.stopShowingTooltip);\n }\n\n startListeningWindow(): void {\n window.addEventListener('mousemove', this.handleWindowMouseMove, true);\n window.addEventListener('contextmenu', this.stopShowingTooltip, true);\n window.addEventListener('wheel', this.handleWheel);\n }\n\n stopListeningWindow(): void {\n window.removeEventListener('mousemove', this.handleWindowMouseMove, true);\n window.removeEventListener('contextmenu', this.stopShowingTooltip, true);\n window.removeEventListener('wheel', this.handleWheel);\n }\n\n handleMouseMove(): void {\n this.startTimer();\n }\n\n handleWheel(): void {\n const { isShown } = this.state;\n if (this.popper.current && this.parent && isShown) {\n if (\n !this.popper.current.element.matches(':hover') &&\n !this.parent.matches(':hover')\n ) {\n this.stopTimer();\n this.hide();\n }\n }\n }\n\n handleMouseLeave(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n const { interactive } = this.props;\n if (!interactive && isShown) {\n this.hide();\n }\n }\n\n handleTimeout(): void {\n this.show();\n }\n\n handleWindowMouseMove(event: MouseEvent): void {\n const mouseX = event.clientX;\n const mouseY = event.clientY;\n const { isShown } = this.state;\n\n if (!this.popper.current || !this.parent) {\n return;\n }\n const popperRect = this.popper.current.element.getBoundingClientRect();\n const parentRect = this.parent.getBoundingClientRect();\n\n if (\n mouseX >= popperRect.left &&\n mouseX <= popperRect.left + popperRect.width &&\n mouseY >= popperRect.top &&\n mouseY <= popperRect.top + popperRect.height\n ) {\n this.handleMouseMove();\n } else if (\n mouseX >= parentRect.left &&\n mouseX <= parentRect.left + parentRect.width &&\n mouseY >= parentRect.top &&\n mouseY <= parentRect.top + parentRect.height\n ) {\n this.handleMouseMove();\n } else if (isShown) {\n this.stopTimer();\n this.hide();\n }\n }\n\n startTimer(): void {\n this.stopTimer();\n\n const { timeout, reshowTimeout } = this.props;\n let timerTimeout = timeout;\n if (\n Tooltip.shownTooltipCount > 0 ||\n Date.now() - Tooltip.lastHiddenTime < Tooltip.triggerReshowThreshold\n ) {\n timerTimeout = reshowTimeout;\n }\n this.timer = window.setTimeout(this.handleTimeout, timerTimeout);\n }\n\n stopTimer(): void {\n if (this.timer != null) {\n clearTimeout(this.timer);\n this.timer = null;\n }\n }\n\n show(): void {\n const { isShown } = this.state;\n this.stopTimer();\n\n if (!isShown) {\n this.popper.current?.show();\n this.setState({ isShown: true });\n\n const { interactive } = this.props;\n if (interactive) {\n this.startListeningWindow();\n }\n }\n }\n\n hide(): void {\n this.popper.current?.hide();\n this.stopListeningWindow();\n }\n\n update(): void {\n this.popper.current?.scheduleUpdate();\n }\n\n handleExited(): void {\n this.setState({ isShown: false });\n const { onExited } = this.props;\n onExited();\n }\n\n stopShowingTooltip(): void {\n const { isShown } = this.state;\n this.stopTimer();\n if (isShown) {\n this.hide();\n }\n }\n\n render(): JSX.Element {\n const {\n interactive,\n children,\n options,\n referenceObject,\n popperClassName,\n 'data-testid': dataTestId,\n onEntered,\n } = this.props;\n const { isShown } = this.state;\n return (\n <div\n ref={this.container}\n style={{ display: 'none' }}\n data-testid={dataTestId}\n >\n <Popper\n className={classNames(popperClassName)}\n options={options}\n ref={this.popper}\n onEntered={onEntered}\n onExited={this.handleExited}\n interactive={interactive}\n referenceObject={referenceObject}\n >\n <div className=\"tooltip-content\"> {isShown && children}</div>\n </Popper>\n </div>\n );\n }\n}\n\nexport default Tooltip;\n"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,SAAS,QAAQ,OAAO;AACxC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,GAAG,MAAM,gBAAgB;AAAC,OAC1BC,MAAM;AAEb,IAAMC,GAAG,GAAGF,GAAG,CAACG,MAAM,CAAC,SAAS,CAAC;AAkBjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,OAAO,SAASN,SAAS,CAA6B;EAsB1D,OAAOO,YAAY,GAAS;IAC1BD,OAAO,CAACE,iBAAiB,IAAI,CAAC;IAE9B,IAAIF,OAAO,CAACE,iBAAiB,KAAK,CAAC,EAAE;MACnCF,OAAO,CAACG,cAAc,GAAGC,IAAI,CAACC,GAAG,EAAE;IACrC;EACF;EAEA,OAAOC,WAAW,GAAS;IACzBN,OAAO,CAACE,iBAAiB,IAAI,CAAC;EAChC;EAEAK,WAAW,CAACC,KAAmB,EAAE;IAC/B,KAAK,CAACA,KAAK,CAAC;IAAC;IAAA;IAAA;IAAA;IAEb,IAAI,CAACC,eAAe,GAAG,IAAI,CAACA,eAAe,CAACC,IAAI,CAAC,IAAI,CAAC;IACtD,IAAI,CAACC,gBAAgB,GAAG,IAAI,CAACA,gBAAgB,CAACD,IAAI,CAAC,IAAI,CAAC;IACxD,IAAI,CAACE,qBAAqB,GAAG,IAAI,CAACA,qBAAqB,CAACF,IAAI,CAAC,IAAI,CAAC;IAClE,IAAI,CAACG,WAAW,GAAG,IAAI,CAACA,WAAW,CAACH,IAAI,CAAC,IAAI,CAAC;IAC9C,IAAI,CAACI,aAAa,GAAG,IAAI,CAACA,aAAa,CAACJ,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,CAACK,YAAY,GAAG,IAAI,CAACA,YAAY,CAACL,IAAI,CAAC,IAAI,CAAC;IAChD,IAAI,CAACM,kBAAkB,GAAG,IAAI,CAACA,kBAAkB,CAACN,IAAI,CAAC,IAAI,CAAC;IAE5D,IAAI,CAACO,SAAS,gBAAGxB,KAAK,CAACyB,SAAS,EAAE;IAClC,IAAI,CAACC,MAAM,gBAAG1B,KAAK,CAACyB,SAAS,EAAE;IAC/B,IAAI,CAACE,MAAM,GAAG,IAAI;IAClB,IAAI,CAACC,KAAK,GAAG,IAAI;IAEjB,IAAI,CAACC,KAAK,GAAG;MACXC,OAAO,EAAE;IACX,CAAC;EACH;EAEAC,iBAAiB,GAAS;IACxB,IAAI,CAACC,cAAc,EAAE;IAErB,IAAM;MAAEC;IAAQ,CAAC,GAAG,IAAI,CAAClB,KAAK;IAC9B,IAAIkB,OAAO,KAAK,CAAC,EAAE;MACjB,IAAI,CAACC,IAAI,EAAE;IACb;EACF;EAEAC,kBAAkB,CAACC,SAAuB,EAAEC,SAAuB,EAAQ;IACzE,IAAM;MAAEP,OAAO,EAAEQ;IAAW,CAAC,GAAGD,SAAS;IACzC,IAAM;MAAEP;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAE9B,IAAIC,OAAO,KAAKQ,UAAU,EAAE;MAC1B,IAAIR,OAAO,EAAE;QACXvB,OAAO,CAACM,WAAW,EAAE;MACvB,CAAC,MAAM;QACLN,OAAO,CAACC,YAAY,EAAE;MACxB;IACF;EACF;EAEA+B,oBAAoB,GAAS;IAC3B,IAAI,CAACC,aAAa,EAAE;IACpB,IAAI,CAACC,mBAAmB,EAAE;IAC1B,IAAI,CAACC,SAAS,EAAE;IAEhB,IAAM;MAAEZ;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAE9B,IAAIC,OAAO,EAAE;MACXvB,OAAO,CAACC,YAAY,EAAE;IACxB;EACF;EAYAwB,cAAc,GAAS;IACrB,IAAI,CAAC,IAAI,CAACR,SAAS,CAACmB,OAAO,IAAI,CAAC,IAAI,CAACnB,SAAS,CAACmB,OAAO,CAACC,aAAa,EAAE;MACpEvC,GAAG,CAACwC,KAAK,CAAC,mDAAmD,CAAC;MAC9D;IACF;IAEA,IAAI,CAAClB,MAAM,GAAG,IAAI,CAACH,SAAS,CAACmB,OAAO,CAACC,aAAa;IAClD,IAAI,CAACjB,MAAM,CAACmB,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC9B,eAAe,CAAC;IAC/D,IAAI,CAACW,MAAM,CAACmB,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC5B,gBAAgB,CAAC;IACjE,IAAI,CAACS,MAAM,CAACmB,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAACvB,kBAAkB,CAAC;EACpE;EAEAiB,aAAa,GAAS;IACpB,IAAI,CAAC,IAAI,CAACb,MAAM,EAAE;MAChB;IACF;IAEA,IAAI,CAACA,MAAM,CAACoB,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC/B,eAAe,CAAC;IAClE,IAAI,CAACW,MAAM,CAACoB,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC7B,gBAAgB,CAAC;IACpE,IAAI,CAACS,MAAM,CAACoB,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAACxB,kBAAkB,CAAC;EACvE;EAEAyB,oBAAoB,GAAS;IAC3BC,MAAM,CAACH,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC3B,qBAAqB,EAAE,IAAI,CAAC;IACtE8B,MAAM,CAACH,gBAAgB,CAAC,aAAa,EAAE,IAAI,CAACvB,kBAAkB,EAAE,IAAI,CAAC;IACrE0B,MAAM,CAACH,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC1B,WAAW,CAAC;EACpD;EAEAqB,mBAAmB,GAAS;IAC1BQ,MAAM,CAACF,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAAC5B,qBAAqB,EAAE,IAAI,CAAC;IACzE8B,MAAM,CAACF,mBAAmB,CAAC,aAAa,EAAE,IAAI,CAACxB,kBAAkB,EAAE,IAAI,CAAC;IACxE0B,MAAM,CAACF,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC3B,WAAW,CAAC;EACvD;EAEAJ,eAAe,GAAS;IACtB,IAAI,CAACkC,UAAU,EAAE;EACnB;EAEA9B,WAAW,GAAS;IAClB,IAAM;MAAEU;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,IAAI,IAAI,CAACH,MAAM,CAACiB,OAAO,IAAI,IAAI,CAAChB,MAAM,IAAIG,OAAO,EAAE;MACjD,IACE,CAAC,IAAI,CAACJ,MAAM,CAACiB,OAAO,CAACQ,OAAO,CAACC,OAAO,CAAC,QAAQ,CAAC,IAC9C,CAAC,IAAI,CAACzB,MAAM,CAACyB,OAAO,CAAC,QAAQ,CAAC,EAC9B;QACA,IAAI,CAACV,SAAS,EAAE;QAChB,IAAI,CAACW,IAAI,EAAE;MACb;IACF;EACF;EAEAnC,gBAAgB,GAAS;IACvB,IAAM;MAAEY;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,IAAI,CAACa,SAAS,EAAE;IAEhB,IAAM;MAAEY;IAAY,CAAC,GAAG,IAAI,CAACvC,KAAK;IAClC,IAAI,CAACuC,WAAW,IAAIxB,OAAO,EAAE;MAC3B,IAAI,CAACuB,IAAI,EAAE;IACb;EACF;EAEAhC,aAAa,GAAS;IACpB,IAAI,CAACa,IAAI,EAAE;EACb;EAEAf,qBAAqB,CAACoC,KAAiB,EAAQ;IAC7C,IAAMC,MAAM,GAAGD,KAAK,CAACE,OAAO;IAC5B,IAAMC,MAAM,GAAGH,KAAK,CAACI,OAAO;IAC5B,IAAM;MAAE7B;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAE9B,IAAI,CAAC,IAAI,CAACH,MAAM,CAACiB,OAAO,IAAI,CAAC,IAAI,CAAChB,MAAM,EAAE;MACxC;IACF;IACA,IAAMiC,UAAU,GAAG,IAAI,CAAClC,MAAM,CAACiB,OAAO,CAACQ,OAAO,CAACU,qBAAqB,EAAE;IACtE,IAAMC,UAAU,GAAG,IAAI,CAACnC,MAAM,CAACkC,qBAAqB,EAAE;IAEtD,IACEL,MAAM,IAAII,UAAU,CAACG,IAAI,IACzBP,MAAM,IAAII,UAAU,CAACG,IAAI,GAAGH,UAAU,CAACI,KAAK,IAC5CN,MAAM,IAAIE,UAAU,CAACK,GAAG,IACxBP,MAAM,IAAIE,UAAU,CAACK,GAAG,GAAGL,UAAU,CAACM,MAAM,EAC5C;MACA,IAAI,CAAClD,eAAe,EAAE;IACxB,CAAC,MAAM,IACLwC,MAAM,IAAIM,UAAU,CAACC,IAAI,IACzBP,MAAM,IAAIM,UAAU,CAACC,IAAI,GAAGD,UAAU,CAACE,KAAK,IAC5CN,MAAM,IAAII,UAAU,CAACG,GAAG,IACxBP,MAAM,IAAII,UAAU,CAACG,GAAG,GAAGH,UAAU,CAACI,MAAM,EAC5C;MACA,IAAI,CAAClD,eAAe,EAAE;IACxB,CAAC,MAAM,IAAIc,OAAO,EAAE;MAClB,IAAI,CAACY,SAAS,EAAE;MAChB,IAAI,CAACW,IAAI,EAAE;IACb;EACF;EAEAH,UAAU,GAAS;IACjB,IAAI,CAACR,SAAS,EAAE;IAEhB,IAAM;MAAET,OAAO;MAAEkC;IAAc,CAAC,GAAG,IAAI,CAACpD,KAAK;IAC7C,IAAIqD,YAAY,GAAGnC,OAAO;IAC1B,IACE1B,OAAO,CAACE,iBAAiB,GAAG,CAAC,IAC7BE,IAAI,CAACC,GAAG,EAAE,GAAGL,OAAO,CAACG,cAAc,GAAGH,OAAO,CAAC8D,sBAAsB,EACpE;MACAD,YAAY,GAAGD,aAAa;IAC9B;IACA,IAAI,CAACvC,KAAK,GAAGqB,MAAM,CAACqB,UAAU,CAAC,IAAI,CAACjD,aAAa,EAAE+C,YAAY,CAAC;EAClE;EAEA1B,SAAS,GAAS;IAChB,IAAI,IAAI,CAACd,KAAK,IAAI,IAAI,EAAE;MACtB2C,YAAY,CAAC,IAAI,CAAC3C,KAAK,CAAC;MACxB,IAAI,CAACA,KAAK,GAAG,IAAI;IACnB;EACF;EAEAM,IAAI,GAAS;IACX,IAAM;MAAEJ;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,IAAI,CAACa,SAAS,EAAE;IAEhB,IAAI,CAACZ,OAAO,EAAE;MAAA;MACZ,4BAAI,CAACJ,MAAM,CAACiB,OAAO,yDAAnB,qBAAqBT,IAAI,EAAE;MAC3B,IAAI,CAACsC,QAAQ,CAAC;QAAE1C,OAAO,EAAE;MAAK,CAAC,CAAC;MAEhC,IAAM;QAAEwB;MAAY,CAAC,GAAG,IAAI,CAACvC,KAAK;MAClC,IAAIuC,WAAW,EAAE;QACf,IAAI,CAACN,oBAAoB,EAAE;MAC7B;IACF;EACF;EAEAK,IAAI,GAAS;IAAA;IACX,6BAAI,CAAC3B,MAAM,CAACiB,OAAO,0DAAnB,sBAAqBU,IAAI,EAAE;IAC3B,IAAI,CAACZ,mBAAmB,EAAE;EAC5B;EAEAgC,MAAM,GAAS;IAAA;IACb,6BAAI,CAAC/C,MAAM,CAACiB,OAAO,0DAAnB,sBAAqB+B,cAAc,EAAE;EACvC;EAEApD,YAAY,GAAS;IACnB,IAAI,CAACkD,QAAQ,CAAC;MAAE1C,OAAO,EAAE;IAAM,CAAC,CAAC;IACjC,IAAM;MAAE6C;IAAS,CAAC,GAAG,IAAI,CAAC5D,KAAK;IAC/B4D,QAAQ,EAAE;EACZ;EAEApD,kBAAkB,GAAS;IACzB,IAAM;MAAEO;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,IAAI,CAACa,SAAS,EAAE;IAChB,IAAIZ,OAAO,EAAE;MACX,IAAI,CAACuB,IAAI,EAAE;IACb;EACF;EAEAuB,MAAM,GAAgB;IACpB,IAAM;MACJtB,WAAW;MACXuB,QAAQ;MACRC,OAAO;MACPC,eAAe;MACfC,eAAe;MACf,aAAa,EAAEC,UAAU;MACzBC;IACF,CAAC,GAAG,IAAI,CAACnE,KAAK;IACd,IAAM;MAAEe;IAAQ,CAAC,GAAG,IAAI,CAACD,KAAK;IAC9B,oBACE;MACE,GAAG,EAAE,IAAI,CAACL,SAAU;MACpB,KAAK,EAAE;QAAE2D,OAAO,EAAE;MAAO,CAAE;MAC3B,eAAaF;IAAW,gBAExB,oBAAC,MAAM;MACL,SAAS,EAAE/E,UAAU,CAAC8E,eAAe,CAAE;MACvC,OAAO,EAAEF,OAAQ;MACjB,GAAG,EAAE,IAAI,CAACpD,MAAO;MACjB,SAAS,EAAEwD,SAAU;MACrB,QAAQ,EAAE,IAAI,CAAC5D,YAAa;MAC5B,WAAW,EAAEgC,WAAY;MACzB,eAAe,EAAEyB;IAAgB,gBAEjC;MAAK,SAAS,EAAC;IAAiB,QAAGjD,OAAO,IAAI+C,QAAQ,CAAO,CACtD,CACL;EAEV;AACF;AAAC,gBA7RKtE,OAAO,oBACa,GAAG;AAAA,gBADvBA,OAAO,0BAGmB,GAAG;AAAA,gBAH7BA,OAAO,4BAKqB,GAAG;AAAA,gBAL/BA,OAAO,uBAOgB,CAAC;AAAA,gBAPxBA,OAAO,oBASaI,IAAI,CAACC,GAAG,EAAE;AAAA,gBAT9BL,OAAO,kBAWW;EACpB+C,WAAW,EAAE,KAAK;EAClBwB,OAAO,EAAE,CAAC,CAAC;EACXE,eAAe,EAAE,EAAE;EACnBb,aAAa,EAAE5D,OAAO,CAAC6E,oBAAoB;EAC3CnD,OAAO,EAAE1B,OAAO,CAAC8E,cAAc;EAC/BH,SAAS,EAAE,MAAYI,SAAS;EAChCX,QAAQ,EAAE,MAAYW,SAAS;EAC/B,aAAa,EAAEA;AACjB,CAAC;AA2QH,eAAe/E,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","Popper","Tooltip"],"sources":["../../src/popper/index.ts"],"sourcesContent":["export { default as Popper } from './Popper';\nexport type { PopperOptions, ReferenceObject } from './Popper';\nexport { default as Tooltip } from './Tooltip';\n"],"mappings":"SAASA,OAAO,IAAIC,M;SAEXD,OAAO,IAAIE,O"}
1
+ {"version":3,"file":"index.js","names":["default","Popper","Tooltip"],"sources":["../../src/popper/index.ts"],"sourcesContent":["export { default as Popper } from './Popper';\nexport type { PopperOptions, ReferenceObject } from './Popper';\nexport { default as Tooltip } from './Tooltip';\n"],"mappings":"SAASA,OAAO,IAAIC,MAAM;AAAA,SAEjBD,OAAO,IAAIE,OAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"GlobalShortcuts.js","names":["ShortcutRegistry","MODIFIER","KEY","GLOBAL_SHORTCUTS","COPY","createAndAdd","id","name","shortcut","CTRL","C","macShortcut","CMD","isEditable","PASTE","V","SAVE","S","SELECT_ALL","A","LINKER","L","LINKER_CLOSE","ESCAPE"],"sources":["../../src/shortcuts/GlobalShortcuts.ts"],"sourcesContent":["import ShortcutRegistry from './ShortcutRegistry';\nimport { MODIFIER, KEY } from './Shortcut';\n\nconst GLOBAL_SHORTCUTS = {\n COPY: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.COPY',\n name: 'Copy',\n shortcut: [MODIFIER.CTRL, KEY.C],\n macShortcut: [MODIFIER.CMD, KEY.C],\n isEditable: false,\n }),\n PASTE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.PASTE',\n name: 'Paste',\n shortcut: [MODIFIER.CTRL, KEY.V],\n macShortcut: [MODIFIER.CMD, KEY.V],\n isEditable: false,\n }),\n SAVE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.SAVE',\n name: 'Save',\n shortcut: [MODIFIER.CTRL, KEY.S],\n macShortcut: [MODIFIER.CMD, KEY.S],\n isEditable: false,\n }),\n SELECT_ALL: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.SELECT_ALL',\n name: 'Select All',\n shortcut: [MODIFIER.CTRL, KEY.A],\n macShortcut: [MODIFIER.CMD, KEY.A],\n isEditable: false,\n }),\n LINKER: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.LINKER',\n name: 'Linker',\n shortcut: [MODIFIER.CTRL, KEY.L],\n macShortcut: [MODIFIER.CMD, KEY.L],\n }),\n LINKER_CLOSE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.LINKER_CLOSE',\n name: 'Close Linker Overlay',\n shortcut: [KEY.ESCAPE],\n macShortcut: [KEY.ESCAPE],\n isEditable: false,\n }),\n};\n\nexport default GLOBAL_SHORTCUTS;\n"],"mappings":"OAAOA,gB;SACEC,Q,EAAUC,G;AAEnB,IAAMC,gBAAgB,GAAG;EACvBC,IAAI,EAAEJ,gBAAgB,CAACK,YAAjB,CAA8B;IAClCC,EAAE,EAAE,aAD8B;IAElCC,IAAI,EAAE,MAF4B;IAGlCC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAV,EAAgBP,GAAG,CAACQ,CAApB,CAHwB;IAIlCC,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAV,EAAeV,GAAG,CAACQ,CAAnB,CAJqB;IAKlCG,UAAU,EAAE;EALsB,CAA9B,CADiB;EAQvBC,KAAK,EAAEd,gBAAgB,CAACK,YAAjB,CAA8B;IACnCC,EAAE,EAAE,cAD+B;IAEnCC,IAAI,EAAE,OAF6B;IAGnCC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAV,EAAgBP,GAAG,CAACa,CAApB,CAHyB;IAInCJ,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAV,EAAeV,GAAG,CAACa,CAAnB,CAJsB;IAKnCF,UAAU,EAAE;EALuB,CAA9B,CARgB;EAevBG,IAAI,EAAEhB,gBAAgB,CAACK,YAAjB,CAA8B;IAClCC,EAAE,EAAE,aAD8B;IAElCC,IAAI,EAAE,MAF4B;IAGlCC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAV,EAAgBP,GAAG,CAACe,CAApB,CAHwB;IAIlCN,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAV,EAAeV,GAAG,CAACe,CAAnB,CAJqB;IAKlCJ,UAAU,EAAE;EALsB,CAA9B,CAfiB;EAsBvBK,UAAU,EAAElB,gBAAgB,CAACK,YAAjB,CAA8B;IACxCC,EAAE,EAAE,mBADoC;IAExCC,IAAI,EAAE,YAFkC;IAGxCC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAV,EAAgBP,GAAG,CAACiB,CAApB,CAH8B;IAIxCR,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAV,EAAeV,GAAG,CAACiB,CAAnB,CAJ2B;IAKxCN,UAAU,EAAE;EAL4B,CAA9B,CAtBW;EA6BvBO,MAAM,EAAEpB,gBAAgB,CAACK,YAAjB,CAA8B;IACpCC,EAAE,EAAE,eADgC;IAEpCC,IAAI,EAAE,QAF8B;IAGpCC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAV,EAAgBP,GAAG,CAACmB,CAApB,CAH0B;IAIpCV,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAV,EAAeV,GAAG,CAACmB,CAAnB;EAJuB,CAA9B,CA7Be;EAmCvBC,YAAY,EAAEtB,gBAAgB,CAACK,YAAjB,CAA8B;IAC1CC,EAAE,EAAE,qBADsC;IAE1CC,IAAI,EAAE,sBAFoC;IAG1CC,QAAQ,EAAE,CAACN,GAAG,CAACqB,MAAL,CAHgC;IAI1CZ,WAAW,EAAE,CAACT,GAAG,CAACqB,MAAL,CAJ6B;IAK1CV,UAAU,EAAE;EAL8B,CAA9B;AAnCS,CAAzB;AA4CA,eAAeV,gBAAf"}
1
+ {"version":3,"file":"GlobalShortcuts.js","names":["ShortcutRegistry","MODIFIER","KEY","GLOBAL_SHORTCUTS","COPY","createAndAdd","id","name","shortcut","CTRL","C","macShortcut","CMD","isEditable","PASTE","V","SAVE","S","SELECT_ALL","A","LINKER","L","LINKER_CLOSE","ESCAPE"],"sources":["../../src/shortcuts/GlobalShortcuts.ts"],"sourcesContent":["import ShortcutRegistry from './ShortcutRegistry';\nimport { MODIFIER, KEY } from './Shortcut';\n\nconst GLOBAL_SHORTCUTS = {\n COPY: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.COPY',\n name: 'Copy',\n shortcut: [MODIFIER.CTRL, KEY.C],\n macShortcut: [MODIFIER.CMD, KEY.C],\n isEditable: false,\n }),\n PASTE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.PASTE',\n name: 'Paste',\n shortcut: [MODIFIER.CTRL, KEY.V],\n macShortcut: [MODIFIER.CMD, KEY.V],\n isEditable: false,\n }),\n SAVE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.SAVE',\n name: 'Save',\n shortcut: [MODIFIER.CTRL, KEY.S],\n macShortcut: [MODIFIER.CMD, KEY.S],\n isEditable: false,\n }),\n SELECT_ALL: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.SELECT_ALL',\n name: 'Select All',\n shortcut: [MODIFIER.CTRL, KEY.A],\n macShortcut: [MODIFIER.CMD, KEY.A],\n isEditable: false,\n }),\n LINKER: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.LINKER',\n name: 'Linker',\n shortcut: [MODIFIER.CTRL, KEY.L],\n macShortcut: [MODIFIER.CMD, KEY.L],\n }),\n LINKER_CLOSE: ShortcutRegistry.createAndAdd({\n id: 'GLOBAL.LINKER_CLOSE',\n name: 'Close Linker Overlay',\n shortcut: [KEY.ESCAPE],\n macShortcut: [KEY.ESCAPE],\n isEditable: false,\n }),\n};\n\nexport default GLOBAL_SHORTCUTS;\n"],"mappings":"OAAOA,gBAAgB;AAAA,SACdC,QAAQ,EAAEC,GAAG;AAEtB,IAAMC,gBAAgB,GAAG;EACvBC,IAAI,EAAEJ,gBAAgB,CAACK,YAAY,CAAC;IAClCC,EAAE,EAAE,aAAa;IACjBC,IAAI,EAAE,MAAM;IACZC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACQ,CAAC,CAAC;IAChCC,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACQ,CAAC,CAAC;IAClCG,UAAU,EAAE;EACd,CAAC,CAAC;EACFC,KAAK,EAAEd,gBAAgB,CAACK,YAAY,CAAC;IACnCC,EAAE,EAAE,cAAc;IAClBC,IAAI,EAAE,OAAO;IACbC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACa,CAAC,CAAC;IAChCJ,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACa,CAAC,CAAC;IAClCF,UAAU,EAAE;EACd,CAAC,CAAC;EACFG,IAAI,EAAEhB,gBAAgB,CAACK,YAAY,CAAC;IAClCC,EAAE,EAAE,aAAa;IACjBC,IAAI,EAAE,MAAM;IACZC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACe,CAAC,CAAC;IAChCN,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACe,CAAC,CAAC;IAClCJ,UAAU,EAAE;EACd,CAAC,CAAC;EACFK,UAAU,EAAElB,gBAAgB,CAACK,YAAY,CAAC;IACxCC,EAAE,EAAE,mBAAmB;IACvBC,IAAI,EAAE,YAAY;IAClBC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACiB,CAAC,CAAC;IAChCR,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACiB,CAAC,CAAC;IAClCN,UAAU,EAAE;EACd,CAAC,CAAC;EACFO,MAAM,EAAEpB,gBAAgB,CAACK,YAAY,CAAC;IACpCC,EAAE,EAAE,eAAe;IACnBC,IAAI,EAAE,QAAQ;IACdC,QAAQ,EAAE,CAACP,QAAQ,CAACQ,IAAI,EAAEP,GAAG,CAACmB,CAAC,CAAC;IAChCV,WAAW,EAAE,CAACV,QAAQ,CAACW,GAAG,EAAEV,GAAG,CAACmB,CAAC;EACnC,CAAC,CAAC;EACFC,YAAY,EAAEtB,gBAAgB,CAACK,YAAY,CAAC;IAC1CC,EAAE,EAAE,qBAAqB;IACzBC,IAAI,EAAE,sBAAsB;IAC5BC,QAAQ,EAAE,CAACN,GAAG,CAACqB,MAAM,CAAC;IACtBZ,WAAW,EAAE,CAACT,GAAG,CAACqB,MAAM,CAAC;IACzBV,UAAU,EAAE;EACd,CAAC;AACH,CAAC;AAED,eAAeV,gBAAgB"}
@@ -1,14 +1,14 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
-
3
2
  /* eslint-disable no-underscore-dangle */
4
3
  import { EventTarget } from 'event-target-shim';
5
4
  import { Log } from '@deephaven/log';
6
5
  import { EventShimCustomEvent } from '@deephaven/utils';
7
6
  import { ContextActionUtils } from "../context-actions/index.js";
8
7
  var log = Log.module('Shortcut');
9
- export var MODIFIER; // The value should match the KeyboardEvent.key value
10
- // This is the value which will be displayed if no display overrides are done in the OS specific getDisplayString methods
8
+ export var MODIFIER;
11
9
 
10
+ // The value should match the KeyboardEvent.key value
11
+ // This is the value which will be displayed if no display overrides are done in the OS specific getDisplayString methods
12
12
  (function (MODIFIER) {
13
13
  MODIFIER["CTRL"] = "MODIFIER_CTRL";
14
14
  MODIFIER["CMD"] = "MODIFIER_CMD";
@@ -16,9 +16,7 @@ export var MODIFIER; // The value should match the KeyboardEvent.key value
16
16
  MODIFIER["OPTION"] = "MODIFIER_OPTION";
17
17
  MODIFIER["SHIFT"] = "MODIFIER_SHIFT";
18
18
  })(MODIFIER || (MODIFIER = {}));
19
-
20
19
  export var KEY;
21
-
22
20
  (function (KEY) {
23
21
  KEY["A"] = "A";
24
22
  KEY["B"] = "B";
@@ -95,10 +93,10 @@ export var KEY;
95
93
  KEY["F11"] = "F11";
96
94
  KEY["F12"] = "F12";
97
95
  })(KEY || (KEY = {}));
98
-
99
96
  var ALLOWED_SINGLE_KEY_SET = new Set([KEY.ENTER, KEY.DELETE, KEY.F1, KEY.F2, KEY.F3, KEY.F4, KEY.F5, KEY.F6, KEY.F7, KEY.F8, KEY.F9, KEY.F10, KEY.F11, KEY.F12]);
100
97
  export default class Shortcut extends EventTarget {
101
98
  // Unique identifier for the shortcut
99
+
102
100
  // e.g. Rename, Save, Run Selected
103
101
 
104
102
  /**
@@ -109,36 +107,30 @@ export default class Shortcut extends EventTarget {
109
107
  static isAllowedKey(key) {
110
108
  return Object.values(KEY).includes(key);
111
109
  }
110
+
112
111
  /**
113
112
  * Checks if a KeyState has a valid key.
114
113
  * @param state KeyState with any string as the key
115
114
  * @returns True if KeyState is is using an allowed keyCode
116
115
  */
117
-
118
-
119
116
  static isValidKeyState(state) {
120
117
  var {
121
118
  keyValue
122
119
  } = state;
123
-
124
120
  if (keyValue === null) {
125
121
  // Null state is valid
126
122
  return true;
127
123
  }
128
-
129
124
  if (!Shortcut.isMacPlatform && state.metaKey) {
130
125
  // MetaKey not allowed in windows
131
126
  return false;
132
127
  }
133
-
134
128
  if (!Shortcut.isAllowedKey(keyValue)) {
135
129
  return false;
136
130
  }
137
-
138
131
  var isSingleKey = !state.altKey && !state.ctrlKey && !state.metaKey && !state.shiftKey;
139
132
  return !isSingleKey || ALLOWED_SINGLE_KEY_SET.has(keyValue);
140
133
  }
141
-
142
134
  /**
143
135
  * Creates a KeyState from a valid array of modifier and key constants
144
136
  * @param keys Array of keys in the shortcut. Modifiers first and key last. Should use the MODIFIER and KEY enums
@@ -157,44 +149,38 @@ export default class Shortcut extends EventTarget {
157
149
  case MODIFIER.CTRL:
158
150
  keyState.ctrlKey = true;
159
151
  break;
160
-
161
152
  case MODIFIER.ALT:
162
153
  case MODIFIER.OPTION:
163
154
  keyState.altKey = true;
164
155
  break;
165
-
166
156
  case MODIFIER.CMD:
167
157
  keyState.metaKey = true;
168
158
  break;
169
-
170
159
  case MODIFIER.SHIFT:
171
160
  keyState.shiftKey = true;
172
161
  break;
173
-
174
162
  default:
175
163
  break;
176
164
  }
177
165
  });
178
166
  return keyState;
179
167
  }
180
-
181
168
  static getKeyStateFromEvent(e) {
182
169
  var {
183
170
  key: eventKey,
184
171
  keyCode
185
172
  } = e;
186
173
  var key = '';
187
-
188
174
  if (eventKey === 'Shift' || eventKey === 'Meta' || eventKey === 'Control' || eventKey === 'Alt') {
189
175
  key = '';
190
- } else if ( // This is primarily for Mac which has a symbol keyboard hidden behind the alt key
176
+ } else if (
177
+ // This is primarily for Mac which has a symbol keyboard hidden behind the alt key
191
178
  // The keyCode still corresponds to the letter keyCode, but the key value will be a symbol
192
179
  !Shortcut.isAllowedKey(eventKey) && Shortcut.isAllowedKey(String.fromCharCode(keyCode))) {
193
180
  key = String.fromCharCode(keyCode);
194
181
  } else {
195
182
  key = eventKey;
196
183
  }
197
-
198
184
  return {
199
185
  keyValue: key,
200
186
  altKey: e.altKey,
@@ -203,118 +189,95 @@ export default class Shortcut extends EventTarget {
203
189
  shiftKey: e.shiftKey
204
190
  };
205
191
  }
192
+
206
193
  /**
207
194
  * Gets display string for Windows (and Linux + any other non-Mac OS)
208
195
  * If the key is not an allowed key, the display will only display the modifiers
209
196
  * @param keyState KeyState to get the display for
210
197
  * @returns The string to display on Windows/non-Mac OS
211
198
  */
212
-
213
-
214
199
  static getWindowsDisplayText(keyState) {
215
200
  var display = '';
216
-
217
201
  if (keyState.ctrlKey) {
218
202
  display += 'Ctrl+';
219
203
  }
220
-
221
204
  if (keyState.altKey) {
222
205
  display += 'Alt+';
223
206
  }
224
-
225
207
  if (keyState.shiftKey) {
226
208
  display += 'Shift+';
227
209
  }
228
-
229
210
  if (keyState.keyValue === KEY.ESCAPE) {
230
211
  display += 'Esc';
231
212
  } else if (keyState.keyValue !== null) {
232
213
  display += keyState.keyValue;
233
214
  }
234
-
235
215
  return display;
236
216
  }
217
+
237
218
  /**
238
219
  * Gets display string Mac OS
239
220
  * If the key is not an allowed key, the display will only display the modifiers
240
221
  * @param keyState KeyState to get the display for
241
222
  * @returns The string to display on Mac OS
242
223
  */
243
-
244
-
245
224
  static getMacDisplayText(keyState) {
246
225
  var display = '';
247
-
248
226
  if (keyState.ctrlKey) {
249
227
  display += '⌃';
250
228
  }
251
-
252
229
  if (keyState.altKey) {
253
230
  display += '⌥';
254
231
  }
255
-
256
232
  if (keyState.shiftKey) {
257
233
  display += '⇧';
258
234
  }
259
-
260
235
  if (keyState.metaKey) {
261
236
  display += '⌘';
262
237
  }
263
-
264
238
  switch (keyState.keyValue) {
265
239
  case KEY.ENTER:
266
240
  display += '⏎';
267
241
  break;
268
-
269
242
  case KEY.ESCAPE:
270
243
  display += '⎋';
271
244
  break;
272
-
273
245
  case KEY.BACKSPACE:
274
246
  display += '⌫';
275
247
  break;
276
-
277
248
  case KEY.DELETE:
278
249
  display += '⌦';
279
250
  break;
280
-
281
251
  case null:
282
252
  break;
283
-
284
253
  default:
285
254
  display += keyState.keyValue;
286
255
  }
287
-
288
256
  return display;
289
257
  }
258
+
290
259
  /**
291
260
  * Checks if 2 KeyStates match
292
261
  * @param state1 First KeyState to compare
293
262
  * @param state2 Second KeyState to compare
294
263
  * @returns True if the KeyStates match and have non-null keyValues
295
264
  */
296
-
297
-
298
265
  static doKeyStatesMatch(state1, state2) {
299
266
  var _state1$keyValue, _state2$keyValue;
300
-
301
267
  return ((_state1$keyValue = state1.keyValue) === null || _state1$keyValue === void 0 ? void 0 : _state1$keyValue.toUpperCase()) === ((_state2$keyValue = state2.keyValue) === null || _state2$keyValue === void 0 ? void 0 : _state2$keyValue.toUpperCase()) && state1.altKey === state2.altKey && state1.ctrlKey === state2.ctrlKey && state1.metaKey === state2.metaKey && state1.shiftKey === state2.shiftKey;
302
268
  }
269
+
303
270
  /**
304
271
  * Gets the display string for the current OS from a KeyState.
305
272
  * @param keyState KeyState to get the display for
306
273
  * @returns Display string for the current OS
307
274
  */
308
-
309
-
310
275
  static getDisplayText(keyState) {
311
276
  if (keyState.keyValue === null) {
312
277
  return '';
313
278
  }
314
-
315
279
  return Shortcut.isMacPlatform ? Shortcut.getMacDisplayText(keyState) : Shortcut.getWindowsDisplayText(keyState);
316
280
  }
317
-
318
281
  constructor(_ref) {
319
282
  var {
320
283
  id,
@@ -325,19 +288,12 @@ export default class Shortcut extends EventTarget {
325
288
  tooltip
326
289
  } = _ref;
327
290
  super();
328
-
329
291
  _defineProperty(this, "id", void 0);
330
-
331
292
  _defineProperty(this, "name", void 0);
332
-
333
293
  _defineProperty(this, "tooltip", void 0);
334
-
335
294
  _defineProperty(this, "isEditable", void 0);
336
-
337
295
  _defineProperty(this, "defaultKeyState", void 0);
338
-
339
296
  _defineProperty(this, "keyState", void 0);
340
-
341
297
  this.id = id;
342
298
  this.name = name;
343
299
  this.tooltip = tooltip;
@@ -347,28 +303,25 @@ export default class Shortcut extends EventTarget {
347
303
  this.defaultKeyState = Shortcut.createKeyState(activeShortcut);
348
304
  this.keyState = this.defaultKeyState;
349
305
  }
306
+
350
307
  /**
351
308
  * Gets the display string for the current OS
352
309
  */
353
-
354
-
355
310
  getDisplayText() {
356
311
  return Shortcut.getDisplayText(this.keyState);
357
312
  }
313
+
358
314
  /**
359
315
  * Gets the current keyState for the Shortcut
360
316
  */
361
-
362
-
363
317
  getKeyState() {
364
318
  return this.keyState;
365
319
  }
320
+
366
321
  /**
367
322
  * Sets the KeyState if it is valid
368
323
  * @param keyState
369
324
  */
370
-
371
-
372
325
  setKeyState(keyState) {
373
326
  if (Shortcut.isValidKeyState(keyState)) {
374
327
  log.debug2("Shortcut ".concat(this.id, " updated to ").concat(JSON.stringify(keyState)));
@@ -380,62 +333,53 @@ export default class Shortcut extends EventTarget {
380
333
  log.debug2("Shortcut ".concat(this.id, " tried to update to invalid keyState ").concat(JSON.stringify(keyState)));
381
334
  }
382
335
  }
336
+
383
337
  /**
384
338
  * Gets the default key state of the shortcut
385
339
  * @returns Default key state
386
340
  */
387
-
388
-
389
341
  getDefaultKeyState() {
390
342
  return this.defaultKeyState;
391
343
  }
392
-
393
344
  isDefault() {
394
345
  return Shortcut.doKeyStatesMatch(this.getDefaultKeyState(), this.getKeyState());
395
346
  }
347
+
396
348
  /**
397
349
  * Sets the shortcut to have null keyValue
398
350
  */
399
-
400
-
401
351
  setToNull() {
402
352
  this.setKeyState(Shortcut.NULL_KEY_STATE);
403
353
  }
404
-
405
354
  isNull() {
406
355
  return Shortcut.doKeyStatesMatch(this.keyState, Shortcut.NULL_KEY_STATE);
407
356
  }
357
+
408
358
  /**
409
359
  * Sets the shortcut to its default key state
410
360
  */
411
-
412
-
413
361
  setToDefault() {
414
362
  this.setKeyState(this.defaultKeyState);
415
363
  }
364
+
416
365
  /**
417
366
  * Checks if a KeyState matches the KeyState for the shortcut
418
367
  * @param keyState KeyState to check
419
368
  * @returns True if the passed KeyState matches the Shortcut's KeyState
420
369
  */
421
-
422
-
423
370
  matchesKeyState(keyState) {
424
371
  return Shortcut.doKeyStatesMatch(keyState, this.keyState);
425
372
  }
373
+
426
374
  /**
427
375
  * Alias for matchesKeyState
428
376
  * @param e KeyboardEvent to check if the Shortcut matches
429
377
  * @returns True if the event matches the Shortcut's KeyState
430
378
  */
431
-
432
-
433
379
  matchesEvent(e) {
434
380
  return this.matchesKeyState(Shortcut.getKeyStateFromEvent(e));
435
381
  }
436
-
437
382
  }
438
-
439
383
  _defineProperty(Shortcut, "NULL_KEY_STATE", {
440
384
  metaKey: false,
441
385
  shiftKey: false,
@@ -443,6 +387,5 @@ _defineProperty(Shortcut, "NULL_KEY_STATE", {
443
387
  ctrlKey: false,
444
388
  keyValue: null
445
389
  });
446
-
447
390
  _defineProperty(Shortcut, "isMacPlatform", ContextActionUtils.isMacPlatform());
448
391
  //# sourceMappingURL=Shortcut.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Shortcut.js","names":["EventTarget","Log","EventShimCustomEvent","ContextActionUtils","log","module","MODIFIER","KEY","ALLOWED_SINGLE_KEY_SET","Set","ENTER","DELETE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","Shortcut","isAllowedKey","key","Object","values","includes","isValidKeyState","state","keyValue","isMacPlatform","metaKey","isSingleKey","altKey","ctrlKey","shiftKey","has","createKeyState","keys","keyState","length","forEach","CTRL","ALT","OPTION","CMD","SHIFT","getKeyStateFromEvent","e","eventKey","keyCode","String","fromCharCode","getWindowsDisplayText","display","ESCAPE","getMacDisplayText","BACKSPACE","doKeyStatesMatch","state1","state2","toUpperCase","getDisplayText","constructor","id","shortcut","macShortcut","isEditable","name","tooltip","isMac","activeShortcut","defaultKeyState","getKeyState","setKeyState","debug2","JSON","stringify","dispatchEvent","detail","getDefaultKeyState","isDefault","setToNull","NULL_KEY_STATE","isNull","setToDefault","matchesKeyState","matchesEvent"],"sources":["../../src/shortcuts/Shortcut.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport { EventTarget } from 'event-target-shim';\nimport React from 'react';\nimport { Log } from '@deephaven/log';\nimport { CustomEventMap, EventShimCustomEvent } from '@deephaven/utils';\nimport { ContextActionUtils } from '../context-actions';\n\nconst log = Log.module('Shortcut');\n\nexport enum MODIFIER {\n CTRL = 'MODIFIER_CTRL',\n CMD = 'MODIFIER_CMD',\n ALT = 'MODIFIER_ALT',\n OPTION = 'MODIFIER_OPTION',\n SHIFT = 'MODIFIER_SHIFT',\n}\n\n// The value should match the KeyboardEvent.key value\n// This is the value which will be displayed if no display overrides are done in the OS specific getDisplayString methods\nexport enum KEY {\n A = 'A',\n B = 'B',\n C = 'C',\n D = 'D',\n E = 'E',\n F = 'F',\n G = 'G',\n H = 'H',\n I = 'I',\n J = 'J',\n K = 'K',\n L = 'L',\n M = 'M',\n N = 'N',\n O = 'O',\n P = 'P',\n Q = 'Q',\n R = 'R',\n S = 'S',\n T = 'T',\n U = 'U',\n V = 'V',\n W = 'W',\n X = 'X',\n Y = 'Y',\n Z = 'Z',\n ZERO = '0',\n ONE = '1',\n TWO = '2',\n THREE = '3',\n FOUR = '4',\n FIVE = '5',\n SIX = '6',\n SEVEN = '7',\n EIGHT = '8',\n NINE = '9',\n BACKSPACE = 'Backspace',\n ESCAPE = 'Escape',\n ENTER = 'Enter',\n DELETE = 'Delete',\n SLASH = '/',\n QUESTION_MARK = '?',\n BACKSLASH = '\\\\',\n PIPE = '|',\n MINUS = '-',\n UNDERSCORE = '_',\n EQUALS = '=',\n PLUS = '+',\n BACKTICK = '`',\n TILDE = '~',\n COMMA = ',',\n LEFT_CHEVRON = '<',\n PERIOD = '.',\n RIGHT_CHEVRON = '>',\n SEMICOLON = ';',\n COLON = ':',\n SINGLE_QUOTE = \"'\",\n DOUBLE_QUOTE = '\"',\n LEFT_BRACKET = '[',\n RIGHT_BRACKET = ']',\n LEFT_CURLY = '{',\n RIGHT_CURLY = '}',\n F1 = 'F1',\n F2 = 'F2',\n F3 = 'F3',\n F4 = 'F4',\n F5 = 'F5',\n F6 = 'F6',\n F7 = 'F7',\n F8 = 'F8',\n F9 = 'F9',\n F10 = 'F10',\n F11 = 'F11',\n F12 = 'F12',\n}\n\nconst ALLOWED_SINGLE_KEY_SET: Set<KEY> = new Set([\n KEY.ENTER,\n KEY.DELETE,\n KEY.F1,\n KEY.F2,\n KEY.F3,\n KEY.F4,\n KEY.F5,\n KEY.F6,\n KEY.F7,\n KEY.F8,\n KEY.F9,\n KEY.F10,\n KEY.F11,\n KEY.F12,\n]);\n\ntype ShortcutKeys = [...MODIFIER[], KEY];\n\nexport interface KeyState {\n /**\n * This is purposely keyValue and not key to make KeyboardEvents not match the interface\n * KeyboardEvents need some processing to get the actual value\n * Use Shortcut.getKeyStateFromEvent to get the right KeyState from an event\n */\n keyValue: string | null;\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n}\n\nexport interface ValidKeyState extends KeyState {\n keyValue: KEY | null;\n}\n\ntype EventMap = CustomEventMap<{\n onUpdate: CustomEvent<Shortcut>;\n}>;\n\nexport default class Shortcut extends EventTarget<EventMap, 'strict'> {\n readonly id: string; // Unique identifier for the shortcut\n\n readonly name: string; // e.g. Rename, Save, Run Selected\n\n readonly tooltip?: string;\n\n readonly isEditable: boolean;\n\n private readonly defaultKeyState: ValidKeyState;\n\n keyState: ValidKeyState;\n\n static NULL_KEY_STATE: ValidKeyState = {\n metaKey: false,\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n keyValue: null,\n };\n\n /**\n * Use to check if a keyCode corresponds to an allowed key for a shortcut\n * @param keyCode The keyCode to check. This should be the charCode of the key\n * @returns Type predicate asserting the key is an allowed KEY\n */\n static isAllowedKey(key: string | null): key is KEY {\n return Object.values(KEY).includes(key as KEY);\n }\n\n /**\n * Checks if a KeyState has a valid key.\n * @param state KeyState with any string as the key\n * @returns True if KeyState is is using an allowed keyCode\n */\n static isValidKeyState(state: KeyState): state is ValidKeyState {\n const { keyValue } = state;\n\n if (keyValue === null) {\n // Null state is valid\n return true;\n }\n\n if (!Shortcut.isMacPlatform && state.metaKey) {\n // MetaKey not allowed in windows\n return false;\n }\n\n if (!Shortcut.isAllowedKey(keyValue)) {\n return false;\n }\n\n const isSingleKey =\n !state.altKey && !state.ctrlKey && !state.metaKey && !state.shiftKey;\n\n return !isSingleKey || ALLOWED_SINGLE_KEY_SET.has(keyValue);\n }\n\n static isMacPlatform = ContextActionUtils.isMacPlatform();\n\n /**\n * Creates a KeyState from a valid array of modifier and key constants\n * @param keys Array of keys in the shortcut. Modifiers first and key last. Should use the MODIFIER and KEY enums\n * @returns KeyState representing the array of constants\n */\n static createKeyState(keys: ShortcutKeys): ValidKeyState {\n const keyState: ValidKeyState = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n keyValue: keys[keys.length - 1] as KEY,\n };\n\n keys.forEach(key => {\n switch (key) {\n case MODIFIER.CTRL:\n keyState.ctrlKey = true;\n break;\n case MODIFIER.ALT:\n case MODIFIER.OPTION:\n keyState.altKey = true;\n break;\n case MODIFIER.CMD:\n keyState.metaKey = true;\n break;\n case MODIFIER.SHIFT:\n keyState.shiftKey = true;\n break;\n default:\n break;\n }\n });\n\n return keyState;\n }\n\n static getKeyStateFromEvent(\n e: React.KeyboardEvent | KeyboardEvent\n ): KeyState {\n const { key: eventKey, keyCode } = e;\n let key = '';\n if (\n eventKey === 'Shift' ||\n eventKey === 'Meta' ||\n eventKey === 'Control' ||\n eventKey === 'Alt'\n ) {\n key = '';\n } else if (\n // This is primarily for Mac which has a symbol keyboard hidden behind the alt key\n // The keyCode still corresponds to the letter keyCode, but the key value will be a symbol\n !Shortcut.isAllowedKey(eventKey) &&\n Shortcut.isAllowedKey(String.fromCharCode(keyCode))\n ) {\n key = String.fromCharCode(keyCode);\n } else {\n key = eventKey;\n }\n\n return {\n keyValue: key,\n altKey: e.altKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n shiftKey: e.shiftKey,\n };\n }\n\n /**\n * Gets display string for Windows (and Linux + any other non-Mac OS)\n * If the key is not an allowed key, the display will only display the modifiers\n * @param keyState KeyState to get the display for\n * @returns The string to display on Windows/non-Mac OS\n */\n private static getWindowsDisplayText(keyState: KeyState): string {\n let display = '';\n\n if (keyState.ctrlKey) {\n display += 'Ctrl+';\n }\n if (keyState.altKey) {\n display += 'Alt+';\n }\n if (keyState.shiftKey) {\n display += 'Shift+';\n }\n\n if (keyState.keyValue === KEY.ESCAPE) {\n display += 'Esc';\n } else if (keyState.keyValue !== null) {\n display += keyState.keyValue;\n }\n\n return display;\n }\n\n /**\n * Gets display string Mac OS\n * If the key is not an allowed key, the display will only display the modifiers\n * @param keyState KeyState to get the display for\n * @returns The string to display on Mac OS\n */\n private static getMacDisplayText(keyState: KeyState): string {\n let display = '';\n\n if (keyState.ctrlKey) {\n display += '⌃';\n }\n if (keyState.altKey) {\n display += '⌥';\n }\n if (keyState.shiftKey) {\n display += '⇧';\n }\n if (keyState.metaKey) {\n display += '⌘';\n }\n\n switch (keyState.keyValue) {\n case KEY.ENTER:\n display += '⏎';\n break;\n case KEY.ESCAPE:\n display += '⎋';\n break;\n case KEY.BACKSPACE:\n display += '⌫';\n break;\n case KEY.DELETE:\n display += '⌦';\n break;\n case null:\n break;\n default:\n display += keyState.keyValue;\n }\n\n return display;\n }\n\n /**\n * Checks if 2 KeyStates match\n * @param state1 First KeyState to compare\n * @param state2 Second KeyState to compare\n * @returns True if the KeyStates match and have non-null keyValues\n */\n static doKeyStatesMatch(state1: KeyState, state2: KeyState): boolean {\n return (\n state1.keyValue?.toUpperCase() === state2.keyValue?.toUpperCase() &&\n state1.altKey === state2.altKey &&\n state1.ctrlKey === state2.ctrlKey &&\n state1.metaKey === state2.metaKey &&\n state1.shiftKey === state2.shiftKey\n );\n }\n\n /**\n * Gets the display string for the current OS from a KeyState.\n * @param keyState KeyState to get the display for\n * @returns Display string for the current OS\n */\n static getDisplayText(keyState: KeyState): string {\n if (keyState.keyValue === null) {\n return '';\n }\n return Shortcut.isMacPlatform\n ? Shortcut.getMacDisplayText(keyState)\n : Shortcut.getWindowsDisplayText(keyState);\n }\n\n constructor({\n id,\n shortcut,\n macShortcut,\n isEditable = true,\n name,\n tooltip,\n }: {\n id: string;\n shortcut: ShortcutKeys;\n macShortcut: ShortcutKeys;\n isEditable?: boolean;\n name: string;\n tooltip?: string;\n }) {\n super();\n this.id = id;\n this.name = name;\n this.tooltip = tooltip;\n this.isEditable = isEditable;\n\n const isMac = Shortcut.isMacPlatform;\n const activeShortcut = isMac ? macShortcut : shortcut;\n this.defaultKeyState = Shortcut.createKeyState(activeShortcut);\n this.keyState = this.defaultKeyState;\n }\n\n /**\n * Gets the display string for the current OS\n */\n getDisplayText(): string {\n return Shortcut.getDisplayText(this.keyState);\n }\n\n /**\n * Gets the current keyState for the Shortcut\n */\n getKeyState(): ValidKeyState {\n return this.keyState;\n }\n\n /**\n * Sets the KeyState if it is valid\n * @param keyState\n */\n setKeyState(keyState: KeyState): void {\n if (Shortcut.isValidKeyState(keyState)) {\n log.debug2(`Shortcut ${this.id} updated to ${JSON.stringify(keyState)}`);\n this.keyState = keyState;\n this.dispatchEvent(\n new EventShimCustomEvent('onUpdate', { detail: this })\n );\n } else {\n log.debug2(\n `Shortcut ${\n this.id\n } tried to update to invalid keyState ${JSON.stringify(keyState)}`\n );\n }\n }\n\n /**\n * Gets the default key state of the shortcut\n * @returns Default key state\n */\n getDefaultKeyState(): ValidKeyState {\n return this.defaultKeyState;\n }\n\n isDefault(): boolean {\n return Shortcut.doKeyStatesMatch(\n this.getDefaultKeyState(),\n this.getKeyState()\n );\n }\n\n /**\n * Sets the shortcut to have null keyValue\n */\n setToNull(): void {\n this.setKeyState(Shortcut.NULL_KEY_STATE);\n }\n\n isNull(): boolean {\n return Shortcut.doKeyStatesMatch(this.keyState, Shortcut.NULL_KEY_STATE);\n }\n\n /**\n * Sets the shortcut to its default key state\n */\n setToDefault(): void {\n this.setKeyState(this.defaultKeyState);\n }\n\n /**\n * Checks if a KeyState matches the KeyState for the shortcut\n * @param keyState KeyState to check\n * @returns True if the passed KeyState matches the Shortcut's KeyState\n */\n matchesKeyState(keyState: KeyState): boolean {\n return Shortcut.doKeyStatesMatch(keyState, this.keyState);\n }\n\n /**\n * Alias for matchesKeyState\n * @param e KeyboardEvent to check if the Shortcut matches\n * @returns True if the event matches the Shortcut's KeyState\n */\n matchesEvent(e: React.KeyboardEvent | KeyboardEvent): boolean {\n return this.matchesKeyState(Shortcut.getKeyStateFromEvent(e));\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"Shortcut.js","names":["EventTarget","Log","EventShimCustomEvent","ContextActionUtils","log","module","MODIFIER","KEY","ALLOWED_SINGLE_KEY_SET","Set","ENTER","DELETE","F1","F2","F3","F4","F5","F6","F7","F8","F9","F10","F11","F12","Shortcut","isAllowedKey","key","Object","values","includes","isValidKeyState","state","keyValue","isMacPlatform","metaKey","isSingleKey","altKey","ctrlKey","shiftKey","has","createKeyState","keys","keyState","length","forEach","CTRL","ALT","OPTION","CMD","SHIFT","getKeyStateFromEvent","e","eventKey","keyCode","String","fromCharCode","getWindowsDisplayText","display","ESCAPE","getMacDisplayText","BACKSPACE","doKeyStatesMatch","state1","state2","toUpperCase","getDisplayText","constructor","id","shortcut","macShortcut","isEditable","name","tooltip","isMac","activeShortcut","defaultKeyState","getKeyState","setKeyState","debug2","JSON","stringify","dispatchEvent","detail","getDefaultKeyState","isDefault","setToNull","NULL_KEY_STATE","isNull","setToDefault","matchesKeyState","matchesEvent"],"sources":["../../src/shortcuts/Shortcut.ts"],"sourcesContent":["/* eslint-disable no-underscore-dangle */\nimport { EventTarget } from 'event-target-shim';\nimport React from 'react';\nimport { Log } from '@deephaven/log';\nimport { CustomEventMap, EventShimCustomEvent } from '@deephaven/utils';\nimport { ContextActionUtils } from '../context-actions';\n\nconst log = Log.module('Shortcut');\n\nexport enum MODIFIER {\n CTRL = 'MODIFIER_CTRL',\n CMD = 'MODIFIER_CMD',\n ALT = 'MODIFIER_ALT',\n OPTION = 'MODIFIER_OPTION',\n SHIFT = 'MODIFIER_SHIFT',\n}\n\n// The value should match the KeyboardEvent.key value\n// This is the value which will be displayed if no display overrides are done in the OS specific getDisplayString methods\nexport enum KEY {\n A = 'A',\n B = 'B',\n C = 'C',\n D = 'D',\n E = 'E',\n F = 'F',\n G = 'G',\n H = 'H',\n I = 'I',\n J = 'J',\n K = 'K',\n L = 'L',\n M = 'M',\n N = 'N',\n O = 'O',\n P = 'P',\n Q = 'Q',\n R = 'R',\n S = 'S',\n T = 'T',\n U = 'U',\n V = 'V',\n W = 'W',\n X = 'X',\n Y = 'Y',\n Z = 'Z',\n ZERO = '0',\n ONE = '1',\n TWO = '2',\n THREE = '3',\n FOUR = '4',\n FIVE = '5',\n SIX = '6',\n SEVEN = '7',\n EIGHT = '8',\n NINE = '9',\n BACKSPACE = 'Backspace',\n ESCAPE = 'Escape',\n ENTER = 'Enter',\n DELETE = 'Delete',\n SLASH = '/',\n QUESTION_MARK = '?',\n BACKSLASH = '\\\\',\n PIPE = '|',\n MINUS = '-',\n UNDERSCORE = '_',\n EQUALS = '=',\n PLUS = '+',\n BACKTICK = '`',\n TILDE = '~',\n COMMA = ',',\n LEFT_CHEVRON = '<',\n PERIOD = '.',\n RIGHT_CHEVRON = '>',\n SEMICOLON = ';',\n COLON = ':',\n SINGLE_QUOTE = \"'\",\n DOUBLE_QUOTE = '\"',\n LEFT_BRACKET = '[',\n RIGHT_BRACKET = ']',\n LEFT_CURLY = '{',\n RIGHT_CURLY = '}',\n F1 = 'F1',\n F2 = 'F2',\n F3 = 'F3',\n F4 = 'F4',\n F5 = 'F5',\n F6 = 'F6',\n F7 = 'F7',\n F8 = 'F8',\n F9 = 'F9',\n F10 = 'F10',\n F11 = 'F11',\n F12 = 'F12',\n}\n\nconst ALLOWED_SINGLE_KEY_SET: Set<KEY> = new Set([\n KEY.ENTER,\n KEY.DELETE,\n KEY.F1,\n KEY.F2,\n KEY.F3,\n KEY.F4,\n KEY.F5,\n KEY.F6,\n KEY.F7,\n KEY.F8,\n KEY.F9,\n KEY.F10,\n KEY.F11,\n KEY.F12,\n]);\n\ntype ShortcutKeys = [...MODIFIER[], KEY];\n\nexport interface KeyState {\n /**\n * This is purposely keyValue and not key to make KeyboardEvents not match the interface\n * KeyboardEvents need some processing to get the actual value\n * Use Shortcut.getKeyStateFromEvent to get the right KeyState from an event\n */\n keyValue: string | null;\n altKey: boolean;\n ctrlKey: boolean;\n metaKey: boolean;\n shiftKey: boolean;\n}\n\nexport interface ValidKeyState extends KeyState {\n keyValue: KEY | null;\n}\n\ntype EventMap = CustomEventMap<{\n onUpdate: CustomEvent<Shortcut>;\n}>;\n\nexport default class Shortcut extends EventTarget<EventMap, 'strict'> {\n readonly id: string; // Unique identifier for the shortcut\n\n readonly name: string; // e.g. Rename, Save, Run Selected\n\n readonly tooltip?: string;\n\n readonly isEditable: boolean;\n\n private readonly defaultKeyState: ValidKeyState;\n\n keyState: ValidKeyState;\n\n static NULL_KEY_STATE: ValidKeyState = {\n metaKey: false,\n shiftKey: false,\n altKey: false,\n ctrlKey: false,\n keyValue: null,\n };\n\n /**\n * Use to check if a keyCode corresponds to an allowed key for a shortcut\n * @param keyCode The keyCode to check. This should be the charCode of the key\n * @returns Type predicate asserting the key is an allowed KEY\n */\n static isAllowedKey(key: string | null): key is KEY {\n return Object.values(KEY).includes(key as KEY);\n }\n\n /**\n * Checks if a KeyState has a valid key.\n * @param state KeyState with any string as the key\n * @returns True if KeyState is is using an allowed keyCode\n */\n static isValidKeyState(state: KeyState): state is ValidKeyState {\n const { keyValue } = state;\n\n if (keyValue === null) {\n // Null state is valid\n return true;\n }\n\n if (!Shortcut.isMacPlatform && state.metaKey) {\n // MetaKey not allowed in windows\n return false;\n }\n\n if (!Shortcut.isAllowedKey(keyValue)) {\n return false;\n }\n\n const isSingleKey =\n !state.altKey && !state.ctrlKey && !state.metaKey && !state.shiftKey;\n\n return !isSingleKey || ALLOWED_SINGLE_KEY_SET.has(keyValue);\n }\n\n static isMacPlatform = ContextActionUtils.isMacPlatform();\n\n /**\n * Creates a KeyState from a valid array of modifier and key constants\n * @param keys Array of keys in the shortcut. Modifiers first and key last. Should use the MODIFIER and KEY enums\n * @returns KeyState representing the array of constants\n */\n static createKeyState(keys: ShortcutKeys): ValidKeyState {\n const keyState: ValidKeyState = {\n altKey: false,\n ctrlKey: false,\n metaKey: false,\n shiftKey: false,\n keyValue: keys[keys.length - 1] as KEY,\n };\n\n keys.forEach(key => {\n switch (key) {\n case MODIFIER.CTRL:\n keyState.ctrlKey = true;\n break;\n case MODIFIER.ALT:\n case MODIFIER.OPTION:\n keyState.altKey = true;\n break;\n case MODIFIER.CMD:\n keyState.metaKey = true;\n break;\n case MODIFIER.SHIFT:\n keyState.shiftKey = true;\n break;\n default:\n break;\n }\n });\n\n return keyState;\n }\n\n static getKeyStateFromEvent(\n e: React.KeyboardEvent | KeyboardEvent\n ): KeyState {\n const { key: eventKey, keyCode } = e;\n let key = '';\n if (\n eventKey === 'Shift' ||\n eventKey === 'Meta' ||\n eventKey === 'Control' ||\n eventKey === 'Alt'\n ) {\n key = '';\n } else if (\n // This is primarily for Mac which has a symbol keyboard hidden behind the alt key\n // The keyCode still corresponds to the letter keyCode, but the key value will be a symbol\n !Shortcut.isAllowedKey(eventKey) &&\n Shortcut.isAllowedKey(String.fromCharCode(keyCode))\n ) {\n key = String.fromCharCode(keyCode);\n } else {\n key = eventKey;\n }\n\n return {\n keyValue: key,\n altKey: e.altKey,\n ctrlKey: e.ctrlKey,\n metaKey: e.metaKey,\n shiftKey: e.shiftKey,\n };\n }\n\n /**\n * Gets display string for Windows (and Linux + any other non-Mac OS)\n * If the key is not an allowed key, the display will only display the modifiers\n * @param keyState KeyState to get the display for\n * @returns The string to display on Windows/non-Mac OS\n */\n private static getWindowsDisplayText(keyState: KeyState): string {\n let display = '';\n\n if (keyState.ctrlKey) {\n display += 'Ctrl+';\n }\n if (keyState.altKey) {\n display += 'Alt+';\n }\n if (keyState.shiftKey) {\n display += 'Shift+';\n }\n\n if (keyState.keyValue === KEY.ESCAPE) {\n display += 'Esc';\n } else if (keyState.keyValue !== null) {\n display += keyState.keyValue;\n }\n\n return display;\n }\n\n /**\n * Gets display string Mac OS\n * If the key is not an allowed key, the display will only display the modifiers\n * @param keyState KeyState to get the display for\n * @returns The string to display on Mac OS\n */\n private static getMacDisplayText(keyState: KeyState): string {\n let display = '';\n\n if (keyState.ctrlKey) {\n display += '⌃';\n }\n if (keyState.altKey) {\n display += '⌥';\n }\n if (keyState.shiftKey) {\n display += '⇧';\n }\n if (keyState.metaKey) {\n display += '⌘';\n }\n\n switch (keyState.keyValue) {\n case KEY.ENTER:\n display += '⏎';\n break;\n case KEY.ESCAPE:\n display += '⎋';\n break;\n case KEY.BACKSPACE:\n display += '⌫';\n break;\n case KEY.DELETE:\n display += '⌦';\n break;\n case null:\n break;\n default:\n display += keyState.keyValue;\n }\n\n return display;\n }\n\n /**\n * Checks if 2 KeyStates match\n * @param state1 First KeyState to compare\n * @param state2 Second KeyState to compare\n * @returns True if the KeyStates match and have non-null keyValues\n */\n static doKeyStatesMatch(state1: KeyState, state2: KeyState): boolean {\n return (\n state1.keyValue?.toUpperCase() === state2.keyValue?.toUpperCase() &&\n state1.altKey === state2.altKey &&\n state1.ctrlKey === state2.ctrlKey &&\n state1.metaKey === state2.metaKey &&\n state1.shiftKey === state2.shiftKey\n );\n }\n\n /**\n * Gets the display string for the current OS from a KeyState.\n * @param keyState KeyState to get the display for\n * @returns Display string for the current OS\n */\n static getDisplayText(keyState: KeyState): string {\n if (keyState.keyValue === null) {\n return '';\n }\n return Shortcut.isMacPlatform\n ? Shortcut.getMacDisplayText(keyState)\n : Shortcut.getWindowsDisplayText(keyState);\n }\n\n constructor({\n id,\n shortcut,\n macShortcut,\n isEditable = true,\n name,\n tooltip,\n }: {\n id: string;\n shortcut: ShortcutKeys;\n macShortcut: ShortcutKeys;\n isEditable?: boolean;\n name: string;\n tooltip?: string;\n }) {\n super();\n this.id = id;\n this.name = name;\n this.tooltip = tooltip;\n this.isEditable = isEditable;\n\n const isMac = Shortcut.isMacPlatform;\n const activeShortcut = isMac ? macShortcut : shortcut;\n this.defaultKeyState = Shortcut.createKeyState(activeShortcut);\n this.keyState = this.defaultKeyState;\n }\n\n /**\n * Gets the display string for the current OS\n */\n getDisplayText(): string {\n return Shortcut.getDisplayText(this.keyState);\n }\n\n /**\n * Gets the current keyState for the Shortcut\n */\n getKeyState(): ValidKeyState {\n return this.keyState;\n }\n\n /**\n * Sets the KeyState if it is valid\n * @param keyState\n */\n setKeyState(keyState: KeyState): void {\n if (Shortcut.isValidKeyState(keyState)) {\n log.debug2(`Shortcut ${this.id} updated to ${JSON.stringify(keyState)}`);\n this.keyState = keyState;\n this.dispatchEvent(\n new EventShimCustomEvent('onUpdate', { detail: this })\n );\n } else {\n log.debug2(\n `Shortcut ${\n this.id\n } tried to update to invalid keyState ${JSON.stringify(keyState)}`\n );\n }\n }\n\n /**\n * Gets the default key state of the shortcut\n * @returns Default key state\n */\n getDefaultKeyState(): ValidKeyState {\n return this.defaultKeyState;\n }\n\n isDefault(): boolean {\n return Shortcut.doKeyStatesMatch(\n this.getDefaultKeyState(),\n this.getKeyState()\n );\n }\n\n /**\n * Sets the shortcut to have null keyValue\n */\n setToNull(): void {\n this.setKeyState(Shortcut.NULL_KEY_STATE);\n }\n\n isNull(): boolean {\n return Shortcut.doKeyStatesMatch(this.keyState, Shortcut.NULL_KEY_STATE);\n }\n\n /**\n * Sets the shortcut to its default key state\n */\n setToDefault(): void {\n this.setKeyState(this.defaultKeyState);\n }\n\n /**\n * Checks if a KeyState matches the KeyState for the shortcut\n * @param keyState KeyState to check\n * @returns True if the passed KeyState matches the Shortcut's KeyState\n */\n matchesKeyState(keyState: KeyState): boolean {\n return Shortcut.doKeyStatesMatch(keyState, this.keyState);\n }\n\n /**\n * Alias for matchesKeyState\n * @param e KeyboardEvent to check if the Shortcut matches\n * @returns True if the event matches the Shortcut's KeyState\n */\n matchesEvent(e: React.KeyboardEvent | KeyboardEvent): boolean {\n return this.matchesKeyState(Shortcut.getKeyStateFromEvent(e));\n }\n}\n"],"mappings":"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"}