@elyra/canvas 12.24.0 → 12.26.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.
- package/assets/images/supernode_ext.svg +0 -9
- package/dist/canvas-controller-df16f0fa.js +2 -0
- package/dist/canvas-controller-df16f0fa.js.map +1 -0
- package/dist/canvas-controller-fefee807.js +2 -0
- package/dist/canvas-controller-fefee807.js.map +1 -0
- package/dist/common-canvas-55d075fe.js +2 -0
- package/dist/common-canvas-55d075fe.js.map +1 -0
- package/dist/common-canvas-e8a7a840.js +2 -0
- package/dist/common-canvas-e8a7a840.js.map +1 -0
- package/dist/common-canvas.es.js +1 -1
- package/dist/common-canvas.js +1 -1
- package/dist/common-properties-97261017.js +2 -0
- package/dist/common-properties-97261017.js.map +1 -0
- package/dist/common-properties-f596260f.js +2 -0
- package/dist/common-properties-f596260f.js.map +1 -0
- package/dist/datarecord-metadata-v3-schema-6a3754ce.js +2 -0
- package/dist/{datarecord-metadata-v3-schema-3323a91e.js.map → datarecord-metadata-v3-schema-6a3754ce.js.map} +1 -1
- package/dist/datarecord-metadata-v3-schema-ba1f2849.js +2 -0
- package/dist/{datarecord-metadata-v3-schema-93ec5562.js.map → datarecord-metadata-v3-schema-ba1f2849.js.map} +1 -1
- package/dist/en-7201b548.js +1 -1
- package/dist/en-7201b548.js.map +1 -1
- package/dist/en-a08356c8.js +1 -1
- package/dist/en-a08356c8.js.map +1 -1
- package/dist/extends-841b39ac.js +7 -0
- package/dist/extends-841b39ac.js.map +1 -0
- package/dist/{extends-bb395e42.js → extends-a9c1b4cd.js} +2 -2
- package/dist/extends-a9c1b4cd.js.map +1 -0
- package/dist/flexible-table-d4bd5c25.js +2 -0
- package/dist/flexible-table-d4bd5c25.js.map +1 -0
- package/dist/flexible-table-f7b58f99.js +2 -0
- package/dist/flexible-table-f7b58f99.js.map +1 -0
- package/dist/icon-4a6f3dad.js +2 -0
- package/dist/icon-4a6f3dad.js.map +1 -0
- package/dist/icon-f6f2bffc.js +2 -0
- package/dist/icon-f6f2bffc.js.map +1 -0
- package/dist/index-5d62eee8.js +2 -0
- package/dist/index-5d62eee8.js.map +1 -0
- package/dist/index-c8a96051.js +2 -0
- package/dist/index-c8a96051.js.map +1 -0
- package/dist/isArrayLikeObject-a9c7973b.js +1 -1
- package/dist/isArrayLikeObject-a9c7973b.js.map +1 -1
- package/dist/isArrayLikeObject-f3b27f64.js +1 -1
- package/dist/isArrayLikeObject-f3b27f64.js.map +1 -1
- package/dist/lib/canvas-controller.es.js +1 -1
- package/dist/lib/canvas-controller.js +1 -1
- package/dist/lib/canvas.es.js +1 -1
- package/dist/lib/canvas.js +1 -1
- package/dist/lib/context-menu.es.js +1 -1
- package/dist/lib/context-menu.es.js.map +1 -1
- package/dist/lib/context-menu.js +1 -1
- package/dist/lib/context-menu.js.map +1 -1
- package/dist/lib/properties/field-picker.es.js +1 -1
- package/dist/lib/properties/field-picker.js +1 -1
- package/dist/lib/properties/flexible-table.es.js +1 -1
- package/dist/lib/properties/flexible-table.js +1 -1
- package/dist/lib/properties.es.js +1 -1
- package/dist/lib/properties.js +1 -1
- package/dist/styles/common-canvas.min.css +1 -1
- package/dist/styles/common-canvas.min.css.map +1 -1
- package/dist/toolbar-96922752.js +2 -0
- package/dist/toolbar-96922752.js.map +1 -0
- package/dist/toolbar-c8779b93.js +2 -0
- package/dist/toolbar-c8779b93.js.map +1 -0
- package/locales/common-properties/locales/en.json +4 -1
- package/locales/common-properties/locales/eo.json +4 -1
- package/package.json +1 -1
- package/src/common-canvas/canvas-controller.js +26 -11
- package/src/common-canvas/cc-contents.jsx +33 -11
- package/src/common-canvas/cc-toolbar.jsx +2 -2
- package/src/common-canvas/common-canvas-utils.js +28 -12
- package/src/common-canvas/common-canvas.scss +3 -3
- package/src/common-canvas/svg-canvas-d3.js +14 -4
- package/src/common-canvas/svg-canvas-d3.scss +4 -0
- package/src/common-canvas/svg-canvas-pipeline.js +87 -3
- package/src/common-canvas/svg-canvas-renderer.js +150 -217
- package/src/common-canvas/svg-canvas-utils-display.js +6 -4
- package/src/common-properties/common-properties.jsx +6 -2
- package/src/common-properties/components/control-item/control-item.jsx +16 -5
- package/src/common-properties/components/control-item/control-item.scss +3 -2
- package/src/common-properties/components/editor-form/editor-form.jsx +27 -14
- package/src/common-properties/components/editor-form/editor-form.scss +3 -11
- package/src/common-properties/components/field-picker/field-picker.scss +13 -2
- package/src/common-properties/components/flexible-table/flexible-table.jsx +5 -2
- package/src/common-properties/components/moveable-table-rows/moveable-table-rows.jsx +2 -2
- package/src/common-properties/components/properties-modal/properties-modal.jsx +1 -1
- package/src/common-properties/components/properties-modal/properties-modal.scss +1 -1
- package/src/common-properties/constants/constants.js +10 -1
- package/src/common-properties/constants/form-constants.js +1 -0
- package/src/common-properties/controls/abstract-table.jsx +1 -1
- package/src/common-properties/controls/control-factory.js +17 -7
- package/src/common-properties/controls/controls.scss +0 -3
- package/src/common-properties/controls/dropdown/dropdown.jsx +17 -6
- package/src/common-properties/controls/expression/expression.jsx +2 -2
- package/src/common-properties/controls/list/list.jsx +1 -1
- package/src/common-properties/controls/selectcolumns/selectcolumns.jsx +3 -3
- package/src/common-properties/controls/someofselect/someofselect.jsx +1 -1
- package/src/common-properties/form/ControlInfo.js +3 -0
- package/src/common-properties/form/EditorForm.js +43 -28
- package/src/common-properties/form/Form.js +13 -4
- package/src/common-properties/form/ParameterInfo.js +18 -1
- package/src/common-properties/panels/sub-panel/sub-panel.scss +4 -0
- package/src/common-properties/panels/tearsheet/tearsheet.jsx +4 -2
- package/src/common-properties/panels/tearsheet/tearsheet.scss +7 -0
- package/src/common-properties/properties-controller.js +5 -3
- package/src/common-properties/properties-main/properties-main-widths.scss +2 -0
- package/src/common-properties/properties-main/properties-main.jsx +44 -7
- package/src/common-properties/properties-main/properties-main.scss +3 -0
- package/src/common-properties/reducers/{save-button-disable.jsx → save-button-disable.js} +0 -0
- package/src/common-properties/reducers/{wide-flyout-primary-button-disable.jsx → wide-flyout-primary-button-disable.js} +0 -0
- package/src/common-properties/ui-conditions/condition-ops/isEmpty.js +2 -1
- package/src/common-properties/ui-conditions/condition-ops/isNotEmpty.js +2 -1
- package/src/common-properties/util/property-utils.js +43 -1
- package/src/notification-panel/notification-panel.jsx +29 -2
- package/src/notification-panel/notification-panel.scss +5 -11
- package/src/object-model/object-model.js +15 -0
- package/src/object-model/redux/canvas-store.js +1 -1
- package/src/palette/palette-content-list-item.jsx +13 -10
- package/src/palette/palette-flyout-content-category.jsx +8 -2
- package/src/palette/palette.scss +9 -2
- package/src/toolbar/toolbar-action-item.jsx +5 -1
- package/stats.html +1 -1
- package/dist/canvas-controller-60ed1f25.js +0 -2
- package/dist/canvas-controller-60ed1f25.js.map +0 -1
- package/dist/canvas-controller-6239cacc.js +0 -2
- package/dist/canvas-controller-6239cacc.js.map +0 -1
- package/dist/common-canvas-4ae99af6.js +0 -2
- package/dist/common-canvas-4ae99af6.js.map +0 -1
- package/dist/common-canvas-86633e44.js +0 -2
- package/dist/common-canvas-86633e44.js.map +0 -1
- package/dist/common-properties-2bc0b14a.js +0 -2
- package/dist/common-properties-2bc0b14a.js.map +0 -1
- package/dist/common-properties-56bf68a6.js +0 -2
- package/dist/common-properties-56bf68a6.js.map +0 -1
- package/dist/datarecord-metadata-v3-schema-3323a91e.js +0 -2
- package/dist/datarecord-metadata-v3-schema-93ec5562.js +0 -2
- package/dist/extends-11efb86b.js +0 -7
- package/dist/extends-11efb86b.js.map +0 -1
- package/dist/extends-bb395e42.js.map +0 -1
- package/dist/flexible-table-989859ec.js +0 -2
- package/dist/flexible-table-989859ec.js.map +0 -1
- package/dist/flexible-table-d51a7d72.js +0 -2
- package/dist/flexible-table-d51a7d72.js.map +0 -1
- package/dist/icon-037ad6d1.js +0 -2
- package/dist/icon-037ad6d1.js.map +0 -1
- package/dist/icon-b619470c.js +0 -2
- package/dist/icon-b619470c.js.map +0 -1
- package/dist/index-46a80c08.js +0 -2
- package/dist/index-46a80c08.js.map +0 -1
- package/dist/index-b527a82d.js +0 -2
- package/dist/index-b527a82d.js.map +0 -1
- package/dist/toolbar-3f93ec4b.js +0 -2
- package/dist/toolbar-3f93ec4b.js.map +0 -1
- package/dist/toolbar-e4c551ae.js +0 -2
- package/dist/toolbar-e4c551ae.js.map +0 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import"../createClass-be661622.js";import"../isArrayLikeObject-a9c7973b.js";export{C as default}from"../canvas-controller-
|
|
1
|
+
import"../createClass-be661622.js";import"../isArrayLikeObject-a9c7973b.js";export{C as default}from"../canvas-controller-fefee807.js";import"./command-stack.es.js";import"../canvas-constants-ba465147.js";import"../canvas-logger-27d3180d.js";import"../getPrototypeOf-3751add9.js";import"../datarecord-metadata-v3-schema-ba1f2849.js";import"../en-7201b548.js";import"uuid";import"redux";import"jsonschema";import"@elyra/pipeline-schemas";import"immutable";
|
|
2
2
|
//# sourceMappingURL=canvas-controller.es.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";require("../createClass-826941b3.js"),require("../isArrayLikeObject-f3b27f64.js");var e=require("../canvas-controller-
|
|
1
|
+
"use strict";require("../createClass-826941b3.js"),require("../isArrayLikeObject-f3b27f64.js");var e=require("../canvas-controller-df16f0fa.js");require("./command-stack.js"),require("../canvas-constants-07dbe4b7.js"),require("../canvas-logger-bb537fb3.js"),require("../getPrototypeOf-1e698126.js"),require("../datarecord-metadata-v3-schema-6a3754ce.js"),require("../en-a08356c8.js"),require("uuid"),require("redux"),require("jsonschema"),require("@elyra/pipeline-schemas"),require("immutable"),module.exports=e.CanvasController;
|
|
2
2
|
//# sourceMappingURL=canvas-controller.js.map
|
package/dist/lib/canvas.es.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{c as CommonCanvas}from"../common-canvas-
|
|
1
|
+
export{c as CommonCanvas}from"../common-canvas-55d075fe.js";export{C as CanvasController}from"../canvas-controller-fefee807.js";import"../createClass-be661622.js";import"../getPrototypeOf-3751add9.js";import"react";import"react-redux";import"react-intl";import"../isArrayLikeObject-a9c7973b.js";import"../icon-4a6f3dad.js";import"../extends-a9c1b4cd.js";import"react-inlinesvg";import"@carbon/icons-react";import"../canvas-constants-ba465147.js";import"../toolbar-c8779b93.js";import"../datarecord-metadata-v3-schema-ba1f2849.js";import"../en-7201b548.js";import"react-resize-detector";import"./tooltip.es.js";import"react-portal";import"carbon-components-react";import"../canvas-logger-27d3180d.js";import"./context-menu.es.js";import"react-contextmenu";import"../_baseForOwn-d38b560e.js";import"./command-stack.es.js";import"immutable";import"uuid";import"redux";import"jsonschema";import"@elyra/pipeline-schemas";
|
|
2
2
|
//# sourceMappingURL=canvas.es.js.map
|
package/dist/lib/canvas.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../common-canvas-
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../common-canvas-e8a7a840.js"),r=require("../canvas-controller-df16f0fa.js");require("../createClass-826941b3.js"),require("../getPrototypeOf-1e698126.js"),require("react"),require("react-redux"),require("react-intl"),require("../isArrayLikeObject-f3b27f64.js"),require("../icon-f6f2bffc.js"),require("../extends-841b39ac.js"),require("react-inlinesvg"),require("@carbon/icons-react"),require("../canvas-constants-07dbe4b7.js"),require("../toolbar-96922752.js"),require("../datarecord-metadata-v3-schema-6a3754ce.js"),require("../en-a08356c8.js"),require("react-resize-detector"),require("./tooltip.js"),require("react-portal"),require("carbon-components-react"),require("../canvas-logger-bb537fb3.js"),require("./context-menu.js"),require("react-contextmenu"),require("../_baseForOwn-7d4e8506.js"),require("./command-stack.js"),require("immutable"),require("uuid"),require("redux"),require("jsonschema"),require("@elyra/pipeline-schemas"),exports.CommonCanvas=e.commonCanvas,exports.CanvasController=r.CanvasController;
|
|
2
2
|
//# sourceMappingURL=canvas.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{_ as e,a as t}from"../createClass-be661622.js";import{_ as n,a as o,b as r,c}from"../getPrototypeOf-3751add9.js";import i from"react";import{_ as a,C as l}from"../canvas-constants-ba465147.js";import{_ as u}from"../extends-
|
|
1
|
+
import{_ as e,a as t}from"../createClass-be661622.js";import{_ as n,a as o,b as r,c}from"../getPrototypeOf-3751add9.js";import i from"react";import{_ as a,C as l}from"../canvas-constants-ba465147.js";import{_ as u}from"../extends-a9c1b4cd.js";import{MenuItem as s,SubMenu as d}from"react-contextmenu";import{I as m}from"../icon-4a6f3dad.js";import{L as f}from"../canvas-logger-27d3180d.js";import"react-inlinesvg";import"@carbon/icons-react";function p(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,c=o(e);if(t){var i=o(this).constructor;n=Reflect.construct(c,arguments,i)}else n=c.apply(this,arguments);return r(this,n)}}var h=function(o){n(a,o);var r=p(a);function a(t){var n;return e(this,a),(n=r.call(this,t)).logger=new f("CC-ContextMenu"),n.onClick=n.onClick.bind(c(n)),n}return t(a,[{key:"onClick",value:function(e){var t=e.target.dataset.color;this.props.clickActionHandler(t)}},{key:"render",value:function(){return this.logger.log("render"),i.createElement("div",{className:"color-picker-panel",onClick:this.onClick},i.createElement("div",{tabIndex:"0","data-color":"bkg-col-white-0",className:"color-picker-item white-0"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-yellow-20",className:"color-picker-item yellow-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-gray-20",className:"color-picker-item gray-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-green-20",className:"color-picker-item green-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-teal-20",className:"color-picker-item teal-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-cyan-20",className:"color-picker-item cyan-20"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-red-50",className:"color-picker-item red-50"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-orange-40",className:"color-picker-item orange-40"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-gray-50",className:"color-picker-item gray-50"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-green-50",className:"color-picker-item green-50"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-teal-50",className:"color-picker-item teal-50"}),i.createElement("div",{tabIndex:"0","data-color":"bkg-col-cyan-50",className:"color-picker-item cyan-50"}))}}]),a}(i.Component);function v(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,c=o(e);if(t){var i=o(this).constructor;n=Reflect.construct(c,arguments,i)}else n=c.apply(this,arguments);return r(this,n)}}var k=function(o){n(f,o);var r=v(f);function f(t){var n;return e(this,f),(n=r.call(this,t)).state={},n.itemSelected=n.itemSelected.bind(c(n)),n.colorClicked=n.colorClicked.bind(c(n)),n}return t(f,[{key:"onContextMenu",value:function(e){e.preventDefault()}},{key:"itemSelected",value:function(e,t){this.props.contextHandler(e),t&&t.stopPropagation()}},{key:"colorClicked",value:function(e){this.props.contextHandler("colorSelectedObjects",{color:e})}},{key:"calculateMenuSize",value:function(e){for(var t=0,n=0;n<e.length;++n){e[n].divider&&t++}return{height:30*(e.length-t)+1*t,width:160}}},{key:"calculateMenuPos",value:function(e,t,n){var o={x:e.x,y:e.y};return e.y+t.height>n.height&&(o.y=n.height-t.height-5,o.y<0&&(o.y=0)),e.x+t.width>n.width&&(o.x-=t.width),o.x+=1,o.y+=1,o}},{key:"areAllSubmenuItemsDisabled",value:function(e){var t=0,n=0;return e.forEach((function(e){e.divider||t++,!1===e.enable&&n++})),n===t}},{key:"buildMenu",value:function(e,t,n,o){for(var r={className:"contextmenu-divider"},c=[],a=0,l=!1,d=0;d<e.length;++d){var m=e[d].divider,f=e[d].submenu;if(m)l||(c.push(i.createElement(s,{attributes:r,key:d+1,onClick:function(){},divider:!0})),a+=1,l=!0);else if(f)if(l=!1,"colorPicker"===e[d].menu){var p={width:160,height:50},h=this.buildColorPickerPanel(),v=this.buildSubMenu(e,d,h,a,n,t,p,o,!1);c.push(v),a+=30}else{var k={disabled:this.areAllSubmenuItemsDisabled(e[d].menu)},y=this.calculateMenuSize(e[d].menu),b=this.buildMenu(e[d].menu,t,n,o),g=this.buildSubMenu(e,d,b,a,n,t,y,o,k);c.push(g),a+=30}else{l=!1;var x={disabled:!1===e[d].enable};c.push(i.createElement(s,u({onClick:this.itemSelected.bind(null,e[d].action),key:d+1},x),e[d].label)),a+=30}}return c}},{key:"buildColorPickerPanel",value:function(){return i.createElement(h,a({clickActionHandler:this.colorPickHandler},"clickActionHandler",this.colorClicked))}},{key:"buildSubMenu",value:function(e,t,n,o,r,c,a,s,f){var p=this.buildRtlState(r,c,a,s),h=this.buildSubMenuPosStyle(o,r,a,s),v=i.createElement(m,{type:l.CHEVRONARROWS.RIGHT,disabled:!1,className:"react-contextmenu-submenu-icon"}),k=i.createElement("div",null,e[t].label,v," ");return i.createElement(d,u({title:k,key:t+1,className:"contextmenu-submenu",rtl:p},f),i.createElement("div",{key:t+1,style:h,className:"context-menu-popover"},n))}},{key:"buildRtlState",value:function(e,t,n,o){return e.x+t.width+n.width>o.right}},{key:"buildSubMenuPosStyle",value:function(e,t,n,o){var r=o.bottom-(t.y+e+n.height);return{top:(r>0?0:r-5)+"px"}}},{key:"render",value:function(){var e=this.calculateMenuSize(this.props.menuDefinition),t=this.calculateMenuPos(this.props.mousePos,e,this.props.canvasRect),n={left:t.x+"px",top:t.y+"px"},o=this.buildMenu(this.props.menuDefinition,e,t,this.props.canvasRect);return i.createElement("div",{id:"context-menu-popover",className:"context-menu-popover",style:n,onContextMenu:this.onContextMenu},o)}}]),f}(i.Component);function y(e){var t=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var n,c=o(e);if(t){var i=o(this).constructor;n=Reflect.construct(c,arguments,i)}else n=c.apply(this,arguments);return r(this,n)}}var b=function(o){n(a,o);var r=y(a);function a(t){var n;return e(this,a),(n=r.call(this,t)).state={},n.contextMenuClicked=n.contextMenuClicked.bind(c(n)),n.handleClickOutside=n.handleClickOutside.bind(c(n)),n}return t(a,[{key:"componentDidMount",value:function(){document.addEventListener("click",this.handleClickOutside,!0)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.handleClickOutside,!0)}},{key:"getCanvasRect",value:function(){var e=document.getElementById(this.props.containingDivId).getBoundingClientRect();return{top:0,bottom:e.bottom-e.top,left:0,right:e.right-e.left,height:e.height,width:e.width}}},{key:"handleClickOutside",value:function(e){e.ctrlKey?e.stopPropagation():this.isOverContextMenu(e)||this.isOverEllipsisButton(e)||(this.props.stopPropagation&&e.stopPropagation(),this.props.closeContextMenu())}},{key:"isOverContextMenu",value:function(e){var t=document.getElementById("context-menu-popover");return!t||t.contains(e.target)}},{key:"isOverEllipsisButton",value:function(e){for(var t=document.getElementsByClassName("d3-node-ellipsis-group"),n=!1,o=0;o<t.length;o++)!1===n&&t[o].contains(e.target)&&(n=!0);return n}},{key:"contextMenuClicked",value:function(e,t){this.props.contextMenuActionHandler(e,t)}},{key:"render",value:function(){return i.createElement(k,{contextHandler:this.contextMenuClicked,menuDefinition:this.props.contextMenuDef,canvasRect:this.getCanvasRect(),mousePos:this.props.contextMenuPos})}}]),a}(i.Component);export{b as default};
|
|
2
2
|
//# sourceMappingURL=context-menu.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-menu.es.js","sources":["../../src/color-picker/color-picker-panel.jsx","../../src/context-menu/common-context-menu.jsx","../../src/context-menu/context-menu-wrapper.jsx"],"sourcesContent":["/*\n * Copyright 2022 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 Logger from \"../logging/canvas-logger.js\";\n\n\nclass ColorPickerPanel extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.logger = new Logger(\"CC-ContextMenu\");\n\n\t\tthis.onClick = this.onClick.bind(this);\n\t}\n\n\tonClick(evt) {\n\t\tconst color = evt.target.dataset.color;\n\t\tthis.props.clickActionHandler(color);\n\t}\n\n\trender() {\n\t\tthis.logger.log(\"render\");\n\t\treturn (\n\t\t\t<div className=\"color-picker-panel\" onClick={this.onClick}>\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-white-0\"} className=\"color-picker-item white-0\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-yellow-20\"} className=\"color-picker-item yellow-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-20\"} className=\"color-picker-item gray-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-20\"} className=\"color-picker-item green-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-20\"} className=\"color-picker-item teal-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-20\"} className=\"color-picker-item cyan-20\" />\n\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-red-50\"} className=\"color-picker-item red-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-orange-40\"} className=\"color-picker-item orange-40\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-50\"} className=\"color-picker-item gray-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-50\"} className=\"color-picker-item green-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-50\"} className=\"color-picker-item teal-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-50\"} className=\"color-picker-item cyan-50\" />\n\t\t\t</div>);\n\t}\n}\n\nColorPickerPanel.propTypes = {\n\tclickActionHandler: PropTypes.func.isRequired,\n\tcloseMenu: PropTypes.func\n};\n\nexport default ColorPickerPanel;\n","/*\n * Copyright 2017-2022 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/* eslint no-empty-function: [\"error\", { \"allow\": [\"arrowFunctions\"] }] */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { MenuItem, SubMenu } from \"react-contextmenu\";\nimport Icon from \"../icons/icon.jsx\";\nimport { CONTEXT_MENU_CARBON_ICONS } from \"../common-canvas/constants/canvas-constants\";\nimport ColorPickerPanel from \"../color-picker/color-picker-panel.jsx\";\n\n// context-menu sizing\nconst CONTEXT_MENU_WIDTH = 160; // see context-menu.css .react-context-menu margin\nconst CONTEXT_MENU_LINK_HEIGHT = 30; // see context-menu.css .react-context-menu-item height\nconst CONTEXT_MENU_DIVIDER_HEIGHT = 1; // see context-menu.css .react-context-menu-item height\nconst EXTRA_OFFSET = 5; // Extra offset for vertical menu positioning\n\n\nclass CommonContextMenu extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\t\tthis.itemSelected = this.itemSelected.bind(this);\n\t\tthis.colorClicked = this.colorClicked.bind(this);\n\t}\n\n\tonContextMenu(e) {\n\t\te.preventDefault();\n\t}\n\n\titemSelected(data, selectedEvent) {\n\t\tthis.props.contextHandler(data);\n\t\t// This stops the canvasClicked function from being fired which would\n\t\t// clear any current selections.\n\t\tif (selectedEvent) {\n\t\t\tselectedEvent.stopPropagation();\n\t\t}\n\t}\n\n\tcolorClicked(color) {\n\t\tthis.props.contextHandler(\"colorSelectedObjects\", { color });\n\t}\n\n\tcalculateMenuSize(menu) {\n\t\tvar numDividers = 0;\n\t\tfor (let i = 0; i < menu.length; ++i) {\n\t\t\tconst divider = menu[i].divider;\n\t\t\tif (divider) {\n\t\t\t\tnumDividers++;\n\t\t\t}\n\t\t}\n\n\t\tvar menuSize = {\n\t\t\theight: ((menu.length - numDividers) * CONTEXT_MENU_LINK_HEIGHT) + (numDividers * CONTEXT_MENU_DIVIDER_HEIGHT),\n\t\t\twidth: CONTEXT_MENU_WIDTH\n\t\t};\n\n\t\treturn menuSize;\n\t}\n\n\t// Returns a new position and the canvas rectangle for the context menu based on the current\n\t// mouse position and whether the menu would appear outside the edges of the page.\n\tcalculateMenuPos(mousePos, menuSize, canvasRect) {\n\t\tconst menuPos = { x: mousePos.x, y: mousePos.y };\n\n\t\t// Reposition contextMenu if it will show off the bottom of the page\n\t\tif (mousePos.y + menuSize.height > canvasRect.height) {\n\t\t\tmenuPos.y = canvasRect.height - menuSize.height - EXTRA_OFFSET; // Move up by extra offset so it looks nice\n\n\t\t\t// If repositioning the menu would push it off the top of the page\n\t\t\t// (in very short browser windows) position it at the top.\n\t\t\tif (menuPos.y < 0) {\n\t\t\t\tmenuPos.y = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Reposition contextMenu if it will show off the right of the page\n\t\tif (mousePos.x + menuSize.width > canvasRect.width) {\n\t\t\tmenuPos.x -= menuSize.width;\n\t\t}\n\n\t\t// Add a pixel to x and y because on Chrome without this the context menu\n\t\t// appears with the top corner of the first menu item under the mouse\n\t\t// cursor. This highlights the first menu item (which looks weird) and, if\n\t\t// the first item is a cascade menu, automatically opens the sub-menu.\n\t\tmenuPos.x += 1;\n\t\tmenuPos.y += 1;\n\n\t\treturn menuPos;\n\t}\n\n\tareAllSubmenuItemsDisabled(submenuItems) {\n\t\tlet itemCount = 0;\n\t\tlet disabledCount = 0;\n\t\tsubmenuItems.forEach(function(submenuItem) {\n\t\t\tif (!submenuItem.divider) {\n\t\t\t\titemCount++;\n\t\t\t}\n\t\t\tif (submenuItem.enable === false) {\n\t\t\t\tdisabledCount++;\n\t\t\t}\n\t\t});\n\t\treturn disabledCount === itemCount;\n\t}\n\n\tbuildMenu(menuDefinition, menuSize, menuPos, canvasRect) {\n\t\tconst customDivider = {\n\t\t\tclassName: \"contextmenu-divider\"\n\t\t};\n\n\t\tconst menuItems = [];\n\n\t\tlet runningYPos = 0;\n\t\t// Records if we have just displayed a divider. This is useful because we\n\t\t// only want to display one divider if there is a divider element\n\t\t// immediately after another divider element in the menuDefintion array.\n\t\tlet previousDivider = false;\n\n\t\tfor (let i = 0; i < menuDefinition.length; ++i) {\n\t\t\tconst divider = menuDefinition[i].divider;\n\t\t\tconst submenu = menuDefinition[i].submenu;\n\n\t\t\tif (divider) {\n\t\t\t\tif (!previousDivider) {\n\t\t\t\t\tmenuItems.push(<MenuItem attributes={customDivider} key={i + 1} onClick={() => {}} divider />);\n\t\t\t\t\trunningYPos += CONTEXT_MENU_DIVIDER_HEIGHT;\n\t\t\t\t\tpreviousDivider = true;\n\t\t\t\t}\n\n\t\t\t} else if (submenu) {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tif (menuDefinition[i].menu === \"colorPicker\") {\n\t\t\t\t\tconst disabled = false;\n\t\t\t\t\tconst subMenuSize = { width: CONTEXT_MENU_WIDTH, height: 50 };\n\t\t\t\t\tconst subMenuContent = this.buildColorPickerPanel();\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\n\t\t\t\t} else {\n\t\t\t\t\tconst disabled = { disabled: this.areAllSubmenuItemsDisabled(menuDefinition[i].menu) };\n\t\t\t\t\tconst subMenuSize = this.calculateMenuSize(menuDefinition[i].menu);\n\t\t\t\t\tconst subMenuContent = this.buildMenu(menuDefinition[i].menu, menuSize, menuPos, canvasRect);\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = { disabled: menuDefinition[i].enable === false };\n\t\t\t\tmenuItems.push(\n\t\t\t\t\t<MenuItem onClick={this.itemSelected.bind(null, menuDefinition[i].action)} key={i + 1} {...disabled}>\n\t\t\t\t\t\t{menuDefinition[i].label}\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t}\n\t\t}\n\t\treturn menuItems;\n\t}\n\n\tbuildColorPickerPanel() {\n\t\treturn (\n\t\t\t<ColorPickerPanel clickActionHandler={this.colorPickHandler} clickActionHandler={this.colorClicked} />\n\t\t);\n\t}\n\n\tbuildSubMenu(menuDefinition, index, subMenuContent, runningYPos, menuPos,\n\t\tmenuSize, subMenuSize, canvasRect, disabled) {\n\t\tconst rtl = this.buildRtlState(menuPos, menuSize, subMenuSize, canvasRect);\n\t\tconst subMenuPosStyle = this.buildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect);\n\n\t\tconst icon = <Icon type={CONTEXT_MENU_CARBON_ICONS.CHEVRONARROWS.RIGHT} disabled={false} className={\"react-contextmenu-submenu-icon\"} />;\n\t\tconst menuItem = <div>{menuDefinition[index].label}{icon} </div>;\n\n\t\treturn (\n\t\t\t<SubMenu title={menuItem} key={index + 1} className=\"contextmenu-submenu\" rtl={rtl} {...disabled}>\n\t\t\t\t<div key={index + 1} style={subMenuPosStyle} className=\"context-menu-popover\">\n\t\t\t\t\t{subMenuContent}\n\t\t\t\t</div>\n\t\t\t</SubMenu>\n\t\t);\n\t}\n\n\t// Returns a boolean to indicate whether the submenu should appear on the\n\t// right of the context menu (rtl === false) or on the left of the context\n\t// menu (rtl === true).\n\tbuildRtlState(menuPos, menuSize, subMenuSize, canvasRect) {\n\t\t// Ensure that the combined menu position, plus the menu width,\n\t\t// plus the submenu width, does not exceed the viewport bounds.\n\t\treturn (menuPos.x + menuSize.width + subMenuSize.width > canvasRect.right);\n\n\t}\n\n\t// Returns a style object that can be applied to the sub-menu to adjust\n\t// its vertical (y) position. This may be necessary if the submenu is tall\n\t// enough that it would be displayed off the bottom of the canvas area.\n\tbuildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect) {\n\t\t// Does the submenu go below the bottom of the viewport?\n\t\tconst y = canvasRect.bottom - (menuPos.y + runningYPos + subMenuSize.height);\n\n\t\t// If submenu is not below the viewport bottom set offset to 0 so the\n\t\t// submenu will not be moved. Otherwise, y will be used to move the\n\t\t// submenu up fully into the view port.\n\t\tconst offset = (y > 0) ? 0 : y - EXTRA_OFFSET;\n\n\t\tconst subMenuPosStyle = {\n\t\t\ttop: offset + \"px\" // Use negative to push the menu up\n\t\t};\n\t\treturn subMenuPosStyle;\n\t}\n\n\trender() {\n\t\t// Reposition contextMenu so that it does not show off the screen\n\t\tconst menuSize = this.calculateMenuSize(this.props.menuDefinition);\n\t\tconst menuPos = this.calculateMenuPos(this.props.mousePos, menuSize, this.props.canvasRect);\n\t\tconst posStyle = {\n\t\t\tleft: menuPos.x + \"px\",\n\t\t\ttop: menuPos.y + \"px\"\n\t\t};\n\n\t\tconst menuItems = this.buildMenu(this.props.menuDefinition, menuSize, menuPos, this.props.canvasRect);\n\n\t\treturn (\n\t\t\t<div id=\"context-menu-popover\" className=\"context-menu-popover\" style={posStyle} onContextMenu={this.onContextMenu}>\n\t\t\t\t{menuItems}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nCommonContextMenu.propTypes = {\n\tcontextHandler: PropTypes.func.isRequired,\n\tmenuDefinition: PropTypes.array.isRequired,\n\tcanvasRect: PropTypes.object.isRequired,\n\tmousePos: PropTypes.object.isRequired\n};\n\nexport default CommonContextMenu;\n","/*\n * Copyright 2017-2022 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 CommonContextMenu from \"./common-context-menu.jsx\";\n\nexport default class ContextMenuWrapper extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\n\t\tthis.contextMenuClicked = this.contextMenuClicked.bind(this);\n\t\tthis.handleClickOutside = this.handleClickOutside.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tdocument.addEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\tcomponentWillUnmount() {\n\t\tdocument.removeEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\t// Returns an object that describes the dimensions of a rectangle for the\n\t// canvas div with coordinates based on the top left corner of the div. This\n\t// will match the coordinates for the mouse position where the user clicked,\n\t// which is specified in this.props.contextMenuPos object.\n\tgetCanvasRect() {\n\t\tconst containingDiv = document.getElementById(this.props.containingDivId);\n\t\tconst clientRect = containingDiv.getBoundingClientRect();\n\t\tconst canvasRect = {\n\t\t\ttop: 0,\n\t\t\tbottom: clientRect.bottom - clientRect.top,\n\t\t\tleft: 0,\n\t\t\tright: clientRect.right - clientRect.left,\n\t\t\theight: clientRect.height,\n\t\t\twidth: clientRect.width\n\t\t};\n\n\t\treturn canvasRect;\n\t}\n\n\thandleClickOutside(e) {\n\t\t// On Safari, when a user is displaying the context menu with a ctrl-click\n\t\t// (which is a supported context menu gesture on the Mac) a secondary click\n\t\t// event is emmitted which is received here with the ctrlKey field enabled.\n\t\t// So we ignore that event otherwse, if we continue, the context menu will\n\t\t// be closed.\n\t\tif (e.ctrlKey) {\n\t\t\te.stopPropagation();\n\t\t\treturn;\n\t\t}\n\n\t\t// If the click was anywhere outside the context menu and\n\t\t// the ellipsis button we just close the menu.\n\t\tif (!this.isOverContextMenu(e) && !this.isOverEllipsisButton(e)) {\n\t\t\t// This stop propagation is needed in common canvas so that selected nodes will\n\t\t\t// remain selected even after clicking outside the context menu to close the menu.\n\t\t\tif (this.props.stopPropagation) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\tthis.props.closeContextMenu();\n\t\t}\n\t}\n\n\t// Retruns true if the event occurred over the context menu.\n\tisOverContextMenu(e) {\n\t\tconst domNode = document.getElementById(\"context-menu-popover\");\n\t\treturn !domNode || domNode.contains(e.target);\n\t}\n\n\t// Returns true if the event occurred over the ellipsis button. Typically\n\t// there will be only one ellipsis button on the canvas, since they are only\n\t// displayed on hover, but in some test cicumstances there might be more\n\t// than one.\n\tisOverEllipsisButton(e) {\n\t\tconst ellipsisNodes = document.getElementsByClassName(\"d3-node-ellipsis-group\");\n\t\tlet state = false;\n\t\tfor (let i = 0; i < ellipsisNodes.length; i++) {\n\t\t\tif (state === false && ellipsisNodes[i].contains(e.target)) {\n\t\t\t\tstate = true;\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t}\n\n\tcontextMenuClicked(action, param) {\n\t\tthis.props.contextMenuActionHandler(action, param);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<CommonContextMenu\n\t\t\t\tcontextHandler={this.contextMenuClicked}\n\t\t\t\tmenuDefinition={this.props.contextMenuDef}\n\t\t\t\tcanvasRect={this.getCanvasRect()}\n\t\t\t\tmousePos={this.props.contextMenuPos}\n\t\t\t/>\n\t\t);\n\t}\n}\n\nContextMenuWrapper.propTypes = {\n\tcontextMenuDef: PropTypes.array.isRequired,\n\tcontainingDivId: PropTypes.string.isRequired,\n\tcontextMenuPos: PropTypes.object.isRequired,\n\tcontextMenuActionHandler: PropTypes.func.isRequired,\n\tcloseContextMenu: PropTypes.func.isRequired,\n\tstopPropagation: PropTypes.bool\n};\n"],"names":["_inherits","props","_classCallCheck","_this","logger","Logger","onClick","bind","_createClass","key","value","evt","color","target","dataset","this","clickActionHandler","log","React","className","tabIndex","Component","state","itemSelected","colorClicked","e","preventDefault","data","selectedEvent","contextHandler","stopPropagation","menu","numDividers","i","length","divider","height","width","mousePos","menuSize","canvasRect","menuPos","x","y","submenuItems","itemCount","disabledCount","forEach","submenuItem","enable","menuDefinition","customDivider","menuItems","runningYPos","previousDivider","submenu","push","MenuItem","attributes","subMenuSize","subMenuContent","buildColorPickerPanel","subMenu","buildSubMenu","disabled","areAllSubmenuItemsDisabled","calculateMenuSize","buildMenu","action","label","ColorPickerPanel","colorPickHandler","index","rtl","buildRtlState","subMenuPosStyle","buildSubMenuPosStyle","icon","Icon","type","CONTEXT_MENU_CARBON_ICONS","CHEVRONARROWS","RIGHT","menuItem","SubMenu","title","style","right","bottom","top","calculateMenuPos","posStyle","left","id","onContextMenu","ContextMenuWrapper","contextMenuClicked","handleClickOutside","document","addEventListener","removeEventListener","clientRect","getElementById","containingDivId","getBoundingClientRect","ctrlKey","isOverContextMenu","isOverEllipsisButton","closeContextMenu","domNode","contains","ellipsisNodes","getElementsByClassName","param","contextMenuActionHandler","CommonContextMenu","contextMenuDef","getCanvasRect","contextMenuPos"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context-menu.es.js","sources":["../../src/color-picker/color-picker-panel.jsx","../../src/context-menu/common-context-menu.jsx","../../src/context-menu/context-menu-wrapper.jsx"],"sourcesContent":["/*\n * Copyright 2022 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 Logger from \"../logging/canvas-logger.js\";\n\n\nclass ColorPickerPanel extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.logger = new Logger(\"CC-ContextMenu\");\n\n\t\tthis.onClick = this.onClick.bind(this);\n\t}\n\n\tonClick(evt) {\n\t\tconst color = evt.target.dataset.color;\n\t\tthis.props.clickActionHandler(color);\n\t}\n\n\trender() {\n\t\tthis.logger.log(\"render\");\n\t\treturn (\n\t\t\t<div className=\"color-picker-panel\" onClick={this.onClick}>\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-white-0\"} className=\"color-picker-item white-0\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-yellow-20\"} className=\"color-picker-item yellow-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-20\"} className=\"color-picker-item gray-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-20\"} className=\"color-picker-item green-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-20\"} className=\"color-picker-item teal-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-20\"} className=\"color-picker-item cyan-20\" />\n\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-red-50\"} className=\"color-picker-item red-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-orange-40\"} className=\"color-picker-item orange-40\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-50\"} className=\"color-picker-item gray-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-50\"} className=\"color-picker-item green-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-50\"} className=\"color-picker-item teal-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-50\"} className=\"color-picker-item cyan-50\" />\n\t\t\t</div>);\n\t}\n}\n\nColorPickerPanel.propTypes = {\n\tclickActionHandler: PropTypes.func.isRequired,\n\tcloseMenu: PropTypes.func\n};\n\nexport default ColorPickerPanel;\n","/*\n * Copyright 2017-2022 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/* eslint no-empty-function: [\"error\", { \"allow\": [\"arrowFunctions\"] }] */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { MenuItem, SubMenu } from \"react-contextmenu\";\nimport Icon from \"../icons/icon.jsx\";\nimport { CONTEXT_MENU_CARBON_ICONS } from \"../common-canvas/constants/canvas-constants\";\nimport ColorPickerPanel from \"../color-picker/color-picker-panel.jsx\";\n\n// context-menu sizing\nconst CONTEXT_MENU_WIDTH = 160; // see context-menu.css .react-context-menu margin\nconst CONTEXT_MENU_LINK_HEIGHT = 30; // see context-menu.css .react-context-menu-item height\nconst CONTEXT_MENU_DIVIDER_HEIGHT = 1; // see context-menu.css .react-context-menu-item height\nconst EXTRA_OFFSET = 5; // Extra offset for vertical menu positioning\n\n\nclass CommonContextMenu extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\t\tthis.itemSelected = this.itemSelected.bind(this);\n\t\tthis.colorClicked = this.colorClicked.bind(this);\n\t}\n\n\tonContextMenu(e) {\n\t\te.preventDefault();\n\t}\n\n\titemSelected(data, selectedEvent) {\n\t\tthis.props.contextHandler(data);\n\t\t// This stops the canvasClicked function from being fired which would\n\t\t// clear any current selections.\n\t\tif (selectedEvent) {\n\t\t\tselectedEvent.stopPropagation();\n\t\t}\n\t}\n\n\tcolorClicked(color) {\n\t\tthis.props.contextHandler(\"colorSelectedObjects\", { color });\n\t}\n\n\tcalculateMenuSize(menu) {\n\t\tvar numDividers = 0;\n\t\tfor (let i = 0; i < menu.length; ++i) {\n\t\t\tconst divider = menu[i].divider;\n\t\t\tif (divider) {\n\t\t\t\tnumDividers++;\n\t\t\t}\n\t\t}\n\n\t\tvar menuSize = {\n\t\t\theight: ((menu.length - numDividers) * CONTEXT_MENU_LINK_HEIGHT) + (numDividers * CONTEXT_MENU_DIVIDER_HEIGHT),\n\t\t\twidth: CONTEXT_MENU_WIDTH\n\t\t};\n\n\t\treturn menuSize;\n\t}\n\n\t// Returns a new position and the canvas rectangle for the context menu based on the current\n\t// mouse position and whether the menu would appear outside the edges of the page.\n\tcalculateMenuPos(mousePos, menuSize, canvasRect) {\n\t\tconst menuPos = { x: mousePos.x, y: mousePos.y };\n\n\t\t// Reposition contextMenu if it will show off the bottom of the page\n\t\tif (mousePos.y + menuSize.height > canvasRect.height) {\n\t\t\tmenuPos.y = canvasRect.height - menuSize.height - EXTRA_OFFSET; // Move up by extra offset so it looks nice\n\n\t\t\t// If repositioning the menu would push it off the top of the page\n\t\t\t// (in very short browser windows) position it at the top.\n\t\t\tif (menuPos.y < 0) {\n\t\t\t\tmenuPos.y = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Reposition contextMenu if it will show off the right of the page\n\t\tif (mousePos.x + menuSize.width > canvasRect.width) {\n\t\t\tmenuPos.x -= menuSize.width;\n\t\t}\n\n\t\t// Add a pixel to x and y because on Chrome without this the context menu\n\t\t// appears with the top corner of the first menu item under the mouse\n\t\t// cursor. This highlights the first menu item (which looks weird) and, if\n\t\t// the first item is a cascade menu, automatically opens the sub-menu.\n\t\tmenuPos.x += 1;\n\t\tmenuPos.y += 1;\n\n\t\treturn menuPos;\n\t}\n\n\tareAllSubmenuItemsDisabled(submenuItems) {\n\t\tlet itemCount = 0;\n\t\tlet disabledCount = 0;\n\t\tsubmenuItems.forEach(function(submenuItem) {\n\t\t\tif (!submenuItem.divider) {\n\t\t\t\titemCount++;\n\t\t\t}\n\t\t\tif (submenuItem.enable === false) {\n\t\t\t\tdisabledCount++;\n\t\t\t}\n\t\t});\n\t\treturn disabledCount === itemCount;\n\t}\n\n\tbuildMenu(menuDefinition, menuSize, menuPos, canvasRect) {\n\t\tconst customDivider = {\n\t\t\tclassName: \"contextmenu-divider\"\n\t\t};\n\n\t\tconst menuItems = [];\n\n\t\tlet runningYPos = 0;\n\t\t// Records if we have just displayed a divider. This is useful because we\n\t\t// only want to display one divider if there is a divider element\n\t\t// immediately after another divider element in the menuDefintion array.\n\t\tlet previousDivider = false;\n\n\t\tfor (let i = 0; i < menuDefinition.length; ++i) {\n\t\t\tconst divider = menuDefinition[i].divider;\n\t\t\tconst submenu = menuDefinition[i].submenu;\n\n\t\t\tif (divider) {\n\t\t\t\tif (!previousDivider) {\n\t\t\t\t\tmenuItems.push(<MenuItem attributes={customDivider} key={i + 1} onClick={() => {}} divider />);\n\t\t\t\t\trunningYPos += CONTEXT_MENU_DIVIDER_HEIGHT;\n\t\t\t\t\tpreviousDivider = true;\n\t\t\t\t}\n\n\t\t\t} else if (submenu) {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tif (menuDefinition[i].menu === \"colorPicker\") {\n\t\t\t\t\tconst disabled = false;\n\t\t\t\t\tconst subMenuSize = { width: CONTEXT_MENU_WIDTH, height: 50 };\n\t\t\t\t\tconst subMenuContent = this.buildColorPickerPanel();\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\n\t\t\t\t} else {\n\t\t\t\t\tconst disabled = { disabled: this.areAllSubmenuItemsDisabled(menuDefinition[i].menu) };\n\t\t\t\t\tconst subMenuSize = this.calculateMenuSize(menuDefinition[i].menu);\n\t\t\t\t\tconst subMenuContent = this.buildMenu(menuDefinition[i].menu, menuSize, menuPos, canvasRect);\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = { disabled: menuDefinition[i].enable === false };\n\t\t\t\tmenuItems.push(\n\t\t\t\t\t<MenuItem onClick={this.itemSelected.bind(null, menuDefinition[i].action)} key={i + 1} {...disabled}>\n\t\t\t\t\t\t{menuDefinition[i].label}\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t}\n\t\t}\n\t\treturn menuItems;\n\t}\n\n\tbuildColorPickerPanel() {\n\t\treturn (\n\t\t\t<ColorPickerPanel clickActionHandler={this.colorPickHandler} clickActionHandler={this.colorClicked} />\n\t\t);\n\t}\n\n\tbuildSubMenu(menuDefinition, index, subMenuContent, runningYPos, menuPos,\n\t\tmenuSize, subMenuSize, canvasRect, disabled) {\n\t\tconst rtl = this.buildRtlState(menuPos, menuSize, subMenuSize, canvasRect);\n\t\tconst subMenuPosStyle = this.buildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect);\n\n\t\tconst icon = <Icon type={CONTEXT_MENU_CARBON_ICONS.CHEVRONARROWS.RIGHT} disabled={false} className={\"react-contextmenu-submenu-icon\"} />;\n\t\tconst menuItem = <div>{menuDefinition[index].label}{icon} </div>;\n\n\t\treturn (\n\t\t\t<SubMenu title={menuItem} key={index + 1} className=\"contextmenu-submenu\" rtl={rtl} {...disabled}>\n\t\t\t\t<div key={index + 1} style={subMenuPosStyle} className=\"context-menu-popover\">\n\t\t\t\t\t{subMenuContent}\n\t\t\t\t</div>\n\t\t\t</SubMenu>\n\t\t);\n\t}\n\n\t// Returns a boolean to indicate whether the submenu should appear on the\n\t// right of the context menu (rtl === false) or on the left of the context\n\t// menu (rtl === true).\n\tbuildRtlState(menuPos, menuSize, subMenuSize, canvasRect) {\n\t\t// Ensure that the combined menu position, plus the menu width,\n\t\t// plus the submenu width, does not exceed the viewport bounds.\n\t\treturn (menuPos.x + menuSize.width + subMenuSize.width > canvasRect.right);\n\n\t}\n\n\t// Returns a style object that can be applied to the sub-menu to adjust\n\t// its vertical (y) position. This may be necessary if the submenu is tall\n\t// enough that it would be displayed off the bottom of the canvas area.\n\tbuildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect) {\n\t\t// Does the submenu go below the bottom of the viewport?\n\t\tconst y = canvasRect.bottom - (menuPos.y + runningYPos + subMenuSize.height);\n\n\t\t// If submenu is not below the viewport bottom set offset to 0 so the\n\t\t// submenu will not be moved. Otherwise, y will be used to move the\n\t\t// submenu up fully into the view port.\n\t\tconst offset = (y > 0) ? 0 : y - EXTRA_OFFSET;\n\n\t\tconst subMenuPosStyle = {\n\t\t\ttop: offset + \"px\" // Use negative to push the menu up\n\t\t};\n\t\treturn subMenuPosStyle;\n\t}\n\n\trender() {\n\t\t// Reposition contextMenu so that it does not show off the screen\n\t\tconst menuSize = this.calculateMenuSize(this.props.menuDefinition);\n\t\tconst menuPos = this.calculateMenuPos(this.props.mousePos, menuSize, this.props.canvasRect);\n\t\tconst posStyle = {\n\t\t\tleft: menuPos.x + \"px\",\n\t\t\ttop: menuPos.y + \"px\"\n\t\t};\n\n\t\tconst menuItems = this.buildMenu(this.props.menuDefinition, menuSize, menuPos, this.props.canvasRect);\n\n\t\treturn (\n\t\t\t<div id=\"context-menu-popover\" className=\"context-menu-popover\" style={posStyle} onContextMenu={this.onContextMenu}>\n\t\t\t\t{menuItems}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nCommonContextMenu.propTypes = {\n\tcontextHandler: PropTypes.func.isRequired,\n\tmenuDefinition: PropTypes.array.isRequired,\n\tcanvasRect: PropTypes.object.isRequired,\n\tmousePos: PropTypes.object.isRequired\n};\n\nexport default CommonContextMenu;\n","/*\n * Copyright 2017-2022 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 CommonContextMenu from \"./common-context-menu.jsx\";\n\nexport default class ContextMenuWrapper extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\n\t\tthis.contextMenuClicked = this.contextMenuClicked.bind(this);\n\t\tthis.handleClickOutside = this.handleClickOutside.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tdocument.addEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\tcomponentWillUnmount() {\n\t\tdocument.removeEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\t// Returns an object that describes the dimensions of a rectangle for the\n\t// canvas div with coordinates based on the top left corner of the div. This\n\t// will match the coordinates for the mouse position where the user clicked,\n\t// which is specified in this.props.contextMenuPos object.\n\tgetCanvasRect() {\n\t\tconst containingDiv = document.getElementById(this.props.containingDivId);\n\t\tconst clientRect = containingDiv.getBoundingClientRect();\n\t\tconst canvasRect = {\n\t\t\ttop: 0,\n\t\t\tbottom: clientRect.bottom - clientRect.top,\n\t\t\tleft: 0,\n\t\t\tright: clientRect.right - clientRect.left,\n\t\t\theight: clientRect.height,\n\t\t\twidth: clientRect.width\n\t\t};\n\n\t\treturn canvasRect;\n\t}\n\n\thandleClickOutside(e) {\n\t\t// On Safari, when a user is displaying the context menu with a ctrl-click\n\t\t// (which is a supported context menu gesture on the Mac) a secondary click\n\t\t// event is emmitted which is received here with the ctrlKey field enabled.\n\t\t// So we ignore that event otherwse, if we continue, the context menu will\n\t\t// be closed.\n\t\tif (e.ctrlKey) {\n\t\t\te.stopPropagation();\n\t\t\treturn;\n\t\t}\n\n\t\t// If the click was anywhere outside the context menu and\n\t\t// the ellipsis button we just close the menu.\n\t\tif (!this.isOverContextMenu(e) && !this.isOverEllipsisButton(e)) {\n\t\t\t// This stop propagation is needed in common canvas so that selected nodes will\n\t\t\t// remain selected even after clicking outside the context menu to close the menu.\n\t\t\tif (this.props.stopPropagation) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\tthis.props.closeContextMenu();\n\t\t}\n\t}\n\n\t// Retruns true if the event occurred over the context menu.\n\tisOverContextMenu(e) {\n\t\tconst domNode = document.getElementById(\"context-menu-popover\");\n\t\treturn !domNode || domNode.contains(e.target);\n\t}\n\n\t// Returns true if the event occurred over the ellipsis button. Typically\n\t// there will be only one ellipsis button on the canvas, since they are only\n\t// displayed on hover, but in some test cicumstances there might be more\n\t// than one.\n\tisOverEllipsisButton(e) {\n\t\tconst ellipsisNodes = document.getElementsByClassName(\"d3-node-ellipsis-group\");\n\t\tlet state = false;\n\t\tfor (let i = 0; i < ellipsisNodes.length; i++) {\n\t\t\tif (state === false && ellipsisNodes[i].contains(e.target)) {\n\t\t\t\tstate = true;\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t}\n\n\tcontextMenuClicked(action, param) {\n\t\tthis.props.contextMenuActionHandler(action, param);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<CommonContextMenu\n\t\t\t\tcontextHandler={this.contextMenuClicked}\n\t\t\t\tmenuDefinition={this.props.contextMenuDef}\n\t\t\t\tcanvasRect={this.getCanvasRect()}\n\t\t\t\tmousePos={this.props.contextMenuPos}\n\t\t\t/>\n\t\t);\n\t}\n}\n\nContextMenuWrapper.propTypes = {\n\tcontextMenuDef: PropTypes.array.isRequired,\n\tcontainingDivId: PropTypes.string.isRequired,\n\tcontextMenuPos: PropTypes.object.isRequired,\n\tcontextMenuActionHandler: PropTypes.func.isRequired,\n\tcloseContextMenu: PropTypes.func.isRequired,\n\tstopPropagation: PropTypes.bool\n};\n"],"names":["_inherits","props","_classCallCheck","_this","logger","Logger","onClick","bind","_createClass","key","value","evt","color","target","dataset","this","clickActionHandler","log","React","className","tabIndex","Component","state","itemSelected","colorClicked","e","preventDefault","data","selectedEvent","contextHandler","stopPropagation","menu","numDividers","i","length","divider","height","width","mousePos","menuSize","canvasRect","menuPos","x","y","submenuItems","itemCount","disabledCount","forEach","submenuItem","enable","menuDefinition","customDivider","menuItems","runningYPos","previousDivider","submenu","push","MenuItem","attributes","subMenuSize","subMenuContent","buildColorPickerPanel","subMenu","buildSubMenu","disabled","areAllSubmenuItemsDisabled","calculateMenuSize","buildMenu","action","label","ColorPickerPanel","colorPickHandler","index","rtl","buildRtlState","subMenuPosStyle","buildSubMenuPosStyle","icon","Icon","type","CONTEXT_MENU_CARBON_ICONS","CHEVRONARROWS","RIGHT","menuItem","SubMenu","title","style","right","bottom","top","calculateMenuPos","posStyle","left","id","onContextMenu","ContextMenuWrapper","contextMenuClicked","handleClickOutside","document","addEventListener","removeEventListener","clientRect","getElementById","containingDivId","getBoundingClientRect","ctrlKey","isOverContextMenu","isOverEllipsisButton","closeContextMenu","domNode","contains","ellipsisNodes","getElementsByClassName","param","contextMenuActionHandler","CommonContextMenu","contextMenuDef","getCanvasRect","contextMenuPos"],"mappings":"i2BAkBiD,kBAG3BA,OAAA,WACrB,WAAYC,GAAO,MAIqB,OAJrBC,WAClBC,cAAMF,IACDG,OAAS,IAAIC,EAAO,kBAEzBF,EAAKG,QAAUH,EAAKG,QAAQC,aA0B5B,OAzBAC,MAAAC,cAAAC,MAED,SAAQC,GACP,IAAMC,EAAQD,EAAIE,OAAOC,QAAQF,MACjCG,KAAKd,MAAMe,mBAAmBJ,MAC9BH,aAAAC,MAED,WAEC,OADAK,KAAKX,OAAOa,IAAI,UAEfC,uBAAKC,UAAU,qBAAqBb,QAASS,KAAKT,SACjDY,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,oBAAqBD,UAAU,gCAC7DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,mBAAoBD,UAAU,+BAC5DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAE3DD,uBAAKE,SAAS,IAAI,aAAY,iBAAkBD,UAAU,6BAC1DD,uBAAKE,SAAS,IAAI,aAAY,oBAAqBD,UAAU,gCAC7DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,mBAAoBD,UAAU,+BAC5DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,uBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,oCAE7D,EA/B6BD,EAAMG,kbCIrC,kBAMuBrB,OAAA,WACtB,WAAYC,GAAO,MAI+B,OAJ/BC,WAClBC,cAAMF,IACDqB,MAAQ,GACbnB,EAAKoB,aAAepB,EAAKoB,aAAahB,WACtCJ,EAAKqB,aAAerB,EAAKqB,aAAajB,aAoNtC,OAnNAC,MAAAC,oBAAAC,MAED,SAAce,GACbA,EAAEC,oBACFjB,mBAAAC,MAED,SAAaiB,EAAMC,GAClBb,KAAKd,MAAM4B,eAAeF,GAGtBC,GACHA,EAAcE,qBAEfrB,mBAAAC,MAED,SAAaE,GACZG,KAAKd,MAAM4B,eAAe,uBAAwB,CAAEjB,MAAAA,OACpDH,wBAAAC,MAED,SAAkBqB,GAEjB,IADA,IAAIC,EAAc,EACTC,EAAI,EAAGA,EAAIF,EAAKG,SAAUD,EAAG,CACrBF,EAAKE,GAAGE,SAEvBH,IASF,MALe,CACdI,OAxC8B,IAwCpBL,EAAKG,OAASF,GAvCS,EAuCmCA,EACpEK,MA1CwB,QAiD1B5B,uBAAAC,MACA,SAAiB4B,EAAUC,EAAUC,GACpC,IAAMC,EAAU,CAAEC,EAAGJ,EAASI,EAAGC,EAAGL,EAASK,GAyB7C,OAtBIL,EAASK,EAAIJ,EAASH,OAASI,EAAWJ,SAC7CK,EAAQE,EAAIH,EAAWJ,OAASG,EAASH,OApDvB,EAwDdK,EAAQE,EAAI,IACfF,EAAQE,EAAI,IAKVL,EAASI,EAAIH,EAASF,MAAQG,EAAWH,QAC5CI,EAAQC,GAAKH,EAASF,OAOvBI,EAAQC,GAAK,EACbD,EAAQE,GAAK,EAENF,KACPhC,iCAAAC,MAED,SAA2BkC,GAC1B,IAAIC,EAAY,EACZC,EAAgB,EASpB,OARAF,EAAaG,SAAQ,SAASC,GACxBA,EAAYb,SAChBU,KAE0B,IAAvBG,EAAYC,QACfH,OAGKA,IAAkBD,KACzBpC,gBAAAC,MAED,SAAUwC,EAAgBX,EAAUE,EAASD,GAa5C,IAZA,IAAMW,EAAgB,CACrBhC,UAAW,uBAGNiC,EAAY,GAEdC,EAAc,EAIdC,GAAkB,EAEbrB,EAAI,EAAGA,EAAIiB,EAAehB,SAAUD,EAAG,CAC/C,IAAME,EAAUe,EAAejB,GAAGE,QAC5BoB,EAAUL,EAAejB,GAAGsB,QAElC,GAAIpB,EACEmB,IACJF,EAAUI,KAAKtC,gBAACuC,GAASC,WAAYP,EAAe1C,IAAKwB,EAAI,EAAG3B,QAAS,aAAU6B,cACnFkB,GA/G+B,EAgH/BC,GAAkB,QAGb,GAAIC,EAEV,GADAD,GAAkB,EACa,gBAA3BJ,EAAejB,GAAGF,KAAwB,CAC7C,IACM4B,EAAc,CAAEtB,MAzHA,IAyH2BD,OAAQ,IACnDwB,EAAiB7C,KAAK8C,wBAEtBC,EAAU/C,KAAKgD,aACpBb,EAAgBjB,EAAG2B,EAAgBP,EAAaZ,EAASF,EAAUoB,EAAanB,GALhE,GAMjBY,EAAUI,KAAKM,GAEfT,GA/H4B,OAiItB,CACN,IAAMW,EAAW,CAAEA,SAAUjD,KAAKkD,2BAA2Bf,EAAejB,GAAGF,OACzE4B,EAAc5C,KAAKmD,kBAAkBhB,EAAejB,GAAGF,MACvD6B,EAAiB7C,KAAKoD,UAAUjB,EAAejB,GAAGF,KAAMQ,EAAUE,EAASD,GAE3EsB,EAAU/C,KAAKgD,aACpBb,EAAgBjB,EAAG2B,EAAgBP,EAAaZ,EAASF,EAAUoB,EAAanB,EAAYwB,GAC7FZ,EAAUI,KAAKM,GAEfT,GA1I4B,OA6IvB,CACNC,GAAkB,EAClB,IAAMU,EAAW,CAAEA,UAAuC,IAA7Bd,EAAejB,GAAGgB,QAC/CG,EAAUI,KACTtC,gBAACuC,KAASnD,QAASS,KAAKQ,aAAahB,KAAK,KAAM2C,EAAejB,GAAGmC,QAAS3D,IAAKwB,EAAI,GAAO+B,GACzFd,EAAejB,GAAGoC,QAGrBhB,GArJ6B,IAwJ/B,OAAOD,KACP3C,4BAAAC,MAED,WACC,OACCQ,gBAACoD,KAAiBtD,mBAAoBD,KAAKwD,uCAAsCxD,KAAKS,kBAEvFf,mBAAAC,MAED,SAAawC,EAAgBsB,EAAOZ,EAAgBP,EAAaZ,EAChEF,EAAUoB,EAAanB,EAAYwB,GACnC,IAAMS,EAAM1D,KAAK2D,cAAcjC,EAASF,EAAUoB,EAAanB,GACzDmC,EAAkB5D,KAAK6D,qBAAqBvB,EAAaZ,EAASkB,EAAanB,GAE/EqC,EAAO3D,gBAAC4D,GAAKC,KAAMC,EAA0BC,cAAcC,MAAOlB,UAAU,EAAO7C,UAAW,mCAC9FgE,EAAWjE,2BAAMgC,EAAesB,GAAOH,MAAOQ,EAAK,KAEzD,OACC3D,gBAACkE,KAAQC,MAAOF,EAAU1E,IAAK+D,EAAQ,EAAGrD,UAAU,sBAAsBsD,IAAKA,GAAST,GACvF9C,uBAAKT,IAAK+D,EAAQ,EAAGc,MAAOX,EAAiBxD,UAAU,wBACrDyC,OAQLnD,oBAAAC,MACA,SAAc+B,EAASF,EAAUoB,EAAanB,GAG7C,OAAQC,EAAQC,EAAIH,EAASF,MAAQsB,EAAYtB,MAAQG,EAAW+C,SAMrE9E,2BAAAC,MACA,SAAqB2C,EAAaZ,EAASkB,EAAanB,GAEvD,IAAMG,EAAIH,EAAWgD,QAAU/C,EAAQE,EAAIU,EAAcM,EAAYvB,QAUrE,MAHwB,CACvBqD,KAHe9C,EAAI,EAAK,EAAIA,EApMV,GAuMJ,SAGflC,aAAAC,MAED,WAEC,IAAM6B,EAAWxB,KAAKmD,kBAAkBnD,KAAKd,MAAMiD,gBAC7CT,EAAU1B,KAAK2E,iBAAiB3E,KAAKd,MAAMqC,SAAUC,EAAUxB,KAAKd,MAAMuC,YAC1EmD,EAAW,CAChBC,KAAMnD,EAAQC,EAAI,KAClB+C,IAAKhD,EAAQE,EAAI,MAGZS,EAAYrC,KAAKoD,UAAUpD,KAAKd,MAAMiD,eAAgBX,EAAUE,EAAS1B,KAAKd,MAAMuC,YAE1F,OACCtB,uBAAK2E,GAAG,uBAAuB1E,UAAU,uBAAuBmE,MAAOK,EAAUG,cAAe/E,KAAK+E,eACnG1C,QAGH,EAzN8BlC,EAAMG,sbCXjB0E,cAAkB/F,OAAA,WACtC,WAAYC,GAAO,MAK2C,OAL3CC,WAClBC,cAAMF,IACDqB,MAAQ,GAEbnB,EAAK6F,mBAAqB7F,EAAK6F,mBAAmBzF,WAClDJ,EAAK8F,mBAAqB9F,EAAK8F,mBAAmB1F,aAuFlD,OAtFAC,MAAAC,wBAAAC,MAED,WACCwF,SAASC,iBAAiB,QAASpF,KAAKkF,oBAAoB,MAC5DxF,2BAAAC,MAED,WACCwF,SAASE,oBAAoB,QAASrF,KAAKkF,oBAAoB,MAMhExF,oBAAAC,MACA,WACC,IACM2F,EADgBH,SAASI,eAAevF,KAAKd,MAAMsG,iBACxBC,wBAUjC,MATmB,CAClBf,IAAK,EACLD,OAAQa,EAAWb,OAASa,EAAWZ,IACvCG,KAAM,EACNL,MAAOc,EAAWd,MAAQc,EAAWT,KACrCxD,OAAQiE,EAAWjE,OACnBC,MAAOgE,EAAWhE,UAInB5B,yBAAAC,MAED,SAAmBe,GAMdA,EAAEgF,QACLhF,EAAEK,kBAMEf,KAAK2F,kBAAkBjF,IAAOV,KAAK4F,qBAAqBlF,KAGxDV,KAAKd,MAAM6B,iBACdL,EAAEK,kBAEHf,KAAKd,MAAM2G,uBAIbnG,wBAAAC,MACA,SAAkBe,GACjB,IAAMoF,EAAUX,SAASI,eAAe,wBACxC,OAAQO,GAAWA,EAAQC,SAASrF,EAAEZ,WAMvCJ,2BAAAC,MACA,SAAqBe,GAGpB,IAFA,IAAMsF,EAAgBb,SAASc,uBAAuB,0BAClD1F,GAAQ,EACHW,EAAI,EAAGA,EAAI8E,EAAc7E,OAAQD,KAC3B,IAAVX,GAAmByF,EAAc9E,GAAG6E,SAASrF,EAAEZ,UAClDS,GAAQ,GAGV,OAAOA,KACPb,yBAAAC,MAED,SAAmB0D,EAAQ6C,GAC1BlG,KAAKd,MAAMiH,yBAAyB9C,EAAQ6C,MAC5CxG,aAAAC,MAED,WACC,OACCQ,gBAACiG,GACAtF,eAAgBd,KAAKiF,mBACrB9C,eAAgBnC,KAAKd,MAAMmH,eAC3B5E,WAAYzB,KAAKsG,gBACjB/E,SAAUvB,KAAKd,MAAMqH,sBAGvB,EA7F8CpG,EAAMG"}
|
package/dist/lib/context-menu.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../createClass-826941b3.js"),t=require("../getPrototypeOf-1e698126.js"),n=require("react"),r=require("../canvas-constants-07dbe4b7.js"),o=require("../extends-
|
|
1
|
+
"use strict";var e=require("../createClass-826941b3.js"),t=require("../getPrototypeOf-1e698126.js"),n=require("react"),r=require("../canvas-constants-07dbe4b7.js"),o=require("../extends-841b39ac.js"),i=require("react-contextmenu"),l=require("../icon-f6f2bffc.js"),c=require("../canvas-logger-bb537fb3.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}require("react-inlinesvg"),require("@carbon/icons-react");var u=a(n);function s(e){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,o=t._getPrototypeOf(e);if(n){var i=t._getPrototypeOf(this).constructor;r=Reflect.construct(o,arguments,i)}else r=o.apply(this,arguments);return t._possibleConstructorReturn(this,r)}}var d=function(n){t._inherits(o,n);var r=s(o);function o(n){var i;return e._classCallCheck(this,o),(i=r.call(this,n)).logger=new c.Logger("CC-ContextMenu"),i.onClick=i.onClick.bind(t._assertThisInitialized(i)),i}return e._createClass(o,[{key:"onClick",value:function(e){var t=e.target.dataset.color;this.props.clickActionHandler(t)}},{key:"render",value:function(){return this.logger.log("render"),u.default.createElement("div",{className:"color-picker-panel",onClick:this.onClick},u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-white-0",className:"color-picker-item white-0"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-yellow-20",className:"color-picker-item yellow-20"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-gray-20",className:"color-picker-item gray-20"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-green-20",className:"color-picker-item green-20"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-teal-20",className:"color-picker-item teal-20"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-cyan-20",className:"color-picker-item cyan-20"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-red-50",className:"color-picker-item red-50"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-orange-40",className:"color-picker-item orange-40"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-gray-50",className:"color-picker-item gray-50"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-green-50",className:"color-picker-item green-50"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-teal-50",className:"color-picker-item teal-50"}),u.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-cyan-50",className:"color-picker-item cyan-50"}))}}]),o}(u.default.Component);function f(e){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,o=t._getPrototypeOf(e);if(n){var i=t._getPrototypeOf(this).constructor;r=Reflect.construct(o,arguments,i)}else r=o.apply(this,arguments);return t._possibleConstructorReturn(this,r)}}var h=function(n){t._inherits(a,n);var c=f(a);function a(n){var r;return e._classCallCheck(this,a),(r=c.call(this,n)).state={},r.itemSelected=r.itemSelected.bind(t._assertThisInitialized(r)),r.colorClicked=r.colorClicked.bind(t._assertThisInitialized(r)),r}return e._createClass(a,[{key:"onContextMenu",value:function(e){e.preventDefault()}},{key:"itemSelected",value:function(e,t){this.props.contextHandler(e),t&&t.stopPropagation()}},{key:"colorClicked",value:function(e){this.props.contextHandler("colorSelectedObjects",{color:e})}},{key:"calculateMenuSize",value:function(e){for(var t=0,n=0;n<e.length;++n){e[n].divider&&t++}return{height:30*(e.length-t)+1*t,width:160}}},{key:"calculateMenuPos",value:function(e,t,n){var r={x:e.x,y:e.y};return e.y+t.height>n.height&&(r.y=n.height-t.height-5,r.y<0&&(r.y=0)),e.x+t.width>n.width&&(r.x-=t.width),r.x+=1,r.y+=1,r}},{key:"areAllSubmenuItemsDisabled",value:function(e){var t=0,n=0;return e.forEach((function(e){e.divider||t++,!1===e.enable&&n++})),n===t}},{key:"buildMenu",value:function(e,t,n,r){for(var l={className:"contextmenu-divider"},c=[],a=0,s=!1,d=0;d<e.length;++d){var f=e[d].divider,h=e[d].submenu;if(f)s||(c.push(u.default.createElement(i.MenuItem,{attributes:l,key:d+1,onClick:function(){},divider:!0})),a+=1,s=!0);else if(h)if(s=!1,"colorPicker"===e[d].menu){var p={width:160,height:50},m=this.buildColorPickerPanel(),v=this.buildSubMenu(e,d,m,a,n,t,p,r,!1);c.push(v),a+=30}else{var k={disabled:this.areAllSubmenuItemsDisabled(e[d].menu)},y=this.calculateMenuSize(e[d].menu),b=this.buildMenu(e[d].menu,t,n,r),g=this.buildSubMenu(e,d,b,a,n,t,y,r,k);c.push(g),a+=30}else{s=!1;var C={disabled:!1===e[d].enable};c.push(u.default.createElement(i.MenuItem,o._extends({onClick:this.itemSelected.bind(null,e[d].action),key:d+1},C),e[d].label)),a+=30}}return c}},{key:"buildColorPickerPanel",value:function(){return u.default.createElement(d,r._defineProperty({clickActionHandler:this.colorPickHandler},"clickActionHandler",this.colorClicked))}},{key:"buildSubMenu",value:function(e,t,n,c,a,s,d,f,h){var p=this.buildRtlState(a,s,d,f),m=this.buildSubMenuPosStyle(c,a,d,f),v=u.default.createElement(l.Icon,{type:r.CONTEXT_MENU_CARBON_ICONS.CHEVRONARROWS.RIGHT,disabled:!1,className:"react-contextmenu-submenu-icon"}),k=u.default.createElement("div",null,e[t].label,v," ");return u.default.createElement(i.SubMenu,o._extends({title:k,key:t+1,className:"contextmenu-submenu",rtl:p},h),u.default.createElement("div",{key:t+1,style:m,className:"context-menu-popover"},n))}},{key:"buildRtlState",value:function(e,t,n,r){return e.x+t.width+n.width>r.right}},{key:"buildSubMenuPosStyle",value:function(e,t,n,r){var o=r.bottom-(t.y+e+n.height);return{top:(o>0?0:o-5)+"px"}}},{key:"render",value:function(){var e=this.calculateMenuSize(this.props.menuDefinition),t=this.calculateMenuPos(this.props.mousePos,e,this.props.canvasRect),n={left:t.x+"px",top:t.y+"px"},r=this.buildMenu(this.props.menuDefinition,e,t,this.props.canvasRect);return u.default.createElement("div",{id:"context-menu-popover",className:"context-menu-popover",style:n,onContextMenu:this.onContextMenu},r)}}]),a}(u.default.Component);function p(e){var n=function(){if("undefined"==typeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if("function"==typeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],(function(){}))),!0}catch(e){return!1}}();return function(){var r,o=t._getPrototypeOf(e);if(n){var i=t._getPrototypeOf(this).constructor;r=Reflect.construct(o,arguments,i)}else r=o.apply(this,arguments);return t._possibleConstructorReturn(this,r)}}var m=function(n){t._inherits(o,n);var r=p(o);function o(n){var i;return e._classCallCheck(this,o),(i=r.call(this,n)).state={},i.contextMenuClicked=i.contextMenuClicked.bind(t._assertThisInitialized(i)),i.handleClickOutside=i.handleClickOutside.bind(t._assertThisInitialized(i)),i}return e._createClass(o,[{key:"componentDidMount",value:function(){document.addEventListener("click",this.handleClickOutside,!0)}},{key:"componentWillUnmount",value:function(){document.removeEventListener("click",this.handleClickOutside,!0)}},{key:"getCanvasRect",value:function(){var e=document.getElementById(this.props.containingDivId).getBoundingClientRect();return{top:0,bottom:e.bottom-e.top,left:0,right:e.right-e.left,height:e.height,width:e.width}}},{key:"handleClickOutside",value:function(e){e.ctrlKey?e.stopPropagation():this.isOverContextMenu(e)||this.isOverEllipsisButton(e)||(this.props.stopPropagation&&e.stopPropagation(),this.props.closeContextMenu())}},{key:"isOverContextMenu",value:function(e){var t=document.getElementById("context-menu-popover");return!t||t.contains(e.target)}},{key:"isOverEllipsisButton",value:function(e){for(var t=document.getElementsByClassName("d3-node-ellipsis-group"),n=!1,r=0;r<t.length;r++)!1===n&&t[r].contains(e.target)&&(n=!0);return n}},{key:"contextMenuClicked",value:function(e,t){this.props.contextMenuActionHandler(e,t)}},{key:"render",value:function(){return u.default.createElement(h,{contextHandler:this.contextMenuClicked,menuDefinition:this.props.contextMenuDef,canvasRect:this.getCanvasRect(),mousePos:this.props.contextMenuPos})}}]),o}(u.default.Component);module.exports=m;
|
|
2
2
|
//# sourceMappingURL=context-menu.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-menu.js","sources":["../../src/color-picker/color-picker-panel.jsx","../../src/context-menu/common-context-menu.jsx","../../src/context-menu/context-menu-wrapper.jsx"],"sourcesContent":["/*\n * Copyright 2022 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 Logger from \"../logging/canvas-logger.js\";\n\n\nclass ColorPickerPanel extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.logger = new Logger(\"CC-ContextMenu\");\n\n\t\tthis.onClick = this.onClick.bind(this);\n\t}\n\n\tonClick(evt) {\n\t\tconst color = evt.target.dataset.color;\n\t\tthis.props.clickActionHandler(color);\n\t}\n\n\trender() {\n\t\tthis.logger.log(\"render\");\n\t\treturn (\n\t\t\t<div className=\"color-picker-panel\" onClick={this.onClick}>\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-white-0\"} className=\"color-picker-item white-0\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-yellow-20\"} className=\"color-picker-item yellow-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-20\"} className=\"color-picker-item gray-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-20\"} className=\"color-picker-item green-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-20\"} className=\"color-picker-item teal-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-20\"} className=\"color-picker-item cyan-20\" />\n\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-red-50\"} className=\"color-picker-item red-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-orange-40\"} className=\"color-picker-item orange-40\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-50\"} className=\"color-picker-item gray-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-50\"} className=\"color-picker-item green-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-50\"} className=\"color-picker-item teal-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-50\"} className=\"color-picker-item cyan-50\" />\n\t\t\t</div>);\n\t}\n}\n\nColorPickerPanel.propTypes = {\n\tclickActionHandler: PropTypes.func.isRequired,\n\tcloseMenu: PropTypes.func\n};\n\nexport default ColorPickerPanel;\n","/*\n * Copyright 2017-2022 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/* eslint no-empty-function: [\"error\", { \"allow\": [\"arrowFunctions\"] }] */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { MenuItem, SubMenu } from \"react-contextmenu\";\nimport Icon from \"../icons/icon.jsx\";\nimport { CONTEXT_MENU_CARBON_ICONS } from \"../common-canvas/constants/canvas-constants\";\nimport ColorPickerPanel from \"../color-picker/color-picker-panel.jsx\";\n\n// context-menu sizing\nconst CONTEXT_MENU_WIDTH = 160; // see context-menu.css .react-context-menu margin\nconst CONTEXT_MENU_LINK_HEIGHT = 30; // see context-menu.css .react-context-menu-item height\nconst CONTEXT_MENU_DIVIDER_HEIGHT = 1; // see context-menu.css .react-context-menu-item height\nconst EXTRA_OFFSET = 5; // Extra offset for vertical menu positioning\n\n\nclass CommonContextMenu extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\t\tthis.itemSelected = this.itemSelected.bind(this);\n\t\tthis.colorClicked = this.colorClicked.bind(this);\n\t}\n\n\tonContextMenu(e) {\n\t\te.preventDefault();\n\t}\n\n\titemSelected(data, selectedEvent) {\n\t\tthis.props.contextHandler(data);\n\t\t// This stops the canvasClicked function from being fired which would\n\t\t// clear any current selections.\n\t\tif (selectedEvent) {\n\t\t\tselectedEvent.stopPropagation();\n\t\t}\n\t}\n\n\tcolorClicked(color) {\n\t\tthis.props.contextHandler(\"colorSelectedObjects\", { color });\n\t}\n\n\tcalculateMenuSize(menu) {\n\t\tvar numDividers = 0;\n\t\tfor (let i = 0; i < menu.length; ++i) {\n\t\t\tconst divider = menu[i].divider;\n\t\t\tif (divider) {\n\t\t\t\tnumDividers++;\n\t\t\t}\n\t\t}\n\n\t\tvar menuSize = {\n\t\t\theight: ((menu.length - numDividers) * CONTEXT_MENU_LINK_HEIGHT) + (numDividers * CONTEXT_MENU_DIVIDER_HEIGHT),\n\t\t\twidth: CONTEXT_MENU_WIDTH\n\t\t};\n\n\t\treturn menuSize;\n\t}\n\n\t// Returns a new position and the canvas rectangle for the context menu based on the current\n\t// mouse position and whether the menu would appear outside the edges of the page.\n\tcalculateMenuPos(mousePos, menuSize, canvasRect) {\n\t\tconst menuPos = { x: mousePos.x, y: mousePos.y };\n\n\t\t// Reposition contextMenu if it will show off the bottom of the page\n\t\tif (mousePos.y + menuSize.height > canvasRect.height) {\n\t\t\tmenuPos.y = canvasRect.height - menuSize.height - EXTRA_OFFSET; // Move up by extra offset so it looks nice\n\n\t\t\t// If repositioning the menu would push it off the top of the page\n\t\t\t// (in very short browser windows) position it at the top.\n\t\t\tif (menuPos.y < 0) {\n\t\t\t\tmenuPos.y = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Reposition contextMenu if it will show off the right of the page\n\t\tif (mousePos.x + menuSize.width > canvasRect.width) {\n\t\t\tmenuPos.x -= menuSize.width;\n\t\t}\n\n\t\t// Add a pixel to x and y because on Chrome without this the context menu\n\t\t// appears with the top corner of the first menu item under the mouse\n\t\t// cursor. This highlights the first menu item (which looks weird) and, if\n\t\t// the first item is a cascade menu, automatically opens the sub-menu.\n\t\tmenuPos.x += 1;\n\t\tmenuPos.y += 1;\n\n\t\treturn menuPos;\n\t}\n\n\tareAllSubmenuItemsDisabled(submenuItems) {\n\t\tlet itemCount = 0;\n\t\tlet disabledCount = 0;\n\t\tsubmenuItems.forEach(function(submenuItem) {\n\t\t\tif (!submenuItem.divider) {\n\t\t\t\titemCount++;\n\t\t\t}\n\t\t\tif (submenuItem.enable === false) {\n\t\t\t\tdisabledCount++;\n\t\t\t}\n\t\t});\n\t\treturn disabledCount === itemCount;\n\t}\n\n\tbuildMenu(menuDefinition, menuSize, menuPos, canvasRect) {\n\t\tconst customDivider = {\n\t\t\tclassName: \"contextmenu-divider\"\n\t\t};\n\n\t\tconst menuItems = [];\n\n\t\tlet runningYPos = 0;\n\t\t// Records if we have just displayed a divider. This is useful because we\n\t\t// only want to display one divider if there is a divider element\n\t\t// immediately after another divider element in the menuDefintion array.\n\t\tlet previousDivider = false;\n\n\t\tfor (let i = 0; i < menuDefinition.length; ++i) {\n\t\t\tconst divider = menuDefinition[i].divider;\n\t\t\tconst submenu = menuDefinition[i].submenu;\n\n\t\t\tif (divider) {\n\t\t\t\tif (!previousDivider) {\n\t\t\t\t\tmenuItems.push(<MenuItem attributes={customDivider} key={i + 1} onClick={() => {}} divider />);\n\t\t\t\t\trunningYPos += CONTEXT_MENU_DIVIDER_HEIGHT;\n\t\t\t\t\tpreviousDivider = true;\n\t\t\t\t}\n\n\t\t\t} else if (submenu) {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tif (menuDefinition[i].menu === \"colorPicker\") {\n\t\t\t\t\tconst disabled = false;\n\t\t\t\t\tconst subMenuSize = { width: CONTEXT_MENU_WIDTH, height: 50 };\n\t\t\t\t\tconst subMenuContent = this.buildColorPickerPanel();\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\n\t\t\t\t} else {\n\t\t\t\t\tconst disabled = { disabled: this.areAllSubmenuItemsDisabled(menuDefinition[i].menu) };\n\t\t\t\t\tconst subMenuSize = this.calculateMenuSize(menuDefinition[i].menu);\n\t\t\t\t\tconst subMenuContent = this.buildMenu(menuDefinition[i].menu, menuSize, menuPos, canvasRect);\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = { disabled: menuDefinition[i].enable === false };\n\t\t\t\tmenuItems.push(\n\t\t\t\t\t<MenuItem onClick={this.itemSelected.bind(null, menuDefinition[i].action)} key={i + 1} {...disabled}>\n\t\t\t\t\t\t{menuDefinition[i].label}\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t}\n\t\t}\n\t\treturn menuItems;\n\t}\n\n\tbuildColorPickerPanel() {\n\t\treturn (\n\t\t\t<ColorPickerPanel clickActionHandler={this.colorPickHandler} clickActionHandler={this.colorClicked} />\n\t\t);\n\t}\n\n\tbuildSubMenu(menuDefinition, index, subMenuContent, runningYPos, menuPos,\n\t\tmenuSize, subMenuSize, canvasRect, disabled) {\n\t\tconst rtl = this.buildRtlState(menuPos, menuSize, subMenuSize, canvasRect);\n\t\tconst subMenuPosStyle = this.buildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect);\n\n\t\tconst icon = <Icon type={CONTEXT_MENU_CARBON_ICONS.CHEVRONARROWS.RIGHT} disabled={false} className={\"react-contextmenu-submenu-icon\"} />;\n\t\tconst menuItem = <div>{menuDefinition[index].label}{icon} </div>;\n\n\t\treturn (\n\t\t\t<SubMenu title={menuItem} key={index + 1} className=\"contextmenu-submenu\" rtl={rtl} {...disabled}>\n\t\t\t\t<div key={index + 1} style={subMenuPosStyle} className=\"context-menu-popover\">\n\t\t\t\t\t{subMenuContent}\n\t\t\t\t</div>\n\t\t\t</SubMenu>\n\t\t);\n\t}\n\n\t// Returns a boolean to indicate whether the submenu should appear on the\n\t// right of the context menu (rtl === false) or on the left of the context\n\t// menu (rtl === true).\n\tbuildRtlState(menuPos, menuSize, subMenuSize, canvasRect) {\n\t\t// Ensure that the combined menu position, plus the menu width,\n\t\t// plus the submenu width, does not exceed the viewport bounds.\n\t\treturn (menuPos.x + menuSize.width + subMenuSize.width > canvasRect.right);\n\n\t}\n\n\t// Returns a style object that can be applied to the sub-menu to adjust\n\t// its vertical (y) position. This may be necessary if the submenu is tall\n\t// enough that it would be displayed off the bottom of the canvas area.\n\tbuildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect) {\n\t\t// Does the submenu go below the bottom of the viewport?\n\t\tconst y = canvasRect.bottom - (menuPos.y + runningYPos + subMenuSize.height);\n\n\t\t// If submenu is not below the viewport bottom set offset to 0 so the\n\t\t// submenu will not be moved. Otherwise, y will be used to move the\n\t\t// submenu up fully into the view port.\n\t\tconst offset = (y > 0) ? 0 : y - EXTRA_OFFSET;\n\n\t\tconst subMenuPosStyle = {\n\t\t\ttop: offset + \"px\" // Use negative to push the menu up\n\t\t};\n\t\treturn subMenuPosStyle;\n\t}\n\n\trender() {\n\t\t// Reposition contextMenu so that it does not show off the screen\n\t\tconst menuSize = this.calculateMenuSize(this.props.menuDefinition);\n\t\tconst menuPos = this.calculateMenuPos(this.props.mousePos, menuSize, this.props.canvasRect);\n\t\tconst posStyle = {\n\t\t\tleft: menuPos.x + \"px\",\n\t\t\ttop: menuPos.y + \"px\"\n\t\t};\n\n\t\tconst menuItems = this.buildMenu(this.props.menuDefinition, menuSize, menuPos, this.props.canvasRect);\n\n\t\treturn (\n\t\t\t<div id=\"context-menu-popover\" className=\"context-menu-popover\" style={posStyle} onContextMenu={this.onContextMenu}>\n\t\t\t\t{menuItems}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nCommonContextMenu.propTypes = {\n\tcontextHandler: PropTypes.func.isRequired,\n\tmenuDefinition: PropTypes.array.isRequired,\n\tcanvasRect: PropTypes.object.isRequired,\n\tmousePos: PropTypes.object.isRequired\n};\n\nexport default CommonContextMenu;\n","/*\n * Copyright 2017-2022 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 CommonContextMenu from \"./common-context-menu.jsx\";\n\nexport default class ContextMenuWrapper extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\n\t\tthis.contextMenuClicked = this.contextMenuClicked.bind(this);\n\t\tthis.handleClickOutside = this.handleClickOutside.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tdocument.addEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\tcomponentWillUnmount() {\n\t\tdocument.removeEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\t// Returns an object that describes the dimensions of a rectangle for the\n\t// canvas div with coordinates based on the top left corner of the div. This\n\t// will match the coordinates for the mouse position where the user clicked,\n\t// which is specified in this.props.contextMenuPos object.\n\tgetCanvasRect() {\n\t\tconst containingDiv = document.getElementById(this.props.containingDivId);\n\t\tconst clientRect = containingDiv.getBoundingClientRect();\n\t\tconst canvasRect = {\n\t\t\ttop: 0,\n\t\t\tbottom: clientRect.bottom - clientRect.top,\n\t\t\tleft: 0,\n\t\t\tright: clientRect.right - clientRect.left,\n\t\t\theight: clientRect.height,\n\t\t\twidth: clientRect.width\n\t\t};\n\n\t\treturn canvasRect;\n\t}\n\n\thandleClickOutside(e) {\n\t\t// On Safari, when a user is displaying the context menu with a ctrl-click\n\t\t// (which is a supported context menu gesture on the Mac) a secondary click\n\t\t// event is emmitted which is received here with the ctrlKey field enabled.\n\t\t// So we ignore that event otherwse, if we continue, the context menu will\n\t\t// be closed.\n\t\tif (e.ctrlKey) {\n\t\t\te.stopPropagation();\n\t\t\treturn;\n\t\t}\n\n\t\t// If the click was anywhere outside the context menu and\n\t\t// the ellipsis button we just close the menu.\n\t\tif (!this.isOverContextMenu(e) && !this.isOverEllipsisButton(e)) {\n\t\t\t// This stop propagation is needed in common canvas so that selected nodes will\n\t\t\t// remain selected even after clicking outside the context menu to close the menu.\n\t\t\tif (this.props.stopPropagation) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\tthis.props.closeContextMenu();\n\t\t}\n\t}\n\n\t// Retruns true if the event occurred over the context menu.\n\tisOverContextMenu(e) {\n\t\tconst domNode = document.getElementById(\"context-menu-popover\");\n\t\treturn !domNode || domNode.contains(e.target);\n\t}\n\n\t// Returns true if the event occurred over the ellipsis button. Typically\n\t// there will be only one ellipsis button on the canvas, since they are only\n\t// displayed on hover, but in some test cicumstances there might be more\n\t// than one.\n\tisOverEllipsisButton(e) {\n\t\tconst ellipsisNodes = document.getElementsByClassName(\"d3-node-ellipsis-group\");\n\t\tlet state = false;\n\t\tfor (let i = 0; i < ellipsisNodes.length; i++) {\n\t\t\tif (state === false && ellipsisNodes[i].contains(e.target)) {\n\t\t\t\tstate = true;\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t}\n\n\tcontextMenuClicked(action, param) {\n\t\tthis.props.contextMenuActionHandler(action, param);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<CommonContextMenu\n\t\t\t\tcontextHandler={this.contextMenuClicked}\n\t\t\t\tmenuDefinition={this.props.contextMenuDef}\n\t\t\t\tcanvasRect={this.getCanvasRect()}\n\t\t\t\tmousePos={this.props.contextMenuPos}\n\t\t\t/>\n\t\t);\n\t}\n}\n\nContextMenuWrapper.propTypes = {\n\tcontextMenuDef: PropTypes.array.isRequired,\n\tcontainingDivId: PropTypes.string.isRequired,\n\tcontextMenuPos: PropTypes.object.isRequired,\n\tcontextMenuActionHandler: PropTypes.func.isRequired,\n\tcloseContextMenu: PropTypes.func.isRequired,\n\tstopPropagation: PropTypes.bool\n};\n"],"names":["_inherits","props","_classCallCheck","_this","logger","Logger","onClick","bind","_createClass","key","value","evt","color","target","dataset","this","clickActionHandler","log","React","className","tabIndex","Component","state","itemSelected","colorClicked","e","preventDefault","data","selectedEvent","contextHandler","stopPropagation","menu","numDividers","i","length","divider","height","width","mousePos","menuSize","canvasRect","menuPos","x","y","submenuItems","itemCount","disabledCount","forEach","submenuItem","enable","menuDefinition","customDivider","menuItems","runningYPos","previousDivider","submenu","push","MenuItem","attributes","subMenuSize","subMenuContent","buildColorPickerPanel","subMenu","buildSubMenu","disabled","areAllSubmenuItemsDisabled","calculateMenuSize","buildMenu","action","label","ColorPickerPanel","colorPickHandler","index","rtl","buildRtlState","subMenuPosStyle","buildSubMenuPosStyle","icon","Icon","type","CONTEXT_MENU_CARBON_ICONS","CHEVRONARROWS","RIGHT","menuItem","SubMenu","title","style","right","bottom","top","calculateMenuPos","posStyle","left","id","onContextMenu","ContextMenuWrapper","contextMenuClicked","handleClickOutside","document","addEventListener","removeEventListener","clientRect","getElementById","containingDivId","getBoundingClientRect","ctrlKey","isOverContextMenu","isOverEllipsisButton","closeContextMenu","domNode","contains","ellipsisNodes","getElementsByClassName","param","contextMenuActionHandler","CommonContextMenu","contextMenuDef","getCanvasRect","contextMenuPos"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"context-menu.js","sources":["../../src/color-picker/color-picker-panel.jsx","../../src/context-menu/common-context-menu.jsx","../../src/context-menu/context-menu-wrapper.jsx"],"sourcesContent":["/*\n * Copyright 2022 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 Logger from \"../logging/canvas-logger.js\";\n\n\nclass ColorPickerPanel extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.logger = new Logger(\"CC-ContextMenu\");\n\n\t\tthis.onClick = this.onClick.bind(this);\n\t}\n\n\tonClick(evt) {\n\t\tconst color = evt.target.dataset.color;\n\t\tthis.props.clickActionHandler(color);\n\t}\n\n\trender() {\n\t\tthis.logger.log(\"render\");\n\t\treturn (\n\t\t\t<div className=\"color-picker-panel\" onClick={this.onClick}>\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-white-0\"} className=\"color-picker-item white-0\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-yellow-20\"} className=\"color-picker-item yellow-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-20\"} className=\"color-picker-item gray-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-20\"} className=\"color-picker-item green-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-20\"} className=\"color-picker-item teal-20\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-20\"} className=\"color-picker-item cyan-20\" />\n\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-red-50\"} className=\"color-picker-item red-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-orange-40\"} className=\"color-picker-item orange-40\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-gray-50\"} className=\"color-picker-item gray-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-green-50\"} className=\"color-picker-item green-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-teal-50\"} className=\"color-picker-item teal-50\" />\n\t\t\t\t<div tabIndex=\"0\" data-color={\"bkg-col-cyan-50\"} className=\"color-picker-item cyan-50\" />\n\t\t\t</div>);\n\t}\n}\n\nColorPickerPanel.propTypes = {\n\tclickActionHandler: PropTypes.func.isRequired,\n\tcloseMenu: PropTypes.func\n};\n\nexport default ColorPickerPanel;\n","/*\n * Copyright 2017-2022 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/* eslint no-empty-function: [\"error\", { \"allow\": [\"arrowFunctions\"] }] */\n\nimport React from \"react\";\nimport PropTypes from \"prop-types\";\nimport { MenuItem, SubMenu } from \"react-contextmenu\";\nimport Icon from \"../icons/icon.jsx\";\nimport { CONTEXT_MENU_CARBON_ICONS } from \"../common-canvas/constants/canvas-constants\";\nimport ColorPickerPanel from \"../color-picker/color-picker-panel.jsx\";\n\n// context-menu sizing\nconst CONTEXT_MENU_WIDTH = 160; // see context-menu.css .react-context-menu margin\nconst CONTEXT_MENU_LINK_HEIGHT = 30; // see context-menu.css .react-context-menu-item height\nconst CONTEXT_MENU_DIVIDER_HEIGHT = 1; // see context-menu.css .react-context-menu-item height\nconst EXTRA_OFFSET = 5; // Extra offset for vertical menu positioning\n\n\nclass CommonContextMenu extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\t\tthis.itemSelected = this.itemSelected.bind(this);\n\t\tthis.colorClicked = this.colorClicked.bind(this);\n\t}\n\n\tonContextMenu(e) {\n\t\te.preventDefault();\n\t}\n\n\titemSelected(data, selectedEvent) {\n\t\tthis.props.contextHandler(data);\n\t\t// This stops the canvasClicked function from being fired which would\n\t\t// clear any current selections.\n\t\tif (selectedEvent) {\n\t\t\tselectedEvent.stopPropagation();\n\t\t}\n\t}\n\n\tcolorClicked(color) {\n\t\tthis.props.contextHandler(\"colorSelectedObjects\", { color });\n\t}\n\n\tcalculateMenuSize(menu) {\n\t\tvar numDividers = 0;\n\t\tfor (let i = 0; i < menu.length; ++i) {\n\t\t\tconst divider = menu[i].divider;\n\t\t\tif (divider) {\n\t\t\t\tnumDividers++;\n\t\t\t}\n\t\t}\n\n\t\tvar menuSize = {\n\t\t\theight: ((menu.length - numDividers) * CONTEXT_MENU_LINK_HEIGHT) + (numDividers * CONTEXT_MENU_DIVIDER_HEIGHT),\n\t\t\twidth: CONTEXT_MENU_WIDTH\n\t\t};\n\n\t\treturn menuSize;\n\t}\n\n\t// Returns a new position and the canvas rectangle for the context menu based on the current\n\t// mouse position and whether the menu would appear outside the edges of the page.\n\tcalculateMenuPos(mousePos, menuSize, canvasRect) {\n\t\tconst menuPos = { x: mousePos.x, y: mousePos.y };\n\n\t\t// Reposition contextMenu if it will show off the bottom of the page\n\t\tif (mousePos.y + menuSize.height > canvasRect.height) {\n\t\t\tmenuPos.y = canvasRect.height - menuSize.height - EXTRA_OFFSET; // Move up by extra offset so it looks nice\n\n\t\t\t// If repositioning the menu would push it off the top of the page\n\t\t\t// (in very short browser windows) position it at the top.\n\t\t\tif (menuPos.y < 0) {\n\t\t\t\tmenuPos.y = 0;\n\t\t\t}\n\t\t}\n\n\t\t// Reposition contextMenu if it will show off the right of the page\n\t\tif (mousePos.x + menuSize.width > canvasRect.width) {\n\t\t\tmenuPos.x -= menuSize.width;\n\t\t}\n\n\t\t// Add a pixel to x and y because on Chrome without this the context menu\n\t\t// appears with the top corner of the first menu item under the mouse\n\t\t// cursor. This highlights the first menu item (which looks weird) and, if\n\t\t// the first item is a cascade menu, automatically opens the sub-menu.\n\t\tmenuPos.x += 1;\n\t\tmenuPos.y += 1;\n\n\t\treturn menuPos;\n\t}\n\n\tareAllSubmenuItemsDisabled(submenuItems) {\n\t\tlet itemCount = 0;\n\t\tlet disabledCount = 0;\n\t\tsubmenuItems.forEach(function(submenuItem) {\n\t\t\tif (!submenuItem.divider) {\n\t\t\t\titemCount++;\n\t\t\t}\n\t\t\tif (submenuItem.enable === false) {\n\t\t\t\tdisabledCount++;\n\t\t\t}\n\t\t});\n\t\treturn disabledCount === itemCount;\n\t}\n\n\tbuildMenu(menuDefinition, menuSize, menuPos, canvasRect) {\n\t\tconst customDivider = {\n\t\t\tclassName: \"contextmenu-divider\"\n\t\t};\n\n\t\tconst menuItems = [];\n\n\t\tlet runningYPos = 0;\n\t\t// Records if we have just displayed a divider. This is useful because we\n\t\t// only want to display one divider if there is a divider element\n\t\t// immediately after another divider element in the menuDefintion array.\n\t\tlet previousDivider = false;\n\n\t\tfor (let i = 0; i < menuDefinition.length; ++i) {\n\t\t\tconst divider = menuDefinition[i].divider;\n\t\t\tconst submenu = menuDefinition[i].submenu;\n\n\t\t\tif (divider) {\n\t\t\t\tif (!previousDivider) {\n\t\t\t\t\tmenuItems.push(<MenuItem attributes={customDivider} key={i + 1} onClick={() => {}} divider />);\n\t\t\t\t\trunningYPos += CONTEXT_MENU_DIVIDER_HEIGHT;\n\t\t\t\t\tpreviousDivider = true;\n\t\t\t\t}\n\n\t\t\t} else if (submenu) {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tif (menuDefinition[i].menu === \"colorPicker\") {\n\t\t\t\t\tconst disabled = false;\n\t\t\t\t\tconst subMenuSize = { width: CONTEXT_MENU_WIDTH, height: 50 };\n\t\t\t\t\tconst subMenuContent = this.buildColorPickerPanel();\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\n\t\t\t\t} else {\n\t\t\t\t\tconst disabled = { disabled: this.areAllSubmenuItemsDisabled(menuDefinition[i].menu) };\n\t\t\t\t\tconst subMenuSize = this.calculateMenuSize(menuDefinition[i].menu);\n\t\t\t\t\tconst subMenuContent = this.buildMenu(menuDefinition[i].menu, menuSize, menuPos, canvasRect);\n\n\t\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = { disabled: menuDefinition[i].enable === false };\n\t\t\t\tmenuItems.push(\n\t\t\t\t\t<MenuItem onClick={this.itemSelected.bind(null, menuDefinition[i].action)} key={i + 1} {...disabled}>\n\t\t\t\t\t\t{menuDefinition[i].label}\n\t\t\t\t\t</MenuItem>\n\t\t\t\t);\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\t\t\t}\n\t\t}\n\t\treturn menuItems;\n\t}\n\n\tbuildColorPickerPanel() {\n\t\treturn (\n\t\t\t<ColorPickerPanel clickActionHandler={this.colorPickHandler} clickActionHandler={this.colorClicked} />\n\t\t);\n\t}\n\n\tbuildSubMenu(menuDefinition, index, subMenuContent, runningYPos, menuPos,\n\t\tmenuSize, subMenuSize, canvasRect, disabled) {\n\t\tconst rtl = this.buildRtlState(menuPos, menuSize, subMenuSize, canvasRect);\n\t\tconst subMenuPosStyle = this.buildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect);\n\n\t\tconst icon = <Icon type={CONTEXT_MENU_CARBON_ICONS.CHEVRONARROWS.RIGHT} disabled={false} className={\"react-contextmenu-submenu-icon\"} />;\n\t\tconst menuItem = <div>{menuDefinition[index].label}{icon} </div>;\n\n\t\treturn (\n\t\t\t<SubMenu title={menuItem} key={index + 1} className=\"contextmenu-submenu\" rtl={rtl} {...disabled}>\n\t\t\t\t<div key={index + 1} style={subMenuPosStyle} className=\"context-menu-popover\">\n\t\t\t\t\t{subMenuContent}\n\t\t\t\t</div>\n\t\t\t</SubMenu>\n\t\t);\n\t}\n\n\t// Returns a boolean to indicate whether the submenu should appear on the\n\t// right of the context menu (rtl === false) or on the left of the context\n\t// menu (rtl === true).\n\tbuildRtlState(menuPos, menuSize, subMenuSize, canvasRect) {\n\t\t// Ensure that the combined menu position, plus the menu width,\n\t\t// plus the submenu width, does not exceed the viewport bounds.\n\t\treturn (menuPos.x + menuSize.width + subMenuSize.width > canvasRect.right);\n\n\t}\n\n\t// Returns a style object that can be applied to the sub-menu to adjust\n\t// its vertical (y) position. This may be necessary if the submenu is tall\n\t// enough that it would be displayed off the bottom of the canvas area.\n\tbuildSubMenuPosStyle(runningYPos, menuPos, subMenuSize, canvasRect) {\n\t\t// Does the submenu go below the bottom of the viewport?\n\t\tconst y = canvasRect.bottom - (menuPos.y + runningYPos + subMenuSize.height);\n\n\t\t// If submenu is not below the viewport bottom set offset to 0 so the\n\t\t// submenu will not be moved. Otherwise, y will be used to move the\n\t\t// submenu up fully into the view port.\n\t\tconst offset = (y > 0) ? 0 : y - EXTRA_OFFSET;\n\n\t\tconst subMenuPosStyle = {\n\t\t\ttop: offset + \"px\" // Use negative to push the menu up\n\t\t};\n\t\treturn subMenuPosStyle;\n\t}\n\n\trender() {\n\t\t// Reposition contextMenu so that it does not show off the screen\n\t\tconst menuSize = this.calculateMenuSize(this.props.menuDefinition);\n\t\tconst menuPos = this.calculateMenuPos(this.props.mousePos, menuSize, this.props.canvasRect);\n\t\tconst posStyle = {\n\t\t\tleft: menuPos.x + \"px\",\n\t\t\ttop: menuPos.y + \"px\"\n\t\t};\n\n\t\tconst menuItems = this.buildMenu(this.props.menuDefinition, menuSize, menuPos, this.props.canvasRect);\n\n\t\treturn (\n\t\t\t<div id=\"context-menu-popover\" className=\"context-menu-popover\" style={posStyle} onContextMenu={this.onContextMenu}>\n\t\t\t\t{menuItems}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nCommonContextMenu.propTypes = {\n\tcontextHandler: PropTypes.func.isRequired,\n\tmenuDefinition: PropTypes.array.isRequired,\n\tcanvasRect: PropTypes.object.isRequired,\n\tmousePos: PropTypes.object.isRequired\n};\n\nexport default CommonContextMenu;\n","/*\n * Copyright 2017-2022 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 CommonContextMenu from \"./common-context-menu.jsx\";\n\nexport default class ContextMenuWrapper extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.state = {};\n\n\t\tthis.contextMenuClicked = this.contextMenuClicked.bind(this);\n\t\tthis.handleClickOutside = this.handleClickOutside.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tdocument.addEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\tcomponentWillUnmount() {\n\t\tdocument.removeEventListener(\"click\", this.handleClickOutside, true);\n\t}\n\n\t// Returns an object that describes the dimensions of a rectangle for the\n\t// canvas div with coordinates based on the top left corner of the div. This\n\t// will match the coordinates for the mouse position where the user clicked,\n\t// which is specified in this.props.contextMenuPos object.\n\tgetCanvasRect() {\n\t\tconst containingDiv = document.getElementById(this.props.containingDivId);\n\t\tconst clientRect = containingDiv.getBoundingClientRect();\n\t\tconst canvasRect = {\n\t\t\ttop: 0,\n\t\t\tbottom: clientRect.bottom - clientRect.top,\n\t\t\tleft: 0,\n\t\t\tright: clientRect.right - clientRect.left,\n\t\t\theight: clientRect.height,\n\t\t\twidth: clientRect.width\n\t\t};\n\n\t\treturn canvasRect;\n\t}\n\n\thandleClickOutside(e) {\n\t\t// On Safari, when a user is displaying the context menu with a ctrl-click\n\t\t// (which is a supported context menu gesture on the Mac) a secondary click\n\t\t// event is emmitted which is received here with the ctrlKey field enabled.\n\t\t// So we ignore that event otherwse, if we continue, the context menu will\n\t\t// be closed.\n\t\tif (e.ctrlKey) {\n\t\t\te.stopPropagation();\n\t\t\treturn;\n\t\t}\n\n\t\t// If the click was anywhere outside the context menu and\n\t\t// the ellipsis button we just close the menu.\n\t\tif (!this.isOverContextMenu(e) && !this.isOverEllipsisButton(e)) {\n\t\t\t// This stop propagation is needed in common canvas so that selected nodes will\n\t\t\t// remain selected even after clicking outside the context menu to close the menu.\n\t\t\tif (this.props.stopPropagation) {\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t\tthis.props.closeContextMenu();\n\t\t}\n\t}\n\n\t// Retruns true if the event occurred over the context menu.\n\tisOverContextMenu(e) {\n\t\tconst domNode = document.getElementById(\"context-menu-popover\");\n\t\treturn !domNode || domNode.contains(e.target);\n\t}\n\n\t// Returns true if the event occurred over the ellipsis button. Typically\n\t// there will be only one ellipsis button on the canvas, since they are only\n\t// displayed on hover, but in some test cicumstances there might be more\n\t// than one.\n\tisOverEllipsisButton(e) {\n\t\tconst ellipsisNodes = document.getElementsByClassName(\"d3-node-ellipsis-group\");\n\t\tlet state = false;\n\t\tfor (let i = 0; i < ellipsisNodes.length; i++) {\n\t\t\tif (state === false && ellipsisNodes[i].contains(e.target)) {\n\t\t\t\tstate = true;\n\t\t\t}\n\t\t}\n\t\treturn state;\n\t}\n\n\tcontextMenuClicked(action, param) {\n\t\tthis.props.contextMenuActionHandler(action, param);\n\t}\n\n\trender() {\n\t\treturn (\n\t\t\t<CommonContextMenu\n\t\t\t\tcontextHandler={this.contextMenuClicked}\n\t\t\t\tmenuDefinition={this.props.contextMenuDef}\n\t\t\t\tcanvasRect={this.getCanvasRect()}\n\t\t\t\tmousePos={this.props.contextMenuPos}\n\t\t\t/>\n\t\t);\n\t}\n}\n\nContextMenuWrapper.propTypes = {\n\tcontextMenuDef: PropTypes.array.isRequired,\n\tcontainingDivId: PropTypes.string.isRequired,\n\tcontextMenuPos: PropTypes.object.isRequired,\n\tcontextMenuActionHandler: PropTypes.func.isRequired,\n\tcloseContextMenu: PropTypes.func.isRequired,\n\tstopPropagation: PropTypes.bool\n};\n"],"names":["_inherits","props","_classCallCheck","_this","logger","Logger","onClick","bind","_createClass","key","value","evt","color","target","dataset","this","clickActionHandler","log","React","className","tabIndex","Component","state","itemSelected","colorClicked","e","preventDefault","data","selectedEvent","contextHandler","stopPropagation","menu","numDividers","i","length","divider","height","width","mousePos","menuSize","canvasRect","menuPos","x","y","submenuItems","itemCount","disabledCount","forEach","submenuItem","enable","menuDefinition","customDivider","menuItems","runningYPos","previousDivider","submenu","push","MenuItem","attributes","subMenuSize","subMenuContent","buildColorPickerPanel","subMenu","buildSubMenu","disabled","areAllSubmenuItemsDisabled","calculateMenuSize","buildMenu","action","label","ColorPickerPanel","colorPickHandler","index","rtl","buildRtlState","subMenuPosStyle","buildSubMenuPosStyle","icon","Icon","type","CONTEXT_MENU_CARBON_ICONS","CHEVRONARROWS","RIGHT","menuItem","SubMenu","title","style","right","bottom","top","calculateMenuPos","posStyle","left","id","onContextMenu","ContextMenuWrapper","contextMenuClicked","handleClickOutside","document","addEventListener","removeEventListener","clientRect","getElementById","containingDivId","getBoundingClientRect","ctrlKey","isOverContextMenu","isOverEllipsisButton","closeContextMenu","domNode","contains","ellipsisNodes","getElementsByClassName","param","contextMenuActionHandler","CommonContextMenu","contextMenuDef","getCanvasRect","contextMenuPos"],"mappings":"i6BAkBiD,kBAG3BA,iBAAA,WACrB,WAAYC,GAAO,MAIqB,OAJrBC,2BAClBC,cAAMF,IACDG,OAAS,IAAIC,SAAO,kBAEzBF,EAAKG,QAAUH,EAAKG,QAAQC,oCA0B5B,OAzBAC,mBAAAC,cAAAC,MAED,SAAQC,GACP,IAAMC,EAAQD,EAAIE,OAAOC,QAAQF,MACjCG,KAAKd,MAAMe,mBAAmBJ,MAC9BH,aAAAC,MAED,WAEC,OADAK,KAAKX,OAAOa,IAAI,UAEfC,+BAAKC,UAAU,qBAAqBb,QAASS,KAAKT,SACjDY,+BAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,+BAAKE,SAAS,IAAI,aAAY,oBAAqBD,UAAU,gCAC7DD,+BAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,+BAAKE,SAAS,IAAI,aAAY,mBAAoBD,UAAU,+BAC5DD,+BAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,+BAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAE3DD,+BAAKE,SAAS,IAAI,aAAY,iBAAkBD,UAAU,6BAC1DD,+BAAKE,SAAS,IAAI,aAAY,oBAAqBD,UAAU,gCAC7DD,+BAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,+BAAKE,SAAS,IAAI,aAAY,mBAAoBD,UAAU,+BAC5DD,+BAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DD,+BAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,oCAE7D,EA/B6BD,UAAMG,6eCIrC,kBAMuBrB,iBAAA,WACtB,WAAYC,GAAO,MAI+B,OAJ/BC,2BAClBC,cAAMF,IACDqB,MAAQ,GACbnB,EAAKoB,aAAepB,EAAKoB,aAAahB,kCACtCJ,EAAKqB,aAAerB,EAAKqB,aAAajB,oCAoNtC,OAnNAC,mBAAAC,oBAAAC,MAED,SAAce,GACbA,EAAEC,oBACFjB,mBAAAC,MAED,SAAaiB,EAAMC,GAClBb,KAAKd,MAAM4B,eAAeF,GAGtBC,GACHA,EAAcE,qBAEfrB,mBAAAC,MAED,SAAaE,GACZG,KAAKd,MAAM4B,eAAe,uBAAwB,CAAEjB,MAAAA,OACpDH,wBAAAC,MAED,SAAkBqB,GAEjB,IADA,IAAIC,EAAc,EACTC,EAAI,EAAGA,EAAIF,EAAKG,SAAUD,EAAG,CACrBF,EAAKE,GAAGE,SAEvBH,IASF,MALe,CACdI,OAxC8B,IAwCpBL,EAAKG,OAASF,GAvCS,EAuCmCA,EACpEK,MA1CwB,QAiD1B5B,uBAAAC,MACA,SAAiB4B,EAAUC,EAAUC,GACpC,IAAMC,EAAU,CAAEC,EAAGJ,EAASI,EAAGC,EAAGL,EAASK,GAyB7C,OAtBIL,EAASK,EAAIJ,EAASH,OAASI,EAAWJ,SAC7CK,EAAQE,EAAIH,EAAWJ,OAASG,EAASH,OApDvB,EAwDdK,EAAQE,EAAI,IACfF,EAAQE,EAAI,IAKVL,EAASI,EAAIH,EAASF,MAAQG,EAAWH,QAC5CI,EAAQC,GAAKH,EAASF,OAOvBI,EAAQC,GAAK,EACbD,EAAQE,GAAK,EAENF,KACPhC,iCAAAC,MAED,SAA2BkC,GAC1B,IAAIC,EAAY,EACZC,EAAgB,EASpB,OARAF,EAAaG,SAAQ,SAASC,GACxBA,EAAYb,SAChBU,KAE0B,IAAvBG,EAAYC,QACfH,OAGKA,IAAkBD,KACzBpC,gBAAAC,MAED,SAAUwC,EAAgBX,EAAUE,EAASD,GAa5C,IAZA,IAAMW,EAAgB,CACrBhC,UAAW,uBAGNiC,EAAY,GAEdC,EAAc,EAIdC,GAAkB,EAEbrB,EAAI,EAAGA,EAAIiB,EAAehB,SAAUD,EAAG,CAC/C,IAAME,EAAUe,EAAejB,GAAGE,QAC5BoB,EAAUL,EAAejB,GAAGsB,QAElC,GAAIpB,EACEmB,IACJF,EAAUI,KAAKtC,wBAACuC,YAASC,WAAYP,EAAe1C,IAAKwB,EAAI,EAAG3B,QAAS,aAAU6B,cACnFkB,GA/G+B,EAgH/BC,GAAkB,QAGb,GAAIC,EAEV,GADAD,GAAkB,EACa,gBAA3BJ,EAAejB,GAAGF,KAAwB,CAC7C,IACM4B,EAAc,CAAEtB,MAzHA,IAyH2BD,OAAQ,IACnDwB,EAAiB7C,KAAK8C,wBAEtBC,EAAU/C,KAAKgD,aACpBb,EAAgBjB,EAAG2B,EAAgBP,EAAaZ,EAASF,EAAUoB,EAAanB,GALhE,GAMjBY,EAAUI,KAAKM,GAEfT,GA/H4B,OAiItB,CACN,IAAMW,EAAW,CAAEA,SAAUjD,KAAKkD,2BAA2Bf,EAAejB,GAAGF,OACzE4B,EAAc5C,KAAKmD,kBAAkBhB,EAAejB,GAAGF,MACvD6B,EAAiB7C,KAAKoD,UAAUjB,EAAejB,GAAGF,KAAMQ,EAAUE,EAASD,GAE3EsB,EAAU/C,KAAKgD,aACpBb,EAAgBjB,EAAG2B,EAAgBP,EAAaZ,EAASF,EAAUoB,EAAanB,EAAYwB,GAC7FZ,EAAUI,KAAKM,GAEfT,GA1I4B,OA6IvB,CACNC,GAAkB,EAClB,IAAMU,EAAW,CAAEA,UAAuC,IAA7Bd,EAAejB,GAAGgB,QAC/CG,EAAUI,KACTtC,wBAACuC,uBAASnD,QAASS,KAAKQ,aAAahB,KAAK,KAAM2C,EAAejB,GAAGmC,QAAS3D,IAAKwB,EAAI,GAAO+B,GACzFd,EAAejB,GAAGoC,QAGrBhB,GArJ6B,IAwJ/B,OAAOD,KACP3C,4BAAAC,MAED,WACC,OACCQ,wBAACoD,qBAAiBtD,mBAAoBD,KAAKwD,uCAAsCxD,KAAKS,kBAEvFf,mBAAAC,MAED,SAAawC,EAAgBsB,EAAOZ,EAAgBP,EAAaZ,EAChEF,EAAUoB,EAAanB,EAAYwB,GACnC,IAAMS,EAAM1D,KAAK2D,cAAcjC,EAASF,EAAUoB,EAAanB,GACzDmC,EAAkB5D,KAAK6D,qBAAqBvB,EAAaZ,EAASkB,EAAanB,GAE/EqC,EAAO3D,wBAAC4D,QAAKC,KAAMC,4BAA0BC,cAAcC,MAAOlB,UAAU,EAAO7C,UAAW,mCAC9FgE,EAAWjE,mCAAMgC,EAAesB,GAAOH,MAAOQ,EAAK,KAEzD,OACC3D,wBAACkE,sBAAQC,MAAOF,EAAU1E,IAAK+D,EAAQ,EAAGrD,UAAU,sBAAsBsD,IAAKA,GAAST,GACvF9C,+BAAKT,IAAK+D,EAAQ,EAAGc,MAAOX,EAAiBxD,UAAU,wBACrDyC,OAQLnD,oBAAAC,MACA,SAAc+B,EAASF,EAAUoB,EAAanB,GAG7C,OAAQC,EAAQC,EAAIH,EAASF,MAAQsB,EAAYtB,MAAQG,EAAW+C,SAMrE9E,2BAAAC,MACA,SAAqB2C,EAAaZ,EAASkB,EAAanB,GAEvD,IAAMG,EAAIH,EAAWgD,QAAU/C,EAAQE,EAAIU,EAAcM,EAAYvB,QAUrE,MAHwB,CACvBqD,KAHe9C,EAAI,EAAK,EAAIA,EApMV,GAuMJ,SAGflC,aAAAC,MAED,WAEC,IAAM6B,EAAWxB,KAAKmD,kBAAkBnD,KAAKd,MAAMiD,gBAC7CT,EAAU1B,KAAK2E,iBAAiB3E,KAAKd,MAAMqC,SAAUC,EAAUxB,KAAKd,MAAMuC,YAC1EmD,EAAW,CAChBC,KAAMnD,EAAQC,EAAI,KAClB+C,IAAKhD,EAAQE,EAAI,MAGZS,EAAYrC,KAAKoD,UAAUpD,KAAKd,MAAMiD,eAAgBX,EAAUE,EAAS1B,KAAKd,MAAMuC,YAE1F,OACCtB,+BAAK2E,GAAG,uBAAuB1E,UAAU,uBAAuBmE,MAAOK,EAAUG,cAAe/E,KAAK+E,eACnG1C,QAGH,EAzN8BlC,UAAMG,ifCXjB0E,cAAkB/F,iBAAA,WACtC,WAAYC,GAAO,MAK2C,OAL3CC,2BAClBC,cAAMF,IACDqB,MAAQ,GAEbnB,EAAK6F,mBAAqB7F,EAAK6F,mBAAmBzF,kCAClDJ,EAAK8F,mBAAqB9F,EAAK8F,mBAAmB1F,oCAuFlD,OAtFAC,mBAAAC,wBAAAC,MAED,WACCwF,SAASC,iBAAiB,QAASpF,KAAKkF,oBAAoB,MAC5DxF,2BAAAC,MAED,WACCwF,SAASE,oBAAoB,QAASrF,KAAKkF,oBAAoB,MAMhExF,oBAAAC,MACA,WACC,IACM2F,EADgBH,SAASI,eAAevF,KAAKd,MAAMsG,iBACxBC,wBAUjC,MATmB,CAClBf,IAAK,EACLD,OAAQa,EAAWb,OAASa,EAAWZ,IACvCG,KAAM,EACNL,MAAOc,EAAWd,MAAQc,EAAWT,KACrCxD,OAAQiE,EAAWjE,OACnBC,MAAOgE,EAAWhE,UAInB5B,yBAAAC,MAED,SAAmBe,GAMdA,EAAEgF,QACLhF,EAAEK,kBAMEf,KAAK2F,kBAAkBjF,IAAOV,KAAK4F,qBAAqBlF,KAGxDV,KAAKd,MAAM6B,iBACdL,EAAEK,kBAEHf,KAAKd,MAAM2G,uBAIbnG,wBAAAC,MACA,SAAkBe,GACjB,IAAMoF,EAAUX,SAASI,eAAe,wBACxC,OAAQO,GAAWA,EAAQC,SAASrF,EAAEZ,WAMvCJ,2BAAAC,MACA,SAAqBe,GAGpB,IAFA,IAAMsF,EAAgBb,SAASc,uBAAuB,0BAClD1F,GAAQ,EACHW,EAAI,EAAGA,EAAI8E,EAAc7E,OAAQD,KAC3B,IAAVX,GAAmByF,EAAc9E,GAAG6E,SAASrF,EAAEZ,UAClDS,GAAQ,GAGV,OAAOA,KACPb,yBAAAC,MAED,SAAmB0D,EAAQ6C,GAC1BlG,KAAKd,MAAMiH,yBAAyB9C,EAAQ6C,MAC5CxG,aAAAC,MAED,WACC,OACCQ,wBAACiG,GACAtF,eAAgBd,KAAKiF,mBACrB9C,eAAgBnC,KAAKd,MAAMmH,eAC3B5E,WAAYzB,KAAKsG,gBACjB/E,SAAUvB,KAAKd,MAAMqH,sBAGvB,EA7F8CpG,UAAMG"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{F as default}from"../../index-
|
|
1
|
+
export{F as default}from"../../index-5d62eee8.js";import"../../createClass-be661622.js";import"../../getPrototypeOf-3751add9.js";import"../../isArrayLikeObject-a9c7973b.js";import"../../flexible-table-d4bd5c25.js";import"../../extends-a9c1b4cd.js";import"react";import"react-intl";import"react-dom";import"carbon-components-react";import"../../_baseForOwn-d38b560e.js";import"react-virtualized";import"react-draggable";import"@carbon/icons-react";import"../tooltip.es.js";import"react-portal";import"uuid";import"react-resize-detector";import"../../canvas-constants-ba465147.js";import"../../en-7201b548.js";import"../../icon-4a6f3dad.js";import"react-inlinesvg";
|
|
2
2
|
//# sourceMappingURL=field-picker.es.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../../index-
|
|
1
|
+
"use strict";var e=require("../../index-c8a96051.js");require("../../createClass-826941b3.js"),require("../../getPrototypeOf-1e698126.js"),require("../../isArrayLikeObject-f3b27f64.js"),require("../../flexible-table-f7b58f99.js"),require("../../extends-841b39ac.js"),require("react"),require("react-intl"),require("react-dom"),require("carbon-components-react"),require("../../_baseForOwn-7d4e8506.js"),require("react-virtualized"),require("react-draggable"),require("@carbon/icons-react"),require("../tooltip.js"),require("react-portal"),require("uuid"),require("react-resize-detector"),require("../../canvas-constants-07dbe4b7.js"),require("../../en-a08356c8.js"),require("../../icon-f6f2bffc.js"),require("react-inlinesvg"),module.exports=e.FieldPicker;
|
|
2
2
|
//# sourceMappingURL=field-picker.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{F as t}from"../../flexible-table-
|
|
1
|
+
import{F as t}from"../../flexible-table-d4bd5c25.js";export{F as default}from"../../flexible-table-d4bd5c25.js";import"../../extends-a9c1b4cd.js";import"../../createClass-be661622.js";import"../../getPrototypeOf-3751add9.js";import"../../isArrayLikeObject-a9c7973b.js";import"react";import"react-intl";import"react-dom";import"carbon-components-react";import"../../_baseForOwn-d38b560e.js";import"react-virtualized";import"react-draggable";import"@carbon/icons-react";import"../tooltip.es.js";import"react-portal";import"uuid";import"react-resize-detector";
|
|
2
2
|
//# sourceMappingURL=flexible-table.es.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("../../flexible-table-
|
|
1
|
+
"use strict";var e=require("../../flexible-table-f7b58f99.js");require("../../extends-841b39ac.js"),require("../../createClass-826941b3.js"),require("../../getPrototypeOf-1e698126.js"),require("../../isArrayLikeObject-f3b27f64.js"),require("react"),require("react-intl"),require("react-dom"),require("carbon-components-react"),require("../../_baseForOwn-7d4e8506.js"),require("react-virtualized"),require("react-draggable"),require("@carbon/icons-react"),require("../tooltip.js"),require("react-portal"),require("uuid"),require("react-resize-detector"),module.exports=e.FlexibleTable;
|
|
2
2
|
//# sourceMappingURL=flexible-table.js.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export{c as CommonProperties,P as PropertiesController}from"../common-properties-
|
|
1
|
+
export{c as CommonProperties,P as PropertiesController}from"../common-properties-f596260f.js";export{F as FlexibleTable}from"../flexible-table-d4bd5c25.js";export{F as FieldPicker}from"../index-5d62eee8.js";import"../createClass-be661622.js";import"../getPrototypeOf-3751add9.js";import"react";import"../en-7201b548.js";import"../isArrayLikeObject-a9c7973b.js";import"../datarecord-metadata-v3-schema-ba1f2849.js";import"carbon-components-react";import"../extends-a9c1b4cd.js";import"react-portal";import"react-redux";import"@carbon/icons-react";import"react-dom";import"../icon-4a6f3dad.js";import"react-inlinesvg";import"../canvas-constants-ba465147.js";import"uuid";import"./tooltip.es.js";import"redux";import"seedrandom";import"./command-stack.es.js";import"immutable";import"react-intl";import"date-fns";import"prop-types";import"../toolbar-c8779b93.js";import"react-resize-detector";import"react-codemirror2";import"jsonschema";import"../_baseForOwn-d38b560e.js";import"react-virtualized";import"react-draggable";
|
|
2
2
|
//# sourceMappingURL=properties.es.js.map
|
package/dist/lib/properties.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../common-properties-
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("../common-properties-97261017.js"),r=require("../flexible-table-f7b58f99.js"),i=require("../index-c8a96051.js");require("../createClass-826941b3.js"),require("../getPrototypeOf-1e698126.js"),require("react"),require("../en-a08356c8.js"),require("../isArrayLikeObject-f3b27f64.js"),require("../datarecord-metadata-v3-schema-6a3754ce.js"),require("carbon-components-react"),require("../extends-841b39ac.js"),require("react-portal"),require("react-redux"),require("@carbon/icons-react"),require("react-dom"),require("../icon-f6f2bffc.js"),require("react-inlinesvg"),require("../canvas-constants-07dbe4b7.js"),require("uuid"),require("./tooltip.js"),require("redux"),require("seedrandom"),require("./command-stack.js"),require("immutable"),require("react-intl"),require("date-fns"),require("prop-types"),require("../toolbar-96922752.js"),require("react-resize-detector"),require("react-codemirror2"),require("jsonschema"),require("../_baseForOwn-7d4e8506.js"),require("react-virtualized"),require("react-draggable"),exports.CommonProperties=e.commonProperties,exports.PropertiesController=e.PropertiesController,exports.FlexibleTable=r.FlexibleTable,exports.FieldPicker=i.FieldPicker;
|
|
2
2
|
//# sourceMappingURL=properties.js.map
|