@elyra/canvas 12.35.0 → 12.37.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/dist/canvas-constants-766c12a9.js +2 -0
  2. package/dist/{canvas-constants-85883d4c.js.map → canvas-constants-766c12a9.js.map} +1 -1
  3. package/dist/canvas-constants-f4219d26.js +2 -0
  4. package/dist/{canvas-constants-d8652829.js.map → canvas-constants-f4219d26.js.map} +1 -1
  5. package/dist/canvas-controller-62b66fc8.js +2 -0
  6. package/dist/canvas-controller-62b66fc8.js.map +1 -0
  7. package/dist/canvas-controller-76f68572.js +2 -0
  8. package/dist/canvas-controller-76f68572.js.map +1 -0
  9. package/dist/common-canvas-339584b8.js +2 -0
  10. package/dist/common-canvas-339584b8.js.map +1 -0
  11. package/dist/common-canvas-c728f092.js +2 -0
  12. package/dist/common-canvas-c728f092.js.map +1 -0
  13. package/dist/common-canvas.es.js +1 -1
  14. package/dist/common-canvas.es.js.map +1 -1
  15. package/dist/common-canvas.js +1 -1
  16. package/dist/common-canvas.js.map +1 -1
  17. package/dist/common-properties-009d29d6.js +2 -0
  18. package/dist/common-properties-009d29d6.js.map +1 -0
  19. package/dist/common-properties-99d34523.js +2 -0
  20. package/dist/common-properties-99d34523.js.map +1 -0
  21. package/dist/context-menu-wrapper-624a1e7c.js +2 -0
  22. package/dist/context-menu-wrapper-624a1e7c.js.map +1 -0
  23. package/dist/context-menu-wrapper-ab018d6e.js +2 -0
  24. package/dist/context-menu-wrapper-ab018d6e.js.map +1 -0
  25. package/dist/{datarecord-metadata-v3-schema-531c7b07.js → datarecord-metadata-v3-schema-1f21696a.js} +2 -2
  26. package/dist/{datarecord-metadata-v3-schema-531c7b07.js.map → datarecord-metadata-v3-schema-1f21696a.js.map} +1 -1
  27. package/dist/{datarecord-metadata-v3-schema-28d4d7bb.js → datarecord-metadata-v3-schema-c2ad8862.js} +2 -2
  28. package/dist/{datarecord-metadata-v3-schema-28d4d7bb.js.map → datarecord-metadata-v3-schema-c2ad8862.js.map} +1 -1
  29. package/dist/flexible-table-4cf19e2e.js +2 -0
  30. package/dist/flexible-table-4cf19e2e.js.map +1 -0
  31. package/dist/flexible-table-8d10f5c9.js +2 -0
  32. package/dist/flexible-table-8d10f5c9.js.map +1 -0
  33. package/dist/{icon-909437d7.js → icon-5e06bfe1.js} +2 -2
  34. package/dist/{icon-909437d7.js.map → icon-5e06bfe1.js.map} +1 -1
  35. package/dist/{icon-de9c6b33.js → icon-8433d369.js} +2 -2
  36. package/dist/{icon-de9c6b33.js.map → icon-8433d369.js.map} +1 -1
  37. package/dist/{index-9960d3bf.js → index-2a61be58.js} +2 -2
  38. package/dist/{index-9960d3bf.js.map → index-2a61be58.js.map} +1 -1
  39. package/dist/{index-61e4a113.js → index-9a355ed6.js} +2 -2
  40. package/dist/{index-61e4a113.js.map → index-9a355ed6.js.map} +1 -1
  41. package/dist/lib/canvas-controller.es.js +1 -1
  42. package/dist/lib/canvas-controller.js +1 -1
  43. package/dist/lib/canvas.es.js +1 -1
  44. package/dist/lib/canvas.js +1 -1
  45. package/dist/lib/context-menu.es.js +1 -1
  46. package/dist/lib/context-menu.js +1 -1
  47. package/dist/lib/properties/field-picker.es.js +1 -1
  48. package/dist/lib/properties/field-picker.js +1 -1
  49. package/dist/lib/properties/flexible-table.es.js +1 -1
  50. package/dist/lib/properties/flexible-table.js +1 -1
  51. package/dist/lib/properties.es.js +1 -1
  52. package/dist/lib/properties.js +1 -1
  53. package/dist/styles/common-canvas.min.css +1 -1
  54. package/dist/styles/common-canvas.min.css.map +1 -1
  55. package/dist/{toolbar-cdb38f4a.js → toolbar-76733735.js} +2 -2
  56. package/dist/{toolbar-cdb38f4a.js.map → toolbar-76733735.js.map} +1 -1
  57. package/dist/{toolbar-3b5a592c.js → toolbar-85e1e463.js} +2 -2
  58. package/dist/{toolbar-3b5a592c.js.map → toolbar-85e1e463.js.map} +1 -1
  59. package/locales/common-canvas/locales/en.json +1 -1
  60. package/locales/common-canvas/locales/eo.json +1 -1
  61. package/package.json +3 -4
  62. package/src/common-canvas/canvas-controller.js +15 -6
  63. package/src/common-canvas/cc-contents.jsx +44 -6
  64. package/src/common-canvas/common-canvas-utils.js +9 -2
  65. package/src/common-canvas/common-canvas.scss +30 -3
  66. package/src/common-canvas/constants/canvas-constants.js +0 -6
  67. package/src/common-canvas/svg-canvas-d3.js +1 -3
  68. package/src/common-canvas/svg-canvas-d3.scss +0 -26
  69. package/src/common-canvas/svg-canvas-pipeline.js +6 -0
  70. package/src/common-canvas/svg-canvas-renderer.js +490 -2804
  71. package/src/common-canvas/svg-canvas-utils-drag-det-link.js +491 -0
  72. package/src/common-canvas/svg-canvas-utils-drag-new-link.js +595 -0
  73. package/src/common-canvas/svg-canvas-utils-drag-objects.js +832 -0
  74. package/src/common-canvas/svg-canvas-utils-external.js +82 -16
  75. package/src/common-canvas/svg-canvas-utils-zoom.js +780 -0
  76. package/src/common-properties/common-properties.jsx +2 -0
  77. package/src/common-properties/components/editor-form/editor-form.jsx +5 -1
  78. package/src/common-properties/properties-main/properties-main.jsx +2 -0
  79. package/src/context-menu/common-context-menu.jsx +57 -26
  80. package/src/context-menu/context-menu.scss +33 -53
  81. package/src/notification-panel/notification-panel.jsx +6 -1
  82. package/src/notification-panel/notification-panel.scss +14 -8
  83. package/src/palette/palette-content-list-item.jsx +23 -7
  84. package/src/palette/palette.scss +4 -4
  85. package/stats.html +1 -1
  86. package/dist/canvas-constants-85883d4c.js +0 -2
  87. package/dist/canvas-constants-d8652829.js +0 -2
  88. package/dist/canvas-controller-c9f3bef9.js +0 -2
  89. package/dist/canvas-controller-c9f3bef9.js.map +0 -1
  90. package/dist/canvas-controller-f7820ab0.js +0 -2
  91. package/dist/canvas-controller-f7820ab0.js.map +0 -1
  92. package/dist/common-canvas-487520d3.js +0 -2
  93. package/dist/common-canvas-487520d3.js.map +0 -1
  94. package/dist/common-canvas-e1591f51.js +0 -2
  95. package/dist/common-canvas-e1591f51.js.map +0 -1
  96. package/dist/common-properties-580436d7.js +0 -2
  97. package/dist/common-properties-580436d7.js.map +0 -1
  98. package/dist/common-properties-98a9a99f.js +0 -2
  99. package/dist/common-properties-98a9a99f.js.map +0 -1
  100. package/dist/context-menu-wrapper-19a1cf72.js +0 -2
  101. package/dist/context-menu-wrapper-19a1cf72.js.map +0 -1
  102. package/dist/context-menu-wrapper-c3a98c63.js +0 -2
  103. package/dist/context-menu-wrapper-c3a98c63.js.map +0 -1
  104. package/dist/extends-093996c9.js +0 -2
  105. package/dist/extends-093996c9.js.map +0 -1
  106. package/dist/extends-1b35a664.js +0 -2
  107. package/dist/extends-1b35a664.js.map +0 -1
  108. package/dist/flexible-table-b9c08069.js +0 -2
  109. package/dist/flexible-table-b9c08069.js.map +0 -1
  110. package/dist/flexible-table-ddd6132b.js +0 -2
  111. package/dist/flexible-table-ddd6132b.js.map +0 -1
