@deephaven/components 0.19.2-beta.0 → 0.19.2-beta.5

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 (74) hide show
  1. package/dist/AutoCompleteInput.d.ts.map +1 -1
  2. package/dist/AutoCompleteInput.js +7 -11
  3. package/dist/AutoCompleteInput.js.map +1 -1
  4. package/dist/BasicModal.d.ts.map +1 -1
  5. package/dist/BasicModal.js +5 -7
  6. package/dist/BasicModal.js.map +1 -1
  7. package/dist/Button.d.ts +9 -3
  8. package/dist/Button.d.ts.map +1 -1
  9. package/dist/Button.js +18 -10
  10. package/dist/Button.js.map +1 -1
  11. package/dist/CardFlip.js +1 -1
  12. package/dist/CardFlip.js.map +1 -1
  13. package/dist/Collapse.js +2 -2
  14. package/dist/Collapse.js.map +1 -1
  15. package/dist/ComboBox.d.ts.map +1 -1
  16. package/dist/ComboBox.js +11 -15
  17. package/dist/ComboBox.js.map +1 -1
  18. package/dist/CustomTimeSelect.js +2 -2
  19. package/dist/CustomTimeSelect.js.map +1 -1
  20. package/dist/DraggableItemList.d.ts +1 -1
  21. package/dist/DraggableItemList.d.ts.map +1 -1
  22. package/dist/DraggableItemList.js +10 -7
  23. package/dist/DraggableItemList.js.map +1 -1
  24. package/dist/HierarchicalCheckboxMenu.d.ts.map +1 -1
  25. package/dist/HierarchicalCheckboxMenu.js +9 -6
  26. package/dist/HierarchicalCheckboxMenu.js.map +1 -1
  27. package/dist/ItemList.js +19 -17
  28. package/dist/ItemList.js.map +1 -1
  29. package/dist/LoadingOverlay.js +1 -1
  30. package/dist/LoadingOverlay.js.map +1 -1
  31. package/dist/MaskedInput.js +3 -1
  32. package/dist/MaskedInput.js.map +1 -1
  33. package/dist/RadioGroup.js +12 -8
  34. package/dist/RadioGroup.js.map +1 -1
  35. package/dist/SocketedButton.d.ts.map +1 -1
  36. package/dist/SocketedButton.js +1 -1
  37. package/dist/SocketedButton.js.map +1 -1
  38. package/dist/TimeSlider.d.ts.map +1 -1
  39. package/dist/TimeSlider.js +2 -2
  40. package/dist/TimeSlider.js.map +1 -1
  41. package/dist/ValidateLabelInput.d.ts.map +1 -1
  42. package/dist/ValidateLabelInput.js +2 -2
  43. package/dist/ValidateLabelInput.js.map +1 -1
  44. package/dist/context-actions/ContextActionUtils.d.ts +3 -3
  45. package/dist/context-actions/ContextActionUtils.js +14 -8
  46. package/dist/context-actions/ContextActionUtils.js.map +1 -1
  47. package/dist/context-actions/ContextActions.d.ts.map +1 -1
  48. package/dist/context-actions/ContextActions.js +9 -16
  49. package/dist/context-actions/ContextActions.js.map +1 -1
  50. package/dist/context-actions/ContextMenu.d.ts.map +1 -1
  51. package/dist/context-actions/ContextMenu.js +11 -13
  52. package/dist/context-actions/ContextMenu.js.map +1 -1
  53. package/dist/context-actions/ContextMenuItem.d.ts.map +1 -1
  54. package/dist/context-actions/ContextMenuItem.js +8 -6
  55. package/dist/context-actions/ContextMenuItem.js.map +1 -1
  56. package/dist/context-actions/GlobalContextAction.d.ts.map +1 -1
  57. package/dist/context-actions/GlobalContextAction.js +7 -12
  58. package/dist/context-actions/GlobalContextAction.js.map +1 -1
  59. package/dist/context-actions/GlobalContextActions.js +1 -1
  60. package/dist/context-actions/GlobalContextActions.js.map +1 -1
  61. package/dist/menu-actions/DropdownMenu.js +1 -1
  62. package/dist/menu-actions/DropdownMenu.js.map +1 -1
  63. package/dist/menu-actions/Menu.d.ts.map +1 -1
  64. package/dist/menu-actions/Menu.js +3 -3
  65. package/dist/menu-actions/Menu.js.map +1 -1
  66. package/dist/navigation/MenuItem.js +2 -2
  67. package/dist/navigation/MenuItem.js.map +1 -1
  68. package/dist/navigation/Stack.d.ts.map +1 -1
  69. package/dist/navigation/Stack.js +2 -2
  70. package/dist/navigation/Stack.js.map +1 -1
  71. package/dist/popper/Tooltip.js +1 -1
  72. package/dist/popper/Tooltip.js.map +1 -1
  73. package/package.json +8 -8
  74. package/scss/BaseStyleSheet.scss +5 -0
