@elyra/canvas 12.45.1 → 12.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/dist/{canvas-controller-0c83caa0.js → canvas-controller-26440c36.js} +2 -2
  2. package/dist/canvas-controller-26440c36.js.map +1 -0
  3. package/dist/{canvas-controller-024d7fa4.js → canvas-controller-aa5d9a51.js} +2 -2
  4. package/dist/canvas-controller-aa5d9a51.js.map +1 -0
  5. package/dist/common-canvas-24b39e38.js +2 -0
  6. package/dist/common-canvas-24b39e38.js.map +1 -0
  7. package/dist/common-canvas-6b306626.js +2 -0
  8. package/dist/common-canvas-6b306626.js.map +1 -0
  9. package/dist/common-canvas.es.js +1 -1
  10. package/dist/common-canvas.js +1 -1
  11. package/dist/{common-properties-cc1584aa.js → common-properties-0e7576bf.js} +2 -2
  12. package/dist/{common-properties-cc1584aa.js.map → common-properties-0e7576bf.js.map} +1 -1
  13. package/dist/{common-properties-cdedfd5c.js → common-properties-95fbce18.js} +2 -2
  14. package/dist/{common-properties-cdedfd5c.js.map → common-properties-95fbce18.js.map} +1 -1
  15. package/dist/lib/canvas-controller.es.js +1 -1
  16. package/dist/lib/canvas-controller.js +1 -1
  17. package/dist/lib/canvas.es.js +1 -1
  18. package/dist/lib/canvas.js +1 -1
  19. package/dist/lib/command-stack.es.js +1 -1
  20. package/dist/lib/command-stack.es.js.map +1 -1
  21. package/dist/lib/command-stack.js +1 -1
  22. package/dist/lib/command-stack.js.map +1 -1
  23. package/dist/lib/properties.es.js +1 -1
  24. package/dist/lib/properties.js +1 -1
  25. package/dist/styles/common-canvas.min.css +1 -1
  26. package/dist/styles/common-canvas.min.css.map +1 -1
  27. package/dist/toolbar-5e3013fd.js +2 -0
  28. package/dist/toolbar-5e3013fd.js.map +1 -0
  29. package/dist/toolbar-bb5b5c13.js +2 -0
  30. package/dist/toolbar-bb5b5c13.js.map +1 -0
  31. package/package.json +1 -1
  32. package/src/command-stack/command-stack.js +4 -0
  33. package/src/common-canvas/canvas-controller.js +25 -8
  34. package/src/common-canvas/cc-context-toolbar.jsx +10 -3
  35. package/src/common-canvas/cc-toolbar.jsx +0 -3
  36. package/src/common-canvas/common-canvas.scss +0 -6
  37. package/src/common-canvas/svg-canvas-renderer.js +1 -1
  38. package/src/common-properties/controls/checkbox/checkbox.jsx +12 -12
  39. package/src/common-properties/controls/checkbox/checkbox.scss +0 -3
  40. package/src/object-model/layout-dimensions.js +2 -2
  41. package/src/toolbar/toolbar-action-item.jsx +38 -4
  42. package/src/toolbar/toolbar-button-item.jsx +38 -28
  43. package/src/toolbar/toolbar-overflow-item.jsx +27 -10
  44. package/src/toolbar/toolbar.jsx +22 -22
  45. package/src/toolbar/toolbar.scss +61 -11
  46. package/stats.html +1 -1
  47. package/dist/canvas-controller-024d7fa4.js.map +0 -1
  48. package/dist/canvas-controller-0c83caa0.js.map +0 -1
  49. package/dist/common-canvas-39d943f9.js +0 -2
  50. package/dist/common-canvas-39d943f9.js.map +0 -1
  51. package/dist/common-canvas-e831aa7c.js +0 -2
  52. package/dist/common-canvas-e831aa7c.js.map +0 -1
  53. package/dist/toolbar-6af353fa.js +0 -2
  54. package/dist/toolbar-6af353fa.js.map +0 -1
  55. package/dist/toolbar-c4e22755.js +0 -2
  56. package/dist/toolbar-c4e22755.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{m as e,J as t}from"./isArrayLikeObject-7a30aa4b.js";import{c as n}from"./datarecord-metadata-v3-schema-2311ecab.js";import{_ as o,a as i}from"./createClass-02596015.js";import{_ as s,a as r,b as a}from"./inherits-42ae8426.js";import c from"react";import u from"react-resize-detector";import l from"./lib/tooltip.es.js";import{Button as p}from"carbon-components-react";import h from"react-inlinesvg";import{c as b}from"./_baseIteratee-148093b7.js";import{OpenPanelFilledLeft16 as d,CenterToFit16 as f,ZoomOut16 as v,ZoomIn16 as m,Edit16 as A,TrashCan16 as g,ColorPalette16 as y,ChatOff16 as I,Chat16 as C,AddComment16 as k,Paste16 as O,Copy16 as F,Cut16 as D,Result16 as R,Redo16 as S,Undo16 as E,Launch16 as x,Minimize16 as w,Maximize16 as M,Play16 as j,StopFilledAlt16 as T,ChevronRight16 as B,ChevronUp16 as N,ChevronDown16 as P,OverflowMenuVertical16 as L}from"@carbon/icons-react";import{T as H,m as z,n as K,o as W,p as Z,q as U,r as V,s as J,t as Y,u as _,v as $,w as q,x as G,y as Q,z as X,A as ee,B as te,D as ne,F as oe,G as ie,H as se,J as re,K as ae,L as ce,M as ue,N as le,O as pe,P as he,Q as be}from"./canvas-constants-3bbfc8b1.js";import{v4 as de}from"uuid";var fe=/\s/;var ve=function(e){for(var t=e.length;t--&&fe.test(e.charAt(t)););return t},me=/^\s+/;var Ae=function(e){return e?e.slice(0,ve(e)+1).replace(me,""):e},ge=e,ye=t,Ie=/^[-+]0x[0-9a-f]+$/i,Ce=/^0b[01]+$/i,ke=/^0o[0-7]+$/i,Oe=parseInt;var Fe=function(e){if("number"==typeof e)return e;if(ye(e))return NaN;if(ge(e)){var t="function"==typeof e.valueOf?e.valueOf():e;e=ge(t)?t+"":t}if("string"!=typeof e)return 0===e?e:+e;e=Ae(e);var n=Ce.test(e);return n||ke.test(e)?Oe(e.slice(2),n?2:8):Ie.test(e)?NaN:+e},De=Fe,Re=1/0;var Se=function(e){return e?(e=De(e))===Re||e===-1/0?17976931348623157e292*(e<0?-1:1):e==e?e:0:0===e?e:0};var Ee=function(e){var t=Se(e),n=t%1;return t==t?n?t-n:t:0};function xe(e,t,n){return t=r(t),a(e,we()?Reflect.construct(t,n||[],r(e).constructor):t.apply(e,n))}function we(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(we=function(){return!!e})()}var Me=function(e){function t(e){var n;return i(this,t),(n=xe(this,t,[e])).buttonRef=c.createRef(),n}return s(t,e),o(t,[{key:"componentDidUpdate",value:function(){if(this.props.isFocusInToolbar&&this.props.buttonFocusAction===this.props.actionObj.action){var e=this.buttonRef.current.querySelector(".toolbar-jsx-obj");if(e)return void e.focus();this.buttonRef.current.focus()}}},{key:"getDefaultIcon",value:function(e){var t=!e.enable;switch(e.action){case be:return c.createElement(T,{disabled:t});case he:return c.createElement(j,{disabled:t});case pe:return c.createElement(M,{disabled:t});case le:return c.createElement(w,{disabled:t});case ue:return c.createElement(x,{disabled:t});case ce:return c.createElement(E,{disabled:t});case ae:return c.createElement(S,{disabled:t});case re:return c.createElement(R,{disabled:t});case se:return c.createElement(D,{disabled:t});case ie:return c.createElement(F,{disabled:t});case oe:return c.createElement(O,{disabled:t});case ne:case te:return c.createElement(k,{disabled:t});case ee:return c.createElement(C,{disabled:t});case X:return c.createElement(I,{disabled:t});case Q:return c.createElement(y,{disabled:t});case G:case q:return c.createElement(g,{disabled:t});case $:case _:return c.createElement(A,{disabled:t});case Y:return c.createElement(m,{disabled:t});case J:return c.createElement(v,{disabled:t});case V:return c.createElement(f,{disabled:t});case U:case Z:case W:return c.createElement(d,{disabled:t});case K:return c.createElement(h,{src:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Crect%20x%3D%221.5%22%20y%3D%222%22%20width%3D%2213%22%20height%3D%221%22%2F%3E%3Crect%20x%3D%221.5%22%20y%3D%2213%22%20width%3D%2213%22%20height%3D%221%22%2F%3E%3Cpath%20d%3D%22M7%2C10.5H2a.47.47%2C0%2C0%2C1-.5-.5V6A.47.47%2C0%2C0%2C1%2C2%2C5.5H7a.47.47%2C0%2C0%2C1%2C.5.5v4A.47.47%2C0%2C0%2C1%2C7%2C10.5Zm-4.5-1h4v-3h-4Z%22%2F%3E%3Cpath%20d%3D%22M14%2C10.5H9a.47.47%2C0%2C0%2C1-.5-.5V6A.47.47%2C0%2C0%2C1%2C9%2C5.5h5a.47.47%2C0%2C0%2C1%2C.5.5v4A.47.47%2C0%2C0%2C1%2C14%2C10.5Zm-4.5-1h4v-3h-4Z%22%2F%3E%3C%2Fsvg%3E",disabled:t});case z:return c.createElement(h,{src:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Crect%20x%3D%222%22%20y%3D%221.5%22%20width%3D%221%22%20height%3D%2213%22%2F%3E%3Crect%20x%3D%2213%22%20y%3D%221.5%22%20width%3D%221%22%20height%3D%2213%22%2F%3E%3Cpath%20d%3D%22M10.5%2C7.5h-5A.47.47%2C0%2C0%2C1%2C5%2C7V3a.47.47%2C0%2C0%2C1%2C.5-.5h5A.47.47%2C0%2C0%2C1%2C11%2C3V7A.47.47%2C0%2C0%2C1%2C10.5%2C7.5ZM6%2C6.5h4v-3H6Z%22%2F%3E%3Cpath%20d%3D%22M10.5%2C13.5h-5A.47.47%2C0%2C0%2C1%2C5%2C13V9a.47.47%2C0%2C0%2C1%2C.5-.5h5A.47.47%2C0%2C0%2C1%2C11%2C9v4A.47.47%2C0%2C0%2C1%2C10.5%2C13.5ZM6%2C12.5h4v-3H6Z%22%2F%3E%3C%2Fsvg%3E",disabled:t});case H:return c.createElement(h,{src:"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22currentColor%22%3E%20%3Cpath%20d%3D%22M27%2C12V27H5V5H20V3H5A2%2C2%2C0%2C0%2C0%2C3%2C5V27a2%2C2%2C0%2C0%2C0%2C2%2C2H27a2%2C2%2C0%2C0%2C0%2C2-2V12Z%22%2F%3E%20%3Ccircle%20class%3D%22dot%22%20cx%3D%2226.5%22%20cy%3D%225.5%22%20r%3D%223.5%22%2F%3E%3C%2Fsvg%3E",disabled:t});default:return null}}},{key:"generateLabel",value:function(e,t,n,o){var i="toolbar-icon-label";return i+=this.generateLabelType(n,o),i+=t?" disabled":"",c.createElement("div",{className:i},e)}},{key:"generateLabelType",value:function(e,t){return e?" overflow":"before"===t?" before":"after"===t?" after":""}},{key:"generateIcon",value:function(e){var t=this.getDefaultIcon(e);if(e.iconEnabled){var n=e.iconEnabled,o=e.iconDisabled||e.iconEnabled,i=e.enable?n:o,s="toolbar-icon-"+this.props.instanceId+" -"+e.action;t="string"==typeof i?c.createElement(h,{id:s,src:i,disabled:!e.enable}):i}return t?c.createElement("div",{className:"toolbar-icon"},t):null}},{key:"generateRegularItem",value:function(e){var t=null,n=null;this.props.isInMenu?n=this.generateLabel(e.label,!e.enable,!0):"before"===e.incLabelWithIcon?t=this.generateLabel(e.label,!e.enable,!1,e.incLabelWithIcon):"after"===e.incLabelWithIcon&&(n=this.generateLabel(e.label,!e.enable,!1,e.incLabelWithIcon));var o=this.generateIcon(e),i=e.textContent?c.createElement("div",{className:"toolbar-text-content"}," ",e.textContent," "):null,s=b("toolbar-item-content",{"is-in-menu":this.props.isInMenu,disabled:!e.enable,default:!e.kind}),r=e.kind||"ghost",a=this.generateChevronDiv(e),u=e.purpose?"content-main dual":"content-main",l=c.createElement("div",{className:s},c.createElement("div",{className:u},t,o,n,i),a);l=this.wrapInTooltip(l);var h=e.incLabelWithIcon?null:e.label,d=this.props.buttonFocusAction===e.action?0:-1;return c.createElement(p,{kind:r,ref:this.buttonRef,onClick:this.props.actionClickHandler,disabled:!e.enable,"aria-label":h,size:this.props.size,tabIndex:d},l)}},{key:"generateChevronDiv",value:function(e){if(e.subMenu||e.subPanel){if(this.props.isInMenu)return c.createElement("div",{className:"toolbar-right-chevron"},c.createElement(B,null));if("before"===e.incLabelWithIcon||"after"===e.incLabelWithIcon){var t=this.props.subAreaDisplayed?c.createElement(N,null):c.createElement(P,null);return c.createElement("div",{className:"toolbar-up-down-chevron"},t)}if("dual"===e.purpose){var n=this.props.subAreaDisplayed?c.createElement(N,null):c.createElement(P,null);return c.createElement("div",{className:"toolbar-up-down-chevron-mini",onClick:this.miniChevronClicked.bind(this)},n)}var o="sm"===this.props.size?"M 29 29 L 29 23 23 29 Z":"M 37 37 L 37 30 30 37 Z";return c.createElement("svg",{className:"toolbar-tick-svg"},c.createElement("path",{d:o,className:"toolbar-tick-mark"}))}return null}},{key:"miniChevronClicked",value:function(e){this.props.actionClickHandler(e,!0),e.stopPropagation()}},{key:"generateJsxItem",value:function(e){var t=null;if("function"==typeof e.jsx){var n=this.props.buttonFocusAction===e.action?0:-1;t=e.jsx(n)}else t=e.jsx;var o=this.wrapInTooltip(t);return c.createElement("div",{ref:this.buttonRef},o)}},{key:"wrapInTooltip",value:function(e){if(!this.props.isInMenu&&(this.showLabelAsTip(this.props.actionObj)||this.props.actionObj.tooltip)){var t=this.props.actionObj.tooltip?this.props.actionObj.tooltip:this.props.actionObj.label,n=this.props.actionName+"-"+this.props.instanceId+"-tooltip",o=this.props.actionObj.enable||this.props.actionObj.jsx,i=this.props.tooltipDirection?this.props.tooltipDirection:"bottom";return c.createElement(l,{id:n,tip:t,disable:!o,className:"icon-tooltip",direction:i},e)}return e}},{key:"showLabelAsTip",value:function(e){return!!e.label&&("before"!==e.incLabelWithIcon&&"after"!==e.incLabelWithIcon)}},{key:"render",value:function(){var e=this.props.actionObj;return e.jsx?this.generateJsxItem(e):this.generateRegularItem(e)}}])}(c.Component);function je(e,t,n,o){if(e&&o&&t){var i=document.getElementById(t),s=i?i.getBoundingClientRect():{top:-1e3,bottom:1e3,left:-1e3,right:1e3},r=e.getBoundingClientRect(),a=r.bottom-s.bottom,c=r.right-s.right;if("vertical"===n){if(a>0){var u=o.top-s.top>r.height?o.top-r.height:o.bottom-a;e.style.top=u+"px"}if(c>0){var l=o.left-c;e.style.left=l+"px"}}else{if(a>0){var p=r.top-a-2;e.style.top=p+"px"}if(c>0){var h=o.left-r.width;e.style.left=h+"px"}}}}function Te(e,t){return t?"vertical"===e?{top:t.bottom+1,left:t.left}:{top:t.top-1,left:t.left+t.width}:null}function Be(e,t,n){return t=r(t),a(e,Ne()?Reflect.construct(t,n||[],r(e).constructor):t.apply(e,n))}function Ne(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ne=function(){return!!e})()}var Pe=function(e){function t(e){var n;return i(this,t),(n=Be(this,t,[e])).onKeyDown=n.onKeyDown.bind(n),n.closeSubPanel=n.closeSubPanel.bind(n),n}return s(t,e),o(t,[{key:"componentDidMount",value:function(){je(this.areaRef,this.props.containingDivId,this.props.expandDirection,this.props.actionItemRect)}},{key:"componentDidUpdate",value:function(){je(this.areaRef,this.props.containingDivId,this.props.expandDirection,this.props.actionItemRect)}},{key:"onKeyDown",value:function(e){27===e.keyCode?(this.props.closeSubArea(),e.stopPropagation()):37!==e.keyCode&&39!==e.keyCode||e.stopPropagation()}},{key:"onFocus",value:function(e){e.stopPropagation(),e.preventDefault()}},{key:"closeSubPanel",value:function(e){this.props.closeSubArea()}},{key:"render",value:function(){var e=this,t=Te(this.props.expandDirection,this.props.actionItemRect);return this.props.subPanel?c.createElement("div",{ref:function(t){return e.areaRef=t},style:t,className:"toolbar-popover-list subpanel",tabIndex:-1,onKeyDown:this.onKeyDown,onFocus:this.onFocus},c.createElement(this.props.subPanel,{closeSubPanel:this.closeSubPanel,subPanelData:this.props.subPanelData})):null}}])}(c.Component);function Le(e,t,n){return t=r(t),a(e,He()?Reflect.construct(t,n||[],r(e).constructor):t.apply(e,n))}function He(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(He=function(){return!!e})()}var ze=function(e){function t(e){var n;return i(this,t),(n=Le(this,t,[e])).state={subAreaDisplayed:!1},n.divRef=c.createRef(),n.actionClickHandler=n.actionClickHandler.bind(n),n.onMouseEnter=n.onMouseEnter.bind(n),n.onMouseLeave=n.onMouseLeave.bind(n),n.openSubArea=n.openSubArea.bind(n),n.closeSubArea=n.closeSubArea.bind(n),n.clickOutside=n.clickOutside.bind(n),n}return s(t,e),o(t,[{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.clickOutside,!1)}},{key:"onMouseEnter",value:function(e){(this.props.actionObj.subMenu||this.props.actionObj.subPanel)&&this.openSubArea()}},{key:"onMouseLeave",value:function(e){(this.props.actionObj.subMenu||this.props.actionObj.subPanel)&&this.closeSubArea()}},{key:"clickOutside",value:function(e){if(this.state.subAreaDisplayed){var t=document.getElementsByClassName(this.generateActionName());(null==t?void 0:t.length)>0&&t[0].contains(e.target)||this.props.actionObj.leaveSubAreaOpenOnClickOutside||this.closeSubArea()}}},{key:"openSubArea",value:function(){this.setState({subAreaDisplayed:!0})}},{key:"closeSubArea",value:function(e){e&&!this.props.actionObj.closeSubAreaOnClick||this.setState({subAreaDisplayed:!1})}},{key:"actionClickHandler",value:function(e){this.props.actionObj.subMenu||this.props.actionObj.subPanel?this.state.subAreaDisplayed?(document.removeEventListener("click",this.clickOutside,!1),this.closeSubArea()):(document.addEventListener("click",this.clickOutside,!1),this.openSubArea()):(e.stopPropagation(),this.props.isInCascadeMenu?(this.props.closeParentSubArea(!0),this.props.setSubMenuFocus()):this.props.isInOverflowMenu?this.props.setSubMenuFocus(this.props.actionObj.action):(this.props.closeParentSubArea(!0),this.props.setToolbarFocusAction()),this.props.toolbarActionHandler(this.props.actionObj.action,e))}},{key:"generateActionName",value:function(){return this.props.actionObj.action+"-action"}},{key:"generateSubArea",value:function(){var e=this.divRef.current.getBoundingClientRect();return this.props.actionObj.subPanel?c.createElement(Pe,{subPanel:this.props.actionObj.subPanel,subPanelData:this.props.actionObj.subPanelData,closeSubArea:this.closeSubArea,actionItemRect:e,expandDirection:"horizontal",containingDivId:this.props.containingDivId}):c.createElement(Je,{subMenuActions:this.props.actionObj.subMenu,instanceId:this.props.instanceId,toolbarActionHandler:this.props.toolbarActionHandler,setSubMenuFocus:this.props.setSubMenuFocus,closeSubArea:this.closeSubArea,actionItemRect:e,expandDirection:"horizontal",containingDivId:this.props.containingDivId,parentSelector:this.generateSelector(),isCascadeMenu:!0,size:this.props.size})}},{key:"generateSelector",value:function(){return".toolbar-sub-menu-item"}},{key:"render",value:function(){var e=this.props.actionObj,t=this.generateActionName(),n=e.kind?e.kind:"default",o=b({"toolbar-sub-menu-item":!0,"toolbar-sub-menu-jsx-item":e.jsx,"toolbar-item-selected":e.isSelected},n,t),i=this.state.subAreaDisplayed?this.generateSubArea():null;return c.createElement("div",{ref:this.divRef,className:o,"data-toolbar-action":e.action,onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onKeyDown:this.onKeyDown},c.createElement("div",null,c.createElement(Me,{actionObj:e,actionName:this.generateActionName(),instanceId:this.props.instanceId,isInMenu:!0,subAreaDisplayed:this.state.subAreaDisplayed,actionClickHandler:this.actionClickHandler,buttonFocusAction:this.props.subMenuFocusAction,isFocusInToolbar:!0,size:this.props.size})),i)}}])}(c.Component);function Ke(e,t,n){return t=r(t),a(e,We()?Reflect.construct(t,n||[],r(e).constructor):t.apply(e,n))}function We(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(We=function(){return!!e})()}var Ze=function(e){function t(){return i(this,t),Ke(this,t,arguments)}return s(t,e),o(t,[{key:"render",value:function(){var e=this.props.isInMenu?"toolbar-divider-overflow":"toolbar-divider";return c.createElement("div",{className:e,tabIndex:-1,"aria-hidden":!0}," ")}}])}(c.Component);function Ue(e,t,n){return t=r(t),a(e,Ve()?Reflect.construct(t,n||[],r(e).constructor):t.apply(e,n))}function Ve(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ve=function(){return!!e})()}var Je=function(e){function t(e){var n;return i(this,t),(n=Ue(this,t,[e])).state={focusAction:"subarea"},n.onKeyDown=n.onKeyDown.bind(n),n.setFocusAction=n.setFocusAction.bind(n),n.setSubMenuFocus=n.setSubMenuFocus.bind(n),n}return s(t,e),o(t,[{key:"componentDidMount",value:function(){this.props.containingDivId&&this.props.subMenuActions.length>0&&je(this.areaRef,this.props.containingDivId,this.props.expandDirection,this.props.actionItemRect),"subarea"===this.state.focusAction&&this.setFocusOnFirstItem()}},{key:"componentDidUpdate",value:function(){var e=this;if("subarea"!==this.state.focusAction){var t=this.props.subMenuActions.find((function(t){return t.action===e.state.focusAction}));if(null==t||!t.enable){var n=this.getClosestEnabledAction(this.state.focusAction);null!==n&&this.setFocusAction(n)}}}},{key:"onKeyDown",value:function(e){27===e.keyCode?(this.props.closeSubArea(),e.stopPropagation()):38===e.keyCode?(this.setFocusOnPreviousItem(),e.stopPropagation()):40===e.keyCode?(this.setFocusOnNextItem(),e.stopPropagation()):(37===e.keyCode||39===e.keyCode)&&e.stopPropagation()}},{key:"setFocusOnFirstItem",value:function(){var e=this.getFocusableActions();e.length>0&&this.setFocusAction(e[0].action)}},{key:"setFocusOnPreviousItem",value:function(){var e=this.getFocusableActions(),t=this.getPreviousFocusAction(e);t&&this.setFocusAction(t.action)}},{key:"setFocusOnNextItem",value:function(){var e=this.getFocusableActions(),t=this.getNextFocusAction(e);t&&this.setFocusAction(t.action)}},{key:"setFocusAction",value:function(e){this.setState({focusAction:e})}},{key:"setSubMenuFocus",value:function(e){var t=e||this.state.focusAction;this.setFocusAction(t)}},{key:"getClosestEnabledAction",value:function(e){for(var t=this.props.subMenuActions.findIndex((function(t){return t.action===e})),n=null,o=t+1,i=t-1;(i>-1||o<this.props.subMenuActions.length)&&null===n;)i>-1&&this.props.subMenuActions[i].enable?n=this.props.subMenuActions[i].action:i--,o<this.props.subMenuActions.length&&this.props.subMenuActions[o].enable?n=this.props.subMenuActions[o].action:o++;return n}},{key:"getFocusableActions",value:function(){for(var e=[],t=0;t<this.props.subMenuActions.length;t++)(this.props.subMenuActions[t].enable||this.props.subMenuActions[t].jsx)&&e.push(this.props.subMenuActions[t]);return e}},{key:"getPreviousFocusAction",value:function(e){var t=this,n=e.findIndex((function(e){return e.action===t.state.focusAction}));return n>0?e[n-1]:e[e.length-1]}},{key:"getNextFocusAction",value:function(e){var t=this,n=e.findIndex((function(e){return e.action===t.state.focusAction}));return n<e.length-1?e[n+1]:e[0]}},{key:"generateSubMenuItems",value:function(){for(var e=[],t=0;t<this.props.subMenuActions.length;t++){var n=this.props.subMenuActions[t];n&&e.push(this.generateSubMenuItem(n,t))}return e}},{key:"generateSubMenuItem",value:function(e,t){var n=null;return e&&(n=e.divider?c.createElement(Ze,{key:"toolbar-item-key-"+t,isInMenu:!0}):c.createElement(ze,{key:"toolbar-item-key-"+t,actionObj:e,toolbarActionHandler:this.props.toolbarActionHandler,closeParentSubArea:this.props.closeSubArea,instanceId:this.props.instanceId,containingDivId:this.props.containingDivId,subMenuFocusAction:this.state.focusAction,setToolbarFocusAction:this.props.setToolbarFocusAction,setSubMenuFocus:this.props.setSubMenuFocus?this.props.setSubMenuFocus:this.setSubMenuFocus,size:this.props.size,isInOverflowMenu:this.props.isOverflowMenu,isInCascadeMenu:this.props.isCascadeMenu})),n}},{key:"render",value:function(){var e=this;if(this.props.subMenuActions.length>0){var t=this.props.isCascadeMenu?Te(this.props.expandDirection,this.props.actionItemRect):null;return this.subMenuItems=this.generateSubMenuItems(),c.createElement("div",{ref:function(t){return e.areaRef=t},style:t,className:"toolbar-popover-list submenu",tabIndex:-1,onKeyDown:this.onKeyDown},this.subMenuItems)}return null}}])}(c.Component);function Ye(e,t,n){return t=r(t),a(e,_e()?Reflect.construct(t,n||[],r(e).constructor):t.apply(e,n))}function _e(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(_e=function(){return!!e})()}var $e=function(e){function t(e){var n;return i(this,t),(n=Ye(this,t,[e])).state={subAreaDisplayed:!1},n.divRef=c.createRef(),n.actionClickHandler=n.actionClickHandler.bind(n),n.onKeyDown=n.onKeyDown.bind(n),n.openSubArea=n.openSubArea.bind(n),n.closeSubArea=n.closeSubArea.bind(n),n.clickOutside=n.clickOutside.bind(n),n}return s(t,e),o(t,[{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.clickOutside,!1)}},{key:"onKeyDown",value:function(e){27===e.keyCode?this.closeSubArea():40===e.keyCode&&this.hasSubArea()&&this.openSubArea()}},{key:"getBoundingRect",value:function(){return this.divRef.current.getBoundingClientRect()}},{key:"getAction",value:function(){return this.props.actionObj.action}},{key:"isEnabled",value:function(){return this.props.actionObj.enable||this.props.actionObj.jsx}},{key:"isSubAreaDisplayed",value:function(){return this.props.actionObj.setExtIsSubAreaDisplayed&&void 0!==this.props.actionObj.extIsSubAreaDisplayed?this.props.actionObj.extIsSubAreaDisplayed:this.state.subAreaDisplayed}},{key:"clickOutside",value:function(e){if(this.isSubAreaDisplayed()){var t=document.getElementsByClassName(this.generateActionName());!!(t&&t.length>0)&&t[0].contains(e.target)||this.props.actionObj.leaveSubAreaOpenOnClickOutside||this.closeSubArea()}}},{key:"hasSubArea",value:function(){return this.props.actionObj.subMenu||this.props.actionObj.subPanel}},{key:"openSubArea",value:function(){this.props.actionObj.setExtIsSubAreaDisplayed?this.props.actionObj.setExtIsSubAreaDisplayed(!0):this.setState({subAreaDisplayed:!0})}},{key:"closeSubArea",value:function(e){if(!e||this.props.actionObj.closeSubAreaOnClick){if(this.props.actionObj.setExtIsSubAreaDisplayed)return void this.props.actionObj.setExtIsSubAreaDisplayed(!1);this.setState({subAreaDisplayed:!1})}}},{key:"actionClickHandler",value:function(e,t){this.hasSubArea()&&("dual"!==this.props.actionObj.purpose||t)?this.isSubAreaDisplayed()?(document.removeEventListener("click",this.clickOutside,!1),this.closeSubArea(),this.props.setToolbarFocusAction(this.props.actionObj.action)):(document.addEventListener("click",this.clickOutside,!1),this.props.closeAnyOpenSubArea(),this.props.setToolbarFocusAction(this.props.actionObj.action),this.openSubArea()):(this.closeSubArea(),this.props.toolbarActionHandler(this.props.actionObj.action,e),this.props.setToolbarFocusAction(this.props.actionObj.action))}},{key:"generateActionName",value:function(){return this.props.actionObj.action+"-action"}},{key:"generateSubArea",value:function(){var e=this.divRef.current?this.divRef.current.getBoundingClientRect():null;return e=e&&"dual"===this.props.actionObj.purpose?this.adjustForDual(e):e,this.props.actionObj.subPanel?c.createElement(Pe,{subPanel:this.props.actionObj.subPanel,subPanelData:this.props.actionObj.subPanelData,closeSubArea:this.closeSubArea,setToolbarFocusAction:this.props.setToolbarFocusAction,actionItemRect:e,expandDirection:"vertical",containingDivId:this.props.containingDivId}):c.createElement(Je,{subMenuActions:this.props.actionObj.subMenu,instanceId:this.props.instanceId,toolbarActionHandler:this.props.toolbarActionHandler,closeSubArea:this.closeSubArea,setToolbarFocusAction:this.props.setToolbarFocusAction,actionItemRect:e,expandDirection:"vertical",containingDivId:this.props.containingDivId,parentSelector:this.generateSelector(this.props.actionObj),isCascadeMenu:!1,size:this.props.size})}},{key:"adjustForDual",value:function(e){return{height:e.height,width:e.width,top:e.top,bottom:e.bottom,left:e.left+40,right:e.right+40,x:e.x+40,y:e.y}}},{key:"generateSelector",value:function(e){return e.jsx?".toolbar-jsx-item":".toolbar-item"}},{key:"render",value:function(){var e=this.props.actionObj,t=this.generateActionName(),n=e.kind?e.kind:"default",o=b({"toolbar-item":!e.jsx,"toolbar-jsx-item":e.jsx,"toolbar-item-selected":e.isSelected},n,t,this.props.actionObj.className),i=this.isSubAreaDisplayed()?this.generateSubArea():null;return c.createElement("div",{ref:this.divRef,className:o,"data-toolbar-action":e.action,"data-toolbar-item":!0,onMouseEnter:this.onMouseEnter,onMouseLeave:this.onMouseLeave,onKeyDown:this.onKeyDown},c.createElement("div",null,c.createElement(Me,{actionObj:e,actionName:this.generateActionName(),tooltipDirection:this.props.tooltipDirection,instanceId:this.props.instanceId,isInMenu:!1,subAreaDisplayed:this.isSubAreaDisplayed(),actionClickHandler:this.actionClickHandler,buttonFocusAction:this.isSubAreaDisplayed()?null:this.props.toolbarFocusAction,isFocusInToolbar:this.props.isFocusInToolbar,size:this.props.size})),i)}}])}(c.Component);function qe(e,t,n){return t=r(t),a(e,Ge()?Reflect.construct(t,n||[],r(e).constructor):t.apply(e,n))}function Ge(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(Ge=function(){return!!e})()}var Qe=function(e){function t(e){var n;return i(this,t),(n=qe(this,t,[e])).state={showExtendedMenu:!1},n.buttonRef=c.createRef(),n.uuid=de(),n.toggleExtendedMenu=n.toggleExtendedMenu.bind(n),n.clickOutside=n.clickOutside.bind(n),n.closeSubArea=n.closeSubArea.bind(n),n.onKeyDown=n.onKeyDown.bind(n),n}return s(t,e),o(t,[{key:"componentDidUpdate",value:function(){this.props.toolbarFocusAction===this.props.action&&this.props.isFocusInToolbar&&!this.state.showExtendedMenu&&this.buttonRef.current.focus()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.clickOutside,!1)}},{key:"onKeyDown",value:function(e){27===e.keyCode?this.closeSubArea():40===e.keyCode&&this.openSubArea()}},{key:"getAction",value:function(){return this.props.action}},{key:"isSubAreaDisplayed",value:function(){return this.state.showExtendedMenu}},{key:"closeSubArea",value:function(){document.removeEventListener("click",this.clickOutside,!1),this.props.setOverflowIndex(null),this.setState({showExtendedMenu:!1}),this.props.setToolbarFocusAction(this.props.action)}},{key:"openSubArea",value:function(){document.addEventListener("click",this.clickOutside,!1),this.props.closeAnyOpenSubArea(),this.props.setOverflowIndex(this.props.index),this.setState({showExtendedMenu:!0}),this.props.setToolbarFocusAction(this.props.action)}},{key:"genOverflowButtonClassName",value:function(){return"toolbar-overflow-container "+this.genIndexClassName()+" "+this.genUuidClassName()}},{key:"genIndexClassName",value:function(){return"toolbar-index-"+this.props.index}},{key:"genUuidClassName",value:function(){return"toolbar-uuid-"+this.uuid}},{key:"toggleExtendedMenu",value:function(){this.state.showExtendedMenu?this.closeSubArea():this.openSubArea()}},{key:"clickOutside",value:function(e){if(this.state.showExtendedMenu){var t="."+this.genIndexClassName();e.target.closest(t)||this.setState({showExtendedMenu:!1})}}},{key:"render",value:function(){var e=null;if(this.state.showExtendedMenu){var t=this.buttonRef.current.getBoundingClientRect();e=c.createElement(Je,{ref:this.subMenuRef,subMenuActions:this.props.subMenuActions,instanceId:this.props.instanceId,toolbarActionHandler:this.props.toolbarActionHandler,closeSubArea:this.closeSubArea,setToolbarFocusAction:this.props.setToolbarFocusAction,actionItemRect:t,expandDirection:"vertical",containingDivId:this.props.containingDivId,parentSelector:".toolbar-overflow-container",isOverflowMenu:!0,isCascadeMenu:!1,size:this.props.size})}var n=this.props.toolbarFocusAction===this.props.action?0:-1;return c.createElement("div",{className:this.genOverflowButtonClassName(),"data-toolbar-action":this.props.action},c.createElement("div",{className:"toolbar-overflow-item"},c.createElement(p,{ref:this.buttonRef,kind:"ghost",tabIndex:n,onClick:this.toggleExtendedMenu,onKeyDown:this.onKeyDown,"aria-label":this.props.label,size:this.props.size},c.createElement("div",{className:"toolbar-item-content default"},c.createElement("div",{className:"toolbar-icon overflow-item"},c.createElement(L,null))))),e)}}])}(c.Component);function Xe(e,t,n){return t=r(t),a(e,et()?Reflect.construct(t,n||[],r(e).constructor):t.apply(e,n))}function et(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){})))}catch(e){}return(et=function(){return!!e})()}var tt=function(e){function t(e){var n;return i(this,t),(n=Xe(this,t,[e])).state={focusAction:"toolbar",leftOverflowIndex:null,rightOverflowIndex:null},n.isFocusInToolbar=!1,n.leftBar=[],n.rightBar=[],n.leftItemRefs=[],n.rightItemRefs=[],n.overflowItemRefs=[],n.toolbarRef=c.createRef(),n.onFocus=n.onFocus.bind(n),n.onBlur=n.onBlur.bind(n),n.onKeyDown=n.onKeyDown.bind(n),n.onToolbarResize=n.onToolbarResize.bind(n),n.setOverflowIndex=n.setOverflowIndex.bind(n),n.generateToolbarItems=n.generateToolbarItems.bind(n),n.setFocusAction=n.setFocusAction.bind(n),n.setFocusOnItem=n.setFocusOnItem.bind(n),n.closeAnyOpenSubArea=n.closeAnyOpenSubArea.bind(n),n}return s(t,e),o(t,[{key:"componentDidUpdate",value:function(){var e=this;-1===this.getFocusableItemRefs().findIndex((function(t){return e.getRefAction(t)===e.state.focusAction}))&&this.setFocusOnFirstItem()}},{key:"onFocus",value:function(e){var t,n;this.isFocusInToolbar=!0,null!==(t=e.target)&&void 0!==t&&null!==(n=t.classList)&&void 0!==n&&n.contains("toolbar-div")&&("toolbar"===this.state.focusAction?this.setFocusOnFirstItem():this.setFocusOnItem())}},{key:"onBlur",value:function(e){var t;null!==(t=e.relatedTarget)&&void 0!==t&&t.closest(".toolbar-div")||(this.isFocusInToolbar=!1)}},{key:"onKeyDown",value:function(e){27===e.keyCode?this.setFocusOnItem():37===e.keyCode?this.setFocusOnPreviousItem():39===e.keyCode&&this.setFocusOnNextItem()}},{key:"onScroll",value:function(e){e.currentTarget.scroll(0,0),e.preventDefault()}},{key:"onToolbarResize",value:function(){var e=this.getFocusableItemRefs(),t=this.isFocusActionFocusable(this.state.focusAction,e),n=this.getRefWithOpenSubArea();if(n){var o,i,s=null===(o=n.current)||void 0===o?void 0:o.getAction();if(this.isFocusActionFocusable(s,e))this.setFocusAction(this.state.focusAction);else null===(i=n.current)||void 0===i||i.closeSubArea()}t||this.setFocusOnFirstItem()}},{key:"getRefWithOpenSubArea",value:function(){var e=this.leftItemRefs.find((function(e){var t;return null===(t=e.current)||void 0===t?void 0:t.isSubAreaDisplayed()}));return e||(e=this.rightItemRefs.find((function(e){var t;return null===(t=e.current)||void 0===t?void 0:t.isSubAreaDisplayed()}))),e||(e=this.overflowItemRefs.find((function(e){var t;return null===(t=e.current)||void 0===t?void 0:t.isSubAreaDisplayed()}))),e}},{key:"setFocusOnItem",value:function(e){var t=e||this.state.focusAction;this.getFocusableItemRefs().length>0&&this.setFocusAction(t)}},{key:"setFocusOnFirstItem",value:function(){var e=this.getFocusableItemRefs();if(e.length>0){var t=this.getRefAction(e[0]);this.setFocusAction(t)}}},{key:"setFocusOnPreviousItem",value:function(){var e=this.getFocusableItemRefs(),t=this.getPreviousItemRef(e);if(t){var n=this.getRefAction(t);this.setFocusAction(n)}}},{key:"setFocusOnNextItem",value:function(){var e=this.getFocusableItemRefs(),t=this.getNextItemRef(e);if(t){var n=this.getRefAction(t);this.setFocusAction(n)}}},{key:"setFocusAction",value:function(e){this.setState({focusAction:e})}},{key:"getPreviousItemRef",value:function(e){var t=this,n=e.findIndex((function(e){return t.getRefAction(e)===t.state.focusAction}));return 0===n?e[e.length-1]:e[n-1]}},{key:"getNextItemRef",value:function(e){var t=this,n=e.findIndex((function(e){return t.getRefAction(e)===t.state.focusAction}));return n===e.length-1?e[0]:e[n+1]}},{key:"getRefAction",value:function(e){var t;return null===(t=e.current)||void 0===t?void 0:t.getAction()}},{key:"getFocusableItemRefs",value:function(){return this.getLeftBarFocusableItemRefs().concat(this.getRightBarFocusableItemRefs())}},{key:"getLeftBarFocusableItemRefs",value:function(){var e=this,t=[];if(0===this.leftItemRefs.length)return t;for(var n=this.findToolbarTopYCoordinate(),o=null,i=function(){var i,r,a=null===(i=e.leftItemRefs[s].current)||void 0===i?void 0:i.getBoundingRect();if((null==a?void 0:a.top)===n)null!==(r=e.leftItemRefs[s].current)&&void 0!==r&&r.isEnabled()&&t.push(e.leftItemRefs[s]);else if(!o){var c=e.getRefAction(e.leftItemRefs[s]),u=e.getOverflowAction(c);(o=e.overflowItemRefs.find((function(e){var t;return(null===(t=e.current)||void 0===t?void 0:t.getAction())===u})))&&t.push(o)}},s=0;s<this.leftItemRefs.length;s++)i();return t}},{key:"getRightBarFocusableItemRefs",value:function(){var e=[];if(0===this.rightItemRefs)return e;for(var t=this.findToolbarTopYCoordinate(),n=0;n<this.rightItemRefs.length;n++){var o,i;if(null!==(o=this.rightItemRefs[n].current)&&void 0!==o&&o.isEnabled())(null===(i=this.rightItemRefs[n].current)||void 0===i?void 0:i.getBoundingRect()).top===t&&e.push(this.rightItemRefs[n])}return e.reverse()}},{key:"getOverflowAction",value:function(e){return"overflow_"+e}},{key:"setOverflowIndex",value:function(e){null===e?this.setState({leftOverflowIndex:null,rightOverflowIndex:null}):this.setState({leftOverflowIndex:e,rightOverflowIndex:this.getRightOverflowIndex()})}},{key:"getRightOverflowIndex",value:function(){var e=this,t=this.findFirstRightItemRefNotOnTopRow();return null===t?this.rightBar.length:this.rightBar.findIndex((function(n){return n.action===e.getRefAction(t)}))}},{key:"isFocusActionFocusable",value:function(e,t){return t.findIndex((function(t){var n,o;return(null===(n=t.current)||void 0===n||null===(o=n.props.actionObj)||void 0===o?void 0:o.action)===e}))>-1}},{key:"findFirstRightItemRefNotOnTopRow",value:function(){for(var e=this.findToolbarTopYCoordinate(),t=null,n=0;n<this.rightItemRefs.length;n++){var o;(null===(o=this.rightItemRefs[n].current)||void 0===o?void 0:o.getBoundingRect()).top!==e&&null===t&&(t=this.rightItemRefs[n])}return t}},{key:"findToolbarTopYCoordinate",value:function(){var e,t=null===(e=this.toolbarRef.current)||void 0===e?void 0:e.getBoundingClientRect();return null==t?void 0:t.top}},{key:"generateToolbarItems",value:function(e,t,n){for(var o=[],i=0;i<e.length;i++){var s=e[i];s&&(!s.divider&&t&&o.push(this.generateOverflowItem(i,s.action)),o.push(this.generateToolbarItem(s,i,n)))}return o}},{key:"generateToolbarItem",value:function(e,t,n){var o=null;if(e)if(e.divider)o=c.createElement(Ze,{key:"toolbar-item-key-"+t,isInMenu:!1});else{var i=c.createRef();n&&n.push(i),o=c.createElement($e,{ref:i,key:"toolbar-item-key-"+t,actionObj:e,tooltipDirection:this.props.tooltipDirection,toolbarActionHandler:this.props.toolbarActionHandler,instanceId:this.props.instanceId,containingDivId:this.props.containingDivId,toolbarFocusAction:this.state.focusAction,setToolbarFocusAction:this.setFocusOnItem,isFocusInToolbar:this.isFocusInToolbar,closeAnyOpenSubArea:this.closeAnyOpenSubArea,size:this.props.size})}return o}},{key:"generateOverflowItem",value:function(e,t){var n=this.props.additionalText?this.props.additionalText.overflowMenuLabel:"",o=this.getOverflowAction(t),i=e===this.state.leftOverflowIndex?this.createSubMenuActions():[],s=c.createRef();return this.overflowItemRefs.push(s),c.createElement(Qe,{ref:s,key:"toolbar-overflow-item-key-"+e,index:e,action:o,label:n,size:this.props.size,subMenuActions:i,setOverflowIndex:this.setOverflowIndex,toolbarActionHandler:this.props.toolbarActionHandler,instanceId:this.props.instanceId,containingDivId:this.props.containingDivId,toolbarFocusAction:this.state.focusAction,setToolbarFocusAction:this.setFocusOnItem,isFocusInToolbar:this.isFocusInToolbar,closeAnyOpenSubArea:this.closeAnyOpenSubArea})}},{key:"createSubMenuActions",value:function(){var e=this.leftBar.slice(this.state.leftOverflowIndex),t=this.rightBar.slice(this.state.rightOverflowIndex).reverse();return e.concat(t)}},{key:"closeAnyOpenSubArea",value:function(){var e=this;this.leftItemRefs.forEach((function(t){return e.closeSubAreaOnRef(t)})),this.rightItemRefs.forEach((function(t){return e.closeSubAreaOnRef(t)})),this.overflowItemRefs.forEach((function(t){return e.closeOverflowMenuOnRef(t)}))}},{key:"closeSubAreaOnRef",value:function(e){var t,n,o;if(null!==(t=e.current)&&void 0!==t&&t.props.actionObj.setExtIsSubAreaDisplayed)null===(o=e.current)||void 0===o||o.props.actionObj.setExtIsSubAreaDisplayed(!1);else if(null!==(n=e.current)&&void 0!==n&&n.state.subAreaDisplayed){var i;null===(i=e.current)||void 0===i||i.closeSubArea()}}},{key:"closeOverflowMenuOnRef",value:function(e){var t,n;null!==(t=e.current)&&void 0!==t&&t.state.showExtendedMenu&&(null===(n=e.current)||void 0===n||n.closeSubArea())}},{key:"render",value:function(){this.leftBar=this.props.config.leftBar||[],this.rightBar=this.props.config.rightBar||[],this.rightBar=n(this.rightBar).reverse()||[],this.leftItemRefs=[],this.rightItemRefs=[],this.overflowItemRefs=[];var e=this.generateToolbarItems(this.leftBar,!0,this.leftItemRefs),t=this.generateToolbarItems(this.rightBar,!1,this.rightItemRefs),o="sm"===this.props.size?"toolbar-div toolbar-size-small":"toolbar-div",i="toolbar"===this.state.focusAction?0:-1;return c.createElement(u,{handleWidth:!0,onResize:this.onToolbarResize},c.createElement("div",{ref:this.toolbarRef,className:o,instanceid:this.props.instanceId,tabIndex:i,onFocus:this.onFocus,onBlur:this.onBlur,onKeyDown:this.onKeyDown},c.createElement("div",{className:"toolbar-left-bar",onScroll:this.onScroll},e),c.createElement("div",{className:"toolbar-right-bar"},t)))}}])}(c.Component);export{tt as T,Fe as a,Ee as t};