@@ -1,2 +0,0 @@
1
- import{_ as e,a as t}from"./createClass-ffbbe837.js";import{_ as n,a as o,b as r,c}from"./getPrototypeOf-012c454b.js";import i from"react";import{_ as l}from"./extends-093996c9.js";import{MenuItem as a,SubMenu as u}from"react-contextmenu";import{ChevronRight16 as s}from"@carbon/icons-react";import{L as d}from"./canvas-logger-fec87cd1.js";function m(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 f=function(o){n(l,o);var r=m(l);function l(t){var n;return e(this,l),(n=r.call(this,t)).logger=new d("CC-Color-Picker"),n.onClick=n.onClick.bind(c(n)),n}return t(l,[{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",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"}))}}]),l}(i.Component);function h(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 p=function(o){n(d,o);var r=h(d);function d(t){var n;return e(this,d),(n=r.call(this,t)).state={},n.itemSelected=n.itemSelected.bind(c(n)),n.colorClicked=n.colorClicked.bind(c(n)),n}return t(d,[{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=[],u=0,s=!1,d=0;d<e.length;++d){var m=e[d].divider,f=e[d].submenu;if(m)s||(c.push(i.createElement(a,{attributes:r,key:d+1,onClick:function(){},divider:!0})),u+=1,s=!0);else if("colorBackground"===e[d].action){s=!1;var h={width:160,height:50},p=this.buildColorPickerPanel(),v=this.buildSubMenu(e,d,p,u,n,t,h,o,!1);c.push(v),u+=30}else if(f){s=!1;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,u,n,t,y,o,k);c.push(g),u+=30}else{s=!1;var x={disabled:!1===e[d].enable};c.push(i.createElement(a,l({onClick:this.itemSelected.bind(null,e[d].action),key:d+1},x),e[d].label)),u+=30}}return c}},{key:"buildColorPickerPanel",value:function(){return i.createElement(f,{clickActionHandler:this.colorClicked})}},{key:"buildSubMenu",value:function(e,t,n,o,r,c,a,d,m){var f=this.buildRtlState(r,c,a,d),h=this.buildSubMenuPosStyle(o,r,a,d),p=i.createElement(s,null),v=i.createElement("div",null,e[t].label,p," ");return i.createElement(u,l({title:v,key:t+1,className:"contextmenu-submenu",rtl:f},m),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)}}]),d}(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(l,o);var r=v(l);function l(t){var n;return e(this,l),(n=r.call(this,t)).state={},n.contextMenuClicked=n.contextMenuClicked.bind(c(n)),n.handleClickOutside=n.handleClickOutside.bind(c(n)),n}return t(l,[{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);if(e){var t=e.getBoundingClientRect();return{top:0,bottom:t.bottom-t.top,left:0,right:t.right-t.left,height:t.height,width:t.width}}return{top:0,bottom:200,left:0,right:50,height:200,width:50}}},{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(p,{contextHandler:this.contextMenuClicked,menuDefinition:this.props.contextMenuDef,canvasRect:this.getCanvasRect(),mousePos:this.props.contextMenuPos})}}]),l}(i.Component);export{k as C,f as a};
2
- //# sourceMappingURL=context-menu-wrapper-19a1cf72.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-menu-wrapper-19a1cf72.js","sources":["../src/color-picker/color-picker.jsx","../src/context-menu/common-context-menu.jsx","../src/context-menu/context-menu-wrapper.jsx"],"sourcesContent":["/*\n * Copyright 2017-2023 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 ColorPicker extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.logger = new Logger(\"CC-Color-Picker\");\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\" 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\nColorPicker.propTypes = {\n\tclickActionHandler: PropTypes.func.isRequired\n};\n\nexport default ColorPicker;\n","/*\n * Copyright 2017-2023 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 { ChevronRight16 } from \"@carbon/icons-react\";\nimport ColorPicker from \"../color-picker\";\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\t\t\t} else if (menuDefinition[i].action === \"colorBackground\") {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = false;\n\t\t\t\tconst subMenuSize = { width: CONTEXT_MENU_WIDTH, height: 50 };\n\t\t\t\tconst subMenuContent = this.buildColorPickerPanel();\n\n\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\n\t\t\t} else if (submenu) {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = { disabled: this.areAllSubmenuItemsDisabled(menuDefinition[i].menu) };\n\t\t\t\tconst subMenuSize = this.calculateMenuSize(menuDefinition[i].menu);\n\t\t\t\tconst subMenuContent = this.buildMenu(menuDefinition[i].menu, menuSize, menuPos, canvasRect);\n\n\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\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<ColorPicker 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 = (<ChevronRight16 />);\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-2023 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\tif (containingDiv) {\n\t\t\tconst clientRect = containingDiv.getBoundingClientRect();\n\t\t\treturn {\n\t\t\t\ttop: 0,\n\t\t\t\tbottom: clientRect.bottom - clientRect.top,\n\t\t\t\tleft: 0,\n\t\t\t\tright: clientRect.right - clientRect.left,\n\t\t\t\theight: clientRect.height,\n\t\t\t\twidth: clientRect.width\n\t\t\t};\n\t\t}\n\t\t// Assist Jests tests to run when containingDiv is not available.\n\t\treturn { top: 0, bottom: 200, left: 0, right: 50, height: 200, width: 50 };\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":["_React$Component","_inherits","ColorPicker","_super","_createSuper","props","_this","_classCallCheck","call","logger","Logger","onClick","bind","_assertThisInitialized","_createClass","key","value","evt","color","target","dataset","this","clickActionHandler","log","React","createElement","className","tabIndex","Component","CommonContextMenu","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","action","subMenuSize","subMenuContent","buildColorPickerPanel","subMenu","buildSubMenu","disabled","areAllSubmenuItemsDisabled","calculateMenuSize","buildMenu","_extends","label","index","rtl","buildRtlState","subMenuPosStyle","buildSubMenuPosStyle","icon","ChevronRight16","menuItem","SubMenu","title","style","right","bottom","top","calculateMenuPos","posStyle","left","id","onContextMenu","ContextMenuWrapper","contextMenuClicked","handleClickOutside","document","addEventListener","removeEventListener","containingDiv","getElementById","containingDivId","clientRect","getBoundingClientRect","ctrlKey","isOverContextMenu","isOverEllipsisButton","closeContextMenu","domNode","contains","ellipsisNodes","getElementsByClassName","param","contextMenuActionHandler","contextMenuDef","getCanvasRect","contextMenuPos"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- "use strict";var e=require("./createClass-09bc08f7.js"),t=require("./getPrototypeOf-5f227292.js"),n=require("react"),r=require("./extends-1b35a664.js"),o=require("react-contextmenu"),i=require("@carbon/icons-react"),l=require("./canvas-logger-34ca361a.js");function a(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var c=a(n);function u(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 s=function(n){t._inherits(o,n);var r=u(o);function o(n){var i;return e._classCallCheck(this,o),(i=r.call(this,n)).logger=new l.Logger("CC-Color-Picker"),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"),c.default.createElement("div",{className:"color-picker",onClick:this.onClick},c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-white-0",className:"color-picker-item white-0"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-yellow-20",className:"color-picker-item yellow-20"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-gray-20",className:"color-picker-item gray-20"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-green-20",className:"color-picker-item green-20"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-teal-20",className:"color-picker-item teal-20"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-cyan-20",className:"color-picker-item cyan-20"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-red-50",className:"color-picker-item red-50"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-orange-40",className:"color-picker-item orange-40"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-gray-50",className:"color-picker-item gray-50"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-green-50",className:"color-picker-item green-50"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-teal-50",className:"color-picker-item teal-50"}),c.default.createElement("div",{tabIndex:"0","data-color":"bkg-col-cyan-50",className:"color-picker-item cyan-50"}))}}]),o}(c.default.Component);function d(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 f=function(n){t._inherits(a,n);var l=d(a);function a(n){var r;return e._classCallCheck(this,a),(r=l.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,i){for(var l={className:"contextmenu-divider"},a=[],u=0,s=!1,d=0;d<e.length;++d){var f=e[d].divider,h=e[d].submenu;if(f)s||(a.push(c.default.createElement(o.MenuItem,{attributes:l,key:d+1,onClick:function(){},divider:!0})),u+=1,s=!0);else if("colorBackground"===e[d].action){s=!1;var p={width:160,height:50},v=this.buildColorPickerPanel(),m=this.buildSubMenu(e,d,v,u,n,t,p,i,!1);a.push(m),u+=30}else if(h){s=!1;var k={disabled:this.areAllSubmenuItemsDisabled(e[d].menu)},y=this.calculateMenuSize(e[d].menu),g=this.buildMenu(e[d].menu,t,n,i),b=this.buildSubMenu(e,d,g,u,n,t,y,i,k);a.push(b),u+=30}else{s=!1;var x={disabled:!1===e[d].enable};a.push(c.default.createElement(o.MenuItem,r._extends({onClick:this.itemSelected.bind(null,e[d].action),key:d+1},x),e[d].label)),u+=30}}return a}},{key:"buildColorPickerPanel",value:function(){return c.default.createElement(s,{clickActionHandler:this.colorClicked})}},{key:"buildSubMenu",value:function(e,t,n,l,a,u,s,d,f){var h=this.buildRtlState(a,u,s,d),p=this.buildSubMenuPosStyle(l,a,s,d),v=c.default.createElement(i.ChevronRight16,null),m=c.default.createElement("div",null,e[t].label,v," ");return c.default.createElement(o.SubMenu,r._extends({title:m,key:t+1,className:"contextmenu-submenu",rtl:h},f),c.default.createElement("div",{key:t+1,style:p,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 c.default.createElement("div",{id:"context-menu-popover",className:"context-menu-popover",style:n,onContextMenu:this.onContextMenu},r)}}]),a}(c.default.Component);function h(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 p=function(n){t._inherits(o,n);var r=h(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);if(e){var t=e.getBoundingClientRect();return{top:0,bottom:t.bottom-t.top,left:0,right:t.right-t.left,height:t.height,width:t.width}}return{top:0,bottom:200,left:0,right:50,height:200,width:50}}},{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 c.default.createElement(f,{contextHandler:this.contextMenuClicked,menuDefinition:this.props.contextMenuDef,canvasRect:this.getCanvasRect(),mousePos:this.props.contextMenuPos})}}]),o}(c.default.Component);exports.ColorPicker=s,exports.ContextMenuWrapper=p;
2
- //# sourceMappingURL=context-menu-wrapper-c3a98c63.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"context-menu-wrapper-c3a98c63.js","sources":["../src/color-picker/color-picker.jsx","../src/context-menu/common-context-menu.jsx","../src/context-menu/context-menu-wrapper.jsx"],"sourcesContent":["/*\n * Copyright 2017-2023 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 ColorPicker extends React.Component {\n\tconstructor(props) {\n\t\tsuper(props);\n\t\tthis.logger = new Logger(\"CC-Color-Picker\");\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\" 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\nColorPicker.propTypes = {\n\tclickActionHandler: PropTypes.func.isRequired\n};\n\nexport default ColorPicker;\n","/*\n * Copyright 2017-2023 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 { ChevronRight16 } from \"@carbon/icons-react\";\nimport ColorPicker from \"../color-picker\";\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\t\t\t} else if (menuDefinition[i].action === \"colorBackground\") {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = false;\n\t\t\t\tconst subMenuSize = { width: CONTEXT_MENU_WIDTH, height: 50 };\n\t\t\t\tconst subMenuContent = this.buildColorPickerPanel();\n\n\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\n\n\t\t\t} else if (submenu) {\n\t\t\t\tpreviousDivider = false;\n\t\t\t\tconst disabled = { disabled: this.areAllSubmenuItemsDisabled(menuDefinition[i].menu) };\n\t\t\t\tconst subMenuSize = this.calculateMenuSize(menuDefinition[i].menu);\n\t\t\t\tconst subMenuContent = this.buildMenu(menuDefinition[i].menu, menuSize, menuPos, canvasRect);\n\n\t\t\t\tconst subMenu = this.buildSubMenu(\n\t\t\t\t\tmenuDefinition, i, subMenuContent, runningYPos, menuPos, menuSize, subMenuSize, canvasRect, disabled);\n\t\t\t\tmenuItems.push(subMenu);\n\n\t\t\t\trunningYPos += CONTEXT_MENU_LINK_HEIGHT;\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<ColorPicker 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 = (<ChevronRight16 />);\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-2023 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\tif (containingDiv) {\n\t\t\tconst clientRect = containingDiv.getBoundingClientRect();\n\t\t\treturn {\n\t\t\t\ttop: 0,\n\t\t\t\tbottom: clientRect.bottom - clientRect.top,\n\t\t\t\tleft: 0,\n\t\t\t\tright: clientRect.right - clientRect.left,\n\t\t\t\theight: clientRect.height,\n\t\t\t\twidth: clientRect.width\n\t\t\t};\n\t\t}\n\t\t// Assist Jests tests to run when containingDiv is not available.\n\t\treturn { top: 0, bottom: 200, left: 0, right: 50, height: 200, width: 50 };\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":["_React$Component","_inherits","ColorPicker","_super","_createSuper","props","_this","_classCallCheck","call","logger","Logger","onClick","bind","_assertThisInitialized","_createClass","key","value","evt","color","target","dataset","this","clickActionHandler","log","React","createElement","className","tabIndex","Component","CommonContextMenu","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","action","subMenuSize","subMenuContent","buildColorPickerPanel","subMenu","buildSubMenu","disabled","areAllSubmenuItemsDisabled","calculateMenuSize","buildMenu","_extends","label","index","rtl","buildRtlState","subMenuPosStyle","buildSubMenuPosStyle","icon","ChevronRight16","menuItem","SubMenu","title","style","right","bottom","top","calculateMenuPos","posStyle","left","id","onContextMenu","ContextMenuWrapper","contextMenuClicked","handleClickOutside","document","addEventListener","removeEventListener","containingDiv","getElementById","containingDivId","clientRect","getBoundingClientRect","ctrlKey","isOverContextMenu","isOverEllipsisButton","closeContextMenu","domNode","contains","ellipsisNodes","getElementsByClassName","param","contextMenuActionHandler","contextMenuDef","getCanvasRect","contextMenuPos"],"mappings":"szBAkBiD,eAGhCA,GAAAC,YAAAC,EAAAF,GAAA,IAAAG,EAAAC,EAAAF,GAChB,SAAAA,EAAYG,GAAO,IAAAC,EAIqB,OAJrBC,uBAAAL,IAClBI,EAAAH,EAAAK,UAAMH,IACDI,OAAS,IAAIC,SAAO,mBAEzBJ,EAAKK,QAAUL,EAAKK,QAAQC,KAAIC,yBAAAP,IAAOA,EA0BvC,OAzBAQ,eAAAZ,IAAAa,cAAAC,MAED,SAAQC,GACP,IAAMC,EAAQD,EAAIE,OAAOC,QAAQF,MACjCG,KAAKhB,MAAMiB,mBAAmBJ,MAC9BH,aAAAC,MAED,WAEC,OADAK,KAAKZ,OAAOc,IAAI,UAEfC,UAAAC,qBAAKC,UAAU,eAAef,QAASU,KAAKV,SAC3Ca,UAAAC,qBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,oBAAqBD,UAAU,gCAC7DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,mBAAoBD,UAAU,+BAC5DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAE3DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,iBAAkBD,UAAU,6BAC1DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,oBAAqBD,UAAU,gCAC7DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,mBAAoBD,UAAU,+BAC5DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,8BAC3DF,UAAAC,qBAAKE,SAAS,IAAI,aAAY,kBAAmBD,UAAU,mCAE7DxB,CAAA,EA/BwBsB,UAAMI,6eCGhC,eAMuB5B,GAAAC,YAAA4B,EAAA7B,GAAA,IAAAG,EAAAC,EAAAyB,GACtB,SAAAA,EAAYxB,GAAO,IAAAC,EAI+B,OAJ/BC,uBAAAsB,IAClBvB,EAAAH,EAAAK,UAAMH,IACDyB,MAAQ,GACbxB,EAAKyB,aAAezB,EAAKyB,aAAanB,KAAIC,yBAAAP,IAC1CA,EAAK0B,aAAe1B,EAAK0B,aAAapB,KAAIC,yBAAAP,IAAOA,EAkNjD,OAjNAQ,eAAAe,IAAAd,oBAAAC,MAED,SAAciB,GACbA,EAAEC,oBACFnB,mBAAAC,MAED,SAAamB,EAAMC,GAClBf,KAAKhB,MAAMgC,eAAeF,GAGtBC,GACHA,EAAcE,qBAEfvB,mBAAAC,MAED,SAAaE,GACZG,KAAKhB,MAAMgC,eAAe,uBAAwB,CAAEnB,MAAAA,OACpDH,wBAAAC,MAED,SAAkBuB,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,QAiD1B9B,uBAAAC,MACA,SAAiB8B,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,KACPlC,iCAAAC,MAED,SAA2BoC,GAC1B,IAAIC,EAAY,EACZC,EAAgB,EASpB,OARAF,EAAaG,SAAQ,SAASC,GACxBA,EAAYb,SAChBU,KAE0B,IAAvBG,EAAYC,QACfH,OAGKA,IAAkBD,KACzBtC,gBAAAC,MAED,SAAU0C,EAAgBX,EAAUE,EAASD,GAa5C,IAZA,IAAMW,EAAgB,CACrBjC,UAAW,uBAGNkC,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,KAAKxC,UAAAC,cAACwC,YAASC,WAAYP,EAAe5C,IAAK0B,EAAI,EAAG9B,QAAS,aAAUgC,cACnFkB,GA/G+B,EAgH/BC,GAAkB,QAEb,GAAiC,oBAA7BJ,EAAejB,GAAG0B,OAA8B,CAC1DL,GAAkB,EAClB,IACMM,EAAc,CAAEvB,MAvHC,IAuH0BD,OAAQ,IACnDyB,EAAiBhD,KAAKiD,wBAEtBC,EAAUlD,KAAKmD,aACpBd,EAAgBjB,EAAG4B,EAAgBR,EAAaZ,EAASF,EAAUqB,EAAapB,GALhE,GAMjBY,EAAUI,KAAKO,GAEfV,GA7H6B,QA+HvB,GAAIE,EAAS,CACnBD,GAAkB,EAClB,IAAMW,EAAW,CAAEA,SAAUpD,KAAKqD,2BAA2BhB,EAAejB,GAAGF,OACzE6B,EAAc/C,KAAKsD,kBAAkBjB,EAAejB,GAAGF,MACvD8B,EAAiBhD,KAAKuD,UAAUlB,EAAejB,GAAGF,KAAMQ,EAAUE,EAASD,GAE3EuB,EAAUlD,KAAKmD,aACpBd,EAAgBjB,EAAG4B,EAAgBR,EAAaZ,EAASF,EAAUqB,EAAapB,EAAYyB,GAC7Fb,EAAUI,KAAKO,GAEfV,GAzI6B,OA2IvB,CACNC,GAAkB,EAClB,IAAMW,EAAW,CAAEA,UAAuC,IAA7Bf,EAAejB,GAAGgB,QAC/CG,EAAUI,KACTxC,UAAAC,cAACwC,WAAQY,YAAClE,QAASU,KAAKU,aAAanB,KAAK,KAAM8C,EAAejB,GAAG0B,QAASpD,IAAK0B,EAAI,GAAOgC,GACzFf,EAAejB,GAAGqC,QAGrBjB,GAnJ6B,IAsJ/B,OAAOD,KACP7C,4BAAAC,MAED,WACC,OACCQ,UAAAC,cAACvB,GAAYoB,mBAAoBD,KAAKW,kBAEvCjB,mBAAAC,MAED,SAAa0C,EAAgBqB,EAAOV,EAAgBR,EAAaZ,EAChEF,EAAUqB,EAAapB,EAAYyB,GACnC,IAAMO,EAAM3D,KAAK4D,cAAchC,EAASF,EAAUqB,EAAapB,GACzDkC,EAAkB7D,KAAK8D,qBAAqBtB,EAAaZ,EAASmB,EAAapB,GAE/EoC,EAAQ5D,UAAAC,cAAC4D,uBACTC,EAAW9D,UAAAC,yBAAMiC,EAAeqB,GAAOD,MAAOM,EAAK,KAEzD,OACC5D,UAAAC,cAAC8D,UAAOV,YAACW,MAAOF,EAAUvE,IAAKgE,EAAQ,EAAGrD,UAAU,sBAAsBsD,IAAKA,GAASP,GACvFjD,UAAAC,qBAAKV,IAAKgE,EAAQ,EAAGU,MAAOP,EAAiBxD,UAAU,wBACrD2C,OAQLtD,oBAAAC,MACA,SAAciC,EAASF,EAAUqB,EAAapB,GAG7C,OAAQC,EAAQC,EAAIH,EAASF,MAAQuB,EAAYvB,MAAQG,EAAW0C,SAMrE3E,2BAAAC,MACA,SAAqB6C,EAAaZ,EAASmB,EAAapB,GAEvD,IAAMG,EAAIH,EAAW2C,QAAU1C,EAAQE,EAAIU,EAAcO,EAAYxB,QAUrE,MAHwB,CACvBgD,KAHezC,EAAI,EAAK,EAAIA,EAlMV,GAqMJ,SAGfpC,aAAAC,MAED,WAEC,IAAM+B,EAAW1B,KAAKsD,kBAAkBtD,KAAKhB,MAAMqD,gBAC7CT,EAAU5B,KAAKwE,iBAAiBxE,KAAKhB,MAAMyC,SAAUC,EAAU1B,KAAKhB,MAAM2C,YAC1E8C,EAAW,CAChBC,KAAM9C,EAAQC,EAAI,KAClB0C,IAAK3C,EAAQE,EAAI,MAGZS,EAAYvC,KAAKuD,UAAUvD,KAAKhB,MAAMqD,eAAgBX,EAAUE,EAAS5B,KAAKhB,MAAM2C,YAE1F,OACCxB,UAAAC,qBAAKuE,GAAG,uBAAuBtE,UAAU,uBAAuB+D,MAAOK,EAAUG,cAAe5E,KAAK4E,eACnGrC,OAGH/B,CAAA,EAvN8BL,UAAMI,ifCVjBsE,WAAkBlG,GAAAC,YAAAiG,EAAAlG,GAAA,IAAAG,EAAAC,EAAA8F,GACtC,SAAAA,EAAY7F,GAAO,IAAAC,EAK2C,OAL3CC,uBAAA2F,IAClB5F,EAAAH,EAAAK,UAAMH,IACDyB,MAAQ,GAEbxB,EAAK6F,mBAAqB7F,EAAK6F,mBAAmBvF,KAAIC,yBAAAP,IACtDA,EAAK8F,mBAAqB9F,EAAK8F,mBAAmBxF,KAAIC,yBAAAP,IAAOA,EAyF7D,OAxFAQ,eAAAoF,IAAAnF,wBAAAC,MAED,WACCqF,SAASC,iBAAiB,QAASjF,KAAK+E,oBAAoB,MAC5DrF,2BAAAC,MAED,WACCqF,SAASE,oBAAoB,QAASlF,KAAK+E,oBAAoB,MAMhErF,oBAAAC,MACA,WACC,IAAMwF,EAAgBH,SAASI,eAAepF,KAAKhB,MAAMqG,iBACzD,GAAIF,EAAe,CAClB,IAAMG,EAAaH,EAAcI,wBACjC,MAAO,CACNhB,IAAK,EACLD,OAAQgB,EAAWhB,OAASgB,EAAWf,IACvCG,KAAM,EACNL,MAAOiB,EAAWjB,MAAQiB,EAAWZ,KACrCnD,OAAQ+D,EAAW/D,OACnBC,MAAO8D,EAAW9D,OAIpB,MAAO,CAAE+C,IAAK,EAAGD,OAAQ,IAAKI,KAAM,EAAGL,MAAO,GAAI9C,OAAQ,IAAKC,MAAO,OACtE9B,yBAAAC,MAED,SAAmBiB,GAMdA,EAAE4E,QACL5E,EAAEK,kBAMEjB,KAAKyF,kBAAkB7E,IAAOZ,KAAK0F,qBAAqB9E,KAGxDZ,KAAKhB,MAAMiC,iBACdL,EAAEK,kBAEHjB,KAAKhB,MAAM2G,uBAIbjG,wBAAAC,MACA,SAAkBiB,GACjB,IAAMgF,EAAUZ,SAASI,eAAe,wBACxC,OAAQQ,GAAWA,EAAQC,SAASjF,EAAEd,WAMvCJ,2BAAAC,MACA,SAAqBiB,GAGpB,IAFA,IAAMkF,EAAgBd,SAASe,uBAAuB,0BAClDtF,GAAQ,EACHW,EAAI,EAAGA,EAAI0E,EAAczE,OAAQD,KAC3B,IAAVX,GAAmBqF,EAAc1E,GAAGyE,SAASjF,EAAEd,UAClDW,GAAQ,GAGV,OAAOA,KACPf,yBAAAC,MAED,SAAmBmD,EAAQkD,GAC1BhG,KAAKhB,MAAMiH,yBAAyBnD,EAAQkD,MAC5CtG,aAAAC,MAED,WACC,OACCQ,UAAAC,cAACI,GACAQ,eAAgBhB,KAAK8E,mBACrBzC,eAAgBrC,KAAKhB,MAAMkH,eAC3BvE,WAAY3B,KAAKmG,gBACjB1E,SAAUzB,KAAKhB,MAAMoH,qBAGvBvB,CAAA,EA/F8C1E,UAAMI"}
@@ -1,2 +0,0 @@
1
- function r(){return r=Object.assign?Object.assign.bind():function(r){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(r[a]=n[a])}return r},r.apply(this,arguments)}export{r as _};
2
- //# sourceMappingURL=extends-093996c9.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extends-093996c9.js","sources":["../node_modules/@babel/runtime/helpers/esm/extends.js"],"sourcesContent":["export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}"],"names":["_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this"],"mappings":"AAAe,SAASA,IAYtB,OAXAA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAC1D,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CACzC,IAAIG,EAASF,UAAUD,GACvB,IAAK,IAAII,KAAOD,EACVP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAC/CL,EAAOK,GAAOD,EAAOC,IAI3B,OAAOL,GAEFJ,EAASa,MAAMC,KAAMR,UAC9B"}
@@ -1,2 +0,0 @@
1
- "use strict";function t(){return t=Object.assign?Object.assign.bind():function(t){for(var r=1;r<arguments.length;r++){var n=arguments[r];for(var e in n)Object.prototype.hasOwnProperty.call(n,e)&&(t[e]=n[e])}return t},t.apply(this,arguments)}exports._extends=t;
2
- //# sourceMappingURL=extends-1b35a664.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extends-1b35a664.js","sources":["../node_modules/@babel/runtime/helpers/esm/extends.js"],"sourcesContent":["export default function _extends() {\n _extends = Object.assign ? Object.assign.bind() : function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n return target;\n };\n return _extends.apply(this, arguments);\n}"],"names":["_extends","Object","assign","bind","target","i","arguments","length","source","key","prototype","hasOwnProperty","call","apply","this"],"mappings":"aAAe,SAASA,IAYtB,OAXAA,EAAWC,OAAOC,OAASD,OAAOC,OAAOC,OAAS,SAAUC,GAC1D,IAAK,IAAIC,EAAI,EAAGA,EAAIC,UAAUC,OAAQF,IAAK,CACzC,IAAIG,EAASF,UAAUD,GACvB,IAAK,IAAII,KAAOD,EACVP,OAAOS,UAAUC,eAAeC,KAAKJ,EAAQC,KAC/CL,EAAOK,GAAOD,EAAOC,IAI3B,OAAOL,GAEFJ,EAASa,MAAMC,KAAMR,UAC9B"}
@@ -1,2 +0,0 @@
1
- "use strict";var e=require("./extends-1b35a664.js"),t=require("./createClass-09bc08f7.js"),r=require("./getPrototypeOf-5f227292.js"),o=require("./isArrayLikeObject-0cd02b77.js"),i=require("react"),l=require("react-intl"),s=require("react-dom"),a=require("carbon-components-react"),n=require("./_baseIteratee-7fb1949c.js"),c=require("react-virtualized"),d=require("react-draggable"),p=require("@carbon/icons-react"),u=require("./lib/tooltip.js"),h=require("uuid"),f=require("react-resize-detector");function b(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var m=b(i),v=b(s),w=b(d),y=b(f),g={"subPanel.button.tooltip":"Edit","structureListEditor.addButton.label":"Add value","structureListEditor.removeButton.label":"Remove","structureTable.addButton.label":"Add columns","structureTable.removeButton.label":"Remove","fieldPicker.saveButton.label":"Select Fields for","fieldPicker.saveButton.modal.label":"Save and continue","fieldPicker.resetButton.label":"Reset ","fieldPicker.filter.label":"Filter:","fieldPicker.fieldColumn.label":"Field name","fieldPicker.schemaColumn.label":"Schema name","fieldPicker.dataTypeColumn.label":"Data type","fieldPicker.integer.label":"integer","fieldPicker.double.label":"double","fieldPicker.string.label":"string","fieldPicker.date.label":"date","fieldPicker.time.label":"time","fieldPicker.timestamp.label":"timestamp","flyout.applyButton.label":"OK","flyout.rejectButton.label":"Cancel","propertiesEdit.closeButton.label":"Close","propertiesEdit.applyButton.label":"Save","propertiesEdit.rejectButton.label":"Cancel","propertiesEdit.revertButton.label":"Revert","propertiesEdit.resizeButton.expand.label":"Expand","propertiesEdit.resizeButton.contract.label":"Contract","properties.revert.message":"Click Revert to go back to the previous screen or click Close to exit the pane. Then try your operation again.","properties.close.message":"Click Close to exit the pane. Then try your operation again.","properties.support.message":"If the problem persists, contact support.","properties.unexpected.message":"Oops, the pane didn't load.","table.search.header":"View in tables","table.search.placeholder":"Find in column {column_name}","table.search.label":"Search in {table_name} table","summary.longTable.placeholder":"More than ten fields...","alerts.tab.title":"Alerts","title.editor.label":"edit title","title.editor.helpButton.label":"help","table.summary.error":"There are {errorMsgCount} error cells. ","table.summary.warning":"There are {warningMsgCount} warning cells. ","control.summary.error":"There are {errorMsgCount} parameters with errors. ","control.summary.warning":"There are {warningMsgCount} parameters with warnings. ","control.summary.error.warning":"There are {errorMsgCount} parameters with errors and {warningMsgCount} parameters with warnings.","required.error":"You must enter a value for {label}.","datetime.format.error":"Invalid {role}. Format should be {format}.","invalid.field.error":"Invalid {label}, field not found in data set.","invalid.number.error":"Number is not valid.","expression.validate.label":"Validate","expression.validating.label":"Validating","expression.builder.title":"Expression Builder","expression.builder.icon.description":"launch expression builder","expression.builder.label":"Expression","expression.fields.table.label":"Fields table","expression.values.table.label":"Values table","expression.fields.empty.table.label":"No fields found","expression.values.empty.table.label":"No values found","expression.functions.table.label":"Functions table","expression.fields.dropdown":"Fields","expression.fields.title":"Fields","expression.values.title":"Values","expression.field.column":"Field","expression.field.column.description":"","expression.storage.column":"Storage","expression.value.column":"Value","expression.value.column.description":"","expression.function.column":"Function","expression.return.column":"Return","expression.recently.used.column":"Item","expression.field.tab":"Fields","expression.functions.tab":"Functions","expression.recently.used":"Recently Used","expression.all.functions":"All Functions","expression.min.label":"Min","expression.minimize.label":"Minimize","expression.max.label":"Max","expression.maximize.label":"Maximize","toggle.on.label":"On","toggle.off.label":"Off","passwordShow.tooltip":"Show password","passwordHide.tooltip":"Hide password","expression.no.functions":"No functions found.","multi.selected.row.label":"rows selected.","multi.selected.row.action":"Changing a value in this row will change the value in all allowed selected rows.","datetimefield.format.error.message":"Invalid format object provided. Check input definitions.","datepickerRangeStart.default.label":"Start","datepickerRangeEnd.default.label":"End","editorform.group.type.error":"(Unknown group type '{group.groupType()}')","moveable.table.button.top":"Move to top","moveable.table.button.up":"Move up","moveable.table.button.down":"Move down","moveable.table.button.bottom":"Move to bottom","list.table.label":"Values","dropdown.tooltip.openMenu":"Open menu","dropdown.tooltip.closeMenu":"Close menu","dropdown.tooltip.clear.all":"Clear all","dropdown.tooltip.clear.selection":"Clear selection","truncate.long.string.error":"These values exceed the display limit of {truncate_limit} characters and can't be edited.","properties.label":"{label} Properties","properties.error.label":"Error in properties","readonlytable.edit.button.label":"Edit","toggletext.icon.description":"{toggletext_label} Icon","multiselect.dropdown.empty.label":"None selected","multiselect.dropdown.options.selected.label":"options selected","virtualizedTable.header.checkbox.label":"Select all {header_checkbox_label}","virtualizedTable.row.checkbox.label":"Select row {row_index} from {table_label}","properties.empty.table.text":'To begin, click "{button_label}"',"label.indicator.required":"(required)","label.indicator.optional":"(optional)"};function R(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 o,i=r._getPrototypeOf(e);if(t){var l=r._getPrototypeOf(this).constructor;o=Reflect.construct(i,arguments,l)}else o=i.apply(this,arguments);return r._possibleConstructorReturn(this,o)}}var C=function(e){r._inherits(l,e);var i=R(l);function l(){return t._classCallCheck(this,l),i.apply(this,arguments)}return t._createClass(l,[{key:"render",value:function(){var e=this,r=this.props.tooltipText,i=this.props.truncatedRef;"object"!==t._typeof(this.props.tooltipText)&&(r=String(this.props.tooltipText)),this.props.content&&this.props.content.type===a.Checkbox&&this.tooltipRef&&this.tooltipRef.firstChild&&(i=this.tooltipRef.firstChild.lastChild);var l=m.default.createElement("div",{className:"properties-tooltips"},r);return m.default.createElement("div",{className:"properties-truncated-tooltip"},m.default.createElement(u,{id:"properties",tip:l,direction:"bottom",className:"properties-tooltips",disable:!o.has_1(this.props,"disabled")||this.props.disabled,showToolTipIfTruncated:!0,truncatedRef:i},m.default.createElement("div",{ref:function(t){return e.tooltipRef=t}},this.props.content)))}}]),l}(m.default.Component),E=C,T=o._baseAssignValue,k=n._baseForOwn,I=n._baseIteratee;var _=function(e,t){var r={};return t=I(t),k(e,(function(e,o,i){T(r,o,t(e,o,i))})),r},S=o._baseDifference,x=o._baseFlatten,O=n._baseIteratee,N=o._baseRest,H=o.isArrayLikeObject_1,M=o.last_1,A=N((function(e,t){var r=M(t);return H(r)&&(r=void 0),H(e)?S(e,x(t,1,H,!0),O(r)):[]}));function D(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 o,i=r._getPrototypeOf(e);if(t){var l=r._getPrototypeOf(this).constructor;o=Reflect.construct(i,arguments,l)}else o=i.apply(this,arguments);return r._possibleConstructorReturn(this,o)}}var z=function(i){r._inherits(s,i);var l=D(s);function s(e,i){var a;return t._classCallCheck(this,s),(a=l.call(this,e,i)).state={rowCount:a.props.rowCount,columns:a.props.columns,columnResized:!1},a.virtualizedTableRef=m.default.createRef(),a.lastChecked=o.isEmpty_1(e.rowsSelected)?null:e.rowsSelected.slice(-1).pop(),a.isOverSelectOption=!1,a.mouseEventCalled=!1,a.keyBoardEventCalled=!1,a.cellRenderer=a.cellRenderer.bind(r._assertThisInitialized(a)),a.selectAll=a.selectAll.bind(r._assertThisInitialized(a)),a.headerRowRenderer=a.headerRowRenderer.bind(r._assertThisInitialized(a)),a.headerColRenderer=a.headerColRenderer.bind(r._assertThisInitialized(a)),a.onRowClick=a.onRowClick.bind(r._assertThisInitialized(a)),a.overSelectOption=a.overSelectOption.bind(r._assertThisInitialized(a)),a.resizeColumn=a.resizeColumn.bind(r._assertThisInitialized(a)),a.uuid=h.v4(),a}return t._createClass(s,[{key:"componentDidUpdate",value:function(){"function"==typeof this.props.rowHeight&&this.recomputeRowHeights()}},{key:"onRowClick",value:function(e,t,r){if("bx--select-option"===e.target.className)e.stopPropagation();else{var o=!this.isRowSelected(t.originalRowIndex);"function"==typeof this.props.setRowsSelected&&(this.props.setRowsSelected({index:r,originalRowIndex:t.originalRowIndex,selected:o,isOverSelectOption:this.isOverSelectOption,selectMultipleRows:!!e.shiftKey&&e.shiftKey,lastCheckedRow:null===this.lastChecked?0:this.lastChecked},e),this.lastChecked=t.index)}}},{key:"onRowDoubleClick",value:function(e,t,r){this.props.onRowDoubleClick&&this.props.onRowDoubleClick(e,t,r)}},{key:"getCheckboxLabelColumnIndex",value:function(e){for(var t=0;t<e.length;t++)if("index"!==e[t].operation)return t;return 0}},{key:"getColumnIndex",value:function(e,t){return e.findIndex((function(e){return e.key===t}))}},{key:"getColumnWiseDeltas",value:function(e,t){var r={};if(e.length>0){e.sort((function(e,t){return e.width-t.width}));for(var o=t,i=0;i<e.length;i++){var l=e.slice(i).reduce((function(e,t){return e+t.width}),0),s=Math.round(e[i].width*o/l);e[i].headerLabel.length>0&&e[i].width-s<n.MINIMUM_COLUMN_WIDTH?s=e[i].width-n.MINIMUM_COLUMN_WIDTH:e[i].width-s<n.MINIMUM_COLUMN_WIDTH_WITHOUT_LABEL&&(s=e[i].width-n.MINIMUM_COLUMN_WIDTH_WITHOUT_LABEL),o-=s,r[e[i].key]=s}if(o>0)return _(r,(function(){return 0}))}return r}},{key:"isRowSelected",value:function(e){return!!this.props.rowsSelected&&this.props.rowsSelected.indexOf(e)>-1}},{key:"isLastColumn",value:function(e){var t=this.getColumnIndex(this.props.columns,e)===this.props.columns.length-1;return t}},{key:"selectAll",value:function(e){this.props.setAllRowsSelected(e)}},{key:"cellRenderer",value:function(e){var t=e.cellData;return null==t?"":t}},{key:"cellRendererHTML",value:function(e){var t=e.cellData;return null==t?"":m.default.createElement("div",{dangerouslySetInnerHTML:{__html:t}})}},{key:"recomputeRowHeights",value:function(e){this.virtualizedTableRef&&this.virtualizedTableRef.current&&this.virtualizedTableRef.current.recomputeRowHeights(e)}},{key:"headerRowRenderer",value:function(e,t){var r=t.className,o=t.columns,i=t.style,l=void 0===this.props.columns||0===this.props.columns.length?0:this.getCheckboxLabelColumnIndex(this.props.columns),s=void 0===this.props.columns||0===this.props.columns.length?"":this.props.columns[l].headerLabel,c=this.props.intl.formatMessage({id:"virtualizedTable.header.checkbox.label",defaultMessage:g["virtualizedTable.header.checkbox.label"]},{header_checkbox_label:s}),d=this.props.selectable&&this.props.rowSelection!==n.ROW_SELECTION.SINGLE?m.default.createElement("div",{role:"checkbox","aria-checked":this.props.checkedAll,className:"properties-vt-header-checkbox"},m.default.createElement(a.Checkbox,{id:"properties-vt-hd-cb-".concat(this.uuid,"-").concat(e),onChange:this.selectAll,checked:this.props.checkedAll,labelText:c,hideLabel:!0})):"";return m.default.createElement("div",{className:r,"data-role":"properties-header-row",role:"row",style:i},d,o)}},{key:"headerColRenderer",value:function(e){var t=this,r=e.columnData,i=e.dataKey,l=e.disableSort,s=e.label;e.sortBy,e.sortDirection;var a=null;if(void 0!==this.props.sortColumns[i]){var c=null;switch(this.props.sortColumns[i]){case n.SORT_DIRECTION.ASC:c=m.default.createElement(p.ArrowUp16,{disabled:this.props.tableState===n.STATES.DISABLED});break;case n.SORT_DIRECTION.DESC:c=m.default.createElement(p.ArrowDown16,{disabled:this.props.tableState===n.STATES.DISABLED});break;default:c=m.default.createElement(p.ArrowsVertical16,{disabled:this.props.tableState===n.STATES.DISABLED})}a=m.default.createElement("span",{className:"properties-ft-column-sort-icon"},c)}var d=o.isEmpty_1(r.description)?null:m.default.createElement("div",{className:"properties-vt-info-icon-tip"},m.default.createElement(u,{id:"properties-tooltip-info",tip:r.description,direction:"bottom",className:"properties-tooltips",showToolTipOnClick:!0},m.default.createElement(p.Information16,{className:"properties-vt-info-icon"}))),h=r.resizable&&!this.isLastColumn(i)?m.default.createElement(w.default,{axis:"x",defaultClassName:"properties-vt-header-resize",defaultClassNameDragging:"properties-vt-header-resize-active",onDrag:function(e,r){var o=r.deltaX;t.resizeColumn({dataKey:i,deltaX:o})},position:{x:0},zIndex:999},m.default.createElement("div",{role:"button",tabIndex:"0","aria-label":"Resize column"})):"",f="string"==typeof s?m.default.createElement("span",null,s):s,b=m.default.createElement("div",{className:"properties-vt-label-tip-icon"},m.default.createElement(E,{tooltipText:r.headerLabel,content:f,disabled:r.disabled}),d);return m.default.createElement("div",{"data-id":"properties-vt-header-".concat(i),className:n.classNames({"properties-vt-column-with-resize":""!==h,"properties-vt-column-without-resize":""===h})},m.default.createElement("div",{className:n.classNames("properties-vt-column properties-tooltips-container",{"sort-column-active":i===this.props.sortBy})},b,!1===l&&a),h)}},{key:"resizeColumn",value:function(e){var t=this,r=e.dataKey,i=e.deltaX;this.setState((function(e){var l=e.columns,s=t.getColumnIndex(l,r),a=l.slice(s+1).filter((function(e){return!e.staticWidth})).filter((function(e){return!(i>=0)||(e.headerLabel.length>0?e.width>n.MINIMUM_COLUMN_WIDTH:e.width>n.MINIMUM_COLUMN_WIDTH_WITHOUT_LABEL)})),c=t.getColumnWiseDeltas(a,i),d=Object.keys(c),p=Object.values(c).every((function(e){return 0===e}));return l[s].width+i>n.MINIMUM_COLUMN_WIDTH&&!o.isEmpty_1(c)&&!p&&(l[s].width+=i,d.forEach((function(e){var t=l.findIndex((function(t){return t.key===e}));l[t].width-=c[e]}))),{columnResized:!0,columns:l}}))}},{key:"overSelectOption",value:function(e){"mouseenter"!==e.type||this.keyBoardEventCalled?"mouseleave"===e.type&&this.mouseEventCalled?(this.mouseEventCalled=!1,this.isOverSelectOption=!this.isOverSelectOption):"focus"!==e.type||this.mouseEventCalled?"blur"===e.type&&this.keyBoardEventCalled&&(this.keyBoardEventCalled=!1,this.isOverSelectOption=!this.isOverSelectOption):(this.keyBoardEventCalled=!0,this.isOverSelectOption=!this.isOverSelectOption):(this.mouseEventCalled=!0,this.isOverSelectOption=!this.isOverSelectOption)}},{key:"rowRenderer",value:function(e,t){var r=this,o=t.className,i=t.columns,l=t.index,s=t.key,c=t.rowData,d=t.style,p="",u=!1,h="boolean"==typeof c.disabled&&c.disabled;if("function"==typeof this.props.rowHeight&&0===this.props.rowHeight({index:l}))return null;if(this.props.selectable){var f=this.isRowSelected(c.originalRowIndex);if(u=this.props.selectable&&f,this.props.rowSelection!==n.ROW_SELECTION.SINGLE){var b=this.props.intl.formatMessage({id:"virtualizedTable.row.checkbox.label",defaultMessage:g["virtualizedTable.row.checkbox.label"]},{row_index:l+1,table_label:this.props.tableLabel?this.props.tableLabel:""});p=m.default.createElement("div",{className:"properties-vt-row-checkbox",role:"gridcell",onMouseEnter:function(e){return r.overSelectOption(e)},onMouseLeave:function(e){return r.overSelectOption(e)},onFocus:function(e){return r.overSelectOption(e)},onBlur:function(e){return r.overSelectOption(e)},onKeyDown:function(e){"Space"!==e.code&&"Enter"!==e.code||r.onRowClick(e,c,l)}},m.default.createElement(a.Checkbox,{id:"properties-vt-row-cb-".concat(this.uuid,"-").concat(e,"-").concat(l),key:"properties-vt-row-cb-".concat(e,"-").concat(l),labelText:b,hideLabel:!0,checked:f,disabled:h}))}}if(this.props.summaryTable&&(p=m.default.createElement("div",{className:"properties-vt-row-checkbox"})),!0===c.loading)return m.default.createElement("div",{className:o,key:s,"data-role":"properties-loading-row",role:"row",style:d},m.default.createElement(a.Loading,{className:"properties-vt-small-loading",small:!0,withOverlay:!1}));var v=parseInt(d.width,10)+"px",w=Object.assign({},d,{width:v});return m.default.createElement("div",{style:{},key:s,className:"properties-vt-double-click",onDoubleClick:function(e){return r.onRowDoubleClick(e,c.rowKey,l)}},m.default.createElement("div",{className:n.classNames(o,{"properties-vt-row-selected":u},{"properties-vt-row-disabled":h},{"properties-vt-row-non-interactive":!this.props.selectable}),"data-role":"properties-data-row",role:"row",style:w,onMouseDown:function(e){return r.onRowClick(e,c,l)}},p,i))}},{key:"render",value:function(){var t=this;return m.default.createElement("div",{className:"properties-vt"},m.default.createElement("div",{className:n.classNames("properties-vt-autosizer",{"properties-vt-single-selection":this.props.rowSelection&&this.props.rowSelection===n.ROW_SELECTION.SINGLE,"properties-light-disabled":!this.props.light})},m.default.createElement(c.AutoSizer,null,(function(r){var o=r.height,i=r.width;return m.default.createElement(c.Table,{ref:t.virtualizedTableRef,width:i||500,height:t.props.tableHeight||o||2e3,className:"properties-autosized-vt","aria-label":t.props.tableLabel?t.props.tableLabel:"",disableHeader:t.props.disableHeader,headerClassName:"properties-autosized-vt-header",headerHeight:32,headerRowRenderer:t.headerRowRenderer.bind(t,t.props.scrollKey),onHeaderClick:t.props.onHeaderClick,rowClassName:"properties-vt-row-class",rowHeight:t.props.rowHeight?t.props.rowHeight:32,rowCount:t.state.rowCount,rowGetter:t.props.rowGetter,rowRenderer:t.rowRenderer.bind(t,t.props.scrollKey),scrollToIndex:t.props.scrollToIndex,scrollToAlignment:t.props.scrollToAlignment,sort:t.props.onSort,sortDirection:t.props.sortDirection,tabIndex:-1},t.state.columns.map((function(r){return m.default.createElement(c.Column,e._extends({key:r.key,label:r.label,dataKey:r.key,width:r.width,columnData:r,disableSort:void 0===t.props.sortColumns[r.key],cellRenderer:r.isHTML?t.cellRendererHTML:t.cellRenderer,headerRenderer:t.headerColRenderer},r.minWidth&&{minWidth:r.minWidth}))})))}))))}}],[{key:"getDerivedStateFromProps",value:function(e,t){var r={};e.rowCount!==t.rowCount&&(r.rowCount=e.rowCount);var i=t.columns.reduce((function(e,t){return t.width+e}),0)!==e.columns.reduce((function(e,t){return t.width+e}),0);return t.columnResized&&o.isEmpty_1(A(e.columns,t.columns,"headerLabel"))&&!i||(r.columns=e.columns),r}}]),s}(m.default.Component);z.defaultProps={disableHeader:!1};var L=l.injectIntl(z);function P(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=function(e,t){if(!e)return;if("string"==typeof e)return W(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return W(e,t)}(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var o=0,i=function(){};return{s:i,n:function(){return o>=e.length?{done:!0}:{done:!1,value:e[o++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,s=!0,a=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return s=e.done,e},e:function(e){a=!0,l=e},f:function(){try{s||null==r.return||r.return()}finally{if(a)throw l}}}}function W(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,o=new Array(t);r<t;r++)o[r]=e[r];return o}function B(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 o,i=r._getPrototypeOf(e);if(t){var l=r._getPrototypeOf(this).constructor;o=Reflect.construct(i,arguments,l)}else o=i.apply(this,arguments);return r._possibleConstructorReturn(this,o)}}var j=function(i){r._inherits(s,i);var l=B(s);function s(e){var o;t._classCallCheck(this,s);var i={};if(void 0!==(o=l.call(this,e)).props.sortable)for(var a=0;a<o.props.sortable.length;a++){i[o.props.sortable[a]]=n.SORT_DIRECTION.NOT_SORTED}return o.state={checkedAllRows:!1,columnSortDir:i,currentSortColumn:"",tableWidth:0,tableHeight:0,rows:void 0!==e.rows?e.rows:5.5,dynamicHeight:null},o.rowHeight=o.rowHeight.bind(r._assertThisInitialized(o)),o.rowGetter=o.rowGetter.bind(r._assertThisInitialized(o)),o.getOriginalRowIndex=o.getOriginalRowIndex.bind(r._assertThisInitialized(o)),o.getLastChildPropertyIdRow=o.getLastChildPropertyIdRow.bind(r._assertThisInitialized(o)),o.calculateColumnWidths=o.calculateColumnWidths.bind(r._assertThisInitialized(o)),o.handleFilterChange=o.handleFilterChange.bind(r._assertThisInitialized(o)),o.onSort=o.onSort.bind(r._assertThisInitialized(o)),o.sortHeaderClick=o.sortHeaderClick.bind(r._assertThisInitialized(o)),o._updateTableWidth=o._updateTableWidth.bind(r._assertThisInitialized(o)),o._adjustTableHeight=o._adjustTableHeight.bind(r._assertThisInitialized(o)),o.handleCheckedRow=o.handleCheckedRow.bind(r._assertThisInitialized(o)),o.handleCheckedAllRows=o.handleCheckedAllRows.bind(r._assertThisInitialized(o)),o.handleCheckedMultipleRows=o.handleCheckedMultipleRows.bind(r._assertThisInitialized(o)),o}return t._createClass(s,[{key:"componentDidMount",value:function(){this._adjustTableHeight(),window.addEventListener("resize",this._adjustTableHeight),this.tableNode=v.default.findDOMNode(this.refs.table)}},{key:"componentDidUpdate",value:function(e,t){e.rows===this.props.rows&&e.columns===this.props.columns&&e.noAutoSize===this.props.noAutoSize||this._adjustTableHeight(),this.props.selectedRows&&!o.isEmpty_1(this.props.data)&&this.setCheckedAll(this.props.selectedRows),this.tableNode=v.default.findDOMNode(this.refs.table)}},{key:"componentWillUnmount",value:function(){window.removeEventListener("resize",this._adjustTableHeight)}},{key:"onSort",value:function(e){var t=e.sortBy;if(this.props.onSort){var r={column:t,direction:this.state.columnSortDir[t]===n.SORT_DIRECTION.ASC?n.SORT_DIRECTION.DESC:n.SORT_DIRECTION.ASC};this.props.onSort(r)}}},{key:"getOriginalRowIndex",value:function(e,t){var r=t;return e.columns&&o.has_1(e.columns[0],"content.props.children.props.propertyId.propertyId")?r=this.getLastChildPropertyIdRow(e.columns[0].content.props.children.props.propertyId,t):e.columns&&o.has_1(e.columns[0],"content.props.children.props.propertyId.index")?r=e.columns[0].content.props.children.props.propertyId.index:e.columns&&o.has_1(e.columns[0],"content.props.children.props.propertyId.row")?r=e.columns[0].content.props.children.props.propertyId.row:"number"==typeof e.rowKey&&(r=parseInt(e.rowKey,10)),r}},{key:"getLastChildPropertyIdRow",value:function(e,t){return void 0!==e.propertyId?this.getLastChildPropertyIdRow(e.propertyId):void 0!==e.row?e.row:t}},{key:"setCheckedAll",value:function(e){for(var t=!0,r=0;r<this.props.data.length;r++){var o=this.props.data[r],i=this.getOriginalRowIndex(o,r);if(e.indexOf(i)<0){t=!1;break}}this.state.checkedAllRows!==t&&this.setState({checkedAllRows:t})}},{key:"calculateColumnWidths",value:function(e,t){var r=t-12;this.props.rowSelection!==n.ROW_SELECTION.SINGLE&&(r-=40);var o,i=e.length,l=0,s=P(e);try{for(s.s();!(o=s.n()).done;){var a=o.value;a.width&&("string"==typeof a.width&&a.width.includes("px")?(r-=parseInt(a.width,10),i--):l=Math.max(l,a.width))}}catch(e){s.e(e)}finally{s.f()}var c,d=[],p=Math.floor(r/i),u=[],h=0,f=P(e);try{for(f.s();!(c=f.n()).done;){var b=c.value;b.width&&!isNaN(b.width)?(u.push(b.width/l),h+=b.width/l):u.push(null)}}catch(e){f.e(e)}finally{f.f()}for(var m=r/h,v=0,w=0;w<e.length;w++){var y=e[w];if(y.width)if("string"==typeof y.width&&y.width.includes("px"))d.push(Math.floor(parseInt(y.width,10))+"px"),v+=parseInt(y.width,10);else{var g=Math.floor(u[w]*m);d.push(g+"px"),v+=g}else d.push(p),v+=p}var R=t;if(this.props.rowSelection!==n.ROW_SELECTION.SINGLE&&(R-=40),v<R){var C=parseInt(d[0],10);d[0]=C+R-v+"px"}return d}},{key:"_updateTableWidth",value:function(e,t){this.state.tableWidth!==Math.floor(e-2)&&this.setState({tableWidth:Math.floor(e-2)})}},{key:"_adjustTableHeight",value:function(){if(!this.props.noAutoSize){var e=this.state.tableHeight,t=this.state.dynamicHeight,r=n.REM_ROW_HEIGHT+n.REM_HEADER_HEIGHT;if(Array.isArray(this.props.data)&&this.props.data.length<this.state.rows)e=(n.REM_ROW_HEIGHT*this.props.data.length+n.REM_HEADER_HEIGHT+(this.props.selectedEditRow?r:0))*n.ONE_REM_HEIGHT;else if(this.state.rows>0)e=(n.REM_ROW_HEIGHT*this.state.rows+n.REM_HEADER_HEIGHT+(this.props.selectedEditRow?r:0))*n.ONE_REM_HEIGHT;else if(0===this.state.rows)e=n.REM_HEADER_HEIGHT*n.ONE_REM_HEIGHT;else if(-1===this.state.rows&&this.flexibleTable){var o=void 0!==this.flexibleTableHeader?v.default.findDOMNode(this.flexibleTableHeader).getBoundingClientRect().height:0,i=this.findPropertyNodeHeight(this.flexibleTable,"properties-wf-children"),l=this.findPropertyNodeHeight(this.flexibleTable,"properties-primary-tab-panel");if(0===i&&0===l)e="100vh",t=-1;else{var s=0!==i?i:l;e="calc(".concat(s-o-50,"px - ").concat(3.5*n.ONE_REM_HEIGHT,"px)"),t=s-o-50-56}}e!==this.state.tableHeight&&this.setState({tableHeight:e,dynamicHeight:t})}}},{key:"findPropertyNodeHeight",value:function(e,t){if(e&&e.parentNode&&e.parentNode.className&&e.parentNode.className.includes(t)){var r=v.default.findDOMNode(e.parentNode).getBoundingClientRect();return r?r.height:0}return e&&e.parentNode?this.findPropertyNodeHeight(e.parentNode,t):0}},{key:"sortHeaderClick",value:function(e){var t=e.dataKey,r=this.state.columnSortDir;void 0!==r[t]&&(Object.keys(r).forEach((function(e){e!==t&&(r[e]=n.SORT_DIRECTION.NOT_SORTED)})),r[t]=r[t]===n.SORT_DIRECTION.ASC?n.SORT_DIRECTION.DESC:n.SORT_DIRECTION.ASC,this.setState({columnSortDir:r,currentSortColumn:t}))}},{key:"handleFilterChange",value:function(e){this.props.onFilter&&this.props.onFilter(e.target.value)}},{key:"handleCheckedAllRows",value:function(e){var t=[],r=this.props.data;if(e){t=Array.from(this.props.selectedRows);for(var o=0;o<r.length;o++){var i=this.getOriginalRowIndex(r[o],o);t.push(i)}}t=Array.from(new Set(t)),this.props.updateRowSelections(t),this.setState({checkedAllRows:e})}},{key:"handleCheckedMultipleRows",value:function(e,t,r){var o,i=this.props.selectedRows?this.props.selectedRows:[];return o=e<t?Array.from({length:t-e+1},(function(t,r){return e+r})):Array.from({length:e-t+1},(function(e,r){return t+r})),i=i.filter((function(e){return!o.includes(e)})),r&&(i=i.concat(o)),i}},{key:"handleCheckedRow",value:function(e,t){var r=e.originalRowIndex,o=e.index,i=e.selected,l=e.isOverSelectOption;if(!this.props.data[o].disabled&&"function"==typeof this.props.updateRowSelections)if(l){var s=this.props.selectedRows?this.props.selectedRows:[];e.selectMultipleRows?(s=this.handleCheckedMultipleRows(e.lastCheckedRow,o,i),this.setCheckedAll(s)):i?(s=s.concat(r),this.setCheckedAll(s)):s&&(s=s.filter((function(e){return e!==r})),this.setState({checkedAllRows:!1})),s.sort((function(e,t){return e-t})),this.props.updateRowSelections(s)}else this.props.rowSelection===n.ROW_SELECTION.SINGLE&&this.props.updateRowSelections(e.index,t,this.props.data[e.index].rowKey)}},{key:"generateTableHeaderRow",value:function(e){for(var r=[],o="",i=0;i<this.props.columns.length;i++){var l=this.props.columns[i];void 0!==this.props.filterable&&this.props.filterable[0]===l.key&&(o=l.label);var s=Math.abs(parseInt(e[i],10)),a=void 0;"object"===t._typeof(l.label)?a=l.label.props.labelText:"string"==typeof l.label&&(a=l.label),r.push({key:l.key,label:l.label,width:s,description:l.description,headerLabel:a,resizable:l.resizable,operation:l.operation,staticWidth:!!l.staticWidth&&l.staticWidth})}return{headers:r,searchLabel:o}}},{key:"rowGetter",value:function(e){var t=e.index,r=this.props.data[t],o=this.getOriginalRowIndex(r,t),i={};if(r.columns)for(var l=0;l<r.columns.length;l++){var s=r.columns[l];i[s.column]=s.content}return Object.assign({},i,{loading:!1,index:t,originalRowIndex:o,rowKey:void 0!==r.rowKey?r.rowKey:this.props.scrollKey+"-row-"+t,disabled:r.disabled})}},{key:"rowHeight",value:function(e){return e.index,n.ROW_HEIGHT}},{key:"render",value:function(){var t=this,r=this.state.tableWidth,i=this.calculateColumnWidths(this.props.columns,r),l=this.generateTableHeaderRow(i),s=l.headers,c=l.searchLabel,d=this.props.tableState===n.STATES.DISABLED,p=null;if(void 0!==this.props.filterable&&0!==this.props.filterable.length){var u=void 0!==this.props.searchPlaceholder?this.props.searchPlaceholder:this.props.intl.formatMessage({id:"table.search.placeholder",defaultMessage:g["table.search.placeholder"]},{column_name:c}),h=this.props.intl.formatMessage({id:"table.search.label",defaultMessage:g["table.search.label"]},{table_name:this.props.tableLabel});p=m.default.createElement("div",{className:n.classNames("properties-ft-search-container",{disabled:d})},m.default.createElement(a.Search,{className:"properties-ft-search-text",placeholder:u,onChange:this.handleFilterChange,disabled:d,size:"sm",labelText:h,light:this.props.light}))}var f=-1;void 0!==this.props.scrollToRow&&null!==this.props.scrollToRow&&(f=this.props.scrollToRow);var b={};this.props.noAutoSize||(b={height:this.state.tableHeight});var v=this.props.showHeader?"properties-ft-container-absolute ":"properties-ft-container-absolute-noheader ",w=this.props.messageInfo?v:v+n.STATES.INFO,R=p||this.props.topRightPanel?m.default.createElement("div",{className:"properties-ft-table-header",ref:function(e){return t.flexibleTableHeader=e}},p,this.props.topRightPanel):null,C=o.isEmpty_1(this.props.data)?m.default.createElement("div",{className:"properties-ft-empty-table"},this.props.emptyTablePlaceholder):null,E=n.classNames("properties-ft-control-container",{"properties-light-disabled":!this.props.light}),T=0,k=2*n.REM_HEADER_HEIGHT,I=k*n.ONE_REM_HEIGHT;-1!==this.state.rows&&this.state.tableHeight?T=parseInt(this.state.tableHeight,10)-(this.props.selectedEditRow?k:0):-1===this.state.rows&&this.state.dynamicHeight&&-1!==this.state.dynamicHeight&&(T=this.state.dynamicHeight-(this.props.selectedEditRow?I:0));return m.default.createElement("div",{"data-id":"properties-ft-"+this.props.scrollKey,className:E,ref:function(e){return t.flexibleTable=e}},R,m.default.createElement("div",{className:"properties-ft-container-panel"},m.default.createElement(y.default,{handleWidth:!0,onResize:this._updateTableWidth},m.default.createElement("div",{className:n.classNames("properties-ft-container-wrapper",this.props.messageInfo?this.props.messageInfo.type:""),style:b},m.default.createElement("div",{className:w},this.props.selectedEditRow,m.default.createElement(L,e._extends({tableLabel:this.props.tableLabel,tableHeight:T,columns:s,onHeaderClick:this.sortHeaderClick,rowCount:this.props.data.length,rowHeight:this.rowHeight,rowGetter:this.rowGetter,summaryTable:this.props.summaryTable,selectable:void 0!==this.props.updateRowSelections,rowSelection:this.props.rowSelection,disableHeader:!this.props.showHeader,onRowDoubleClick:this.props.onRowDoubleClick,rowsSelected:this.props.selectedRows,checkedAll:this.state.checkedAllRows,setRowsSelected:this.handleCheckedRow,setAllRowsSelected:this.handleCheckedAllRows,scrollKey:this.props.scrollKey,onSort:this.onSort,sortBy:this.state.currentSortColumn,sortColumns:this.state.columnSortDir,sortDirection:this.state.columnSortDir[this.state.currentSortColumn],tableState:this.props.tableState,light:this.props.light},-1!==f&&{scrollToIndex:f,scrollToAlignment:"center"})))))),C)}}]),s}(m.default.Component);j.defaultProps={showHeader:!0,light:!0,emptyTablePlaceholder:""};var G=l.injectIntl(j);exports.FlexibleTable=G,exports.TruncatedContentTooltip=E,exports.defaultMessages=g;
2
- //# sourceMappingURL=flexible-table-b9c08069.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"flexible-table-b9c08069.js","sources":["../src/common-properties/components/truncated-content-tooltip/truncated-content-tooltip.jsx","../src/common-properties/components/truncated-content-tooltip/index.js","../node_modules/lodash/mapValues.js","../node_modules/lodash/differenceBy.js","../src/common-properties/components/virtualized-table/virtualized-table.jsx","../src/common-properties/components/flexible-table/flexible-table.jsx"],"sourcesContent":["/*\n * Copyright 2017-2023 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 Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport { has } from \"lodash\";\nimport { Checkbox } from \"carbon-components-react\";\n\n// Reusable component to show tooltip if the content is truncated\nexport default class TruncatedContentTooltip extends React.Component {\n\n\trender() {\n\t\tlet tooltipText = this.props.tooltipText;\n\t\tlet truncatedRef = this.props.truncatedRef;\n\t\tif (typeof this.props.tooltipText !== \"object\") {\n\t\t\ttooltipText = String(this.props.tooltipText);\n\t\t}\n\t\tif (this.props.content && this.props.content.type === Checkbox && this.tooltipRef && this.tooltipRef.firstChild) {\n\t\t\ttruncatedRef = this.tooltipRef.firstChild.lastChild; // checkbox label is in div -> label -> span\n\t\t}\n\t\tconst tooltip = (\n\t\t\t<div className=\"properties-tooltips\">\n\t\t\t\t{tooltipText}\n\t\t\t</div>\n\t\t);\n\t\treturn (\n\t\t\t<div className=\"properties-truncated-tooltip\">\n\t\t\t\t<Tooltip\n\t\t\t\t\tid=\"properties\"\n\t\t\t\t\ttip={tooltip}\n\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\t\tdisable={has(this.props, \"disabled\") ? this.props.disabled : true}\n\t\t\t\t\tshowToolTipIfTruncated\n\t\t\t\t\ttruncatedRef={truncatedRef}\n\t\t\t\t>\n\t\t\t\t\t<div ref={(ref) => (this.tooltipRef = ref)}>\n\t\t\t\t\t\t{this.props.content}\n\t\t\t\t\t</div>\n\t\t\t\t</Tooltip>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nTruncatedContentTooltip.propTypes = {\n\tcontent: PropTypes.element,\n\ttruncatedRef: PropTypes.object,\n\ttooltipText: PropTypes.oneOfType([\n\t\tPropTypes.string.isRequired,\n\t\tPropTypes.object.isRequired,\n\t\tPropTypes.number.isRequired,\n\t\tPropTypes.bool.isRequired,\n\t\tPropTypes.array.isRequired\n\t]),\n\tdisabled: PropTypes.bool\n};\n","/*\n * Copyright 2017-2023 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 TruncatedContentTooltip from \"./truncated-content-tooltip.jsx\";\nexport default TruncatedContentTooltip;\n","var baseAssignValue = require('./_baseAssignValue'),\n baseForOwn = require('./_baseForOwn'),\n baseIteratee = require('./_baseIteratee');\n\n/**\n * Creates an object with the same keys as `object` and values generated\n * by running each own enumerable string keyed property of `object` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, key, object).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Object\n * @param {Object} object The object to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Object} Returns the new mapped object.\n * @see _.mapKeys\n * @example\n *\n * var users = {\n * 'fred': { 'user': 'fred', 'age': 40 },\n * 'pebbles': { 'user': 'pebbles', 'age': 1 }\n * };\n *\n * _.mapValues(users, function(o) { return o.age; });\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n *\n * // The `_.property` iteratee shorthand.\n * _.mapValues(users, 'age');\n * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n */\nfunction mapValues(object, iteratee) {\n var result = {};\n iteratee = baseIteratee(iteratee, 3);\n\n baseForOwn(object, function(value, key, object) {\n baseAssignValue(result, key, iteratee(value, key, object));\n });\n return result;\n}\n\nmodule.exports = mapValues;\n","var baseDifference = require('./_baseDifference'),\n baseFlatten = require('./_baseFlatten'),\n baseIteratee = require('./_baseIteratee'),\n baseRest = require('./_baseRest'),\n isArrayLikeObject = require('./isArrayLikeObject'),\n last = require('./last');\n\n/**\n * This method is like `_.difference` except that it accepts `iteratee` which\n * is invoked for each element of `array` and `values` to generate the criterion\n * by which they're compared. The order and references of result values are\n * determined by the first array. The iteratee is invoked with one argument:\n * (value).\n *\n * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n * // => [1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n * // => [{ 'x': 2 }]\n */\nvar differenceBy = baseRest(function(array, values) {\n var iteratee = last(values);\n if (isArrayLikeObject(iteratee)) {\n iteratee = undefined;\n }\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee, 2))\n : [];\n});\n\nmodule.exports = differenceBy;\n","/*\n * Copyright 2017-2023 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 { Column, Table, AutoSizer } from \"react-virtualized\";\nimport Draggable from \"react-draggable\";\nimport { Checkbox, Loading } from \"carbon-components-react\";\nimport { ArrowUp16, ArrowDown16, ArrowsVertical16, Information16 } from \"@carbon/icons-react\";\nimport Tooltip from \"./../../../tooltip/tooltip.jsx\";\nimport TruncatedContentTooltip from \"./../truncated-content-tooltip\";\nimport { SORT_DIRECTION, STATES, ROW_SELECTION, MINIMUM_COLUMN_WIDTH, MINIMUM_COLUMN_WIDTH_WITHOUT_LABEL } from \"./../../constants/constants\";\nimport { injectIntl } from \"react-intl\";\nimport defaultMessages from \"../../../../locales/common-properties/locales/en.json\";\n\nimport { isEmpty, differenceBy, mapValues } from \"lodash\";\nimport classNames from \"classnames\";\n\nimport PropTypes from \"prop-types\";\nimport React from \"react\";\nimport { v4 as uuid4 } from \"uuid\";\n\nclass VirtualizedTable extends React.Component {\n\n\tstatic getDerivedStateFromProps(nextProps, prevState) {\n\t\tconst updatedState = {};\n\t\tif (nextProps.rowCount !== prevState.rowCount) {\n\t\t\tupdatedState.rowCount = nextProps.rowCount;\n\t\t}\n\n\t\tconst prevStateTableWidth = prevState.columns.reduce((totalWidth, column) => column.width + totalWidth, 0);\n\t\tconst nextPropsTableWidth = nextProps.columns.reduce((totalWidth, column) => column.width + totalWidth, 0);\n\t\tconst editorSizeUpdated = (prevStateTableWidth !== nextPropsTableWidth);\n\n\t\t// Get new columns if column label (headerLabel) is different. This is useful when changing \"View in tables\" dropdown in Expression control.\n\t\t// Also when right flyout is expanded/collapsed, width of all columns changes, in this case get new columns with updated widths.\n\t\t// We're not comparing all properties in columns object because width can be different after resizing.\n\t\tif (!prevState.columnResized || !isEmpty(differenceBy(nextProps.columns, prevState.columns, \"headerLabel\")) || editorSizeUpdated) {\n\t\t\tupdatedState.columns = nextProps.columns;\n\t\t}\n\t\treturn (updatedState);\n\t}\n\n\tconstructor(props, context) {\n\t\tsuper(props, context);\n\n\t\tthis.state = {\n\t\t\trowCount: this.props.rowCount,\n\t\t\tcolumns: this.props.columns,\n\t\t\tcolumnResized: false\n\t\t};\n\t\tthis.virtualizedTableRef = React.createRef();\n\t\tthis.lastChecked = isEmpty(props.rowsSelected) ? null : props.rowsSelected.slice(-1).pop();\n\n\t\tthis.isOverSelectOption = false;\n\t\tthis.mouseEventCalled = false;\n\t\tthis.keyBoardEventCalled = false;\n\t\tthis.cellRenderer = this.cellRenderer.bind(this);\n\t\tthis.selectAll = this.selectAll.bind(this);\n\t\tthis.headerRowRenderer = this.headerRowRenderer.bind(this);\n\t\tthis.headerColRenderer = this.headerColRenderer.bind(this);\n\t\tthis.onRowClick = this.onRowClick.bind(this);\n\t\tthis.overSelectOption = this.overSelectOption.bind(this);\n\t\tthis.resizeColumn = this.resizeColumn.bind(this);\n\t\tthis.uuid = uuid4();\n\t}\n\n\tcomponentDidUpdate() {\n\t\t// If the rowHeight prop is a function, the virtualized table doesn't always adjust its\n\t\t// row heights correctly when the table data has changed. So in this case we need\n\t\t// to recompute the row heights.\n\t\tif (typeof this.props.rowHeight === \"function\") {\n\t\t\tthis.recomputeRowHeights();\n\t\t}\n\t}\n\n\t// This is also triggered when clicking on a checkbox\n\tonRowClick(evt, rowData, index) {\n\t\tif (evt.target.className === \"bx--select-option\") {\n\t\t\tevt.stopPropagation(); // stop propagation when selecting dropdown select options within table rows\n\t\t} else {\n\t\t\t// Set selections\n\t\t\tconst selected = !this.isRowSelected(rowData.originalRowIndex);\n\t\t\tif (typeof this.props.setRowsSelected === \"function\") {\n\t\t\t\tthis.props.setRowsSelected({\n\t\t\t\t\t\"index\": index,\n\t\t\t\t\t\"originalRowIndex\": rowData.originalRowIndex,\n\t\t\t\t\t\"selected\": selected,\n\t\t\t\t\t\"isOverSelectOption\": this.isOverSelectOption,\n\t\t\t\t\t\"selectMultipleRows\": evt.shiftKey ? evt.shiftKey : false,\n\t\t\t\t\t\"lastCheckedRow\": this.lastChecked === null ? 0 : this.lastChecked }, evt);\n\n\t\t\t\t// Track lastChecked row for shift key selection\n\t\t\t\tthis.lastChecked = rowData.index;\n\t\t\t}\n\t\t}\n\t}\n\n\tonRowDoubleClick(evt, rowKey, index) {\n\t\tif (this.props.onRowDoubleClick) {\n\t\t\tthis.props.onRowDoubleClick(evt, rowKey, index);\n\t\t}\n\t}\n\n\tgetCheckboxLabelColumnIndex(columns) {\n\t\t// If 1st column is Index, use the next column for labeling\n\t\tfor (let i = 0; i < columns.length; i++) {\n\t\t\tif (columns[i].operation !== \"index\") {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\t// Use first column by default\n\t\treturn 0;\n\t}\n\n\tgetColumnIndex(columns, key) {\n\t\tconst index = columns.findIndex((column) => column.key === key);\n\t\treturn index;\n\t}\n\n\t// Returns an object of deltas for every column - {columnKey: individualDelta}\n\tgetColumnWiseDeltas(columns, deltaX) {\n\t\tconst columnWiseDeltas = {};\n\t\tif (columns.length > 0) {\n\t\t\t// sort columns in ascending order of widths because smallest column will reach MINIMUM_COLUMN_WIDTH first\n\t\t\tcolumns.sort((a, b) => a.width - b.width);\n\t\t\tlet totalDelta = deltaX;\n\t\t\t// Finalize individualDelta for 1 column at a time starting from smallest column\n\t\t\t// If individualDelta is greater than maximum allowed delta for the column, set individualDelta = maximum allowed delta until column reaches MINIMUM_COLUMN_WIDTH\n\t\t\t// Total delta will reduce after every iteration\n\t\t\tfor (let i = 0; i < columns.length; i++) {\n\t\t\t\tconst widthOfAllColumns = columns.slice(i).reduce((prev, current) => prev + current.width, 0);\n\t\t\t\tlet individualDelta = Math.round((columns[i].width * totalDelta) / widthOfAllColumns);\n\t\t\t\t// check if individualDelta is greater than the maximum allowed delta for this column\n\t\t\t\tif (columns[i].headerLabel.length > 0 && columns[i].width - individualDelta < MINIMUM_COLUMN_WIDTH) {\n\t\t\t\t\tindividualDelta = columns[i].width - MINIMUM_COLUMN_WIDTH;\n\t\t\t\t} else if (columns[i].width - individualDelta < MINIMUM_COLUMN_WIDTH_WITHOUT_LABEL) {\n\t\t\t\t\tindividualDelta = columns[i].width - MINIMUM_COLUMN_WIDTH_WITHOUT_LABEL;\n\t\t\t\t}\n\t\t\t\ttotalDelta -= individualDelta;\n\t\t\t\tcolumnWiseDeltas[columns[i].key] = individualDelta;\n\t\t\t}\n\t\t\tif (totalDelta > 0) {\n\t\t\t\t// deltaX is greater than maximum allowed delta for all columns.\n\t\t\t\t// Don't allow resizing by setting individualDelta = 0 for ALL columns\n\t\t\t\treturn mapValues(columnWiseDeltas, () => 0);\n\t\t\t}\n\t\t}\n\t\treturn columnWiseDeltas;\n\t}\n\n\tisRowSelected(index) {\n\t\tif (this.props.rowsSelected) {\n\t\t\treturn this.props.rowsSelected.indexOf(index) > -1;\n\t\t}\n\t\treturn false;\n\t}\n\n\tisLastColumn(dataKey) {\n\t\tconst columnIndex = this.getColumnIndex(this.props.columns, dataKey);\n\t\tconst isLastColumn = (columnIndex === (this.props.columns.length - 1));\n\t\treturn isLastColumn;\n\t}\n\n\tselectAll(selected) {\n\t\tthis.props.setAllRowsSelected(selected);\n\t}\n\n\t// Callback responsible for rendering a cell's contents.\n\tcellRenderer({ cellData }) {\n\t\tif (cellData === null || typeof cellData === \"undefined\") {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn cellData;\n\t}\n\n\tcellRendererHTML({ cellData }) {\n\t\tif (cellData === null || typeof cellData === \"undefined\") {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn (<div dangerouslySetInnerHTML={{ __html: cellData }} />);\n\t}\n\n\trecomputeRowHeights(index) {\n\t\tif (this.virtualizedTableRef && this.virtualizedTableRef.current) {\n\t\t\tthis.virtualizedTableRef.current.recomputeRowHeights(index);\n\t\t}\n\t}\n\n\t// Responsible for rendering the table header row given an array of columns.\n\theaderRowRenderer(scrollKey, { className, columns, style }) {\n\t\tconst checkboxLabelColumnIndex = (typeof this.props.columns === \"undefined\" || this.props.columns.length === 0) ? 0 : this.getCheckboxLabelColumnIndex(this.props.columns);\n\t\tconst headerCheckboxLabel = (typeof this.props.columns === \"undefined\" || this.props.columns.length === 0) ? \"\" : this.props.columns[checkboxLabelColumnIndex].headerLabel;\n\t\tconst translatedHeaderCheckboxLabel = this.props.intl.formatMessage(\n\t\t\t{ id: \"virtualizedTable.header.checkbox.label\", defaultMessage: defaultMessages[\"virtualizedTable.header.checkbox.label\"] },\n\t\t\t{ header_checkbox_label: headerCheckboxLabel }\n\t\t);\n\t\tconst checkbox = this.props.selectable && this.props.rowSelection !== ROW_SELECTION.SINGLE\n\t\t\t? (<div role=\"checkbox\" aria-checked={this.props.checkedAll} className=\"properties-vt-header-checkbox\">\n\t\t\t\t<Checkbox\n\t\t\t\t\tid={`properties-vt-hd-cb-${this.uuid}-${scrollKey}`}\n\t\t\t\t\tonChange={this.selectAll}\n\t\t\t\t\tchecked={this.props.checkedAll}\n\t\t\t\t\tlabelText={translatedHeaderCheckboxLabel}\n\t\t\t\t\thideLabel\n\t\t\t\t/>\n\t\t\t</div>)\n\t\t\t: \"\";\n\n\t\treturn (<div className={className} data-role=\"properties-header-row\" role=\"row\" style={style}>\n\t\t\t{checkbox}\n\t\t\t{columns}\n\t\t</div>);\n\t}\n\n\theaderColRenderer({ columnData, dataKey, disableSort, label, sortBy, sortDirection }) {\n\t\tlet sortIcon = null;\n\t\tif (typeof this.props.sortColumns[dataKey] !== \"undefined\") {\n\t\t\tlet type = null;\n\t\t\tswitch (this.props.sortColumns[dataKey]) {\n\t\t\tcase SORT_DIRECTION.ASC:\n\t\t\t\ttype = <ArrowUp16 disabled={this.props.tableState === STATES.DISABLED} />;\n\t\t\t\tbreak;\n\t\t\tcase SORT_DIRECTION.DESC:\n\t\t\t\ttype = <ArrowDown16 disabled={this.props.tableState === STATES.DISABLED} />;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\ttype = <ArrowsVertical16 disabled={this.props.tableState === STATES.DISABLED} />;\n\t\t\t}\n\t\t\tsortIcon = (<span className=\"properties-ft-column-sort-icon\">\n\t\t\t\t{type}\n\t\t\t</span>);\n\t\t}\n\n\t\tconst infoIcon = isEmpty(columnData.description)\n\t\t\t? null\n\t\t\t: (<div className=\"properties-vt-info-icon-tip\">\n\t\t\t\t<Tooltip\n\t\t\t\t\tid=\"properties-tooltip-info\"\n\t\t\t\t\ttip={columnData.description}\n\t\t\t\t\tdirection=\"bottom\"\n\t\t\t\t\tclassName=\"properties-tooltips\"\n\t\t\t\t\tshowToolTipOnClick\n\t\t\t\t>\n\t\t\t\t\t<Information16 className=\"properties-vt-info-icon\" />\n\t\t\t\t</Tooltip>\n\t\t\t</div>);\n\n\t\tconst resizeElem = columnData.resizable && !this.isLastColumn(dataKey)\n\t\t\t? (<Draggable\n\t\t\t\taxis=\"x\"\n\t\t\t\tdefaultClassName=\"properties-vt-header-resize\"\n\t\t\t\tdefaultClassNameDragging=\"properties-vt-header-resize-active\"\n\t\t\t\tonDrag={\n\t\t\t\t\t(evt, { deltaX }) => {\n\t\t\t\t\t\tthis.resizeColumn({ dataKey, deltaX });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tposition={{ x: 0 }}\n\t\t\t\tzIndex={999}\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\trole=\"button\" tabIndex=\"0\"\n\t\t\t\t\taria-label=\"Resize column\"\n\t\t\t\t/>\n\t\t\t</Draggable>)\n\t\t\t: \"\";\n\t\tconst headerDisplayLabel = typeof label === \"string\" ? (<span>{label}</span>) : label;\n\t\tconst header = (<div className=\"properties-vt-label-tip-icon\">\n\t\t\t<TruncatedContentTooltip\n\t\t\t\ttooltipText={columnData.headerLabel}\n\t\t\t\tcontent={headerDisplayLabel}\n\t\t\t\tdisabled={columnData.disabled}\n\t\t\t/>\n\t\t\t{infoIcon}\n\t\t</div>);\n\t\treturn (\n\t\t\t<div data-id={`properties-vt-header-${dataKey}`}\n\t\t\t\tclassName={classNames({ \"properties-vt-column-with-resize\": resizeElem !== \"\", \"properties-vt-column-without-resize\": resizeElem === \"\" })}\n\t\t\t>\n\t\t\t\t<div className={classNames(\"properties-vt-column properties-tooltips-container\", { \"sort-column-active\": dataKey === this.props.sortBy })}>\n\t\t\t\t\t{header}\n\t\t\t\t\t{disableSort === false && sortIcon}\n\t\t\t\t</div>\n\t\t\t\t{ resizeElem }\n\t\t\t</div>\n\t\t);\n\t}\n\n\t/* Columns are not resizable by default. Host application specifies resizable columns in parameter definition.\n\t* When a column is resized, width of ALL the columns to the right of resized column is adjusted.\n\t* Every column grows/shrinks directly proportional to column width.\n\t* Example: If a column width is reduced by 10px and there are 4 columns on the right of resized column having widths [40, 30, 20, 10],\n\t* Then 10px will be adjusted in 4 columns as - [4px, 3px, 2px, 1px]\n\t* When every column's width reaches MINIMUM_COLUMN_WIDTH (56px), resizing is stopped.\n\t* Special case - For columns without labels, when their width reaches MINIMUM_COLUMN_WIDTH_WITHOUT_LABEL (32px), resizing is stopped.\n\t*/\n\tresizeColumn({ dataKey, deltaX }) {\n\t\tthis.setState((prevState) => {\n\n\t\t\tconst columns = prevState.columns;\n\t\t\t// Calculate number of resizable columns on the right of resized column\n\t\t\tconst resizedColumnIndex = this.getColumnIndex(columns, dataKey);\n\t\t\tconst allColumnsOnRight = columns.slice(resizedColumnIndex + 1);\n\t\t\t// Exclude columns having staticWidth: true\n\t\t\tconst nonStaticColumns = allColumnsOnRight.filter((column) => !column.staticWidth);\n\n\t\t\tconst resizableColumns = nonStaticColumns.filter((column) => {\n\t\t\t\t// When shrinking, get columns having width greater than MINIMUM_COLUMN_WIDTH\n\t\t\t\tif (deltaX >= 0) {\n\t\t\t\t\tif (column.headerLabel.length > 0) {\n\t\t\t\t\t\t// Column with label has min width 56px\n\t\t\t\t\t\treturn (column.width > MINIMUM_COLUMN_WIDTH);\n\t\t\t\t\t}\n\t\t\t\t\t// Column without label has min width 32px\n\t\t\t\t\treturn (column.width > MINIMUM_COLUMN_WIDTH_WITHOUT_LABEL);\n\t\t\t\t}\n\t\t\t\t// When expanding, get all columns\n\t\t\t\treturn true;\n\t\t\t});\n\n\t\t\t// Get column wise delta for resizableColumns\n\t\t\tconst columnWiseDeltas = this.getColumnWiseDeltas(resizableColumns, deltaX);\n\t\t\tconst columnsToBeResized = Object.keys(columnWiseDeltas);\n\n\t\t\t// check if all column wise deltas are 0. This happens when deltaX is more than maximum allowed delta for all columns\n\t\t\tconst everyColumnHasZeroDelta = Object.values(columnWiseDeltas).every((delta) => delta === 0);\n\n\t\t\tif ((columns[resizedColumnIndex].width + deltaX) > MINIMUM_COLUMN_WIDTH && !isEmpty(columnWiseDeltas) && !everyColumnHasZeroDelta) {\n\t\t\t\tcolumns[resizedColumnIndex].width += deltaX;\n\t\t\t\t// Adjust width of all resizable columns\n\t\t\t\tcolumnsToBeResized.forEach((columnKey) => {\n\t\t\t\t\tconst idx = columns.findIndex((col) => col.key === columnKey);\n\t\t\t\t\tcolumns[idx].width -= columnWiseDeltas[columnKey];\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn {\n\t\t\t\tcolumnResized: true,\n\t\t\t\tcolumns: columns\n\t\t\t};\n\t\t});\n\t}\n\n\toverSelectOption(evt) {\n\t\t// Differentiate between mouse and keyboard event\n\t\tif (evt.type === \"mouseenter\" && !this.keyBoardEventCalled) {\n\t\t\tthis.mouseEventCalled = true;\n\t\t\tthis.isOverSelectOption = !this.isOverSelectOption;\n\t\t} else if (evt.type === \"mouseleave\" && this.mouseEventCalled) {\n\t\t\tthis.mouseEventCalled = false;\n\t\t\tthis.isOverSelectOption = !this.isOverSelectOption;\n\t\t} else if (evt.type === \"focus\" && !this.mouseEventCalled) {\n\t\t\tthis.keyBoardEventCalled = true;\n\t\t\tthis.isOverSelectOption = !this.isOverSelectOption;\n\t\t} else if (evt.type === \"blur\" && this.keyBoardEventCalled) {\n\t\t\tthis.keyBoardEventCalled = false;\n\t\t\tthis.isOverSelectOption = !this.isOverSelectOption;\n\t\t}\n\t}\n\n\t// Responsible for rendering a table row given an array of columns.\n\trowRenderer(scrollKey, { className, columns, index, key, rowData, style }) {\n\t\tlet selectOption = \"\";\n\t\tlet selectedRow = false;\n\t\tconst rowDisabled = typeof rowData.disabled === \"boolean\" ? rowData.disabled : false;\n\n\t\tif (typeof this.props.rowHeight === \"function\" && this.props.rowHeight({ index }) === 0) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this.props.selectable) {\n\t\t\tconst rowSelected = this.isRowSelected(rowData.originalRowIndex);\n\t\t\tselectedRow = this.props.selectable && rowSelected;\n\t\t\tif (this.props.rowSelection !== ROW_SELECTION.SINGLE) {\n\t\t\t\tconst translatedRowCheckboxLabel = this.props.intl.formatMessage(\n\t\t\t\t\t{ id: \"virtualizedTable.row.checkbox.label\", defaultMessage: defaultMessages[\"virtualizedTable.row.checkbox.label\"] },\n\t\t\t\t\t{ row_index: index + 1, table_label: (this.props.tableLabel ? this.props.tableLabel : \"\") }\n\t\t\t\t);\n\n\t\t\t\tselectOption = (<div className=\"properties-vt-row-checkbox\"\n\t\t\t\t\trole=\"gridcell\"\n\t\t\t\t\tonMouseEnter={(evt) => this.overSelectOption(evt)}\n\t\t\t\t\tonMouseLeave={(evt) => this.overSelectOption(evt)}\n\t\t\t\t\tonFocus={(evt) => this.overSelectOption(evt)}\n\t\t\t\t\tonBlur={(evt) => this.overSelectOption(evt)}\n\t\t\t\t\tonKeyDown={(evt) => {\n\t\t\t\t\t\tif (evt.code === \"Space\" || evt.code === \"Enter\") {\n\t\t\t\t\t\t\tthis.onRowClick(evt, rowData, index);\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tid={`properties-vt-row-cb-${this.uuid}-${scrollKey}-${index}`}\n\t\t\t\t\t\tkey={`properties-vt-row-cb-${scrollKey}-${index}`}\n\t\t\t\t\t\tlabelText={translatedRowCheckboxLabel}\n\t\t\t\t\t\thideLabel\n\t\t\t\t\t\tchecked={rowSelected}\n\t\t\t\t\t\tdisabled={rowDisabled}\n\t\t\t\t\t/>\n\t\t\t\t</div>);\n\t\t\t}\n\t\t}\n\n\t\tif (this.props.summaryTable) {\n\t\t\tselectOption = <div className=\"properties-vt-row-checkbox\" />;\n\t\t}\n\n\t\tif (rowData.loading === true) {\n\t\t\treturn (\n\t\t\t\t<div\n\t\t\t\t\tclassName={className}\n\t\t\t\t\tkey={key}\n\t\t\t\t\tdata-role=\"properties-loading-row\"\n\t\t\t\t\trole=\"row\"\n\t\t\t\t\tstyle={style}\n\t\t\t\t>\n\t\t\t\t\t<Loading className=\"properties-vt-small-loading\" small withOverlay={false} />\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tconst width = (parseInt(style.width, 10)) + \"px\"; // Subtract 2px to account for row borders\n\t\tconst newStyle = Object.assign({}, style, { width: width });\n\n\t\t// Empty style required on cell for react-virtualized. This div wrapper is required to apply the onDoubleClick handler.\n\t\treturn (<div style={{}} key={key} className=\"properties-vt-double-click\" onDoubleClick={(evt) => this.onRowDoubleClick(evt, rowData.rowKey, index)}>\n\t\t\t<div\n\t\t\t\tclassName={classNames(className,\n\t\t\t\t\t{ \"properties-vt-row-selected\": selectedRow },\n\t\t\t\t\t{ \"properties-vt-row-disabled\": rowDisabled },\n\t\t\t\t\t{ \"properties-vt-row-non-interactive\": !this.props.selectable } // ReadonlyTable with single row selection is non-interactive.\n\t\t\t\t)}\n\t\t\t\tdata-role=\"properties-data-row\"\n\t\t\t\trole=\"row\"\n\t\t\t\tstyle={newStyle}\n\t\t\t\tonMouseDown={(evt) => this.onRowClick(evt, rowData, index)}\n\t\t\t>\n\t\t\t\t{selectOption}\n\t\t\t\t{columns}\n\t\t\t</div>\n\t\t</div>);\n\t}\n\n\trender() {\n\t\tconst defaultTestHeight = 2000; // 2000 is set to accommodate test data \"category-selection-data\" with all categories expanded\n\n\t\treturn (\n\t\t\t<div className=\"properties-vt\">\n\t\t\t\t<div className={classNames(\"properties-vt-autosizer\",\n\t\t\t\t\t{ \"properties-vt-single-selection\": this.props.rowSelection && this.props.rowSelection === ROW_SELECTION.SINGLE,\n\t\t\t\t\t\t\"properties-light-disabled\": !this.props.light })}\n\t\t\t\t>\n\t\t\t\t\t<AutoSizer>\n\t\t\t\t\t\t{({ height, width }) => ( // Table height: subtract 50 for margin below the table.\n\t\t\t\t\t\t\t<Table\n\t\t\t\t\t\t\t\tref={this.virtualizedTableRef}\n\t\t\t\t\t\t\t\twidth={width ? width : 500}\n\t\t\t\t\t\t\t\t// AutoSizer manages width and height properties so the table fills the available space.\n\t\t\t\t\t\t\t\t// It does a direct DOM manipulation to the parent, outside React's VirtualDOM.\n\t\t\t\t\t\t\t\t// Since the actual DOM is not available when unit testing, we are passing in a default\n\t\t\t\t\t\t\t\t// width of 500 and a default height of 300.\n\t\t\t\t\t\t\t\theight={this.props.tableHeight || height || defaultTestHeight}\n\n\t\t\t\t\t\t\t\tclassName=\"properties-autosized-vt\"\n\t\t\t\t\t\t\t\taria-label={this.props.tableLabel ? this.props.tableLabel : \"\"}\n\n\t\t\t\t\t\t\t\tdisableHeader={this.props.disableHeader}\n\t\t\t\t\t\t\t\theaderClassName=\"properties-autosized-vt-header\"\n\t\t\t\t\t\t\t\theaderHeight={32}\n\t\t\t\t\t\t\t\theaderRowRenderer={this.headerRowRenderer.bind(this, this.props.scrollKey)}\n\t\t\t\t\t\t\t\tonHeaderClick={this.props.onHeaderClick}\n\n\t\t\t\t\t\t\t\trowClassName=\"properties-vt-row-class\"\n\t\t\t\t\t\t\t\trowHeight={this.props.rowHeight ? this.props.rowHeight : 32}\n\n\t\t\t\t\t\t\t\trowCount={this.state.rowCount}\n\t\t\t\t\t\t\t\trowGetter={this.props.rowGetter}\n\t\t\t\t\t\t\t\trowRenderer={this.rowRenderer.bind(this, this.props.scrollKey)}\n\n\t\t\t\t\t\t\t\tscrollToIndex={this.props.scrollToIndex}\n\t\t\t\t\t\t\t\tscrollToAlignment={this.props.scrollToAlignment}\n\n\t\t\t\t\t\t\t\tsort={this.props.onSort}\n\t\t\t\t\t\t\t\tsortDirection={this.props.sortDirection}\n\t\t\t\t\t\t\t\ttabIndex={-1}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tthis.state.columns.map((column) => (\n\t\t\t\t\t\t\t\t\t\t<Column\n\t\t\t\t\t\t\t\t\t\t\tkey={column.key}\n\t\t\t\t\t\t\t\t\t\t\tlabel={column.label}\n\t\t\t\t\t\t\t\t\t\t\tdataKey={column.key}\n\t\t\t\t\t\t\t\t\t\t\twidth={column.width}\n\t\t\t\t\t\t\t\t\t\t\tcolumnData={column}\n\t\t\t\t\t\t\t\t\t\t\tdisableSort={typeof this.props.sortColumns[column.key] === \"undefined\"}\n\t\t\t\t\t\t\t\t\t\t\tcellRenderer={column.isHTML ? this.cellRendererHTML : this.cellRenderer}\n\t\t\t\t\t\t\t\t\t\t\theaderRenderer={this.headerColRenderer}\n\t\t\t\t\t\t\t\t\t\t\t{...column.minWidth && { minWidth: column.minWidth }}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</Table>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AutoSizer>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nVirtualizedTable.defaultProps = {\n\tdisableHeader: false\n};\n\nVirtualizedTable.propTypes = {\n\ttableLabel: PropTypes.string,\n\ttableHeight: PropTypes.number.isRequired,\n\tselectable: PropTypes.bool,\n\tsummaryTable: PropTypes.bool,\n\trowSelection: PropTypes.string,\n\tdisableHeader: PropTypes.bool,\n\tcolumns: PropTypes.array.isRequired,\n\trowCount: PropTypes.number.isRequired,\n\trowGetter: PropTypes.func.isRequired,\n\trowHeight: PropTypes.oneOfType([\n\t\tPropTypes.func.isRequired,\n\t\tPropTypes.number.isRequired\n\t]),\n\tonRowDoubleClick: PropTypes.func,\n\trowsSelected: PropTypes.array, // Required if selectable is true\n\tcheckedAll: PropTypes.bool, // Required if selectable is true\n\tsetRowsSelected: PropTypes.func, // Required if selectable is true\n\tsetAllRowsSelected: PropTypes.func, // Required if selectable is true\n\tscrollToIndex: PropTypes.number,\n\tscrollToAlignment: PropTypes.string,\n\tonSort: PropTypes.func,\n\tsortBy: PropTypes.string,\n\tsortColumns: PropTypes.object,\n\tsortDirection: PropTypes.string,\n\tonHeaderClick: PropTypes.func,\n\tscrollKey: PropTypes.string,\n\ttableState: PropTypes.string,\n\tlight: PropTypes.bool,\n\tintl: PropTypes.object.isRequired\n};\n\nexport default injectIntl(VirtualizedTable);\n","/*\n * Copyright 2017-2023 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 complexity: [\"error\", 25] */\n/* eslint max-depth: [\"error\", 6] */\n\nimport React from \"react\";\nimport { injectIntl } from \"react-intl\";\nimport ReactDOM from \"react-dom\";\nimport PropTypes from \"prop-types\";\nimport { Search } from \"carbon-components-react\";\nimport VirtualizedTable from \"./../virtualized-table/virtualized-table.jsx\";\nimport { REM_ROW_HEIGHT, REM_HEADER_HEIGHT, ONE_REM_HEIGHT, SORT_DIRECTION, STATES, ROW_HEIGHT, ROW_SELECTION } from \"./../../constants/constants\";\nimport ReactResizeDetector from \"react-resize-detector\";\nimport classNames from \"classnames\";\nimport { has, isEmpty } from \"lodash\";\nimport defaultMessages from \"../../../../locales/common-properties/locales/en.json\";\n\nclass FlexibleTable extends React.Component {\n\n\tconstructor(props) {\n\t\tsuper(props);\n\n\t\tconst sortDirs = {};\n\t\tif (typeof this.props.sortable !== \"undefined\") {\n\t\t\tfor (var i = 0; i < this.props.sortable.length; i++) {\n\t\t\t\tconst sortCol = this.props.sortable[i];\n\t\t\t\tsortDirs[sortCol] = SORT_DIRECTION.NOT_SORTED;\n\t\t\t}\n\t\t}\n\t\tthis.state = {\n\t\t\tcheckedAllRows: false,\n\t\t\tcolumnSortDir: sortDirs,\n\t\t\tcurrentSortColumn: \"\",\n\t\t\ttableWidth: 0,\n\t\t\ttableHeight: 0,\n\t\t\trows: typeof props.rows !== \"undefined\" ? props.rows : 5.5,\n\t\t\tdynamicHeight: null\n\t\t};\n\n\t\tthis.rowHeight = this.rowHeight.bind(this);\n\t\tthis.rowGetter = this.rowGetter.bind(this);\n\n\t\tthis.getOriginalRowIndex = this.getOriginalRowIndex.bind(this);\n\t\tthis.getLastChildPropertyIdRow = this.getLastChildPropertyIdRow.bind(this);\n\n\t\tthis.calculateColumnWidths = this.calculateColumnWidths.bind(this);\n\t\tthis.handleFilterChange = this.handleFilterChange.bind(this);\n\t\tthis.onSort = this.onSort.bind(this);\n\t\tthis.sortHeaderClick = this.sortHeaderClick.bind(this);\n\t\tthis._updateTableWidth = this._updateTableWidth.bind(this);\n\t\tthis._adjustTableHeight = this._adjustTableHeight.bind(this);\n\t\tthis.handleCheckedRow = this.handleCheckedRow.bind(this);\n\t\tthis.handleCheckedAllRows = this.handleCheckedAllRows.bind(this);\n\t\tthis.handleCheckedMultipleRows = this.handleCheckedMultipleRows.bind(this);\n\t}\n\n\tcomponentDidMount() {\n\t\tthis._adjustTableHeight();\n\t\twindow.addEventListener(\"resize\", this._adjustTableHeight);\n\t\tthis.tableNode = ReactDOM.findDOMNode(this.refs.table);\n\t}\n\n\tcomponentDidUpdate(prevProps, prevState) {\n\t\tif (prevProps.rows !== this.props.rows ||\n\t\t\tprevProps.columns !== this.props.columns ||\n\t\t\tprevProps.noAutoSize !== this.props.noAutoSize) {\n\t\t\tthis._adjustTableHeight();\n\t\t}\n\n\t\t// Calculate if checkedAllRows is true\n\t\tif (this.props.selectedRows && !isEmpty(this.props.data)) {\n\t\t\tthis.setCheckedAll(this.props.selectedRows);\n\t\t}\n\n\t\tthis.tableNode = ReactDOM.findDOMNode(this.refs.table);\n\t}\n\n\tcomponentWillUnmount() {\n\t\twindow.removeEventListener(\"resize\", this._adjustTableHeight);\n\t}\n\n\tonSort({ sortBy }) {\n\t\tif (this.props.onSort) {\n\t\t\tconst sortDirection = (this.state.columnSortDir[sortBy] === SORT_DIRECTION.ASC) ? SORT_DIRECTION.DESC : SORT_DIRECTION.ASC;\n\t\t\tconst spec = {\n\t\t\t\tcolumn: sortBy,\n\t\t\t\tdirection: sortDirection\n\t\t\t};\n\t\t\tthis.props.onSort(spec);\n\t\t}\n\t}\n\n\t/**\n\t* The current displayed row may have an index that is different from its actual index within the dataset\n\t* Given the current displayed row and index of the table,\n\t* return its original row index from its row's propertyId\n\t*/\n\tgetOriginalRowIndex(row, index) {\n\t\tlet rowIndex = index;\n\t\tif (row.columns && has(row.columns[0], \"content.props.children.props.propertyId.propertyId\")) {\n\t\t\t// this is a nested control\n\t\t\trowIndex = this.getLastChildPropertyIdRow(row.columns[0].content.props.children.props.propertyId, index);\n\t\t} else if (row.columns && has(row.columns[0], \"content.props.children.props.propertyId.index\")) {\n\t\t\t// for rows that have multi-select controls in them\n\t\t\trowIndex = row.columns[0].content.props.children.props.propertyId.index;\n\t\t} else if (row.columns && has(row.columns[0], \"content.props.children.props.propertyId.row\")) {\n\t\t\trowIndex = row.columns[0].content.props.children.props.propertyId.row;\n\t\t} else if (typeof row.rowKey === \"number\") { // expression tables uses rowKey\n\t\t\trowIndex = parseInt(row.rowKey, 10);\n\t\t}\n\t\treturn rowIndex;\n\t}\n\n\t// Get the 'row' of the last child's propertyId\n\tgetLastChildPropertyIdRow(propertyId, defaultRowIndex) {\n\t\tif (typeof propertyId.propertyId !== \"undefined\") {\n\t\t\treturn this.getLastChildPropertyIdRow(propertyId.propertyId);\n\t\t}\n\t\tif (typeof propertyId.row !== \"undefined\") {\n\t\t\treturn propertyId.row;\n\t\t}\n\t\treturn defaultRowIndex;\n\t}\n\n\t/**\n\t* The header checkAll box may change depending on the current visible rows\n\t* Determine if all visible rows in the table are currently selected\n\t* and set the `checkedAllRows` state accordingly\n\t*/\n\tsetCheckedAll(selectedRows) {\n\t\tlet checkAll = true;\n\t\tfor (let idx = 0; idx < this.props.data.length; idx++) {\n\t\t\tconst row = this.props.data[idx];\n\t\t\tconst originalRowIndex = this.getOriginalRowIndex(row, idx);\n\t\t\tif (selectedRows.indexOf(originalRowIndex) < 0) {\n\t\t\t\tcheckAll = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (this.state.checkedAllRows !== checkAll) {\n\t\t\tthis.setState({ checkedAllRows: checkAll });\n\t\t}\n\t}\n\n\t/**\n\t* Calculate the width for each column to fit within the table\n\t* Widths provided in columns without 'px' are 'weighted' and will be scaled\n\t* Widths provided in columns with 'px' are used as is without scaling\n\t* if width is provided with 'px', subtract that from the total available table width\n\t* if width is provided, divide the column 'weighted' width with the max width from columns\n\t* return the scaled factor\n\t* multiply each column 'weighted' width with the scaled factor to get the actual width in pixels\n\t* @param columns column definitions\n\t* @param parentTableWidth\n\t*/\n\tcalculateColumnWidths(columns, parentTableWidth) {\n\t\tlet tableWidth = parentTableWidth - 12; // subtract 12 for the left padding scss $spacing-04\n\t\tif (this.props.rowSelection !== ROW_SELECTION.SINGLE) {\n\t\t\ttableWidth -= 40;\n\t\t}\n\t\tlet remainingColumns = columns.length; // keep track of how many columns to calculate width for\n\t\tlet maxWeight = 0;\n\n\t\tfor (const columnDef of columns) {\n\t\t\t// if columns have specific width subtract from total width\n\t\t\tif (columnDef.width) {\n\t\t\t\tif (typeof columnDef.width === \"string\" && columnDef.width.includes(\"px\")) {\n\t\t\t\t\ttableWidth -= parseInt(columnDef.width, 10);\n\t\t\t\t\tremainingColumns--;\n\t\t\t\t} else {\n\t\t\t\t\tmaxWeight = Math.max(maxWeight, columnDef.width); // keep track of which column has highest width provided\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tconst widths = [];\n\t\tconst defaultWidth = Math.floor(tableWidth / remainingColumns); // use default width for columns without a weight\n\t\tconst weightedWidths = [];\n\t\tlet sumWeightedWidths = 0;\n\n\t\t// scale weight of columns with width provided\n\t\tfor (const columnDef of columns) {\n\t\t\tif (columnDef.width && !isNaN(columnDef.width)) {\n\t\t\t\tweightedWidths.push(columnDef.width / maxWeight);\n\t\t\t\tsumWeightedWidths += (columnDef.width / maxWeight);\n\t\t\t} else {\n\t\t\t\tweightedWidths.push(null);\n\t\t\t}\n\t\t}\n\n\t\tconst scaledWidth = tableWidth / sumWeightedWidths; // scaled width multiplier for each column with width provided\n\n\t\tlet sumColumnWidth = 0;\n\t\tfor (let idx = 0; idx < columns.length; idx++) {\n\t\t\tconst columnDef = columns[idx];\n\t\t\tif (columnDef.width) {\n\t\t\t\t// use the width provided with 'px' as is\n\t\t\t\tif (typeof columnDef.width === \"string\" && columnDef.width.includes(\"px\")) {\n\t\t\t\t\twidths.push(Math.floor(parseInt(columnDef.width, 10)) + \"px\");\n\t\t\t\t\tsumColumnWidth += parseInt(columnDef.width, 10);\n\t\t\t\t} else { // multiply the width provided by the scaled width\n\t\t\t\t\tconst calculatedWidth = Math.floor(weightedWidths[idx] * scaledWidth);\n\t\t\t\t\twidths.push(calculatedWidth + \"px\");\n\t\t\t\t\tsumColumnWidth += calculatedWidth;\n\t\t\t\t}\n\t\t\t} else { // if no width provided, use the defaultWidth\n\t\t\t\twidths.push(defaultWidth);\n\t\t\t\tsumColumnWidth += defaultWidth;\n\t\t\t}\n\t\t}\n\n\t\t// if any columns had decimals floored, allocate additional space to the first column\n\t\tlet compare = parentTableWidth;\n\t\tif (this.props.rowSelection !== ROW_SELECTION.SINGLE) {\n\t\t\tcompare -= 40;\n\t\t}\n\n\t\tif (sumColumnWidth < compare) {\n\t\t\tconst firstColWith = parseInt(widths[0], 10);\n\t\t\twidths[0] = firstColWith + compare - sumColumnWidth + \"px\";\n\t\t}\n\n\t\treturn widths;\n\t}\n\n\t_updateTableWidth(width, height) {\n\t\tif (this.state.tableWidth !== Math.floor(width - 2)) {\n\t\t\tthis.setState({\n\t\t\t\ttableWidth: Math.floor(width - 2) // subtract 2 px for the borders\n\t\t\t});\n\t\t}\n\t}\n\n\t_adjustTableHeight() {\n\t\tif (this.props.noAutoSize) {\n\t\t\treturn;\n\t\t}\n\t\tlet newHeight = this.state.tableHeight;\n\t\tlet dynamicH = this.state.dynamicHeight;\n\t\tconst multiSelectTableHeight = REM_ROW_HEIGHT + REM_HEADER_HEIGHT;\n\t\tif (Array.isArray(this.props.data) && this.props.data.length < this.state.rows) {\n\t\t\tnewHeight = (REM_ROW_HEIGHT * this.props.data.length + REM_HEADER_HEIGHT + (this.props.selectedEditRow ? multiSelectTableHeight : 0)) * ONE_REM_HEIGHT;\n\t\t} else if (this.state.rows > 0) {\n\t\t\tnewHeight = (REM_ROW_HEIGHT * this.state.rows + REM_HEADER_HEIGHT + (this.props.selectedEditRow ? multiSelectTableHeight : 0)) * ONE_REM_HEIGHT;\n\t\t} else if (this.state.rows === 0) { // only display header\n\t\t\tnewHeight = REM_HEADER_HEIGHT * ONE_REM_HEIGHT;\n\t\t} else if (this.state.rows === -1) {\n\t\t\tif (this.flexibleTable) {\n\t\t\t\tconst labelAndDescriptionHeight = 50; // possible dynamically set this in the future\n\t\t\t\tconst ftHeaderHeight = (typeof this.flexibleTableHeader !== \"undefined\") ? ReactDOM.findDOMNode(this.flexibleTableHeader).getBoundingClientRect().height : 0;\n\t\t\t\tconst flyoutHeight = this.findPropertyNodeHeight(this.flexibleTable, \"properties-wf-children\");\n\t\t\t\tconst tearsheetHeight = this.findPropertyNodeHeight(this.flexibleTable, \"properties-primary-tab-panel\");\n\t\t\t\tif (flyoutHeight === 0 && tearsheetHeight === 0) {\n\t\t\t\t\tnewHeight = \"100vh\"; // set full window height if flyout & tearsheet height not found\n\t\t\t\t\tdynamicH = -1;\n\t\t\t\t} else {\n\t\t\t\t\tconst totalHeight = flyoutHeight !== 0 ? flyoutHeight : tearsheetHeight;\n\t\t\t\t\tnewHeight = `calc(${totalHeight - ftHeaderHeight - labelAndDescriptionHeight}px - ${(3.5 * ONE_REM_HEIGHT)}px)`; // 3.5rem to adjust padding\n\t\t\t\t\tdynamicH = (totalHeight - ftHeaderHeight - labelAndDescriptionHeight) - (3.5 * 16);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (newHeight !== this.state.tableHeight) {\n\t\t\tthis.setState({ tableHeight: newHeight, dynamicHeight: dynamicH });\n\t\t}\n\t}\n\n\tfindPropertyNodeHeight(node, className) {\n\t\tif (node && node.parentNode && node.parentNode.className && node.parentNode.className.includes(className)) {\n\t\t\tconst foundNode = ReactDOM.findDOMNode(node.parentNode).getBoundingClientRect();\n\t\t\tif (foundNode) {\n\t\t\t\treturn foundNode.height;\n\t\t\t}\n\t\t\treturn 0;\n\t\t} else if (node && node.parentNode) {\n\t\t\treturn this.findPropertyNodeHeight(node.parentNode, className);\n\t\t}\n\t\treturn 0;\n\t}\n\n\tsortHeaderClick({ dataKey }) {\n\t\tconst colSortDir = this.state.columnSortDir;\n\t\tif (typeof colSortDir[dataKey] !== \"undefined\") {\n\t\t\t// At a time only 1 column will be shown as sorted. Revert other columns to not sorted.\n\t\t\tObject.keys(colSortDir).forEach((key) => {\n\t\t\t\tif (key !== dataKey) {\n\t\t\t\t\tcolSortDir[key] = SORT_DIRECTION.NOT_SORTED;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// Only dataKey column will be sorted\n\t\t\tcolSortDir[dataKey] = (colSortDir[dataKey] === SORT_DIRECTION.ASC) ? SORT_DIRECTION.DESC : SORT_DIRECTION.ASC;\n\t\t\tthis.setState({\n\t\t\t\tcolumnSortDir: colSortDir,\n\t\t\t\tcurrentSortColumn: dataKey\n\t\t\t});\n\t\t}\n\t}\n\n\thandleFilterChange(evt) {\n\t\tif (this.props.onFilter) {\n\t\t\tthis.props.onFilter(evt.target.value);\n\t\t}\n\t}\n\n\thandleCheckedAllRows(checked) {\n\t\tlet selectAll = [];\n\t\tconst controlValue = this.props.data;\n\t\tif (checked) {\n\t\t\tselectAll = Array.from(this.props.selectedRows);\n\t\t\tfor (var rowIndex = 0; rowIndex < controlValue.length; rowIndex++) {\n\t\t\t\tconst originalRowIndex = this.getOriginalRowIndex(controlValue[rowIndex], rowIndex);\n\t\t\t\tselectAll.push(originalRowIndex);\n\t\t\t}\n\t\t}\n\t\tselectAll = Array.from(new Set(selectAll));\n\t\tthis.props.updateRowSelections(selectAll);\n\t\tthis.setState({ checkedAllRows: checked });\n\t}\n\n\t/**\n\t* This method is called when user wants to select multiple rows using shift key\n\t* Select/deselect all rows between lastCheckedRow and existingRow\n\t* @param lastCheckedRow (integer) - index of last selected row\n\t* @param existingRow (integer) - index of row where shift key is clicked\n\t* @param checked (boolean) - rows are to be selected or deselected\n\t*/\n\thandleCheckedMultipleRows(lastCheckedRow, existingRow, checked) {\n\t\tlet selectedRows = this.props.selectedRows ? this.props.selectedRows : [];\n\t\t// Calculate rows between lastChecked row and existingRow\n\t\tlet inBetweenRows;\n\t\tif (lastCheckedRow < existingRow) {\n\t\t\tinBetweenRows = Array.from({ length: (existingRow - lastCheckedRow) + 1 }, (_, i) => lastCheckedRow + i);\n\t\t} else {\n\t\t\tinBetweenRows = Array.from({ length: (lastCheckedRow - existingRow) + 1 }, (_, i) => existingRow + i);\n\t\t}\n\t\t// if selectedRows already has inBetweenRows, remove them first\n\t\tselectedRows = selectedRows.filter((row) => !inBetweenRows.includes(row)); // Deselecting inBetweenRows using shift key\n\t\tif (checked) {\n\t\t\tselectedRows = selectedRows.concat(inBetweenRows); \t// Selecting inBetweenRows using shift key\n\t\t}\n\t\treturn selectedRows;\n\t}\n\n\thandleCheckedRow(data, evt) {\n\t\tconst dataRowIndex = data.originalRowIndex; // Use the originalRowIndex for selection in case rows are filtered.\n\t\tconst displayedRowIndex = data.index;\n\t\tconst checked = data.selected;\n\t\tconst overSelectOption = data.isOverSelectOption;\n\n\t\tif (!this.props.data[displayedRowIndex].disabled && typeof this.props.updateRowSelections === \"function\") {\n\t\t\tif (overSelectOption) { // Checkbox is clicked\n\t\t\t\tlet current = this.props.selectedRows ? this.props.selectedRows : [];\n\t\t\t\tif (data.selectMultipleRows) { // multiple rows selected/deselected using shift key\n\t\t\t\t\tcurrent = this.handleCheckedMultipleRows(data.lastCheckedRow, displayedRowIndex, checked);\n\t\t\t\t\tthis.setCheckedAll(current);\n\t\t\t\t} else if (checked) { // single row selected\n\t\t\t\t\tcurrent = current.concat(dataRowIndex);\n\t\t\t\t\tthis.setCheckedAll(current);\n\t\t\t\t} else if (current) { // single row deselected\n\t\t\t\t\tcurrent = current.filter(function(element) {\n\t\t\t\t\t\treturn element !== dataRowIndex;\n\t\t\t\t\t});\n\t\t\t\t\tthis.setState({ checkedAllRows: false });\n\t\t\t\t}\n\t\t\t\t// Sort ascending because we want to add selected rows in the same order as they're displayed in the table\n\t\t\t\tcurrent.sort((a, b) => a - b);\n\t\t\t\tthis.props.updateRowSelections(current);\n\t\t\t} else if (this.props.rowSelection === ROW_SELECTION.SINGLE) { // Table row is clicked\n\t\t\t\tthis.props.updateRowSelections(data.index, evt, this.props.data[data.index].rowKey);\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t* Generate the table header specs from this.props.columns\n\t* this.props.columns: array of objects\n\t* [\n\t* {\n\t* \"key\": string,\n\t* \"label\": string,\n\t* \"width\": integer or string if containts 'px',\n\t* \"description\": optional string,\n\t* \"resizable\": optional boolean,\n\t* \"staticWidth\": optional boolean - This is a special property added only for SPSS modeler which directly calls FlexibleTable. This property is NOT a part of uiHints.\n\t* }\n\t* ]\n\t* @param columnWidths\n\t*/\n\tgenerateTableHeaderRow(columnWidths) {\n\t\tconst headers = [];\n\t\tlet searchLabel = \"\";\n\t\tfor (var j = 0; j < this.props.columns.length; j++) {\n\t\t\tconst columnDef = this.props.columns[j];\n\t\t\tif (typeof this.props.filterable !== \"undefined\" && this.props.filterable[0] === columnDef.key) {\n\t\t\t\tsearchLabel = columnDef.label;\n\t\t\t}\n\t\t\tconst width = Math.abs(parseInt(columnWidths[j], 10));\n\t\t\tlet headerLabel;\n\t\t\tif (typeof (columnDef.label) === \"object\") {\n\t\t\t\theaderLabel = columnDef.label.props.labelText;\n\t\t\t} else if (typeof (columnDef.label) === \"string\") {\n\t\t\t\theaderLabel = columnDef.label;\n\t\t\t}\n\t\t\theaders.push({\n\t\t\t\tkey: columnDef.key,\n\t\t\t\tlabel: columnDef.label,\n\t\t\t\twidth: width,\n\t\t\t\tdescription: columnDef.description,\n\t\t\t\theaderLabel: headerLabel,\n\t\t\t\tresizable: columnDef.resizable,\n\t\t\t\toperation: columnDef.operation,\n\t\t\t\tstaticWidth: columnDef.staticWidth ? columnDef.staticWidth : false // Used to exclude a column from resizing. If true, \"resizable\" value will be ignored.\n\t\t\t});\n\t\t}\n\t\treturn {\n\t\t\theaders: headers,\n\t\t\tsearchLabel: searchLabel\n\t\t};\n\t}\n\n\t/**\n\t* Callback responsible for returning a data row given an index\n\t*/\n\trowGetter({ index }) {\n\t\tconst row = this.props.data[index];\n\t\tconst originalRowIndex = this.getOriginalRowIndex(row, index);\n\n\t\tconst columns = {};\n\t\tif (row.columns) {\n\t\t\tfor (let cidx = 0; cidx < row.columns.length; cidx++) {\n\t\t\t\tconst column = row.columns[cidx];\n\t\t\t\tcolumns[column.column] = column.content;\n\t\t\t}\n\t\t}\n\t\treturn Object.assign({}, columns, {\n\t\t\tloading: false,\n\t\t\tindex: index,\n\t\t\toriginalRowIndex: originalRowIndex,\n\t\t\trowKey: typeof row.rowKey !== \"undefined\" ? row.rowKey : this.props.scrollKey + \"-row-\" + index,\n\t\t\tdisabled: row.disabled\n\t\t});\n\t}\n\n\t// Function that returns the height of a row given its index\n\trowHeight({ index }) {\n\t\treturn ROW_HEIGHT;\n\t}\n\n\trender() {\n\t\tconst tableWidth = this.state.tableWidth;\n\t\tconst columnWidths = this.calculateColumnWidths(this.props.columns, tableWidth);\n\t\tconst headerInfo = this.generateTableHeaderRow(columnWidths);\n\n\t\tconst headers = headerInfo.headers;\n\t\tconst searchLabel = headerInfo.searchLabel;\n\t\tconst disabled = this.props.tableState === STATES.DISABLED;\n\n\t\tlet searchBar = null;\n\n\t\tif (typeof this.props.filterable !== \"undefined\" && this.props.filterable.length !== 0) {\n\t\t\tconst placeHolder = typeof this.props.searchPlaceholder !== \"undefined\"\n\t\t\t\t? this.props.searchPlaceholder\n\t\t\t\t: this.props.intl.formatMessage({ id: \"table.search.placeholder\", defaultMessage: defaultMessages[\"table.search.placeholder\"] }, { column_name: searchLabel });\n\t\t\tconst searchBarLabel = this.props.intl.formatMessage(\n\t\t\t\t{ id: \"table.search.label\", defaultMessage: defaultMessages[\"table.search.label\"] },\n\t\t\t\t{ table_name: this.props.tableLabel }\n\t\t\t);\n\n\t\t\tsearchBar = (\n\t\t\t\t<div className={classNames(\"properties-ft-search-container\", { \"disabled\": disabled })}>\n\t\t\t\t\t<Search\n\t\t\t\t\t\tclassName=\"properties-ft-search-text\"\n\t\t\t\t\t\tplaceholder={placeHolder}\n\t\t\t\t\t\tonChange={this.handleFilterChange}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tlabelText={searchBarLabel}\n\t\t\t\t\t\tlight={this.props.light}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t);\n\t\t}\n\n\t\tlet scrollIndex = -1;\n\t\tif (typeof this.props.scrollToRow !== \"undefined\" && this.props.scrollToRow !== null) {\n\t\t\tscrollIndex = this.props.scrollToRow;\n\t\t}\n\n\t\tlet heightStyle = {};\n\t\tif (!this.props.noAutoSize) {\n\t\t\theightStyle = { height: this.state.tableHeight };\n\t\t}\n\n\t\tconst containerClass = this.props.showHeader ? \"properties-ft-container-absolute \" : \"properties-ft-container-absolute-noheader \";\n\t\tconst messageClass = (!this.props.messageInfo) ? containerClass + STATES.INFO : containerClass;\n\t\tconst ftHeader = (searchBar || this.props.topRightPanel)\n\t\t\t? (<div className=\"properties-ft-table-header\" ref={ (ref) => (this.flexibleTableHeader = ref) }>\n\t\t\t\t{searchBar}\n\t\t\t\t{this.props.topRightPanel}\n\t\t\t</div>)\n\t\t\t: null;\n\n\t\tconst emptyTableContent = isEmpty(this.props.data)\n\t\t\t? (\n\t\t\t\t<div className=\"properties-ft-empty-table\">\n\t\t\t\t\t{this.props.emptyTablePlaceholder}\n\t\t\t\t</div>\n\t\t\t)\n\t\t\t: null;\n\n\t\tconst ftClassname = classNames(\"properties-ft-control-container\", { \"properties-light-disabled\": !this.props.light });\n\n\t\tlet tableHeight = 0;\n\t\tconst multiSelectEditRowsRem = 2 * REM_HEADER_HEIGHT; // multi-select adds two rows when selectedEditRow\n\t\tconst multiSelectEditRowsPixels = multiSelectEditRowsRem * ONE_REM_HEIGHT;\n\t\tif (this.state.rows !== -1 && this.state.tableHeight) {\n\t\t\tconst remHeight = parseInt(this.state.tableHeight, 10);\n\t\t\ttableHeight = (remHeight - (this.props.selectedEditRow ? multiSelectEditRowsRem : 0));\n\t\t} else if (this.state.rows === -1 && this.state.dynamicHeight && this.state.dynamicHeight !== -1) {\n\t\t\ttableHeight = this.state.dynamicHeight - (this.props.selectedEditRow ? multiSelectEditRowsPixels : 0);\n\t\t}\n\n\t\treturn (\n\t\t\t<div data-id={\"properties-ft-\" + this.props.scrollKey} className={ftClassname} ref={ (ref) => (this.flexibleTable = ref) }>\n\t\t\t\t{ftHeader}\n\t\t\t\t<div className=\"properties-ft-container-panel\">\n\t\t\t\t\t<ReactResizeDetector handleWidth onResize={this._updateTableWidth}>\n\t\t\t\t\t\t<div className={classNames(\"properties-ft-container-wrapper\", this.props.messageInfo ? this.props.messageInfo.type : \"\")} style={ heightStyle }>\n\t\t\t\t\t\t\t<div className={messageClass}>\n\t\t\t\t\t\t\t\t{this.props.selectedEditRow}\n\t\t\t\t\t\t\t\t<VirtualizedTable\n\t\t\t\t\t\t\t\t\ttableLabel={this.props.tableLabel}\n\t\t\t\t\t\t\t\t\ttableHeight={tableHeight}\n\t\t\t\t\t\t\t\t\tcolumns={headers}\n\t\t\t\t\t\t\t\t\tonHeaderClick={this.sortHeaderClick}\n\t\t\t\t\t\t\t\t\trowCount={this.props.data.length}\n\t\t\t\t\t\t\t\t\trowHeight={this.rowHeight}\n\t\t\t\t\t\t\t\t\trowGetter={this.rowGetter}\n\t\t\t\t\t\t\t\t\tsummaryTable={this.props.summaryTable}\n\t\t\t\t\t\t\t\t\tselectable={typeof this.props.updateRowSelections !== \"undefined\"}\n\t\t\t\t\t\t\t\t\trowSelection={this.props.rowSelection}\n\t\t\t\t\t\t\t\t\tdisableHeader={!this.props.showHeader}\n\t\t\t\t\t\t\t\t\tonRowDoubleClick={this.props.onRowDoubleClick}\n\t\t\t\t\t\t\t\t\trowsSelected={this.props.selectedRows}\n\t\t\t\t\t\t\t\t\tcheckedAll={this.state.checkedAllRows}\n\t\t\t\t\t\t\t\t\tsetRowsSelected={this.handleCheckedRow}\n\t\t\t\t\t\t\t\t\tsetAllRowsSelected={this.handleCheckedAllRows}\n\t\t\t\t\t\t\t\t\tscrollKey={this.props.scrollKey}\n\t\t\t\t\t\t\t\t\tonSort={this.onSort}\n\t\t\t\t\t\t\t\t\tsortBy={this.state.currentSortColumn}\n\t\t\t\t\t\t\t\t\tsortColumns={this.state.columnSortDir}\n\t\t\t\t\t\t\t\t\tsortDirection={this.state.columnSortDir[this.state.currentSortColumn]}\n\t\t\t\t\t\t\t\t\ttableState={this.props.tableState}\n\t\t\t\t\t\t\t\t\tlight={this.props.light}\n\t\t\t\t\t\t\t\t\t{...(scrollIndex !== -1 && { scrollToIndex: scrollIndex, scrollToAlignment: \"center\" })}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</ReactResizeDetector>\n\t\t\t\t</div>\n\t\t\t\t{emptyTableContent}\n\t\t\t</div>\n\t\t);\n\t}\n}\n\nFlexibleTable.defaultProps = {\n\tshowHeader: true,\n\tlight: true,\n\temptyTablePlaceholder: \"\"\n};\n\nFlexibleTable.propTypes = {\n\tsortable: PropTypes.array,\n\tcolumns: PropTypes.array.isRequired,\n\tdata: PropTypes.array.isRequired,\n\temptyTablePlaceholder: PropTypes.oneOfType([\n\t\tPropTypes.string,\n\t\tPropTypes.element\n\t]),\n\tsearchPlaceholder: PropTypes.string,\n\tfilterable: PropTypes.array,\n\tfilterBy: PropTypes.string,\n\tfilterKeyword: PropTypes.string,\n\thideFilterInput: PropTypes.func,\n\tscrollToRow: PropTypes.number,\n\tonSort: PropTypes.func,\n\tonFilter: PropTypes.func,\n\tshowHeader: PropTypes.bool,\n\tselectedEditRow: PropTypes.object,\n\ttopRightPanel: PropTypes.object,\n\tscrollKey: PropTypes.string,\n\ttableLabel: PropTypes.string,\n\trows: PropTypes.number,\n\tnoAutoSize: PropTypes.bool,\n\ttableState: PropTypes.string,\n\tmessageInfo: PropTypes.object,\n\tupdateRowSelections: PropTypes.func,\n\tonRowDoubleClick: PropTypes.func,\n\tselectedRows: PropTypes.array,\n\trowSelection: PropTypes.string,\n\tsummaryTable: PropTypes.bool,\n\tlight: PropTypes.bool,\n\tintl: PropTypes.object.isRequired\n};\n\nexport default injectIntl(FlexibleTable);\n"],"names":["TruncatedContentTooltip","_React$Component","_inherits","_super","_createSuper","_classCallCheck","apply","arguments","_createClass","key","value","_this","tooltipText","this","props","truncatedRef","_typeof","String","content","type","Checkbox","tooltipRef","firstChild","lastChild","tooltip","React","createElement","className","Tooltip","id","tip","direction","disable","_has","disabled","showToolTipIfTruncated","ref","Component","baseAssignValue","require$$0","baseForOwn","require$$1","baseIteratee","require$$2","mapValues_1","object","iteratee","result","baseDifference","baseFlatten","baseRest","require$$3","isArrayLikeObject","require$$4","last","require$$5","differenceBy_1","array","values","undefined","VirtualizedTable","context","call","state","rowCount","columns","columnResized","virtualizedTableRef","createRef","lastChecked","_isEmpty","rowsSelected","slice","pop","isOverSelectOption","mouseEventCalled","keyBoardEventCalled","cellRenderer","bind","_assertThisInitialized","selectAll","headerRowRenderer","headerColRenderer","onRowClick","overSelectOption","resizeColumn","uuid","uuid4","rowHeight","recomputeRowHeights","evt","rowData","index","target","stopPropagation","selected","isRowSelected","originalRowIndex","setRowsSelected","selectMultipleRows","shiftKey","lastCheckedRow","rowKey","onRowDoubleClick","i","length","operation","findIndex","column","deltaX","columnWiseDeltas","sort","a","b","width","totalDelta","widthOfAllColumns","reduce","prev","current","individualDelta","Math","round","headerLabel","MINIMUM_COLUMN_WIDTH","MINIMUM_COLUMN_WIDTH_WITHOUT_LABEL","_mapValues","indexOf","dataKey","isLastColumn","getColumnIndex","setAllRowsSelected","_ref","cellData","_ref2","dangerouslySetInnerHTML","__html","scrollKey","_ref3","style","checkboxLabelColumnIndex","getCheckboxLabelColumnIndex","headerCheckboxLabel","translatedHeaderCheckboxLabel","intl","formatMessage","defaultMessage","defaultMessages","header_checkbox_label","checkbox","selectable","rowSelection","ROW_SELECTION","SINGLE","role","checkedAll","concat","onChange","checked","labelText","hideLabel","_ref4","_this2","columnData","disableSort","label","sortBy","sortDirection","sortIcon","sortColumns","SORT_DIRECTION","ASC","ArrowUp16","tableState","STATES","DISABLED","DESC","ArrowDown16","ArrowsVertical16","infoIcon","description","showToolTipOnClick","Information16","resizeElem","resizable","Draggable","axis","defaultClassName","defaultClassNameDragging","onDrag","_ref5","position","x","zIndex","tabIndex","headerDisplayLabel","header","classNames","_ref6","_this3","setState","prevState","resizedColumnIndex","resizableColumns","filter","staticWidth","getColumnWiseDeltas","columnsToBeResized","Object","keys","everyColumnHasZeroDelta","every","delta","forEach","columnKey","idx","col","_ref7","_this4","selectOption","selectedRow","rowDisabled","rowSelected","translatedRowCheckboxLabel","row_index","table_label","tableLabel","onMouseEnter","onMouseLeave","onFocus","onBlur","onKeyDown","code","summaryTable","loading","Loading","small","withOverlay","parseInt","newStyle","assign","onDoubleClick","onMouseDown","_this5","light","AutoSizer","_ref8","height","Table","tableHeight","disableHeader","headerClassName","headerHeight","onHeaderClick","rowClassName","rowGetter","rowRenderer","scrollToIndex","scrollToAlignment","onSort","map","Column","_extends","isHTML","cellRendererHTML","headerRenderer","minWidth","nextProps","updatedState","editorSizeUpdated","totalWidth","_differenceBy","defaultProps","injectIntl","FlexibleTable","sortDirs","sortable","NOT_SORTED","checkedAllRows","columnSortDir","currentSortColumn","tableWidth","rows","dynamicHeight","getOriginalRowIndex","getLastChildPropertyIdRow","calculateColumnWidths","handleFilterChange","sortHeaderClick","_updateTableWidth","_adjustTableHeight","handleCheckedRow","handleCheckedAllRows","handleCheckedMultipleRows","window","addEventListener","tableNode","ReactDOM","findDOMNode","refs","table","prevProps","noAutoSize","selectedRows","data","setCheckedAll","removeEventListener","spec","row","rowIndex","children","propertyId","defaultRowIndex","checkAll","parentTableWidth","_step","remainingColumns","maxWeight","_iterator","_createForOfIteratorHelper","s","n","done","columnDef","includes","max","err","e","f","_step2","widths","defaultWidth","floor","weightedWidths","sumWeightedWidths","_iterator2","isNaN","push","scaledWidth","sumColumnWidth","calculatedWidth","compare","firstColWith","newHeight","dynamicH","multiSelectTableHeight","REM_ROW_HEIGHT","REM_HEADER_HEIGHT","Array","isArray","selectedEditRow","ONE_REM_HEIGHT","flexibleTable","ftHeaderHeight","flexibleTableHeader","getBoundingClientRect","flyoutHeight","findPropertyNodeHeight","tearsheetHeight","totalHeight","node","parentNode","foundNode","colSortDir","onFilter","controlValue","from","Set","updateRowSelections","existingRow","inBetweenRows","_","dataRowIndex","displayedRowIndex","element","columnWidths","headers","searchLabel","j","filterable","abs","cidx","ROW_HEIGHT","headerInfo","generateTableHeaderRow","searchBar","placeHolder","searchPlaceholder","column_name","searchBarLabel","table_name","Search","placeholder","size","scrollIndex","scrollToRow","heightStyle","containerClass","showHeader","messageClass","messageInfo","INFO","ftHeader","topRightPanel","emptyTableContent","emptyTablePlaceholder","ftClassname","multiSelectEditRowsRem","multiSelectEditRowsPixels","ReactResizeDetector","handleWidth","onResize"],"mappings":"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"}