@@ -23,7 +23,7 @@ class GlobalContextAction extends Component {
23
23
  handleContextMenu(evt) {
24
24
  var e = evt;
25
25
 
26
- if (!e.contextActions) {
26
+ if (e.contextActions == null) {
27
27
  e.contextActions = [];
28
28
  }
29
29
 
@@ -31,11 +31,11 @@ class GlobalContextAction extends Component {
31
31
  action
32
32
  } = this.props;
33
33
 
34
- if (!action.title && !action.menuElement) {
34
+ if (action.title == null && !action.menuElement) {
35
35
  return;
36
36
  }
37
37
 
38
- if (!e.contextActions) {
38
+ if (e.contextActions == null) {
39
39
  e.contextActions = [];
40
40
  }
41
41
 
@@ -44,22 +44,17 @@ class GlobalContextAction extends Component {
44
44
  }
45
45
 
46
46
  handleKeyDown(e) {
47
- var _action$shortcut;
48
-
49
47
  var {
50
48
  action
51
49
  } = this.props;
52
50
 
53
- if (!ContextActionUtils.actionsDisabled && (_action$shortcut = action.shortcut) !== null && _action$shortcut !== void 0 && _action$shortcut.matchesEvent(e)) {
51
+ if (!ContextActionUtils.actionsDisabled && action.shortcut !== undefined && action.shortcut.matchesEvent(e)) {
54
52
  var _action$action;
55
53
 
56
54
  log.debug('Global hotkey matched!', e);
57
- var result = (_action$action = action.action) === null || _action$action === void 0 ? void 0 : _action$action.call(action, e);
58
-
59
- if (result || result === undefined) {
60
- e.preventDefault();
61
- e.stopPropagation();
62
- }
55
+ (_action$action = action.action) === null || _action$action === void 0 ? void 0 : _action$action.call(action, e);
56
+ e.preventDefault();
57
+ e.stopPropagation();
63
58
  }
64
59
  }
65
60
 
@@ -1 +1 @@
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
+ {"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","undefined","matchesEvent","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 == null) {\n e.contextActions = [];\n }\n\n const { action } = this.props;\n\n if (action.title == null && !action.menuElement) {\n return;\n }\n\n if (e.contextActions == null) {\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 !== undefined &&\n action.shortcut.matchesEvent(e)\n ) {\n log.debug('Global hotkey matched!', e);\n\n action.action?.(e);\n\n e.preventDefault();\n e.stopPropagation();\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,IAAIC,CAAC,CAACC,cAAF,IAAoB,IAAxB,EAA8B;MAC5BD,CAAC,CAACC,cAAF,GAAmB,EAAnB;IACD;;IAED,IAAM;MAAEC;IAAF,IAAa,KAAKb,KAAxB;;IAEA,IAAIa,MAAM,CAACC,KAAP,IAAgB,IAAhB,IAAwB,CAACD,MAAM,CAACE,WAApC,EAAiD;MAC/C;IACD;;IAED,IAAIJ,CAAC,CAACC,cAAF,IAAoB,IAAxB,EAA8B;MAC5BD,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;IACpC,IAAM;MAAEE;IAAF,IAAa,KAAKb,KAAxB;;IACA,IACE,CAACL,kBAAkB,CAACuB,eAApB,IACAL,MAAM,CAACM,QAAP,KAAoBC,SADpB,IAEAP,MAAM,CAACM,QAAP,CAAgBE,YAAhB,CAA6BV,CAA7B,CAHF,EAIE;MAAA;;MACAf,GAAG,CAACqB,KAAJ,CAAU,wBAAV,EAAoCN,CAApC;MAEA,kBAAAE,MAAM,CAACA,MAAP,uEAAAA,MAAM,EAAUF,CAAV,CAAN;MAEAA,CAAC,CAACW,cAAF;MACAX,CAAC,CAACY,eAAF;IACD;EACF;;EAEDC,MAAM,GAAS;IACb,OAAO,IAAP;EACD;;AA5DmE;;AA+DtE,eAAe1B,mBAAf"}
@@ -15,7 +15,7 @@ class GlobalContextActions extends Component {
15
15
  shortcut
16
16
  } = action;
17
17
 
18
- if (action.title || action.menuElement || shortcut) {
18
+ if (action.title != null || action.menuElement || shortcut) {
19
19
  var actionElement = /*#__PURE__*/React.createElement(GlobalContextAction, {
20
20
  key: "".concat(action.title, ".").concat(shortcut === null || shortcut === void 0 ? void 0 : shortcut.id),
21
21
  action: action,
@@ -1 +1 @@
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
+ {"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 != null || 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,IAAgB,IAAhB,IAAwBF,MAAM,CAACG,WAA/B,IAA8CF,QAAlD,EAA4D;QAC1D,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"}
@@ -84,7 +84,7 @@ class DropdownMenu extends PureComponent {
84
84
  } = this.props;
85
85
 
86
86
  if (prevProps.isShown !== isShown) {
87
- if (isShown) {
87
+ if (isShown !== null && isShown) {
88
88
  // https://github.com/reactjs/react-transition-group/issues/382
89
89
  window.requestAnimationFrame(() => {
90
90
  this.openMenu();
@@ -1 +1 @@
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":"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"}
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 !== null && 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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/menu-actions/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAA2B,EACzB,aAAa,EACd,MAAM,uCAAuC,CAAC;AAG/C,oBAAY,WAAW,GAAG;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,aAAK,SAAS,GAAG;IACf,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACzC,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,aAAK,SAAS,GAAG;IACf,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;GAOG;AAEH,cAAM,IAAK,SAAQ,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;IACpD,MAAM,CAAC,YAAY;qBACJ,IAAI;wBAGD,IAAI;wBAGJ,IAAI;;;;MAMpB;gBAEU,KAAK,EAAE,SAAS;IAuB5B,iBAAiB,IAAI,IAAI;IAYzB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAO9C,oBAAoB,IAAI,IAAI;IAI5B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE3C,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAEzB,GAAG,EAAE,MAAM,CAAC;IAEZ,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAUjC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IASrC,aAAa,IAAI,MAAM;IAKvB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,QAAQ,IAAI,IAAI;IAoBhB,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI;IAiD3C,SAAS,CAAC,QAAQ,UAAQ,GAAG,IAAI;IASjC,eAAe,IAAI,IAAI;IAIvB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI;IAU3E,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAMtD,gBAAgB,IAAI,IAAI;IAIxB,MAAM,IAAI,GAAG,CAAC,OAAO;CA4CtB;AAED,eAAe,IAAI,CAAC"}
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../src/menu-actions/Menu.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAA2B,EACzB,aAAa,EACd,MAAM,uCAAuC,CAAC;AAG/C,oBAAY,WAAW,GAAG;IACxB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF,aAAK,SAAS,GAAG;IACf,OAAO,EAAE,aAAa,GAAG,aAAa,EAAE,CAAC;IACzC,SAAS,CAAC,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,KAAK,CAAC,aAAa,CAAC;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,aAAK,SAAS,GAAG;IACf,SAAS,EAAE,aAAa,EAAE,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;GAOG;AAEH,cAAM,IAAK,SAAQ,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC;IACpD,MAAM,CAAC,YAAY;qBACJ,IAAI;wBAGD,IAAI;wBAGJ,IAAI;;;;MAMpB;gBAEU,KAAK,EAAE,SAAS;IAuB5B,iBAAiB,IAAI,IAAI;IAYzB,kBAAkB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAO9C,oBAAoB,IAAI,IAAI;IAI5B,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,cAAc,CAAC,CAAC;IAE3C,QAAQ,EAAE,OAAO,GAAG,IAAI,CAAC;IAEzB,GAAG,EAAE,MAAM,CAAC;IAEZ,gBAAgB,IAAI,MAAM,GAAG,IAAI;IAajC,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAYrC,aAAa,IAAI,MAAM;IAKvB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIlC,QAAQ,IAAI,IAAI;IAoBhB,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,aAAa,GAAG,IAAI;IAiD3C,SAAS,CAAC,QAAQ,UAAQ,GAAG,IAAI;IASjC,eAAe,IAAI,IAAI;IAIvB,mBAAmB,CAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,EAAE,KAAK,CAAC,cAAc,GAAG,IAAI;IAc3E,uBAAuB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI;IAMtD,gBAAgB,IAAI,IAAI;IAIxB,MAAM,IAAI,GAAG,CAAC,OAAO;CA4CtB;AAED,eAAe,IAAI,CAAC"}
@@ -81,7 +81,7 @@ class Menu extends PureComponent {
81
81
  options
82
82
  } = this.props;
83
83
 
84
- if (options.separateKeyboardMouse) {
84
+ if (options.separateKeyboardMouse !== undefined && options.separateKeyboardMouse) {
85
85
  var {
86
86
  keyboardIndex
87
87
  } = this.state;
@@ -96,7 +96,7 @@ class Menu extends PureComponent {
96
96
  options
97
97
  } = this.props;
98
98
 
99
- if (options.separateKeyboardMouse) {
99
+ if (options.separateKeyboardMouse !== undefined && options.separateKeyboardMouse) {
100
100
  this.setState({
101
101
  keyboardIndex: index
102
102
  });
@@ -200,7 +200,7 @@ class Menu extends PureComponent {
200
200
  e.preventDefault();
201
201
  e.stopPropagation();
202
202
 
203
- if (menuItem != null && !menuItem.disabled && menuItem.action != null) {
203
+ if (menuItem != null && (menuItem.disabled === undefined || !menuItem.disabled) && menuItem.action != null) {
204
204
  menuItem.action();
205
205
  this.closeMenu(true);
206
206
  }
@@ -1 +1 @@
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":";;;;;;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;OACOC,kB;OAGAC,e;;AAwBP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAMC,IAAN,SAAmBH,aAAnB,CAAuD;EAgBrDI,WAAW,CAACC,KAAD,EAAmB;IAAA;;IAC5B,MAAMA,KAAN;;IAD4B;;IAAA;;IAAA;;IAG5B,KAAKC,aAAL,GAAqB,KAAKA,aAAL,CAAmBC,IAAnB,CAAwB,IAAxB,CAArB;IACA,KAAKC,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBD,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAKE,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BF,IAA7B,CAAkC,IAAlC,CAA/B;IACA,KAAKG,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBH,IAAtB,CAA2B,IAA3B,CAAxB;IACA,KAAKI,eAAL,GAAuB,KAAKA,eAAL,CAAqBJ,IAArB,CAA0B,IAA1B,CAAvB;IAEA,KAAKK,SAAL,gBAAiBb,KAAK,CAACc,SAAN,EAAjB;IACA,KAAKC,QAAL,GAAgBC,QAAQ,CAACC,aAAzB;IACA,KAAKC,GAAL,GAAW,CAAX;IAEA,IAAM;MAAEC;IAAF,IAAcb,KAApB;IACA,IAAMc,aAAa,4BAAGD,OAAO,CAACE,oBAAX,yEAAmC,CAAC,CAAvD;IAEA,KAAKC,KAAL,GAAa;MACXC,SAAS,EAAE,EADA;MAEXH,aAFW;MAGXI,UAAU,EAAE,CAAC;IAHF,CAAb;EAKD;;EAEDC,iBAAiB,GAAS;IACxB,KAAKC,QAAL;IAEA,KAAKR,GAAL,GAAWS,MAAM,CAACC,qBAAP,CAA6B,MAAM;MAAA;;MAC5C;MACA;MACA,8BAAKf,SAAL,CAAegB,OAAf,gFAAwBC,KAAxB;MACA,IAAM;QAAEC;MAAF,IAAmB,KAAKzB,KAA9B;MACAyB,YAAY,CAAC,IAAD,CAAZ;IACD,CANU,CAAX;EAOD;;EAEDC,kBAAkB,CAACC,SAAD,EAA6B;IAC7C,IAAM;MAAEC;IAAF,IAAc,KAAK5B,KAAzB;;IACA,IAAI2B,SAAS,CAACC,OAAV,KAAsBA,OAA1B,EAAmC;MACjC,KAAKR,QAAL;IACD;EACF;;EAEDS,oBAAoB,GAAS;IAC3BC,oBAAoB,CAAC,KAAKlB,GAAN,CAApB;EACD;;EAQDmB,gBAAgB,GAAkB;IAChC,IAAM;MAAElB;IAAF,IAAc,KAAKb,KAAzB;;IACA,IAAIa,OAAO,CAACmB,qBAAZ,EAAmC;MACjC,IAAM;QAAElB;MAAF,IAAoB,KAAKE,KAA/B;MACA,OAAOF,aAAP;IACD;;IAED,OAAO,KAAKmB,aAAL,EAAP;EACD;;EAEDC,gBAAgB,CAACC,KAAD,EAAsB;IACpC,IAAM;MAAEtB;IAAF,IAAc,KAAKb,KAAzB;;IACA,IAAIa,OAAO,CAACmB,qBAAZ,EAAmC;MACjC,KAAKI,QAAL,CAAc;QAAEtB,aAAa,EAAEqB;MAAjB,CAAd;IACD,CAFD,MAEO;MACL,KAAKE,aAAL,CAAmBF,KAAnB;IACD;EACF;;EAEDF,aAAa,GAAW;IACtB,IAAM;MAAEf;IAAF,IAAiB,KAAKF,KAA5B;IACA,OAAOE,UAAP;EACD;;EAEDmB,aAAa,CAACF,KAAD,EAAsB;IACjC,KAAKC,QAAL,CAAc;MAAElB,UAAU,EAAEiB;IAAd,CAAd;EACD;;EAEDf,QAAQ,GAAS;IACf;IACAU,oBAAoB,CAAC,KAAKlB,GAAN,CAApB;IAEA,KAAKwB,QAAL,CAAc;MACZnB,SAAS,EAAE;IADC,CAAd;IAIA,IAAM;MAAEW;IAAF,IAAc,KAAK5B,KAAzB;IACA,IAAMiB,SAAS,GAAGrB,kBAAkB,CAAC0C,YAAnB,CAAgCV,OAAhC,EAAyC,KAAzC,CAAlB;;IAEA,IAAIX,SAAS,CAACsB,MAAV,GAAmB,CAAvB,EAA0B;MACxB,KAAKH,QAAL,CAAcpB,KAAK,KAAK;QACtBC,SAAS,EAAErB,kBAAkB,CAAC4C,WAAnB,CACTxB,KAAK,CAACC,SAAN,CAAgBwB,MAAhB,CAAuBxB,SAAvB,CADS;MADW,CAAL,CAAnB;IAKD;EACF;;EAEDhB,aAAa,CAACyC,CAAD,EAA+B;IAC1C,IAAM;MAAEzB;IAAF,IAAgB,KAAKD,KAA3B;IACA,IAAMP,QAAQ,GAAG,KAAKsB,gBAAL,EAAjB;IACA,IAAIY,QAAQ,GAAGlC,QAAf;;IAEA,IAAIiC,CAAC,CAACE,GAAF,KAAU,OAAV,IAAqBF,CAAC,CAACE,GAAF,KAAU,GAAnC,EAAwC;MACtC,IAAInC,QAAQ,IAAI,IAAZ,IAAoBA,QAAQ,IAAI,CAAhC,IAAqCA,QAAQ,GAAGQ,SAAS,CAACsB,MAA9D,EAAsE;QACpE,KAAKpC,mBAAL,CAAyBc,SAAS,CAACR,QAAD,CAAlC,EAA8CiC,CAA9C;MACD;;MACD;IACD;;IAED,IAAIA,CAAC,CAACE,GAAF,KAAU,QAAd,EAAwB;MACtBD,QAAQ,GAAG,IAAX;IACD,CAFD,MAEO,IACLD,CAAC,CAACE,GAAF,KAAU,SAAV,IACCF,CAAC,CAACE,GAAF,KAAU,KAAV,IAAmBF,CAAC,CAACG,QAAF,KAAe,IAF9B,EAGL;MAAA;;MACAF,QAAQ,GAAG/C,kBAAkB,CAACkD,eAAnB,cACTH,QADS,iDACG,CADH,EAET,CAAC,CAFQ,EAGT1B,SAHS,CAAX;IAKD,CATM,MASA,IACLyB,CAAC,CAACE,GAAF,KAAU,WAAV,IACCF,CAAC,CAACE,GAAF,KAAU,KAAV,IAAmBF,CAAC,CAACG,QAAF,KAAe,KAF9B,EAGL;MAAA;;MACAF,QAAQ,GAAG/C,kBAAkB,CAACkD,eAAnB,eACTH,QADS,mDACG,CADH,EAET,CAFS,EAGT1B,SAHS,CAAX;IAKD;;IAED,IAAIR,QAAQ,KAAKkC,QAAjB,EAA2B;MACzB,IAAIA,QAAQ,KAAK,IAAjB,EAAuB;QACrB,KAAKT,gBAAL,CAAsBS,QAAtB;MACD,CAFD,MAEO;QACL,KAAKI,SAAL;;QACA,IAAI,KAAKtC,QAAL,YAAyBuC,WAA7B,EAA0C;UACxC,KAAKvC,QAAL,CAAce,KAAd;QACD;MACF;;MAEDkB,CAAC,CAACO,cAAF;MACAP,CAAC,CAACQ,eAAF;IACD;EACF;;EAEDH,SAAS,GAAyB;IAAA,IAAxBI,QAAwB,uEAAb,KAAa;IAChC,IAAM;MAAEJ,SAAF;MAAaK;IAAb,IAA8B,KAAKpD,KAAzC;IACA8B,oBAAoB,CAAC,KAAKlB,GAAN,CAApB;IACA,KAAKA,GAAL,GAAWS,MAAM,CAACC,qBAAP,CAA6B,MAAM;MAC5CyB,SAAS,CAACI,QAAD,CAAT;MACAC,YAAY,CAAC,IAAD,CAAZ;IACD,CAHU,CAAX;EAID;;EAED9C,eAAe,GAAS;IACtB,KAAKyC,SAAL;EACD;;EAED5C,mBAAmB,CAACkD,QAAD,EAA0BX,CAA1B,EAAyD;IAC1EA,CAAC,CAACO,cAAF;IACAP,CAAC,CAACQ,eAAF;;IAEA,IAAIG,QAAQ,IAAI,IAAZ,IAAoB,CAACA,QAAQ,CAACC,QAA9B,IAA0CD,QAAQ,CAACE,MAAT,IAAmB,IAAjE,EAAuE;MACrEF,QAAQ,CAACE,MAAT;MACA,KAAKR,SAAL,CAAe,IAAf;IACD;EACF;;EAED3C,uBAAuB,CAACiD,QAAD,EAAgC;IACrD,IAAM;MAAEpC;IAAF,IAAgB,KAAKD,KAA3B;IACA,IAAMwC,UAAU,GAAGvC,SAAS,CAACwC,OAAV,CAAkBJ,QAAlB,CAAnB;IACA,KAAKhB,aAAL,CAAmBmB,UAAnB;EACD;;EAEDnD,gBAAgB,GAAS;IACvB,KAAKgC,aAAL,CAAmB,CAAC,CAApB;EACD;;EAEDqB,MAAM,GAAgB;IACpB,IAAMC,gBAAgB,GAAG,EAAzB;IACA,IAAM;MAAE,eAAeC;IAAjB,IAAgC,KAAK5D,KAA3C;IACA,IAAM;MAAEc,aAAF;MAAiBG,SAAjB;MAA4BC;IAA5B,IAA2C,KAAKF,KAAtD;;IACA,KAAK,IAAI6C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG5C,SAAS,CAACsB,MAA9B,EAAsCsB,CAAC,IAAI,CAA3C,EAA8C;MAC5C,IAAMR,QAAQ,GAAGpC,SAAS,CAAC4C,CAAD,CAA1B;;MAEA,IAAIA,CAAC,GAAG,CAAJ,IAASR,QAAQ,CAACS,KAAT,KAAmB7C,SAAS,CAAC4C,CAAC,GAAG,CAAL,CAAT,CAAiBC,KAAjD,EAAwD;QACtDH,gBAAgB,CAACI,IAAjB,eAAsB;UAAI,GAAG,YAAKF,CAAL;QAAP,EAAtB;MACD;;MAED,IAAMG,eAAe,gBACnB,oBAAC,eAAD;QACE,GAAG,EAAEH,CADP;QAEE,kBAAkB,EAAE/C,aAAa,KAAK+C,CAFxC;QAGE,eAAe,EAAE3C,UAAU,KAAK2C,CAHlC;QAIE,QAAQ,EAAER,QAJZ;QAKE,SAAS,EAAE,KAAK/C,eALlB;QAME,eAAe,EAAE,KAAKH,mBANxB;QAOE,mBAAmB,EAAE,KAAKC,uBAP5B;QAQE,qBAAqB,EAAE,MAAM;MAR/B,EADF;MAaAuD,gBAAgB,CAACI,IAAjB,CAAsBC,eAAtB;IACD;;IAED,IAAM;MAAEC;IAAF,IAAgB,KAAKjE,KAA3B;IAEA,oBACE;MACE,SAAS,EAAC,wBADZ;MAEE,KAAK,oBAAOiE,SAAP,CAFP;MAGE,GAAG,EAAE,KAAK1D,SAHZ;MAIE,SAAS,EAAE,KAAKN,aAJlB;MAKE,YAAY,EAAE,KAAKI,gBALrB;MAME,IAAI,EAAC,UANP;MAOE,QAAQ,EAAE,CAPZ;MAQE,eAAauD;IARf,GAUGD,gBAVH,CADF;EAcD;;AAjPoD;;gBAAjD7D,I,kBACkB;EACpBiD,SAAS,GAAS,CAChB;EACD,CAHmB;;EAIpBtB,YAAY,GAAS,CACnB;EACD,CANmB;;EAOpB2B,YAAY,GAAS,CACnB;EACD,CATmB;;EAUpBvC,OAAO,EAAE,EAVW;EAWpBoD,SAAS,EAAE,EAXS;EAYpB,eAAeC;AAZK,C;;AAmPxB,eAAepE,IAAf"}
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","undefined","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"],"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 (\n options.separateKeyboardMouse !== undefined &&\n options.separateKeyboardMouse\n ) {\n const { keyboardIndex } = this.state;\n return keyboardIndex;\n }\n\n return this.getMouseIndex();\n }\n\n setKeyboardIndex(index: number): void {\n const { options } = this.props;\n if (\n options.separateKeyboardMouse !== undefined &&\n options.separateKeyboardMouse\n ) {\n this.setState({ keyboardIndex: index });\n } else {\n this.setMouseIndex(index);\n }\n }\n\n getMouseIndex(): number {\n const { mouseIndex } = this.state;\n return mouseIndex;\n }\n\n setMouseIndex(index: number): void {\n this.setState({ mouseIndex: index });\n }\n\n initMenu(): void {\n // cancel any pending close\n cancelAnimationFrame(this.rAF);\n\n this.setState({\n menuItems: [],\n });\n\n const { actions } = this.props;\n const menuItems = ContextActionUtils.getMenuItems(actions, false);\n\n if (menuItems.length > 0) {\n this.setState(state => ({\n menuItems: ContextActionUtils.sortActions(\n state.menuItems.concat(menuItems)\n ),\n }));\n }\n }\n\n handleKeyDown(e: React.KeyboardEvent): void {\n const { menuItems } = this.state;\n const oldFocus = this.getKeyboardIndex();\n let newFocus = oldFocus;\n\n if (e.key === 'Enter' || e.key === ' ') {\n if (oldFocus != null && oldFocus >= 0 && oldFocus < menuItems.length) {\n this.handleMenuItemClick(menuItems[oldFocus], e);\n }\n return;\n }\n\n if (e.key === 'Escape') {\n newFocus = null;\n } else if (\n e.key === 'ArrowUp' ||\n (e.key === 'Tab' && e.shiftKey === true)\n ) {\n newFocus = ContextActionUtils.getNextMenuItem(\n newFocus ?? 0,\n -1,\n menuItems\n );\n } else if (\n e.key === 'ArrowDown' ||\n (e.key === 'Tab' && e.shiftKey === false)\n ) {\n newFocus = ContextActionUtils.getNextMenuItem(\n newFocus ?? 0,\n 1,\n menuItems\n );\n }\n\n if (oldFocus !== newFocus) {\n if (newFocus !== null) {\n this.setKeyboardIndex(newFocus);\n } else {\n this.closeMenu();\n if (this.oldFocus instanceof HTMLElement) {\n this.oldFocus.focus();\n }\n }\n\n e.preventDefault();\n e.stopPropagation();\n }\n }\n\n closeMenu(closeAll = false): void {\n const { closeMenu, onMenuClosed } = this.props;\n cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n closeMenu(closeAll);\n onMenuClosed(this);\n });\n }\n\n handleCloseMenu(): void {\n this.closeMenu();\n }\n\n handleMenuItemClick(menuItem: ContextAction, e: React.SyntheticEvent): void {\n e.preventDefault();\n e.stopPropagation();\n\n if (\n menuItem != null &&\n (menuItem.disabled === undefined || !menuItem.disabled) &&\n menuItem.action != null\n ) {\n menuItem.action();\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":";;;;;;AAAA,OAAOA,KAAP,IAAgBC,aAAhB,QAAqC,OAArC;OACOC,kB;OAGAC,e;;AAwBP;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAMC,IAAN,SAAmBH,aAAnB,CAAuD;EAgBrDI,WAAW,CAACC,KAAD,EAAmB;IAAA;;IAC5B,MAAMA,KAAN;;IAD4B;;IAAA;;IAAA;;IAG5B,KAAKC,aAAL,GAAqB,KAAKA,aAAL,CAAmBC,IAAnB,CAAwB,IAAxB,CAArB;IACA,KAAKC,mBAAL,GAA2B,KAAKA,mBAAL,CAAyBD,IAAzB,CAA8B,IAA9B,CAA3B;IACA,KAAKE,uBAAL,GAA+B,KAAKA,uBAAL,CAA6BF,IAA7B,CAAkC,IAAlC,CAA/B;IACA,KAAKG,gBAAL,GAAwB,KAAKA,gBAAL,CAAsBH,IAAtB,CAA2B,IAA3B,CAAxB;IACA,KAAKI,eAAL,GAAuB,KAAKA,eAAL,CAAqBJ,IAArB,CAA0B,IAA1B,CAAvB;IAEA,KAAKK,SAAL,gBAAiBb,KAAK,CAACc,SAAN,EAAjB;IACA,KAAKC,QAAL,GAAgBC,QAAQ,CAACC,aAAzB;IACA,KAAKC,GAAL,GAAW,CAAX;IAEA,IAAM;MAAEC;IAAF,IAAcb,KAApB;IACA,IAAMc,aAAa,4BAAGD,OAAO,CAACE,oBAAX,yEAAmC,CAAC,CAAvD;IAEA,KAAKC,KAAL,GAAa;MACXC,SAAS,EAAE,EADA;MAEXH,aAFW;MAGXI,UAAU,EAAE,CAAC;IAHF,CAAb;EAKD;;EAEDC,iBAAiB,GAAS;IACxB,KAAKC,QAAL;IAEA,KAAKR,GAAL,GAAWS,MAAM,CAACC,qBAAP,CAA6B,MAAM;MAAA;;MAC5C;MACA;MACA,8BAAKf,SAAL,CAAegB,OAAf,gFAAwBC,KAAxB;MACA,IAAM;QAAEC;MAAF,IAAmB,KAAKzB,KAA9B;MACAyB,YAAY,CAAC,IAAD,CAAZ;IACD,CANU,CAAX;EAOD;;EAEDC,kBAAkB,CAACC,SAAD,EAA6B;IAC7C,IAAM;MAAEC;IAAF,IAAc,KAAK5B,KAAzB;;IACA,IAAI2B,SAAS,CAACC,OAAV,KAAsBA,OAA1B,EAAmC;MACjC,KAAKR,QAAL;IACD;EACF;;EAEDS,oBAAoB,GAAS;IAC3BC,oBAAoB,CAAC,KAAKlB,GAAN,CAApB;EACD;;EAQDmB,gBAAgB,GAAkB;IAChC,IAAM;MAAElB;IAAF,IAAc,KAAKb,KAAzB;;IACA,IACEa,OAAO,CAACmB,qBAAR,KAAkCC,SAAlC,IACApB,OAAO,CAACmB,qBAFV,EAGE;MACA,IAAM;QAAElB;MAAF,IAAoB,KAAKE,KAA/B;MACA,OAAOF,aAAP;IACD;;IAED,OAAO,KAAKoB,aAAL,EAAP;EACD;;EAEDC,gBAAgB,CAACC,KAAD,EAAsB;IACpC,IAAM;MAAEvB;IAAF,IAAc,KAAKb,KAAzB;;IACA,IACEa,OAAO,CAACmB,qBAAR,KAAkCC,SAAlC,IACApB,OAAO,CAACmB,qBAFV,EAGE;MACA,KAAKK,QAAL,CAAc;QAAEvB,aAAa,EAAEsB;MAAjB,CAAd;IACD,CALD,MAKO;MACL,KAAKE,aAAL,CAAmBF,KAAnB;IACD;EACF;;EAEDF,aAAa,GAAW;IACtB,IAAM;MAAEhB;IAAF,IAAiB,KAAKF,KAA5B;IACA,OAAOE,UAAP;EACD;;EAEDoB,aAAa,CAACF,KAAD,EAAsB;IACjC,KAAKC,QAAL,CAAc;MAAEnB,UAAU,EAAEkB;IAAd,CAAd;EACD;;EAEDhB,QAAQ,GAAS;IACf;IACAU,oBAAoB,CAAC,KAAKlB,GAAN,CAApB;IAEA,KAAKyB,QAAL,CAAc;MACZpB,SAAS,EAAE;IADC,CAAd;IAIA,IAAM;MAAEW;IAAF,IAAc,KAAK5B,KAAzB;IACA,IAAMiB,SAAS,GAAGrB,kBAAkB,CAAC2C,YAAnB,CAAgCX,OAAhC,EAAyC,KAAzC,CAAlB;;IAEA,IAAIX,SAAS,CAACuB,MAAV,GAAmB,CAAvB,EAA0B;MACxB,KAAKH,QAAL,CAAcrB,KAAK,KAAK;QACtBC,SAAS,EAAErB,kBAAkB,CAAC6C,WAAnB,CACTzB,KAAK,CAACC,SAAN,CAAgByB,MAAhB,CAAuBzB,SAAvB,CADS;MADW,CAAL,CAAnB;IAKD;EACF;;EAEDhB,aAAa,CAAC0C,CAAD,EAA+B;IAC1C,IAAM;MAAE1B;IAAF,IAAgB,KAAKD,KAA3B;IACA,IAAMP,QAAQ,GAAG,KAAKsB,gBAAL,EAAjB;IACA,IAAIa,QAAQ,GAAGnC,QAAf;;IAEA,IAAIkC,CAAC,CAACE,GAAF,KAAU,OAAV,IAAqBF,CAAC,CAACE,GAAF,KAAU,GAAnC,EAAwC;MACtC,IAAIpC,QAAQ,IAAI,IAAZ,IAAoBA,QAAQ,IAAI,CAAhC,IAAqCA,QAAQ,GAAGQ,SAAS,CAACuB,MAA9D,EAAsE;QACpE,KAAKrC,mBAAL,CAAyBc,SAAS,CAACR,QAAD,CAAlC,EAA8CkC,CAA9C;MACD;;MACD;IACD;;IAED,IAAIA,CAAC,CAACE,GAAF,KAAU,QAAd,EAAwB;MACtBD,QAAQ,GAAG,IAAX;IACD,CAFD,MAEO,IACLD,CAAC,CAACE,GAAF,KAAU,SAAV,IACCF,CAAC,CAACE,GAAF,KAAU,KAAV,IAAmBF,CAAC,CAACG,QAAF,KAAe,IAF9B,EAGL;MAAA;;MACAF,QAAQ,GAAGhD,kBAAkB,CAACmD,eAAnB,cACTH,QADS,iDACG,CADH,EAET,CAAC,CAFQ,EAGT3B,SAHS,CAAX;IAKD,CATM,MASA,IACL0B,CAAC,CAACE,GAAF,KAAU,WAAV,IACCF,CAAC,CAACE,GAAF,KAAU,KAAV,IAAmBF,CAAC,CAACG,QAAF,KAAe,KAF9B,EAGL;MAAA;;MACAF,QAAQ,GAAGhD,kBAAkB,CAACmD,eAAnB,eACTH,QADS,mDACG,CADH,EAET,CAFS,EAGT3B,SAHS,CAAX;IAKD;;IAED,IAAIR,QAAQ,KAAKmC,QAAjB,EAA2B;MACzB,IAAIA,QAAQ,KAAK,IAAjB,EAAuB;QACrB,KAAKT,gBAAL,CAAsBS,QAAtB;MACD,CAFD,MAEO;QACL,KAAKI,SAAL;;QACA,IAAI,KAAKvC,QAAL,YAAyBwC,WAA7B,EAA0C;UACxC,KAAKxC,QAAL,CAAce,KAAd;QACD;MACF;;MAEDmB,CAAC,CAACO,cAAF;MACAP,CAAC,CAACQ,eAAF;IACD;EACF;;EAEDH,SAAS,GAAyB;IAAA,IAAxBI,QAAwB,uEAAb,KAAa;IAChC,IAAM;MAAEJ,SAAF;MAAaK;IAAb,IAA8B,KAAKrD,KAAzC;IACA8B,oBAAoB,CAAC,KAAKlB,GAAN,CAApB;IACA,KAAKA,GAAL,GAAWS,MAAM,CAACC,qBAAP,CAA6B,MAAM;MAC5C0B,SAAS,CAACI,QAAD,CAAT;MACAC,YAAY,CAAC,IAAD,CAAZ;IACD,CAHU,CAAX;EAID;;EAED/C,eAAe,GAAS;IACtB,KAAK0C,SAAL;EACD;;EAED7C,mBAAmB,CAACmD,QAAD,EAA0BX,CAA1B,EAAyD;IAC1EA,CAAC,CAACO,cAAF;IACAP,CAAC,CAACQ,eAAF;;IAEA,IACEG,QAAQ,IAAI,IAAZ,KACCA,QAAQ,CAACC,QAAT,KAAsBtB,SAAtB,IAAmC,CAACqB,QAAQ,CAACC,QAD9C,KAEAD,QAAQ,CAACE,MAAT,IAAmB,IAHrB,EAIE;MACAF,QAAQ,CAACE,MAAT;MACA,KAAKR,SAAL,CAAe,IAAf;IACD;EACF;;EAED5C,uBAAuB,CAACkD,QAAD,EAAgC;IACrD,IAAM;MAAErC;IAAF,IAAgB,KAAKD,KAA3B;IACA,IAAMyC,UAAU,GAAGxC,SAAS,CAACyC,OAAV,CAAkBJ,QAAlB,CAAnB;IACA,KAAKhB,aAAL,CAAmBmB,UAAnB;EACD;;EAEDpD,gBAAgB,GAAS;IACvB,KAAKiC,aAAL,CAAmB,CAAC,CAApB;EACD;;EAEDqB,MAAM,GAAgB;IACpB,IAAMC,gBAAgB,GAAG,EAAzB;IACA,IAAM;MAAE,eAAeC;IAAjB,IAAgC,KAAK7D,KAA3C;IACA,IAAM;MAAEc,aAAF;MAAiBG,SAAjB;MAA4BC;IAA5B,IAA2C,KAAKF,KAAtD;;IACA,KAAK,IAAI8C,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG7C,SAAS,CAACuB,MAA9B,EAAsCsB,CAAC,IAAI,CAA3C,EAA8C;MAC5C,IAAMR,QAAQ,GAAGrC,SAAS,CAAC6C,CAAD,CAA1B;;MAEA,IAAIA,CAAC,GAAG,CAAJ,IAASR,QAAQ,CAACS,KAAT,KAAmB9C,SAAS,CAAC6C,CAAC,GAAG,CAAL,CAAT,CAAiBC,KAAjD,EAAwD;QACtDH,gBAAgB,CAACI,IAAjB,eAAsB;UAAI,GAAG,YAAKF,CAAL;QAAP,EAAtB;MACD;;MAED,IAAMG,eAAe,gBACnB,oBAAC,eAAD;QACE,GAAG,EAAEH,CADP;QAEE,kBAAkB,EAAEhD,aAAa,KAAKgD,CAFxC;QAGE,eAAe,EAAE5C,UAAU,KAAK4C,CAHlC;QAIE,QAAQ,EAAER,QAJZ;QAKE,SAAS,EAAE,KAAKhD,eALlB;QAME,eAAe,EAAE,KAAKH,mBANxB;QAOE,mBAAmB,EAAE,KAAKC,uBAP5B;QAQE,qBAAqB,EAAE,MAAM;MAR/B,EADF;MAaAwD,gBAAgB,CAACI,IAAjB,CAAsBC,eAAtB;IACD;;IAED,IAAM;MAAEC;IAAF,IAAgB,KAAKlE,KAA3B;IAEA,oBACE;MACE,SAAS,EAAC,wBADZ;MAEE,KAAK,oBAAOkE,SAAP,CAFP;MAGE,GAAG,EAAE,KAAK3D,SAHZ;MAIE,SAAS,EAAE,KAAKN,aAJlB;MAKE,YAAY,EAAE,KAAKI,gBALrB;MAME,IAAI,EAAC,UANP;MAOE,QAAQ,EAAE,CAPZ;MAQE,eAAawD;IARf,GAUGD,gBAVH,CADF;EAcD;;AA3PoD;;gBAAjD9D,I,kBACkB;EACpBkD,SAAS,GAAS,CAChB;EACD,CAHmB;;EAIpBvB,YAAY,GAAS,CACnB;EACD,CANmB;;EAOpB4B,YAAY,GAAS,CACnB;EACD,CATmB;;EAUpBxC,OAAO,EAAE,EAVW;EAWpBqD,SAAS,EAAE,EAXS;EAYpB,eAAejC;AAZK,C;;AA6PxB,eAAenC,IAAf"}
@@ -43,13 +43,13 @@ export var MenuItem = _ref => {
43
43
  },
44
44
  tabIndex: 0,
45
45
  role: "menuitem"
46
- }, icon && /*#__PURE__*/React.createElement("div", {
46
+ }, icon !== undefined && /*#__PURE__*/React.createElement("div", {
47
47
  className: "icon"
48
48
  }, /*#__PURE__*/React.createElement(FontAwesomeIcon, {
49
49
  icon: icon
50
50
  })), /*#__PURE__*/React.createElement("div", {
51
51
  className: "title"
52
- }, title), subtitle && /*#__PURE__*/React.createElement("div", {
52
+ }, title), subtitle !== undefined && /*#__PURE__*/React.createElement("div", {
53
53
  className: "shortcut"
54
54
  }, subtitle), /*#__PURE__*/React.createElement("div", {
55
55
  className: "accessory",
@@ -1 +1 @@
1
- {"version":3,"file":"MenuItem.js","names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","isSwitchMenuItemType","item","isOn","undefined","MenuItem","onSelect","dataTestId","icon","subtitle","title","handleSelect","onChange","event","key","stopPropagation"],"sources":["../../src/navigation/MenuItem.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport './MenuItem.scss';\n\nimport UISwitch from '../UISwitch';\n\nexport type MenuItemDef = {\n title: string;\n subtitle?: string;\n icon?: IconProp;\n};\n\nexport type SwitchMenuItemDef = MenuItemDef & {\n isOn: boolean;\n onChange: (isOn: boolean) => void;\n};\n\nfunction isSwitchMenuItemType(item: MenuItemDef): item is SwitchMenuItemDef {\n return (item as SwitchMenuItemDef).isOn !== undefined;\n}\n\nexport type MenuItemProps = {\n item: MenuItemDef;\n onSelect?: () => void;\n 'data-testid'?: string;\n};\n\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport const MenuItem = ({\n item,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuItemProps): JSX.Element => {\n const { icon, subtitle, title } = item;\n const handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return (\n <div\n className=\"btn btn-navigation-menu-item\"\n data-testid={`menu-item-${title}`}\n onClick={handleSelect}\n onKeyDown={event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n }}\n tabIndex={0}\n role=\"menuitem\"\n >\n {icon && (\n <div className=\"icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"title\">{title}</div>\n {subtitle && <div className=\"shortcut\">{subtitle}</div>}\n <div className=\"accessory\" data-testid={dataTestId}>\n {(isSwitchMenuItemType(item) && (\n <UISwitch\n on={item.isOn}\n onClick={event => {\n event.stopPropagation();\n handleSelect();\n }}\n />\n )) || <FontAwesomeIcon icon={vsChevronRight} />}\n </div>\n </div>\n );\n};\n\nexport default MenuItem;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,OAAhB,QAA+B,OAA/B;AAEA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,cAAT,QAA+B,kBAA/B;;OAGOC,Q;;AAaP,SAASC,oBAAT,CAA8BC,IAA9B,EAA4E;EAC1E,OAAQA,IAAD,CAA4BC,IAA5B,KAAqCC,SAA5C;AACD;;AAQD;AACA;AACA;AACA;AACA,OAAO,IAAMC,QAAQ,GAAG,QAIU;EAAA,IAJT;IACvBH,IADuB;IAEvBI,QAAQ,GAAG,MAAMF,SAFM;IAGvB,eAAeG;EAHQ,CAIS;EAChC,IAAM;IAAEC,IAAF;IAAQC,QAAR;IAAkBC;EAAlB,IAA4BR,IAAlC;EACA,IAAMS,YAAY,GAAGd,OAAO,CAAC,MAAM;IACjC,IAAII,oBAAoB,CAACC,IAAD,CAAxB,EAAgC;MAC9B,OAAO,MAAM;QACXA,IAAI,CAACU,QAAL,CAAc,CAACV,IAAI,CAACC,IAApB;MACD,CAFD;IAGD;;IACD,OAAOG,QAAP;EACD,CAP2B,EAOzB,CAACJ,IAAD,EAAOI,QAAP,CAPyB,CAA5B;EAQA,oBACE;IACE,SAAS,EAAC,8BADZ;IAEE,mCAA0BI,KAA1B,CAFF;IAGE,OAAO,EAAEC,YAHX;IAIE,SAAS,EAAEE,KAAK,IAAI;MAClB,IAAIA,KAAK,CAACC,GAAN,KAAc,OAAd,IAAyBD,KAAK,CAACC,GAAN,KAAc,GAA3C,EAAgD;QAC9CH,YAAY;MACb;IACF,CARH;IASE,QAAQ,EAAE,CATZ;IAUE,IAAI,EAAC;EAVP,GAYGH,IAAI,iBACH;IAAK,SAAS,EAAC;EAAf,gBACE,oBAAC,eAAD;IAAiB,IAAI,EAAEA;EAAvB,EADF,CAbJ,eAiBE;IAAK,SAAS,EAAC;EAAf,GAAwBE,KAAxB,CAjBF,EAkBGD,QAAQ,iBAAI;IAAK,SAAS,EAAC;EAAf,GAA2BA,QAA3B,CAlBf,eAmBE;IAAK,SAAS,EAAC,WAAf;IAA2B,eAAaF;EAAxC,GACIN,oBAAoB,CAACC,IAAD,CAApB,iBACA,oBAAC,QAAD;IACE,EAAE,EAAEA,IAAI,CAACC,IADX;IAEE,OAAO,EAAEU,KAAK,IAAI;MAChBA,KAAK,CAACE,eAAN;MACAJ,YAAY;IACb;EALH,EADD,iBAQK,oBAAC,eAAD;IAAiB,IAAI,EAAEZ;EAAvB,EATR,CAnBF,CADF;AAiCD,CA/CM;AAiDP,eAAeM,QAAf"}
1
+ {"version":3,"file":"MenuItem.js","names":["React","useMemo","FontAwesomeIcon","vsChevronRight","UISwitch","isSwitchMenuItemType","item","isOn","undefined","MenuItem","onSelect","dataTestId","icon","subtitle","title","handleSelect","onChange","event","key","stopPropagation"],"sources":["../../src/navigation/MenuItem.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { vsChevronRight } from '@deephaven/icons';\nimport './MenuItem.scss';\n\nimport UISwitch from '../UISwitch';\n\nexport type MenuItemDef = {\n title: string;\n subtitle?: string;\n icon?: IconProp;\n};\n\nexport type SwitchMenuItemDef = MenuItemDef & {\n isOn: boolean;\n onChange: (isOn: boolean) => void;\n};\n\nfunction isSwitchMenuItemType(item: MenuItemDef): item is SwitchMenuItemDef {\n return (item as SwitchMenuItemDef).isOn !== undefined;\n}\n\nexport type MenuItemProps = {\n item: MenuItemDef;\n onSelect?: () => void;\n 'data-testid'?: string;\n};\n\n/**\n * @param props.item The menu item to set. Set a SwitchMenuItemDef to show a switch.\n * @param props.onSelect Called when the menu item is selected\n */\nexport const MenuItem = ({\n item,\n onSelect = () => undefined,\n 'data-testid': dataTestId,\n}: MenuItemProps): JSX.Element => {\n const { icon, subtitle, title } = item;\n const handleSelect = useMemo(() => {\n if (isSwitchMenuItemType(item)) {\n return () => {\n item.onChange(!item.isOn);\n };\n }\n return onSelect;\n }, [item, onSelect]);\n return (\n <div\n className=\"btn btn-navigation-menu-item\"\n data-testid={`menu-item-${title}`}\n onClick={handleSelect}\n onKeyDown={event => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleSelect();\n }\n }}\n tabIndex={0}\n role=\"menuitem\"\n >\n {icon !== undefined && (\n <div className=\"icon\">\n <FontAwesomeIcon icon={icon} />\n </div>\n )}\n <div className=\"title\">{title}</div>\n {subtitle !== undefined && <div className=\"shortcut\">{subtitle}</div>}\n <div className=\"accessory\" data-testid={dataTestId}>\n {(isSwitchMenuItemType(item) && (\n <UISwitch\n on={item.isOn}\n onClick={event => {\n event.stopPropagation();\n handleSelect();\n }}\n />\n )) || <FontAwesomeIcon icon={vsChevronRight} />}\n </div>\n </div>\n );\n};\n\nexport default MenuItem;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,OAAhB,QAA+B,OAA/B;AAEA,SAASC,eAAT,QAAgC,gCAAhC;AACA,SAASC,cAAT,QAA+B,kBAA/B;;OAGOC,Q;;AAaP,SAASC,oBAAT,CAA8BC,IAA9B,EAA4E;EAC1E,OAAQA,IAAD,CAA4BC,IAA5B,KAAqCC,SAA5C;AACD;;AAQD;AACA;AACA;AACA;AACA,OAAO,IAAMC,QAAQ,GAAG,QAIU;EAAA,IAJT;IACvBH,IADuB;IAEvBI,QAAQ,GAAG,MAAMF,SAFM;IAGvB,eAAeG;EAHQ,CAIS;EAChC,IAAM;IAAEC,IAAF;IAAQC,QAAR;IAAkBC;EAAlB,IAA4BR,IAAlC;EACA,IAAMS,YAAY,GAAGd,OAAO,CAAC,MAAM;IACjC,IAAII,oBAAoB,CAACC,IAAD,CAAxB,EAAgC;MAC9B,OAAO,MAAM;QACXA,IAAI,CAACU,QAAL,CAAc,CAACV,IAAI,CAACC,IAApB;MACD,CAFD;IAGD;;IACD,OAAOG,QAAP;EACD,CAP2B,EAOzB,CAACJ,IAAD,EAAOI,QAAP,CAPyB,CAA5B;EAQA,oBACE;IACE,SAAS,EAAC,8BADZ;IAEE,mCAA0BI,KAA1B,CAFF;IAGE,OAAO,EAAEC,YAHX;IAIE,SAAS,EAAEE,KAAK,IAAI;MAClB,IAAIA,KAAK,CAACC,GAAN,KAAc,OAAd,IAAyBD,KAAK,CAACC,GAAN,KAAc,GAA3C,EAAgD;QAC9CH,YAAY;MACb;IACF,CARH;IASE,QAAQ,EAAE,CATZ;IAUE,IAAI,EAAC;EAVP,GAYGH,IAAI,KAAKJ,SAAT,iBACC;IAAK,SAAS,EAAC;EAAf,gBACE,oBAAC,eAAD;IAAiB,IAAI,EAAEI;EAAvB,EADF,CAbJ,eAiBE;IAAK,SAAS,EAAC;EAAf,GAAwBE,KAAxB,CAjBF,EAkBGD,QAAQ,KAAKL,SAAb,iBAA0B;IAAK,SAAS,EAAC;EAAf,GAA2BK,QAA3B,CAlB7B,eAmBE;IAAK,SAAS,EAAC,WAAf;IAA2B,eAAaF;EAAxC,GACIN,oBAAoB,CAACC,IAAD,CAApB,iBACA,oBAAC,QAAD;IACE,EAAE,EAAEA,IAAI,CAACC,IADX;IAEE,OAAO,EAAEU,KAAK,IAAI;MAChBA,KAAK,CAACE,eAAN;MACAJ,YAAY;IACb;EALH,EADD,iBAQK,oBAAC,eAAD;IAAiB,IAAI,EAAEZ;EAAvB,EATR,CAnBF,CADF;AAiCD,CA/CM;AAiDP,eAAeM,QAAf"}
@@ -1 +1 @@
1
- {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/navigation/Stack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAIzE,OAAO,cAAc,CAAC;AAEtB,oBAAY,UAAU,GAAG;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,6CAGf,UAAU,KAAG,WAyFf,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Stack.d.ts","sourceRoot":"","sources":["../../src/navigation/Stack.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAIzE,OAAO,cAAc,CAAC;AAEtB,oBAAY,UAAU,GAAG;IACvB,QAAQ,EAAE,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,KAAK,6CAGf,UAAU,KAAG,WAiGf,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -70,14 +70,14 @@ export var Stack = _ref => {
70
70
  timeout: ThemeExport.transitionMidMs,
71
71
  classNames: "slide-right",
72
72
  onEntered: popComplete
73
- }, /*#__PURE__*/React.createElement(React.Fragment, null, poppingView && /*#__PURE__*/React.createElement("div", {
73
+ }, /*#__PURE__*/React.createElement(React.Fragment, null, poppingView != null && /*#__PURE__*/React.createElement("div", {
74
74
  className: "popping-view"
75
75
  }, poppingView))), /*#__PURE__*/React.createElement(CSSTransition, {
76
76
  in: pushingView != null,
77
77
  timeout: ThemeExport.transitionMidMs,
78
78
  classNames: "slide-left",
79
79
  onEntered: pushComplete
80
- }, /*#__PURE__*/React.createElement(React.Fragment, null, pushingView && /*#__PURE__*/React.createElement("div", {
80
+ }, /*#__PURE__*/React.createElement(React.Fragment, null, pushingView != null && /*#__PURE__*/React.createElement("div", {
81
81
  className: "pushing-view"
82
82
  }, pushingView))));
83
83
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Stack.js","names":["React","useState","useEffect","useMemo","useCallback","CSSTransition","usePrevious","ThemeExport","Stack","children","dataTestId","childrenArray","Children","toArray","prevChildrenArray","mainView","setMainView","length","pushingView","setPushingView","poppingView","setPoppingView","initAnimation","undefined","topChild","pushComplete","popComplete","transitionMidMs"],"sources":["../../src/navigation/Stack.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport ThemeExport from '../ThemeExport';\nimport './Stack.scss';\n\nexport type StackProps = {\n children: React.ReactNode | React.ReactNode[];\n 'data-testid'?: string;\n};\n\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport const Stack = ({\n children,\n 'data-testid': dataTestId,\n}: StackProps): JSX.Element => {\n const childrenArray = useMemo(() => React.Children.toArray(children), [\n children,\n ]);\n const prevChildrenArray = usePrevious(childrenArray);\n const [mainView, setMainView] = useState<React.ReactNode>(\n childrenArray[childrenArray.length - 1]\n );\n\n const [pushingView, setPushingView] = useState<React.ReactNode>(null);\n const [poppingView, setPoppingView] = useState<React.ReactNode>(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(\n function initAnimation() {\n if (\n prevChildrenArray === undefined ||\n childrenArray === prevChildrenArray\n ) {\n return;\n }\n const topChild = childrenArray[childrenArray.length - 1];\n if (\n childrenArray.length === prevChildrenArray.length ||\n prevChildrenArray.length === 0 ||\n pushingView !== null ||\n poppingView !== null\n ) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n },\n [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]\n );\n\n const pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n\n const popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n\n return (\n <div className=\"navigation-stack\">\n <div className=\"main-view\" data-testid={dataTestId}>\n {mainView}\n </div>\n\n <CSSTransition\n in={poppingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-right\"\n onEntered={popComplete}\n >\n <>{poppingView && <div className=\"popping-view\">{poppingView}</div>}</>\n </CSSTransition>\n <CSSTransition\n in={pushingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntered={pushComplete}\n >\n <>{pushingView && <div className=\"pushing-view\">{pushingView}</div>}</>\n </CSSTransition>\n </div>\n );\n};\n\nexport default Stack;\n"],"mappings":"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"}
1
+ {"version":3,"file":"Stack.js","names":["React","useState","useEffect","useMemo","useCallback","CSSTransition","usePrevious","ThemeExport","Stack","children","dataTestId","childrenArray","Children","toArray","prevChildrenArray","mainView","setMainView","length","pushingView","setPushingView","poppingView","setPoppingView","initAnimation","undefined","topChild","pushComplete","popComplete","transitionMidMs"],"sources":["../../src/navigation/Stack.tsx"],"sourcesContent":["import React, { useState, useEffect, useMemo, useCallback } from 'react';\nimport { CSSTransition } from 'react-transition-group';\nimport { usePrevious } from '@deephaven/react-hooks';\nimport ThemeExport from '../ThemeExport';\nimport './Stack.scss';\n\nexport type StackProps = {\n children: React.ReactNode | React.ReactNode[];\n 'data-testid'?: string;\n};\n\n/**\n * Pass a full navigation stack of children, and then automatically does a sliding animation when the stack changes.\n * Adding items to the stack will do a \"push\" animation, and removing items from the stack will do a \"pop\" animation.\n */\nexport const Stack = ({\n children,\n 'data-testid': dataTestId,\n}: StackProps): JSX.Element => {\n const childrenArray = useMemo(() => React.Children.toArray(children), [\n children,\n ]);\n const prevChildrenArray = usePrevious(childrenArray);\n const [mainView, setMainView] = useState<React.ReactNode>(\n childrenArray[childrenArray.length - 1]\n );\n\n const [pushingView, setPushingView] = useState<React.ReactNode>(null);\n const [poppingView, setPoppingView] = useState<React.ReactNode>(null);\n\n /**\n * To do the animation effect, we just need to set the proper pushing/popping views when the stack changes.\n * `mainView` - The main view of the stack, stationary, filling the container.\n * `pushingView` - A view that's currently being pushed. Slides from off screen right to overtop of `mainView`.\n * `poppingView` - A view that's currently being popped. Slides from overtop of `mainView` to right off screen.\n *\n * When the `pushingView` or `poppingView` is set, that will kick off their animation.\n * Completion of the animation is handled in `pushComplete` or `popComplete`, and then the stack is in an idle state again.\n */\n useEffect(\n function initAnimation() {\n if (\n prevChildrenArray === undefined ||\n childrenArray === prevChildrenArray\n ) {\n return;\n }\n const topChild = childrenArray[childrenArray.length - 1];\n if (\n childrenArray.length === prevChildrenArray.length ||\n prevChildrenArray.length === 0 ||\n pushingView !== null ||\n poppingView !== null\n ) {\n // 1) Stack is the same size, we've just mounted, or we're already in an animation - just update the view\n if (pushingView !== null && topChild !== pushingView) {\n // Stack was updated mid animation\n setPushingView(topChild);\n } else if (topChild !== poppingView && topChild !== mainView) {\n // Replace the current view\n setMainView(topChild);\n }\n } else if (childrenArray.length > prevChildrenArray.length) {\n // 2) Stack has grown - start the push animation\n setPushingView(topChild);\n } else if (childrenArray.length < prevChildrenArray.length) {\n // 3) Stack has shrunk - start the pop animation\n setMainView(topChild);\n setPoppingView(prevChildrenArray[prevChildrenArray.length - 1]);\n }\n },\n [childrenArray, prevChildrenArray, pushingView, poppingView, mainView]\n );\n\n const pushComplete = useCallback(() => {\n setMainView(pushingView);\n setPushingView(null);\n }, [pushingView]);\n\n const popComplete = useCallback(() => {\n setPoppingView(null);\n }, []);\n\n return (\n <div className=\"navigation-stack\">\n <div className=\"main-view\" data-testid={dataTestId}>\n {mainView}\n </div>\n\n <CSSTransition\n in={poppingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-right\"\n onEntered={popComplete}\n >\n <>\n {poppingView != null && (\n <div className=\"popping-view\">{poppingView}</div>\n )}\n </>\n </CSSTransition>\n <CSSTransition\n in={pushingView != null}\n timeout={ThemeExport.transitionMidMs}\n classNames=\"slide-left\"\n onEntered={pushComplete}\n >\n <>\n {pushingView != null && (\n <div className=\"pushing-view\">{pushingView}</div>\n )}\n </>\n </CSSTransition>\n </div>\n );\n};\n\nexport default Stack;\n"],"mappings":"AAAA,OAAOA,KAAP,IAAgBC,QAAhB,EAA0BC,SAA1B,EAAqCC,OAArC,EAA8CC,WAA9C,QAAiE,OAAjE;AACA,SAASC,aAAT,QAA8B,wBAA9B;AACA,SAASC,WAAT,QAA4B,wBAA5B;OACOC,W;;;AAQP;AACA;AACA;AACA;AACA,OAAO,IAAMC,KAAK,GAAG,QAGU;EAAA,IAHT;IACpBC,QADoB;IAEpB,eAAeC;EAFK,CAGS;EAC7B,IAAMC,aAAa,GAAGR,OAAO,CAAC,MAAMH,KAAK,CAACY,QAAN,CAAeC,OAAf,CAAuBJ,QAAvB,CAAP,EAAyC,CACpEA,QADoE,CAAzC,CAA7B;EAGA,IAAMK,iBAAiB,GAAGR,WAAW,CAACK,aAAD,CAArC;EACA,IAAM,CAACI,QAAD,EAAWC,WAAX,IAA0Bf,QAAQ,CACtCU,aAAa,CAACA,aAAa,CAACM,MAAd,GAAuB,CAAxB,CADyB,CAAxC;EAIA,IAAM,CAACC,WAAD,EAAcC,cAAd,IAAgClB,QAAQ,CAAkB,IAAlB,CAA9C;EACA,IAAM,CAACmB,WAAD,EAAcC,cAAd,IAAgCpB,QAAQ,CAAkB,IAAlB,CAA9C;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;EACEC,SAAS,CACP,SAASoB,aAAT,GAAyB;IACvB,IACER,iBAAiB,KAAKS,SAAtB,IACAZ,aAAa,KAAKG,iBAFpB,EAGE;MACA;IACD;;IACD,IAAMU,QAAQ,GAAGb,aAAa,CAACA,aAAa,CAACM,MAAd,GAAuB,CAAxB,CAA9B;;IACA,IACEN,aAAa,CAACM,MAAd,KAAyBH,iBAAiB,CAACG,MAA3C,IACAH,iBAAiB,CAACG,MAAlB,KAA6B,CAD7B,IAEAC,WAAW,KAAK,IAFhB,IAGAE,WAAW,KAAK,IAJlB,EAKE;MACA;MACA,IAAIF,WAAW,KAAK,IAAhB,IAAwBM,QAAQ,KAAKN,WAAzC,EAAsD;QACpD;QACAC,cAAc,CAACK,QAAD,CAAd;MACD,CAHD,MAGO,IAAIA,QAAQ,KAAKJ,WAAb,IAA4BI,QAAQ,KAAKT,QAA7C,EAAuD;QAC5D;QACAC,WAAW,CAACQ,QAAD,CAAX;MACD;IACF,CAdD,MAcO,IAAIb,aAAa,CAACM,MAAd,GAAuBH,iBAAiB,CAACG,MAA7C,EAAqD;MAC1D;MACAE,cAAc,CAACK,QAAD,CAAd;IACD,CAHM,MAGA,IAAIb,aAAa,CAACM,MAAd,GAAuBH,iBAAiB,CAACG,MAA7C,EAAqD;MAC1D;MACAD,WAAW,CAACQ,QAAD,CAAX;MACAH,cAAc,CAACP,iBAAiB,CAACA,iBAAiB,CAACG,MAAlB,GAA2B,CAA5B,CAAlB,CAAd;IACD;EACF,CA/BM,EAgCP,CAACN,aAAD,EAAgBG,iBAAhB,EAAmCI,WAAnC,EAAgDE,WAAhD,EAA6DL,QAA7D,CAhCO,CAAT;EAmCA,IAAMU,YAAY,GAAGrB,WAAW,CAAC,MAAM;IACrCY,WAAW,CAACE,WAAD,CAAX;IACAC,cAAc,CAAC,IAAD,CAAd;EACD,CAH+B,EAG7B,CAACD,WAAD,CAH6B,CAAhC;EAKA,IAAMQ,WAAW,GAAGtB,WAAW,CAAC,MAAM;IACpCiB,cAAc,CAAC,IAAD,CAAd;EACD,CAF8B,EAE5B,EAF4B,CAA/B;EAIA,oBACE;IAAK,SAAS,EAAC;EAAf,gBACE;IAAK,SAAS,EAAC,WAAf;IAA2B,eAAaX;EAAxC,GACGK,QADH,CADF,eAKE,oBAAC,aAAD;IACE,EAAE,EAAEK,WAAW,IAAI,IADrB;IAEE,OAAO,EAAEb,WAAW,CAACoB,eAFvB;IAGE,UAAU,EAAC,aAHb;IAIE,SAAS,EAAED;EAJb,gBAME,0CACGN,WAAW,IAAI,IAAf,iBACC;IAAK,SAAS,EAAC;EAAf,GAA+BA,WAA/B,CAFJ,CANF,CALF,eAiBE,oBAAC,aAAD;IACE,EAAE,EAAEF,WAAW,IAAI,IADrB;IAEE,OAAO,EAAEX,WAAW,CAACoB,eAFvB;IAGE,UAAU,EAAC,YAHb;IAIE,SAAS,EAAEF;EAJb,gBAME,0CACGP,WAAW,IAAI,IAAf,iBACC;IAAK,SAAS,EAAC;EAAf,GAA+BA,WAA/B,CAFJ,CANF,CAjBF,CADF;AAgCD,CApGM;AAsGP,eAAeV,KAAf"}
@@ -208,7 +208,7 @@ class Tooltip extends Component {
208
208
  }
209
209
 
210
210
  stopTimer() {
211
- if (this.timer) {
211
+ if (this.timer != null) {
212
212
  clearTimeout(this.timer);
213
213
  this.timer = null;
214
214
  }
@@ -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) {\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":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deephaven/components",
3
- "version": "0.19.2-beta.0+63ca6c5",
3
+ "version": "0.19.2-beta.5+f6a5d6d",
4
4
  "description": "Deephaven React component library",
5
5
  "author": "Deephaven Data Labs LLC",
6
6
  "license": "Apache-2.0",
@@ -31,10 +31,10 @@
31
31
  "start": "cross-env NODE_ENV=development npm run watch"
32
32
  },
33
33
  "dependencies": {
34
- "@deephaven/icons": "^0.19.2-beta.0+63ca6c5",
35
- "@deephaven/log": "^0.19.2-beta.0+63ca6c5",
36
- "@deephaven/react-hooks": "^0.19.2-beta.0+63ca6c5",
37
- "@deephaven/utils": "^0.19.2-beta.0+63ca6c5",
34
+ "@deephaven/icons": "^0.19.2-beta.5+f6a5d6d",
35
+ "@deephaven/log": "^0.19.2-beta.5+f6a5d6d",
36
+ "@deephaven/react-hooks": "^0.19.2-beta.5+f6a5d6d",
37
+ "@deephaven/utils": "^0.19.2-beta.5+f6a5d6d",
38
38
  "@fortawesome/fontawesome-svg-core": "^6.1.1",
39
39
  "@fortawesome/react-fontawesome": "^0.1.18",
40
40
  "bootstrap": "4.6.2",
@@ -57,8 +57,8 @@
57
57
  "react-dom": "^17.x"
58
58
  },
59
59
  "devDependencies": {
60
- "@deephaven/mocks": "^0.19.2-beta.0+63ca6c5",
61
- "@deephaven/tsconfig": "^0.19.2-beta.0+63ca6c5"
60
+ "@deephaven/mocks": "^0.19.2-beta.5+f6a5d6d",
61
+ "@deephaven/tsconfig": "^0.19.2-beta.5+f6a5d6d"
62
62
  },
63
63
  "files": [
64
64
  "dist",
@@ -70,5 +70,5 @@
70
70
  "publishConfig": {
71
71
  "access": "public"
72
72
  },
73
- "gitHead": "63ca6c5694f2dc0ff7e6f07772f36aa80d548fef"
73
+ "gitHead": "f6a5d6d2a6c2bbc3e8a9b05aad234c30bb0a7bcb"
74
74
  }
@@ -361,6 +361,11 @@ span.btn-disabled-wrapper {
361
361
  }
362
362
  }
363
363
 
364
+ .btn-link-icon-only {
365
+ padding-left: $spacer-2;
366
+ padding-right: $spacer-2;
367
+ }
368
+
364
369
  /********** TABLES *********/
365
370
 
366
371
  //Tabular numbers apply to tables only