2
+ //# sourceMappingURL=toolbar-bb5b5c13.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolbar-bb5b5c13.js","sources":["../node_modules/lodash/_trimmedEndIndex.js","../node_modules/lodash/_baseTrim.js","../node_modules/lodash/toNumber.js","../node_modules/lodash/toFinite.js","../node_modules/lodash/toInteger.js","../src/toolbar/toolbar-button-item.jsx","../assets/images/arrange_horizontally.svg","../assets/images/arrange_vertically.svg","../assets/images/notification_counter_icon.svg","../src/toolbar/toolbar-sub-utils.js","../src/toolbar/toolbar-sub-panel.jsx","../src/toolbar/toolbar-sub-menu-item.jsx","../src/toolbar/toolbar-divider-item.jsx","../src/toolbar/toolbar-sub-menu.jsx","../src/toolbar/toolbar-action-item.jsx","../src/toolbar/toolbar-overflow-item.jsx","../src/toolbar/toolbar.jsx"],"sourcesContent":["/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nmodule.exports = baseTrim;\n","var baseTrim = require('./_baseTrim'),\n isObject = require('./isObject'),\n isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\n\n/**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\nfunction toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n}\n\nmodule.exports = toNumber;\n","var toNumber = require('./toNumber');\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_INTEGER = 1.7976931348623157e+308;\n\n/**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\nfunction toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n}\n\nmodule.exports = toFinite;\n","var toFinite = require('./toFinite');\n\n/**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\nfunction toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n}\n\nmodule.exports = toInteger;\n","/*\n * Copyright 2017-2024 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport Tooltip from \"../tooltip/tooltip.jsx\";\nimport ArrangeHorizontally from \"./../../assets/images/arrange_horizontally.svg\";\nimport ArrangeVertically from \"./../../assets/images/arrange_vertically.svg\";\nimport ToggleNotificationPanel from \"./../../assets/images/notification_counter_icon.svg\";\n\nimport { Button } from \"carbon-components-react\";\nimport SVG from \"react-inlinesvg\";\nimport classNames from \"classnames\";\nimport { StopFilledAlt16, Play16, Undo16, Redo16, Chat16, ChatOff16, Result16,\n\tCut16, Copy16, Paste16, Edit16,\tColorPalette16, Maximize16, Minimize16,\n\tLaunch16, AddComment16, TrashCan16, ZoomIn16, ZoomOut16,\n\tChevronRight16, ChevronDown16, ChevronUp16,\n\tCenterToFit16, OpenPanelFilledLeft16 } from \"@carbon/icons-react\";\nimport { TOOLBAR_STOP, TOOLBAR_RUN, TOOLBAR_UNDO, TOOLBAR_REDO,\n\tTOOLBAR_CUT, TOOLBAR_COPY, TOOLBAR_PASTE, TOOLBAR_CLIPBOARD,\n\tTOOLBAR_CREATE_COMMENT, TOOLBAR_CREATE_AUTO_COMMENT, TOOLBAR_COLOR_BACKGROUND,\n\tTOOLBAR_DELETE_SELECTED_OBJECTS, TOOLBAR_DELETE_LINK,\n\tTOOLBAR_ZOOM_IN, TOOLBAR_ZOOM_OUT, TOOLBAR_ZOOM_FIT,\n\tTOOLBAR_ARRANGE_HORIZONALLY, TOOLBAR_ARRANGE_VERTICALLY,\n\tTOOLBAR_OPEN_PALETTE, TOOLBAR_CLOSE_PALETTE, TOOLBAR_TOGGLE_PALETTE, TOOLBAR_TOGGLE_NOTIFICATION_PANEL,\n\tTOOLBAR_SHOW_COMMENTS, TOOLBAR_HIDE_COMMENTS,\n\tTOOLBAR_EXPAND_SUPERNODE_IN_PLACE, TOOLBAR_COLLAPSE_SUPERNODE_IN_PLACE,\n\tTOOLBAR_EXPAND_SUPERNODE_FULL_PAGE, TOOLBAR_SET_NODE_LABEL_EDIT, TOOLBAR_SET_COMMENT_EDIT_MODE }\n\tfrom \"../common-canvas/constants/canvas-constants.js\";\n\nclass ToolbarButtonItem extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.buttonRef = React.createRef();\n\t}\n\n\tcomponentDidUpdate() {\n\t\tif (this.props.isFocusInToolbar &&\n\t\t\t\tthis.props.buttonFocusAction === this.props.actionObj.action) {\n\t\t\t// If a Jsx object was provided, the class of the component should have\n\t\t\t// been set to toolbar-jsx-obj.\n\t\t\tconst jsxItem = this.buttonRef.current.querySelector(\".toolbar-jsx-obj\");\n\t\t\tif (jsxItem) {\n\t\t\t\tjsxItem.focus();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.buttonRef.current.focus();\n\t\t}\n\t}\n\n\t// Returns a default icon, if there is one, for the action passed in.\n\t// It also may be set to disabled state.\n\tgetDefaultIcon(actionObj) {\n\t\tconst disabled = !actionObj.enable;\n\n\t\tswitch (actionObj.action) {\n\t\tcase (TOOLBAR_STOP):\n\t\t\treturn <StopFilledAlt16 disabled={disabled} />;\n\t\tcase (TOOLBAR_RUN):\n\t\t\treturn <Play16 disabled={disabled} />;\n\t\tcase (TOOLBAR_EXPAND_SUPERNODE_IN_PLACE):\n\t\t\treturn <Maximize16 disabled={disabled} />;\n\t\tcase (TOOLBAR_COLLAPSE_SUPERNODE_IN_PLACE):\n\t\t\treturn <Minimize16 disabled={disabled} />;\n\t\tcase (TOOLBAR_EXPAND_SUPERNODE_FULL_PAGE):\n\t\t\treturn <Launch16 disabled={disabled} />;\n\t\tcase (TOOLBAR_UNDO):\n\t\t\treturn <Undo16 disabled={disabled} />;\n\t\tcase (TOOLBAR_REDO):\n\t\t\treturn <Redo16 disabled={disabled} />;\n\t\tcase (TOOLBAR_CLIPBOARD):\n\t\t\treturn <Result16 disabled={disabled} />;\n\t\tcase (TOOLBAR_CUT):\n\t\t\treturn <Cut16 disabled={disabled} />;\n\t\tcase (TOOLBAR_COPY):\n\t\t\treturn <Copy16 disabled={disabled} />;\n\t\tcase (TOOLBAR_PASTE):\n\t\t\treturn <Paste16 disabled={disabled} />;\n\t\tcase (TOOLBAR_CREATE_COMMENT):\n\t\tcase (TOOLBAR_CREATE_AUTO_COMMENT):\n\t\t\treturn <AddComment16 disabled={disabled} />;\n\t\tcase (TOOLBAR_SHOW_COMMENTS):\n\t\t\treturn <Chat16 disabled={disabled} />;\n\t\tcase (TOOLBAR_HIDE_COMMENTS):\n\t\t\treturn <ChatOff16 disabled={disabled} />;\n\t\tcase (TOOLBAR_COLOR_BACKGROUND):\n\t\t\treturn <ColorPalette16 disabled={disabled} />;\n\t\tcase (TOOLBAR_DELETE_LINK):\n\t\tcase (TOOLBAR_DELETE_SELECTED_OBJECTS):\n\t\t\treturn <TrashCan16 disabled={disabled} />;\n\t\tcase (TOOLBAR_SET_COMMENT_EDIT_MODE):\n\t\tcase (TOOLBAR_SET_NODE_LABEL_EDIT):\n\t\t\treturn <Edit16 disabled={disabled} />;\n\t\tcase (TOOLBAR_ZOOM_IN):\n\t\t\treturn <ZoomIn16 disabled={disabled} />;\n\t\tcase (TOOLBAR_ZOOM_OUT):\n\t\t\treturn <ZoomOut16 disabled={disabled} />;\n\t\tcase (TOOLBAR_ZOOM_FIT):\n\t\t\treturn <CenterToFit16 disabled={disabled} />;\n\t\tcase (TOOLBAR_OPEN_PALETTE):\n\t\t\treturn <OpenPanelFilledLeft16 disabled={disabled} />;\n\t\tcase (TOOLBAR_CLOSE_PALETTE):\n\t\t\treturn <OpenPanelFilledLeft16 disabled={disabled} />;\n\t\tcase (TOOLBAR_TOGGLE_PALETTE):\n\t\t\treturn <OpenPanelFilledLeft16 disabled={disabled} />;\n\n\t\t// Non-carbon icons\n\t\tcase (TOOLBAR_ARRANGE_HORIZONALLY):\n\t\t\treturn <SVG src={ArrangeHorizontally} disabled={disabled} />;\n\t\tcase (TOOLBAR_ARRANGE_VERTICALLY):\n\t\t\treturn <SVG src={ArrangeVertically} disabled={disabled} />;\n\t\tcase (TOOLBAR_TOGGLE_NOTIFICATION_PANEL):\n\t\t\treturn <SVG src={ToggleNotificationPanel} disabled={disabled} />;\n\n\t\tdefault:\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tgenerateLabel(label, disable, isInMenu, incLabelWithIcon) {\n\t\tlet className = \"toolbar-icon-label\";\n\t\tclassName += this.generateLabelType(isInMenu, incLabelWithIcon);\n\t\tclassName += disable ? \" disabled\" : \"\";\n\t\treturn (<div className={className}>{label}</div>);\n\t}\n\n\tgenerateLabelType(isInMenu, inLabelWithIcon) {\n\t\tif (isInMenu) {\n\t\t\treturn \" overflow\";\n\t\t} else if (inLabelWithIcon === \"before\") {\n\t\t\treturn \" before\";\n\t\t} else if (inLabelWithIcon === \"after\") {\n\t\t\treturn \" after\";\n\t\t}\n\t\treturn \"\";\n\t}\n\n\tgenerateIcon(actionObj) {\n\t\tlet icon = this.getDefaultIcon(actionObj);\n\n\t\t// Host application provided icon. This will override any default icon.\n\t\tif (actionObj.iconEnabled) {\n\t\t\tconst iconEnabled = actionObj.iconEnabled;\n\t\t\tconst iconDisabled = actionObj.iconDisabled || actionObj.iconEnabled;\n\t\t\tconst customIcon = actionObj.enable ? iconEnabled : iconDisabled;\n\t\t\tconst id = \"toolbar-icon-\" + this.props.instanceId + \" -\" + actionObj.action;\n\n\t\t\tif (typeof customIcon === \"string\") {\n\t\t\t\ticon = (<SVG id={id} src={customIcon} disabled={!actionObj.enable} />);\n\t\t\t} else {\n\t\t\t\ticon = customIcon;\n\t\t\t}\n\t\t}\n\n\t\tif (icon) {\n\t\t\treturn (\n\t\t\t\t<div className={\"toolbar-icon\"}>\n\t\t\t\t\t{icon}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\n\tgenerateRegularItem(actionObj) {\n\t\tlet labelBefore = null;\n\t\tlet labelAfter = null;\n\n\t\tif (this.props.isInMenu) {\n\t\t\tlabelAfter = this.generateLabel(actionObj.label, !actionObj.enable, true);\n\n\t\t} else if (actionObj.incLabelWithIcon === \"before\") {\n\t\t\tlabelBefore = this.generateLabel(actionObj.label, !actionObj.enable, false, actionObj.incLabelWithIcon);\n\n\t\t} else if (actionObj.incLabelWithIcon === \"after\") {\n\t\t\tlabelAfter = this.generateLabel(actionObj.label, !actionObj.enable, false, actionObj.incLabelWithIcon);\n\t\t}\n\n\t\tconst icon = this.generateIcon(actionObj);\n\t\tconst textContent = actionObj.textContent ? (<div className=\"toolbar-text-content\"> {actionObj.textContent} </div>) : null;\n\n\t\tconst itemContentClassName = classNames(\n\t\t\t\"toolbar-item-content\",\n\t\t\t{ \"is-in-menu\": this.props.isInMenu, \"disabled\": !actionObj.enable, \"default\": !actionObj.kind });\n\n\t\t// If no 'kind' is set, use ghost and then override colors using the \"default\" class in innerDivClassName.\n\t\tconst kind = actionObj.kind || \"ghost\";\n\n\t\tconst chevronDiv = this.generateChevronDiv(actionObj);\n\n\t\tconst mainClassName = actionObj.purpose ? \"content-main dual\" : \"content-main\";\n\n\t\tlet buttonContent = (\n\t\t\t<div className={itemContentClassName}>\n\t\t\t\t<div className={mainClassName}>\n\t\t\t\t\t{labelBefore}\n\t\t\t\t\t{icon}\n\t\t\t\t\t{labelAfter}\n\t\t\t\t\t{textContent}\n\t\t\t\t</div>\n\t\t\t\t{chevronDiv}\n\t\t\t</div>\n\t\t);\n\n\t\tbuttonContent = this.wrapInTooltip(buttonContent);\n\n\t\t// Only specify an aria label for the button if a label is not displayed\n\t\t// with the button icon.\n\t\tconst ariaLabel = actionObj.incLabelWithIcon ? null : actionObj.label;\n\t\tconst tabIndex = this.props.buttonFocusAction === actionObj.action ? 0 : -1;\n\n\t\tconst button = (\n\t\t\t<Button kind={kind}\n\t\t\t\tref={this.buttonRef}\n\t\t\t\tonClick={this.props.actionClickHandler}\n\t\t\t\tdisabled={!actionObj.enable}\n\t\t\t\taria-label={ariaLabel}\n\t\t\t\tsize={this.props.size}\n\t\t\t\ttabIndex={tabIndex}\n\t\t\t>\n\t\t\t\t{buttonContent}\n\t\t\t</Button>\n\t\t);\n\n\t\treturn button;\n\t}\n\n\t// Returns a civ containing a chevron icon. If the action icon is displaying\n\t// a sub-menu or sub-panel. The chevron will:\n\t// * point right if this action item is in a drop down menu.\n\t// * point down and be regular size if this action item is displayed with\n\t// text in the toolbar and the menu isn't displayed.\n\t// * point up and be regular size if this action item is displayed with\n\t// text in the toolbar and the menu is displayed.\n\t// * point down and be a mini-chevron if this action item is displayed without\n\t// text in the toolbar and the menu isn't displayed.\n\t// * point up and be a mini-chevron if this action item is displayed without\n\t// text in the toolbar and the menu is displayed.\n\tgenerateChevronDiv(actionObj) {\n\t\tif (actionObj.subMenu || actionObj.subPanel) {\n\t\t\tif (this.props.isInMenu) {\n\t\t\t\treturn <div className={\"toolbar-right-chevron\"}><ChevronRight16 /></div>;\n\t\t\t}\n\t\t\tif (actionObj.incLabelWithIcon === \"before\" ||\n\t\t\t\t\tactionObj.incLabelWithIcon === \"after\") {\n\t\t\t\tconst chev = this.props.subAreaDisplayed ? (<ChevronUp16 />) : (<ChevronDown16 />);\n\t\t\t\treturn (<div className={\"toolbar-up-down-chevron\"}>{chev}</div>);\n\t\t\t}\n\t\t\tif (actionObj.purpose === \"dual\") {\n\t\t\t\tconst chevMini = this.props.subAreaDisplayed ? (<ChevronUp16 />) : (<ChevronDown16 />);\n\t\t\t\treturn (<div className={\"toolbar-up-down-chevron-mini\"} onClick={this.miniChevronClicked.bind(this)}>{chevMini}</div>);\n\t\t\t}\n\t\t\tconst path = this.props.size === \"sm\" ? \"M 29 29 L 29 23 23 29 Z\" : \"M 37 37 L 37 30 30 37 Z\";\n\t\t\treturn (\n\t\t\t\t<svg className=\"toolbar-tick-svg\">\n\t\t\t\t\t<path d={path} className=\"toolbar-tick-mark\" />\n\t\t\t\t</svg>\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n\n\tminiChevronClicked(evt) {\n\t\tthis.props.actionClickHandler(evt, true);\n\t\tevt.stopPropagation();\n\t}\n\n\t// Creates a <div> containing the JSX in the actionObj.jsx field, wrapped in a tooltip\n\t// <div>, for display as an action item in the toolbar. The jsx field can be just\n\t// regular JSX OR a function that returns JSX. If the application has provided a\n\t// function we call it, passing in the tabIndex that the component in the JSX should\n\t// use, based on whether it is focused or not.\n\tgenerateJsxItem(actionObj) {\n\t\tlet content = null;\n\t\tif (typeof actionObj.jsx === \"function\") {\n\t\t\tconst tabIndex = this.props.buttonFocusAction === actionObj.action ? 0 : -1;\n\t\t\tcontent = actionObj.jsx(tabIndex);\n\t\t} else {\n\t\t\tcontent = actionObj.jsx;\n\t\t}\n\t\tconst jsx = this.wrapInTooltip(content);\n\t\tconst div = (<div ref={this.buttonRef}>{jsx}</div>);\n\n\t\treturn div;\n\t}\n\n\n\twrapInTooltip(content) {\n\t\tif (!this.props.isInMenu && (this.showLabelAsTip(this.props.actionObj) || this.props.actionObj.tooltip)) {\n\t\t\tconst tip = this.props.actionObj.tooltip ? this.props.actionObj.tooltip : this.props.actionObj.label;\n\t\t\tconst tooltipId = this.props.actionName + \"-\" + this.props.instanceId + \"-tooltip\";\n\t\t\tconst enableTooltip = this.props.actionObj.enable || this.props.actionObj.jsx; // JSX 'tools' don't have enable attr so always display a tooltip for them.\n\t\t\tconst direction = this.props.tooltipDirection ? this.props.tooltipDirection : \"bottom\";\n\n\t\t\treturn (\n\t\t\t\t<Tooltip id={tooltipId} tip={tip} disable={!enableTooltip} className=\"icon-tooltip\" direction={direction}>\n\t\t\t\t\t{content}\n\t\t\t\t</Tooltip>\n\t\t\t);\n\t\t}\n\t\treturn content;\n\t}\n\n\t// Returns true if the label should be shown as a tooltip or false if not.\n\t// We do not show the label as a tooltip if it is already shown in the\n\t// toolbar next to the icon (i.e. incLabelWithIcon is set to something).\n\tshowLabelAsTip(actionObj) {\n\t\tif (actionObj.label) {\n\t\t\tif (actionObj.incLabelWithIcon === \"before\" ||\n\t\t\t\t\tactionObj.incLabelWithIcon === \"after\") {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\trender() {\n\t\tconst actionObj = this.props.actionObj;\n\n\t\tconst divContent = actionObj.jsx\n\t\t\t? this.generateJsxItem(actionObj)\n\t\t\t: this.generateRegularItem(actionObj);\n\n\t\treturn divContent;\n\t}\n}\n\nToolbarButtonItem.propTypes = {\n\tactionObj: PropTypes.shape({\n\t\taction: PropTypes.string.isRequired,\n\t\tlabel: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object\n\t\t]),\n\t\tincLabelWithIcon: PropTypes.oneOf([\"no\", \"before\", \"after\"]),\n\t\tpurpose: PropTypes.oneOf([\"single\", \"dual\"]),\n\t\tenable: PropTypes.bool,\n\t\ticonEnabled: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object\n\t\t]),\n\t\ticonDisabled: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object\n\t\t]),\n\t\tclassName: PropTypes.string,\n\t\ttextContent: PropTypes.string,\n\t\tisSelected: PropTypes.bool,\n\t\tkind: PropTypes.string,\n\t\tcloseSubAreaOnClick: PropTypes.bool,\n\t\tsubMenu: PropTypes.array,\n\t\tsubPanel: PropTypes.any,\n\t\tsubPanelData: PropTypes.object,\n\t\tjsx: PropTypes.oneOfType([\n\t\t\tPropTypes.object,\n\t\t\tPropTypes.func\n\t\t]),\n\t\ttooltip: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object,\n\t\t\tPropTypes.func\n\t\t])\n\t}),\n\tactionName: PropTypes.string.isRequired,\n\ttooltipDirection: PropTypes.oneOf([\"top\", \"bottom\"]),\n\tinstanceId: PropTypes.number.isRequired,\n\tisInMenu: PropTypes.bool,\n\tsubAreaDisplayed: PropTypes.bool,\n\tactionClickHandler: PropTypes.func,\n\tbuttonFocusAction: PropTypes.string,\n\tisFocusInToolbar: PropTypes.bool,\n\tsize: PropTypes.oneOf([\"md\", \"sm\"])\n};\n\nexport default ToolbarButtonItem;\n","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Crect%20x%3D%221.5%22%20y%3D%222%22%20width%3D%2213%22%20height%3D%221%22%2F%3E%3Crect%20x%3D%221.5%22%20y%3D%2213%22%20width%3D%2213%22%20height%3D%221%22%2F%3E%3Cpath%20d%3D%22M7%2C10.5H2a.47.47%2C0%2C0%2C1-.5-.5V6A.47.47%2C0%2C0%2C1%2C2%2C5.5H7a.47.47%2C0%2C0%2C1%2C.5.5v4A.47.47%2C0%2C0%2C1%2C7%2C10.5Zm-4.5-1h4v-3h-4Z%22%2F%3E%3Cpath%20d%3D%22M14%2C10.5H9a.47.47%2C0%2C0%2C1-.5-.5V6A.47.47%2C0%2C0%2C1%2C9%2C5.5h5a.47.47%2C0%2C0%2C1%2C.5.5v4A.47.47%2C0%2C0%2C1%2C14%2C10.5Zm-4.5-1h4v-3h-4Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2016%2016%22%3E%3Crect%20x%3D%222%22%20y%3D%221.5%22%20width%3D%221%22%20height%3D%2213%22%2F%3E%3Crect%20x%3D%2213%22%20y%3D%221.5%22%20width%3D%221%22%20height%3D%2213%22%2F%3E%3Cpath%20d%3D%22M10.5%2C7.5h-5A.47.47%2C0%2C0%2C1%2C5%2C7V3a.47.47%2C0%2C0%2C1%2C.5-.5h5A.47.47%2C0%2C0%2C1%2C11%2C3V7A.47.47%2C0%2C0%2C1%2C10.5%2C7.5ZM6%2C6.5h4v-3H6Z%22%2F%3E%3Cpath%20d%3D%22M10.5%2C13.5h-5A.47.47%2C0%2C0%2C1%2C5%2C13V9a.47.47%2C0%2C0%2C1%2C.5-.5h5A.47.47%2C0%2C0%2C1%2C11%2C9v4A.47.47%2C0%2C0%2C1%2C10.5%2C13.5ZM6%2C12.5h4v-3H6Z%22%2F%3E%3C%2Fsvg%3E\"","export default \"data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%200%2032%2032%22%20fill%3D%22currentColor%22%3E%20%3Cpath%20d%3D%22M27%2C12V27H5V5H20V3H5A2%2C2%2C0%2C0%2C0%2C3%2C5V27a2%2C2%2C0%2C0%2C0%2C2%2C2H27a2%2C2%2C0%2C0%2C0%2C2-2V12Z%22%2F%3E%20%3Ccircle%20class%3D%22dot%22%20cx%3D%2226.5%22%20cy%3D%225.5%22%20r%3D%223.5%22%2F%3E%3C%2Fsvg%3E\"","/*\n * Copyright 2024 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n*/\n\n// These utility functions are used by both toolbar-sub-menu.jsx AND\n// toolbar-sub-panel.jsx to position the sub-area (sub-menu or sub-panel)\n// relative to the parent actionItemRect, passed in, in the direction\n// indicated by the expandDirection parameter and constrained within\n// the <div> specified by the containingDivId parameter.\n\n\n// Adjust the position of the sub-area to make sure it doesn't extend\n// outside the containing divs boundary. We need to do this after the subarea\n// has been mounted so we can query its size and position.\nexport function adjustSubAreaPosition(areaRef, containingDivId, expandDirection, actionItemRect) {\n\tif (!areaRef || !actionItemRect || !containingDivId) {\n\t\treturn;\n\t}\n\tconst containingDiv = document.getElementById(containingDivId);\n\tconst containingDivRect = containingDiv\n\t\t? containingDiv.getBoundingClientRect()\n\t\t: { top: -1000, bottom: 1000, left: -1000, right: 1000 }; // To enable Jest tests.\n\n\tconst thisAreaRect = areaRef.getBoundingClientRect();\n\n\tconst outsideBottom = thisAreaRect.bottom - containingDivRect.bottom;\n\tconst outsideRight = thisAreaRect.right - containingDivRect.right;\n\n\tif (expandDirection === \"vertical\") {\n\t\tif (outsideBottom > 0) {\n\t\t\tconst topGap = actionItemRect.top - containingDivRect.top;\n\t\t\tconst newTop = (topGap > thisAreaRect.height)\n\t\t\t\t? actionItemRect.top - thisAreaRect.height\n\t\t\t\t: actionItemRect.bottom - outsideBottom;\n\n\t\t\tareaRef.style.top = newTop + \"px\";\n\t\t}\n\n\t\tif (outsideRight > 0) {\n\t\t\tconst newLeft = actionItemRect.left - outsideRight;\n\t\t\tareaRef.style.left = newLeft + \"px\";\n\t\t}\n\n\t} else {\n\t\tif (outsideBottom > 0) {\n\t\t\tconst newTop = thisAreaRect.top - outsideBottom - 2;\n\t\t\tareaRef.style.top = newTop + \"px\";\n\t\t}\n\n\t\tif (outsideRight > 0) {\n\t\t\tconst newLeft = actionItemRect.left - thisAreaRect.width;\n\t\t\tareaRef.style.left = newLeft + \"px\";\n\t\t}\n\t}\n}\n\nexport function generateSubAreaStyle(expandDirection, actionItemRect) {\n\tif (!actionItemRect) {\n\t\treturn null;\n\t}\n\n\tif (expandDirection === \"vertical\") {\n\t\treturn {\n\t\t\ttop: actionItemRect.bottom + 1,\n\t\t\tleft: actionItemRect.left\n\t\t};\n\t}\n\treturn {\n\t\ttop: actionItemRect.top - 1,\n\t\tleft: actionItemRect.left + actionItemRect.width\n\t};\n}\n\n\n","/*\n * Copyright 2024 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n*/\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { adjustSubAreaPosition, generateSubAreaStyle } from \"./toolbar-sub-utils.js\";\n\nconst ESC_KEY = 27;\nconst LEFT_ARROW_KEY = 37;\nconst RIGHT_ARROW_KEY = 39;\n\n\nclass ToolbarSubPanel extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.onKeyDown = this.onKeyDown.bind(this);\n\t\tthis.closeSubPanel = this.closeSubPanel.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tadjustSubAreaPosition(this.areaRef,\n\t\t\tthis.props.containingDivId, this.props.expandDirection, this.props.actionItemRect);\n\t}\n\n\tcomponentDidUpdate() {\n\t\tadjustSubAreaPosition(this.areaRef,\n\t\t\tthis.props.containingDivId, this.props.expandDirection, this.props.actionItemRect);\n\t}\n\n\tonKeyDown(evt) {\n\t\tif (evt.keyCode === ESC_KEY) {\n\t\t\tthis.props.closeSubArea();\n\t\t\tevt.stopPropagation();\n\n\t\t} else if (evt.keyCode === LEFT_ARROW_KEY || evt.keyCode === RIGHT_ARROW_KEY) {\n\t\t\tevt.stopPropagation();\n\t\t}\n\t}\n\n\t// If the user clicks the panel background, by default focus would go\n\t// through to the toolbar and focus would be lost from this sub-panel.\n\t// This method prevents any focus event going through to the toolbar.\n\tonFocus(evt) {\n\t\tevt.stopPropagation();\n\t\tevt.preventDefault();\n\t}\n\n\tcloseSubPanel(evt) {\n\t\tthis.props.closeSubArea(); // Don't pass a paremeter otherwise it will check closeSubAreaOnClick.\n\t}\n\n\trender() {\n\t\tconst style = generateSubAreaStyle(this.props.expandDirection, this.props.actionItemRect);\n\n\t\tif (this.props.subPanel) {\n\t\t\treturn (\n\t\t\t\t<div ref={(ref) => (this.areaRef = ref)} style={style} className={\"toolbar-popover-list subpanel\"} tabIndex={-1}\n\t\t\t\t\tonKeyDown={this.onKeyDown} onFocus={this.onFocus}\n\t\t\t\t>\n\t\t\t\t\t<this.props.subPanel closeSubPanel={this.closeSubPanel} subPanelData={this.props.subPanelData} />\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\treturn null;\n\t}\n}\n\nToolbarSubPanel.propTypes = {\n\tsubPanel: PropTypes.any.isRequired,\n\tsubPanelData: PropTypes.object,\n\tcloseSubArea: PropTypes.func,\n\tsetToolbarFocusAction: PropTypes.func,\n\tactionItemRect: PropTypes.object,\n\texpandDirection: PropTypes.string.isRequired,\n\tcontainingDivId: PropTypes.string\n};\n\nexport default ToolbarSubPanel;\n","/*\n * Copyright 2017-2024 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ToolbarButtonItem from \"./toolbar-button-item.jsx\";\n\nimport classNames from \"classnames\";\nimport ToolbarSubMenu from \"./toolbar-sub-menu.jsx\";\nimport ToolbarSubPanel from \"./toolbar-sub-panel.jsx\";\n\nclass ToolbarSubMenuItem extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tsubAreaDisplayed: false\n\t\t};\n\n\t\tthis.divRef = React.createRef();\n\n\t\tthis.actionClickHandler = this.actionClickHandler.bind(this);\n\t\tthis.onMouseEnter = this.onMouseEnter.bind(this);\n\t\tthis.onMouseLeave = this.onMouseLeave.bind(this);\n\t\tthis.openSubArea = this.openSubArea.bind(this);\n\t\tthis.closeSubArea = this.closeSubArea.bind(this);\n\t\tthis.clickOutside = this.clickOutside.bind(this);\n\t}\n\n\t// We must remove the eventListener in case this class is unmounted due\n\t// to the toolbar getting redrawn.\n\tcomponentWillUnmount() {\n\t\tdocument.removeEventListener(\"click\", this.clickOutside, false);\n\t}\n\n\tonMouseEnter(evt) {\n\t\tif (this.props.actionObj.subMenu || this.props.actionObj.subPanel) {\n\t\t\tthis.openSubArea();\n\t\t}\n\t}\n\n\tonMouseLeave(evt) {\n\t\tif (this.props.actionObj.subMenu || this.props.actionObj.subPanel) {\n\t\t\tthis.closeSubArea();\n\t\t}\n\t}\n\n\tclickOutside(evt) {\n\t\tif (this.state.subAreaDisplayed) {\n\t\t\tconst items = document.getElementsByClassName(this.generateActionName());\n\t\t\tconst isOver = items?.length > 0 ? items[0].contains(evt.target) : false;\n\n\t\t\tif (!isOver && !this.props.actionObj.leaveSubAreaOpenOnClickOutside) {\n\t\t\t\tthis.closeSubArea();\n\t\t\t}\n\t\t}\n\t}\n\n\topenSubArea() {\n\t\tthis.setState({ subAreaDisplayed: true });\n\t}\n\n\tcloseSubArea(checkCloseSubAreaOnClick) {\n\t\tif (!checkCloseSubAreaOnClick || this.props.actionObj.closeSubAreaOnClick) {\n\t\t\tthis.setState({ subAreaDisplayed: false });\n\t\t}\n\t}\n\n\tactionClickHandler(evt) {\n\t\tif (this.props.actionObj.subMenu || this.props.actionObj.subPanel) {\n\t\t\tif (this.state.subAreaDisplayed) {\n\t\t\t\tdocument.removeEventListener(\"click\", this.clickOutside, false);\n\t\t\t\tthis.closeSubArea();\n\t\t\t} else {\n\t\t\t\tdocument.addEventListener(\"click\", this.clickOutside, false);\n\t\t\t\tthis.openSubArea();\n\t\t\t}\n\n\t\t} else {\n\t\t\tevt.stopPropagation();\n\t\t\tif (this.props.isInCascadeMenu) {\n\t\t\t\tthis.props.closeParentSubArea(true); // true = close only if closeSubAreaOnClick is checked\n\t\t\t\tthis.props.setSubMenuFocus();\n\n\t\t\t} else if (this.props.isInOverflowMenu) {\n\t\t\t\tthis.props.setSubMenuFocus(this.props.actionObj.action);\n\n\t\t\t} else {\n\t\t\t\tthis.props.closeParentSubArea(true); // true = close only if closeSubAreaOnClick is checked\n\t\t\t\tthis.props.setToolbarFocusAction(); // Resets the toolbar focus action\n\t\t\t}\n\t\t\tthis.props.toolbarActionHandler(this.props.actionObj.action, evt);\n\t\t}\n\t}\n\n\tgenerateActionName() {\n\t\treturn this.props.actionObj.action + \"-action\";\n\t}\n\n\t// Returns a sub-area for a cascading menu item. The sub-area can be either a\n\t// sub-panel which is a div contaiing whatever the caller passes in within the\n\t// supPanel field OR a sub-menu which is a list of options which is created\n\t// from the array of items the caller passes in the subMenu field.\n\tgenerateSubArea() {\n\t\tconst actionItemRect = this.divRef.current.getBoundingClientRect();\n\n\t\tif (this.props.actionObj.subPanel) {\n\t\t\treturn (\n\t\t\t\t<ToolbarSubPanel\n\t\t\t\t\tsubPanel={this.props.actionObj.subPanel}\n\t\t\t\t\tsubPanelData={this.props.actionObj.subPanelData}\n\t\t\t\t\tcloseSubArea={this.closeSubArea}\n\t\t\t\t\tactionItemRect={actionItemRect}\n\t\t\t\t\texpandDirection={\"horizontal\"}\n\t\t\t\t\tcontainingDivId={this.props.containingDivId}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<ToolbarSubMenu\n\t\t\t\tsubMenuActions={this.props.actionObj.subMenu}\n\t\t\t\tinstanceId={this.props.instanceId}\n\t\t\t\ttoolbarActionHandler={this.props.toolbarActionHandler}\n\t\t\t\tsetSubMenuFocus={this.props.setSubMenuFocus}\n\t\t\t\tcloseSubArea={this.closeSubArea}\n\t\t\t\tactionItemRect={actionItemRect}\n\t\t\t\texpandDirection={\"horizontal\"}\n\t\t\t\tcontainingDivId={this.props.containingDivId}\n\t\t\t\tparentSelector={this.generateSelector()}\n\t\t\t\tisCascadeMenu\n\t\t\t\tsize={this.props.size}\n\t\t\t/>\n\t\t);\n\t}\n\n\tgenerateSelector() {\n\t\treturn \".toolbar-sub-menu-item\";\n\t}\n\n\trender() {\n\t\tconst actionObj = this.props.actionObj;\n\t\tconst actionName = this.generateActionName();\n\t\tconst kindAsClass = actionObj.kind ? actionObj.kind : \"default\";\n\n\t\tconst itemClassName = classNames(\n\t\t\t{ \"toolbar-sub-menu-item\": true,\n\t\t\t\t\"toolbar-sub-menu-jsx-item\": actionObj.jsx,\n\t\t\t\t\"toolbar-item-selected\": actionObj.isSelected },\n\t\t\tkindAsClass,\n\t\t\tactionName);\n\n\t\tconst subArea = this.state.subAreaDisplayed ? this.generateSubArea() : null;\n\n\t\treturn (\n\t\t\t<div ref={this.divRef} className={itemClassName} data-toolbar-action={actionObj.action}\n\t\t\t\tonMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave} onKeyDown={this.onKeyDown}\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<ToolbarButtonItem\n\t\t\t\t\t\tactionObj={actionObj}\n\t\t\t\t\t\tactionName={this.generateActionName()}\n\t\t\t\t\t\tinstanceId={this.props.instanceId}\n\t\t\t\t\t\tisInMenu\n\t\t\t\t\t\tsubAreaDisplayed={this.state.subAreaDisplayed}\n\t\t\t\t\t\tactionClickHandler={this.actionClickHandler}\n\t\t\t\t\t\tbuttonFocusAction={this.props.subMenuFocusAction}\n\t\t\t\t\t\tisFocusInToolbar // Focus must be in toolbar for this sub-menu item to appear\n\t\t\t\t\t\tsize={this.props.size}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{subArea}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nToolbarSubMenuItem.propTypes = {\n\tactionObj: PropTypes.shape({\n\t\taction: PropTypes.string.isRequired,\n\t\tlabel: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object\n\t\t]),\n\t\tincLabelWithIcon: PropTypes.oneOf([\"no\", \"before\", \"after\"]),\n\t\tenable: PropTypes.bool,\n\t\ticonEnabled: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object\n\t\t]),\n\t\ticonDisabled: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object\n\t\t]),\n\t\tclassName: PropTypes.string,\n\t\ttextContent: PropTypes.string,\n\t\tisSelected: PropTypes.bool,\n\t\tkind: PropTypes.string,\n\t\tcloseSubAreaOnClick: PropTypes.bool,\n\t\tleaveSubAreaOpenOnClickOutside: PropTypes.bool,\n\t\tsubMenu: PropTypes.array,\n\t\tsubPanel: PropTypes.any,\n\t\tsubPanelData: PropTypes.object,\n\t\tjsx: PropTypes.object,\n\t\ttooltip: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object,\n\t\t\tPropTypes.func\n\t\t])\n\t}),\n\ttoolbarActionHandler: PropTypes.func.isRequired,\n\tinstanceId: PropTypes.number.isRequired,\n\tcontainingDivId: PropTypes.string,\n\tcloseParentSubArea: PropTypes.func,\n\tsubMenuFocusAction: PropTypes.string,\n\tsetToolbarFocusAction: PropTypes.func,\n\tsetSubMenuFocus: PropTypes.func,\n\tisInOverflowMenu: PropTypes.bool,\n\tisInCascadeMenu: PropTypes.bool,\n\tsize: PropTypes.oneOf([\"md\", \"sm\"])\n};\n\nexport default ToolbarSubMenuItem;\n","/*\n * Copyright 2017-2024 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nclass ToolbarDividerItem extends React.Component {\n\trender() {\n\t\tconst dividerClassName = this.props.isInMenu ? \"toolbar-divider-overflow\" : \"toolbar-divider\";\n\n\t\t// Add a space as content. When using display: inline-block the div needs\n\t\t// some content so it is displayed inline with the other elements of the\n\t\t// toolbar. With no content it is displayed above (!) the other elements.\n\t\treturn (\n\t\t\t<div className={dividerClassName} tabIndex={-1} aria-hidden >&nbsp;</div>\n\t\t);\n\t}\n}\n\nToolbarDividerItem.propTypes = {\n\tisInMenu: PropTypes.bool\n};\n\nexport default ToolbarDividerItem;\n","/*\n * Copyright 2024 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n*/\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport ToolbarSubMenuItem from \"./toolbar-sub-menu-item.jsx\";\nimport ToolbarDividerItem from \"./toolbar-divider-item\";\n\nimport { adjustSubAreaPosition, generateSubAreaStyle } from \"./toolbar-sub-utils.js\";\n\nconst ESC_KEY = 27;\nconst LEFT_ARROW_KEY = 37;\nconst UP_ARROW_KEY = 38;\nconst RIGHT_ARROW_KEY = 39;\nconst DOWN_ARROW_KEY = 40;\n\nclass ToolbarSubMenu extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tfocusAction: \"subarea\"\n\t\t};\n\n\t\tthis.onKeyDown = this.onKeyDown.bind(this);\n\t\tthis.setFocusAction = this.setFocusAction.bind(this);\n\t\tthis.setSubMenuFocus = this.setSubMenuFocus.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tif (this.props.containingDivId && this.props.subMenuActions.length > 0) {\n\t\t\tadjustSubAreaPosition(this.areaRef,\n\t\t\t\tthis.props.containingDivId, this.props.expandDirection, this.props.actionItemRect);\n\t\t}\n\n\t\tif (this.state.focusAction === \"subarea\") {\n\t\t\tthis.setFocusOnFirstItem();\n\t\t}\n\t}\n\n\tcomponentDidUpdate() {\n\t\tif (this.state.focusAction !== \"subarea\") {\n\t\t\tconst actionObj = this.props.subMenuActions.find((sma) => sma.action === this.state.focusAction);\n\t\t\tif (!actionObj?.enable) {\n\t\t\t\tconst actionToSet = this.getClosestEnabledAction(this.state.focusAction);\n\t\t\t\tif (actionToSet !== null) {\n\t\t\t\t\tthis.setFocusAction(actionToSet);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tonKeyDown(evt) {\n\t\tif (evt.keyCode === ESC_KEY) {\n\t\t\tthis.props.closeSubArea();\n\t\t\tevt.stopPropagation(); // Stop propagation in a case we are a cascade menu\n\n\t\t} else if (evt.keyCode === UP_ARROW_KEY) {\n\t\t\tthis.setFocusOnPreviousItem();\n\t\t\tevt.stopPropagation(); // Stop propagation in a case we are a cascade menu\n\n\t\t} else if (evt.keyCode === DOWN_ARROW_KEY) {\n\t\t\tthis.setFocusOnNextItem();\n\t\t\tevt.stopPropagation(); // Stop propagation in a case we are a cascade menu\n\n\t\t} else if (evt.keyCode === LEFT_ARROW_KEY) {\n\t\t\tevt.stopPropagation(); // Stop propagation in a case we are a cascade menu\n\n\t\t} else if (evt.keyCode === RIGHT_ARROW_KEY) {\n\t\t\tevt.stopPropagation(); // Stop propagation in a case we are a cascade menu\n\t\t}\n\t}\n\n\tsetFocusOnFirstItem() {\n\t\tconst focusableActions = this.getFocusableActions();\n\t\tif (focusableActions.length > 0) {\n\t\t\tthis.setFocusAction(focusableActions[0].action);\n\t\t}\n\t}\n\n\tsetFocusOnPreviousItem() {\n\t\tconst focusableActions = this.getFocusableActions();\n\t\tconst previousFocusAction = this.getPreviousFocusAction(focusableActions);\n\t\tif (previousFocusAction) {\n\t\t\tthis.setFocusAction(previousFocusAction.action);\n\t\t}\n\t}\n\n\tsetFocusOnNextItem() {\n\t\tconst focusableActions = this.getFocusableActions();\n\t\tconst nextFocusAction = this.getNextFocusAction(focusableActions);\n\t\tif (nextFocusAction) {\n\t\t\tthis.setFocusAction(nextFocusAction.action);\n\t\t}\n\t}\n\n\tsetFocusAction(focusAction) {\n\t\tthis.setState({ focusAction });\n\t}\n\n\tsetSubMenuFocus(action) {\n\t\tconst actionToSet = action || this.state.focusAction;\n\t\tthis.setFocusAction(actionToSet);\n\t}\n\n\tgetClosestEnabledAction(action) {\n\t\tconst index = this.props.subMenuActions.findIndex((sma) => sma.action === action);\n\t\tlet newAction = null;\n\t\tlet indexUp = index + 1;\n\t\tlet indexDown = index - 1;\n\n\t\twhile ((indexDown > -1 || indexUp < this.props.subMenuActions.length) && newAction === null) {\n\t\t\tif (indexDown > -1 && this.props.subMenuActions[indexDown].enable) {\n\t\t\t\tnewAction = this.props.subMenuActions[indexDown].action;\n\t\t\t} else {\n\t\t\t\tindexDown--;\n\t\t\t}\n\t\t\tif (indexUp < this.props.subMenuActions.length && this.props.subMenuActions[indexUp].enable) {\n\t\t\t\tnewAction = this.props.subMenuActions[indexUp].action;\n\t\t\t} else {\n\t\t\t\tindexUp++;\n\t\t\t}\n\t\t}\n\t\treturn newAction;\n\t}\n\n\tgetFocusableActions() {\n\t\tconst focusableActions = [];\n\n\t\tfor (let i = 0; i < this.props.subMenuActions.length; i++) {\n\t\t\tif (this.props.subMenuActions[i].enable || this.props.subMenuActions[i].jsx) {\n\t\t\t\tfocusableActions.push(this.props.subMenuActions[i]);\n\t\t\t}\n\t\t}\n\n\t\treturn focusableActions;\n\t}\n\n\tgetPreviousFocusAction(focuableActions) {\n\t\tconst index = focuableActions.findIndex((fa) => fa.action === this.state.focusAction);\n\t\tif (index > 0) {\n\t\t\treturn focuableActions[index - 1];\n\t\t}\n\t\treturn focuableActions[focuableActions.length - 1];\n\t}\n\n\tgetNextFocusAction(focuableActions) {\n\t\tconst index = focuableActions.findIndex((fa) => fa.action === this.state.focusAction);\n\t\tif (index < focuableActions.length - 1) {\n\t\t\treturn focuableActions[index + 1];\n\t\t}\n\t\treturn focuableActions[0];\n\t}\n\n\t// Generates an array of JSX objects for a sub-menu defined by the\n\t// prop subMenuActions parameter array.\n\tgenerateSubMenuItems() {\n\t\tconst newItems = [];\n\n\t\tfor (let i = 0; i < this.props.subMenuActions.length; i++) {\n\t\t\tconst actionObj = this.props.subMenuActions[i];\n\t\t\tif (actionObj) {\n\t\t\t\tnewItems.push(this.generateSubMenuItem(actionObj, i));\n\t\t\t}\n\t\t}\n\t\treturn newItems;\n\t}\n\n\t// Returns JSX for a toolbar item based on the actionObj passed in.\n\tgenerateSubMenuItem(actionObj, i) {\n\t\tlet jsx = null;\n\n\t\tif (actionObj) {\n\t\t\tif (actionObj.divider) {\n\t\t\t\tjsx = (\n\t\t\t\t\t<ToolbarDividerItem\n\t\t\t\t\t\tkey={\"toolbar-item-key-\" + i}\n\t\t\t\t\t\tisInMenu\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tjsx = (\n\t\t\t\t\t<ToolbarSubMenuItem\n\t\t\t\t\t\tkey={\"toolbar-item-key-\" + i}\n\t\t\t\t\t\tactionObj={actionObj}\n\t\t\t\t\t\ttoolbarActionHandler={this.props.toolbarActionHandler}\n\t\t\t\t\t\tcloseParentSubArea={this.props.closeSubArea}\n\t\t\t\t\t\tinstanceId={this.props.instanceId}\n\t\t\t\t\t\tcontainingDivId={this.props.containingDivId}\n\t\t\t\t\t\tsubMenuFocusAction={this.state.focusAction}\n\t\t\t\t\t\tsetToolbarFocusAction={this.props.setToolbarFocusAction}\n\t\t\t\t\t\tsetSubMenuFocus={this.props.setSubMenuFocus ? this.props.setSubMenuFocus : this.setSubMenuFocus}\n\t\t\t\t\t\tsize={this.props.size}\n\t\t\t\t\t\tisInOverflowMenu={this.props.isOverflowMenu}\n\t\t\t\t\t\tisInCascadeMenu={this.props.isCascadeMenu}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn jsx;\n\t}\n\n\trender() {\n\t\tif (this.props.subMenuActions.length > 0) {\n\t\t\tconst style = this.props.isCascadeMenu\n\t\t\t\t? generateSubAreaStyle(this.props.expandDirection, this.props.actionItemRect)\n\t\t\t\t: null;\n\n\t\t\tthis.subMenuItems = this.generateSubMenuItems();\n\n\t\t\treturn (\n\t\t\t\t<div ref={(ref) => (this.areaRef = ref)} style={style} className={\"toolbar-popover-list submenu\"}\n\t\t\t\t\ttabIndex={-1} onKeyDown={this.onKeyDown}\n\t\t\t\t>\n\t\t\t\t\t{this.subMenuItems}\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\t\treturn null;\n\t}\n}\n\nToolbarSubMenu.propTypes = {\n\tsubMenuActions: PropTypes.array.isRequired,\n\tinstanceId: PropTypes.number.isRequired,\n\ttoolbarActionHandler: PropTypes.func,\n\tcloseSubArea: PropTypes.func,\n\tsetToolbarFocusAction: PropTypes.func,\n\tsetSubMenuFocus: PropTypes.func,\n\tactionItemRect: PropTypes.object,\n\texpandDirection: PropTypes.string.isRequired,\n\tcontainingDivId: PropTypes.string,\n\tparentSelector: PropTypes.string,\n\tisOverflowMenu: PropTypes.bool,\n\tisCascadeMenu: PropTypes.bool,\n\tsize: PropTypes.oneOf([\"md\", \"sm\"])\n};\n\nexport default ToolbarSubMenu;\n","/*\n * Copyright 2017-2024 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport ToolbarButtonItem from \"./toolbar-button-item.jsx\";\n\nimport classNames from \"classnames\";\nimport ToolbarSubMenu from \"./toolbar-sub-menu.jsx\";\nimport ToolbarSubPanel from \"./toolbar-sub-panel.jsx\";\n\nconst ESC_KEY = 27;\nconst DOWN_ARROW_KEY = 40;\nconst TOOLBAR_ICON_WIDTH = 40;\n\nclass ToolbarActionItem extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tsubAreaDisplayed: false\n\t\t};\n\n\t\tthis.divRef = React.createRef();\n\n\t\tthis.actionClickHandler = this.actionClickHandler.bind(this);\n\t\tthis.onKeyDown = this.onKeyDown.bind(this);\n\t\tthis.openSubArea = this.openSubArea.bind(this);\n\t\tthis.closeSubArea = this.closeSubArea.bind(this);\n\t\tthis.clickOutside = this.clickOutside.bind(this);\n\t}\n\n\t// We must remove the eventListener in case this class is unmounted due\n\t// to the toolbar getting redrawn.\n\tcomponentWillUnmount() {\n\t\tdocument.removeEventListener(\"click\", this.clickOutside, false);\n\t}\n\n\tonKeyDown(evt) {\n\t\tif (evt.keyCode === ESC_KEY) {\n\t\t\tthis.closeSubArea();\n\n\t\t} else if (evt.keyCode === DOWN_ARROW_KEY) {\n\t\t\tif (this.hasSubArea()) {\n\t\t\t\tthis.openSubArea();\n\t\t\t}\n\t\t}\n\t\t// Left and Right arrow clicks are caught in the\n\t\t// toolbar.jsx onKeyDown method.\n\t}\n\n\t// Called by toolbar.jsx\n\tgetBoundingRect() {\n\t\treturn this.divRef.current.getBoundingClientRect();\n\t}\n\n\t// Called by toolbar.jsx\n\tgetAction() {\n\t\treturn this.props.actionObj.action;\n\t}\n\n\t// Called by toolbar.jsx\n\tisEnabled() {\n\t\treturn this.props.actionObj.enable || this.props.actionObj.jsx;\n\t}\n\n\t// Called by toolbar.jsx and internally\n\tisSubAreaDisplayed() {\n\t\tif (this.props.actionObj.setExtIsSubAreaDisplayed &&\n\t\t\ttypeof this.props.actionObj.extIsSubAreaDisplayed !== \"undefined\") {\n\t\t\treturn this.props.actionObj.extIsSubAreaDisplayed;\n\t\t}\n\t\treturn this.state.subAreaDisplayed;\n\t}\n\n\tclickOutside(evt) {\n\t\tif (this.isSubAreaDisplayed()) {\n\t\t\tconst items = document.getElementsByClassName(this.generateActionName());\n\t\t\tconst isOver = items && items.length > 0 ? items[0].contains(evt.target) : false;\n\n\t\t\tif (!isOver && !this.props.actionObj.leaveSubAreaOpenOnClickOutside) {\n\t\t\t\tthis.closeSubArea();\n\t\t\t}\n\t\t}\n\t}\n\n\thasSubArea() {\n\t\treturn this.props.actionObj.subMenu || this.props.actionObj.subPanel;\n\t}\n\n\topenSubArea() {\n\t\t// If host app is controlling display of the sub-area call it to say\n\t\t// sub-area is closing.\n\t\tif (this.props.actionObj.setExtIsSubAreaDisplayed) {\n\t\t\tthis.props.actionObj.setExtIsSubAreaDisplayed(true);\n\t\t\treturn;\n\t\t}\n\t\tthis.setState({ subAreaDisplayed: true });\n\t}\n\n\tcloseSubArea(checkCloseSubAreaOnClick) {\n\t\tif (!checkCloseSubAreaOnClick || this.props.actionObj.closeSubAreaOnClick) {\n\t\t\t// If host app is controlling display of the sub-area call it to say\n\t\t\t// sub-area is closing.\n\t\t\tif (this.props.actionObj.setExtIsSubAreaDisplayed) {\n\t\t\t\tthis.props.actionObj.setExtIsSubAreaDisplayed(false);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.setState({ subAreaDisplayed: false });\n\t\t}\n\t}\n\n\tactionClickHandler(evt, chevronClicked) {\n\t\tif (this.hasSubArea() &&\n\t\t\t(this.props.actionObj.purpose !== \"dual\" || chevronClicked)) {\n\t\t\tif (this.isSubAreaDisplayed()) {\n\t\t\t\tdocument.removeEventListener(\"click\", this.clickOutside, false);\n\t\t\t\tthis.closeSubArea();\n\t\t\t\tthis.props.setToolbarFocusAction(this.props.actionObj.action);\n\n\t\t\t} else {\n\t\t\t\tdocument.addEventListener(\"click\", this.clickOutside, false);\n\t\t\t\tthis.props.closeAnyOpenSubArea();\n\t\t\t\tthis.props.setToolbarFocusAction(this.props.actionObj.action);\n\t\t\t\tthis.openSubArea();\n\t\t\t}\n\n\t\t} else {\n\t\t\tthis.closeSubArea();\n\t\t\tthis.props.toolbarActionHandler(this.props.actionObj.action, evt);\n\t\t\tthis.props.setToolbarFocusAction(this.props.actionObj.action);\n\t\t}\n\t}\n\n\tgenerateActionName() {\n\t\treturn this.props.actionObj.action + \"-action\";\n\t}\n\n\t// Returns a sub-area for a cascading menu item. The sub-area can be either a\n\t// sub-panel which is a div contaiing whatever the caller passes in within the\n\t// supPanel field OR a sub-menu which is a list of options which is created\n\t// from the array of items the caller passes in the subMenu field.\n\tgenerateSubArea() {\n\t\tlet actionItemRect = this.divRef.current ? this.divRef.current.getBoundingClientRect() : null;\n\t\tactionItemRect = (actionItemRect && this.props.actionObj.purpose === \"dual\")\n\t\t\t? this.adjustForDual(actionItemRect)\n\t\t\t: actionItemRect;\n\n\t\tif (this.props.actionObj.subPanel) {\n\t\t\treturn (\n\t\t\t\t<ToolbarSubPanel\n\t\t\t\t\tsubPanel={this.props.actionObj.subPanel}\n\t\t\t\t\tsubPanelData={this.props.actionObj.subPanelData}\n\t\t\t\t\tcloseSubArea={this.closeSubArea}\n\t\t\t\t\tsetToolbarFocusAction={this.props.setToolbarFocusAction}\n\t\t\t\t\tactionItemRect={actionItemRect}\n\t\t\t\t\texpandDirection={\"vertical\"}\n\t\t\t\t\tcontainingDivId={this.props.containingDivId}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\t\treturn (\n\t\t\t<ToolbarSubMenu\n\t\t\t\tsubMenuActions={this.props.actionObj.subMenu}\n\t\t\t\tinstanceId={this.props.instanceId}\n\t\t\t\ttoolbarActionHandler={this.props.toolbarActionHandler}\n\t\t\t\tcloseSubArea={this.closeSubArea}\n\t\t\t\tsetToolbarFocusAction={this.props.setToolbarFocusAction}\n\t\t\t\tactionItemRect={actionItemRect}\n\t\t\t\texpandDirection={\"vertical\"}\n\t\t\t\tcontainingDivId={this.props.containingDivId}\n\t\t\t\tparentSelector={this.generateSelector(this.props.actionObj)}\n\t\t\t\tisCascadeMenu={false}\n\t\t\t\tsize={this.props.size}\n\t\t\t/>\n\t\t);\n\t}\n\n\t// For a dual-purpose toolbar button, adjusts the rectangle dimensions so\n\t// the sub-panel is opened based on the location of the right chevron of\n\t// the dual button.\n\tadjustForDual(actionItemRect) {\n\t\treturn {\n\t\t\theight: actionItemRect.height,\n\t\t\twidth: actionItemRect.width,\n\t\t\ttop: actionItemRect.top,\n\t\t\tbottom: actionItemRect.bottom,\n\t\t\tleft: actionItemRect.left + TOOLBAR_ICON_WIDTH,\n\t\t\tright: actionItemRect.right + TOOLBAR_ICON_WIDTH,\n\t\t\tx: actionItemRect.x + TOOLBAR_ICON_WIDTH,\n\t\t\ty: actionItemRect.y\n\t\t};\n\t}\n\n\tgenerateSelector(actionObj) {\n\t\tif (actionObj.jsx) {\n\t\t\treturn \".toolbar-jsx-item\";\n\t\t}\n\t\treturn \".toolbar-item\";\n\t}\n\n\trender() {\n\t\tconst actionObj = this.props.actionObj;\n\t\tconst actionName = this.generateActionName();\n\t\tconst kindAsClass = actionObj.kind ? actionObj.kind : \"default\";\n\n\t\tconst itemClassName = classNames(\n\t\t\t{\n\t\t\t\t\"toolbar-item\": !actionObj.jsx,\n\t\t\t\t\"toolbar-jsx-item\": actionObj.jsx,\n\t\t\t\t\"toolbar-item-selected\": actionObj.isSelected\n\t\t\t},\n\t\t\tkindAsClass,\n\t\t\tactionName,\n\t\t\tthis.props.actionObj.className);\n\n\t\tconst subArea = this.isSubAreaDisplayed() ? this.generateSubArea() : null;\n\n\t\treturn (\n\t\t\t<div ref={this.divRef} className={itemClassName} data-toolbar-action={actionObj.action} data-toolbar-item\n\t\t\t\tonMouseEnter={this.onMouseEnter} onMouseLeave={this.onMouseLeave} onKeyDown={this.onKeyDown}\n\t\t\t>\n\t\t\t\t<div>\n\t\t\t\t\t<ToolbarButtonItem\n\t\t\t\t\t\tactionObj={actionObj}\n\t\t\t\t\t\tactionName={this.generateActionName()}\n\t\t\t\t\t\ttooltipDirection={this.props.tooltipDirection}\n\t\t\t\t\t\tinstanceId={this.props.instanceId}\n\t\t\t\t\t\tisInMenu={false}\n\t\t\t\t\t\tsubAreaDisplayed={this.isSubAreaDisplayed()}\n\t\t\t\t\t\tactionClickHandler={this.actionClickHandler}\n\t\t\t\t\t\tbuttonFocusAction={this.isSubAreaDisplayed() ? null : this.props.toolbarFocusAction}\n\t\t\t\t\t\tisFocusInToolbar={this.props.isFocusInToolbar}\n\t\t\t\t\t\tsize={this.props.size}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t{subArea}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nToolbarActionItem.propTypes = {\n\tactionObj: PropTypes.shape({\n\t\taction: PropTypes.string.isRequired,\n\t\tlabel: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object\n\t\t]),\n\t\tincLabelWithIcon: PropTypes.oneOf([\"no\", \"before\", \"after\"]),\n\t\tpurpose: PropTypes.oneOf([\"single\", \"dual\"]),\n\t\tenable: PropTypes.bool,\n\t\ticonEnabled: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object\n\t\t]),\n\t\ticonDisabled: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object\n\t\t]),\n\t\tclassName: PropTypes.string,\n\t\ttextContent: PropTypes.string,\n\t\tisSelected: PropTypes.bool,\n\t\tsetExtIsSubAreaDisplayed: PropTypes.func,\n\t\textIsSubAreaDisplayed: PropTypes.bool,\n\t\tkind: PropTypes.string,\n\t\tcloseSubAreaOnClick: PropTypes.bool,\n\t\tleaveSubAreaOpenOnClickOutside: PropTypes.bool,\n\t\tsubMenu: PropTypes.array,\n\t\tsubPanel: PropTypes.any,\n\t\tsubPanelData: PropTypes.object,\n\t\tjsx: PropTypes.oneOfType([\n\t\t\tPropTypes.object,\n\t\t\tPropTypes.func\n\t\t]),\n\t\ttooltip: PropTypes.oneOfType([\n\t\t\tPropTypes.string,\n\t\t\tPropTypes.object,\n\t\t\tPropTypes.func\n\t\t])\n\t}),\n\ttooltipDirection: PropTypes.oneOf([\"top\", \"bottom\"]),\n\ttoolbarActionHandler: PropTypes.func.isRequired,\n\tinstanceId: PropTypes.number.isRequired,\n\tcontainingDivId: PropTypes.string,\n\tcloseParentSubArea: PropTypes.func,\n\ttoolbarFocusAction: PropTypes.string,\n\tsetToolbarFocusAction: PropTypes.func,\n\tisFocusInToolbar: PropTypes.bool,\n\tcloseAnyOpenSubArea: PropTypes.func,\n\tsize: PropTypes.oneOf([\"md\", \"sm\"])\n};\n\nexport default ToolbarActionItem;\n","/*\n * Copyright 2017-2024 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\n\nimport { v4 as uuid4 } from \"uuid\";\nimport { Button } from \"carbon-components-react\";\nimport { OverflowMenuVertical16 } from \"@carbon/icons-react\";\nimport ToolbarSubMenu from \"./toolbar-sub-menu.jsx\";\n\nconst ESC_KEY = 27;\nconst DOWN_ARROW_KEY = 40;\n\nclass ToolbarOverflowItem extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tthis.state = {\n\t\t\tshowExtendedMenu: false\n\t\t};\n\n\t\tthis.buttonRef = React.createRef();\n\n\t\tthis.uuid = uuid4();\n\t\tthis.toggleExtendedMenu = this.toggleExtendedMenu.bind(this);\n\t\tthis.clickOutside = this.clickOutside.bind(this);\n\t\tthis.closeSubArea = this.closeSubArea.bind(this);\n\t\tthis.onKeyDown = this.onKeyDown.bind(this);\n\t}\n\n\tcomponentDidUpdate() {\n\t\tif (this.props.toolbarFocusAction === this.props.action && this.props.isFocusInToolbar && !this.state.showExtendedMenu) {\n\t\t\tthis.buttonRef.current.focus();\n\t\t}\n\t}\n\n\t// We must remove the eventListener in case this class is unmounted due\n\t// to the toolbar getting redrawn.\n\tcomponentWillUnmount() {\n\t\tdocument.removeEventListener(\"click\", this.clickOutside, false);\n\t}\n\n\tonKeyDown(evt) {\n\t\tif (evt.keyCode === ESC_KEY) {\n\t\t\tthis.closeSubArea();\n\n\t\t} else if (evt.keyCode === DOWN_ARROW_KEY) {\n\t\t\tthis.openSubArea();\n\t\t}\n\t\t// Left and Right arrow clicks are caught in the\n\t\t// toolbar.jsx onKeyDown method.\n\t}\n\n\n\t// Called by toolbar.jsx\n\tgetAction() {\n\t\treturn this.props.action;\n\t}\n\n\t// Called by toolbar.jsx\n\tisSubAreaDisplayed() {\n\t\treturn this.state.showExtendedMenu;\n\t}\n\n\t// Called by toolbar.jsx and internally\n\tcloseSubArea() {\n\t\tdocument.removeEventListener(\"click\", this.clickOutside, false);\n\t\tthis.props.setOverflowIndex(null); // Clear the indexes\n\t\tthis.setState({ showExtendedMenu: false });\n\t\tthis.props.setToolbarFocusAction(this.props.action); // This will not set focus on this item\n\t}\n\n\topenSubArea() {\n\t\tdocument.addEventListener(\"click\", this.clickOutside, false);\n\t\tthis.props.closeAnyOpenSubArea();\n\t\tthis.props.setOverflowIndex(this.props.index);\n\t\tthis.setState({ showExtendedMenu: true });\n\t\tthis.props.setToolbarFocusAction(this.props.action);\n\t}\n\n\tgenOverflowButtonClassName() {\n\t\treturn \"toolbar-overflow-container \" + this.genIndexClassName() + \" \" + this.genUuidClassName();\n\t}\n\n\tgenIndexClassName() {\n\t\treturn \"toolbar-index-\" + this.props.index;\n\t}\n\n\tgenUuidClassName() {\n\t\treturn \"toolbar-uuid-\" + this.uuid;\n\t}\n\n\t// When the overflow item is clicked to open the overflow menu we must set the\n\t// index of the overflow items so the overflow menu can be correctly constructed.\n\t// The overflow index values are used to split out the overflow menu action items\n\t// from the left bar and right bar.\n\t// When the overflow menu is closed we set the overflow index values to null.\n\ttoggleExtendedMenu() {\n\t\tif (this.state.showExtendedMenu) {\n\t\t\tthis.closeSubArea();\n\n\t\t} else {\n\t\t\tthis.openSubArea();\n\t\t}\n\t}\n\n\tclickOutside(evt) {\n\t\tif (this.state.showExtendedMenu) {\n\t\t\t// Selector for the overflow-container that contains the overflow icon\n\t\t\t// and submenu (if submenu is open).\n\t\t\tconst selector = \".\" + this.genIndexClassName();\n\t\t\tconst isClickInOverflowContainer = evt.target.closest(selector);\n\t\t\tif (!isClickInOverflowContainer) {\n\t\t\t\tthis.setState({ showExtendedMenu: false });\n\t\t\t}\n\t\t}\n\t}\n\n\trender() {\n\t\tlet overflowMenu = null;\n\t\tif (this.state.showExtendedMenu) {\n\t\t\tconst actionItemRect = this.buttonRef.current.getBoundingClientRect();\n\t\t\toverflowMenu = (\n\t\t\t\t<ToolbarSubMenu\n\t\t\t\t\tref={this.subMenuRef}\n\t\t\t\t\tsubMenuActions={this.props.subMenuActions}\n\t\t\t\t\tinstanceId={this.props.instanceId}\n\t\t\t\t\ttoolbarActionHandler={this.props.toolbarActionHandler}\n\t\t\t\t\tcloseSubArea={this.closeSubArea}\n\t\t\t\t\tsetToolbarFocusAction={this.props.setToolbarFocusAction}\n\t\t\t\t\tactionItemRect={actionItemRect}\n\t\t\t\t\texpandDirection={\"vertical\"}\n\t\t\t\t\tcontainingDivId={this.props.containingDivId}\n\t\t\t\t\tparentSelector={\".toolbar-overflow-container\"}\n\t\t\t\t\tisOverflowMenu\n\t\t\t\t\tisCascadeMenu={false}\n\t\t\t\t\tsize={this.props.size}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tconst tabIndex = this.props.toolbarFocusAction === this.props.action ? 0 : -1;\n\n\t\treturn (\n\t\t\t<div className={this.genOverflowButtonClassName()} data-toolbar-action={this.props.action}>\n\t\t\t\t<div className={\"toolbar-overflow-item\"}>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tref={this.buttonRef}\n\t\t\t\t\t\tkind=\"ghost\"\n\t\t\t\t\t\ttabIndex={tabIndex}\n\t\t\t\t\t\tonClick={this.toggleExtendedMenu}\n\t\t\t\t\t\tonKeyDown={this.onKeyDown}\n\t\t\t\t\t\taria-label={this.props.label}\n\t\t\t\t\t\tsize={this.props.size}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div className=\"toolbar-item-content default\">\n\t\t\t\t\t\t\t<div className=\"toolbar-icon overflow-item\">\n\t\t\t\t\t\t\t\t<OverflowMenuVertical16 />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t{overflowMenu}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nToolbarOverflowItem.propTypes = {\n\tindex: PropTypes.number.isRequired,\n\taction: PropTypes.string,\n\tlabel: PropTypes.string,\n\tsize: PropTypes.oneOf([\"md\", \"sm\"]),\n\tsubMenuActions: PropTypes.array,\n\tsetOverflowIndex: PropTypes.func,\n\ttoolbarActionHandler: PropTypes.func,\n\tinstanceId: PropTypes.number.isRequired,\n\tcontainingDivId: PropTypes.string,\n\ttoolbarFocusAction: PropTypes.string,\n\tsetToolbarFocusAction: PropTypes.func,\n\tisFocusInToolbar: PropTypes.bool,\n\tcloseAnyOpenSubArea: PropTypes.func\n};\n\nexport default ToolbarOverflowItem;\n","/*\n * Copyright 2017-2024 Elyra Authors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport ReactResizeDetector from \"react-resize-detector\";\n\nimport ToolbarActionItem from \"./toolbar-action-item.jsx\";\nimport ToolbarOverflowItem from \"./toolbar-overflow-item.jsx\";\nimport ToolbarDividerItem from \"./toolbar-divider-item.jsx\";\n\nconst ESC_KEY = 27;\nconst LEFT_ARROW_KEY = 37;\nconst RIGHT_ARROW_KEY = 39;\n\nclass Toolbar extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\t// this.state.focusAction keeps track of which item has focus.\n\t\t// This is used to ensure the focus goes to the same item that was\n\t\t// previously focused when focus was lost (blurred) from the toolbar\n\t\t// Index values (leftOverflowIndex and rightOverflowIndex) are used\n\t\t// to keep track of how the left and right bar arrays\n\t\t// should be split to be able to create the overflow menu.\n\t\tthis.state = {\n\t\t\tfocusAction: \"toolbar\",\n\t\t\tleftOverflowIndex: null,\n\t\t\trightOverflowIndex: null,\n\t\t};\n\n\t\t// Keeps track of whether the focus is on the toolbar or not. We should\n\t\t// not call focus() on any item in the toolbar if this.isFocusInToolbar\n\t\t// is false, otherwise focus will be moved incorrectly to the toolbar\n\t\t// and away from its current location.\n\t\tthis.isFocusInToolbar = false;\n\n\t\t// Arrays to hold the left and right bar configurations\n\t\tthis.leftBar = [];\n\t\tthis.rightBar = [];\n\n\t\t// Arrays to store references to React objects in toolbar for the\n\t\t// the left bar, right bar and current set of overflow items.\n\t\tthis.leftItemRefs = [];\n\t\tthis.rightItemRefs = [];\n\t\tthis.overflowItemRefs = [];\n\n\t\t// Reference for the toolbar <div>\n\t\tthis.toolbarRef = React.createRef();\n\n\t\tthis.onFocus = this.onFocus.bind(this);\n\t\tthis.onBlur = this.onBlur.bind(this);\n\t\tthis.onKeyDown = this.onKeyDown.bind(this);\n\t\tthis.onToolbarResize = this.onToolbarResize.bind(this);\n\t\tthis.setOverflowIndex = this.setOverflowIndex.bind(this);\n\t\tthis.generateToolbarItems = this.generateToolbarItems.bind(this);\n\t\tthis.setFocusAction = this.setFocusAction.bind(this);\n\t\tthis.setFocusOnItem = this.setFocusOnItem.bind(this);\n\t\tthis.closeAnyOpenSubArea = this.closeAnyOpenSubArea.bind(this);\n\t}\n\n\t// If, after updating, we are left in a situation where this.state.focusAction\n\t// is for an item that is NOT focusable, then set the focus on the first focusable\n\t// item. This might happen when an item with focus is activated and the action it\n\t// performs causes itself to become disabled. For example, if the delete item is\n\t// activated the selected objects are deleted and since no objects are now selected\n\t// the delete item (which has focus) will become disabled. It may also happen if the\n\t// toolbar config is updated and the current focusAction item is removed.\n\tcomponentDidUpdate() {\n\t\tconst index = this.getFocusableItemRefs().findIndex((item) => this.getRefAction(item) === this.state.focusAction);\n\t\tif (index === -1) {\n\t\t\tthis.setFocusOnFirstItem();\n\t\t}\n\t}\n\n\t// When the toolbar is initially focused, this.state.focusAction\n\t// will be set to the default of \"toolbar\". In that case we set the\n\t// focus on the first focusable toolbar item.\n\tonFocus(evt) {\n\t\tthis.isFocusInToolbar = true;\n\n\t\t// If focus occurs because of a click on the toolbar body\n\t\t// (not on a button) and no button has focus move focus to\n\t\t// the first item otherwise just keep focus the same.\n\t\tif (evt.target?.classList?.contains(\"toolbar-div\")) {\n\t\t\tif (this.state.focusAction === \"toolbar\") {\n\t\t\t\tthis.setFocusOnFirstItem();\n\n\n\t\t\t} else {\n\t\t\t\tthis.setFocusOnItem(); // Reset focus on current focusAction.\n\t\t\t}\n\t\t}\n\t}\n\n\t// When focus leaves the toolbar make sure we record it. This prevents\n\t// us accidentally setting focus on a toolbar item when the toolbar\n\t// re-renders with the focus elsewhere.\n\tonBlur(evt) {\n\t\t// If the focus is being moved to an object outside the toolbar div\n\t\t// we set isFocusInToolbar to false.\n\t\tif (!evt.relatedTarget?.closest(\".toolbar-div\")) {\n\t\t\tthis.isFocusInToolbar = false;\n\t\t}\n\t}\n\n\t// This is called when the user presses a key with focus on one of the\n\t// toolbar items. We set the focusAction appropriately based on which\n\t// key is pressed.\n\tonKeyDown(evt) {\n\t\tif (evt.keyCode === ESC_KEY) {\n\t\t\tthis.setFocusOnItem(); // Reset focus on current focusAction.\n\n\t\t} else if (evt.keyCode === LEFT_ARROW_KEY) {\n\t\t\tthis.setFocusOnPreviousItem();\n\n\t\t} else if (evt.keyCode === RIGHT_ARROW_KEY) {\n\t\t\tthis.setFocusOnNextItem();\n\t\t}\n\t}\n\n\t// Prevents the inline-block elements of the left bar being scrolled to\n\t// reveal the wrapped elements, when the user tabs through the elements.\n\tonScroll(evt) {\n\t\tevt.currentTarget.scroll(0, 0);\n\t\tevt.preventDefault();\n\t}\n\n\t// When the toolbar resizes, check each toolbar item to see if it has\n\t// an open sub-area and, if that item is not a focusable item, close\n\t// the sub-area. The item may no longer be focusable it is it was wrapped\n\t// into the overflow menu. Also, check to see if the current focus action\n\t// item is focusable and, if not, set focus on the first focusable item.\n\tonToolbarResize() {\n\t\tconst focusableItemRefs = this.getFocusableItemRefs();\n\t\t// Note: isFocusActionFocusable needs to be calculated here before any\n\t\t// update to the toolbar caused by the code in the subsequent if ststement.\n\t\tconst isFocusActionFocusable = this.isFocusActionFocusable(this.state.focusAction, focusableItemRefs);\n\t\tconst refWithOpenSubArea = this.getRefWithOpenSubArea();\n\n\t\tif (refWithOpenSubArea) {\n\t\t\tconst action = refWithOpenSubArea.current?.getAction();\n\t\t\tconst isFocusActionWithOpenSubAreaFocusable = this.isFocusActionFocusable(action, focusableItemRefs);\n\n\t\t\tif (!isFocusActionWithOpenSubAreaFocusable) {\n\t\t\t\trefWithOpenSubArea.current?.closeSubArea();\n\n\t\t\t} else {\n\t\t\t\t// This forces a refresh that will cause the position of any\n\t\t\t\t// open sub-area to be recaulculated based on the new toolbar width.\n\t\t\t\tthis.setFocusAction(this.state.focusAction);\n\t\t\t}\n\t\t}\n\n\t\t// If the focus action item is not focusable (maybe because it has been\n\t\t// moved into the overflow menu) then set focus on the first focusable item.\n\t\tif (!isFocusActionFocusable) {\n\t\t\tthis.setFocusOnFirstItem();\n\t\t}\n\t}\n\n\t// Returns the ref to any item that currently has an open sub-area or null\n\t// if no item has an open sub-area.\n\tgetRefWithOpenSubArea() {\n\t\tlet subAreaOpenRef = this.leftItemRefs.find((ref) => ref.current?.isSubAreaDisplayed());\n\t\tif (!subAreaOpenRef) {\n\t\t\tsubAreaOpenRef = this.rightItemRefs.find((ref) => ref.current?.isSubAreaDisplayed());\n\t\t}\n\t\tif (!subAreaOpenRef) {\n\t\t\tsubAreaOpenRef = this.overflowItemRefs.find((ref) => ref.current?.isSubAreaDisplayed());\n\t\t}\n\t\treturn subAreaOpenRef;\n\t}\n\n\t// Either sets the focus on the item for the action passed in or, if\n\t// no action is passed in, set the focus on the current focusAction.\n\t// Setting the current focusAction is used to return focus back to an\n\t// item after focus has been moved elsewhere, such as onto a sub-menu\n\t// or out of the toolbar completely.\n\tsetFocusOnItem(action) {\n\t\tconst actionToSet = action || this.state.focusAction;\n\t\tconst focusableItemRefs = this.getFocusableItemRefs();\n\t\tif (focusableItemRefs.length > 0) {\n\t\t\tthis.setFocusAction(actionToSet);\n\t\t}\n\t}\n\n\tsetFocusOnFirstItem() {\n\t\tconst focusableItemRefs = this.getFocusableItemRefs();\n\t\tif (focusableItemRefs.length > 0) {\n\t\t\tconst firstFocusAction = this.getRefAction(focusableItemRefs[0]);\n\t\t\tthis.setFocusAction(firstFocusAction);\n\t\t}\n\t}\n\n\tsetFocusOnPreviousItem() {\n\t\tconst focusableItemRefs = this.getFocusableItemRefs();\n\t\tconst previousRef = this.getPreviousItemRef(focusableItemRefs);\n\t\tif (previousRef) {\n\t\t\tconst previousFocusAction = this.getRefAction(previousRef);\n\t\t\tthis.setFocusAction(previousFocusAction);\n\t\t}\n\t}\n\n\tsetFocusOnNextItem() {\n\t\tconst focusableItemRefs = this.getFocusableItemRefs();\n\t\tconst nextRef = this.getNextItemRef(focusableItemRefs);\n\t\tif (nextRef) {\n\t\t\tconst nextFocusAction = this.getRefAction(nextRef);\n\t\t\tthis.setFocusAction(nextFocusAction);\n\t\t}\n\t}\n\n\tsetFocusAction(focusAction) {\n\t\tthis.setState({ focusAction });\n\t}\n\n\tgetPreviousItemRef(focusableItemRefs) {\n\t\tconst index = focusableItemRefs.findIndex((item) => this.getRefAction(item) === this.state.focusAction);\n\t\tif (index === 0) {\n\t\t\treturn focusableItemRefs[focusableItemRefs.length - 1];\n\t\t}\n\t\treturn focusableItemRefs[index - 1];\n\t}\n\n\tgetNextItemRef(focusableItemRefs) {\n\t\tconst index = focusableItemRefs.findIndex((item) => this.getRefAction(item) === this.state.focusAction);\n\t\tif (index === focusableItemRefs.length - 1) {\n\t\t\treturn focusableItemRefs[0];\n\t\t}\n\t\treturn focusableItemRefs[index + 1];\n\t}\n\n\tgetRefAction(ref) {\n\t\treturn ref.current?.getAction();\n\t}\n\n\t// Returns an array of references to focusable (that is enabled)\n\t// toolbar items that are on the top (visible) row of the toolbar.\n\tgetFocusableItemRefs() {\n\t\treturn this.getLeftBarFocusableItemRefs().concat(this.getRightBarFocusableItemRefs());\n\t}\n\n\t// Returns an array of references to left bar items that are\n\t// on the top (visible) row of the toolbar and are focusable.\n\t// That is, not disabled. In addition, there may also be a\n\t// reference to an overflow item if one is visible on the\n\t// top (visible) row of the toolbar.\n\tgetLeftBarFocusableItemRefs() {\n\t\tconst focusableItemRefs = [];\n\n\t\tif (this.leftItemRefs.length === 0) {\n\t\t\treturn focusableItemRefs;\n\t\t}\n\n\t\tconst topRowY = this.findToolbarTopYCoordinate();\n\t\tlet overflowItemRef = null;\n\n\t\tfor (let i = 0; i < this.leftItemRefs.length; i++) {\n\t\t\tconst itemRect = this.leftItemRefs[i].current?.getBoundingRect();\n\n\t\t\tif (itemRect?.top === topRowY) {\n\t\t\t\tif (this.leftItemRefs[i].current?.isEnabled()) {\n\t\t\t\t\tfocusableItemRefs.push(this.leftItemRefs[i]);\n\t\t\t\t}\n\n\t\t\t} else if (!overflowItemRef) {\n\t\t\t\tconst leftRefAction = this.getRefAction(this.leftItemRefs[i]);\n\t\t\t\tconst overflowAction = this.getOverflowAction(leftRefAction);\n\t\t\t\toverflowItemRef = this.overflowItemRefs.find((oRef) => oRef.current?.getAction() === overflowAction);\n\t\t\t\tif (overflowItemRef) {\n\t\t\t\t\tfocusableItemRefs.push(overflowItemRef);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn focusableItemRefs;\n\t}\n\n\t// Returns an array of references to right bar items that are\n\t// on the top (visible) row of the toolbar and are focusable.\n\t// That is, not disabled.\n\tgetRightBarFocusableItemRefs() {\n\t\tconst focusableItemRefs = [];\n\n\t\tif (this.rightItemRefs === 0) {\n\t\t\treturn focusableItemRefs;\n\t\t}\n\n\t\tconst topRowY = this.findToolbarTopYCoordinate();\n\n\t\tfor (let i = 0; i < this.rightItemRefs.length; i++) {\n\t\t\tif (this.rightItemRefs[i].current?.isEnabled()) {\n\t\t\t\tconst refRect = this.rightItemRefs[i].current?.getBoundingRect();\n\n\t\t\t\tif (refRect.top === topRowY) {\n\t\t\t\t\tfocusableItemRefs.push(this.rightItemRefs[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn focusableItemRefs.reverse();\n\t}\n\n\t// Items that appear in the overflow menu need unique action names because\n\t// the original action item to which they are related will still exist, but\n\t// hidden, in the toolbar.\n\tgetOverflowAction(action) {\n\t\treturn \"overflow_\" + action;\n\t}\n\n\t// Sets two index values: one for the left bar and one for the right that\n\t// indicate which elements in each array should be put in the overflow menu.\n\t// That is, those elements that do not appear on the top (visible) row of the\n\t// toolbar.\n\tsetOverflowIndex(leftIndex) {\n\t\tif (leftIndex === null) {\n\t\t\tthis.setState({\n\t\t\t\tleftOverflowIndex: null,\n\t\t\t\trightOverflowIndex: null\n\t\t\t});\n\t\t} else {\n\t\t\tthis.setState({\n\t\t\t\tleftOverflowIndex: leftIndex,\n\t\t\t\trightOverflowIndex: this.getRightOverflowIndex()\n\t\t\t});\n\t\t}\n\t}\n\n\t// Returns the index of the first item in the right bar that is\n\t// not on the top (visible) row of the toolbar.\n\tgetRightOverflowIndex() {\n\t\tconst ref = this.findFirstRightItemRefNotOnTopRow();\n\n\t\tconst index = ref === null\n\t\t\t? this.rightBar.length\n\t\t\t: this.rightBar.findIndex((ri) => ri.action === this.getRefAction(ref));\n\n\t\treturn index;\n\t}\n\n\t// Returns true of the current focus action item is one of the focusable\n\t// items. (It may not be if it has been placed in the overflow menu).\n\tisFocusActionFocusable(focusAction, focusableItemRefs) {\n\t\tconst indexFocusAction = focusableItemRefs.findIndex((ref) =>\n\t\t\tref.current?.props.actionObj?.action === focusAction);\n\t\treturn indexFocusAction > -1;\n\t}\n\n\t// Returns a reference to the first item that is not on the\n\t// top (visible) row of the toolbar.\n\tfindFirstRightItemRefNotOnTopRow() {\n\t\tconst topRowY = this.findToolbarTopYCoordinate();\n\n\t\tlet rightItemRef = null;\n\n\t\tfor (let i = 0; i < this.rightItemRefs.length; i++) {\n\t\t\tconst itemRect = this.rightItemRefs[i].current?.getBoundingRect();\n\t\t\tif (itemRect.top !== topRowY && rightItemRef === null) {\n\t\t\t\trightItemRef = this.rightItemRefs[i];\n\t\t\t}\n\t\t}\n\t\treturn rightItemRef;\n\t}\n\n\t// Returns the Y coordinate of the top of the toolbar. This is\n\t// used to detecg which toolbar items are on the top (visible)\n\t// row and which are wrapped onto other rows.\n\tfindToolbarTopYCoordinate() {\n\t\tconst rect = this.toolbarRef.current?.getBoundingClientRect();\n\t\treturn rect?.top;\n\t}\n\n\t// Generates an array of toolbar items from the toolbarActions array passed in. When\n\t// withOverflowItem is true, which it is for the left bar, we also add an overflow item,\n\t// inside an overflow item container, for each left toolbar action. As the canvas is made\n\t// narrower the regular action items wrap onto a second (hidden) row of the toolbar and\n\t// the overflow item, associated with the last wrapped action item, is revealed.\n\tgenerateToolbarItems(toolbarActions, withOverflowItem, refs) {\n\t\tconst newItems = [];\n\n\t\tfor (let i = 0; i < toolbarActions.length; i++) {\n\t\t\tconst actionObj = toolbarActions[i];\n\t\t\tif (actionObj) {\n\t\t\t\tif (!actionObj.divider && withOverflowItem) {\n\t\t\t\t\tnewItems.push(this.generateOverflowItem(i, actionObj.action));\n\t\t\t\t}\n\t\t\t\tnewItems.push(this.generateToolbarItem(actionObj, i, refs));\n\t\t\t}\n\t\t}\n\t\treturn newItems;\n\t}\n\n\t// Returns JSX for a toolbar item based on the actionObj passed in.\n\tgenerateToolbarItem(actionObj, i, refs) {\n\t\tlet jsx = null;\n\n\t\tif (actionObj) {\n\t\t\tif (actionObj.divider) {\n\t\t\t\tjsx = (\n\t\t\t\t\t<ToolbarDividerItem\n\t\t\t\t\t\tkey={\"toolbar-item-key-\" + i}\n\t\t\t\t\t\tisInMenu={false}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tconst ref = React.createRef();\n\t\t\t\tif (refs) {\n\t\t\t\t\trefs.push(ref);\n\t\t\t\t}\n\t\t\t\tjsx = (\n\t\t\t\t\t<ToolbarActionItem\n\t\t\t\t\t\tref={ref}\n\t\t\t\t\t\tkey={\"toolbar-item-key-\" + i}\n\t\t\t\t\t\tactionObj={actionObj}\n\t\t\t\t\t\ttooltipDirection={this.props.tooltipDirection}\n\t\t\t\t\t\ttoolbarActionHandler={this.props.toolbarActionHandler}\n\t\t\t\t\t\tinstanceId={this.props.instanceId}\n\t\t\t\t\t\tcontainingDivId={this.props.containingDivId}\n\t\t\t\t\t\ttoolbarFocusAction={this.state.focusAction}\n\t\t\t\t\t\tsetToolbarFocusAction={this.setFocusOnItem}\n\t\t\t\t\t\tisFocusInToolbar={this.isFocusInToolbar}\n\t\t\t\t\t\tcloseAnyOpenSubArea={this.closeAnyOpenSubArea}\n\t\t\t\t\t\tsize={this.props.size}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn jsx;\n\t}\n\n\t// Returns JSX for an overflow toolbar item based on the index and action passed in.\n\tgenerateOverflowItem(index, action) {\n\t\tconst label = this.props.additionalText ? this.props.additionalText.overflowMenuLabel : \"\";\n\t\tconst overflowAction = this.getOverflowAction(action);\n\t\tconst subMenuActions = index === this.state.leftOverflowIndex ? this.createSubMenuActions() : [];\n\n\t\t// Create a ref for the overflow item to add to array of references to\n\t\t// all overflow items.\n\t\tconst ref = React.createRef();\n\t\tthis.overflowItemRefs.push(ref);\n\n\t\tconst jsx = (\n\t\t\t<ToolbarOverflowItem\n\t\t\t\tref={ref}\n\t\t\t\tkey={\"toolbar-overflow-item-key-\" + index}\n\t\t\t\tindex={index}\n\t\t\t\taction={overflowAction}\n\t\t\t\tlabel={label}\n\t\t\t\tsize={this.props.size}\n\t\t\t\tsubMenuActions={subMenuActions}\n\t\t\t\tsetOverflowIndex={this.setOverflowIndex}\n\t\t\t\ttoolbarActionHandler={this.props.toolbarActionHandler}\n\t\t\t\tinstanceId={this.props.instanceId}\n\t\t\t\tcontainingDivId={this.props.containingDivId}\n\t\t\t\ttoolbarFocusAction={this.state.focusAction}\n\t\t\t\tsetToolbarFocusAction={this.setFocusOnItem}\n\t\t\t\tisFocusInToolbar={this.isFocusInToolbar}\n\t\t\t\tcloseAnyOpenSubArea={this.closeAnyOpenSubArea}\n\t\t\t/>\n\t\t);\n\n\t\treturn jsx;\n\t}\n\n\t// Returns an array of overflow menu actions that should be displayed in\n\t// the overflow menu for the overflow item indicated by the index passed in.\n\t// This uses this.state.leftOverflowIndex and this.state.rightOverflowIndex which are\n\t// set when the user clicks on a particular overflow item in the toolbar.\n\tcreateSubMenuActions() {\n\t\tlet subMenuActions = [];\n\t\tconst l = this.leftBar.slice(this.state.leftOverflowIndex);\n\t\tconst r = this.rightBar.slice(this.state.rightOverflowIndex).reverse();\n\t\tsubMenuActions = l.concat(r);\n\n\t\treturn subMenuActions;\n\t}\n\n\tcloseAnyOpenSubArea() {\n\t\tthis.leftItemRefs.forEach((ref) => this.closeSubAreaOnRef(ref));\n\t\tthis.rightItemRefs.forEach((ref) => this.closeSubAreaOnRef(ref));\n\t\tthis.overflowItemRefs.forEach((ref) => this.closeOverflowMenuOnRef(ref));\n\t}\n\n\tcloseSubAreaOnRef(ref) {\n\t\tif (ref.current?.props.actionObj.setExtIsSubAreaDisplayed) {\n\t\t\tref.current?.props.actionObj.setExtIsSubAreaDisplayed(false);\n\n\t\t} else if (ref.current?.state.subAreaDisplayed) {\n\t\t\tref.current?.closeSubArea();\n\t\t}\n\t}\n\n\tcloseOverflowMenuOnRef(ref) {\n\t\tif (ref.current?.state.showExtendedMenu) {\n\t\t\tref.current?.closeSubArea();\n\t\t}\n\t}\n\n\trender() {\n\t\tthis.leftBar = this.props.config.leftBar || [];\n\t\tthis.rightBar = this.props.config.rightBar || [];\n\t\tthis.rightBar = [...this.rightBar].reverse() || [];\n\n\t\t// Arrays to store references to React objects in toolbar.\n\t\tthis.leftItemRefs = [];\n\t\tthis.rightItemRefs = [];\n\t\tthis.overflowItemRefs = [];\n\n\t\tconst leftItems = this.generateToolbarItems(this.leftBar, true, this.leftItemRefs);\n\t\tconst rightItems = this.generateToolbarItems(this.rightBar, false, this.rightItemRefs);\n\n\t\tconst toolbarSizeClass = this.props.size === \"sm\" ? \"toolbar-div toolbar-size-small\" : \"toolbar-div\";\n\t\tconst tabIndex = this.state.focusAction === \"toolbar\" ? 0 : -1;\n\n\t\tconst canvasToolbar = (\n\t\t\t<ReactResizeDetector handleWidth onResize={this.onToolbarResize}>\n\t\t\t\t<div ref={this.toolbarRef} className={toolbarSizeClass} instanceid={this.props.instanceId}\n\t\t\t\t\ttabIndex={tabIndex} onFocus={this.onFocus} onBlur={this.onBlur} onKeyDown={this.onKeyDown}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"toolbar-left-bar\" onScroll={this.onScroll}>\n\t\t\t\t\t\t{leftItems}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div className=\"toolbar-right-bar\">\n\t\t\t\t\t\t{rightItems}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</ReactResizeDetector>\n\t\t);\n\t\treturn canvasToolbar;\n\t}\n}\n\nToolbar.propTypes = {\n\tconfig: PropTypes.object.isRequired,\n\tinstanceId: PropTypes.number.isRequired,\n\tcontainingDivId: PropTypes.string,\n\ttoolbarActionHandler: PropTypes.func,\n\ttooltipDirection: PropTypes.string,\n\tadditionalText: PropTypes.object,\n\tsize: PropTypes.oneOf([\"md\", \"sm\"])\n};\n\nexport default Toolbar;\n"],"names":["reWhitespace","trimmedEndIndex","string","index","length","test","charAt","reTrimStart","baseTrim","slice","replace","isObject","require$$1","isSymbol","require$$2","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","toNumber_1","value","other","valueOf","isBinary","toNumber","require$$0","INFINITY","toFinite","toInteger_1","result","remainder","_React$Component","ToolbarButtonItem","props","_this","_classCallCheck","_callSuper","buttonRef","React","createRef","_inherits","_createClass","key","this","isFocusInToolbar","buttonFocusAction","actionObj","action","jsxItem","current","querySelector","focus","disabled","enable","TOOLBAR_STOP","createElement","StopFilledAlt16","TOOLBAR_RUN","Play16","TOOLBAR_EXPAND_SUPERNODE_IN_PLACE","Maximize16","TOOLBAR_COLLAPSE_SUPERNODE_IN_PLACE","Minimize16","TOOLBAR_EXPAND_SUPERNODE_FULL_PAGE","Launch16","TOOLBAR_UNDO","Undo16","TOOLBAR_REDO","Redo16","TOOLBAR_CLIPBOARD","Result16","TOOLBAR_CUT","Cut16","TOOLBAR_COPY","Copy16","TOOLBAR_PASTE","Paste16","TOOLBAR_CREATE_COMMENT","TOOLBAR_CREATE_AUTO_COMMENT","AddComment16","TOOLBAR_SHOW_COMMENTS","Chat16","TOOLBAR_HIDE_COMMENTS","ChatOff16","TOOLBAR_COLOR_BACKGROUND","ColorPalette16","TOOLBAR_DELETE_LINK","TOOLBAR_DELETE_SELECTED_OBJECTS","TrashCan16","TOOLBAR_SET_COMMENT_EDIT_MODE","TOOLBAR_SET_NODE_LABEL_EDIT","Edit16","TOOLBAR_ZOOM_IN","ZoomIn16","TOOLBAR_ZOOM_OUT","ZoomOut16","TOOLBAR_ZOOM_FIT","CenterToFit16","TOOLBAR_OPEN_PALETTE","TOOLBAR_CLOSE_PALETTE","TOOLBAR_TOGGLE_PALETTE","OpenPanelFilledLeft16","TOOLBAR_ARRANGE_HORIZONALLY","SVG","src","TOOLBAR_ARRANGE_VERTICALLY","TOOLBAR_TOGGLE_NOTIFICATION_PANEL","label","disable","isInMenu","incLabelWithIcon","className","generateLabelType","inLabelWithIcon","icon","getDefaultIcon","iconEnabled","iconDisabled","customIcon","id","instanceId","labelBefore","labelAfter","generateLabel","generateIcon","textContent","itemContentClassName","classNames","default","kind","chevronDiv","generateChevronDiv","mainClassName","purpose","buttonContent","wrapInTooltip","ariaLabel","tabIndex","Button","ref","onClick","actionClickHandler","size","subMenu","subPanel","ChevronRight16","chev","subAreaDisplayed","ChevronUp16","ChevronDown16","chevMini","miniChevronClicked","bind","path","d","evt","stopPropagation","content","jsx","showLabelAsTip","tooltip","tip","tooltipId","actionName","enableTooltip","direction","tooltipDirection","Tooltip","generateJsxItem","generateRegularItem","Component","adjustSubAreaPosition","areaRef","containingDivId","expandDirection","actionItemRect","containingDiv","document","getElementById","containingDivRect","getBoundingClientRect","top","bottom","left","right","thisAreaRect","outsideBottom","outsideRight","newTop","height","style","newLeft","width","generateSubAreaStyle","ToolbarSubPanel","onKeyDown","closeSubPanel","keyCode","closeSubArea","preventDefault","_this2","onFocus","subPanelData","ToolbarSubMenuItem","state","divRef","onMouseEnter","onMouseLeave","openSubArea","clickOutside","removeEventListener","items","getElementsByClassName","generateActionName","contains","target","leaveSubAreaOpenOnClickOutside","setState","checkCloseSubAreaOnClick","closeSubAreaOnClick","addEventListener","isInCascadeMenu","closeParentSubArea","setSubMenuFocus","isInOverflowMenu","setToolbarFocusAction","toolbarActionHandler","ToolbarSubMenu","subMenuActions","parentSelector","generateSelector","isCascadeMenu","kindAsClass","itemClassName","isSelected","subArea","generateSubArea","subMenuFocusAction","ToolbarDividerItem","arguments","dividerClassName","focusAction","setFocusAction","setFocusOnFirstItem","find","sma","actionToSet","getClosestEnabledAction","setFocusOnPreviousItem","setFocusOnNextItem","focusableActions","getFocusableActions","previousFocusAction","getPreviousFocusAction","nextFocusAction","getNextFocusAction","findIndex","newAction","indexUp","indexDown","i","push","focuableActions","_this3","fa","_this4","newItems","generateSubMenuItem","divider","isOverflowMenu","_this5","subMenuItems","generateSubMenuItems","ToolbarActionItem","hasSubArea","setExtIsSubAreaDisplayed","extIsSubAreaDisplayed","isSubAreaDisplayed","chevronClicked","closeAnyOpenSubArea","adjustForDual","x","y","toolbarFocusAction","ToolbarOverflowItem","showExtendedMenu","uuid","uuid4","toggleExtendedMenu","setOverflowIndex","genIndexClassName","genUuidClassName","selector","closest","overflowMenu","subMenuRef","genOverflowButtonClassName","OverflowMenuVertical16","Toolbar","leftOverflowIndex","rightOverflowIndex","leftBar","rightBar","leftItemRefs","rightItemRefs","overflowItemRefs","toolbarRef","onBlur","onToolbarResize","generateToolbarItems","setFocusOnItem","getFocusableItemRefs","item","getRefAction","_evt$target","_evt$target$classList","classList","_evt$relatedTarget","relatedTarget","currentTarget","scroll","focusableItemRefs","isFocusActionFocusable","refWithOpenSubArea","getRefWithOpenSubArea","_refWithOpenSubArea$c","_refWithOpenSubArea$c2","getAction","subAreaOpenRef","_ref$current","_ref$current2","_ref$current3","firstFocusAction","previousRef","getPreviousItemRef","nextRef","getNextItemRef","_ref$current4","getLeftBarFocusableItemRefs","concat","getRightBarFocusableItemRefs","topRowY","findToolbarTopYCoordinate","overflowItemRef","_loop","_this5$leftItemRefs$i","_this5$leftItemRefs$i2","itemRect","getBoundingRect","isEnabled","leftRefAction","overflowAction","getOverflowAction","oRef","_oRef$current","_this$rightItemRefs$i","_this$rightItemRefs$i2","reverse","leftIndex","getRightOverflowIndex","_this6","findFirstRightItemRefNotOnTopRow","ri","_ref$current5","_ref$current5$props$a","rightItemRef","_this$rightItemRefs$i3","_this$toolbarRef$curr","rect","toolbarActions","withOverflowItem","refs","generateOverflowItem","generateToolbarItem","additionalText","overflowMenuLabel","createSubMenuActions","l","r","_this7","forEach","closeSubAreaOnRef","closeOverflowMenuOnRef","_ref$current6","_ref$current8","_ref$current7","_ref$current9","_ref$current10","_ref$current11","config","_toConsumableArray","leftItems","rightItems","toolbarSizeClass","ReactResizeDetector","handleWidth","onResize","instanceid","onScroll"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elyra/canvas",
3
- "version": "12.45.1",
3
+ "version": "12.47.0",
4
4
  "description": "Elyra common-canvas",
5
5
  "main": "dist/common-canvas.js",
6
6
  "module": "dist/common-canvas.es.js",
@@ -51,6 +51,10 @@ export default class CommandStack {
51
51
  return this.commands.getUndoCommands().toArray();
52
52
  }
53
53
 
54
+ getAllRedoCommands() {
55
+ return this.commands.getRedoCommands().toArray();
56
+ }
57
+
54
58
  // need this for validation on unit tests
55
59
  getStack() {
56
60
  return {
@@ -315,7 +315,7 @@ export default class CanvasController {
315
315
 
316
316
  // Specifies the new styles for objects that are not highlighted during
317
317
  // branch highlighting.
318
- // newStyle - is a style specification object. See wiki for details.
318
+ // newStyle - is a style specification object.
319
319
  setSubdueStyle(newStyle) {
320
320
  this.objectModel.setSubdueStyle(newStyle);
321
321
  }
@@ -699,7 +699,7 @@ export default class CanvasController {
699
699
  // <objectID_2_2
700
700
  // ]
701
701
  // }
702
- // newStyles - This is a style specification. See the wiki for details.
702
+ // newStyles - This is a style specification object.
703
703
  // temporary - A boolean to indicate if the style is serialized when
704
704
  // getPipelineFlow() method is called or not.
705
705
  setObjectsStyle(pipelineObjectIds, newStyle, temporary) {
@@ -836,7 +836,7 @@ export default class CanvasController {
836
836
  // Sets the decorations on a node. The decorations array passed in
837
837
  // will replace any decorations currently applied to the node.
838
838
  // nodeId - The ID of the node
839
- // newDecorations - An array of decorations. See Wiki for details.
839
+ // newDecorations - An array of decoration objects.
840
840
  // pipelineId - The ID of the pipeline
841
841
  setNodeDecorations(nodeId, newDecorations, pipelineId) {
842
842
  this.objectModel.getAPIPipeline(pipelineId).setNodeDecorations(nodeId, newDecorations);
@@ -960,7 +960,7 @@ export default class CanvasController {
960
960
  return this.objectModel.getAPIPipeline(pipelineId).getNodeClassName(nodeId);
961
961
  }
962
962
 
963
- // Gets the style specification (see Wiki) for a node
963
+ // Gets the style specification for a node
964
964
  // nodeId - The ID of the node
965
965
  // temporary - A boolean to indicate if the styles are serialized when
966
966
  // getPipelineFlow() method is called or not.
@@ -1122,7 +1122,7 @@ export default class CanvasController {
1122
1122
  return this.objectModel.getAPIPipeline(pipelineId).getCommentClassName(commentId);
1123
1123
  }
1124
1124
 
1125
- // Gets the style spcification (see Wiki) for a comment
1125
+ // Gets the style spcification for a comment.
1126
1126
  // commentId - The ID of the node
1127
1127
  // temporary - A boolean to indicate if the styles are serialized when
1128
1128
  // getPipelineFlow() method is called or not.
@@ -1289,7 +1289,7 @@ export default class CanvasController {
1289
1289
  // <linkID_2_2
1290
1290
  // ]
1291
1291
  // }
1292
- // newStyle - This is a style specification. See the wiki for details.
1292
+ // newStyle - This is a style specification objects.
1293
1293
  // temporary - A boolean to indicate if the style is serialized when
1294
1294
  // getPipelineFlow() method is called or not.
1295
1295
  setLinksStyle(pipelineLinkIds, newStyle, temporary) {
@@ -1334,7 +1334,7 @@ export default class CanvasController {
1334
1334
  // Sets the decorations on a link. The decorations array passed in
1335
1335
  // will replace any decorations currently applied to the link.
1336
1336
  // linkId - The ID of the link
1337
- // newDecorations - An array of decorations. See Wiki for details.
1337
+ // newDecorations - An array of decoration objects.
1338
1338
  // pipelineId - The ID of the pipeline
1339
1339
  setLinkDecorations(linkId, newDecorations, pipelineId) {
1340
1340
  this.objectModel.getAPIPipeline(pipelineId).setLinkDecorations(linkId, newDecorations);
@@ -1396,7 +1396,7 @@ export default class CanvasController {
1396
1396
  }
1397
1397
 
1398
1398
  // Undoes a number of commands on the command stack as indicated by the
1399
- // 'count' parameter. If 'count' is bigger than the number of commands
1399
+ // 'count' parameter. If 'count' is bigger than the number of undoable commands
1400
1400
  // on the stack, all undoable commands currently on the command stack
1401
1401
  // will be undone. Uses the editActionHandler method which will cause
1402
1402
  // the app's editActionHandler to be called.
@@ -1416,6 +1416,17 @@ export default class CanvasController {
1416
1416
  }
1417
1417
  }
1418
1418
 
1419
+ // Redoes a number of commands on the command stack as indicated by the
1420
+ // 'count' parameter. If 'count' is bigger than the number of redoable commands
1421
+ // on the stack, all redoable commands currently on the command stack
1422
+ // will be redone. Uses the editActionHandler method which will cause
1423
+ // the app's editActionHandler to be called.
1424
+ redoMulti(count) {
1425
+ for (let i = 0; i < count && this.canRedo(); i++) {
1426
+ this.editActionHandler({ editType: "redo", editSource: "controller" });
1427
+ }
1428
+ }
1429
+
1419
1430
  // Returns true if there is a command on the command stack
1420
1431
  // available to be undone.
1421
1432
  canUndo() {
@@ -1434,6 +1445,12 @@ export default class CanvasController {
1434
1445
  return this.getCommandStack().getAllUndoCommands();
1435
1446
  }
1436
1447
 
1448
+ // Returns an array of all redoable commands currently on the
1449
+ // command stack.
1450
+ getAllRedoCommands() {
1451
+ return this.getCommandStack().getAllRedoCommands();
1452
+ }
1453
+
1437
1454
  // Returns a string which is the label that descibes the next undoable
1438
1455
  // command.
1439
1456
  getUndoLabel() {
@@ -25,6 +25,7 @@ import ColorPicker from "../color-picker";
25
25
  const CM_TOOLBAR_GAP = 2;
26
26
  const CM_ICON_SIZE = 32;
27
27
  const CM_ICON_PAD = 2;
28
+ const DIVIDER_SIZE = 1;
28
29
  const ICON_SIZE_PLUS_GAP = CM_ICON_SIZE + CM_TOOLBAR_GAP;
29
30
  const PADDING = 2;
30
31
 
@@ -104,17 +105,22 @@ class CommonCanvasContextToolbar extends React.Component {
104
105
 
105
106
  // Returns the width of the context toolbar.
106
107
  getContextToolbarWidth(toolbarItems, overflowMenuItems) {
108
+ const dividers = toolbarItems.filter((i) => i.divider);
109
+ const dividersCount = dividers.length;
110
+ const dividersWidth = dividersCount * DIVIDER_SIZE;
111
+
107
112
  // If there is at least one overflow item, we will need an overflow
108
113
  // icon which will increase the toolbar items by one.
109
114
  const overflowItemCount = overflowMenuItems.length > 0 ? 1 : 0;
110
- const toolbarItemsCount = toolbarItems.length + overflowItemCount;
115
+ const buttonsCount = toolbarItems.length + overflowItemCount - dividersCount;
116
+ const buttonsWidth = (buttonsCount * (CM_ICON_SIZE + CM_ICON_PAD));
111
117
 
112
118
  // If we have some overflow menu items, we reduce the width by five pixels
113
119
  // which forces the overflow menu and the overflow icon to be shown. We
114
120
  // use 5 pixels because this is how many are needed to make the toolbar
115
121
  // work correcty with differnet browser magnificaitons.
116
122
  const reduction = overflowMenuItems.length > 0 ? 5 : 0;
117
- return (toolbarItemsCount * (CM_ICON_SIZE + CM_ICON_PAD)) - reduction;
123
+ return buttonsWidth + dividersWidth - reduction;
118
124
  }
119
125
 
120
126
  // Removes leading and trailing dividers from the items array and any
@@ -210,7 +216,7 @@ class CommonCanvasContextToolbar extends React.Component {
210
216
  let contextToolbar = null;
211
217
 
212
218
  if (this.props.showContextMenu) {
213
- const toolbarItems = this.props.contextMenuDef.filter((cmItem) => cmItem.toolbarItem && !cmItem.divider);
219
+ const toolbarItems = this.props.contextMenuDef.filter((cmItem) => cmItem.toolbarItem);
214
220
  let overflowMenuItems = this.props.contextMenuDef.filter((cmItem) => !cmItem.toolbarItem);
215
221
  overflowMenuItems = this.removeUnnecessaryDividers(overflowMenuItems);
216
222
  const toolbarConfig = this.getToolbarConfig({ toolbarItems, overflowMenuItems });
@@ -224,6 +230,7 @@ class CommonCanvasContextToolbar extends React.Component {
224
230
  : pos.x - toolbarWidth;
225
231
  let y = pos.y - ICON_SIZE_PLUS_GAP;
226
232
 
233
+ // Make sure the context toolbar is fully inside the viewport.
227
234
  ({ x, y } = this.adjustPosToFit(x, y, toolbarWidth, ICON_SIZE_PLUS_GAP));
228
235
 
229
236
  contextToolbar = (
@@ -223,7 +223,6 @@ class CommonCanvasToolbar extends React.Component {
223
223
 
224
224
  if (typeof toolbarConfig !== "undefined") {
225
225
  const editingAllowed = this.props.enableEditingActions;
226
- this.applyToolState("multiUndo", toolbarConfig, editingAllowed && this.props.canMultiUndo);
227
226
  this.applyToolState("undo", toolbarConfig, editingAllowed && this.props.canUndo);
228
227
  this.applyToolState("redo", toolbarConfig, editingAllowed && this.props.canRedo);
229
228
  this.applyToolState("cut", toolbarConfig, editingAllowed && this.props.canCutCopy);
@@ -327,7 +326,6 @@ CommonCanvasToolbar.propTypes = {
327
326
  notificationConfigKeepOpen: PropTypes.bool,
328
327
  enableInternalObjectModel: PropTypes.bool,
329
328
  enableEditingActions: PropTypes.bool,
330
- canMultiUndo: PropTypes.bool,
331
329
  canUndo: PropTypes.bool,
332
330
  canRedo: PropTypes.bool,
333
331
  canCutCopy: PropTypes.bool,
@@ -353,7 +351,6 @@ const mapStateToProps = (state, ownProps) => ({
353
351
  notificationMessages: state.notifications,
354
352
  enableInternalObjectModel: state.canvasconfig.enableInternalObjectModel,
355
353
  enableEditingActions: state.canvasconfig.enableEditingActions,
356
- canMultiUndo: ownProps.canvasController.getAllUndoCommands().length > 1,
357
354
  canUndo: ownProps.canvasController.canUndo(),
358
355
  canRedo: ownProps.canvasController.canRedo(),
359
356
  canCutCopy: ownProps.canvasController.canCutCopy(),
@@ -121,12 +121,6 @@ $panel-border-color: $ui-03;
121
121
  border-color: transparent;
122
122
  box-shadow: inset 2px 2px $interactive-03, inset -6px -2px $interactive-03;
123
123
  }
124
- // Set padding so overflow icon appears in the center (horizontally). This
125
- // offsets the 5px which are set in the code to make the overflow icon
126
- // be generated correctly.
127
- .toolbar-item-content {
128
- padding-left: 4px;
129
- }
130
124
  }
131
125
  }
132
126
 
@@ -24,7 +24,7 @@ import * as d3Fetch from "d3-fetch";
24
24
  const d3 = Object.assign({}, d3Selection, d3Fetch);
25
25
 
26
26
  const markdownIt = require("markdown-it")({
27
- html: false, // Don't allow HTML to be executed in comments.
27
+ html: true, // Allow HTML to be executed in comments.
28
28
  linkify: false, // Don't convert strings, in URL format, to be links.
29
29
  typographer: true
30
30
  });