@cpfr/tootframes 1.0.19 → 1.0.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/Color.d.ts +1 -0
- package/dist/TabPanel.d.ts +23 -0
- package/dist/main.d.ts +1 -0
- package/dist/tootframes.esm.js +1 -1
- package/dist/tootframes.esm.js.map +1 -1
- package/dist/tootframes.js +1 -1
- package/dist/tootframes.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tootframes.esm.js","mappings":"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","sources":["webpack://tootframes/webpack/universalModuleDefinition","webpack://tootframes/./src/style.scss","webpack://tootframes/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://tootframes/./node_modules/css-loader/dist/runtime/api.js","webpack://tootframes/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://tootframes/webpack/bootstrap","webpack://tootframes/webpack/runtime/compat get default export","webpack://tootframes/webpack/runtime/define property getters","webpack://tootframes/webpack/runtime/hasOwnProperty shorthand","webpack://tootframes/webpack/runtime/make namespace object","webpack://tootframes/webpack/runtime/nonce","webpack://tootframes/./src/style.scss?75ba","webpack://tootframes/./src/Math.ts","webpack://tootframes/./src/Color.ts","webpack://tootframes/./src/Widget.ts","webpack://tootframes/./src/dragAndDrop.ts","webpack://tootframes/./src/Panel.ts","webpack://tootframes/./src/ROOT.ts","webpack://tootframes/./src/DockContainer.ts","webpack://tootframes/./src/Dialog.ts","webpack://tootframes/./src/ColorPicker.ts","webpack://tootframes/./src/Button.ts","webpack://tootframes/./src/Dropdown.ts","webpack://tootframes/./src/ListBox.ts","webpack://tootframes/./src/ListView.ts","webpack://tootframes/./src/TreeView.ts","webpack://tootframes/./src/Menu.ts","webpack://tootframes/./src/MenuBar.ts","webpack://tootframes/./src/Label.ts","webpack://tootframes/./src/Image.ts","webpack://tootframes/./src/UndoHistory.ts","webpack://tootframes/./src/MessageDialog.ts","webpack://tootframes/./src/NodeEditor.ts","webpack://tootframes/./src/FakeClipboard.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tootframes\"] = factory();\n\telse\n\t\troot[\"tootframes\"] = factory();\n})(self, () => {\nreturn ","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"*{box-sizing:border-box;cursor:default;user-select:none}a{cursor:pointer;color:#c3df85;text-decoration:none}a:hover{color:#d7e6b9;text-decoration:underline}.beingDragged{opacity:.6;z-index:1000 !important}img{pointer-events:none}body{background-color:#262829;color:#dadcdd;overflow:hidden}input{border:1px solid #343738;background:#1a1d1f;color:#cad2d4;border-radius:.1em;padding:.3em .8em;outline:none;font-size:1.2em;margin-right:.2em;margin-bottom:.2em}.MenuBar{background-color:#3f4243;box-shadow:0 0 .5em rgba(0,0,0,.4666666667);border-bottom:1px solid #575c5e;width:100%;height:2.5em;position:absolute;z-index:50;top:0;left:0}.MenuBar .Icon{height:100%;padding:.4em 1em}.MenuBar .Menu{display:inline-block;padding:.6em .7em;height:100%;vertical-align:top}.MenuBar .Menu:hover{background-color:#262829}.MenuContent{display:none;position:absolute;background-color:#3f4243;box-shadow:0 0 .5em rgba(0,0,0,.4666666667);left:0;top:2.5em;min-width:6em;min-height:.5em;z-index:1000}.MenuContent>.entry{padding:.5em 2em}.MenuContent>.entry.submenu:after{content:\\\"›\\\";display:inline-block;position:absolute;right:0;margin-right:.5em}.MenuContent>.entry:hover{background-color:#262829}.MenuContent>.entry.disabled{color:#7d8488}.MenuContent>.entry.disabled:hover{background-color:#323536}.MenuContent>.separator{background-color:#575c5e;border:.4em solid #3f4243;height:.9em}.Modal{display:block;position:absolute;background-color:rgba(0,0,0,.4666666667);left:0;top:0;right:0;bottom:0}button::-moz-focus-inner{border:0}button,.button{background-color:#0d0e0f;outline:none;border-radius:0;border:none;color:#dadcdd;padding:.5em 2em;font-size:1em;margin-right:.2em;margin-bottom:.2em}button:focus,.button:focus{outline:none}button:hover,.button:hover{background-color:#1a1b1c}button:active,.button:active{background-color:#121314}.Modal{background-color:rgba(0,0,0,.4666666667);position:absolute;z-index:52;left:0;right:0;top:0;bottom:0}.Modal .Dialog{z-index:53}.text{white-space:pre-line}.Dialog{min-width:15em;max-width:80vw;min-height:5em;max-height:80vh}.Dialog,.DockPanel{position:absolute;z-index:51;top:50%;left:50%;transform:translate(-50%, -50%);background-color:#3f4243;box-shadow:0 0 .5em rgba(0,0,0,.4666666667)}.Dialog .title,.DockPanel .title{width:100%;text-align:center;padding:.5em;background-color:#575c5e;border-bottom:1px solid #707578}.Dialog .title .closeButton,.DockPanel .title .closeButton{padding:.2em;width:2em;height:2em;float:right;margin-top:-0.15em;margin-right:-0.15em;background-color:#323536}.Dialog .title .closeButton:hover,.DockPanel .title .closeButton:hover{background-color:#3f4243}.Dialog .content,.DockPanel .content{padding:.8em 1.5em;position:absolute}.Dialog .content.w3term,.DockPanel .content.w3term{height:100%}.Dialog .buttons,.DockPanel .buttons{padding:.8em 1.5em;text-align:center}.Dialog .content,.Dialog .Panel.content{position:static;padding:.8em 1.5em}.InputDialog input{width:100%}.Label{user-select:text}.DockContainer>*{overflow:hidden;position:absolute}.DockContainer.horizontal>*{display:inline-block}.DockContainer.horizontal>*.DockSeparator{width:3px;height:100%;background-color:#0d0e0f;cursor:ew-resize}.DockContainer.vertical>*{display:block;clear:both}.DockContainer.vertical>*.DockSeparator{width:100%;height:3px;background-color:#0d0e0f;cursor:ns-resize}.DockContainer>.DockSeparator:hover{background-color:#1a1b1c}.DockPanel{transform:none;max-width:none;max-height:none;background-color:#262829}.DockPanel .title{text-align:left;padding:.1em .5em;font-size:.9em;background-color:#1a1b1c;border-bottom:1px solid #121314}.DockPanel .title .closeButton{padding:0;width:1.6em;height:1.6em;float:right;margin-top:-0.15em;margin-right:-0.15em;background-color:#1a1b1c}.DockPanel .title .closeButton:hover{background-color:#262829}.DockPanel .content{width:100%;height:calc(100% - 1.5em);overflow:auto}.DockPanel.resizingHorizontally{cursor:ew-resize}.DockPanel.resizingVertically{cursor:ns-resize}.DockPanel.resizingHorizontally.resizingVertically{cursor:nwse-resize}.DockPanel .resizeEW,.DockPanel .resizeNS,.DockPanel .resizeDiag{display:none}.DockPanel.floating .resizeEW{display:block;width:.3em;top:0;bottom:0;background-color:rgba(0,0,0,0);cursor:ew-resize;position:absolute;right:0}.DockPanel.floating .resizeNS{display:block;width:100%;height:.3em;background-color:rgba(0,0,0,0);cursor:ns-resize;position:absolute;left:0;bottom:0}.DockPanel.floating .resizeDiag{display:block;width:.5em;height:.5em;background-color:rgba(0,0,0,0);cursor:nwse-resize;position:absolute;right:0;bottom:0}body>.DockContainer{position:absolute;z-index:49;top:0;left:0;right:0;bottom:0}.dockOverlay{position:fixed;background-color:rgba(51,119,153,.6);z-index:999}.NodeEditor{width:100%;height:100%;overflow:hidden !important;padding:0 !important}.NodeEditor.moving{cursor:grabbing}.NodeEditor.beingDragged{cursor:grabbing}.NodeEditor svg{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;pointer-events:none}.NodeEditor .Node{position:absolute}.Node{display:inline-block;border-radius:.5em;box-shadow:0 0 .5em rgba(0,0,0,.4666666667);background-color:#1a1b1c;white-space:nowrap}.Node .title{border-radius:.5em .5em 0 0;background-color:#323536}.Node .body{display:flex;justify-content:space-between}.Node .bullet{display:inline-block;background-color:#3f4243;width:1.2em;height:1.2em;border-radius:1em;border:.2em solid rgba(0,0,0,0);background-clip:padding-box}.Node .bullet:hover{background-color:#63696b;border:none}.Node .inputs{display:inline-block;vertical-align:text-top}.Node .inputs .bullet{margin-left:-0.5em;margin-right:.5em}.Node .inputs .input{display:block;position:relative;font-size:.7em;margin:0}.Node .outputs{display:inline-block;vertical-align:text-top;text-align:right}.Node .outputs .bullet{margin-left:.5em;margin-right:-0.5em}.Node .outputs .output{display:block;position:relative;font-size:.7em;margin:0}.Node .contents{vertical-align:text-top;display:inline-block;min-width:2em;min-height:2em;display:flex;flex-direction:column;justify-content:space-between}.Node.selected{box-shadow:0 0 .5em #4b4f51}.Node.selected .title{background-color:#4b4f51}.TreeViewItem .label{background-color:rgba(0,0,0,0);display:inline-block;border:1px solid rgba(0,0,0,0);-webkit-user-drag:element}.TreeViewItem.focused>.label{border:1px solid #4b4f51}.TreeViewItem .label.selected{background-color:rgba(195,223,133,.2666666667)}.TreeViewItem *{cursor:pointer}.TreeViewItem>.expander{display:inline-block;opacity:0;width:.3em;margin-right:.5em;font-weight:bold;transform:rotate(0deg);transition:transform .15s ease-in-out}.TreeViewItem.expandable>.expander{opacity:1;display:inline-block}.TreeViewItem.expanded>.expander{transform:rotate(90deg)}.TreeViewItem>.children{margin-left:1em;overflow:hidden;display:none}.TreeViewItem.expanded>.children{display:block}.Panel.content{margin:0;padding:0;width:100%}.ListView,.ListView.content{display:table;margin:0;padding:0;width:100%}.ListView .cell{font-size:80%;display:table-cell;padding:.15em .6em;border-left:.2em solid #262829;border-bottom:.2em solid #262829;background-color:#1f2021}.ListView .row{display:table-row}.ListView .row .cell{user-select:text}.ListView .row .cell input{background-color:rgba(0,0,0,0);border:none;outline:none;color:#dadcdd;margin:0;padding:0;user-select:text;width:auto;display:inline}.ListView .row.selected .cell{background-color:rgba(195,223,133,.2666666667)}.ListView .row .cell.editing{background-color:rgba(62,80,21,.2666666667);box-shadow:inset 0 0 .1em rgba(195,223,133,.2666666667)}.ListView .header{display:table-row}.ListView .header .cell{background-color:#323536}.NodeEditor path{stroke:#999}.NodeEditor path.notConnectable{stroke:#944}.NodeEditor .selectRect{background-color:rgba(112,117,120,.3);border:1px solid #707578;width:300px;height:300px;position:absolute;z-index:500}.Dropdown{background-color:rgba(112,117,120,.3);border:1px solid #575c5e;color:#dadcdd;outline:none}.ListBox{border:1px solid #343738;background-color:#1a1d1f;color:#cad2d4;border-radius:.1em;outline:none;font-size:.9em;overflow:auto}.ListBox>div{padding:.3em 1em}.ListBox>div:hover{background-color:#262a2d}.ListBox>div.selected{background-color:rgba(195,223,133,.2666666667)}.ColorPicker .handle{border-radius:100%;position:relative;border:.05em solid #222;width:1.2em;height:1.2em;box-shadow:.03em .03em .3em rgba(0,0,0,.2666666667),inset 0 0 .5em #fff;transform:translate(-50%, -50%);pointer-events:none}.PaintStyleColorPicker>.hue{position:relative;display:inline-block;width:400px;height:400px;box-shadow:.5em .5em 1em rgba(0,0,0,.5333333333);background:linear-gradient(to right, hsl(0deg, 100%, 50%), hsl(22.5deg, 100%, 50%), hsl(45deg, 100%, 50%), hsl(67.5deg, 100%, 50%), hsl(90deg, 100%, 50%), hsl(112.5deg, 100%, 50%), hsl(135deg, 100%, 50%), hsl(157.5deg, 100%, 50%), hsl(180deg, 100%, 50%), hsl(202.5deg, 100%, 50%), hsl(225deg, 100%, 50%), hsl(247.5deg, 100%, 50%), hsl(270deg, 100%, 50%), hsl(292.5deg, 100%, 50%), hsl(315deg, 100%, 50%), hsl(337.5deg, 100%, 50%), hsl(359deg, 100%, 50%))}.PaintStyleColorPicker>.hue *,.PaintStyleColorPicker>.lightness *{pointer-events:none}.PaintStyleColorPicker .saturation{width:100%;height:100%;background:linear-gradient(to bottom, transparent, hsl(0deg, 0%, 50%))}.PaintStyleColorPicker .lightness{width:2em;height:400px;display:inline-block;margin-left:.5em;background-color:red;background-image:linear-gradient(to bottom, white, transparent, black)}.PaintStyleColorPicker .lightness>.handle{border-radius:.2em;width:100%;transform:translate(0, -50%)}.GimpStyleColorPicker>.saturation{position:relative;display:inline-block;width:400px;height:400px;box-shadow:.5em .5em 1em rgba(0,0,0,.5333333333);background:linear-gradient(to bottom, transparent, black)}.GimpStyleColorPicker>.saturation *,.GimpStyleColorPicker>.value *{pointer-events:none}.GimpStyleColorPicker .value{width:100%;height:100%}.GimpStyleColorPicker .value::before{content:\\\" \\\";display:block;float:left;width:100%;height:100%;mask:linear-gradient(to right, white, transparent);background:linear-gradient(to bottom, white, black)}.GimpStyleColorPicker .hue{width:2em;height:400px;display:inline-block;margin-left:.5em;background:linear-gradient(to bottom, hsl(0deg, 100%, 50%), hsl(22.5deg, 100%, 50%), hsl(45deg, 100%, 50%), hsl(67.5deg, 100%, 50%), hsl(90deg, 100%, 50%), hsl(112.5deg, 100%, 50%), hsl(135deg, 100%, 50%), hsl(157.5deg, 100%, 50%), hsl(180deg, 100%, 50%), hsl(202.5deg, 100%, 50%), hsl(225deg, 100%, 50%), hsl(247.5deg, 100%, 50%), hsl(270deg, 100%, 50%), hsl(292.5deg, 100%, 50%), hsl(315deg, 100%, 50%), hsl(337.5deg, 100%, 50%), hsl(359deg, 100%, 50%))}.GimpStyleColorPicker .hue>.handle{border-radius:.2em;width:100%;transform:translate(0, -50%)}.WheelColorPicker>.wheel{position:relative;border:.5em solid #090909;width:25em;height:25em;border-radius:100%;padding:3em;box-shadow:.5em .5em 1em rgba(0,0,0,.5333333333);background:conic-gradient(hsl(90deg, 100%, 50%), hsl(67.5deg, 100%, 50%), hsl(45deg, 100%, 50%), hsl(22.5deg, 100%, 50%), hsl(0deg, 100%, 50%), hsl(337.5deg, 100%, 50%), hsl(315deg, 100%, 50%), hsl(292.5deg, 100%, 50%), hsl(270deg, 100%, 50%), hsl(247.5deg, 100%, 50%), hsl(225deg, 100%, 50%), hsl(202.5deg, 100%, 50%), hsl(180deg, 100%, 50%), hsl(157.5deg, 100%, 50%), hsl(135deg, 100%, 50%), hsl(112.5deg, 100%, 50%), hsl(89deg, 100%, 50%))}.WheelColorPicker>.wheel>.handle{width:3em;height:3em;position:absolute}.WheelColorPicker>.wheel>.innerCircle{width:100%;height:100%;background-color:#222;border-radius:100%;padding:18%;transform:rotate(45deg);box-shadow:inset .5em .5em 1em rgba(0,0,0,.5333333333)}.WheelColorPicker>.wheel>.innerCircle .saturation,.WheelColorPicker>.wheel>.innerCircle .lightness{width:100%;height:100%}.WheelColorPicker>.saturation *{pointer-events:none}.WheelColorPicker>.wheel>.innerCircle .saturation{background-color:red;box-shadow:.5em .5em 1em rgba(0,0,0,.5333333333);background-image:linear-gradient(45deg, hsl(0deg, 0%, 50%), transparent)}.WheelColorPicker>.wheel>.innerCircle .lightness{background:linear-gradient(135deg, white, transparent, black)}.ColorPickerDialog .WheelColorPicker{margin-top:1em;margin-bottom:1em}.ColorPickerDialog .ColorOutput{display:inline-block;width:3em;padding:.3em .8em;border:1px solid #343738;height:2.4em;vertical-align:top;margin-top:.05em;margin-right:.4em}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/style.scss\"],\"names\":[],\"mappings\":\"AAAA,EAIA,qBACI,CAAA,cACA,CAAA,gBACA,CAAA,EAGJ,cACI,CAAA,aACA,CAAA,oBACA,CAAA,QAEA,aACI,CAAA,yBACA,CAAA,cAIR,UACI,CAAA,uBACA,CAAA,IAGJ,mBACI,CAAA,KAGJ,wBA7BkB,CAAA,aADN,CAAA,eAiCR,CAAA,MAGJ,wBACI,CAAA,kBACA,CAAA,aACA,CAAA,kBACA,CAAA,iBACA,CAAA,YACA,CAAA,eACA,CAAA,iBACA,CAAA,kBACA,CAAA,SAGJ,wBACI,CAAA,2CACA,CAAA,+BACA,CAAA,UACA,CAAA,YACA,CAAA,iBACA,CAAA,UACA,CAAA,KACA,CAAA,MACA,CAAA,eAEA,WACI,CAAA,gBACA,CAAA,eAGJ,oBACI,CAAA,iBACA,CAAA,WACA,CAAA,kBACA,CAAA,qBAEA,wBArEU,CAAA,aA2ElB,YACI,CAAA,iBACA,CAAA,wBACA,CAAA,2CACA,CAAA,MACA,CAAA,SACA,CAAA,aACA,CAAA,eACA,CAAA,YACA,CAAA,oBAEA,gBACI,CAAA,kCAEA,WACI,CAAA,oBACA,CAAA,iBACA,CAAA,OACA,CAAA,iBACA,CAAA,0BAGJ,wBAjGU,CAAA,6BAsGd,aACI,CAAA,mCAEA,wBACI,CAAA,wBAIR,wBACI,CAAA,yBACA,CAAA,WACA,CAAA,OAKR,aACI,CAAA,iBACA,CAAA,wCACA,CAAA,MACA,CAAA,KACA,CAAA,OACA,CAAA,QACA,CAAA,yBAIJ,QACI,CAAA,eAGJ,wBACI,CAAA,YACA,CAAA,eACA,CAAA,WACA,CAAA,aA1IQ,CAAA,gBA4IR,CAAA,aACA,CAAA,iBACA,CAAA,kBACA,CAAA,2BAEA,YACI,CAAA,2BAEJ,wBACI,CAAA,6BAEJ,wBACI,CAAA,OAIR,wCACI,CAAA,iBACA,CAAA,UACA,CAAA,MACA,CAAA,OACA,CAAA,KACA,CAAA,QACA,CAAA,eAEA,UACI,CAAA,MAIR,oBACI,CAAA,QAGJ,cACI,CAAA,cACA,CAAA,cACA,CAAA,eACA,CAAA,mBAGJ,iBACI,CAAA,UACA,CAAA,OACA,CAAA,QACA,CAAA,+BACA,CAAA,wBAEA,CAAA,2CACA,CAAA,iCAEA,UACI,CAAA,iBACA,CAAA,YACA,CAAA,wBACA,CAAA,+BACA,CAAA,2DAEA,YACI,CAAA,SACA,CAAA,UACA,CAAA,WACA,CAAA,kBACA,CAAA,oBACA,CAAA,wBACA,CAAA,uEAEA,wBACI,CAAA,qCAKZ,kBACI,CAAA,iBACA,CAAA,mDAGJ,WACI,CAAA,qCAGJ,kBACI,CAAA,iBACA,CAAA,wCAIR,eAEI,CAAA,kBACA,CAAA,mBAGJ,UACI,CAAA,OAGJ,gBACI,CAAA,iBAIA,eACI,CAAA,iBACA,CAAA,4BAIJ,oBAGI,CAAA,0CAEA,SACI,CAAA,WACA,CAAA,wBACA,CAAA,gBACA,CAAA,0BAIR,aAGI,CAAA,UACA,CAAA,wCAEA,UACI,CAAA,UACA,CAAA,wBACA,CAAA,gBACA,CAAA,oCAIR,wBACI,CAAA,WAIR,cACI,CAAA,cACA,CAAA,eACA,CAAA,wBA3Rc,CAAA,kBA6Rd,eACI,CAAA,iBACA,CAAA,cACA,CAAA,wBACA,CAAA,+BACA,CAAA,+BAEA,SACI,CAAA,WACA,CAAA,YACA,CAAA,WACA,CAAA,kBACA,CAAA,oBACA,CAAA,wBACA,CAAA,qCAEA,wBA7SM,CAAA,oBAmTd,UACI,CAAA,yBACA,CAAA,aACA,CAAA,gCAGJ,gBACI,CAAA,8BAEJ,gBACI,CAAA,mDAEJ,kBACI,CAAA,iEAGJ,YAGI,CAAA,8BAGA,aACI,CAAA,UACA,CAAA,KACA,CAAA,QACA,CAAA,8BACA,CAAA,gBACA,CAAA,iBACA,CAAA,OACA,CAAA,8BAEJ,aACI,CAAA,UACA,CAAA,WACA,CAAA,8BACA,CAAA,gBACA,CAAA,iBACA,CAAA,MACA,CAAA,QACA,CAAA,gCAEJ,aACI,CAAA,UACA,CAAA,WACA,CAAA,8BACA,CAAA,kBACA,CAAA,iBACA,CAAA,OACA,CAAA,QACA,CAAA,oBAKZ,iBACI,CAAA,UACA,CAAA,KAEA,CAAA,MACA,CAAA,OACA,CAAA,QACA,CAAA,aAGJ,cACI,CAAA,oCACA,CAAA,WACA,CAAA,YAGJ,UACI,CAAA,WACA,CAAA,0BACA,CAAA,oBACA,CAAA,mBAEA,eACI,CAAA,yBAGJ,eACI,CAAA,gBAGJ,iBACI,CAAA,MACA,CAAA,OACA,CAAA,KACA,CAAA,QACA,CAAA,UACA,CAAA,WACA,CAAA,mBAEA,CAAA,kBAGJ,iBACI,CAAA,MAIR,oBACI,CAAA,kBACA,CAAA,2CACA,CAAA,wBAEA,CAAA,kBACA,CAAA,aAEA,2BACI,CAAA,wBACA,CAAA,YAGJ,YACI,CAAA,6BACA,CAAA,cAGJ,oBACI,CAAA,wBACA,CAAA,WAEA,CAAA,YACA,CAAA,iBACA,CAAA,+BACA,CAAA,2BACA,CAAA,oBAEA,wBACI,CAAA,WACA,CAAA,cAIR,oBACI,CAAA,uBACA,CAAA,sBAEA,kBACI,CAAA,iBACA,CAAA,qBAGJ,aACI,CAAA,iBACA,CAAA,cACA,CAAA,QACA,CAAA,eAIR,oBACI,CAAA,uBACA,CAAA,gBACA,CAAA,uBAEA,gBACI,CAAA,mBACA,CAAA,uBAGJ,aACI,CAAA,iBACA,CAAA,cACA,CAAA,QACA,CAAA,gBAIR,uBACI,CAAA,oBACA,CAAA,aACA,CAAA,cACA,CAAA,YAEA,CAAA,qBACA,CAAA,6BACA,CAAA,eAGJ,2BACI,CAAA,sBAEA,wBACI,CAAA,qBAKZ,8BACI,CAAA,oBACA,CAAA,8BACA,CAAA,yBACA,CAAA,6BAGJ,wBACI,CAAA,8BAGJ,8CA5fiB,CAAA,gBAggBjB,cACI,CAAA,wBAGJ,oBACI,CAAA,SACA,CAAA,UACA,CAAA,iBACA,CAAA,gBACA,CAAA,sBACA,CAAA,qCACA,CAAA,mCAGJ,SACI,CAAA,oBACA,CAAA,iCAGJ,uBACI,CAAA,wBAGJ,eACI,CAAA,eACA,CAAA,YACA,CAAA,iCAMJ,aACI,CAAA,eAIJ,QACI,CAAA,SACA,CAAA,UACA,CAAA,4BAGJ,aACI,CAAA,QACA,CAAA,SACA,CAAA,UACA,CAAA,gBAGJ,aACI,CAAA,kBACA,CAAA,kBACA,CAAA,8BACA,CAAA,gCACA,CAAA,wBACA,CAAA,eAGJ,iBACI,CAAA,qBAEA,gBACI,CAAA,2BAEA,8BACI,CAAA,WACA,CAAA,YACA,CAAA,aAtkBA,CAAA,QAwkBA,CAAA,SACA,CAAA,gBACA,CAAA,UACA,CAAA,cACA,CAAA,8BAIR,8CA9kBa,CAAA,6BAklBb,2CACI,CAAA,uDACA,CAAA,kBAIR,iBACI,CAAA,wBAEA,wBACI,CAAA,iBAIR,WACI,CAAA,gCAGJ,WACI,CAAA,wBAIJ,qCACI,CAAA,wBACA,CAAA,WACA,CAAA,YACA,CAAA,iBACA,CAAA,WACA,CAAA,UAGJ,qCACI,CAAA,wBACA,CAAA,aAtnBQ,CAAA,YAwnBR,CAAA,SAGJ,wBACI,CAAA,wBACA,CAAA,aACA,CAAA,kBACA,CAAA,YACA,CAAA,cACA,CAAA,aACA,CAAA,aAEA,gBACI,CAAA,mBAEA,wBACI,CAAA,sBAGJ,8CAzoBS,CAAA,qBAspBjB,kBACI,CAAA,iBACA,CAAA,uBACA,CAAA,WACA,CAAA,YACA,CAAA,uEACA,CAAA,+BAEA,CAAA,mBACA,CAAA,4BAGJ,iBACI,CAAA,oBACA,CAAA,WACA,CAAA,YACA,CAAA,gDACA,CAAA,scACA,CAAA,kEAqBJ,mBAEI,CAAA,mCAGJ,UACI,CAAA,WACA,CAAA,sEACA,CAAA,kCAGJ,SACI,CAAA,YACA,CAAA,oBACA,CAAA,gBACA,CAAA,oBACA,CAAA,sEACA,CAAA,0CAGJ,kBACI,CAAA,UACA,CAAA,4BACA,CAAA,kCAOJ,iBACI,CAAA,oBACA,CAAA,WACA,CAAA,YACA,CAAA,gDACA,CAAA,yDACA,CAAA,mEAGJ,mBAEI,CAAA,6BAGJ,UACI,CAAA,WACA,CAAA,qCAGJ,WACI,CAAA,aACA,CAAA,UACA,CAAA,UACA,CAAA,WACA,CAAA,kDACA,CAAA,mDACA,CAAA,2BAGJ,SACI,CAAA,YACA,CAAA,oBACA,CAAA,gBACA,CAAA,ucACA,CAAA,mCAqBJ,kBACI,CAAA,UACA,CAAA,4BACA,CAAA,yBAQJ,iBACI,CAAA,yBACA,CAAA,UACA,CAAA,WACA,CAAA,kBACA,CAAA,WACA,CAAA,gDACA,CAAA,0bACA,CAAA,iCAqBJ,SACI,CAAA,UACA,CAAA,iBACA,CAAA,sCAIJ,UACI,CAAA,WACA,CAAA,qBACA,CAAA,kBACA,CAAA,WACA,CAAA,uBACA,CAAA,sDACA,CAAA,mGAGJ,UAEI,CAAA,WACA,CAAA,gCAGJ,mBACI,CAAA,kDAGJ,oBACI,CAAA,gDACA,CAAA,wEACA,CAAA,iDAGJ,6DACI,CAAA,qCAGJ,cACI,CAAA,iBACA,CAAA,gCAGJ,oBACI,CAAA,SACA,CAAA,iBACA,CAAA,wBACA,CAAA,YAEA,CAAA,kBACA,CAAA,gBACA,CAAA,iBACA\",\"sourcesContent\":[\"$textColor: #dadcdd;\\n$backgroundColor: #262829;\\n$highlightColor: #c3df8544;\\n\\n* {\\n box-sizing: border-box;\\n cursor: default;\\n user-select: none;\\n}\\n\\na {\\n cursor: pointer;\\n color: #c3df85;\\n text-decoration: none;\\n \\n &:hover {\\n color: #d7e6b9;\\n text-decoration: underline;\\n }\\n}\\n\\n.beingDragged {\\n opacity: 0.6;\\n z-index: 1000 !important;\\n}\\n\\nimg {\\n pointer-events: none;\\n}\\n\\nbody {\\n background-color: $backgroundColor;\\n color: $textColor;\\n overflow: hidden;\\n}\\n\\ninput {\\n border: 1px solid #343738;\\n background: #1a1d1f;\\n color: #cad2d4;\\n border-radius: 0.1em;\\n padding: 0.3em 0.8em;\\n outline: none;\\n font-size: 1.2em;\\n margin-right: 0.2em;\\n margin-bottom: 0.2em;\\n}\\n\\n.MenuBar {\\n background-color: lighten($backgroundColor, 10%);\\n box-shadow: 0 0 0.5em #00000077;\\n border-bottom: 1px solid lighten($backgroundColor, 20%);\\n width: 100%;\\n height: 2.5em;\\n position: absolute;\\n z-index: 50;\\n top: 0;\\n left: 0;\\n\\n .Icon {\\n height: 100%;\\n padding: 0.4em 1em;\\n }\\n \\n .Menu {\\n display: inline-block;\\n padding: 0.6em 0.7em;\\n height: 100%;\\n vertical-align: top;\\n \\n &:hover {\\n background-color: $backgroundColor;\\n }\\n }\\n}\\n\\n.MenuContent {\\n display: none;\\n position: absolute;\\n background-color: lighten($backgroundColor, 10%);\\n box-shadow: 0 0 0.5em #00000077;\\n left: 0;\\n top: 2.5em;\\n min-width: 6em;\\n min-height: 0.5em;\\n z-index: 1000;\\n \\n & > .entry {\\n padding: 0.5em 2em;\\n\\n &.submenu:after {\\n content: '›';\\n display: inline-block;\\n position: absolute;\\n right: 0;\\n margin-right: 0.5em;\\n }\\n \\n &:hover {\\n background-color: $backgroundColor;\\n }\\n } \\n\\n & > .entry.disabled {\\n color: darken($textColor, 35%);\\n \\n &:hover {\\n background-color: lighten($backgroundColor, 5%);\\n }\\n }\\n \\n & > .separator {\\n background-color: lighten($backgroundColor, 20%);\\n border: 0.4em solid lighten($backgroundColor, 10%);\\n height: 0.9em;\\n }\\n}\\n\\n\\n.Modal {\\n display: block;\\n position: absolute;\\n background-color: #00000077;\\n left: 0;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n}\\n\\n\\nbutton::-moz-focus-inner {\\n border: 0;\\n}\\n \\nbutton, .button {\\n background-color: darken($backgroundColor, 10%);\\n outline: none;\\n border-radius: 0;\\n border: none;\\n color: $textColor;\\n padding: 0.5em 2em;\\n font-size: 1em;\\n margin-right: 0.2em;\\n margin-bottom: 0.2em;\\n \\n &:focus {\\n outline: none;\\n }\\n &:hover {\\n background-color: darken($backgroundColor, 5%);\\n }\\n &:active {\\n background-color: darken($backgroundColor, 8%);\\n }\\n}\\n\\n.Modal {\\n background-color: #00000077;\\n position: absolute;\\n z-index: 52;\\n left: 0;\\n right: 0;\\n top: 0;\\n bottom: 0;\\n \\n .Dialog {\\n z-index: 53;\\n }\\n}\\n\\n.text {\\n white-space: pre-line;\\n}\\n\\n.Dialog {\\n min-width: 15em;\\n max-width: 80vw;\\n min-height: 5em;\\n max-height: 80vh;\\n}\\n\\n.Dialog, .DockPanel {\\n position: absolute;\\n z-index: 51;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n\\n background-color: lighten($backgroundColor, 10%);\\n box-shadow: 0 0 0.5em #00000077;\\n\\n .title {\\n width: 100%;\\n text-align: center;\\n padding: 0.5em;\\n background-color: lighten($backgroundColor, 20%);\\n border-bottom: 1px solid lighten($backgroundColor, 30%);\\n\\n .closeButton {\\n padding: 0.2em;\\n width: 2em;\\n height: 2em;\\n float: right;\\n margin-top: -0.15em;\\n margin-right: -0.15em;\\n background-color: lighten($backgroundColor, 5%);\\n \\n &:hover {\\n background-color: lighten($backgroundColor, 10%);\\n }\\n }\\n }\\n\\n .content {\\n padding: 0.8em 1.5em;\\n position: absolute;\\n }\\n\\n .content.w3term {\\n height: 100%;\\n }\\n\\n .buttons {\\n padding: 0.8em 1.5em;\\n text-align: center;\\n }\\n}\\n\\n.Dialog .content,\\n.Dialog .Panel.content {\\n position: static;\\n padding: 0.8em 1.5em;\\n}\\n\\n.InputDialog input {\\n width: 100%;\\n}\\n\\n.Label {\\n user-select: text;\\n}\\n\\n.DockContainer {\\n & > * {\\n overflow: hidden;\\n position: absolute;\\n }\\n\\n \\n &.horizontal > * {\\n // border: 1px solid #00ffff;\\n // background-color: #00ffff66;\\n display: inline-block;\\n\\n &.DockSeparator {\\n width: 3px;\\n height: 100%;\\n background-color: darken($backgroundColor, 10%); \\n cursor: ew-resize;\\n }\\n }\\n \\n &.vertical > * {\\n // border: 1px solid #ffff00;\\n // background-color: #ffff0066;\\n display: block;\\n clear: both;\\n \\n &.DockSeparator {\\n width: 100%;\\n height: 3px;\\n background-color: darken($backgroundColor, 10%); \\n cursor: ns-resize;\\n }\\n }\\n \\n & > .DockSeparator:hover {\\n background-color: darken($backgroundColor, 5%);\\n }\\n}\\n\\n.DockPanel {\\n transform: none;\\n max-width: none;\\n max-height: none;\\n background-color: $backgroundColor;\\n .title {\\n text-align: left;\\n padding: 0.1em 0.5em;\\n font-size: 0.9em;\\n background-color: darken($backgroundColor, 5%);\\n border-bottom: 1px solid darken($backgroundColor, 8%);\\n\\n .closeButton {\\n padding: 0;\\n width: 1.6em;\\n height: 1.6em;\\n float: right;\\n margin-top: -0.15em;\\n margin-right: -0.15em;\\n background-color: darken($backgroundColor, 5%);\\n \\n &:hover {\\n background-color: $backgroundColor;\\n }\\n }\\n }\\n\\n .content {\\n width: 100%;\\n height: calc(100% - 1.5em);\\n overflow: auto;\\n }\\n\\n &.resizingHorizontally {\\n cursor: ew-resize;\\n }\\n &.resizingVertically {\\n cursor: ns-resize;\\n }\\n &.resizingHorizontally.resizingVertically {\\n cursor: nwse-resize;\\n }\\n\\n .resizeEW,\\n .resizeNS,\\n .resizeDiag {\\n display: none;\\n }\\n &.floating {\\n .resizeEW {\\n display: block;\\n width: 0.3em;\\n top: 0;\\n bottom: 0;\\n background-color: transparent;\\n cursor: ew-resize;\\n position: absolute;\\n right: 0;\\n }\\n .resizeNS {\\n display: block;\\n width: 100%;\\n height: 0.3em;\\n background-color: transparent;\\n cursor: ns-resize;\\n position: absolute;\\n left: 0;\\n bottom: 0;\\n }\\n .resizeDiag {\\n display: block;\\n width: 0.5em;\\n height: 0.5em;\\n background-color: transparent;\\n cursor: nwse-resize;\\n position: absolute;\\n right: 0;\\n bottom: 0;\\n }\\n }\\n}\\n\\nbody > .DockContainer {\\n position: absolute;\\n z-index: 49;\\n\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n}\\n\\n.dockOverlay {\\n position: fixed;\\n background-color: #33779999;\\n z-index: 999;\\n}\\n\\n.NodeEditor {\\n width: 100%;\\n height: 100%;\\n overflow: hidden !important;\\n padding: 0 !important;\\n\\n &.moving {\\n cursor: grabbing;\\n }\\n\\n &.beingDragged {\\n cursor: grabbing;\\n }\\n\\n svg {\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 0;\\n bottom: 0;\\n width: 100%;\\n height: 100%;\\n\\n pointer-events: none;\\n }\\n \\n .Node {\\n position: absolute;\\n }\\n}\\n\\n.Node {\\n display: inline-block;\\n border-radius: 0.5em;\\n box-shadow: 0 0 0.5em #00000077;\\n \\n background-color: darken($backgroundColor, 5%);\\n white-space: nowrap;\\n \\n .title {\\n border-radius: 0.5em 0.5em 0 0;\\n background-color: lighten($backgroundColor, 5%);\\n }\\n\\n .body {\\n display: flex;\\n justify-content: space-between;\\n }\\n\\n .bullet {\\n display: inline-block;\\n background-color: lighten($backgroundColor, 10%);\\n\\n width: 1.2em;\\n height: 1.2em;\\n border-radius: 1em;\\n border: 0.2em solid transparent;\\n background-clip: padding-box;\\n\\n &:hover {\\n background-color: lighten($backgroundColor, 25%);\\n border: none;\\n }\\n }\\n\\n .inputs {\\n display: inline-block;\\n vertical-align: text-top;\\n \\n .bullet {\\n margin-left: -0.5em;\\n margin-right: 0.5em;\\n }\\n \\n .input {\\n display: block;\\n position: relative;\\n font-size: 0.7em;\\n margin: 0;\\n }\\n }\\n \\n .outputs {\\n display: inline-block;\\n vertical-align: text-top;\\n text-align: right;\\n \\n .bullet {\\n margin-left: 0.5em;\\n margin-right: -0.5em;\\n }\\n \\n .output {\\n display: block;\\n position: relative;\\n font-size: 0.7em;\\n margin: 0;\\n }\\n }\\n \\n .contents {\\n vertical-align: text-top;\\n display: inline-block;\\n min-width: 2em;\\n min-height: 2em;\\n\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n }\\n\\n &.selected {\\n box-shadow: 0 0 0.5em lighten($backgroundColor, 15%);\\n\\n .title {\\n background-color: lighten($backgroundColor, 15%);\\n }\\n }\\n}\\n\\n.TreeViewItem .label {\\n background-color: transparent;\\n display: inline-block;\\n border: 1px solid transparent;\\n -webkit-user-drag: element;\\n}\\n\\n.TreeViewItem.focused > .label {\\n border: 1px solid lighten($backgroundColor, 15%);\\n}\\n\\n.TreeViewItem .label.selected {\\n background-color: $highlightColor;\\n}\\n\\n.TreeViewItem * {\\n cursor: pointer;\\n}\\n\\n.TreeViewItem > .expander {\\n display: inline-block;\\n opacity: 0;\\n width: 0.3em;\\n margin-right: 0.5em;\\n font-weight: bold;\\n transform: rotate(0deg);\\n transition: transform 0.15s ease-in-out;\\n}\\n\\n.TreeViewItem.expandable > .expander {\\n opacity: 1;\\n display: inline-block;\\n}\\n\\n.TreeViewItem.expanded > .expander {\\n transform: rotate(90deg);\\n}\\n\\n.TreeViewItem > .children {\\n margin-left: 1em;\\n overflow: hidden;\\n display: none;\\n // transform: scaleY(0); \\n // transform-origin: top;\\n // transition: transform 0.15s ease-in-out;\\n}\\n\\n.TreeViewItem.expanded > .children {\\n display: block;\\n // transform: scaleY(1);\\n}\\n\\n.Panel.content {\\n margin: 0;\\n padding: 0;\\n width: 100%;\\n}\\n\\n.ListView, .ListView.content {\\n display: table;\\n margin: 0;\\n padding: 0;\\n width: 100%;\\n}\\n\\n.ListView .cell {\\n font-size: 80%;\\n display: table-cell;\\n padding: 0.15em 0.6em;\\n border-left: 0.2em solid $backgroundColor;\\n border-bottom: 0.2em solid $backgroundColor;\\n background-color: darken($backgroundColor, 3%);\\n}\\n\\n.ListView .row {\\n display: table-row;\\n \\n .cell {\\n user-select: text;\\n\\n input {\\n background-color: transparent;\\n border: none;\\n outline: none;\\n color: $textColor;\\n margin: 0;\\n padding: 0;\\n user-select: text;\\n width: auto;\\n display: inline;\\n }\\n }\\n\\n &.selected .cell {\\n background-color: $highlightColor;\\n }\\n\\n .cell.editing {\\n background-color: darken($highlightColor, 50%);\\n box-shadow: inset 0 0 0.1em $highlightColor;\\n }\\n}\\n\\n.ListView .header {\\n display: table-row;\\n\\n .cell {\\n background-color: lighten($backgroundColor, 5%);\\n }\\n}\\n\\n.NodeEditor path {\\n stroke: #999999ff;\\n}\\n\\n.NodeEditor path.notConnectable {\\n stroke: #994444ff;\\n}\\n\\n\\n.NodeEditor .selectRect {\\n background-color: rgba(lighten($backgroundColor, 30%), .3);\\n border: 1px solid lighten($backgroundColor, 30%);\\n width: 300px;\\n height: 300px;\\n position: absolute;\\n z-index: 500;\\n}\\n\\n.Dropdown {\\n background-color: rgba(lighten($backgroundColor, 30%), .3);\\n border: 1px solid lighten($backgroundColor, 20%);\\n color: $textColor;\\n outline: none;\\n}\\n\\n.ListBox {\\n border: 1px solid #343738;\\n background-color: #1a1d1f;\\n color: #cad2d4;\\n border-radius: 0.1em;\\n outline: none;\\n font-size: 0.9em;\\n overflow: auto;\\n\\n & > div {\\n padding: 0.3em 1em;\\n\\n &:hover {\\n background-color: lighten(#1a1d1f, 5%);\\n }\\n\\n &.selected {\\n background-color: $highlightColor;\\n }\\n }\\n}\\n\\n\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n\\n\\n\\n.ColorPicker .handle {\\n border-radius: 100%;\\n position:relative;\\n border: 0.05em solid #222;\\n width: 1.2em;\\n height: 1.2em;\\n box-shadow: 0.03em 0.03em 0.3em #00000044,\\n inset 0 0 0.5em white;\\n transform: translate(-50%, -50%);\\n pointer-events: none;\\n}\\n\\n.PaintStyleColorPicker > .hue {\\n position: relative;\\n display: inline-block;\\n width: 400px;\\n height: 400px;\\n box-shadow: 0.5em 0.5em 1em #00000088;\\n background: linear-gradient(to right,\\n hsl(0, 100%, 50%),\\n hsl(22.5, 100%, 50%),\\n hsl(45, 100%, 50%),\\n hsl(67.5, 100%, 50%),\\n hsl(90, 100%, 50%),\\n hsl(112.5, 100%, 50%),\\n hsl(135, 100%, 50%),\\n hsl(157.5, 100%, 50%),\\n hsl(180, 100%, 50%),\\n hsl(202.5, 100%, 50%),\\n hsl(225, 100%, 50%),\\n hsl(247.5, 100%, 50%),\\n hsl(270, 100%, 50%),\\n hsl(292.5, 100%, 50%),\\n hsl(315, 100%, 50%),\\n hsl(337.5, 100%, 50%),\\n hsl(359, 100%, 50%)\\n );\\n}\\n\\n.PaintStyleColorPicker > .hue *,\\n.PaintStyleColorPicker > .lightness * {\\n pointer-events: none;\\n}\\n\\n.PaintStyleColorPicker .saturation {\\n width: 100%;\\n height: 100%;\\n background: linear-gradient(to bottom, transparent, hsl(0, 0%, 50%));\\n}\\n\\n.PaintStyleColorPicker .lightness {\\n width: 2em;\\n height: 400px;\\n display: inline-block;\\n margin-left: 0.5em;\\n background-color: red;\\n background-image: linear-gradient(to bottom, white, transparent, black);\\n}\\n\\n.PaintStyleColorPicker .lightness > .handle {\\n border-radius: 0.2em;\\n width: 100%;\\n transform: translate(0, -50%);\\n}\\n\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n\\n.GimpStyleColorPicker > .saturation {\\n position: relative;\\n display: inline-block;\\n width: 400px;\\n height: 400px;\\n box-shadow: 0.5em 0.5em 1em #00000088;\\n background: linear-gradient(to bottom, transparent, black);\\n}\\n\\n.GimpStyleColorPicker > .saturation *,\\n.GimpStyleColorPicker > .value * {\\n pointer-events: none;\\n}\\n\\n.GimpStyleColorPicker .value {\\n width: 100%;\\n height: 100%;\\n}\\n\\n.GimpStyleColorPicker .value::before {\\n content: ' ';\\n display: block;\\n float: left;\\n width: 100%;\\n height: 100%;\\n mask: linear-gradient(to right, white, transparent);\\n background: linear-gradient(to bottom, white, black);\\n}\\n\\n.GimpStyleColorPicker .hue {\\n width: 2em;\\n height: 400px;\\n display: inline-block;\\n margin-left: 0.5em;\\n background: linear-gradient(to bottom,\\n hsl(0, 100%, 50%),\\n hsl(22.5, 100%, 50%),\\n hsl(45, 100%, 50%),\\n hsl(67.5, 100%, 50%),\\n hsl(90, 100%, 50%),\\n hsl(112.5, 100%, 50%),\\n hsl(135, 100%, 50%),\\n hsl(157.5, 100%, 50%),\\n hsl(180, 100%, 50%),\\n hsl(202.5, 100%, 50%),\\n hsl(225, 100%, 50%),\\n hsl(247.5, 100%, 50%),\\n hsl(270, 100%, 50%),\\n hsl(292.5, 100%, 50%),\\n hsl(315, 100%, 50%),\\n hsl(337.5, 100%, 50%),\\n hsl(359, 100%, 50%)\\n );\\n}\\n\\n.GimpStyleColorPicker .hue > .handle {\\n border-radius: 0.2em;\\n width: 100%;\\n transform: translate(0, -50%);\\n}\\n\\n\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n\\n.WheelColorPicker > .wheel {\\n position: relative;\\n border: 0.5em solid #090909;\\n width: 25em;\\n height: 25em;\\n border-radius: 100%;\\n padding: 3em;\\n box-shadow: 0.5em 0.5em 1em #00000088;\\n background: conic-gradient(\\n hsl(90, 100%, 50%),\\n hsl(67.5, 100%, 50%),\\n hsl(45, 100%, 50%),\\n hsl(22.5, 100%, 50%),\\n hsl(0, 100%, 50%),\\n hsl(337.5, 100%, 50%),\\n hsl(315, 100%, 50%),\\n hsl(292.5, 100%, 50%),\\n hsl(270, 100%, 50%),\\n hsl(247.5, 100%, 50%),\\n hsl(225, 100%, 50%),\\n hsl(202.5, 100%, 50%),\\n hsl(180, 100%, 50%),\\n hsl(157.5, 100%, 50%),\\n hsl(135, 100%, 50%),\\n hsl(112.5, 100%, 50%),\\n hsl(89, 100%, 50%)\\n );\\n}\\n\\n.WheelColorPicker > .wheel >.handle {\\n width: 3em;\\n height: 3em;\\n position: absolute;\\n}\\n\\n\\n.WheelColorPicker > .wheel > .innerCircle {\\n width: 100%;\\n height: 100%;\\n background-color: #222;\\n border-radius: 100%;\\n padding: 18%;\\n transform: rotate(45deg);\\n box-shadow: inset 0.5em 0.5em 1em #00000088;\\n}\\n\\n.WheelColorPicker > .wheel > .innerCircle .saturation,\\n.WheelColorPicker > .wheel > .innerCircle .lightness {\\n width: 100%;\\n height: 100%;\\n}\\n\\n.WheelColorPicker > .saturation * {\\n pointer-events: none;\\n}\\n\\n.WheelColorPicker > .wheel > .innerCircle .saturation {\\n background-color: red;\\n box-shadow: 0.5em 0.5em 1em #00000088;\\n background-image: linear-gradient(45deg, hsl(0, 0%, 50%), transparent);\\n}\\n\\n.WheelColorPicker > .wheel > .innerCircle .lightness {\\n background: linear-gradient(135deg, white, transparent, black);\\n}\\n\\n.ColorPickerDialog .WheelColorPicker {\\n margin-top: 1em;\\n margin-bottom: 1em;\\n}\\n\\n.ColorPickerDialog .ColorOutput {\\n display: inline-block;\\n width: 3em;\\n padding: .3em .8em;\\n border: 1px solid #343738;\\n\\n height: 2.4em;\\n vertical-align: top;\\n margin-top: 0.05em;\\n margin-right: 0.4em;\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\n\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\nvar stylesInDOM = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n\n return updater;\n}\n\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n\n stylesInDOM.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n\n styleElement.appendChild(document.createTextNode(css));\n }\n}\n\nmodule.exports = styleTagTransform;","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n\n content += cssWithMappingToString(item);\n\n if (needLayer) {\n content += \"}\";\n }\n\n if (item[2]) {\n content += \"}\";\n }\n\n if (item[4]) {\n content += \"}\";\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n\n\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\n\nmodule.exports = insertStyleElement;","\"use strict\";\n\nvar memo = {};\n/* istanbul ignore next */\n\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n}\n/* istanbul ignore next */\n\n\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n}\n\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n\n var needLayer = typeof obj.layer !== \"undefined\";\n\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n\n css += obj.css;\n\n if (needLayer) {\n css += \"}\";\n }\n\n if (obj.media) {\n css += \"}\";\n }\n\n if (obj.supports) {\n css += \"}\";\n }\n\n var sourceMap = obj.sourceMap;\n\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n options.styleTagTransform(css, styleElement, options.options);\n}\n\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n\n styleElement.parentNode.removeChild(styleElement);\n}\n/* istanbul ignore next */\n\n\nfunction domAPI(options) {\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\n\nmodule.exports = domAPI;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nc = undefined;","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./style.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./style.scss\";\n export default content && content.locals ? content.locals : undefined;\n","\nconst RAD_TO_DEGREES = 180.0 / Math.PI;\nconst DEGREES_TO_RAD = Math.PI / 180\n\nclass Vector2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n getAngleToOtherInRadians(other: Vector2) {\n return Math.acos(Math.max(Math.min(((this.getScalarProduct(other)) / (this.getLength() * other.getLength())), 1), -1))\n }\n\n getAngleToOtherInDegrees(other: Vector2) {\n return this.getAngleToOtherInRadians(other) * RAD_TO_DEGREES;\n }\n\n getRotatedInRadians(radians: number) {\n let cos = Math.cos(radians)\n let sin = Math.sin(radians)\n\n return new Vector2(this.x * cos - this.y * sin,\n this.x * sin + this.y * cos);\n }\n\n getRotatedInDegrees(degrees: number) {\n return this.getRotatedInRadians(degrees * DEGREES_TO_RAD);\n }\n\n rotateInRadians(radians: number) {\n let cos = Math.cos(radians)\n let sin = Math.sin(radians)\n\n let x = this.x * cos - this.y * sin;\n let y = this.x * sin + this.y * cos;\n\n this.x = x;\n this.y = y;\n }\n\n rotateInDegrees(degrees: number) {\n this.rotateInRadians(degrees * DEGREES_TO_RAD);\n }\n\n getScalarProduct(other: Vector2) {\n return (this.x * other.x) + (this.y * other.y);\n }\n\n scale(factor: number) {\n this.x *= factor;\n this.y *= factor;\n }\n\n getScaled(factor: number) {\n return new Vector2(this.x * factor, this.y * factor);\n }\n\n getLength() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n normalize() {\n let length = this.getLength();\n this.x = this.x / length;\n this.y = this.y / length;\n }\n\n getNormalized() {\n let length = this.getLength();\n return new Vector2(this.x / length, this.y / length);\n }\n\n setLength(length: number) {\n this.normalize();\n this.scale(length);\n }\n\n getWithLength(length: number) {\n let result = this.getNormalized();\n result.scale(length);\n return result;\n }\n}\n\nfunction rectContains(rect: DOMRect, x: number, y: number) {\n return x >= rect.left && x <= rect.right\n && y >= rect.top && y <= rect.bottom;\n}\n\nexport { Vector2, rectContains, RAD_TO_DEGREES, DEGREES_TO_RAD }\n","function _betterModulo(number: number, modulus: number) {\n return ((number % modulus) + modulus) % modulus;\n}\n\nenum ColorModificationMode {\n Percentage,\n FixedAmount\n}\n\nconst _HEX_COLOR_REGEX = new RegExp(/^#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/);\n\nclass Color {\n private _r: number;\n private _g: number;\n private _b: number;\n private _hueInfo?: number;\n\n constructor(r?: number, g?: number, b?: number) {\n this.setRgb(r || 0, g || 0, b || 0);\n }\n\n static fromRgb(r: number, g: number, b: number) {\n return new Color(r, g, b);\n }\n\n static fromHsl(h: number, s: number, l: number) {\n let rgb = Color._hslToRgb(h, s, l);\n let color = Color.fromRgbObject(rgb);\n color._hueInfo = h;\n return color;\n }\n\n static fromHsv(h: number, s: number, v: number) {\n let rgb = Color._hsvToRgb(h, s, v);\n let color = Color.fromRgbObject(rgb);\n color._hueInfo = h;\n return color;\n }\n\n static fromHex(hex: string) {\n let rgb = Color._hexToRgb(hex);\n if(!rgb)\n return null;\n return Color.fromRgbObject(rgb);\n }\n\n private static _hexToRgb(hex: string) {\n let match = hex.match(_HEX_COLOR_REGEX);\n if(!match)\n return null;\n\n let r = parseInt(match[1], 16);\n let g = parseInt(match[2], 16);\n let b = parseInt(match[3], 16);\n\n return {\n r: r,\n g: g,\n b: b\n }\n }\n\n private static _hslToRgb(h: number, s: number, l: number) {\n h = _betterModulo(h, 360);\n\n let c = (1 - Math.abs(2 * l - 1)) * s;\n let x = c * (1 - Math.abs(_betterModulo((h / 60), 2) - 1));\n let m = l - (c / 2);\n\n let r, g, b;\n if(h >= 0 && h < 60) {\n r = c;\n g = x;\n b = 0;\n }\n else if(h >= 60 && h < 120) {\n r = x;\n g = c;\n b = 0;\n }\n else if(h >= 120 && h < 180) {\n r = 0;\n g = c;\n b = x;\n }\n else if(h >= 180 && h < 240) {\n r = 0;\n g = x;\n b = c;\n }\n else if(h >= 240 && h < 300) {\n r = x;\n g = 0;\n b = c;\n }\n else if(h >= 300 && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n else {\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n }\n }\n\n private static _hsvToRgb(h: number, s: number, v: number) {\n h = _betterModulo(h, 360);\n\n let c = v * s;\n let x = c * (1 - Math.abs(_betterModulo((h / 60), 2) - 1));\n let m = v - c;\n\n let r, g, b;\n if(h >= 0 && h < 60) {\n r = c;\n g = x;\n b = 0;\n }\n else if(h >= 60 && h < 120) {\n r = x;\n g = c;\n b = 0;\n }\n else if(h >= 120 && h < 180) {\n r = 0;\n g = c;\n b = x;\n }\n else if(h >= 180 && h < 240) {\n r = 0;\n g = x;\n b = c;\n }\n else if(h >= 240 && h < 300) {\n r = x;\n g = 0;\n b = c;\n }\n else if(h >= 300 && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n }\n }\n\n static fromRgbObject(rgbObject: { r: number, g: number, b: number }) {\n return Color.fromRgb(rgbObject.r, rgbObject.g, rgbObject.b);\n }\n \n static fromHslObject(hslObject: { h: number, s: number, l: number }) {\n return Color.fromHsl(hslObject.h, hslObject.s, hslObject.l);\n }\n \n static fromHsvObject(hsvObject: { h: number, s: number, v: number }) {\n return Color.fromHsv(hsvObject.h, hsvObject.s, hsvObject.v);\n }\n\n setRgb(r: number, g: number, b: number) {\n this._r = Math.max(Math.min(Math.round(r), 255), 0);\n this._g = Math.max(Math.min(Math.round(g), 255), 0);\n this._b = Math.max(Math.min(Math.round(b), 255), 0);\n }\n\n setHsl(h: number, s: number, l: number) {\n let rgb = Color._hslToRgb(h, s, l);\n this._r = rgb.r;\n this._g = rgb.g;\n this._b = rgb.b;\n this._hueInfo = h;\n }\n\n setHsv(h: number, s: number, v: number) {\n let rgb = Color._hsvToRgb(h, s, v);\n this._r = rgb.r;\n this._g = rgb.g;\n this._b = rgb.b;\n this._hueInfo = h;\n }\n\n setHex(hex: string) {\n let rgb = Color._hexToRgb(hex);\n this._r = rgb.r;\n this._g = rgb.g;\n this._b = rgb.b;\n }\n\n setRgbObject(rgbObject: {r: number, g: number, b: number}) {\n this.setRgb(rgbObject.r, rgbObject.g, rgbObject.b);\n }\n\n setHslObject(hslObject: {h: number, s: number, l: number}) {\n this.setHsl(hslObject.h, hslObject.s, hslObject.l);\n }\n\n setHsvObject(hsvObject: {h: number, s: number, v: number}) {\n this.setHsv(hsvObject.h, hsvObject.s, hsvObject.v);\n }\n\n getHsl() {\n let r = this._r / 255;\n let g = this._g / 255;\n let b = this._b / 255;\n let cMax = Math.max(r, g, b);\n let cMin = Math.min(r, g, b);\n let delta = cMax - cMin;\n\n let hue;\n if(delta == 0)\n hue = 0;\n else if(cMax == r) {\n hue = 60 * (_betterModulo(((g - b) / delta), 6));\n }\n else if(cMax == g) {\n hue = 60 * (((b - r) / delta) + 2);\n }\n else if(cMax == b) {\n hue = 60 * (((r - g) / delta) + 4);\n }\n\n let lightness = (cMax + cMin) / 2\n\n let saturation = delta == 0\n ? 0\n : delta / (1 - Math.abs(2 * lightness - 1));\n return {\n h: (hue == 0 && this._hueInfo) ? this._hueInfo :hue,\n s: saturation,\n l: lightness\n };\n }\n\n getHsv() {\n let r = this._r / 255;\n let g = this._g / 255;\n let b = this._b / 255;\n let cMax = Math.max(r, g, b);\n let cMin = Math.min(r, g, b);\n let delta = cMax - cMin;\n\n let hue;\n if(delta == 0)\n hue = 0;\n else if(cMax == r)\n hue = 60 * (_betterModulo(((g - b) / delta), 6));\n else if(cMax == g)\n hue = 60 * (((b - r) / delta) + 2);\n else if(cMax == b)\n hue = 60 * (((r - g) / delta) + 4);\n\n let saturation = delta == 0\n ? 0\n : delta / cMax;\n\n let value = cMax;\n\n return {\n h: (hue == 0 && this._hueInfo) ? this._hueInfo :hue,\n s: saturation,\n v: value\n };\n }\n\n getRgb() {\n return {\n r: this._r,\n g: this._g,\n b: this._b\n }\n }\n\n getHex() {\n let r = this._r.toString(16).padStart(2, \"0\");\n let g = this._g.toString(16).padStart(2, \"0\");\n let b = this._b.toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`\n }\n\n lighten(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.l = Math.max(0, Math.min(hsl.l + amount, 1))\n else\n hsl.l = Math.max(0, Math.min(hsl.l * (amount + 1), 1))\n this.setHslObject(hsl);\n }\n\n darken(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.l = Math.max(0, Math.min(hsl.l - amount, 1))\n else\n hsl.l = Math.max(0, Math.min(hsl.l * (1 - amount), 1))\n this.setHslObject(hsl);\n }\n\n saturate(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.s = Math.max(0, Math.min(hsl.s + amount, 1))\n else\n hsl.s = Math.max(0, Math.min(hsl.s * (amount + 1), 1))\n this.setHslObject(hsl);\n }\n\n desaturate(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.s = Math.max(0, Math.min(hsl.s + amount, 1))\n else\n hsl.s = Math.max(0, Math.min(hsl.s * (1 - amount), 1))\n this.setHslObject(hsl);\n }\n\n setSaturation(saturation: number) {\n saturation = Math.min(Math.max(saturation, 0), 1);\n let hsl = this.getHsl();\n hsl.s = saturation;\n this.setHslObject(hsl);\n }\n\n rotateHue(degrees: number) {\n let hsl = this.getHsl();\n hsl.h = _betterModulo(hsl.h + degrees, 360);\n this.setHslObject(hsl);\n }\n\n invert() {\n this._r = 255 - this._r;\n this._g = 255 - this._g;\n this._b = 255 - this._b;\n if(this._hueInfo)\n this._hueInfo = _betterModulo(this._hueInfo + 180, 360);\n }\n\n getInverted() {\n return Color.fromRgb(255 - this._r,\n 255 - this._g,\n 255 - this._b);\n }\n\n getComplement() {\n let output = Color.fromRgb(this._r,\n this._g,\n this._b);\n output.rotateHue(180);\n return output;\n }\n\n getBlended(other: Color, alpha: number) {\n alpha = Math.max(Math.min(alpha, 1), 0);\n let beta = 1 - alpha;\n return Color.fromRgb(Math.round(this._r * beta + other._r * alpha),\n Math.round(this._g * beta + other._g * alpha),\n Math.round(this._b * beta + other._b * alpha));\n }\n}\n\nexport { Color, ColorModificationMode }\n","import { DragInfo } from \"./dragAndDrop\"\n\ninterface IDraggable {\n element: HTMLElement;\n onDragStart(mouseEvt: MouseEvent | TouchEvent) : boolean;\n onDragEnd(mouseEvt: MouseEvent | TouchEvent) : void;\n onDragging(dragInfo: DragInfo) : void;\n}\n\nclass Widget implements IDraggable {\n element: HTMLElement;\n parentWidget?: Widget;\n\n constructor(element?: HTMLElement) {\n this.element = element || document.createElement(\"div\");\n this.element.classList.add(\"Widget\");\n this.parentWidget = null;\n }\n\n onDragStart(evt: MouseEvent | TouchEvent) {\n this.element.classList.add(\"beingDragged\");\n return true;\n }\n\n onDragEnd(evt: MouseEvent | TouchEvent) {\n this.element.classList.remove(\"beingDragged\");\n }\n\n onDragging(dragInfo: DragInfo) {\n this.element.style.left = dragInfo.posWithOffsetToParentConsidered.x + \"px\";\n this.element.style.top = dragInfo.posWithOffsetToParentConsidered.y + \"px\";\n }\n\n onAttached() {\n }\n\n isAttached() : boolean {\n return document.body.contains(this.element);\n }\n\n onResize() {\n }\n}\n\n\nexport { Widget, IDraggable }\n","import { Vector2 } from './Math';\nimport { IDraggable } from './Widget';\n\nclass DragAndDropData\n{\n element?: HTMLElement;\n draggable?: IDraggable;\n offsetX: number;\n offsetY: number;\n dragStartX: number;\n dragStartY: number;\n prevTouchX: number;\n prevTouchY: number;\n\n constructor(element: HTMLElement,\n offsetX: number,\n offsetY: number,\n dragStartX: number,\n dragStartY: number,\n prevTouchX: number,\n prevTouchY: number) {\n this.element = element;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.dragStartY = dragStartY;\n this.dragStartX = dragStartX;\n }\n}\n\ntype DragInfo = {\n mouseEvent?: MouseEvent,\n touchEvent?: TouchEvent,\n rect: DOMRect,\n posWithOffsetToParentConsidered: Vector2,\n posRelativeToElement: Vector2,\n posRelativeToDragStart: Vector2,\n movement: Vector2\n}\n\nlet _dragAndDrop = new DragAndDropData(null, 0, 0, 0, 0, 0, 0);\n\nlet currentMousePos = {\n x: -1,\n y: -1\n}\n\nexport function getClientPosFromEvent(evt: MouseEvent | TouchEvent) {\n if(evt.type.startsWith(\"touch\")) {\n const touch = (evt as TouchEvent).touches[0];\n\n return {\n x: touch.clientX,\n y: touch.clientY\n };\n }\n else {\n let mouseEvt = (evt as MouseEvent);\n \n return {\n x: mouseEvt.clientX,\n y: mouseEvt.clientY\n };\n }\n}\n\nfunction getDragStart(draggable: IDraggable, dragStartMethod?: (draggable: IDraggable, evt: MouseEvent | TouchEvent) => boolean) {\n return (evt: MouseEvent | TouchEvent) => {\n var clientPos = getClientPosFromEvent(evt);\n\n if(dragStartMethod && !dragStartMethod(draggable, evt))\n return;\n if(!dragStartMethod && draggable.onDragStart && !draggable.onDragStart(evt))\n return;\n\n var box = draggable.element.getBoundingClientRect();\n _dragAndDrop.offsetX = clientPos.x - box.left;\n _dragAndDrop.offsetY = clientPos.y - box.top;\n _dragAndDrop.dragStartX = clientPos.x;\n _dragAndDrop.dragStartY = clientPos.y;\n _dragAndDrop.draggable = draggable;\n _dragAndDrop.element = draggable.element;\n _dragAndDrop.prevTouchX = clientPos.x;\n _dragAndDrop.prevTouchY = clientPos.y;\n evt.stopPropagation();\n\n onDragging(evt);\n };\n}\n\nfunction onDragEnd(evt: MouseEvent | TouchEvent) {\n if(_dragAndDrop && _dragAndDrop.draggable) {\n _dragAndDrop.draggable.onDragEnd(evt);\n _dragAndDrop.draggable = null;\n }\n}\n\nfunction onDragging(evt: MouseEvent | TouchEvent) {\n var clientPos = getClientPosFromEvent(evt);\n if(_dragAndDrop.draggable != undefined)\n {\n let rect = _dragAndDrop.element.getBoundingClientRect();\n const mouseEvent = evt.type.startsWith(\"mouse\") ? evt as MouseEvent: null;\n const touchEvent = evt.type.startsWith(\"touch\") ? evt as TouchEvent: null;\n let dragInfo: DragInfo = {\n mouseEvent: mouseEvent,\n touchEvent: touchEvent,\n rect: rect,\n posWithOffsetToParentConsidered: new Vector2(clientPos.x - _dragAndDrop.offsetX,\n clientPos.y - _dragAndDrop.offsetY),\n posRelativeToElement: new Vector2(clientPos.x - rect.x,\n clientPos.y - rect.y),\n posRelativeToDragStart: new Vector2(clientPos.x - _dragAndDrop.dragStartX,\n clientPos.y - _dragAndDrop.dragStartY),\n movement: mouseEvent != null ? new Vector2(mouseEvent.movementX, mouseEvent.movementY) : new Vector2(clientPos.x - _dragAndDrop.prevTouchX, clientPos.y - _dragAndDrop.prevTouchY)\n };\n _dragAndDrop.draggable.onDragging(dragInfo);\n _dragAndDrop.prevTouchX = clientPos.x;\n _dragAndDrop.prevTouchY = clientPos.y;\n }\n\n currentMousePos.x = clientPos.x;\n currentMousePos.y = clientPos.y;\n}\n\nclass Draggable implements IDraggable {\n element: HTMLElement;\n onDragStart: (mouseEvt: MouseEvent) => boolean;\n onDragging: (ragInfo: DragInfo) => void;\n onDragEnd: (mouseEvt: MouseEvent) => void;\n\n constructor(element: HTMLElement, \n onDragStart: (mouseEvt: MouseEvent) => boolean,\n onDragging: (dragInfo: DragInfo) => void,\n onDragEnd: (mouseEvt: MouseEvent) => void)\n {\n this.element = element;\n this.onDragStart = onDragStart;\n this.onDragging = onDragging;\n this.onDragEnd = onDragEnd;\n }\n}\n\nwindow.addEventListener(\"mouseup\", onDragEnd, true);\nwindow.addEventListener(\"touchend\", onDragEnd, true);\nwindow.addEventListener(\"mousemove\", onDragging, true);\nwindow.addEventListener(\"touchmove\", onDragging, true);\n\nexport { getDragStart, currentMousePos, Draggable, DragInfo }\n","import { Widget } from './Widget';\n\nclass Panel extends Widget {\n children: Widget[];\n\n constructor() {\n super();\n this.element.classList.add(\"Panel\");\n this.children = [];\n }\n\n prependChild(child: Widget) {\n child.parentWidget = this;\n this.element.prepend(child.element);\n this.children.unshift(child);\n if(this.isAttached()) {\n child.onAttached();\n }\n }\n\n appendChild(child: Widget) {\n child.parentWidget = this;\n this.element.appendChild(child.element);\n this.children.push(child);\n if(this.isAttached()) {\n child.onAttached();\n }\n }\n\n removeChild(child: Widget) {\n child.parentWidget = null;\n this.element.removeChild(child.element);\n\n let childIndex = this.children.indexOf(child);\n if(childIndex >= 0)\n this.children.splice(childIndex, 1);\n }\n\n onAttached() {\n if(this.isAttached()) {\n for(let child of this.children)\n child.onAttached();\n }\n }\n\n onResize() {\n for(let child of this.children) {\n child.onResize();\n }\n }\n}\n\nexport { Panel }","import { Panel } from './Panel';\n\nconst ROOT = new Panel();\nROOT.element = document.body;\n\nexport { ROOT }","import { Widget, IDraggable } from './Widget';\nimport { rectContains } from './Math';\nimport { DragInfo, getDragStart } from './dragAndDrop'\n\nenum DockDirection {\n Left = 1,\n Right = 2,\n Top = 3,\n Bottom = 4,\n Inside = 5,\n Float = 6\n}\n\nenum Orientation {\n Horizontal = 1,\n Vertical = 2\n}\n\nlet invertOrientation = (orientation: Orientation) => orientation == Orientation.Horizontal\n ? Orientation.Vertical\n : Orientation.Horizontal;\n\nlet orientationFromDirection = (dockDirection: DockDirection) => dockDirection == DockDirection.Top || dockDirection == DockDirection.Bottom\n ? Orientation.Vertical\n : Orientation.Horizontal;\n\nclass DockingStructure {\n orientation: Orientation;\n dockPercentage: number;\n children?: DockingStructure[];\n identifier?: string;\n\n static fromDockPanel(dockPanel: DockPanel) : DockingStructure {\n let structure = new DockingStructure();\n structure.dockPercentage = dockPanel._dockPercentage,\n structure.identifier = dockPanel.identifier;\n return structure;\n }\n\n static fromDockContainer(dockContainer: DockContainer) : DockingStructure {\n let structure = new DockingStructure();\n structure.orientation = dockContainer.orientation;\n structure.dockPercentage = dockContainer._dockPercentage;\n structure.children = dockContainer.children.map(child => (child instanceof DockContainer)\n ? DockingStructure.fromDockContainer(child)\n : DockingStructure.fromDockPanel(child as DockPanel))\n return structure;\n }\n}\n\nlet _dockContainers: DockContainer[] = [];\nlet _floatingPanels: DockPanel[] = [];\n\nfunction findDockPanelForPoint(x: number, y: number) : DockPanel {\n for(let dockContainer of _dockContainers) {\n if(!dockContainer.isAttached())\n continue;\n\n let dockPanel = dockContainer.getDockPanelAtPoint(x, y);\n if(dockPanel != null) {\n return dockPanel;\n }\n }\n return null;\n}\n\nclass DockSeparator extends Widget {\n prev: Dockable;\n next: Dockable;\n\n constructor(prev: Dockable, next: Dockable, parent: DockContainer) {\n super();\n this.element.classList.add(\"DockSeparator\");\n this.element.addEventListener(\"mousedown\", getDragStart(this));\n\n this.prev = prev;\n this.next = next;\n this.parentWidget = parent;\n }\n\n onDragStart(mouseEvt: MouseEvent) {\n // don't call super -> i.e. don't set 'beingDragged' class\n return true;\n }\n\n onDragging(dragInfo: DragInfo) {\n let parentOrientation = (this.parentWidget as DockContainer).orientation;\n let diff = parentOrientation == Orientation.Horizontal ? dragInfo.mouseEvent.movementX : dragInfo.mouseEvent.movementY;\n\n let prevSize = parentOrientation == Orientation.Horizontal ? this.prev.element.getBoundingClientRect().width : this.prev.element.getBoundingClientRect().height;\n let nextSize = parentOrientation == Orientation.Horizontal ? this.next.element.getBoundingClientRect().width : this.next.element.getBoundingClientRect().height;\n\n let newPrevSize = prevSize + diff;\n let newNextSize = nextSize - diff;\n\n const minSizeLimit = 80;\n if(newPrevSize < minSizeLimit || newNextSize < minSizeLimit) {\n return;\n }\n\n this.prev._dockPercentage *= (newPrevSize / prevSize);\n this.next._dockPercentage *= (newNextSize / nextSize);\n\n (this.parentWidget as DockContainer)._layoutChildren();\n }\n\n onDragEnd(mouseEvt: MouseEvent) {\n // don't call super -> i.e. don't reset 'beingDragged' class\n }\n}\n\nabstract class Dockable extends Widget {\n _dockPercentage: number = -1;\n identifier: string | null;\n separatorBefore?: DockSeparator = null;\n separatorAfter?: DockSeparator = null;\n}\n\nclass DockContainer extends Dockable {\n children: Dockable[];\n orientation: Orientation;\n\n constructor() {\n super();\n this.element.className = \"DockContainer\";\n this._setOrientation(Orientation.Horizontal);\n this.children = [];\n }\n\n onAttached() {\n if(this.isAttached())\n _dockContainers.push(this);\n this.children.forEach(child => {\n child.onAttached();\n });\n }\n\n getFloatingPanels() {\n return _floatingPanels.map(panel => ({\n identifier: panel.identifier,\n width: parseInt(panel.element.style.width),\n height: parseInt(panel.element.style.height),\n x: parseInt(panel.element.style.left),\n y: parseInt(panel.element.style.top)\n }));\n }\n\n getDockPanelAtPoint(x: number, y: number) : DockPanel {\n if(!rectContains(this.element.getBoundingClientRect(), x, y))\n return null;\n\n for(let child of this.children) {\n if(child instanceof DockPanel && rectContains(child.element.getBoundingClientRect(), x, y)) {\n return child;\n }\n else if(child instanceof DockContainer) {\n let childAffected = child.getDockPanelAtPoint(x, y);\n if(childAffected != null)\n return childAffected;\n }\n }\n return null;\n }\n\n getDockingStructure() : DockingStructure {\n return DockingStructure.fromDockContainer(this);\n }\n\n setChildPercentages(percentages: number[]) {\n if(percentages.length != this.children.length)\n throw \"This container has \" + this.children.length\n + \" child elements, but \" + percentages.length\n + \" percentages were given!\";\n\n for(let i = 0; i < percentages.length; i++) {\n this.children[i]._dockPercentage = percentages[i];\n }\n this._layoutChildren();\n }\n\n _dockRelative(child: Dockable, relativeTo: Dockable, insertBefore: boolean, percentage: number) {\n percentage = percentage || 0.5;\n if(!(child instanceof Dockable)) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'child' must be a Dockable object\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n if(!(relativeTo instanceof Dockable)) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeTo' must be a Dockable object\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n let childIndex = this.children.indexOf(relativeTo);\n let prevToSeparator = insertBefore ? child : relativeTo;\n let nextToSeparator = insertBefore ? relativeTo : child;\n let separator = new DockSeparator(prevToSeparator, nextToSeparator, this);\n nextToSeparator.separatorBefore = separator;\n prevToSeparator.separatorAfter = separator;\n\n child._dockPercentage = relativeTo._dockPercentage * percentage;\n relativeTo._dockPercentage = relativeTo._dockPercentage * (1 - percentage);\n\n if(childIndex >= 0) {\n if(insertBefore) {\n this.children.splice(childIndex, 0, child);\n this.element.insertBefore(child.element, relativeTo.element);\n this.element.insertBefore(separator.element, relativeTo.element);\n }\n else {\n this.children.splice(childIndex + 1, 0, child);\n let next = relativeTo.element.nextSibling;\n if(next){\n this.element.insertBefore(separator.element, next);\n this.element.insertBefore(child.element, next);\n }\n else {\n this.element.appendChild(separator.element);\n this.element.appendChild(child.element);\n }\n }\n }\n else {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeTo' must be a child of a DockContainer\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n child.parentWidget = this;\n child.element.classList.remove(\"floating\");\n child.onAttached();\n this.onResize();\n }\n\n _dock(child: Dockable, insertBefore: boolean, percentage?: number) {\n percentage = percentage || (this.children.length > 0 ? 0.5 : 1);\n\n if(insertBefore) {\n if(this.children.length > 0) {\n let neighbor = this.children[0];\n let separator = new DockSeparator(child, neighbor, this);\n neighbor.separatorBefore = separator;\n child.separatorAfter = separator;\n this.element.prepend(separator.element);\n }\n\n child._dockPercentage = percentage;\n this.children.forEach(c => { c._dockPercentage *= (1 - percentage) });\n\n this.children.unshift(child);\n this.element.prepend(child.element);\n }\n else {\n if(this.children.length > 0) {\n let neighbor = this.children[this.children.length - 1];\n let separator = new DockSeparator(neighbor, child, this);\n neighbor.separatorAfter = separator;\n child.separatorBefore = separator;\n this.element.appendChild(separator.element);\n }\n\n child._dockPercentage = percentage;\n this.children.forEach(c => { c._dockPercentage *= (1 - percentage) });\n\n this.children.push(child);\n this.element.appendChild(child.element);\n }\n child.parentWidget = this;\n child.element.classList.remove(\"floating\");\n child.onAttached();\n this.onResize();\n }\n\n _setOrientation(orientation: Orientation) {\n if(this.orientation == Orientation.Horizontal) {\n this.element.classList.remove(\"horizontal\");\n }\n else {\n this.element.classList.remove(\"vertical\");\n }\n if(orientation == Orientation.Horizontal) {\n this.element.classList.add(\"horizontal\");\n }\n else {\n this.element.classList.add(\"vertical\");\n }\n this.orientation = orientation;\n }\n\n _wrapChildren() {\n let newContainer = new DockContainer();\n newContainer._setOrientation(this.orientation);\n\n // copy percentages, since they are changed while the child collection is updated\n let childPercentages = this.children.map(existingChild => existingChild._dockPercentage);\n childPercentages[0] = 1;\n let children = this.children.slice();\n\n let idx = 0;\n children.forEach(existingChild => {\n this.undock(existingChild);\n newContainer.dock(existingChild, newContainer.orientation == Orientation.Horizontal\n ? DockDirection.Right\n : DockDirection.Bottom,\n childPercentages[idx]);\n idx++;\n });\n\n this._setOrientation(invertOrientation(this.orientation));\n this.children = [];\n this.dock(newContainer, this.orientation == Orientation.Horizontal\n ? DockDirection.Left\n : DockDirection.Top);\n }\n\n _subdivide(relativeTo: Dockable, dockDirection: DockDirection) : DockContainer {\n let newContainer = new DockContainer();\n newContainer._setOrientation(orientationFromDirection(dockDirection));\n\n let relativeIndex = this.children.indexOf(relativeTo);\n if(relativeIndex < 0) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeTo' must be inside this DockContainer\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n newContainer._dockPercentage = relativeTo._dockPercentage;\n relativeTo._dockPercentage = 1;\n \n // get the separators here and update them (otherwise, they sill point to the old neighbor that has been wrapped now)\n if(relativeTo.separatorBefore)\n {\n relativeTo.separatorBefore.next = newContainer;\n relativeTo.separatorBefore = null;\n }\n if(relativeTo.separatorAfter)\n {\n relativeTo.separatorAfter.prev = newContainer;\n relativeTo.separatorAfter = null;\n }\n\n this.children.splice(relativeIndex, 1, newContainer);\n this.element.insertBefore(newContainer.element, relativeTo.element);\n this.element.removeChild(relativeTo.element)\n newContainer.parentWidget = this;\n newContainer.dock(relativeTo, dockDirection);\n \n return newContainer;\n }\n\n dockRelativeTo(child: Dockable, relativeTo: Dockable, dockDirection: DockDirection, percentage?: number) {\n if(percentage == undefined || percentage == null)\n percentage = 0.5;\n\n let targetOrientation = orientationFromDirection(dockDirection);\n let dockTarget:DockContainer = this;\n if(this.orientation != targetOrientation) {\n dockTarget = this._subdivide(relativeTo, dockDirection)\n }\n\n if(dockDirection == DockDirection.Inside)\n console.warn(\"Tabbed docks are not implemented yet!\");\n else if(dockDirection == DockDirection.Float) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'dockDirection' must not be 'Float'. Use 'undock' method to make a child float.\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n\n dockTarget._dockRelative(child, relativeTo, dockDirection == DockDirection.Left || dockDirection == DockDirection.Top, percentage);\n this._layoutChildren();\n return child;\n }\n\n dock(child: Dockable, dockDirection: DockDirection, percentage?: number) {\n let targetOrientation = orientationFromDirection(dockDirection);\n\n if(this.children.length <= 1) {\n this._setOrientation(targetOrientation);\n }\n\n if(this.orientation != targetOrientation) {\n this._wrapChildren();\n }\n\n if(dockDirection == DockDirection.Inside)\n console.warn(\"Tabbed docks are not implemented yet!\");\n else if(dockDirection == DockDirection.Float) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'dockDirection' must not be 'Float'. Use 'undock' method to make a child float.\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n\n this._dock(child, dockDirection == DockDirection.Left || dockDirection == DockDirection.Top, percentage);\n this._layoutChildren();\n return child;\n }\n\n undock(child: Dockable) {\n let childIndex = this.children.indexOf(child);\n if(childIndex < 0) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'child' must be inside a DockContainer in order to be undocked.\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n if(childIndex > 0) {\n this.children[childIndex - 1]._dockPercentage += child._dockPercentage;\n }\n else if(childIndex + 1 < this.children.length) {\n this.children[childIndex + 1]._dockPercentage += child._dockPercentage;\n }\n this.children.splice(childIndex, 1); // remove from children list\n let before = child.element.previousElementSibling;\n let after = child.element.nextElementSibling;\n\n if(before != null && before.classList.contains(\"DockSeparator\")) {\n this.element.removeChild(before);\n\n if(child.separatorBefore)\n child.separatorBefore.prev.separatorAfter = null;\n }\n else if(after != null && after.classList.contains(\"DockSeparator\")) {\n this.element.removeChild(after);\n\n if(child.separatorAfter)\n child.separatorAfter.next.separatorBefore = null;\n }\n this.element.removeChild(child.element);\n\n if(this.parentWidget != null && (this.parentWidget instanceof DockContainer) && this.children.length == 0) {\n this.parentWidget.undock(this);\n // remove from _dockContainers\n let index = _dockContainers.indexOf(this);\n if(index >= 0) {\n _dockContainers.splice(index, 1);\n }\n }\n else {\n this._layoutChildren();\n }\n\n child.parentWidget = null;\n\n if(child instanceof DockPanel) {\n child.element.classList.add(\"floating\");\n \n let indexInFloatings = _floatingPanels.indexOf(child as DockPanel);\n if(indexInFloatings < 0)\n _floatingPanels.push(child as DockPanel);\n }\n\n return child;\n }\n\n _layoutChildren(width?: number, height?: number) {\n const separatorWidth = 3;\n let rect = this.element.getBoundingClientRect();\n let x = 0;\n let y = 0;\n if(width == undefined)\n width = rect.width;\n if(height == undefined)\n height = rect.height;\n\n let separators = Array.from(this.element.children).filter(element => element.classList.contains(\"DockSeparator\") && element instanceof HTMLElement) as HTMLElement[];\n let separatorIndex = 0;\n\n if(width == 0 || width == 0)\n return;\n\n if(this.orientation == Orientation.Horizontal) {\n this.children.forEach(child => {\n let childWidth = Math.round((width - (separators.length * separatorWidth)) * child._dockPercentage);\n\n child.element.style.left = x + \"px\";\n child.element.style.top = y + \"px\";\n child.element.style.width = childWidth + \"px\";\n child.element.style.height = height + \"px\";\n\n if (child instanceof DockContainer) {\n child._layoutChildren(childWidth, height);\n }\n\n if (separatorIndex < separators.length) {\n separators[separatorIndex].style.left = x + childWidth + \"px\";\n separators[separatorIndex].style.top = y + \"px\";\n }\n x += childWidth + separatorWidth;\n separatorIndex++;\n child.onResize();\n });\n }\n else {\n this.children.forEach(child => {\n let childHeight = Math.round((height - (separators.length * separatorWidth)) * child._dockPercentage);\n\n child.element.style.left = x + \"px\";\n child.element.style.top = y + \"px\";\n child.element.style.width = width + \"px\";\n child.element.style.height = childHeight + \"px\";\n\n if (child instanceof DockContainer) {\n child._layoutChildren(width, childHeight);\n }\n\n if (separatorIndex < separators.length) {\n separators[separatorIndex].style.left = x + \"px\";\n separators[separatorIndex].style.top = y + childHeight + \"px\";\n }\n y += childHeight + separatorWidth;\n separatorIndex++;\n child.onResize();\n });\n }\n }\n}\n\nclass DockPanel extends Dockable {\n titleElement: HTMLDivElement;\n contentWidget: Widget;\n private _dragged: boolean;\n private _dockOverlay: HTMLElement;\n private _dockTargetDirection: DockDirection;\n resizeEW: HTMLDivElement;\n resizeNS: HTMLDivElement;\n resizeDiag: HTMLDivElement;\n private _resizingHorizontally: boolean;\n private _resizingVertically: boolean;\n private _dockTarget: DockPanel;\n identifier: string;\n\n constructor(title: string, contentWidget: Widget, hasCloseButton?: boolean) {\n super();\n this.element.className = \"DockPanel\";\n hasCloseButton = hasCloseButton === undefined || hasCloseButton == true;\n\n this.titleElement = document.createElement(\"div\");\n this.titleElement.textContent = title;\n this.titleElement.className = \"title\";\n\n this.contentWidget = contentWidget;\n this.contentWidget.element.classList.add(\"content\");\n\n this.element.appendChild(this.titleElement);\n this.element.appendChild(this.contentWidget.element);\n this.titleElement.addEventListener(\"mousedown\", getDragStart(this));\n this._dragged = false;\n this._dockOverlay = null;\n this._dockTarget = null;\n this._dockTargetDirection = DockDirection.Float;\n\n if(hasCloseButton) {\n let closeButton = document.createElement(\"button\");\n closeButton.className = \"closeButton\";\n closeButton.textContent = \"🗙\";\n this.titleElement.appendChild(closeButton);\n closeButton.onclick = evt => {\n this.close();\n }\n }\n\n this.resizeEW = document.createElement(\"div\");\n this.resizeNS = document.createElement(\"div\");\n this.resizeDiag = document.createElement(\"div\");\n this.resizeEW.className = \"resizeEW\";\n this.resizeNS.className = \"resizeNS\";\n this.resizeDiag.className = \"resizeDiag\";\n this.element.appendChild(this.resizeEW);\n this.element.appendChild(this.resizeNS);\n this.element.appendChild(this.resizeDiag);\n\n this._resizingHorizontally = false;\n this._resizingVertically = false;\n\n this.resizeEW.addEventListener(\"mousedown\", getDragStart(this, (draggable: IDraggable, evt: MouseEvent) => this.onResizeStart(evt, true, false)));\n this.resizeNS.addEventListener(\"mousedown\", getDragStart(this, (draggable: IDraggable, evt: MouseEvent) => this.onResizeStart(evt, false, true)));\n this.resizeDiag.addEventListener(\"mousedown\", getDragStart(this, (draggable: IDraggable, evt: MouseEvent) => this.onResizeStart(evt, true, true)));\n }\n\n onResize() {\n super.onResize();\n this.contentWidget.onResize();\n }\n\n onAttached() {\n if(this.isAttached()) {\n let indexInFloatings = _floatingPanels.indexOf(this);\n if(this.isFloating()) {\n if(indexInFloatings < 0)\n _floatingPanels.push(this);\n }\n else if(indexInFloatings >= 0) {\n _floatingPanels.splice(indexInFloatings, 1);\n }\n this.contentWidget.onAttached();\n }\n }\n\n getTitle() {\n return this.titleElement.textContent;\n }\n\n setTitle(title: string) {\n this.titleElement.textContent = title;\n }\n\n setContent(contentWidget: Widget) {\n // remove old element\n this.contentWidget.element.classList.remove(\"content\");\n this.element.removeChild(this.contentWidget.element);\n\n // set new element\n this.contentWidget = contentWidget;\n this.contentWidget.element.classList.add(\"content\");\n this.element.appendChild(this.contentWidget.element);\n\n contentWidget.onAttached();\n }\n\n isFloating() {\n return this.element.classList.contains(\"floating\");\n }\n\n close() {\n if(this.parentWidget instanceof DockContainer) {\n this.parentWidget.undock(this);\n }\n else {\n this.element.parentElement.removeChild(this.element);\n\n let indexInFloatings = _floatingPanels.indexOf(this);\n if(indexInFloatings >= 0) {\n _floatingPanels.splice(indexInFloatings, 1);\n }\n }\n }\n\n createDragOverlay() {\n this._dockOverlay = document.createElement(\"div\");\n this._dockOverlay.className = \"dockOverlay\";\n document.body.appendChild(this._dockOverlay);\n }\n\n onResizeStart(mouseEvt: MouseEvent, resizingHorizontally: boolean, resizingVertically: boolean) {\n if(!this.isFloating())\n return false;\n\n if(resizingHorizontally)\n this.element.classList.add(\"resizingHorizontally\");\n if(resizingVertically)\n this.element.classList.add(\"resizingVertically\");\n this._resizingHorizontally = resizingHorizontally;\n this._resizingVertically = resizingVertically;\n return true;\n }\n\n onResizing(dragInfo: DragInfo) {\n if(!this.isFloating())\n return;\n\n if(this._resizingHorizontally) {\n this.element.style.width = dragInfo.posRelativeToElement.x + \"px\";\n }\n if(this._resizingVertically) {\n this.element.style.height = dragInfo.posRelativeToElement.y + \"px\";\n }\n this.onResize();\n }\n\n onDragStart(mouseEvt: MouseEvent) {\n if((mouseEvt.target as HTMLElement).classList.contains(\"closeButton\"))\n return false;\n\n return super.onDragStart(mouseEvt);\n }\n\n onDragging(dragInfo: DragInfo) {\n if(this._resizingHorizontally || this._resizingVertically)\n return this.onResizing(dragInfo);\n\n const dockBorder = 0.05; // how thick are the zones where things dock?\n const moveThreshold = 10; // how many pixels do I have to drag until we start undocking?\n\n // not in onDragStart, since we want to handle clicks separately\n if(!this._dragged && (Math.abs(dragInfo.posRelativeToDragStart.x) > moveThreshold\n || Math.abs(dragInfo.posRelativeToDragStart.y) > moveThreshold)) {\n this._dragged = true;\n if(this.parentWidget instanceof DockContainer) {\n this.parentWidget.undock(this);\n document.body.appendChild(this.element);\n }\n this.createDragOverlay();\n }\n if(!this._dragged)\n return;\n\n super.onDragging(dragInfo);\n\n this._dockTarget = findDockPanelForPoint(dragInfo.mouseEvent.clientX, dragInfo.mouseEvent.clientY);\n\n if(this._dockTarget) {\n let targetRect = this._dockTarget.element.getBoundingClientRect();\n\n if(dragInfo.mouseEvent.clientX < targetRect.x + targetRect.width * dockBorder) {\n this._dockOverlay.style.left = targetRect.x + \"px\";\n this._dockOverlay.style.top = targetRect.y + \"px\";\n this._dockOverlay.style.width = targetRect.width * 0.5 + \"px\";\n this._dockOverlay.style.height = targetRect.height + \"px\";\n this._dockTargetDirection = DockDirection.Left;\n }\n else if(dragInfo.mouseEvent.clientX > targetRect.x + targetRect.width * (1 - dockBorder)) {\n this._dockOverlay.style.left = targetRect.x + targetRect.width * 0.5 + \"px\";\n this._dockOverlay.style.top = targetRect.y + \"px\";\n this._dockOverlay.style.width = targetRect.width * 0.5 + \"px\";\n this._dockOverlay.style.height = targetRect.height + \"px\";\n this._dockTargetDirection = DockDirection.Right;\n }\n else if(dragInfo.mouseEvent.clientY < targetRect.y + targetRect.height * dockBorder) {\n this._dockOverlay.style.left = targetRect.x + \"px\";\n this._dockOverlay.style.top = targetRect.y + \"px\";\n this._dockOverlay.style.width = targetRect.width + \"px\";\n this._dockOverlay.style.height = targetRect.height * 0.5 + \"px\";\n this._dockTargetDirection = DockDirection.Top;\n }\n else if(dragInfo.mouseEvent.clientY > targetRect.y + targetRect.height * (1 - dockBorder)) {\n this._dockOverlay.style.left = targetRect.x + \"px\";\n this._dockOverlay.style.top = targetRect.y + targetRect.height*0.5 + \"px\";\n this._dockOverlay.style.width = targetRect.width + \"px\";\n this._dockOverlay.style.height = targetRect.height * 0.5 + \"px\";\n this._dockTargetDirection = DockDirection.Bottom;\n }\n else {\n this._dockTargetDirection = DockDirection.Float;\n this._dockOverlay.style.width = 0 + \"px\";\n }\n }\n else {\n this._dockTargetDirection = DockDirection.Float;\n this._dockOverlay.style.width = 0 + \"px\";\n }\n }\n\n onDragEnd(mouseEvt: MouseEvent) {\n if(this._dragged) {\n this._dragged = false;\n if(this._dockOverlay != null) {\n document.body.removeChild(this._dockOverlay);\n this._dockOverlay = null;\n }\n if(this._dockTarget != null && this._dockTargetDirection != DockDirection.Float) {\n this.dockRelativeTo(this._dockTarget, this._dockTargetDirection);\n }\n }\n this._resizingHorizontally = false;\n this._resizingVertically = false;\n this.element.classList.remove(\"resizingHorizontally\");\n this.element.classList.remove(\"resizingVertically\");\n super.onDragEnd(mouseEvt);\n }\n\n float(x?: number, y?: number, width?: number, height?: number) {\n if(this.parentWidget != null) {\n if(this.parentWidget instanceof DockContainer)\n this.parentWidget.undock(this);\n }\n\n x = x || 10;\n y = y || 10;\n width = width || 400;\n height = height || 300;\n\n this.element.classList.add(\"floating\");\n this.element.style.left = x + \"px\";\n this.element.style.top = y + \"px\";\n this.element.style.width = width + \"px\";\n this.element.style.height = height + \"px\";\n document.body.appendChild(this.element);\n this.onAttached();\n this.onResize();\n \n let indexInFloatings = _floatingPanels.indexOf(this);\n if(indexInFloatings < 0)\n _floatingPanels.push(this);\n }\n\n dockRelativeTo(relativeWidget: Dockable, dockDirection: DockDirection, percentage?: number) {\n if(percentage == undefined || percentage == null)\n percentage = 0.5;\n\n if(!(relativeWidget instanceof Widget)) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeWidget' must be a Widget object\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n if(relativeWidget.parentWidget instanceof DockContainer) {\n relativeWidget.parentWidget.dockRelativeTo(this, relativeWidget, dockDirection, percentage);\n }\n else {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeWidget' must be inside a DockContainer\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n }\n}\n\nfunction updateDockContainers() {\n _dockContainers.forEach(container => {\n if(!(container.parentWidget instanceof DockContainer)) {\n container._layoutChildren();\n }\n })\n}\n\nwindow.addEventListener('resize', updateDockContainers);\n\nexport { DockContainer, DockPanel, DockDirection, Orientation }\n","import { Widget } from './Widget';\nimport { ROOT } from './ROOT';\nimport { DragInfo, getDragStart } from './dragAndDrop'\n\nclass Dialog extends Widget {\n title: string;\n titleElement: HTMLDivElement;\n modalElement: HTMLDivElement;\n contentElement: HTMLElement;\n attachedElement?: HTMLElement;\n contentWidget: Widget;\n\n constructor(title: string, contentWidget: Widget, hasCloseButton: boolean) {\n super();\n this.element.classList.add(\"Dialog\");\n this.title = title;\n this.attachedElement = null;\n hasCloseButton = hasCloseButton == undefined || hasCloseButton == true; \n \n this.titleElement = document.createElement(\"div\");\n this.titleElement.textContent = title;\n this.titleElement.className = \"title\";\n this.contentWidget = contentWidget;\n this.contentElement = contentWidget.element;\n this.contentElement.classList.add(\"content\");\n \n if(hasCloseButton) {\n let closeButton = document.createElement(\"button\");\n closeButton.className = \"closeButton\";\n closeButton.textContent = \"🗙\";\n this.titleElement.appendChild(closeButton);\n closeButton.onclick = evt => {\n this.hide();\n }\n }\n \n this.modalElement = document.createElement(\"div\");\n this.modalElement.className = \"Modal\";\n\n this.element.appendChild(this.titleElement);\n this.element.appendChild(this.contentElement);\n this.titleElement.addEventListener(\"mousedown\", getDragStart(this));\n }\n \n onAttached() {\n if(this.isAttached())\n this.contentWidget.onAttached();\n }\n\n show() {\n this.attachedElement = this.element;\n ROOT.element.appendChild(this.element);\n this.onAttached();\n }\n \n hide() {\n if(this.attachedElement != null) {\n ROOT.element.removeChild(this.attachedElement);\n this.attachedElement = null;\n }\n }\n \n showModal() {\n this.attachedElement = this.modalElement;\n this.modalElement.appendChild(this.element);\n ROOT.element.appendChild(this.modalElement);\n this.onAttached();\n }\n\n isShown() {\n return this.attachedElement != null;\n }\n\n onDragging(dragInfo: DragInfo) {\n super.onDragging(dragInfo);\n this.element.style.transform = \"none\";\n }\n}\n\nexport { Dialog }","import { Widget } from './Widget';\nimport { Color } from './Color';\nimport { DragInfo, Draggable, getDragStart } from './dragAndDrop';\nimport { Vector2 } from './Math';\nimport { Dialog } from './Dialog';\nimport { MessageDialogButton } from './MessageDialog';\n\nabstract class AbstractColorPicker extends Widget {\n private _color: Color;\n protected _onColorChanged: (oldColor: Color, newColor: Color) => void;\n \n abstract setColor(color: Color) : void;\n\n constructor(onColorChanged?: (oldColor: Color, newColor: Color) => void) {\n super();\n this.element.classList.add(\"ColorPicker\");\n this._onColorChanged = onColorChanged;\n }\n\n protected setColorProperty(color: Color) {\n const oldColor = this._color;\n this._color = color;\n\n if(this._onColorChanged)\n this._onColorChanged(oldColor, color);\n }\n\n getColor() : Color {\n return this._color;\n }\n}\n\nclass PaintStyleColorPicker extends AbstractColorPicker {\n private _hueDiv: HTMLDivElement;\n private _saturationDiv: HTMLDivElement;\n private _lightnessDiv: HTMLDivElement;\n private _colorHandle: HTMLDivElement;\n private _lightnessHandle: HTMLDivElement;\n\n constructor(color?: Color, onColorChanged?: (oldColor: Color, newColor: Color) => void) {\n super(onColorChanged);\n this.element.classList.add(\"PaintStyleColorPicker\");\n this._hueDiv = document.createElement(\"div\");\n this._hueDiv.classList.add(\"hue\");\n this._saturationDiv = document.createElement(\"div\");\n this._saturationDiv.classList.add(\"saturation\");\n this._lightnessDiv = document.createElement(\"div\");\n this._lightnessDiv.classList.add(\"lightness\");\n this._colorHandle = document.createElement(\"div\");\n this._colorHandle.classList.add(\"handle\");\n this._lightnessHandle = document.createElement(\"div\");\n this._lightnessHandle.classList.add(\"handle\");\n\n this._hueDiv.appendChild(this._saturationDiv);\n this._saturationDiv.appendChild(this._colorHandle);\n this._lightnessDiv.appendChild(this._lightnessHandle);\n this.element.appendChild(this._hueDiv);\n this.element.appendChild(this._lightnessDiv);\n\n\n let draggingHueSat = new Draggable(this._hueDiv, evt => true,\n (dragInfo) => {\n this._onHueMove(dragInfo);\n },\n evt => {});\n this._hueDiv.addEventListener(\"mousedown\", getDragStart(draggingHueSat));\n this._hueDiv.addEventListener(\"touchstart\", getDragStart(draggingHueSat));\n\n\n\n let draggingLightness = new Draggable(this._lightnessDiv, evt => true,\n (dragInfo) => {\n this._onLightnessMove(dragInfo);\n },\n evt => {});\n this._lightnessDiv.addEventListener(\"mousedown\", getDragStart(draggingLightness));\n this._lightnessDiv.addEventListener(\"touchstart\", getDragStart(draggingLightness));\n\n if(color === undefined)\n color = new Color(255, 0, 0);\n\n this.setColor(color);\n }\n\n private _onLightnessMove(dragInfo: DragInfo) {\n this._lightnessHandle.style.top = Math.max(Math.min(dragInfo.posRelativeToElement.y, this._lightnessDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _onHueMove(dragInfo: DragInfo) {\n let relativePos = dragInfo.posRelativeToElement;\n this._colorHandle.style.left = Math.max(Math.min(relativePos.x, this._hueDiv.clientWidth), 0) + \"px\";\n this._colorHandle.style.top = Math.max(Math.min(relativePos.y, this._hueDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _getColorFromCurrentPositions() : Color {\n const colorRect = this._hueDiv.getBoundingClientRect();\n const lightnessRect = this._lightnessDiv.getBoundingClientRect();\n \n const hueFactor = this._colorHandle.offsetLeft / colorRect.width;\n const satFactor = 1 - (this._colorHandle.offsetTop / colorRect.height);\n const litFactor = 1 - (this._lightnessHandle.offsetTop / lightnessRect.height);\n\n return Color.fromHsl(hueFactor * 360, satFactor, litFactor);\n }\n\n private _setColorInternal(color: Color, setPositions: boolean): void {\n const hsl = color.getHsl();\n const hueFactor = hsl.h / 360;\n const satFactor = hsl.s;\n const litFactor = hsl.l;\n\n if(setPositions) {\n const colorRect = this._hueDiv.getBoundingClientRect();\n const lightnessRect = this._lightnessDiv.getBoundingClientRect();\n \n this._colorHandle.style.left = (colorRect.width * hueFactor).toFixed(2) + \"px\";\n this._colorHandle.style.top = (colorRect.height - colorRect.height * satFactor).toFixed(2) + \"px\";\n this._lightnessHandle.style.top = (lightnessRect.height - lightnessRect.height * litFactor).toFixed(2) + \"px\";\n }\n\n let color2 = Color.fromHsl(hsl.h, hsl.s, 0.5);\n this._lightnessDiv.style.backgroundColor = color2.getHex();\n\n this.setColorProperty(color);\n }\n\n setColor(color: Color): void {\n this._setColorInternal(color, true);\n }\n\n onAttached() {\n this.setColor(this.getColor());\n }\n}\n\nclass GimpStyleColorPicker extends AbstractColorPicker {\n private _saturationDiv: HTMLDivElement;\n private _valueDiv: HTMLDivElement;\n private _hueDiv: HTMLDivElement;\n private _svHandle: HTMLDivElement;\n private _hueHandle: HTMLDivElement;\n\n constructor(color?: Color, onColorChanged?: (oldColor: Color, newColor: Color) => void) {\n super(onColorChanged);\n this.element.classList.add(\"GimpStyleColorPicker\");\n this._saturationDiv = document.createElement(\"div\");\n this._saturationDiv.classList.add(\"saturation\");\n this._valueDiv = document.createElement(\"div\");\n this._valueDiv.classList.add(\"value\");\n this._hueDiv = document.createElement(\"div\");\n this._hueDiv.classList.add(\"hue\");\n this._svHandle = document.createElement(\"div\");\n this._svHandle.classList.add(\"handle\");\n this._hueHandle = document.createElement(\"div\");\n this._hueHandle.classList.add(\"handle\");\n\n this._saturationDiv.appendChild(this._valueDiv);\n this._valueDiv.appendChild(this._svHandle);\n this._hueDiv.appendChild(this._hueHandle);\n this.element.appendChild(this._saturationDiv);\n this.element.appendChild(this._hueDiv);\n\n let draggingSatVal = new Draggable(this._saturationDiv, evt => true,\n (dragInfo) => {\n this._onSatValMove(dragInfo);\n },\n evt => {});\n this._saturationDiv.addEventListener(\"mousedown\", getDragStart(draggingSatVal));\n this._saturationDiv.addEventListener(\"touchstart\", getDragStart(draggingSatVal));\n\n let draggingHue = new Draggable(this._hueDiv, evt => true,\n (dragInfo) => {\n this._onHueMove(dragInfo);\n },\n evt => {});\n this._hueDiv.addEventListener(\"mousedown\", getDragStart(draggingHue));\n this._hueDiv.addEventListener(\"touchstart\", getDragStart(draggingHue));\n\n if(color === undefined)\n color = new Color(255, 0, 0);\n\n this.setColor(color);\n }\n\n private _onHueMove(dragInfo: DragInfo) {\n this._hueHandle.style.top = Math.max(Math.min(dragInfo.posRelativeToElement.y, this._hueDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _onSatValMove(dragInfo: DragInfo) {\n let relativePos = dragInfo.posRelativeToElement;\n this._svHandle.style.left = Math.max(Math.min(relativePos.x, this._saturationDiv.clientWidth), 0) + \"px\";\n this._svHandle.style.top = Math.max(Math.min(relativePos.y, this._saturationDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _getColorFromCurrentPositions() : Color {\n const satLitRect = this._saturationDiv.getBoundingClientRect();\n const hueRect = this._hueDiv.getBoundingClientRect();\n \n const satFactor = this._svHandle.offsetLeft / satLitRect.width;\n const litFactor = 1 - (this._svHandle.offsetTop / satLitRect.height);\n const hueFactor = this._hueHandle.offsetTop / hueRect.height;\n\n return Color.fromHsv(hueFactor * 360, satFactor, litFactor);\n }\n\n private _setColorInternal(color: Color, setPositions: boolean): void {\n const hsv = color.getHsv();\n const hueFactor = hsv.h / 360;\n const satFactor = hsv.s;\n const valFactor = hsv.v;\n\n if(setPositions) {\n const satValRect = this._hueDiv.getBoundingClientRect();\n const hueRect = this._valueDiv.getBoundingClientRect();\n \n this._svHandle.style.left = (satValRect.width * satFactor).toFixed(2) + \"px\";\n this._svHandle.style.top = (satValRect.height - satValRect.height * valFactor).toFixed(2) + \"px\";\n this._hueHandle.style.top = (hueRect.height * hueFactor).toFixed(2) + \"px\";\n }\n\n let color2 = Color.fromHsv(hsv.h, 1, 1);\n this._saturationDiv.style.backgroundColor = color2.getHex();\n\n this.setColorProperty(color);\n }\n\n setColor(color: Color): void {\n this._setColorInternal(color, true);\n }\n\n onAttached() {\n this.setColor(this.getColor());\n }\n}\n\nclass WheelColorPicker extends AbstractColorPicker {\n private _hueWheelDiv: HTMLDivElement;\n private _wheelHandle: HTMLDivElement;\n private _slHandle: HTMLDivElement;\n private _innerCircleDiv: HTMLDivElement;\n private _saturationDiv: HTMLDivElement;\n private _lightnessDiv: HTMLDivElement;\n private readonly _zeroHueVector: Vector2 = new Vector2(1, 0);\n\n constructor(color?: Color, onColorChanged?: (oldColor: Color, newColor: Color) => void) {\n super(onColorChanged);\n this.element.classList.add(\"WheelColorPicker\");\n\n this._hueWheelDiv = document.createElement(\"div\");\n this._hueWheelDiv.classList.add(\"wheel\");\n this._wheelHandle = document.createElement(\"div\");\n this._wheelHandle.classList.add(\"handle\");\n\n this._slHandle = document.createElement(\"div\");\n this._slHandle.classList.add(\"handle\");\n \n this._innerCircleDiv = document.createElement(\"div\");\n this._innerCircleDiv.classList.add(\"innerCircle\");\n\n this._saturationDiv = document.createElement(\"div\");\n this._saturationDiv.classList.add(\"saturation\");\n\n this._lightnessDiv = document.createElement(\"div\");\n this._lightnessDiv.classList.add(\"lightness\");\n\n this._lightnessDiv.appendChild(this._slHandle);\n this._saturationDiv.appendChild(this._lightnessDiv);\n this._innerCircleDiv.appendChild(this._saturationDiv);\n this._hueWheelDiv.appendChild(this._wheelHandle);\n this._hueWheelDiv.appendChild(this._innerCircleDiv);\n this.element.appendChild(this._hueWheelDiv);\n\n let draggingSatLit = new Draggable(this._saturationDiv,\n evt => true,\n (dragInfo) => {\n this._onSatLitMove(dragInfo);\n },\n evt => {});\n this._saturationDiv.addEventListener(\"mousedown\", getDragStart(draggingSatLit));\n this._saturationDiv.addEventListener(\"touchstart\", getDragStart(draggingSatLit));\n\n let draggingHue = new Draggable(this._hueWheelDiv, evt => true,\n (dragInfo) => {\n this._onHueMove(dragInfo);\n },\n evt => {});\n this._hueWheelDiv.addEventListener(\"mousedown\", getDragStart(draggingHue));\n this._hueWheelDiv.addEventListener(\"touchstart\", getDragStart(draggingHue));\n\n if(color === undefined)\n color = new Color(255, 0, 0);\n\n this.setColor(color);\n }\n\n private _onHueMove(dragInfo: DragInfo) {\n const centerX = this._hueWheelDiv.clientWidth / 2;\n const centerY = this._hueWheelDiv.clientHeight / 2;\n let handleRect = this._wheelHandle.getBoundingClientRect();\n\n \n let vector = new Vector2(dragInfo.posRelativeToElement.x - centerX, dragInfo.posRelativeToElement.y - centerY);\n vector.setLength((this._hueWheelDiv.clientWidth / 2) - (handleRect.width / 2));\n this._wheelHandle.style.left = centerX + vector.x + \"px\";\n this._wheelHandle.style.top = centerY + vector.y + \"px\";\n\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _onSatLitMove(dragInfo: DragInfo) {\n let parentRect = this._innerCircleDiv.getBoundingClientRect();\n let relativePos = dragInfo.posRelativeToElement;\n let offsetToParentX = dragInfo.rect.x - parentRect.x;\n\n relativePos.x -= (parentRect.width - offsetToParentX - offsetToParentX) / 2 ;\n relativePos.rotateInDegrees(-45);\n \n this._slHandle.style.left = Math.max(Math.min(relativePos.x, this._saturationDiv.clientWidth), 0) + \"px\";\n this._slHandle.style.top = Math.max(Math.min(relativePos.y, this._saturationDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _getColorFromCurrentPositions() : Color {\n const satLitRect = this._saturationDiv.getBoundingClientRect();\n const slHandleRect = this._slHandle.getBoundingClientRect();\n const hueHandleRect = this._wheelHandle.getBoundingClientRect();\n\n const x = (slHandleRect.x + (slHandleRect.width / 2)) - satLitRect.x;\n const y = (slHandleRect.y + (slHandleRect.height / 2)) - satLitRect.y;\n\n const litFactor = 1 - (y / satLitRect.height);\n\n const variableWidth = satLitRect.width * (litFactor < 0.5\n ? (litFactor * 2)\n : ((1 - litFactor) * 2));\n\n const satFactor = (x - (satLitRect.width / 2 - variableWidth / 2)) / variableWidth;\n\n let innerWidth = this._hueWheelDiv.clientWidth;\n let innerHeight = this._hueWheelDiv.clientHeight;\n let centerX = innerWidth / 2;\n let centerY = innerHeight / 2;\n let vector = new Vector2(this._wheelHandle.offsetLeft + (hueHandleRect.width / 2) - centerX, this._wheelHandle.offsetTop + (hueHandleRect.height / 2) - centerY);\n vector.setLength((innerWidth / 2) - (hueHandleRect.width / 2));\n let hue = this._zeroHueVector.getAngleToOtherInDegrees(vector);\n\n if(vector.y > 0)\n hue = 360 - hue;\n\n return Color.fromHsl(hue, satFactor, litFactor);\n }\n\n private _setColorInternal(color: Color, setPositions: boolean): void {\n const hsl = color.getHsl();\n const satFactor = hsl.s;\n const litFactor = hsl.l;\n\n if(setPositions) {\n const satLitRect = this._saturationDiv.getBoundingClientRect();\n const parentRect = this._innerCircleDiv.getBoundingClientRect();\n const variableWidth = satLitRect.width * (litFactor < 0.5\n ? (litFactor * 2)\n : ((1 - litFactor) * 2));\n\n let relativePos = new Vector2((satLitRect.width / 2) + (variableWidth * satFactor) - (variableWidth/2),\n (satLitRect.height - satLitRect.height * litFactor));\n let offsetToParentX = satLitRect.x - parentRect.x;\n relativePos.x -= (parentRect.width - offsetToParentX - offsetToParentX) / 2 ;\n relativePos.rotateInDegrees(-45);\n\n this._slHandle.style.left = relativePos.x.toFixed(2) + \"px\";\n this._slHandle.style.top = relativePos.y.toFixed(2) + \"px\";\n\n // -- hue --\n const hueHandleRect = this._wheelHandle.getBoundingClientRect();\n let innerWidth = this._hueWheelDiv.clientWidth;\n let innerHeight = this._hueWheelDiv.clientHeight;\n let centerX = innerWidth / 2;\n let centerY = innerHeight / 2;\n let vector = this._zeroHueVector.getRotatedInDegrees(-hsl.h);\n vector.setLength((innerWidth / 2) - (hueHandleRect.width / 2));\n this._wheelHandle.style.left = centerX + vector.x + \"px\";\n this._wheelHandle.style.top = centerY + vector.y + \"px\";\n }\n\n let color2 = Color.fromHsv(hsl.h, 1, 1);\n this._saturationDiv.style.backgroundColor = color2.getHex();\n\n this.setColorProperty(color);\n }\n\n setColor(color: Color): void {\n this._setColorInternal(color, true);\n }\n\n onAttached() {\n this.setColor(this.getColor());\n }\n}\n\n\n\nclass ColorPickerDialog extends Dialog {\n private colorPicker: AbstractColorPicker;\n private _textInput: HTMLInputElement;\n private _divOutput: HTMLDivElement;\n private _cancelOption: HTMLButtonElement;\n private _continueOption: HTMLButtonElement;\n private _boundKeyEvent: (evt: KeyboardEvent) => void;\n\n constructor(title: string, text: string, color: Color, buttons: MessageDialogButton[], hasCloseButton: boolean) {\n let contentWidget = new Widget();\n let contentElement = contentWidget.element;\n super(title, contentWidget, hasCloseButton);\n let textElement = document.createElement(\"div\");\n textElement.textContent = text;\n textElement.className = \"text\";\n\n this._divOutput = document.createElement(\"div\");\n this._divOutput.classList.add(\"ColorOutput\");\n this._textInput = document.createElement(\"input\");\n this.colorPicker = new WheelColorPicker(color, (oldColor, newColor) => {\n const newHexColor = newColor.getHex();\n this._textInput.value = newHexColor;\n this._divOutput.style.backgroundColor = newHexColor;\n });\n this._textInput.value = color.getHex();\n\n let textInputChanged = () => {\n let parsedColor = Color.fromHex(this._textInput.value);\n if(!parsedColor)\n return;\n\n this.colorPicker.setColor(parsedColor);\n };\n this._textInput.onkeyup = textInputChanged;\n\n let buttonsElement = document.createElement(\"div\");\n buttonsElement.className = \"buttons\";\n\n this._cancelOption = null;\n this._continueOption = null;\n\n buttons.forEach(button => {\n let buttonElement = document.createElement(\"button\");\n buttonElement.textContent = button.label;\n if(button.isCancel) {\n this._cancelOption = buttonElement;\n }\n if(button.isContinue) {\n this._continueOption = buttonElement;\n }\n buttonElement.onclick = _ => {\n this.hide();\n\n if(button.callback)\n button.callback(this);\n }\n buttonsElement.appendChild(buttonElement);\n });\n \n contentElement.appendChild(textElement);\n contentElement.appendChild(this.colorPicker.element);\n contentElement.appendChild(this._divOutput);\n contentElement.appendChild(this._textInput);\n contentElement.appendChild(buttonsElement);\n \n this.element.className = \"Dialog\";\n this.element.classList.add(\"ColorPickerDialog\");\n this.element.classList.add(\"ColorPickerDialog\");\n this._boundKeyEvent = null;\n }\n\n onAttached() {\n if(this.isAttached())\n this.colorPicker.onAttached();\n }\n\n getColor() {\n return this.colorPicker.getColor();\n }\n\n showModal() {\n super.showModal();\n this._boundKeyEvent = evt => {\n if(evt.key == \"Escape\" && this._cancelOption) {\n this._clickButton(this._cancelOption);\n }\n else if(evt.key == \"Enter\" && this._continueOption) {\n this._clickButton(this._continueOption);\n }\n }\n window.addEventListener(\"keydown\", this._boundKeyEvent);\n }\n\n _clickButton(button: HTMLButtonElement) {\n var clickEvent = new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n });\n button.dispatchEvent(clickEvent);\n }\n\n hide() {\n super.hide();\n if(this._boundKeyEvent)\n window.removeEventListener(\"keydown\", this._boundKeyEvent);\n this._boundKeyEvent = null;\n }\n}\n\nexport {\n AbstractColorPicker,\n PaintStyleColorPicker,\n GimpStyleColorPicker,\n WheelColorPicker,\n ColorPickerDialog\n}\n","import { Widget } from './Widget';\n\nclass Button extends Widget {\n constructor(label: string, callback: () => void) {\n super(document.createElement(\"button\"));\n this.element.classList.add(\"Button\");\n this.element.textContent = label;\n\n if(callback)\n this.element.onclick = callback;\n }\n}\n\nexport { Button }","import { Widget } from './Widget';\n\nclass Dropdown extends Widget {\n constructor() {\n super(document.createElement(\"select\"));\n this.element.classList.add(\"Dropdown\");\n }\n\n addOption(label: string, value: string) {\n let option = document.createElement(\"option\");\n option.textContent = label;\n option.value = value;\n\n this.element.appendChild(option);\n }\n\n removeOption(value: string) {\n let options = Array.from((this.element as HTMLSelectElement).options);\n\n for(var option of options) {\n if(option.value == value) {\n this.element.removeChild(option);\n return;\n }\n }\n }\n\n getSelectedValue() {\n return (this.element as HTMLSelectElement).value;\n }\n\n setSelectedValue(value: string) {\n (this.element as HTMLSelectElement).value = value;\n }\n}\n\nexport { Dropdown }","import { Widget } from './Widget';\n\nclass ListBox extends Widget {\n private _toElementFunction: (item: any) => HTMLElement;\n private _selectedIndex: number;\n private _onItemClick: (item: any, element: HTMLElement) => void;\n private _items: any[];\n\n constructor(items: any[], toElementFunction: (item: any) => HTMLElement, onItemClick: (item: any, element: HTMLElement) => void) {\n super();\n this.element.classList.add(\"ListBox\");\n this._toElementFunction = toElementFunction || (item => item);\n this._selectedIndex = -1;\n items = items || [];\n this.setItems(items);\n this._onItemClick = onItemClick || (_ => {});\n }\n\n clear() {\n while(this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n this._items = [];\n this._selectedIndex = -1;\n }\n\n setItems(items: any[]) {\n this.clear();\n for(let item of items) {\n this.addItem(item);\n }\n }\n\n getItemCount() {\n return this._items.length;\n }\n\n addItem(item: any) {\n this._items.push(item);\n\n let itemElement = this._toElementFunction(item);\n itemElement.onclick = () => {\n this.selectItem(item);\n this._onItemClick(item, itemElement);\n }\n this.element.appendChild(itemElement);\n }\n\n removeItem(item: any) {\n let index = this._items.indexOf(item);\n this.removeItemAtIndex(index);\n }\n\n removeItemAtIndex(index: number) {\n if(index < 0)\n return;\n\n this._items.splice(index, 1);\n this.element.childNodes[index].remove();\n }\n\n selectItem(item: any) {\n let index = this._items.indexOf(item);\n this.selectItemAtIndex(index);\n }\n\n selectItemAtIndex(index: number) {\n if(this._selectedIndex >= 0)\n this.element.children[this._selectedIndex].classList.remove(\"selected\");\n\n if(index >= 0)\n this.element.children[index].classList.add(\"selected\");\n this._selectedIndex = index;\n }\n\n getSelectedItem() {\n if(this._selectedIndex >= 0)\n return this._items[this._selectedIndex];\n\n return null;\n }\n\n getItemAtIndex(index: number) {\n if(index >= 0 && index < this._items.length)\n return this._items[index];\n return null;\n }\n\n getSelectedIndex() {\n return this._selectedIndex;\n }\n}\n\nclass StringListBox extends ListBox {\n constructor(items: any[], toStringFunction?: (item: any) => string, onItemClick?: (item: any, element: HTMLElement) => void) {\n toStringFunction = toStringFunction || (item => \"\" + item);\n\n let toElementFunction = (content: string) => {\n let itemElement = document.createElement(\"div\");\n itemElement.textContent = toStringFunction(content);\n return itemElement;\n }\n super(items, toElementFunction, onItemClick);\n }\n}\n\nexport {\n ListBox, StringListBox\n}\n","import { Widget } from './Widget';\n\nclass ListViewColumn {\n name: string;\n isReadOnly: boolean;\n fromString: (value: string) => any;\n toString: (value: any) => string;\n\n constructor(name: string, isReadOnly: boolean, fromString: (value: string) => any, toString: (value: any) => string) {\n this.name = name;\n this.isReadOnly = isReadOnly;\n this.fromString = fromString;\n this.toString = toString;\n }\n\n compare(a: any, b: any) {\n return 0;\n }\n}\n \nclass StringListViewColumn extends ListViewColumn {\n constructor(name: string, isReadOnly: boolean) {\n super(name, isReadOnly, x => x, x => x);\n }\n\n compare(a: string, b: string) {\n return (a?.toLowerCase() > b?.toLowerCase())\n ? 1\n : ((b?.toLowerCase() > a?.toLowerCase())\n ? -1\n : 0);\n }\n}\n\nclass IntListViewColumn extends ListViewColumn {\n constructor(name: string, isReadOnly: boolean) {\n super(name, isReadOnly, x => parseInt(x), x => \"\" + x);\n }\n\n compare(a: number, b: number) {\n return (a > b)\n ? 1\n : ((b > a)\n ? -1\n : 0);\n }\n}\n\nclass FloatListViewColumn extends ListViewColumn {\n constructor(name: string, isReadOnly: boolean) {\n super(name, isReadOnly, x => parseFloat(x), x => \"\" + x);\n }\n\n compare(a: number, b: number) {\n return (a > b)\n ? 1\n : ((b > a)\n ? -1\n : 0);\n }\n}\n\nclass ListView extends Widget {\n private _columns: ListViewColumn[];\n private _rows: any[][];\n private _htmlRows: HTMLElement[];\n private _cellValueChangedCallback: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void;\n private _editValidationCallback: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void;\n private _cellDoubleClickCallback: (row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void;\n private _headerRow: HTMLDivElement;\n\n constructor(columns: ListViewColumn[],\n editValidationCallback?: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void,\n cellValueChangedCallback?: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void,\n cellDoubleClickCallback?: (row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void)\n {\n super();\n this.element.classList.add(\"ListView\");\n this._columns = [];\n this._rows = [];\n this._htmlRows = [];\n this._cellValueChangedCallback = cellValueChangedCallback;\n this._editValidationCallback = editValidationCallback;\n this._cellDoubleClickCallback = cellDoubleClickCallback;\n \n this._headerRow = document.createElement(\"div\");\n this._headerRow.className = \"header\";\n this.element.appendChild(this._headerRow);\n \n columns.forEach(column => {\n this.addColumn(column);\n });\n }\n\n public static fromStringColumns(columns: string[],\n areReadonly: boolean,\n editValidationCallback?: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void,\n cellValueChangedCallback?: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void,\n cellDoubleClickCallback?: (row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void)\n {\n return new ListView(columns.map(columnName => new StringListViewColumn(columnName, areReadonly)),\n editValidationCallback,\n cellValueChangedCallback,\n cellDoubleClickCallback);\n }\n\n // columnName: the name of the string column to add (string)\n // isReadOnly: (optional) set this to true if you want the column to be not editable\n // columnValues: (optional) a list of strings, one value per row\n // columnIndex: (optional) if this is provided, the new column is inserted at this index, otherwise it will be appended to the end\n addStringColumn(columnName: string, isReadonly?: boolean, columnValues?: string[], columnIndex?: number) {\n return this.addColumn(new StringListViewColumn(columnName, !!isReadonly), columnValues, columnIndex);\n }\n\n // column: the column to add (ListViewColumn)\n // columnValues: (optional) a list of strings, one value per row\n // columnIndex: (optional) if this is provided, the new column is inserted at this index, otherwise it will be appended to the end\n addColumn(column: ListViewColumn, columnValues?: any[], columnIndex?: number) {\n if (!(column instanceof ListViewColumn)) {\n let error = { \n name: \"Argument Error\", \n level: \"Error\", \n message: \"The argument 'column' must contain an instance of ListViewColumn, got \" + (typeof column),\n toString: function() { return this.name + \": \" + this.message; }\n }; \n console.error(error);\n throw error;\n }\n if(columnIndex === null || columnIndex === undefined)\n columnIndex = this._columns.length;\n\n let colHeader = document.createElement(\"span\");\n colHeader.textContent = column.name;\n colHeader.className = \"cell\";\n\n if(columnIndex < 0 || columnIndex >= this._headerRow.children.length) {\n this._headerRow.appendChild(colHeader);\n this._columns.push(column);\n }\n else {\n let nextSibling = this._headerRow.children.item(columnIndex);\n this._headerRow.insertBefore(colHeader, nextSibling);\n this._columns.splice(columnIndex, 0, column);\n }\n\n this.setColumnReadonly(column);\n \n // add cells if there are already rows\n if(!columnValues)\n columnValues = [];\n if(columnValues.length > this._rows.length) {\n let error = { \n name: \"Argument Error\", \n level: \"Error\", \n message: \"The argument 'columnValues' must not be longer than the total amount of rows (\" + columnValues.length + \" elements were given for \" + this._rows.length + \")\",\n toString: function() { return this.name + \": \" + this.message; }\n }; \n console.error(error);\n throw error;\n }\n for(let i = 0; i < this._rows.length; i++) {\n let row = this._rows[i];\n let htmlRow = this._htmlRows[i];\n\n let value = \"\";\n if(i < columnValues.length)\n value = columnValues[i];\n // row.push(value);\n row.splice(columnIndex, 0, value);\n this._addCellToRow(row, htmlRow, columnIndex, value);\n }\n }\n\n removeColumn(columnIndex: number) {\n this._columns.splice(columnIndex, 1);\n this._headerRow.removeChild(this._headerRow.children[columnIndex]);\n\n for(let i = 0; i < this._rows.length; i++) {\n this._rows[i].splice(columnIndex, 1);\n this._htmlRows[i].removeChild(this._htmlRows[i].children[columnIndex]);\n }\n }\n\n setColumnAtIndexReadonly(columnIndex: number, readOnly: boolean) {\n let column = this._columns[columnIndex];\n this.setColumnReadonly(column, readOnly)\n }\n\n setColumnReadonly(column: ListViewColumn, readOnly?: boolean) {\n let columnIndex = this._columns.indexOf(column);\n readOnly = readOnly !== undefined && readOnly;\n column.isReadOnly = readOnly;\n\n let i = 0;\n this._htmlRows.forEach(htmlRow => {\n let cells = Array.from(htmlRow.querySelectorAll<HTMLElement>(\".cell\"));\n if(columnIndex < cells.length)\n this._makeEditable(!column.isReadOnly, cells[columnIndex], columnIndex, this._rows[i], column);\n i++;\n });\n }\n\n removeRow(index: number) {\n this._rows.splice(index, 1);\n let htmlRow = this.element.getElementsByClassName(\"row\")[index];\n this.element.removeChild(htmlRow);\n this._htmlRows.splice(index, 1);\n }\n\n clear() {\n this._rows = [];\n this._htmlRows = [];\n let htmlRows = Array.from(this.element.getElementsByClassName(\"row\"));\n for(let htmlRow of htmlRows) {\n this.element.removeChild(htmlRow);\n }\n }\n\n sortByColumn(index: number) {\n let column = this._columns[index];\n let sortedRows = this._rows;\n sortedRows.sort((a,b) => column.compare(a[index], b[index]));\n this.clear();\n sortedRows.forEach(row => {\n this.addRow(row);\n });\n }\n\n _makeEditable(editable: boolean, htmlCell: HTMLElement, columnIndex: number, row: any[], column: ListViewColumn) {\n if(editable) {\n htmlCell.ondblclick = evt => {\n let oldContent = htmlCell.textContent;\n let cellContent = htmlCell.textContent;\n htmlCell.textContent = \"\";\n htmlCell.classList.add(\"editing\");\n let input = document.createElement(\"input\");\n input.type = \"text\";\n input.value = cellContent;\n let blurHandled = false;\n\n let processChange = (changed: boolean) => {\n let inputContent = input.value;\n\n if(changed && (!this._editValidationCallback || this._editValidationCallback(oldContent, inputContent, row, column, this._rows.indexOf(row), columnIndex))) {\n htmlCell.removeChild(input);\n htmlCell.textContent = inputContent;\n htmlCell.classList.remove(\"editing\");\n row[columnIndex] = column.fromString(inputContent);\n if(this._cellValueChangedCallback)\n this._cellValueChangedCallback(oldContent, inputContent, row, column, this._rows.indexOf(row), columnIndex);\n }\n else {\n htmlCell.textContent = cellContent;\n }\n\n htmlCell.classList.remove(\"editing\");\n \n if(!htmlCell.contains(input))\n return;\n htmlCell.removeChild(input);\n };\n \n input.onblur = evt => {\n if(blurHandled)\n return;\n\n blurHandled = true;\n processChange(true);\n };\n input.onkeyup = evt => {\n if(evt.key == \"Escape\") {\n if(blurHandled)\n return;\n blurHandled = true;\n processChange(false);\n }\n else if(evt.key == \"Enter\") {\n if(blurHandled)\n return;\n blurHandled = true;\n processChange(true);\n }\n };\n htmlCell.appendChild(input);\n input.selectionStart = input.selectionEnd = input.value.length;\n input.focus();\n };\n }\n else {\n if(this._cellDoubleClickCallback)\n htmlCell.ondblclick = _ => this._cellDoubleClickCallback(row, column, this._rows.indexOf(row), columnIndex);\n else \n htmlCell.ondblclick = null;\n }\n }\n\n _addCellToRow(row: any[], htmlRow: HTMLElement, colNo: number, value: any) {\n let htmlCell = document.createElement(\"span\");\n let column = this._columns[colNo];\n htmlCell.textContent = column.toString(value);\n htmlCell.className = \"cell\";\n\n this._makeEditable(!this._columns[colNo].isReadOnly, htmlCell, colNo, row, column);\n\n if(colNo >= htmlRow.children.length)\n htmlRow.appendChild(htmlCell);\n else\n htmlRow.insertBefore(htmlCell, htmlRow.children.item(colNo));\n return htmlCell;\n }\n \n addRow(row: any[]) {\n let htmlRow = document.createElement(\"div\");\n htmlRow.className = \"row\";\n this.element.appendChild(htmlRow);\n \n if(row.length != this._columns.length) {\n let error = { \n name: \"Argument Error\", \n level: \"Error\", \n message: \"The argument 'row' must contain \" + this._columns.length + \" entries, but \" + row.length + \" were provided\",\n toString: function() { return this.name + \": \" + this.message; }\n }; \n console.error(error);\n throw error;\n }\n\n let colNo = 0;\n row.forEach(cell => {\n this._addCellToRow(row, htmlRow, colNo, cell);\n colNo++;\n });\n this._rows.push(row);\n this._htmlRows.push(htmlRow);\n\n htmlRow.onclick = evt => {\n this.deselectRows();\n htmlRow.classList.add(\"selected\");\n };\n htmlRow.oncontextmenu = htmlRow.onclick;\n\n this.element.appendChild(htmlRow);\n }\n\n deselectRows() {\n for(let i = 0; i < this._htmlRows.length; i++) {\n this._htmlRows[i].classList.remove(\"selected\");\n }\n }\n\n selectRow(index: number) {\n for(let i = 0; i < this._htmlRows.length; i++) {\n if(i == index)\n this._htmlRows[i].classList.add(\"selected\");\n else\n this._htmlRows[i].classList.remove(\"selected\");\n }\n }\n\n getSelectedRowIndex() {\n for(let i = 0; i < this._htmlRows.length; i++) {\n if(this._htmlRows[i].classList.contains(\"selected\"))\n return i;\n }\n return -1;\n }\n\n getSelectedRow() {\n let rowIndex = this.getSelectedRowIndex();\n if(rowIndex >= 0)\n return this.getRow(rowIndex);\n\n return null;\n }\n\n getColumnCount() {\n return this._columns.length;\n }\n\n getRowCount() {\n return this._rows.length;\n }\n\n getColumns() {\n return this._columns;\n }\n\n changeCellValue(rowIndex: number, columnIndex: number, newValue: string) {\n let cells = Array.from(this._htmlRows[rowIndex].querySelectorAll(\".cell\"));\n let htmlCell = cells[columnIndex];\n htmlCell.textContent = newValue;\n this._rows[rowIndex][columnIndex] = this._columns[columnIndex].fromString(newValue);\n }\n\n getRow(index: number) {\n return this._rows[index];\n }\n\n getRows() : any[][] {\n return this._rows;\n }\n\n getColumn(index: number) {\n return this._columns[index];\n }\n\n renameColumn(index: number, newName: string) {\n this.getColumn(index).name = newName;\n this._headerRow.children[index].textContent = newName;\n }\n\n getColumnValues(index: number) {\n return this._rows.map(row => row[index]);\n }\n\n setCellContent(rowIndex: number, columnIndex: number, newValue: any) {\n let oldContent = this._rows[rowIndex][columnIndex];\n let row = this._rows[rowIndex];\n let column = this._columns[columnIndex];\n\n row[columnIndex] = column.fromString(newValue);\n this._htmlRows[rowIndex].children[columnIndex].textContent = newValue;\n\n if(this._cellValueChangedCallback)\n this._cellValueChangedCallback(oldContent, newValue, row, column, rowIndex, columnIndex);\n }\n\n getCellContent(rowIndex: number, columnIndex: number) {\n return this._rows[rowIndex][columnIndex];\n }\n}\n\nexport {\n ListView,\n ListViewColumn,\n StringListViewColumn,\n IntListViewColumn,\n FloatListViewColumn\n}","import { Widget } from './Widget';\nimport { Menu } from './Menu';\n\nclass TreeView<T> extends Widget {\n items: TreeViewItem<T>[];\n clickHandler: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void;\n _focusedItem: TreeViewItem<T>;\n\n constructor(clickHandler?: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void) {\n super();\n this.element.classList.add(\"TreeView\");\n this.items = [];\n this.clickHandler = clickHandler;\n this._focusedItem = null;\n }\n\n addItem(label: string,\n data: T,\n clickHandler: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void,\n doubleClickHandler?: (evt: MouseEvent, item: TreeViewItem<T>) => void,\n contextMenu?: Menu) : TreeViewItem<T>\n {\n let item = new TreeViewItem(label, data, clickHandler, doubleClickHandler, contextMenu);\n item.parentWidget = this;\n this.items.push(item);\n this.element.appendChild(item.element);\n return item;\n }\n\n removeItem(item: TreeViewItem<T>) {\n let idx = this.items.indexOf(item);\n if(idx >= 0) {\n this.items.splice(idx, 1);\n this.element.removeChild(item.element);\n item.parentWidget = null;\n\n if(this._focusedItem == item) {\n this._focusedItem = null;\n }\n }\n }\n\n clear() {\n this.items = [];\n this.items.forEach(item => item.parentWidget = null);\n while(this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n }\n\n getItems() : TreeViewItem<T>[] {\n return this.items;\n }\n\n deselectAll() {\n this.items.forEach(item => item.deselect());\n }\n\n getSelectedItem() : TreeViewItem<T> {\n for(let i = 0; i < this.items.length; i++) {\n let selected = this.items[i]._getIfSelected();\n if(selected != null)\n return selected;\n }\n\n return null;\n }\n\n getFocusedItem() : TreeViewItem<T> {\n return this._focusedItem;\n }\n\n _sortFunction(a: TreeViewItem<T>, b: TreeViewItem<T>) : number {\n return (a.label.toLowerCase() > b.label.toLowerCase()) ? 1\n : ((b.label.toLowerCase() > a.label.toLowerCase()) ? -1 : 0);\n }\n\n sortItems() {\n let sortedItems = this.items.splice(0);\n sortedItems.sort(this._sortFunction);\n\n this.items = [];\n while(this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n sortedItems.forEach(item => {\n if(item.children.length > 0)\n item.sortChildren();\n this.items.push(item);\n this.element.appendChild(item.element);\n });\n }\n}\n\nclass TreeViewItem<T> extends Widget {\n children: TreeViewItem<T>[];\n label: string;\n expander: HTMLSpanElement;\n labelElement: HTMLSpanElement;\n childrenElement: HTMLDivElement;\n contextMenu?: Menu;\n parentItem?: TreeViewItem<T>;\n data: T;\n\n constructor(label: string,\n data: T,\n clickHandler?: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void,\n doubleClickHandler?: (evt: MouseEvent, item: TreeViewItem<T>) => void,\n contextMenu?: Menu) {\n super();\n this.element.classList.add(\"TreeViewItem\");\n this.children = [];\n this.label = label;\n\n this.expander = document.createElement(\"span\");\n this.expander.textContent = \"›\";\n this.expander.classList.add(\"expander\");\n this.element.appendChild(this.expander);\n \n this.labelElement = document.createElement(\"span\");\n this.labelElement.textContent = label;\n this.labelElement.className = \"label\";\n this.element.appendChild(this.labelElement);\n\n this.childrenElement = document.createElement(\"div\");\n this.childrenElement.classList.add(\"children\");\n this.element.appendChild(this.childrenElement);\n this.contextMenu = contextMenu;\n this.parentItem = null;\n this.data = data;\n\n this.labelElement.draggable = true;\n\n this.labelElement.ondblclick = evt => {\n if(doubleClickHandler) {\n doubleClickHandler(evt, this);\n }\n else {\n if(this.children.length > 0) {\n this.element.classList.toggle(\"expanded\");\n }\n }\n evt.stopPropagation();\n };\n this.expander.onclick = evt => {\n if(this.children.length > 0) {\n this.element.classList.toggle(\"expanded\");\n }\n evt.stopPropagation();\n };\n\n if(contextMenu) {\n this.labelElement.oncontextmenu = evt => {\n this.setFocus(true);\n contextMenu.show(evt.clientX, evt.clientY);\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n else {\n this.labelElement.oncontextmenu = evt => {\n this.setFocus(true);\n evt.stopPropagation();\n }\n }\n\n this.labelElement.onclick = evt => {\n let oldSelection = (this.parentWidget as TreeView<T>).getSelectedItem();\n this.select();\n if(clickHandler)\n clickHandler(evt, this, oldSelection);\n if((this.parentWidget as TreeView<T>).clickHandler)\n (this.parentWidget as TreeView<T>).clickHandler(evt, this, oldSelection);\n };\n }\n\n addChildItem(item: TreeViewItem<T>) {\n item.parentItem = this;\n this.children.push(item);\n if(this.childrenElement.firstChild)\n this.childrenElement.insertBefore(item.element, this.childrenElement.firstChild);\n else\n this.childrenElement.appendChild(item.element);\n this.element.classList.add(\"expanded\");\n this.element.classList.add(\"expandable\");\n item.parentWidget = this.parentWidget;\n return item;\n }\n\n addChild(label: string,\n data: T,\n clickHandler?: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void,\n doubleClickHandler?: (evt: MouseEvent, item: TreeViewItem<T>) => void,\n contextMenu?: Menu)\n {\n let item = new TreeViewItem(label, data, clickHandler, doubleClickHandler, contextMenu)\n return this.addChildItem(item);\n }\n\n removeChild(child: TreeViewItem<T>) {\n let idx = this.children.indexOf(child);\n if(idx >= 0) {\n child.setFocus(false);\n\n this.childrenElement.removeChild(child.element);\n this.children.splice(idx, 1);\n child.parentWidget = null;\n child.parentItem = null;\n\n if(this.children.length == 0) {\n this.element.classList.remove(\"expanded\");\n this.element.classList.remove(\"expandable\");\n }\n }\n }\n\n sortChildren() {\n let sortedItems = this.children.splice(0);\n sortedItems.sort((this.parentWidget as TreeView<T>)._sortFunction);\n\n this.children = [];\n while(this.childrenElement.firstChild) {\n this.childrenElement.removeChild(this.childrenElement.firstChild);\n }\n sortedItems.forEach(item => {\n if(item.children.length > 0)\n item.sortChildren();\n this.children.push(item);\n this.childrenElement.appendChild(item.element);\n });\n }\n\n deselect() {\n this.labelElement.classList.remove(\"selected\");\n this.children.forEach(child => {\n child.deselect();\n });\n }\n\n select() {\n (this.parentWidget as TreeView<T>).deselectAll();\n this.labelElement.classList.add(\"selected\");\n }\n \n setFocus(hasFocus: boolean) {\n if(hasFocus) {\n if((this.parentWidget as TreeView<T>)._focusedItem) {\n (this.parentWidget as TreeView<T>)._focusedItem.setFocus(false);\n }\n (this.parentWidget as TreeView<T>)._focusedItem = this;\n this.element.classList.add(\"focused\");\n }\n else {\n this.element.classList.remove(\"focused\");\n\n if(this.contextMenu)\n this.contextMenu.hide();\n\n if(this.parentWidget && (this.parentWidget as TreeView<T>)._focusedItem == this) {\n (this.parentWidget as TreeView<T>)._focusedItem = null;\n }\n }\n }\n\n _getIfSelected() : TreeViewItem<T> {\n if(this.labelElement.classList.contains(\"selected\"))\n return this;\n\n for(let i = 0; i < this.children.length; i++) {\n let selected = this.children[i]._getIfSelected();\n if(selected != null)\n return selected;\n }\n\n return null;\n }\n}\n\nexport { TreeView, TreeViewItem }","import { MenuBar } from './MenuBar';\nimport { Widget } from './Widget';\nimport { Vector2 } from './Math';\n\nclass MenuEntry {\n name: string;\n element: HTMLElement;\n\n constructor(name: string, element: HTMLElement) {\n this.name = name;\n this.element = element;\n }\n}\n\nclass SubMenuEntry extends MenuEntry {\n menu: Menu;\n\n constructor(name: string, element: HTMLElement, menu: Menu) {\n super(name, element);\n this.menu = menu;\n }\n}\nclass SeparatorEntry extends MenuEntry {\n menu: Menu;\n\n constructor(element: HTMLElement) {\n super(\"-\", element);\n }\n}\n\nclass ClickableMenuEntry extends MenuEntry {\n canExecuteCallback: () => boolean;\n clickCallback: () => void;\n\n constructor(name: string, element: HTMLElement, clickCallback: () => void, canExecuteCallback: () => boolean) {\n super(name, element);\n this.clickCallback = clickCallback;\n this.canExecuteCallback = canExecuteCallback;\n }\n}\n\nclass Menu extends Widget {\n name: string;\n private _submenus: Menu[];\n menuEntryPanel: HTMLDivElement;\n _menuEntries: MenuEntry[];\n private _x: number;\n private _y: number;\n\n constructor(name: string) {\n super();\n this.element.classList.add(\"Menu\");\n this.name = name;\n this.element.textContent = name;\n this._submenus = [];\n this._menuEntries = [];\n\n this.menuEntryPanel = document.createElement(\"div\");\n this.menuEntryPanel.className = \"MenuContent\";\n this._x = -1;\n this._y = -1;\n\n this.element.onmouseenter = () => {\n let menuBar = this.getParentMenuBar();\n if(menuBar) {\n if(menuBar.activeMenu != null) {\n menuBar.activeMenu.hide();\n this.show();\n }\n }\n };\n\n this.element.onclick = () => {\n if(this.isShown()) {\n this.hide();\n }\n else {\n let menuBar = this.getParentMenuBar();\n if(menuBar) {\n menuBar.hideMenus();\n }\n this.show();\n }\n };\n\n document.addEventListener(\"click\", (evt: MouseEvent) => {\n let target: HTMLElement = null;\n if (evt.target instanceof HTMLElement)\n target = evt.target as HTMLElement;\n\n let parentMenu = this.getParentMenu();\n\n if(!this.menuEntryPanel.contains(target)\n && !this.element.contains(target)\n && (parentMenu == null // special case for submenus\n || !parentMenu.menuEntryPanel.contains(target))\n && this.isShown())\n {\n this.hide();\n }\n });\n }\n\n getParentMenuBar() : MenuBar {\n if(this.parentWidget != null && this.parentWidget.element.classList.contains(\"MenuBar\"))\n return this.parentWidget as MenuBar;\n return null;\n }\n\n getParentMenu() : Menu {\n if(this.parentWidget != null && this.parentWidget.element.classList.contains(\"Menu\"))\n return this.parentWidget as Menu;\n return null;\n }\n\n isShown() {\n return this.menuEntryPanel.isConnected\n && this.menuEntryPanel.style.display != undefined\n && this.menuEntryPanel.style.display != \"\"\n && this.menuEntryPanel.style.display != \"none\";\n }\n\n getPos() : Vector2 {\n let parentMenu = this.getParentMenu();\n if(parentMenu) {\n return parentMenu.getPos();\n }\n if(this.isShown()) {\n let box = this.menuEntryPanel.getBoundingClientRect();\n return new Vector2(box.left, box.top);\n }\n else {\n return new Vector2(this._x, this._y);\n }\n }\n\n show(x?: number, y?: number) {\n // check which entries are executable\n for(let i = 0; i < this.menuEntryPanel.children.length; i++) {\n if(this._menuEntries[i] instanceof ClickableMenuEntry) { \n if((this._menuEntries[i] as ClickableMenuEntry).canExecuteCallback())\n this.menuEntryPanel.children[i].classList.remove(\"disabled\");\n else\n this.menuEntryPanel.children[i].classList.add(\"disabled\");\n }\n }\n\n // if position is provided\n if(x != undefined && y != undefined) {\n if(!this.element.parentNode) {\n document.body.appendChild(this.menuEntryPanel);\n }\n this.menuEntryPanel.style.left = x + \"px\";\n this.menuEntryPanel.style.top = y + \"px\";\n this.menuEntryPanel.style.display = \"inline-block\";\n this.menuEntryPanel.style.position = \"fixed\";\n }\n // if no position is provided\n else {\n this.menuEntryPanel.style.left = this.element.getBoundingClientRect().left + \"px\";\n this.menuEntryPanel.style.display = \"inline-block\";\n \n let parentMenuBar = this.getParentMenuBar();\n if(parentMenuBar) {\n parentMenuBar.activeMenu = this;\n }\n }\n\n let box = this.menuEntryPanel.getBoundingClientRect();\n this._x = box.left;\n this._y = box.top;\n }\n\n hide() {\n this._submenus.forEach(sub => sub.hide());\n let parentMenuBar = this.getParentMenuBar();\n if(parentMenuBar) {\n if(parentMenuBar.activeMenu == this) {\n parentMenuBar.activeMenu = null;\n }\n }\n\n if(this.menuEntryPanel.parentElement == document.body) {\n document.body.removeChild(this.menuEntryPanel);\n }\n else {\n this.menuEntryPanel.style.display = \"none\";\n }\n }\n\n addEntry(title: string, callback: () => void, canExecuteCallback?: () => boolean) {\n var entry = document.createElement(\"div\");\n canExecuteCallback = canExecuteCallback || (() => true);\n entry.className = \"entry\";\n entry.textContent = title;\n entry.onclick = () => {\n this.hide();\n callback();\n };\n this.menuEntryPanel.appendChild(entry);\n this._menuEntries.push(new ClickableMenuEntry(title, entry, callback, canExecuteCallback));\n }\n\n addSubMenu(menu: Menu) {\n this._submenus.push(menu);\n var entry = document.createElement(\"div\");\n entry.className = \"entry submenu\";\n entry.textContent = menu.name;\n entry.onclick = () => {\n let rect = entry.getBoundingClientRect();\n this._submenus.forEach(sub => sub.hide());\n menu.show(Math.floor(rect.left + rect.width), rect.y);\n };\n menu.parentWidget = this;\n this.menuEntryPanel.appendChild(entry);\n this._menuEntries.push(new SubMenuEntry(menu.name, entry, menu));\n }\n\n addSeparator() {\n var separator = document.createElement(\"div\");\n separator.className = \"separator\";\n this.menuEntryPanel.appendChild(separator);\n this._menuEntries.push(new SeparatorEntry(separator));\n }\n\n clearEntries() {\n this._submenus.forEach(submenu => {\n submenu.parentWidget = null;\n });\n this._submenus = [];\n\n while(this.menuEntryPanel.firstChild)\n this.menuEntryPanel.removeChild(this.menuEntryPanel.firstChild);\n }\n}\n\nexport { Menu }","import { Widget } from './Widget';\nimport { Menu } from './Menu';\n\nclass MenuBar extends Widget {\n menus: Menu[];\n activeMenu?: Menu;\n\n constructor() {\n super();\n this.element.classList.add(\"MenuBar\");\n this.menus = [];\n this.activeMenu = null;\n }\n\n addMenu(menu: Menu) {\n if(menu instanceof Menu) {\n this.menus.push(menu);\n this.element.appendChild(menu.element);\n this.element.appendChild(menu.menuEntryPanel);\n menu.parentWidget = this;\n }\n else {\n let error = { \n name: \"Argument Error\", \n level: \"Error\", \n message: \"The argument 'menu' must be of type Menu\",\n toString: function(){return this.name + \": \" + this.message;} \n }; \n console.error(error);\n throw error;\n }\n }\n\n hideMenus() {\n this.activeMenu = null;\n this.menus.forEach(menu => {\n menu.hide();\n });\n }\n}\n\nexport { MenuBar }","import { Widget } from './Widget';\n\nclass Label extends Widget {\n constructor(text: string) {\n super();\n this.element.classList.add(\"Label\");\n this.element.textContent = text;\n }\n \n setText(text: string) {\n this.element.textContent = text;\n }\n \n getText() {\n return this.element.textContent;\n }\n}\n\nexport { Label }","import { Widget } from './Widget';\n\nclass Image extends Widget {\n constructor(src: string, width?: number, height?: number) {\n super(document.createElement(\"img\"));\n this.element.classList.add(\"Image\");\n (this.element as HTMLImageElement).src = src;\n \n if(width != undefined) {\n this.element.style.width = width + \"px\";\n }\n if(height != undefined) {\n this.element.style.height = height + \"px\";\n }\n }\n \n setSource(src: string) {\n (this.element as HTMLImageElement).src = src;\n }\n \n getSource() {\n return (this.element as HTMLImageElement).src;\n }\n}\n\nexport { Image }","enum UdoableActionCategory {\n ModifyData = 1, // should be set, when data is actually modified (default)\n ModifyView = 2 // should be set when an action is undoable, even if it doesn't mean that the actual data was changed (e.g., selecting an item in a list)\n};\n\nclass UndoHistory {\n private _history: any[];\n private _currentIndex: number;\n private _idCounter: number;\n private _onChangedCallback: (history: UndoableCommand[], index: number) => void;\n\n constructor(onChangedCallback?: (history: UndoableCommand[], index: number) => void) {\n this._history = [];\n this._currentIndex = -1;\n this._idCounter = -1;\n this._onChangedCallback = onChangedCallback || ((history, index) => {});\n }\n\n add(cmd: UndoableCommand) {\n this._currentIndex++;\n let deleteCount = this._history.length - this._currentIndex;\n this._history.splice(this._currentIndex, deleteCount, cmd);\n cmd.id = ++this._idCounter;\n\n this._onChangedCallback(this._history.slice(), this._currentIndex);\n }\n\n undo() {\n if(!this.canUndo())\n return;\n let cmd = this._history[this._currentIndex];\n this._currentIndex--;\n cmd.undo();\n this._onChangedCallback(this._history.slice(), this._currentIndex);\n }\n\n redo() {\n if(!this.canRedo())\n return;\n this._currentIndex++;\n let cmd = this._history[this._currentIndex];\n cmd.do();\n this._onChangedCallback(this._history.slice(), this._currentIndex);\n }\n\n canUndo() : boolean {\n return this._currentIndex >= 0;\n }\n\n canRedo() : boolean {\n return this._currentIndex < this._history.length - 1;\n }\n\n wasDataModifiedSinceVersion(versionId: number) : boolean {\n if(this._currentIndex < 0 || this._history[this._currentIndex].id == versionId)\n return false;\n\n // negative target index means that we look until the very beginning of the undo history...\n let targetIndex = this._history.findIndex(item => item.id == versionId);\n let step = targetIndex < this._currentIndex ? -1 : 1;\n for(let i = this._currentIndex; i != targetIndex; i += step) {\n if(this._history[i].wasDataModified())\n return true;\n }\n return false;\n }\n\n getCurrentCommand() : UndoableCommand {\n return this._history[this._currentIndex];\n }\n}\n\nclass UndoableCommand {\n id: number;\n title: string;\n do: () => void;\n undo: () => void;\n category: UdoableActionCategory;\n\n constructor(title: string, doAction: () => void, undoAction: () => void, category : UdoableActionCategory) {\n this.id = -1;\n this.title = title;\n this.do = doAction;\n this.undo = undoAction;\n this.category = category || UdoableActionCategory.ModifyData;\n }\n\n wasDataModified() : boolean {\n return this.category == UdoableActionCategory.ModifyData;\n }\n}\n\nexport { UndoHistory, UndoableCommand, UdoableActionCategory }\n","import { Widget } from './Widget';\nimport { Dialog } from './Dialog';\n\nclass MessageDialogButton\n{\n label: string;\n callback: (dlg: Dialog) => void;\n isContinue: boolean;\n isCancel: boolean;\n\n constructor(label: string,\n callback: (dlg: Dialog) => void,\n isContinue: boolean,\n isCancel: boolean) {\n this.label = label;\n this.callback = callback;\n this.isContinue = isContinue;\n this.isCancel = isCancel;\n }\n}\n\nclass MessageDialog extends Dialog {\n private _cancelOption: HTMLButtonElement;\n private _continueOption: HTMLButtonElement;\n private _boundKeyEvent: (evt: KeyboardEvent) => void;\n\n constructor(title: string, text: string, buttons: MessageDialogButton[], hasCloseButton: boolean) {\n let contentWidget = new Widget();\n let contentElement = contentWidget.element;\n super(title, contentWidget, hasCloseButton);\n\n let textElement = document.createElement(\"div\");\n textElement.textContent = text;\n textElement.className = \"text\";\n \n let buttonsElement = document.createElement(\"div\");\n buttonsElement.className = \"buttons\";\n\n this._cancelOption = null;\n this._continueOption = null;\n\n buttons.forEach(button => {\n let buttonElement = document.createElement(\"button\");\n buttonElement.textContent = button.label;\n if(button.isCancel) {\n this._cancelOption = buttonElement;\n }\n if(button.isContinue) {\n this._continueOption = buttonElement;\n }\n buttonElement.onclick = evt => {\n this.hide();\n\n if(button.callback)\n button.callback(this);\n }\n buttonsElement.appendChild(buttonElement);\n });\n \n contentElement.appendChild(textElement);\n contentElement.appendChild(buttonsElement);\n\n this._boundKeyEvent = null;\n }\n\n showModal() {\n super.showModal();\n this._boundKeyEvent = evt => {\n if(evt.key == \"Escape\" && this._cancelOption) {\n this._clickButton(this._cancelOption);\n }\n else if(evt.key == \"Enter\" && this._continueOption) {\n this._clickButton(this._continueOption);\n }\n }\n window.addEventListener(\"keydown\", this._boundKeyEvent);\n }\n\n _clickButton(button: HTMLButtonElement) {\n var clickEvent = new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n });\n button.dispatchEvent(clickEvent);\n }\n\n hide() {\n super.hide();\n if(this._boundKeyEvent)\n window.removeEventListener(\"keydown\", this._boundKeyEvent);\n this._boundKeyEvent = null;\n }\n}\n\nclass OkMessageDialog extends MessageDialog {\n constructor(title: string, text: string, hasCloseButton: boolean, callback: (dlg: Dialog) => void) {\n super(title, text, [new MessageDialogButton(\"OK\", callback, true, true)], hasCloseButton);\n }\n}\n\n\nclass InputDialog extends Dialog {\n inputElement: HTMLInputElement;\n private _cancelOption: HTMLButtonElement;\n private _continueOption: HTMLButtonElement;\n private _boundKeyEvent: (evt: KeyboardEvent) => void;\n\n constructor(title: string, text: string, value: string, buttons: MessageDialogButton[], hasCloseButton: boolean) {\n let contentWidget = new Widget();\n let contentElement = contentWidget.element;\n super(title, contentWidget, hasCloseButton);\n let textElement = document.createElement(\"div\");\n textElement.textContent = text;\n textElement.className = \"text\";\n\n this.inputElement = document.createElement(\"input\");\n this.inputElement.value = value;\n this.inputElement.type = \"text\";\n\n let buttonsElement = document.createElement(\"div\");\n buttonsElement.className = \"buttons\";\n\n this._cancelOption = null;\n this._continueOption = null;\n\n buttons.forEach(button => {\n let buttonElement = document.createElement(\"button\");\n buttonElement.textContent = button.label;\n if(button.isCancel) {\n this._cancelOption = buttonElement;\n }\n if(button.isContinue) {\n this._continueOption = buttonElement;\n }\n buttonElement.onclick = _ => {\n this.hide();\n\n if(button.callback)\n button.callback(this);\n }\n buttonsElement.appendChild(buttonElement);\n });\n \n contentElement.appendChild(textElement);\n contentElement.appendChild(this.inputElement);\n contentElement.appendChild(buttonsElement);\n \n this.element.className = \"Dialog\";\n this.element.classList.add(\"InputDialog\");\n this._boundKeyEvent = null;\n }\n\n getValue() {\n return this.inputElement.value;\n }\n\n showModal() {\n super.showModal();\n this.inputElement.focus();\n this.inputElement.select();\n this._boundKeyEvent = evt => {\n if(evt.key == \"Escape\" && this._cancelOption) {\n this._clickButton(this._cancelOption);\n }\n else if(evt.key == \"Enter\" && this._continueOption) {\n this._clickButton(this._continueOption);\n }\n }\n window.addEventListener(\"keydown\", this._boundKeyEvent);\n }\n\n _clickButton(button: HTMLButtonElement) {\n var clickEvent = new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n });\n button.dispatchEvent(clickEvent);\n }\n\n hide() {\n super.hide();\n if(this._boundKeyEvent)\n window.removeEventListener(\"keydown\", this._boundKeyEvent);\n this._boundKeyEvent = null;\n }\n}\n\nexport { MessageDialog, OkMessageDialog, InputDialog, MessageDialogButton }","import { Widget } from './Widget';\nimport { Vector2 } from './Math';\nimport { getDragStart, Draggable, DragInfo, getClientPosFromEvent } from './dragAndDrop'\nimport { Menu } from './Menu'\nimport { UndoHistory, UndoableCommand, UdoableActionCategory } from './UndoHistory'\nimport { currentMousePos } from './dragAndDrop'\nimport { fakeClipboard, ClipboardData } from './FakeClipboard'\n\nenum DragMode {\n None = 0,\n MoveNodes = 1,\n MoveSelectedNodes = 2,\n Select = 3,\n MoveViewport\n}\n\nclass ConnectionSettingsBeforeDragging {\n fromOutput: NodePort;\n toInput: NodePort;\n\n constructor(fromOutput: NodePort, toInput: NodePort) {\n this.fromOutput = fromOutput;\n this.toInput = toInput;\n }\n}\n\nclass NodeEditorClipboardData {\n nodes: NodeClipboardData[];\n connections: NodeConnectionClipboardData[];\n\n constructor(nodes: NodeClipboardData[], connections: NodeConnectionClipboardData[]) {\n this.nodes = nodes;\n this.connections = connections;\n }\n}\n\nclass NodeConnectionClipboardData {\n fromNodeIndex: number;\n fromOutputIndex: number;\n toNodeIndex: number;\n toInputIndex: number;\n\n constructor(fromNodeIndex: number,\n fromOutputIndex: number,\n toNodeIndex: number,\n toInputIndex: number)\n {\n this.fromNodeIndex = fromNodeIndex;\n this.fromOutputIndex = fromOutputIndex;\n this.toNodeIndex = toNodeIndex;\n this.toInputIndex = toInputIndex;\n }\n}\n\nclass NodePortClipboardData {\n name: string;\n allowMultipleConnectionsForOutput: boolean;\n canConnectCheck: (other: NodePort) => boolean;\n allowMultipleConnections?: boolean;\n\n constructor(name: string,\n allowMultipleConnectionsForOutput: boolean,\n canConnectCheck: (other: NodePort) => boolean,\n allowMultipleConnections?: boolean)\n {\n this.name = name;\n this.allowMultipleConnectionsForOutput = allowMultipleConnectionsForOutput;\n this.canConnectCheck = canConnectCheck;\n this.allowMultipleConnections = allowMultipleConnections;\n }\n}\n\nexport class NodeClipboardData {\n title: string;\n inputs: NodePortClipboardData[];\n outputs: NodePortClipboardData[];\n pos: Vector2;\n data: any;\n\n constructor(title: string,\n inputs: NodePortClipboardData[],\n outputs: NodePortClipboardData[],\n pos: Vector2) {\n this.title = title;\n this.inputs = inputs;\n this.outputs = outputs;\n this.pos = pos;\n }\n}\n\nclass NodeEditorViewport {\n x: number;\n y: number;\n zoom: number;\n\n constructor(x: number, y: number, zoom: number) {\n this.x = x;\n this.y = y;\n this.zoom = zoom;\n }\n\n getPixelPos() : Vector2{\n return this.getPixelPosFromPos(0, 0);\n }\n\n getPixelPosFromPos(x: number, y: number) : Vector2 {\n return new Vector2((x - this.x) * this.zoom,\n (y - this.y) * this.zoom);\n }\n\n getPosFromPixelPos(pixelX: number, pixelY: number) : Vector2 {\n return new Vector2((pixelX / this.zoom) + this.x,\n (pixelY / this.zoom) + this.y);\n }\n}\n\nclass NodeEditor extends Widget {\n _undoHistory: UndoHistory;\n private _svg: SVGSVGElement;\n private _nodes: Node[];\n _viewport: NodeEditorViewport;\n private _scrollSpeedX: number;\n private _scrollSpeedY: number;\n _addArrowHeads: boolean;\n private _defineCtrlShortcuts: boolean;\n\n _targetInput?: NodePort;\n _targetOutput?: NodePort;\n _targetNode?: Node;\n _dragStart: Vector2;\n private _viewportDragStart: Vector2;\n _dragMode: DragMode;\n private _selectRect: HTMLDivElement;\n contextMenu: Menu;\n _draggedConnection?: NodeConnection;\n protected _hasFocus: boolean;\n _connectionSettingsBeforeDragging: ConnectionSettingsBeforeDragging;\n _selectedNodes: Node[];\n _nodeSelectedCallback: (selectedNode: Node) => void;\n _nodeDeselectedCallback: (deselectedNode: Node) => void;\n _nodeAddedCallback: (addedNode: Node) => void;\n _nodeRemovedCallback: (removedNode: Node) => void;\n _previouslySelectedNodes: any[];\n _connections: any;\n\n constructor(nodeSelectedCallback?: (selectedNode: Node) => void,\n nodeDeselectedCallback?: (deselectedNode: Node) => void,\n nodeAddedCallback?: (addedNode: Node) => void,\n nodeRemovedCallback?: (removedNode: Node) => void,\n scrollSpeedX?: number,\n scrollSpeedY?: number,\n addArrowHeads?: boolean,\n defineCtrlShortcuts?: boolean,\n undoHistory?: UndoHistory)\n {\n super();\n this.element.classList.add(\"NodeEditor\");\n\n this._undoHistory = undoHistory || new UndoHistory();\n\n this._svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this._svg.setAttributeNS(null, \"width\", \"800\");\n this._svg.setAttributeNS(null, \"height\", \"300\");\n\n let defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n let arrowHead = document.createElementNS(\"http://www.w3.org/2000/svg\", \"marker\");\n arrowHead.setAttributeNS(null, \"style\", \"overflow:visible;\");\n arrowHead.setAttributeNS(null, \"refX\", \"0.0\");\n arrowHead.setAttributeNS(null, \"refY\", \"0.0\");\n arrowHead.setAttributeNS(null, \"orient\", \"auto\");\n arrowHead.setAttributeNS(null, \"id\", \"ArrowHead\");\n\n let arrowHeadPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n arrowHeadPath.setAttributeNS(null, \"transform\", \"scale(0.7) translate(-8,-5)\");\n arrowHeadPath.setAttributeNS(null, \"d\", \"M 0 0 L 5 5 L 0 10 z\");\n arrowHead.appendChild(arrowHeadPath);\n defs.appendChild(arrowHead);\n this._svg.appendChild(defs);\n\n this.element.appendChild(this._svg);\n this._nodes = [];\n this._viewport = new NodeEditorViewport(0, 0, 1);\n this._scrollSpeedX = scrollSpeedX || 0.4;\n this._scrollSpeedY = scrollSpeedY || 0.4;\n this._addArrowHeads = addArrowHeads || addArrowHeads === undefined;\n\n this._targetInput = null;\n this._targetOutput = null;\n this._targetNode = null;\n this._defineCtrlShortcuts = defineCtrlShortcuts || defineCtrlShortcuts === undefined;\n\n this._dragStart = new Vector2(-1, 1 );\n this._viewportDragStart = new Vector2(-1, -1 );\n this._dragMode = DragMode.None;\n this._selectRect = document.createElement(\"div\");\n this._selectRect.className = \"selectRect\";\n this.element.appendChild(this._selectRect);\n this._selectRect.style.display = \"none\";\n\n this.contextMenu = new Menu(\"Node Editor\");\n this.contextMenu.addEntry(\"Cut\",\n () => this.onCut(),\n () => this.getSelectedNodes().length > 0);\n this.contextMenu.addEntry(\"Copy\",\n () => this.onCopy(),\n () => this.getSelectedNodes().length > 0);\n this.contextMenu.addEntry(\"Paste\",\n () => this.onPaste(true),\n () => this.canPaste());\n this.contextMenu.addEntry(\"Delete\",\n () => this._removeSelectedNodes(),\n () => this.getSelectedNodes().length > 0);\n\n this.element.addEventListener(\"contextmenu\", evt => {\n evt.preventDefault();\n this.contextMenu.show(evt.clientX, evt.clientY);\n return false;\n });\n\n let dragStart = getDragStart(this);\n this.element.addEventListener(\"mousedown\", evt => {\n dragStart(evt);\n\n this._nodes.forEach(node => {\n let pos = node.getPixelPos();\n node._dragEditorPixelStartX = pos.x;\n node._dragEditorPixelStartY = pos.y;\n });\n });\n\n this._draggedConnection = null;\n this._connectionSettingsBeforeDragging = null;\n this._selectedNodes = [];\n this._nodeSelectedCallback = nodeSelectedCallback; // node => {}\n this._nodeDeselectedCallback = nodeDeselectedCallback; // node => {}\n this._nodeAddedCallback = nodeAddedCallback; // node => {}\n this._nodeRemovedCallback = nodeRemovedCallback; // node => {}\n this._previouslySelectedNodes = [];\n\n this._hasFocus = false;\n window.addEventListener(\"mouseup\", evt => {\n this._hasFocus = this.element.contains(evt.target as HTMLElement);\n });\n\n window.addEventListener(\"keydown\", evt => {\n if(!this._hasFocus)\n return;\n\n if(evt.key == \"Delete\") {\n this._removeSelectedNodes();\n }\n else if(evt.key == \"0\" && evt.ctrlKey) {\n this._applyZoom(1);\n }\n\n if(this._defineCtrlShortcuts) {\n if(evt.key.toLowerCase() == \"z\" && evt.ctrlKey) {\n if(evt.shiftKey) {\n this._undoHistory.redo();\n }\n else {\n this._undoHistory.undo();\n }\n }\n else if(evt.key.toLowerCase() == \"y\" && evt.ctrlKey) {\n this._undoHistory.redo();\n }\n // copy\n else if(evt.key.toLowerCase() == \"c\" && evt.ctrlKey) {\n this.onCopy();\n }\n // cut\n else if(evt.key.toLowerCase() == \"x\" && evt.ctrlKey) {\n this.onCut();\n }\n // paste\n else if(evt.key.toLowerCase() == \"v\" && evt.ctrlKey) {\n this.onPaste(false);\n }\n else if(evt.key.toLowerCase() == \"a\" && evt.ctrlKey) {\n if(evt.shiftKey)\n this.deselectAllWithUndo();\n else\n this.selectAllWithUndo();\n\n evt.preventDefault();\n }\n }\n });\n\n this.element.addEventListener('wheel', evt => {\n evt.preventDefault();\n\n if(evt.ctrlKey) {\n this._hasFocus = true;\n let zoom = this._viewport.zoom - evt.deltaY * 0.001;\n\n // Restrict scale\n zoom = Math.min(Math.max(.125, zoom), 4);\n\n let bBox = this.element.getBoundingClientRect();\n this._applyZoom(zoom, evt.clientX - bBox.left, evt.clientY - bBox.top);\n }\n else {\n this._viewport.x += this._scrollSpeedX * evt.deltaX;\n this._viewport.y += this._scrollSpeedY * evt.deltaY;\n this._nodes.forEach(node => {\n node.update();\n });\n }\n\n return;\n\n\n });\n }\n\n // ------------------------------------------------\n\n onCopy() {\n this.copy();\n }\n\n onCut() {\n this.cut();\n }\n\n onPaste(fromContextMenu: boolean) {\n this.paste(fromContextMenu);\n }\n\n canPaste() {\n return fakeClipboard.containsData();\n }\n\n // ------------------------------------------------\n\n /// override this one to change the copy behavior (i.e. in order to not use the fake clipboard)\n overridableCopy(data: NodeEditorClipboardData) {\n fakeClipboard.set(new ClipboardData(\"NodeEditor\", new Date(), data));\n }\n\n /// override this one to change the paste behavior (i.e. in order to not use the fake clipboard)\n overridablePaste() : NodeEditorClipboardData {\n if(!fakeClipboard.containsData())\n return null;\n\n let clipboardContent = fakeClipboard.get();\n\n if(clipboardContent.type != \"NodeEditor\")\n return null;\n\n return clipboardContent.data;\n }\n\n // ------------------------------------------------\n\n // TODO: make \"NodeEditor\" as clipboard data customizable (=> not every editor should accept the contents of another one)\n\n copy() {\n if(this.getSelectedNodes().length > 0)\n this.overridableCopy(this._getNodesCopyData())\n }\n\n cut() {\n this.copy();\n this._removeSelectedNodes();\n }\n\n paste(useContextMenu: boolean) {\n let data = this.overridablePaste();\n if(!data)\n return;\n\n let box = this.element.getBoundingClientRect();\n let x;\n let y;\n if(useContextMenu) {\n let pos = this.contextMenu.getPos();\n x = pos.x - box.left;\n y = pos.y - box.top;\n }\n else {\n let mousePos = currentMousePos;\n x = mousePos.x - box.left;\n y = mousePos.y - box.top;\n }\n\n this._paste(data, new Vector2(x, y));\n }\n\n // ------------------------------------------------\n\n setFocus(hasFocus: boolean) {\n this._hasFocus = hasFocus;\n }\n\n hasFocus() : boolean {\n return this._hasFocus;\n }\n\n _applyZoom(newZoom: number, x?: number, y?: number) {\n x = x || 0;\n y = y || 0;\n let mousePosOld = this._viewport.getPosFromPixelPos(x, y);\n this._viewport.zoom = newZoom;\n let mousePosNew = this._viewport.getPosFromPixelPos(x, y);\n\n this._viewport.x = this._viewport.x + mousePosOld.x - mousePosNew.x;\n this._viewport.y = this._viewport.y + mousePosOld.y - mousePosNew.y;\n\n this.element.style.fontSize = newZoom + \"em\";\n\n this._nodes.forEach(node => {\n node.update();\n });\n }\n\n useArrowHeads(useArrowHeads: boolean) {\n this._addArrowHeads = useArrowHeads;\n for(let node of this._nodes) {\n for(let connection of node._connections) {\n connection.setUseArrowHead(useArrowHeads);\n }\n }\n }\n\n scrollSpeedX(scrollSpeedX: number) {\n this._scrollSpeedX = scrollSpeedX;\n }\n\n scrollSpeedY(scrollSpeedY: number) {\n this._scrollSpeedY = scrollSpeedY;\n }\n\n _addConnection(connection: NodeConnection) {\n if(!this._svg.contains(connection._path))\n this._svg.appendChild(connection._path);\n }\n\n _removeConnection(connection: NodeConnection) {\n if(this._svg.contains(connection._path))\n this._svg.removeChild(connection._path);\n }\n\n _removeSelectedNodes() {\n let selectedNodes = this._selectedNodes.splice(0);\n\n let cmd = new UndoableCommand(\"Delete Nodes\",\n () => {\n selectedNodes.forEach(node => {\n this.removeNode(node);\n });\n },\n () => {\n this.deselectAll();\n selectedNodes.forEach(node => {\n this.addNode(node);\n node.select();\n });\n }, UdoableActionCategory.ModifyData);\n cmd.do();\n this._undoHistory.add(cmd);\n }\n\n onAttached() {\n if(this.isAttached()) {\n this._nodes.forEach(node => {\n node.onAttached();\n });\n }\n }\n\n getSelectedNodes() {\n return this._selectedNodes;\n }\n\n clear() {\n this._nodes.slice().forEach(node => this.removeNode(node));\n }\n\n _createNodeForPaste(data: NodeClipboardData) {\n let node = new Node(data.title);\n for(let inputData of data.inputs) {\n node.addInput(inputData.name, inputData.canConnectCheck);\n }\n for(let outputData of data.outputs) {\n node.addOutput(outputData.name, outputData.canConnectCheck, outputData.allowMultipleConnections);\n }\n return node;\n }\n\n _getNodesCopyData() : NodeEditorClipboardData {\n let selectedNodes = this.getSelectedNodes();\n\n let nodesData = selectedNodes.map(node => node._copy());\n let connections = [];\n\n let i = 0;\n for(let selectedNode of selectedNodes) {\n for(let connection of selectedNode._connections) {\n if(connection._fromOutput._node == selectedNode) {\n let toNodeIndex = selectedNodes.indexOf(connection._toInput._node);\n if(toNodeIndex >= 0) {\n let connectionInfo = new NodeConnectionClipboardData(i, selectedNode._outputs.indexOf(connection._fromOutput),\n toNodeIndex, selectedNodes[toNodeIndex]._inputs.indexOf(connection._toInput));\n connections.push(connectionInfo);\n }\n }\n }\n i++;\n }\n return new NodeEditorClipboardData(nodesData, connections);\n }\n\n _paste(data: NodeEditorClipboardData, pixelPos: Vector2) {\n // add nodes\n let nodesData = data.nodes;\n let minX:number = null;\n let minY:number = null;\n for(let nodeData of nodesData) {\n if(minX == null || nodeData.pos.x < minX)\n minX = nodeData.pos.x\n if(minY == null || nodeData.pos.y < minY)\n minY = nodeData.pos.y\n }\n\n let nodesToPaste = nodesData.map((nodeData: NodeClipboardData) => {\n let node = this._createNodeForPaste(nodeData);\n node.setPixelPos((nodeData.pos.x - minX) + pixelPos.x, (nodeData.pos.y - minY) + pixelPos.y);\n return node;\n });\n\n let oldSelection = this._selectedNodes.slice(0);\n\n let pasteCmd = new UndoableCommand(nodesData.length > 1 ? \"Paste Nodes\" : \"Paste Node\",\n () => { // do\n this.deselectAll();\n\n for(let node of nodesToPaste) {\n this.addNode(node);\n node.select();\n }\n\n // add connections\n for(let connectionData of data.connections) {\n this.connect(nodesToPaste[connectionData.fromNodeIndex]._outputs[connectionData.fromOutputIndex],\n nodesToPaste[connectionData.toNodeIndex]._inputs[connectionData.toInputIndex]);\n }\n this._onNodesPasted(nodesToPaste);\n for(let node of nodesToPaste) {\n node.update();\n };\n }, // undo\n () => {\n nodesToPaste.forEach((node: Node) => this.removeNode(node));\n this.deselectAll();\n oldSelection.forEach(node => node.select());\n }, UdoableActionCategory.ModifyData);\n pasteCmd.do();\n this._undoHistory.add(pasteCmd);\n }\n\n _onNodesPasted(pastedNodes: Node[]) {\n }\n\n removeNode(node: Node) {\n node._editor = null;\n this.element.removeChild(node.element);\n node._connections.forEach(connection => {\n if(connection._fromOutput._node != node) {\n connection._fromOutput._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n }\n if(connection._toInput._node != node) {\n connection._toInput._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n }\n this._removeConnection(connection)\n });\n\n const index = this._nodes.indexOf(node);\n if (index > -1)\n this._nodes.splice(index, 1);\n\n const index2 = this._selectedNodes.indexOf(node);\n if (index2 > -1)\n this._selectedNodes.splice(index2, 1);\n\n if(this._nodeRemovedCallback) {\n this._nodeRemovedCallback(node);\n }\n }\n\n addNode(node: Node) {\n this._nodes.push(node);\n this.element.appendChild(node.element);\n node._editor = this;\n\n // re-add connections if the node was already part of this editor before\n node._connections.forEach(connection => {\n if(connection._fromOutput._node != node) {\n connection._fromOutput._node.addConnection(connection);\n }\n if(connection._toInput._node != node) {\n connection._toInput._node.addConnection(connection);\n }\n this._addConnection(connection)\n });\n\n node.onAttached();\n if(this._nodeAddedCallback) {\n this._nodeAddedCallback(node);\n }\n }\n\n addNodeWithUndo(node: Node, actionName: string) {\n let addCmd = new UndoableCommand(actionName || \"Add Node\",\n () => { // do\n this.addNode(node);\n }, // undo\n () => {\n this.removeNode(node);\n }, UdoableActionCategory.ModifyData);\n addCmd.do();\n this._undoHistory.add(addCmd);\n }\n\n getNodes() {\n return this._nodes;\n }\n\n connect(output: NodePort, input: NodePort) {\n let connection = new NodeConnection(output, input);\n output._node.addConnection(connection);\n input._node.addConnection(connection);\n this._addConnection(connection);\n }\n\n disconnect(output: NodePort, input: NodePort) {\n let connection = this._connections\n .find((conn: NodeConnection) => conn._fromOutput == output\n && conn._toInput == input);\n\n if(!connection)\n return;\n\n output._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n input._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n this._removeConnection(connection);\n }\n\n onDragStart(evt: MouseEvent | TouchEvent) {\n let mouseEvent = null;\n if(evt.type.startsWith(\"mouse\")) {\n mouseEvent = evt as MouseEvent;\n }\n\n let clientPos = getClientPosFromEvent(evt);\n\n // dragging the camera around\n if(mouseEvent === null || mouseEvent.button == 1 // middle mouse button\n || (mouseEvent.button == 0 && evt.ctrlKey)) // left mouse button and ctrl being pressed\n {\n this.element.classList.add(\"moving\");\n this._dragMode = DragMode.MoveViewport;\n let rect = this.element.getBoundingClientRect();\n this._dragStart.x = clientPos.x - rect.left;\n this._dragStart.y = clientPos.y - rect.top;\n\n this._viewportDragStart.x = this._viewport.x;\n this._viewportDragStart.y = this._viewport.y;\n return true;\n }\n // creating a selection rectangle\n else if((mouseEvent === null || mouseEvent.button == 0) && evt.target == this.element) {\n this._previouslySelectedNodes = this._selectedNodes.slice(0);\n this.deselectAll();\n let rect = this.element.getBoundingClientRect();\n this._dragStart.x = clientPos.x - rect.left;\n this._dragStart.y = clientPos.y - rect.top;\n\n this._dragMode = DragMode.Select;\n this._selectRect.style.display = \"block\";\n this._selectRect.style.left = this._dragStart.x + \"px\";\n this._selectRect.style.top = this._dragStart.y + \"px\";\n this._selectRect.style.width = \"0\";\n this._selectRect.style.height = \"0\";\n return true;\n }\n else {\n return false;\n }\n }\n\n onDragNodesStarted() {\n this.element.classList.add(\"moving\");\n this._selectedNodes.forEach(node => {\n node.onDragStarted();\n });\n }\n\n\n _scrollOutOfBounds(x: number, y: number) {\n if(x == 0 && y == 0)\n return;\n\n this._viewport.x += x * 0.2;\n this._viewport.y += y * 0.2;\n\n this._nodes.forEach(node => {\n node.update();\n });\n }\n\n _checkOutOfBoundsScroll(evt: MouseEvent | TouchEvent) {\n let x = 0;\n let y = 0;\n\n let clientPos = getClientPosFromEvent(evt);\n\n const rect = this.element.getBoundingClientRect();\n const posRelativeToElementX = clientPos.x - rect.x;\n const posRelativeToElementY = clientPos.y - rect.y;\n\n if(posRelativeToElementX < 0)\n x = posRelativeToElementX;\n else if(posRelativeToElementX > rect.width)\n x = posRelativeToElementX - rect.width;\n\n if(posRelativeToElementY < 0)\n y = posRelativeToElementY;\n else if(posRelativeToElementY > rect.height)\n y = posRelativeToElementY - rect.height;\n\n this._scrollOutOfBounds(x, y);\n }\n\n onDragging(dragInfo: DragInfo) {\n let rect = this.element.getBoundingClientRect();\n let xOffset = dragInfo.posWithOffsetToParentConsidered.x - rect.left;\n let yOffset = dragInfo.posWithOffsetToParentConsidered.y - rect.top;\n\n switch(this._dragMode) {\n case DragMode.MoveViewport:\n this._viewport.x = this._viewportDragStart.x - (xOffset / this._viewport.zoom);\n this._viewport.y = this._viewportDragStart.y - (yOffset / this._viewport.zoom);\n\n this._nodes.forEach(node => {\n node.update();\n });\n break;\n case DragMode.MoveSelectedNodes:\n this._selectedNodes.forEach(node => {\n node.setPixelPos(node._dragEditorPixelStartX + xOffset,\n node._dragEditorPixelStartY + yOffset);\n\n node._connections.forEach((connection: NodeConnection) => {\n connection.update();\n });\n });\n this._checkOutOfBoundsScroll(dragInfo.mouseEvent || dragInfo.touchEvent);\n break;\n case DragMode.Select:\n if(xOffset < 0) {\n this._selectRect.style.left = this._dragStart.x + xOffset + \"px\";\n xOffset *= -1;\n }\n else {\n this._selectRect.style.left = this._dragStart.x + \"px\";\n }\n if(yOffset < 0) {\n this._selectRect.style.top = this._dragStart.y + yOffset + \"px\";\n yOffset *= -1;\n }\n else {\n this._selectRect.style.top = this._dragStart.y + \"px\";\n }\n this._selectRect.style.width = xOffset + \"px\";\n this._selectRect.style.height = yOffset + \"px\";\n\n let selectRectBoundingBox = this._selectRect.getBoundingClientRect();\n let selectedNodes = this._nodes.map(node => {\n return {\n node: node,\n selected: this.intersection(selectRectBoundingBox, node.element.getBoundingClientRect())\n };\n });\n\n selectedNodes.forEach(selection => {\n if(selection.selected)\n selection.node.select();\n else\n selection.node.deselect();\n });\n this._checkOutOfBoundsScroll(dragInfo.mouseEvent || dragInfo.touchEvent);\n break;\n }\n }\n\n onDragEnd(evt: MouseEvent | TouchEvent) {\n this.element.classList.remove(\"moving\");\n switch(this._dragMode) {\n case DragMode.MoveViewport:\n break;\n case DragMode.MoveSelectedNodes:\n this._selectedNodes.forEach(node => node.onDragEnd(evt));\n\n let movedNodes = this._selectedNodes.map(node => {\n return {\n node: node,\n startPos: {\n x: node._dragEditorStartX,\n y: node._dragEditorStartY\n },\n endPos: {\n x: node._pos.x,\n y: node._pos.y\n }\n };\n });\n // only do this if the position actually changes\n if(!movedNodes.every(movedNode => movedNode.endPos.x == movedNode.startPos.x\n && movedNode.endPos.x == movedNode.startPos.x)) {\n let moveCmd = new UndoableCommand(this._selectedNodes.length > 1 ? \"Move Nodes\" : \"Move Node\",\n () => {\n movedNodes.forEach(element => {\n element.node.setPos(element.endPos.x, element.endPos.y);\n });\n },\n () => {\n movedNodes.forEach(element => {\n element.node.setPos(element.startPos.x, element.startPos.y);\n });\n }, UdoableActionCategory.ModifyData);\n moveCmd.do();\n this._undoHistory.add(moveCmd);\n }\n break;\n case DragMode.Select:\n this._selectRect.style.display = \"none\";\n\n let previouslySelectedNodes = this._previouslySelectedNodes;\n let selectedNodes = this._selectedNodes.slice(0);\n if(!(previouslySelectedNodes.length == 0 && selectedNodes.length == 0)) {\n let selectCmd = new UndoableCommand(selectedNodes.length == 0 ? \"Deselect All Nodes\" : \"Select Nodes\",\n () => {\n this.deselectAll();\n selectedNodes.forEach(node => node.select());\n },\n () => {\n this.deselectAll();\n previouslySelectedNodes.forEach(node => node.select());\n }, UdoableActionCategory.ModifyView);\n this._undoHistory.add(selectCmd);\n }\n break;\n }\n this._dragMode = DragMode.None;\n }\n\n intersection(rect1: DOMRect, rect2: DOMRect) {\n return !(rect1.right < rect2.left ||\n rect1.left > rect2.right ||\n rect1.bottom < rect2.top ||\n rect1.top > rect2.bottom)\n }\n\n deselectAllWithUndo() {\n let selectedNodes = this._selectedNodes.slice(0);\n let cmd = new UndoableCommand(\"Deselect All Nodes\",\n () => {\n this.deselectAll();\n },\n () => {\n this.deselectAll();\n selectedNodes.forEach(node => node.select());\n }, UdoableActionCategory.ModifyView);\n\n cmd.do();\n this._undoHistory.add(cmd);\n }\n\n selectAllWithUndo() {\n let selectedNodes = this._selectedNodes.slice(0);\n let cmd = new UndoableCommand(\"Select All Nodes\",\n () => {\n this.selectAll();\n },\n () => {\n this.deselectAll();\n selectedNodes.forEach(node => node.select());\n }, UdoableActionCategory.ModifyView);\n\n cmd.do();\n this._undoHistory.add(cmd);\n }\n\n deselectAll() {\n let selectedNodes = this._selectedNodes.slice(0); // copy array\n selectedNodes.forEach(node => {\n node.deselect();\n });\n }\n\n selectAll() {\n this._nodes.forEach(node => {\n node.select();\n });\n }\n}\n\nclass NodeConnection {\n _fromOutput: NodePort;\n _toInput: NodePort;\n _path: SVGPathElement;\n\n constructor(fromOutput: NodePort, toInput: NodePort) {\n this._fromOutput = fromOutput;\n this._toInput = toInput;\n\n this._path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._path.setAttributeNS(null, \"fill\", \"transparent\");\n this._path.setAttributeNS(null, \"stroke-width\", \"2\");\n\n if((fromOutput || toInput)._node._editor._addArrowHeads)\n this._path.setAttributeNS(null, \"style\", \"marker-end:url(#ArrowHead)\");\n\n if(this._fromOutput && this._toInput)\n this.update();\n }\n\n setUseArrowHead(useArrowHead: boolean) {\n if(useArrowHead)\n this._path.setAttributeNS(null, \"style\", \"marker-end:url(#ArrowHead)\");\n else\n this._path.setAttributeNS(null, \"style\", \"marker-end:none\");\n }\n\n update(x?: number, y?: number) {\n let fromRect;\n let toRect;\n\n if(this._fromOutput != null)\n fromRect = this._fromOutput._bullet.getBoundingClientRect();\n else\n fromRect = { left: x, top: y, width: 0, height: 0 };\n if(this._toInput != null)\n toRect = this._toInput._bullet.getBoundingClientRect();\n else\n toRect = { left: x, top: y, width: 0, height: 0 };\n\n let docRect;\n if(this._path.parentNode != null)\n docRect = this._path.parentElement.getBoundingClientRect();\n else\n docRect = { left: 0, top: 0 };\n\n let fromX = fromRect.left - docRect.left + fromRect.width * 0.5;\n let fromY = fromRect.top - docRect.top + fromRect.height * 0.5;\n let toX = toRect.left - docRect.left + toRect.width * 0.5;\n let toY = toRect.top - docRect.top + toRect.height * 0.5;\n let editor = this._fromOutput\n ? this._fromOutput._node._editor\n : this._toInput\n ? this._toInput._node._editor\n : null;\n let zoom = editor ? editor._viewport.zoom : 1;\n if(!zoom)\n zoom = 1;\n\n this._path.setAttributeNS(null, \"d\", \"M\"\n + fromX\n + \" \"\n + fromY\n + \" C \"\n + (fromX + 50 * zoom)\n + \" \"\n + fromY\n + \", \"\n + (toX - 50 * zoom)\n + \" \"\n + toY\n + \", \"\n + toX\n + \" \"\n + toY);\n }\n}\n\nexport class NodePort {\n _node: Node;\n _name: string;\n _isInput: boolean;\n _allowMultipleConnectionsForOutput: boolean;\n _canConnectCheck: (source: NodePort) => boolean;\n _bullet: HTMLSpanElement;\n\n constructor(node: Node,\n name: string,\n isInput: boolean,\n canConnectCheck?: (source: NodePort) => boolean,\n allowMultipleConnectionsForOutput?: boolean)\n {\n this._node = node;\n this._name = name;\n this._isInput = isInput;\n this._allowMultipleConnectionsForOutput = !!allowMultipleConnectionsForOutput;\n this._canConnectCheck = canConnectCheck || (source => true);\n\n if(isInput)\n this._bullet = this.createInput();\n else\n this._bullet = this.createOutput();\n }\n\n createInput() {\n let inputElement = document.createElement(\"div\");\n inputElement.className = \"input\";\n let bullet = document.createElement(\"span\");\n bullet.className = \"bullet\";\n let label = document.createElement(\"span\");\n label.className = \"label\";\n label.textContent = this._name;\n\n inputElement.appendChild(bullet);\n inputElement.appendChild(label);\n this._node._inputsElement.appendChild(inputElement);\n\n bullet.onmouseenter = evt => {\n if(!this._node._editor) return;\n\n if(this._node._editor._draggedConnection != null\n && (!this._canConnectCheck(this._node._editor._draggedConnection._fromOutput)\n || !this._node._editor._draggedConnection._fromOutput._canConnectCheck(this)))\n {\n this._node._editor._draggedConnection._path.setAttributeNS(null, \"class\", \"notConnectable\");\n }\n\n this._node._editor._targetInput = this;\n this._node._editor._targetNode = this._node;\n };\n\n bullet.onmouseleave = evt => {\n if(!this._node._editor) return;\n\n if(this._node._editor._targetInput == this)\n this._node._editor._targetInput = null;\n\n if(this._node._editor._draggedConnection) {\n this._node._editor._draggedConnection._path.setAttributeNS(null, \"class\", \"\");\n }\n };\n\n let dragStart = getDragStart(this._node._connectionDragging);\n bullet.onmousedown = evt => {\n evt.stopPropagation();\n if(this._node._editor) {\n dragStart(evt);\n let connection;\n let settings = null;\n let existingConnection = this._node._connections.find(c => c._toInput == this);\n if(existingConnection) {\n settings = new ConnectionSettingsBeforeDragging(existingConnection._fromOutput,\n existingConnection._toInput);\n connection = existingConnection;\n connection._toInput = null;\n this._node.removeConnection(connection, settings.fromOutput, settings.toInput);\n }\n else {\n connection = new NodeConnection(null, this);\n this._node.addConnection(connection);\n this._node._editor._addConnection(connection);\n }\n this._node._editor._draggedConnection = connection;\n this._node._editor._connectionSettingsBeforeDragging = settings;\n }\n };\n return bullet;\n }\n\n createOutput() {\n let outputElement = document.createElement(\"div\");\n outputElement.className = \"output\";\n let bullet = document.createElement(\"span\");\n bullet.className = \"bullet\";\n let label = document.createElement(\"span\");\n label.className = \"label\";\n label.textContent = this._name;\n\n outputElement.appendChild(label);\n outputElement.appendChild(bullet);\n this._node._outputsElement.appendChild(outputElement);\n\n bullet.onmouseenter = evt => {\n if(!this._node._editor) return;\n\n if(this._node._editor._draggedConnection != null\n && (!this._canConnectCheck(this._node._editor._draggedConnection._toInput)\n ||(this._node._editor._draggedConnection._toInput && !this._node._editor._draggedConnection._toInput._canConnectCheck(this))))\n {\n this._node._editor._draggedConnection._path.setAttributeNS(null, \"class\", \"notConnectable\");\n }\n\n this._node._editor._targetOutput = this;\n this._node._editor._targetNode = this._node;\n };\n\n bullet.onmouseleave = evt => {\n if(!this._node._editor) return;\n\n if(this._node._editor._targetOutput == this)\n this._node._editor._targetOutput = null;\n\n if(this._node._editor._draggedConnection) {\n this._node._editor._draggedConnection._path.setAttributeNS(null, \"class\", \"\");\n }\n };\n\n let dragStart = getDragStart(this._node._connectionDragging);\n bullet.onmousedown = evt => {\n evt.stopPropagation();\n if(this._node._editor) {\n dragStart(evt);\n\n let connection;\n let existingConnection = null;\n let settings = null;\n if(!this._allowMultipleConnectionsForOutput) {\n existingConnection = this._node._connections.find(c => c._fromOutput == this);\n if(existingConnection) {\n settings = {\n fromOutput: existingConnection._fromOutput,\n toInput: existingConnection._toInput\n };\n connection = existingConnection;\n connection._fromOutput = null;\n this._node.removeConnection(connection, settings.fromOutput, settings.toInput);\n }\n }\n\n if(!connection) {\n connection = new NodeConnection(this, null);\n this._node.addConnection(connection);\n this._node._editor._addConnection(connection);\n }\n this._node._editor._draggedConnection = connection;\n this._node._editor._connectionSettingsBeforeDragging = settings;\n }\n };\n\n return bullet;\n }\n\n isInput() {\n return this._isInput;\n }\n\n isOutput() {\n return !this._isInput;\n }\n}\n\nclass Node extends Widget {\n _connectionDragging: Draggable;\n private _title: HTMLDivElement;\n _pos: Vector2;\n _connections: NodeConnection[];\n _inputs: NodePort[];\n _outputs: NodePort[];\n _inputsElement: HTMLDivElement;\n _contentsElement: HTMLDivElement;\n _outputsElement: HTMLDivElement;\n _dragEditorPixelStartX: number;\n _dragEditorPixelStartY: number;\n _editor: NodeEditor;\n _dragEditorStartX: number;\n _dragEditorStartY: number;\n _wasActuallyDragged: boolean;\n\n constructor(title: string) {\n super();\n this.element.classList.add(\"Node\");\n this._title = document.createElement(\"div\");\n this.setTitle(title);\n this._title.className = \"title\";\n this.element.appendChild(this._title);\n\n let nodeBody = document.createElement(\"div\");\n\n this._pos = new Vector2(-1, -1);\n this._connections = [];\n this._inputs = [];\n this._inputsElement = document.createElement(\"div\");\n this._inputsElement.className = \"inputs\";\n nodeBody.appendChild(this._inputsElement);\n nodeBody.className = \"body\";\n\n this._contentsElement = document.createElement(\"div\");\n this._contentsElement.className = \"contents\";\n nodeBody.appendChild(this._contentsElement);\n\n\n this._outputs = [];\n this._outputsElement = document.createElement(\"div\");\n this._outputsElement.className = \"outputs\";\n nodeBody.appendChild(this._outputsElement);\n\n this.element.appendChild(nodeBody);\n\n this._dragEditorPixelStartX = 0;\n this._dragEditorPixelStartY = 0;\n this._dragEditorStartX = 0;\n this._dragEditorStartY = 0;\n this._editor = null;\n this._wasActuallyDragged = false; // only set if the node was actually moved while being dragged\n\n this._connectionDragging = new Draggable(this.element,\n (evt: MouseEvent | TouchEvent) => true, // onDragStart\n (dragInfo: DragInfo) => { // onDragging\n if(!this._editor) return;\n if(this._editor._draggedConnection) {\n this._editor._checkOutOfBoundsScroll(dragInfo.mouseEvent || dragInfo.touchEvent);\n this._editor._draggedConnection.update(dragInfo.mouseEvent?.clientX || dragInfo.touchEvent.touches[0].clientX,\n dragInfo.mouseEvent?.clientY || dragInfo.touchEvent.touches[0].clientY);\n }\n },\n (evt: MouseEvent | TouchEvent) => { // onDragEnd\n if(!this._editor) return;\n if(this._editor._draggedConnection) {\n\n let createRemoveConnectionCommand = (connectionToRemove: NodeConnection, prevSettings: ConnectionSettingsBeforeDragging) => {\n return new UndoableCommand(\"Remove Connection\",\n () => { // do\n this._removeDraggedConnection(connectionToRemove);\n },\n () => { // undo\n if(prevSettings != null) {\n connectionToRemove._fromOutput = prevSettings.fromOutput;\n connectionToRemove._toInput = prevSettings.toInput;\n }\n connectionToRemove._path.setAttributeNS(null, \"class\", \"\");\n this._editor._addConnection(connectionToRemove);\n connectionToRemove.update();\n if(connectionToRemove._fromOutput)\n connectionToRemove._fromOutput._node.addConnection(connectionToRemove)\n if(connectionToRemove._toInput)\n connectionToRemove._toInput._node.addConnection(connectionToRemove)\n }, UdoableActionCategory.ModifyData);\n }\n\n let createConnectCommand = (fromOutput: NodePort, toInput: NodePort, targetNode: Node, connectionToAdd: NodeConnection, prevSettings: ConnectionSettingsBeforeDragging, existingConnection?: NodeConnection) => {\n return new UndoableCommand(prevSettings ? \"Change Connection\" : \"Add Connection\",\n () => { // do\n if(existingConnection) {\n this._editor._removeConnection(existingConnection);\n this.removeConnection(existingConnection, existingConnection._fromOutput, existingConnection._toInput);\n targetNode.removeConnection(existingConnection, existingConnection._fromOutput, existingConnection._toInput);\n }\n\n connectionToAdd._fromOutput = fromOutput;\n connectionToAdd._toInput = toInput;\n\n // add the new connection to the editor\n this._editor._addConnection(connectionToAdd);\n this.addConnection(connectionToAdd);\n\n targetNode.addConnection(connectionToAdd);\n connectionToAdd.update();\n\n connectionToAdd._fromOutput._node._onConnectionAdded(connectionToAdd);\n connectionToAdd._toInput._node._onConnectionAdded(connectionToAdd);\n },\n () => { // undo\n if(!prevSettings) {\n // remove the added connection\n this._editor._removeConnection(connectionToAdd);\n this.removeConnection(connectionToAdd, connectionToAdd._fromOutput, connectionToAdd._toInput);\n connectionToAdd._fromOutput._node.removeConnection(connectionToAdd, connectionToAdd._fromOutput, connectionToAdd._toInput);\n connectionToAdd._toInput._node.removeConnection(connectionToAdd, connectionToAdd._fromOutput, connectionToAdd._toInput);\n }\n else {\n targetNode.removeConnection(connectionToAdd, connectionToAdd._fromOutput, connectionToAdd._toInput);\n if(prevSettings.fromOutput._node == targetNode) {\n connectionToAdd._fromOutput = prevSettings.fromOutput;\n }\n else {\n connectionToAdd._toInput = prevSettings.toInput;\n }\n\n connectionToAdd.update();\n this._onConnectionAdded(connectionToAdd);\n }\n\n if(existingConnection) {\n // re-add the removed existing connection\n targetNode.addConnection(existingConnection);\n existingConnection.update();\n connectionToAdd._fromOutput._node.update();\n connectionToAdd._toInput._node.update();\n\n connectionToAdd._fromOutput._node.addConnection(existingConnection);\n connectionToAdd._toInput._node.addConnection(existingConnection);\n connectionToAdd._fromOutput._node._onConnectionAdded(existingConnection);\n connectionToAdd._toInput._node._onConnectionAdded(existingConnection);\n }\n }, UdoableActionCategory.ModifyData);\n }\n\n\n let connect = (fromOutput: NodePort, toInput: NodePort) => {\n let prevSettings = this._editor._connectionSettingsBeforeDragging;\n\n if(!fromOutput._canConnectCheck(toInput) || !toInput._canConnectCheck(fromOutput)) {\n let connectionToRemove = this._editor._draggedConnection;\n let removeCmd = createRemoveConnectionCommand(connectionToRemove, prevSettings);\n removeCmd.do();\n this._editor._undoHistory.add(removeCmd);\n return;\n }\n\n // if a connection with the same input and output exists, remove the old one\n let existingConnection = this._connections.find(conn => conn._fromOutput == fromOutput && conn._toInput == toInput);\n\n let connectionToAdd = this._editor._draggedConnection;\n let connectCmd = createConnectCommand(fromOutput, toInput, this._editor._targetNode, connectionToAdd, prevSettings, existingConnection);\n this._editor._draggedConnection = null;\n this._editor._connectionSettingsBeforeDragging = null;\n\n connectCmd.do();\n this._editor._undoHistory.add(connectCmd);\n }\n\n\n // if the connection is drawn from an input to an output\n if(this._editor._targetInput && !this._editor._draggedConnection._toInput) {\n connect(this._editor._draggedConnection._fromOutput, this._editor._targetInput);\n }\n // if the connection is drawn from an output to an input\n else if(this._editor._targetOutput && !this._editor._draggedConnection._fromOutput) {\n connect(this._editor._targetOutput, this._editor._draggedConnection._toInput);\n }\n // if we did not hit a valid target, do not connect anything\n else {\n let connectionToRemove = this._editor._draggedConnection;\n let prevSettings = this._editor._connectionSettingsBeforeDragging;\n let removeCmd = createRemoveConnectionCommand(connectionToRemove, prevSettings);\n removeCmd.do();\n if(prevSettings)\n this._editor._undoHistory.add(removeCmd);\n }\n }\n });\n }\n\n _mapNodePort(nodePort: NodePort) : NodePortClipboardData {\n return {\n name: nodePort._name,\n allowMultipleConnectionsForOutput: nodePort._allowMultipleConnectionsForOutput,\n canConnectCheck: nodePort._canConnectCheck\n };\n }\n\n _copy() {\n return new NodeClipboardData(this.getTitle(),\n this._inputs.map(nodePort => this._mapNodePort(nodePort)),\n this._outputs.map(nodePort => this._mapNodePort(nodePort)),\n this.getPos());\n }\n\n _onConnectionAdded(connection: NodeConnection) {\n }\n\n _onConnectionRemoved(connection: NodeConnection, fromOutput: NodePort, toInput: NodePort) {\n }\n\n _removeDraggedConnection(connection: NodeConnection) {\n if(connection._fromOutput)\n connection._fromOutput._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n if(connection._toInput)\n connection._toInput._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n this._editor._removeConnection(connection);\n connection = null;\n this._editor._draggedConnection = null;\n this._editor._connectionSettingsBeforeDragging = null;\n }\n\n onAttached() {\n if(this.isAttached()) {\n this._connections.forEach(connection => {\n connection.update();\n });\n\n if(this._pos.x == undefined) {\n let viewport = this._getViewport();\n this._pos.x = viewport.getPosFromPixelPos(parseInt(this.element.style.left), 0).x;\n }\n if(this._pos.y == undefined) {\n let viewport = this._getViewport();\n this._pos.y = viewport.getPosFromPixelPos(0, parseInt(this.element.style.top)).y;\n }\n this.update();\n\n this._title.addEventListener(\"mousedown\", getDragStart(this._editor,\n (editor, evt) => {\n if(this.onDragStart(evt)) {\n this._editor.onDragNodesStarted();\n return true;\n }\n return false;\n }));\n }\n }\n\n _getViewport() {\n return this._editor ? this._editor._viewport : null;\n }\n\n setPixelPos(x: number, y: number) {\n let viewport = this._getViewport();\n\n this.element.style.left = x + \"px\";\n this.element.style.top = y + \"px\";\n\n if(!viewport) { // if the node is not yet connected, we must calculate its position afterwards\n this._pos.x = undefined;\n this._pos.y = undefined;\n }\n else {\n let pos = viewport.getPosFromPixelPos(x, y);\n this._pos.x = pos.x;\n this._pos.y = pos.y;\n }\n }\n\n getPixelPos() : Vector2 {\n let viewport = this._getViewport();\n if(!viewport)\n return null;\n return viewport.getPixelPosFromPos(this._pos.x, this._pos.y);\n }\n\n setPos(x: number, y: number) {\n this._pos.x = x;\n this._pos.y = y;\n\n this.update();\n }\n\n getPos() : Vector2 {\n return new Vector2(this._pos.x, this._pos.y);\n }\n\n getTitle() : string {\n return this._title.textContent;\n }\n\n setTitle(title: string) {\n this._title.textContent = title;\n }\n\n // canConnectCheck: input / output => bool\n // can't connect if false is returned\n addInput(name: string, canConnectCheck?: (other: NodePort) => boolean) : NodePort {\n let input = new NodePort(this, name, true, canConnectCheck);\n this._inputs.push(input);\n return input;\n }\n\n addOutput(name: string, canConnectCheck?: (other: NodePort) => boolean, allowMultipleConnections?: boolean) : NodePort {\n let output = new NodePort(this, name, false, canConnectCheck, allowMultipleConnections);\n this._outputs.push(output);\n return output;\n }\n\n addConnection(nodeConnection: NodeConnection) {\n if(!this._connections.includes(nodeConnection))\n this._connections.push(nodeConnection);\n }\n\n removeConnection(nodeConnection: NodeConnection, fromOutput: NodePort, toInput: NodePort) {\n const index = this._connections.indexOf(nodeConnection);\n if (index > -1) {\n this._connections.splice(index, 1);\n }\n\n this._onConnectionRemoved(nodeConnection, fromOutput, toInput);\n }\n\n onDragStart(evt: MouseEvent | TouchEvent) {\n let mouseEvent = null;\n if(evt.type.startsWith(\"mouse\"))\n mouseEvent = evt as MouseEvent;\n\n if((mouseEvent == null || mouseEvent.button == 0 || mouseEvent.button == 2) && !this.isSelected())\n this.selectSingle();\n\n // only being dragged and selected with left mouse button\n return mouseEvent == null || mouseEvent.button == 0;\n }\n\n onDragStarted() {\n let pos = this.getPixelPos();\n this._dragEditorPixelStartX = pos.x;\n this._dragEditorPixelStartY = pos.y;\n\n this._dragEditorStartX = this._pos.x;\n this._dragEditorStartY = this._pos.y;\n\n this._editor._dragMode = DragMode.MoveSelectedNodes;\n }\n\n onDragEnd(evt: MouseEvent | TouchEvent) {\n super.onDragEnd(evt);\n this._wasActuallyDragged = false;\n }\n\n isSelected() {\n return this.element.classList.contains(\"selected\");\n }\n\n select() {\n if(this._editor._selectedNodes.indexOf(this) > -1)\n return;\n\n this._editor._selectedNodes.push(this);\n this.element.classList.add(\"selected\");\n\n if(this._editor._nodeSelectedCallback) {\n this._editor._nodeSelectedCallback(this);\n }\n }\n\n deselect() {\n if(this._editor._selectedNodes.indexOf(this) < 0)\n return;\n\n this._editor._selectedNodes.splice(this._editor._selectedNodes.indexOf(this), 1);\n this.element.classList.remove(\"selected\");\n\n if(this._editor._nodeDeselectedCallback) {\n this._editor._nodeDeselectedCallback(this);\n }\n }\n\n selectSingle() {\n let selectedNodes = this._editor._selectedNodes.slice(0);\n let cmd = new UndoableCommand(\"Select Node\",\n () => {\n this._editor.deselectAll();\n this.select();\n },\n () => {\n this._editor.deselectAll();\n selectedNodes.forEach(node => node.select());\n }, UdoableActionCategory.ModifyView);\n\n cmd.do();\n this._editor._undoHistory.add(cmd);\n }\n\n update() {\n let pixelPos = this.getPixelPos();\n\n if(!pixelPos)\n return;\n\n this.element.style.left = pixelPos.x + \"px\";\n this.element.style.top = pixelPos.y + \"px\";\n this._connections.forEach(connection => {\n connection.update();\n });\n }\n}\n\nexport { NodeEditor, Node, NodeConnection }","class FakeClipboard {\n _data: ClipboardData;\n\n constructor() {\n this._data = null;\n }\n\n set(data: ClipboardData) {\n this._data = data;\n }\n\n clear() {\n this._data = null;\n }\n\n get() {\n return this._data;\n }\n\n containsData() {\n return this._data != null;\n }\n}\n\nclass ClipboardData {\n type: string;\n timestamp: Date;\n data: any;\n constructor(type: string, timestamp: Date, data: any) {\n this.type = type;\n this.timestamp = timestamp;\n this.data = data;\n }\n}\n\nlet fakeClipboard = new FakeClipboard();\n\nexport { fakeClipboard, FakeClipboard, ClipboardData }\n"],"names":["root","factory","exports","module","define","amd","self","___CSS_LOADER_EXPORT___","push","id","styleElement","nonce","setAttribute","stylesInDOM","getIndexByIdentifier","identifier","result","i","length","modulesToDom","list","options","idCountMap","identifiers","item","base","count","concat","indexByIdentifier","obj","css","media","sourceMap","supports","layer","references","updater","addElementStyle","byIndex","splice","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","styleSheet","cssText","firstChild","removeChild","appendChild","document","createTextNode","cssWithMappingToString","toString","this","map","content","needLayer","join","modules","dedupe","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","sourceURLs","sources","source","sourceRoot","element","createElement","setAttributes","attributes","insert","memo","style","target","styleTarget","querySelector","window","HTMLIFrameElement","contentDocument","head","e","getTarget","Error","insertStyleElement","styleTagTransform","apply","parentNode","removeStyleElement","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","nc","locals","ColorModificationMode","RAD_TO_DEGREES","Math","PI","DEGREES_TO_RAD","x","y","getAngleToOtherInRadians","other","acos","max","min","getScalarProduct","getLength","getAngleToOtherInDegrees","getRotatedInRadians","radians","cos","sin","Vector2","getRotatedInDegrees","degrees","rotateInRadians","rotateInDegrees","scale","factor","getScaled","sqrt","normalize","getNormalized","setLength","getWithLength","rectContains","rect","left","right","top","bottom","_betterModulo","number","modulus","_HEX_COLOR_REGEX","RegExp","g","b","setRgb","fromRgb","Color","fromHsl","h","s","l","rgb","_hslToRgb","color","fromRgbObject","_hueInfo","fromHsv","v","_hsvToRgb","fromHex","hex","_hexToRgb","match","parseInt","c","abs","m","round","rgbObject","fromHslObject","hslObject","fromHsvObject","hsvObject","_r","_g","_b","setHsl","setHsv","setHex","setRgbObject","setHslObject","setHsvObject","getHsl","hue","cMax","cMin","delta","lightness","saturation","getHsv","getRgb","getHex","padStart","lighten","amount","mode","hsl","FixedAmount","darken","saturate","desaturate","setSaturation","rotateHue","invert","getInverted","getComplement","output","getBlended","alpha","beta","classList","add","parentWidget","onDragStart","evt","onDragEnd","onDragging","dragInfo","posWithOffsetToParentConsidered","onAttached","isAttached","body","contains","onResize","_dragAndDrop","offsetX","offsetY","dragStartY","dragStartX","currentMousePos","getClientPosFromEvent","type","startsWith","touch","touches","clientX","clientY","mouseEvt","getDragStart","draggable","dragStartMethod","clientPos","box","getBoundingClientRect","prevTouchX","prevTouchY","stopPropagation","mouseEvent","touchEvent","posRelativeToElement","posRelativeToDragStart","movement","movementX","movementY","addEventListener","children","prependChild","child","prepend","unshift","childIndex","indexOf","Widget","ROOT","Panel","DockDirection","Orientation","title","contentWidget","hasCloseButton","attachedElement","titleElement","textContent","className","contentElement","closeButton","onclick","hide","modalElement","show","showModal","isShown","transform","onColorChanged","_onColorChanged","setColorProperty","oldColor","_color","getColor","_hueDiv","_saturationDiv","_lightnessDiv","_colorHandle","_lightnessHandle","draggingHueSat","Draggable","_onHueMove","draggingLightness","_onLightnessMove","setColor","clientHeight","_setColorInternal","_getColorFromCurrentPositions","relativePos","clientWidth","colorRect","lightnessRect","hueFactor","offsetLeft","width","satFactor","offsetTop","height","litFactor","setPositions","toFixed","color2","backgroundColor","AbstractColorPicker","_valueDiv","_svHandle","_hueHandle","draggingSatVal","_onSatValMove","draggingHue","satLitRect","hueRect","hsv","valFactor","satValRect","_zeroHueVector","_hueWheelDiv","_wheelHandle","_slHandle","_innerCircleDiv","draggingSatLit","_onSatLitMove","centerX","centerY","handleRect","vector","parentRect","offsetToParentX","slHandleRect","hueHandleRect","variableWidth","innerWidth","text","buttons","textElement","_divOutput","_textInput","colorPicker","WheelColorPicker","newColor","newHexColor","onkeyup","parsedColor","buttonsElement","_cancelOption","_continueOption","forEach","button","buttonElement","label","isCancel","isContinue","_","callback","_boundKeyEvent","_clickButton","clickEvent","MouseEvent","dispatchEvent","removeEventListener","Dialog","addOption","option","removeOption","Array","from","getSelectedValue","setSelectedValue","items","toElementFunction","onItemClick","_toElementFunction","_selectedIndex","setItems","_onItemClick","clear","_items","addItem","getItemCount","itemElement","selectItem","removeItem","removeItemAtIndex","childNodes","selectItemAtIndex","getSelectedItem","getItemAtIndex","getSelectedIndex","toStringFunction","ListBox","name","isReadOnly","fromString","compare","toLowerCase","ListViewColumn","parseFloat","columns","editValidationCallback","cellValueChangedCallback","cellDoubleClickCallback","_columns","_rows","_htmlRows","_cellValueChangedCallback","_editValidationCallback","_cellDoubleClickCallback","_headerRow","column","addColumn","fromStringColumns","areReadonly","ListView","columnName","StringListViewColumn","addStringColumn","isReadonly","columnValues","columnIndex","error","level","message","console","colHeader","nextSibling","insertBefore","setColumnReadonly","row","htmlRow","_addCellToRow","removeColumn","setColumnAtIndexReadonly","readOnly","cells","querySelectorAll","_makeEditable","removeRow","getElementsByClassName","sortByColumn","sortedRows","sort","addRow","editable","htmlCell","ondblclick","oldContent","cellContent","input","blurHandled","processChange","changed","inputContent","onblur","selectionStart","selectionEnd","focus","colNo","cell","deselectRows","oncontextmenu","selectRow","getSelectedRowIndex","getSelectedRow","rowIndex","getRow","getColumnCount","getRowCount","getColumns","changeCellValue","newValue","getRows","getColumn","renameColumn","newName","getColumnValues","setCellContent","getCellContent","clickHandler","_focusedItem","doubleClickHandler","contextMenu","TreeViewItem","idx","getItems","deselectAll","deselect","selected","_getIfSelected","getFocusedItem","_sortFunction","sortItems","sortedItems","sortChildren","expander","labelElement","childrenElement","parentItem","toggle","setFocus","preventDefault","oldSelection","select","addChildItem","addChild","hasFocus","menu","MenuEntry","clickCallback","canExecuteCallback","_submenus","_menuEntries","menuEntryPanel","_x","_y","onmouseenter","menuBar","getParentMenuBar","activeMenu","hideMenus","HTMLElement","parentMenu","getParentMenu","isConnected","display","getPos","ClickableMenuEntry","position","parentMenuBar","sub","parentElement","addEntry","entry","addSubMenu","floor","SubMenuEntry","addSeparator","separator","SeparatorEntry","clearEntries","submenu","menus","addMenu","Menu","setText","getText","src","setSource","getSource","orientationFromDirection","dockDirection","Top","Bottom","Vertical","Horizontal","fromDockPanel","dockPanel","structure","DockingStructure","dockPercentage","_dockPercentage","fromDockContainer","dockContainer","orientation","DockContainer","_dockContainers","_floatingPanels","prev","next","parent","parentOrientation","diff","prevSize","nextSize","newPrevSize","newNextSize","_layoutChildren","separatorBefore","separatorAfter","_setOrientation","getFloatingPanels","panel","getDockPanelAtPoint","DockPanel","childAffected","getDockingStructure","setChildPercentages","percentages","_dockRelative","relativeTo","percentage","Dockable","prevToSeparator","nextToSeparator","DockSeparator","_dock","neighbor","_wrapChildren","newContainer","childPercentages","existingChild","slice","undock","dock","Right","Left","_subdivide","relativeIndex","dockRelativeTo","targetOrientation","dockTarget","Inside","warn","Float","before","previousElementSibling","after","nextElementSibling","separators","filter","separatorIndex","childWidth","childHeight","_dragged","_dockOverlay","_dockTarget","_dockTargetDirection","close","resizeEW","resizeNS","resizeDiag","_resizingHorizontally","_resizingVertically","onResizeStart","indexInFloatings","isFloating","getTitle","setTitle","setContent","createDragOverlay","resizingHorizontally","resizingVertically","onResizing","findDockPanelForPoint","targetRect","float","relativeWidget","container","UdoableActionCategory","MessageDialogButton","MessageDialog","inputElement","getValue","DragMode","onChangedCallback","_history","_currentIndex","_idCounter","_onChangedCallback","history","cmd","deleteCount","undo","canUndo","redo","canRedo","do","wasDataModifiedSinceVersion","versionId","targetIndex","findIndex","step","wasDataModified","getCurrentCommand","doAction","undoAction","category","ModifyData","_data","set","containsData","timestamp","fakeClipboard","FakeClipboard","fromOutput","toInput","nodes","connections","fromNodeIndex","fromOutputIndex","toNodeIndex","toInputIndex","inputs","outputs","pos","zoom","getPixelPos","getPixelPosFromPos","getPosFromPixelPos","pixelX","pixelY","nodeSelectedCallback","nodeDeselectedCallback","nodeAddedCallback","nodeRemovedCallback","scrollSpeedX","scrollSpeedY","addArrowHeads","defineCtrlShortcuts","undoHistory","_undoHistory","UndoHistory","_svg","createElementNS","setAttributeNS","defs","arrowHead","arrowHeadPath","_nodes","_viewport","NodeEditorViewport","_scrollSpeedX","_scrollSpeedY","_addArrowHeads","_targetInput","_targetOutput","_targetNode","_defineCtrlShortcuts","_dragStart","_viewportDragStart","_dragMode","None","_selectRect","onCut","getSelectedNodes","onCopy","onPaste","canPaste","_removeSelectedNodes","dragStart","node","_dragEditorPixelStartX","_dragEditorPixelStartY","_draggedConnection","_connectionSettingsBeforeDragging","_selectedNodes","_nodeSelectedCallback","_nodeDeselectedCallback","_nodeAddedCallback","_nodeRemovedCallback","_previouslySelectedNodes","_hasFocus","ctrlKey","_applyZoom","shiftKey","deselectAllWithUndo","selectAllWithUndo","deltaY","bBox","deltaX","copy","cut","fromContextMenu","paste","overridableCopy","ClipboardData","Date","overridablePaste","clipboardContent","_getNodesCopyData","useContextMenu","mousePos","_paste","newZoom","mousePosOld","mousePosNew","fontSize","useArrowHeads","_connections","setUseArrowHead","_addConnection","connection","_path","_removeConnection","selectedNodes","UndoableCommand","removeNode","addNode","_createNodeForPaste","Node","inputData","addInput","canConnectCheck","outputData","addOutput","allowMultipleConnections","nodesData","_copy","selectedNode","_fromOutput","_node","_toInput","connectionInfo","NodeConnectionClipboardData","_outputs","_inputs","NodeEditorClipboardData","pixelPos","minX","minY","nodeData","nodesToPaste","setPixelPos","pasteCmd","connectionData","connect","_onNodesPasted","pastedNodes","_editor","removeConnection","index2","addConnection","addNodeWithUndo","actionName","addCmd","getNodes","NodeConnection","disconnect","find","conn","MoveViewport","Select","onDragNodesStarted","onDragStarted","_scrollOutOfBounds","_checkOutOfBoundsScroll","posRelativeToElementX","posRelativeToElementY","xOffset","yOffset","MoveSelectedNodes","intersection","selection","startPos","_dragEditorStartX","_dragEditorStartY","endPos","_pos","every","movedNode","moveCmd","setPos","selectCmd","ModifyView","rect1","rect2","selectAll","useArrowHead","fromRect","toRect","docRect","_bullet","fromX","fromY","toX","toY","editor","isInput","allowMultipleConnectionsForOutput","_name","_isInput","_allowMultipleConnectionsForOutput","_canConnectCheck","createInput","createOutput","bullet","_inputsElement","onmouseleave","_connectionDragging","onmousedown","settings","existingConnection","ConnectionSettingsBeforeDragging","outputElement","_outputsElement","isOutput","_title","nodeBody","_contentsElement","_wasActuallyDragged","connectionToRemove","prevSettings","_removeDraggedConnection","removeCmd","connectionToAdd","connectCmd","targetNode","_onConnectionAdded","_mapNodePort","nodePort","NodeClipboardData","_onConnectionRemoved","viewport","_getViewport","NodePort","nodeConnection","includes","isSelected","selectSingle"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"tootframes.esm.js","mappings":"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","sources":["webpack://tootframes/webpack/universalModuleDefinition","webpack://tootframes/./src/style.scss","webpack://tootframes/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://tootframes/./node_modules/css-loader/dist/runtime/api.js","webpack://tootframes/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://tootframes/webpack/bootstrap","webpack://tootframes/webpack/runtime/compat get default export","webpack://tootframes/webpack/runtime/define property getters","webpack://tootframes/webpack/runtime/hasOwnProperty shorthand","webpack://tootframes/webpack/runtime/make namespace object","webpack://tootframes/webpack/runtime/nonce","webpack://tootframes/./src/style.scss?75ba","webpack://tootframes/./src/Math.ts","webpack://tootframes/./src/Color.ts","webpack://tootframes/./src/Widget.ts","webpack://tootframes/./src/dragAndDrop.ts","webpack://tootframes/./src/Panel.ts","webpack://tootframes/./src/ROOT.ts","webpack://tootframes/./src/DockContainer.ts","webpack://tootframes/./src/Dialog.ts","webpack://tootframes/./src/ColorPicker.ts","webpack://tootframes/./src/TabPanel.ts","webpack://tootframes/./src/Button.ts","webpack://tootframes/./src/Dropdown.ts","webpack://tootframes/./src/ListBox.ts","webpack://tootframes/./src/ListView.ts","webpack://tootframes/./src/TreeView.ts","webpack://tootframes/./src/Menu.ts","webpack://tootframes/./src/MenuBar.ts","webpack://tootframes/./src/Label.ts","webpack://tootframes/./src/Image.ts","webpack://tootframes/./src/UndoHistory.ts","webpack://tootframes/./src/MessageDialog.ts","webpack://tootframes/./src/NodeEditor.ts","webpack://tootframes/./src/FakeClipboard.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"tootframes\"] = factory();\n\telse\n\t\troot[\"tootframes\"] = factory();\n})(self, () => {\nreturn ","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"*{box-sizing:border-box;cursor:default;user-select:none}a{cursor:pointer;color:#c3df85;text-decoration:none}a:hover{color:#d7e6b9;text-decoration:underline}.beingDragged{opacity:.6;z-index:1000 !important}img{pointer-events:none}body{background-color:#262829;color:#dadcdd;overflow:hidden}input{border:1px solid #343738;background:#1a1d1f;color:#cad2d4;border-radius:.1em;padding:.3em .8em;outline:none;font-size:1.2em;margin-right:.2em;margin-bottom:.2em}.MenuBar{background-color:#3f4243;box-shadow:0 0 .5em rgba(0,0,0,.4666666667);border-bottom:1px solid #575c5e;width:100%;height:2.5em;position:absolute;z-index:50;top:0;left:0}.MenuBar .Icon{height:100%;padding:.4em 1em}.MenuBar .Menu{display:inline-block;padding:.6em .7em;height:100%;vertical-align:top}.MenuBar .Menu:hover{background-color:#262829}.MenuContent{display:none;position:absolute;background-color:#3f4243;box-shadow:0 0 .5em rgba(0,0,0,.4666666667);left:0;top:2.5em;min-width:6em;min-height:.5em;z-index:1000}.MenuContent>.entry{padding:.5em 2em}.MenuContent>.entry.submenu:after{content:\\\"›\\\";display:inline-block;position:absolute;right:0;margin-right:.5em}.MenuContent>.entry:hover{background-color:#262829}.MenuContent>.entry.disabled{color:#7d8488}.MenuContent>.entry.disabled:hover{background-color:#323536}.MenuContent>.separator{background-color:#575c5e;border:.4em solid #3f4243;height:.9em}.Modal{display:block;position:absolute;background-color:rgba(0,0,0,.4666666667);left:0;top:0;right:0;bottom:0}button::-moz-focus-inner{border:0}.TabPanel .TabBar .TabHeader,button,.button{background-color:#0d0e0f;outline:none;border-radius:0;border:none;color:#dadcdd;padding:.5em 2em;font-size:1em;margin-right:.2em;margin-bottom:.2em}.TabPanel .TabBar .TabHeader:focus,button:focus,.button:focus{outline:none}.TabPanel .TabBar .TabHeader:hover,button:hover,.button:hover{background-color:#1a1b1c}.TabPanel .TabBar .TabHeader:active,button:active,.button:active{background-color:#121314}.Modal{background-color:rgba(0,0,0,.4666666667);position:absolute;z-index:52;left:0;right:0;top:0;bottom:0}.Modal .Dialog{z-index:53}.text{white-space:pre-line}.Dialog{min-width:15em;max-width:80vw;min-height:5em;max-height:80vh}.Dialog,.DockPanel{position:absolute;z-index:51;top:50%;left:50%;transform:translate(-50%, -50%);background-color:#3f4243;box-shadow:0 0 .5em rgba(0,0,0,.4666666667)}.Dialog .title,.DockPanel .title{width:100%;text-align:center;padding:.5em;background-color:#575c5e;border-bottom:1px solid #707578}.Dialog .title .closeButton,.DockPanel .title .closeButton{padding:.2em;width:2em;height:2em;float:right;margin-top:-0.15em;margin-right:-0.15em;background-color:#323536}.Dialog .title .closeButton:hover,.DockPanel .title .closeButton:hover{background-color:#3f4243}.Dialog .content,.DockPanel .content{padding:.8em 1.5em;position:absolute}.Dialog .content.w3term,.DockPanel .content.w3term{height:100%}.Dialog .buttons,.DockPanel .buttons{padding:.8em 1.5em;text-align:center}.Dialog .content,.Dialog .Panel.content{position:static;padding:.8em 1.5em}.InputDialog input{width:100%}.Label{user-select:text}.DockContainer>*{overflow:hidden;position:absolute}.DockContainer.horizontal>*{display:inline-block}.DockContainer.horizontal>*.DockSeparator{width:3px;height:100%;background-color:#0d0e0f;cursor:ew-resize}.DockContainer.vertical>*{display:block;clear:both}.DockContainer.vertical>*.DockSeparator{width:100%;height:3px;background-color:#0d0e0f;cursor:ns-resize}.DockContainer>.DockSeparator:hover{background-color:#1a1b1c}.DockPanel{transform:none;max-width:none;max-height:none;background-color:#262829}.DockPanel .title{text-align:left;padding:.1em .5em;font-size:.9em;background-color:#1a1b1c;border-bottom:1px solid #121314}.DockPanel .title .closeButton{padding:0;width:1.6em;height:1.6em;float:right;margin-top:-0.15em;margin-right:-0.15em;background-color:#1a1b1c}.DockPanel .title .closeButton:hover{background-color:#262829}.DockPanel .content{width:100%;height:calc(100% - 1.5em);overflow:auto}.DockPanel.resizingHorizontally{cursor:ew-resize}.DockPanel.resizingVertically{cursor:ns-resize}.DockPanel.resizingHorizontally.resizingVertically{cursor:nwse-resize}.DockPanel .resizeEW,.DockPanel .resizeNS,.DockPanel .resizeDiag{display:none}.DockPanel.floating .resizeEW{display:block;width:.3em;top:0;bottom:0;background-color:rgba(0,0,0,0);cursor:ew-resize;position:absolute;right:0}.DockPanel.floating .resizeNS{display:block;width:100%;height:.3em;background-color:rgba(0,0,0,0);cursor:ns-resize;position:absolute;left:0;bottom:0}.DockPanel.floating .resizeDiag{display:block;width:.5em;height:.5em;background-color:rgba(0,0,0,0);cursor:nwse-resize;position:absolute;right:0;bottom:0}body>.DockContainer{position:absolute;z-index:49;top:0;left:0;right:0;bottom:0}.dockOverlay{position:fixed;background-color:rgba(51,119,153,.6);z-index:999}.NodeEditor{width:100%;height:100%;overflow:hidden !important;padding:0 !important}.NodeEditor.moving{cursor:grabbing}.NodeEditor.beingDragged{cursor:grabbing}.NodeEditor svg{position:absolute;left:0;right:0;top:0;bottom:0;width:100%;height:100%;pointer-events:none}.NodeEditor .Node{position:absolute}.Node{display:inline-block;border-radius:.5em;box-shadow:0 0 .5em rgba(0,0,0,.4666666667);background-color:#1a1b1c;white-space:nowrap}.Node .title{border-radius:.5em .5em 0 0;background-color:#323536}.Node .body{display:flex;justify-content:space-between}.Node .bullet{display:inline-block;background-color:#3f4243;width:1.2em;height:1.2em;border-radius:1em;border:.2em solid rgba(0,0,0,0);background-clip:padding-box}.Node .bullet:hover{background-color:#63696b;border:none}.Node .inputs{display:inline-block;vertical-align:text-top}.Node .inputs .bullet{margin-left:-0.5em;margin-right:.5em}.Node .inputs .input{display:block;position:relative;font-size:.7em;margin:0}.Node .outputs{display:inline-block;vertical-align:text-top;text-align:right}.Node .outputs .bullet{margin-left:.5em;margin-right:-0.5em}.Node .outputs .output{display:block;position:relative;font-size:.7em;margin:0}.Node .contents{vertical-align:text-top;display:inline-block;min-width:2em;min-height:2em;display:flex;flex-direction:column;justify-content:space-between}.Node.selected{box-shadow:0 0 .5em #4b4f51}.Node.selected .title{background-color:#4b4f51}.TreeViewItem .label{background-color:rgba(0,0,0,0);display:inline-block;border:1px solid rgba(0,0,0,0);-webkit-user-drag:element}.TreeViewItem.focused>.label{border:1px solid #4b4f51}.TreeViewItem .label.selected{background-color:rgba(195,223,133,.2666666667)}.TreeViewItem *{cursor:pointer}.TreeViewItem>.expander{display:inline-block;opacity:0;min-width:.3em;margin-right:.5em;font-weight:bold;font-size:1.2em;transform:rotate(0deg);transition:transform .15s ease-in-out;padding-left:.3em}.TreeViewItem.expandable>.expander{opacity:1;display:inline-block}.TreeViewItem.expanded>.expander{transform:rotate(90deg)}.TreeViewItem>.children{margin-left:1em;overflow:hidden;display:none}.TreeViewItem.expanded>.children{display:block}.Panel.content{margin:0;padding:0;width:100%}.ListView,.ListView.content{display:table;margin:0;padding:0;width:100%}.ListView .cell{font-size:80%;display:table-cell;padding:.15em .6em;border-left:.2em solid #262829;border-bottom:.2em solid #262829;background-color:#1f2021}.ListView .row{display:table-row}.ListView .row .cell{user-select:text}.ListView .row .cell input{background-color:rgba(0,0,0,0);border:none;outline:none;color:#dadcdd;margin:0;padding:0;user-select:text;width:auto;display:inline}.ListView .row.selected .cell{background-color:rgba(195,223,133,.2666666667)}.ListView .row .cell.editing{background-color:rgba(62,80,21,.2666666667);box-shadow:inset 0 0 .1em rgba(195,223,133,.2666666667)}.ListView .header{display:table-row}.ListView .header .cell{background-color:#323536}.NodeEditor path{stroke:#999}.NodeEditor path.notConnectable{stroke:#944}.NodeEditor .selectRect{background-color:rgba(112,117,120,.3);border:1px solid #707578;width:300px;height:300px;position:absolute;z-index:500}.Dropdown{background-color:rgba(112,117,120,.3);border:1px solid #575c5e;color:#dadcdd;outline:none}.ListBox{border:1px solid #343738;background-color:#1a1d1f;color:#cad2d4;border-radius:.1em;outline:none;font-size:.9em;overflow:auto}.ListBox>div{padding:.3em 1em}.ListBox>div:hover{background-color:#262a2d}.ListBox>div.selected{background-color:rgba(195,223,133,.2666666667)}.ColorPicker .handle{border-radius:100%;position:relative;border:.05em solid #222;width:1.2em;height:1.2em;box-shadow:.03em .03em .3em rgba(0,0,0,.2666666667),inset 0 0 .5em #fff;transform:translate(-50%, -50%);pointer-events:none}.PaintStyleColorPicker>.hue{position:relative;display:inline-block;width:400px;height:400px;box-shadow:.5em .5em 1em rgba(0,0,0,.5333333333);background:linear-gradient(to right, hsl(0deg, 100%, 50%), hsl(22.5deg, 100%, 50%), hsl(45deg, 100%, 50%), hsl(67.5deg, 100%, 50%), hsl(90deg, 100%, 50%), hsl(112.5deg, 100%, 50%), hsl(135deg, 100%, 50%), hsl(157.5deg, 100%, 50%), hsl(180deg, 100%, 50%), hsl(202.5deg, 100%, 50%), hsl(225deg, 100%, 50%), hsl(247.5deg, 100%, 50%), hsl(270deg, 100%, 50%), hsl(292.5deg, 100%, 50%), hsl(315deg, 100%, 50%), hsl(337.5deg, 100%, 50%), hsl(359deg, 100%, 50%))}.PaintStyleColorPicker>.hue *,.PaintStyleColorPicker>.lightness *{pointer-events:none}.PaintStyleColorPicker .saturation{width:100%;height:100%;background:linear-gradient(to bottom, transparent, hsl(0deg, 0%, 50%))}.PaintStyleColorPicker .lightness{width:2em;height:400px;display:inline-block;margin-left:.5em;background-color:red;background-image:linear-gradient(to bottom, white, transparent, black)}.PaintStyleColorPicker .lightness>.handle{border-radius:.2em;width:100%;transform:translate(0, -50%)}.GimpStyleColorPicker>.saturation{position:relative;display:inline-block;width:400px;height:400px;box-shadow:.5em .5em 1em rgba(0,0,0,.5333333333);background:linear-gradient(to bottom, transparent, black)}.GimpStyleColorPicker>.saturation *,.GimpStyleColorPicker>.value *{pointer-events:none}.GimpStyleColorPicker .value{width:100%;height:100%}.GimpStyleColorPicker .value::before{content:\\\" \\\";display:block;float:left;width:100%;height:100%;mask:linear-gradient(to right, white, transparent);background:linear-gradient(to bottom, white, black)}.GimpStyleColorPicker .hue{width:2em;height:400px;display:inline-block;margin-left:.5em;background:linear-gradient(to bottom, hsl(0deg, 100%, 50%), hsl(22.5deg, 100%, 50%), hsl(45deg, 100%, 50%), hsl(67.5deg, 100%, 50%), hsl(90deg, 100%, 50%), hsl(112.5deg, 100%, 50%), hsl(135deg, 100%, 50%), hsl(157.5deg, 100%, 50%), hsl(180deg, 100%, 50%), hsl(202.5deg, 100%, 50%), hsl(225deg, 100%, 50%), hsl(247.5deg, 100%, 50%), hsl(270deg, 100%, 50%), hsl(292.5deg, 100%, 50%), hsl(315deg, 100%, 50%), hsl(337.5deg, 100%, 50%), hsl(359deg, 100%, 50%))}.GimpStyleColorPicker .hue>.handle{border-radius:.2em;width:100%;transform:translate(0, -50%)}.WheelColorPicker>.wheel{position:relative;border:.5em solid #090909;width:25em;height:25em;border-radius:100%;padding:3em;box-shadow:.5em .5em 1em rgba(0,0,0,.5333333333);background:conic-gradient(hsl(90deg, 100%, 50%), hsl(67.5deg, 100%, 50%), hsl(45deg, 100%, 50%), hsl(22.5deg, 100%, 50%), hsl(0deg, 100%, 50%), hsl(337.5deg, 100%, 50%), hsl(315deg, 100%, 50%), hsl(292.5deg, 100%, 50%), hsl(270deg, 100%, 50%), hsl(247.5deg, 100%, 50%), hsl(225deg, 100%, 50%), hsl(202.5deg, 100%, 50%), hsl(180deg, 100%, 50%), hsl(157.5deg, 100%, 50%), hsl(135deg, 100%, 50%), hsl(112.5deg, 100%, 50%), hsl(89deg, 100%, 50%))}.WheelColorPicker>.wheel>.handle{width:3em;height:3em;position:absolute}.WheelColorPicker>.wheel>.innerCircle{width:100%;height:100%;background-color:#222;border-radius:100%;padding:18%;transform:rotate(45deg);box-shadow:inset .5em .5em 1em rgba(0,0,0,.5333333333)}.WheelColorPicker>.wheel>.innerCircle .saturation,.WheelColorPicker>.wheel>.innerCircle .lightness{width:100%;height:100%}.WheelColorPicker>.saturation *{pointer-events:none}.WheelColorPicker>.wheel>.innerCircle .saturation{background-color:red;box-shadow:.5em .5em 1em rgba(0,0,0,.5333333333);background-image:linear-gradient(45deg, hsl(0deg, 0%, 50%), transparent)}.WheelColorPicker>.wheel>.innerCircle .lightness{background:linear-gradient(135deg, white, transparent, black)}.ColorPickerDialog .WheelColorPicker{margin-top:1em;margin-bottom:1em}.ColorPickerDialog .ColorOutput{display:inline-block;width:3em;padding:.3em .8em;border:1px solid #343738;height:2.4em;vertical-align:top;margin-top:.05em;margin-right:.4em}.TabPanel .TabBar{border-bottom:1px solid #575c5e}.TabPanel .TabBar .TabHeader{display:inline-block}.TabPanel .TabBar .TabHeader.active{background-color:#262829}.TabPanel .Content{top:2.5em;bottom:0;position:absolute;left:0;right:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./src/style.scss\"],\"names\":[],\"mappings\":\"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\",\"sourcesContent\":[\"$textColor: #dadcdd;\\n$backgroundColor: #262829;\\n$highlightColor: #c3df8544;\\n\\n* {\\n box-sizing: border-box;\\n cursor: default;\\n user-select: none;\\n}\\n\\na {\\n cursor: pointer;\\n color: #c3df85;\\n text-decoration: none;\\n \\n &:hover {\\n color: #d7e6b9;\\n text-decoration: underline;\\n }\\n}\\n\\n.beingDragged {\\n opacity: 0.6;\\n z-index: 1000 !important;\\n}\\n\\nimg {\\n pointer-events: none;\\n}\\n\\nbody {\\n background-color: $backgroundColor;\\n color: $textColor;\\n overflow: hidden;\\n}\\n\\ninput {\\n border: 1px solid #343738;\\n background: #1a1d1f;\\n color: #cad2d4;\\n border-radius: 0.1em;\\n padding: 0.3em 0.8em;\\n outline: none;\\n font-size: 1.2em;\\n margin-right: 0.2em;\\n margin-bottom: 0.2em;\\n}\\n\\n.MenuBar {\\n background-color: lighten($backgroundColor, 10%);\\n box-shadow: 0 0 0.5em #00000077;\\n border-bottom: 1px solid lighten($backgroundColor, 20%);\\n width: 100%;\\n height: 2.5em;\\n position: absolute;\\n z-index: 50;\\n top: 0;\\n left: 0;\\n\\n .Icon {\\n height: 100%;\\n padding: 0.4em 1em;\\n }\\n \\n .Menu {\\n display: inline-block;\\n padding: 0.6em 0.7em;\\n height: 100%;\\n vertical-align: top;\\n \\n &:hover {\\n background-color: $backgroundColor;\\n }\\n }\\n}\\n\\n.MenuContent {\\n display: none;\\n position: absolute;\\n background-color: lighten($backgroundColor, 10%);\\n box-shadow: 0 0 0.5em #00000077;\\n left: 0;\\n top: 2.5em;\\n min-width: 6em;\\n min-height: 0.5em;\\n z-index: 1000;\\n \\n & > .entry {\\n padding: 0.5em 2em;\\n\\n &.submenu:after {\\n content: '›';\\n display: inline-block;\\n position: absolute;\\n right: 0;\\n margin-right: 0.5em;\\n }\\n \\n &:hover {\\n background-color: $backgroundColor;\\n }\\n } \\n\\n & > .entry.disabled {\\n color: darken($textColor, 35%);\\n \\n &:hover {\\n background-color: lighten($backgroundColor, 5%);\\n }\\n }\\n \\n & > .separator {\\n background-color: lighten($backgroundColor, 20%);\\n border: 0.4em solid lighten($backgroundColor, 10%);\\n height: 0.9em;\\n }\\n}\\n\\n\\n.Modal {\\n display: block;\\n position: absolute;\\n background-color: #00000077;\\n left: 0;\\n top: 0;\\n right: 0;\\n bottom: 0;\\n}\\n\\n\\nbutton::-moz-focus-inner {\\n border: 0;\\n}\\n \\n.TabPanel .TabBar .TabHeader,\\nbutton, .button {\\n background-color: darken($backgroundColor, 10%);\\n outline: none;\\n border-radius: 0;\\n border: none;\\n color: $textColor;\\n padding: 0.5em 2em;\\n font-size: 1em;\\n margin-right: 0.2em;\\n margin-bottom: 0.2em;\\n \\n &:focus {\\n outline: none;\\n }\\n &:hover {\\n background-color: darken($backgroundColor, 5%);\\n }\\n &:active {\\n background-color: darken($backgroundColor, 8%);\\n }\\n}\\n\\n.Modal {\\n background-color: #00000077;\\n position: absolute;\\n z-index: 52;\\n left: 0;\\n right: 0;\\n top: 0;\\n bottom: 0;\\n \\n .Dialog {\\n z-index: 53;\\n }\\n}\\n\\n.text {\\n white-space: pre-line;\\n}\\n\\n.Dialog {\\n min-width: 15em;\\n max-width: 80vw;\\n min-height: 5em;\\n max-height: 80vh;\\n}\\n\\n.Dialog, .DockPanel {\\n position: absolute;\\n z-index: 51;\\n top: 50%;\\n left: 50%;\\n transform: translate(-50%, -50%);\\n\\n background-color: lighten($backgroundColor, 10%);\\n box-shadow: 0 0 0.5em #00000077;\\n\\n .title {\\n width: 100%;\\n text-align: center;\\n padding: 0.5em;\\n background-color: lighten($backgroundColor, 20%);\\n border-bottom: 1px solid lighten($backgroundColor, 30%);\\n\\n .closeButton {\\n padding: 0.2em;\\n width: 2em;\\n height: 2em;\\n float: right;\\n margin-top: -0.15em;\\n margin-right: -0.15em;\\n background-color: lighten($backgroundColor, 5%);\\n \\n &:hover {\\n background-color: lighten($backgroundColor, 10%);\\n }\\n }\\n }\\n\\n .content {\\n padding: 0.8em 1.5em;\\n position: absolute;\\n }\\n\\n .content.w3term {\\n height: 100%;\\n }\\n\\n .buttons {\\n padding: 0.8em 1.5em;\\n text-align: center;\\n }\\n}\\n\\n.Dialog .content,\\n.Dialog .Panel.content {\\n position: static;\\n padding: 0.8em 1.5em;\\n}\\n\\n.InputDialog input {\\n width: 100%;\\n}\\n\\n.Label {\\n user-select: text;\\n}\\n\\n.DockContainer {\\n & > * {\\n overflow: hidden;\\n position: absolute;\\n }\\n\\n \\n &.horizontal > * {\\n // border: 1px solid #00ffff;\\n // background-color: #00ffff66;\\n display: inline-block;\\n\\n &.DockSeparator {\\n width: 3px;\\n height: 100%;\\n background-color: darken($backgroundColor, 10%); \\n cursor: ew-resize;\\n }\\n }\\n \\n &.vertical > * {\\n // border: 1px solid #ffff00;\\n // background-color: #ffff0066;\\n display: block;\\n clear: both;\\n \\n &.DockSeparator {\\n width: 100%;\\n height: 3px;\\n background-color: darken($backgroundColor, 10%); \\n cursor: ns-resize;\\n }\\n }\\n \\n & > .DockSeparator:hover {\\n background-color: darken($backgroundColor, 5%);\\n }\\n}\\n\\n.DockPanel {\\n transform: none;\\n max-width: none;\\n max-height: none;\\n background-color: $backgroundColor;\\n .title {\\n text-align: left;\\n padding: 0.1em 0.5em;\\n font-size: 0.9em;\\n background-color: darken($backgroundColor, 5%);\\n border-bottom: 1px solid darken($backgroundColor, 8%);\\n\\n .closeButton {\\n padding: 0;\\n width: 1.6em;\\n height: 1.6em;\\n float: right;\\n margin-top: -0.15em;\\n margin-right: -0.15em;\\n background-color: darken($backgroundColor, 5%);\\n \\n &:hover {\\n background-color: $backgroundColor;\\n }\\n }\\n }\\n\\n .content {\\n width: 100%;\\n height: calc(100% - 1.5em);\\n overflow: auto;\\n }\\n\\n &.resizingHorizontally {\\n cursor: ew-resize;\\n }\\n &.resizingVertically {\\n cursor: ns-resize;\\n }\\n &.resizingHorizontally.resizingVertically {\\n cursor: nwse-resize;\\n }\\n\\n .resizeEW,\\n .resizeNS,\\n .resizeDiag {\\n display: none;\\n }\\n &.floating {\\n .resizeEW {\\n display: block;\\n width: 0.3em;\\n top: 0;\\n bottom: 0;\\n background-color: transparent;\\n cursor: ew-resize;\\n position: absolute;\\n right: 0;\\n }\\n .resizeNS {\\n display: block;\\n width: 100%;\\n height: 0.3em;\\n background-color: transparent;\\n cursor: ns-resize;\\n position: absolute;\\n left: 0;\\n bottom: 0;\\n }\\n .resizeDiag {\\n display: block;\\n width: 0.5em;\\n height: 0.5em;\\n background-color: transparent;\\n cursor: nwse-resize;\\n position: absolute;\\n right: 0;\\n bottom: 0;\\n }\\n }\\n}\\n\\nbody > .DockContainer {\\n position: absolute;\\n z-index: 49;\\n\\n top: 0;\\n left: 0;\\n right: 0;\\n bottom: 0;\\n}\\n\\n.dockOverlay {\\n position: fixed;\\n background-color: #33779999;\\n z-index: 999;\\n}\\n\\n.NodeEditor {\\n width: 100%;\\n height: 100%;\\n overflow: hidden !important;\\n padding: 0 !important;\\n\\n &.moving {\\n cursor: grabbing;\\n }\\n\\n &.beingDragged {\\n cursor: grabbing;\\n }\\n\\n svg {\\n position: absolute;\\n left: 0;\\n right: 0;\\n top: 0;\\n bottom: 0;\\n width: 100%;\\n height: 100%;\\n\\n pointer-events: none;\\n }\\n \\n .Node {\\n position: absolute;\\n }\\n}\\n\\n.Node {\\n display: inline-block;\\n border-radius: 0.5em;\\n box-shadow: 0 0 0.5em #00000077;\\n \\n background-color: darken($backgroundColor, 5%);\\n white-space: nowrap;\\n \\n .title {\\n border-radius: 0.5em 0.5em 0 0;\\n background-color: lighten($backgroundColor, 5%);\\n }\\n\\n .body {\\n display: flex;\\n justify-content: space-between;\\n }\\n\\n .bullet {\\n display: inline-block;\\n background-color: lighten($backgroundColor, 10%);\\n\\n width: 1.2em;\\n height: 1.2em;\\n border-radius: 1em;\\n border: 0.2em solid transparent;\\n background-clip: padding-box;\\n\\n &:hover {\\n background-color: lighten($backgroundColor, 25%);\\n border: none;\\n }\\n }\\n\\n .inputs {\\n display: inline-block;\\n vertical-align: text-top;\\n \\n .bullet {\\n margin-left: -0.5em;\\n margin-right: 0.5em;\\n }\\n \\n .input {\\n display: block;\\n position: relative;\\n font-size: 0.7em;\\n margin: 0;\\n }\\n }\\n \\n .outputs {\\n display: inline-block;\\n vertical-align: text-top;\\n text-align: right;\\n \\n .bullet {\\n margin-left: 0.5em;\\n margin-right: -0.5em;\\n }\\n \\n .output {\\n display: block;\\n position: relative;\\n font-size: 0.7em;\\n margin: 0;\\n }\\n }\\n \\n .contents {\\n vertical-align: text-top;\\n display: inline-block;\\n min-width: 2em;\\n min-height: 2em;\\n\\n display: flex;\\n flex-direction: column;\\n justify-content: space-between;\\n }\\n\\n &.selected {\\n box-shadow: 0 0 0.5em lighten($backgroundColor, 15%);\\n\\n .title {\\n background-color: lighten($backgroundColor, 15%);\\n }\\n }\\n}\\n\\n.TreeViewItem .label {\\n background-color: transparent;\\n display: inline-block;\\n border: 1px solid transparent;\\n -webkit-user-drag: element;\\n}\\n\\n.TreeViewItem.focused > .label {\\n border: 1px solid lighten($backgroundColor, 15%);\\n}\\n\\n.TreeViewItem .label.selected {\\n background-color: $highlightColor;\\n}\\n\\n.TreeViewItem * {\\n cursor: pointer;\\n}\\n\\n.TreeViewItem > .expander {\\n display: inline-block;\\n opacity: 0;\\n min-width: 0.3em;\\n margin-right: 0.5em;\\n font-weight: bold;\\n font-size: 1.2em;\\n transform: rotate(0deg);\\n transition: transform 0.15s ease-in-out;\\n padding-left: 0.3em;\\n}\\n\\n.TreeViewItem.expandable > .expander {\\n opacity: 1;\\n display: inline-block;\\n}\\n\\n.TreeViewItem.expanded > .expander {\\n transform: rotate(90deg);\\n}\\n\\n.TreeViewItem > .children {\\n margin-left: 1em;\\n overflow: hidden;\\n display: none;\\n // transform: scaleY(0); \\n // transform-origin: top;\\n // transition: transform 0.15s ease-in-out;\\n}\\n\\n.TreeViewItem.expanded > .children {\\n display: block;\\n // transform: scaleY(1);\\n}\\n\\n.Panel.content {\\n margin: 0;\\n padding: 0;\\n width: 100%;\\n}\\n\\n.ListView, .ListView.content {\\n display: table;\\n margin: 0;\\n padding: 0;\\n width: 100%;\\n}\\n\\n.ListView .cell {\\n font-size: 80%;\\n display: table-cell;\\n padding: 0.15em 0.6em;\\n border-left: 0.2em solid $backgroundColor;\\n border-bottom: 0.2em solid $backgroundColor;\\n background-color: darken($backgroundColor, 3%);\\n}\\n\\n.ListView .row {\\n display: table-row;\\n \\n .cell {\\n user-select: text;\\n\\n input {\\n background-color: transparent;\\n border: none;\\n outline: none;\\n color: $textColor;\\n margin: 0;\\n padding: 0;\\n user-select: text;\\n width: auto;\\n display: inline;\\n }\\n }\\n\\n &.selected .cell {\\n background-color: $highlightColor;\\n }\\n\\n .cell.editing {\\n background-color: darken($highlightColor, 50%);\\n box-shadow: inset 0 0 0.1em $highlightColor;\\n }\\n}\\n\\n.ListView .header {\\n display: table-row;\\n\\n .cell {\\n background-color: lighten($backgroundColor, 5%);\\n }\\n}\\n\\n.NodeEditor path {\\n stroke: #999999ff;\\n}\\n\\n.NodeEditor path.notConnectable {\\n stroke: #994444ff;\\n}\\n\\n\\n.NodeEditor .selectRect {\\n background-color: rgba(lighten($backgroundColor, 30%), .3);\\n border: 1px solid lighten($backgroundColor, 30%);\\n width: 300px;\\n height: 300px;\\n position: absolute;\\n z-index: 500;\\n}\\n\\n.Dropdown {\\n background-color: rgba(lighten($backgroundColor, 30%), .3);\\n border: 1px solid lighten($backgroundColor, 20%);\\n color: $textColor;\\n outline: none;\\n}\\n\\n.ListBox {\\n border: 1px solid #343738;\\n background-color: #1a1d1f;\\n color: #cad2d4;\\n border-radius: 0.1em;\\n outline: none;\\n font-size: 0.9em;\\n overflow: auto;\\n\\n & > div {\\n padding: 0.3em 1em;\\n\\n &:hover {\\n background-color: lighten(#1a1d1f, 5%);\\n }\\n\\n &.selected {\\n background-color: $highlightColor;\\n }\\n }\\n}\\n\\n\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n\\n\\n\\n.ColorPicker .handle {\\n border-radius: 100%;\\n position:relative;\\n border: 0.05em solid #222;\\n width: 1.2em;\\n height: 1.2em;\\n box-shadow: 0.03em 0.03em 0.3em #00000044,\\n inset 0 0 0.5em white;\\n transform: translate(-50%, -50%);\\n pointer-events: none;\\n}\\n\\n.PaintStyleColorPicker > .hue {\\n position: relative;\\n display: inline-block;\\n width: 400px;\\n height: 400px;\\n box-shadow: 0.5em 0.5em 1em #00000088;\\n background: linear-gradient(to right,\\n hsl(0, 100%, 50%),\\n hsl(22.5, 100%, 50%),\\n hsl(45, 100%, 50%),\\n hsl(67.5, 100%, 50%),\\n hsl(90, 100%, 50%),\\n hsl(112.5, 100%, 50%),\\n hsl(135, 100%, 50%),\\n hsl(157.5, 100%, 50%),\\n hsl(180, 100%, 50%),\\n hsl(202.5, 100%, 50%),\\n hsl(225, 100%, 50%),\\n hsl(247.5, 100%, 50%),\\n hsl(270, 100%, 50%),\\n hsl(292.5, 100%, 50%),\\n hsl(315, 100%, 50%),\\n hsl(337.5, 100%, 50%),\\n hsl(359, 100%, 50%)\\n );\\n}\\n\\n.PaintStyleColorPicker > .hue *,\\n.PaintStyleColorPicker > .lightness * {\\n pointer-events: none;\\n}\\n\\n.PaintStyleColorPicker .saturation {\\n width: 100%;\\n height: 100%;\\n background: linear-gradient(to bottom, transparent, hsl(0, 0%, 50%));\\n}\\n\\n.PaintStyleColorPicker .lightness {\\n width: 2em;\\n height: 400px;\\n display: inline-block;\\n margin-left: 0.5em;\\n background-color: red;\\n background-image: linear-gradient(to bottom, white, transparent, black);\\n}\\n\\n.PaintStyleColorPicker .lightness > .handle {\\n border-radius: 0.2em;\\n width: 100%;\\n transform: translate(0, -50%);\\n}\\n\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n\\n.GimpStyleColorPicker > .saturation {\\n position: relative;\\n display: inline-block;\\n width: 400px;\\n height: 400px;\\n box-shadow: 0.5em 0.5em 1em #00000088;\\n background: linear-gradient(to bottom, transparent, black);\\n}\\n\\n.GimpStyleColorPicker > .saturation *,\\n.GimpStyleColorPicker > .value * {\\n pointer-events: none;\\n}\\n\\n.GimpStyleColorPicker .value {\\n width: 100%;\\n height: 100%;\\n}\\n\\n.GimpStyleColorPicker .value::before {\\n content: ' ';\\n display: block;\\n float: left;\\n width: 100%;\\n height: 100%;\\n mask: linear-gradient(to right, white, transparent);\\n background: linear-gradient(to bottom, white, black);\\n}\\n\\n.GimpStyleColorPicker .hue {\\n width: 2em;\\n height: 400px;\\n display: inline-block;\\n margin-left: 0.5em;\\n background: linear-gradient(to bottom,\\n hsl(0, 100%, 50%),\\n hsl(22.5, 100%, 50%),\\n hsl(45, 100%, 50%),\\n hsl(67.5, 100%, 50%),\\n hsl(90, 100%, 50%),\\n hsl(112.5, 100%, 50%),\\n hsl(135, 100%, 50%),\\n hsl(157.5, 100%, 50%),\\n hsl(180, 100%, 50%),\\n hsl(202.5, 100%, 50%),\\n hsl(225, 100%, 50%),\\n hsl(247.5, 100%, 50%),\\n hsl(270, 100%, 50%),\\n hsl(292.5, 100%, 50%),\\n hsl(315, 100%, 50%),\\n hsl(337.5, 100%, 50%),\\n hsl(359, 100%, 50%)\\n );\\n}\\n\\n.GimpStyleColorPicker .hue > .handle {\\n border-radius: 0.2em;\\n width: 100%;\\n transform: translate(0, -50%);\\n}\\n\\n\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n/* --------------------------------------------------------- */\\n\\n.WheelColorPicker > .wheel {\\n position: relative;\\n border: 0.5em solid #090909;\\n width: 25em;\\n height: 25em;\\n border-radius: 100%;\\n padding: 3em;\\n box-shadow: 0.5em 0.5em 1em #00000088;\\n background: conic-gradient(\\n hsl(90, 100%, 50%),\\n hsl(67.5, 100%, 50%),\\n hsl(45, 100%, 50%),\\n hsl(22.5, 100%, 50%),\\n hsl(0, 100%, 50%),\\n hsl(337.5, 100%, 50%),\\n hsl(315, 100%, 50%),\\n hsl(292.5, 100%, 50%),\\n hsl(270, 100%, 50%),\\n hsl(247.5, 100%, 50%),\\n hsl(225, 100%, 50%),\\n hsl(202.5, 100%, 50%),\\n hsl(180, 100%, 50%),\\n hsl(157.5, 100%, 50%),\\n hsl(135, 100%, 50%),\\n hsl(112.5, 100%, 50%),\\n hsl(89, 100%, 50%)\\n );\\n}\\n\\n.WheelColorPicker > .wheel >.handle {\\n width: 3em;\\n height: 3em;\\n position: absolute;\\n}\\n\\n\\n.WheelColorPicker > .wheel > .innerCircle {\\n width: 100%;\\n height: 100%;\\n background-color: #222;\\n border-radius: 100%;\\n padding: 18%;\\n transform: rotate(45deg);\\n box-shadow: inset 0.5em 0.5em 1em #00000088;\\n}\\n\\n.WheelColorPicker > .wheel > .innerCircle .saturation,\\n.WheelColorPicker > .wheel > .innerCircle .lightness {\\n width: 100%;\\n height: 100%;\\n}\\n\\n.WheelColorPicker > .saturation * {\\n pointer-events: none;\\n}\\n\\n.WheelColorPicker > .wheel > .innerCircle .saturation {\\n background-color: red;\\n box-shadow: 0.5em 0.5em 1em #00000088;\\n background-image: linear-gradient(45deg, hsl(0, 0%, 50%), transparent);\\n}\\n\\n.WheelColorPicker > .wheel > .innerCircle .lightness {\\n background: linear-gradient(135deg, white, transparent, black);\\n}\\n\\n.ColorPickerDialog .WheelColorPicker {\\n margin-top: 1em;\\n margin-bottom: 1em;\\n}\\n\\n.ColorPickerDialog .ColorOutput {\\n display: inline-block;\\n width: 3em;\\n padding: .3em .8em;\\n border: 1px solid #343738;\\n\\n height: 2.4em;\\n vertical-align: top;\\n margin-top: 0.05em;\\n margin-right: 0.4em;\\n}\\n\\n.TabPanel {\\n .TabBar {\\n border-bottom: 1px solid lighten($backgroundColor, 20%);\\n \\n .TabHeader {\\n display: inline-block;\\n\\n &.active {\\n background-color: $backgroundColor;\\n }\\n }\\n }\\n\\n .Content {\\n top: 2.5em;\\n bottom: 0;\\n position: absolute;\\n left: 0;\\n right: 0;\\n }\\n}\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","\"use strict\";\n\n/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\n\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\nvar stylesInDOM = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n\n return updater;\n}\n\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n\n stylesInDOM.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n\n styleElement.appendChild(document.createTextNode(css));\n }\n}\n\nmodule.exports = styleTagTransform;","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n\n content += cssWithMappingToString(item);\n\n if (needLayer) {\n content += \"}\";\n }\n\n if (item[2]) {\n content += \"}\";\n }\n\n if (item[4]) {\n content += \"}\";\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n\n\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\n\nmodule.exports = insertStyleElement;","\"use strict\";\n\nvar memo = {};\n/* istanbul ignore next */\n\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n}\n/* istanbul ignore next */\n\n\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n}\n\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n\n var needLayer = typeof obj.layer !== \"undefined\";\n\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n\n css += obj.css;\n\n if (needLayer) {\n css += \"}\";\n }\n\n if (obj.media) {\n css += \"}\";\n }\n\n if (obj.supports) {\n css += \"}\";\n }\n\n var sourceMap = obj.sourceMap;\n\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n options.styleTagTransform(css, styleElement, options.options);\n}\n\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n\n styleElement.parentNode.removeChild(styleElement);\n}\n/* istanbul ignore next */\n\n\nfunction domAPI(options) {\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\n\nmodule.exports = domAPI;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nc = undefined;","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./style.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./style.scss\";\n export default content && content.locals ? content.locals : undefined;\n","\nconst RAD_TO_DEGREES = 180.0 / Math.PI;\nconst DEGREES_TO_RAD = Math.PI / 180\n\nclass Vector2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n getAngleToOtherInRadians(other: Vector2) {\n return Math.acos(Math.max(Math.min(((this.getScalarProduct(other)) / (this.getLength() * other.getLength())), 1), -1))\n }\n\n getAngleToOtherInDegrees(other: Vector2) {\n return this.getAngleToOtherInRadians(other) * RAD_TO_DEGREES;\n }\n\n getRotatedInRadians(radians: number) {\n let cos = Math.cos(radians)\n let sin = Math.sin(radians)\n\n return new Vector2(this.x * cos - this.y * sin,\n this.x * sin + this.y * cos);\n }\n\n getRotatedInDegrees(degrees: number) {\n return this.getRotatedInRadians(degrees * DEGREES_TO_RAD);\n }\n\n rotateInRadians(radians: number) {\n let cos = Math.cos(radians)\n let sin = Math.sin(radians)\n\n let x = this.x * cos - this.y * sin;\n let y = this.x * sin + this.y * cos;\n\n this.x = x;\n this.y = y;\n }\n\n rotateInDegrees(degrees: number) {\n this.rotateInRadians(degrees * DEGREES_TO_RAD);\n }\n\n getScalarProduct(other: Vector2) {\n return (this.x * other.x) + (this.y * other.y);\n }\n\n scale(factor: number) {\n this.x *= factor;\n this.y *= factor;\n }\n\n getScaled(factor: number) {\n return new Vector2(this.x * factor, this.y * factor);\n }\n\n getLength() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n normalize() {\n let length = this.getLength();\n this.x = this.x / length;\n this.y = this.y / length;\n }\n\n getNormalized() {\n let length = this.getLength();\n return new Vector2(this.x / length, this.y / length);\n }\n\n setLength(length: number) {\n this.normalize();\n this.scale(length);\n }\n\n getWithLength(length: number) {\n let result = this.getNormalized();\n result.scale(length);\n return result;\n }\n}\n\nfunction rectContains(rect: DOMRect, x: number, y: number) {\n return x >= rect.left && x <= rect.right\n && y >= rect.top && y <= rect.bottom;\n}\n\nexport { Vector2, rectContains, RAD_TO_DEGREES, DEGREES_TO_RAD }\n","function _betterModulo(number: number, modulus: number) {\n return ((number % modulus) + modulus) % modulus;\n}\n\nenum ColorModificationMode {\n Percentage,\n FixedAmount\n}\n\nconst _HEX_COLOR_REGEX = new RegExp(/^#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/);\n\nclass Color {\n private _r: number;\n private _g: number;\n private _b: number;\n private _hueInfo?: number;\n\n constructor(r?: number, g?: number, b?: number) {\n this.setRgb(r || 0, g || 0, b || 0);\n }\n\n static fromRgb(r: number, g: number, b: number) {\n return new Color(r, g, b);\n }\n\n static fromHsl(h: number, s: number, l: number) {\n let rgb = Color._hslToRgb(h, s, l);\n let color = Color.fromRgbObject(rgb);\n color._hueInfo = h;\n return color;\n }\n\n static fromHsv(h: number, s: number, v: number) {\n let rgb = Color._hsvToRgb(h, s, v);\n let color = Color.fromRgbObject(rgb);\n color._hueInfo = h;\n return color;\n }\n\n static fromHex(hex: string) {\n let rgb = Color._hexToRgb(hex);\n if(!rgb)\n return null;\n return Color.fromRgbObject(rgb);\n }\n\n private static _hexToRgb(hex: string) {\n let match = hex.match(_HEX_COLOR_REGEX);\n if(!match)\n return null;\n\n let r = parseInt(match[1], 16);\n let g = parseInt(match[2], 16);\n let b = parseInt(match[3], 16);\n\n return {\n r: r,\n g: g,\n b: b\n }\n }\n\n private static _hslToRgb(h: number, s: number, l: number) {\n h = _betterModulo(h, 360);\n\n let c = (1 - Math.abs(2 * l - 1)) * s;\n let x = c * (1 - Math.abs(_betterModulo((h / 60), 2) - 1));\n let m = l - (c / 2);\n\n let r, g, b;\n if(h >= 0 && h < 60) {\n r = c;\n g = x;\n b = 0;\n }\n else if(h >= 60 && h < 120) {\n r = x;\n g = c;\n b = 0;\n }\n else if(h >= 120 && h < 180) {\n r = 0;\n g = c;\n b = x;\n }\n else if(h >= 180 && h < 240) {\n r = 0;\n g = x;\n b = c;\n }\n else if(h >= 240 && h < 300) {\n r = x;\n g = 0;\n b = c;\n }\n else if(h >= 300 && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n else {\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n }\n }\n\n private static _hsvToRgb(h: number, s: number, v: number) {\n h = _betterModulo(h, 360);\n\n let c = v * s;\n let x = c * (1 - Math.abs(_betterModulo((h / 60), 2) - 1));\n let m = v - c;\n\n let r, g, b;\n if(h >= 0 && h < 60) {\n r = c;\n g = x;\n b = 0;\n }\n else if(h >= 60 && h < 120) {\n r = x;\n g = c;\n b = 0;\n }\n else if(h >= 120 && h < 180) {\n r = 0;\n g = c;\n b = x;\n }\n else if(h >= 180 && h < 240) {\n r = 0;\n g = x;\n b = c;\n }\n else if(h >= 240 && h < 300) {\n r = x;\n g = 0;\n b = c;\n }\n else if(h >= 300 && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n }\n }\n\n static fromRgbObject(rgbObject: { r: number, g: number, b: number }) {\n return Color.fromRgb(rgbObject.r, rgbObject.g, rgbObject.b);\n }\n \n static fromHslObject(hslObject: { h: number, s: number, l: number }) {\n return Color.fromHsl(hslObject.h, hslObject.s, hslObject.l);\n }\n \n static fromHsvObject(hsvObject: { h: number, s: number, v: number }) {\n return Color.fromHsv(hsvObject.h, hsvObject.s, hsvObject.v);\n }\n\n setRgb(r: number, g: number, b: number) {\n this._r = Math.max(Math.min(Math.round(r), 255), 0);\n this._g = Math.max(Math.min(Math.round(g), 255), 0);\n this._b = Math.max(Math.min(Math.round(b), 255), 0);\n }\n\n setHsl(h: number, s: number, l: number) {\n let rgb = Color._hslToRgb(h, s, l);\n this._r = rgb.r;\n this._g = rgb.g;\n this._b = rgb.b;\n this._hueInfo = h;\n }\n\n setHsv(h: number, s: number, v: number) {\n let rgb = Color._hsvToRgb(h, s, v);\n this._r = rgb.r;\n this._g = rgb.g;\n this._b = rgb.b;\n this._hueInfo = h;\n }\n\n setHex(hex: string) {\n let rgb = Color._hexToRgb(hex);\n this._r = rgb.r;\n this._g = rgb.g;\n this._b = rgb.b;\n }\n\n setRgbObject(rgbObject: {r: number, g: number, b: number}) {\n this.setRgb(rgbObject.r, rgbObject.g, rgbObject.b);\n }\n\n setHslObject(hslObject: {h: number, s: number, l: number}) {\n this.setHsl(hslObject.h, hslObject.s, hslObject.l);\n }\n\n setHsvObject(hsvObject: {h: number, s: number, v: number}) {\n this.setHsv(hsvObject.h, hsvObject.s, hsvObject.v);\n }\n\n getHsl() {\n let r = this._r / 255;\n let g = this._g / 255;\n let b = this._b / 255;\n let cMax = Math.max(r, g, b);\n let cMin = Math.min(r, g, b);\n let delta = cMax - cMin;\n\n let hue;\n if(delta == 0)\n hue = 0;\n else if(cMax == r) {\n hue = 60 * (_betterModulo(((g - b) / delta), 6));\n }\n else if(cMax == g) {\n hue = 60 * (((b - r) / delta) + 2);\n }\n else if(cMax == b) {\n hue = 60 * (((r - g) / delta) + 4);\n }\n\n let lightness = (cMax + cMin) / 2\n\n let saturation = delta == 0\n ? 0\n : delta / (1 - Math.abs(2 * lightness - 1));\n return {\n h: (hue == 0 && this._hueInfo) ? this._hueInfo :hue,\n s: saturation,\n l: lightness\n };\n }\n\n getHsv() {\n let r = this._r / 255;\n let g = this._g / 255;\n let b = this._b / 255;\n let cMax = Math.max(r, g, b);\n let cMin = Math.min(r, g, b);\n let delta = cMax - cMin;\n\n let hue;\n if(delta == 0)\n hue = 0;\n else if(cMax == r)\n hue = 60 * (_betterModulo(((g - b) / delta), 6));\n else if(cMax == g)\n hue = 60 * (((b - r) / delta) + 2);\n else if(cMax == b)\n hue = 60 * (((r - g) / delta) + 4);\n\n let saturation = delta == 0\n ? 0\n : delta / cMax;\n\n let value = cMax;\n\n return {\n h: (hue == 0 && this._hueInfo) ? this._hueInfo :hue,\n s: saturation,\n v: value\n };\n }\n\n getRgb() {\n return {\n r: this._r,\n g: this._g,\n b: this._b\n }\n }\n\n getHex() {\n let r = this._r.toString(16).padStart(2, \"0\");\n let g = this._g.toString(16).padStart(2, \"0\");\n let b = this._b.toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`\n }\n\n lighten(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.l = Math.max(0, Math.min(hsl.l + amount, 1))\n else\n hsl.l = Math.max(0, Math.min(hsl.l * (amount + 1), 1))\n this.setHslObject(hsl);\n }\n\n darken(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.l = Math.max(0, Math.min(hsl.l - amount, 1))\n else\n hsl.l = Math.max(0, Math.min(hsl.l * (1 - amount), 1))\n this.setHslObject(hsl);\n }\n\n saturate(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.s = Math.max(0, Math.min(hsl.s + amount, 1))\n else\n hsl.s = Math.max(0, Math.min(hsl.s * (amount + 1), 1))\n this.setHslObject(hsl);\n }\n\n desaturate(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.s = Math.max(0, Math.min(hsl.s + amount, 1))\n else\n hsl.s = Math.max(0, Math.min(hsl.s * (1 - amount), 1))\n this.setHslObject(hsl);\n }\n\n setSaturation(saturation: number) {\n saturation = Math.min(Math.max(saturation, 0), 1);\n let hsl = this.getHsl();\n hsl.s = saturation;\n this.setHslObject(hsl);\n }\n\n rotateHue(degrees: number) {\n let hsl = this.getHsl();\n hsl.h = _betterModulo(hsl.h + degrees, 360);\n this.setHslObject(hsl);\n }\n\n invert() {\n this._r = 255 - this._r;\n this._g = 255 - this._g;\n this._b = 255 - this._b;\n if(this._hueInfo)\n this._hueInfo = _betterModulo(this._hueInfo + 180, 360);\n }\n\n getInverted() {\n return Color.fromRgb(255 - this._r,\n 255 - this._g,\n 255 - this._b);\n }\n\n getComplement() {\n let output = Color.fromRgb(this._r,\n this._g,\n this._b);\n output.rotateHue(180);\n return output;\n }\n\n getRgbBlended(other: Color, alpha: number) {\n alpha = Math.max(Math.min(alpha, 1), 0);\n let beta = 1 - alpha;\n return Color.fromRgb(Math.round(this._r * beta + other._r * alpha),\n Math.round(this._g * beta + other._g * alpha),\n Math.round(this._b * beta + other._b * alpha));\n }\n\n getBlended(other: Color, alpha: number) {\n alpha = Math.max(Math.min(alpha, 1), 0);\n let beta = 1 - alpha;\n const thisHsv = this.getHsv();\n const otherHsv = other.getHsv();\n\n return Color.fromHsv(Math.round(thisHsv.h * beta + otherHsv.h * alpha),\n Math.round(thisHsv.s * beta + otherHsv.s * alpha),\n Math.round(thisHsv.v * beta + otherHsv.v * alpha));\n }\n}\n\nexport { Color, ColorModificationMode }\n","import { DragInfo } from \"./dragAndDrop\"\n\ninterface IDraggable {\n element: HTMLElement;\n onDragStart(mouseEvt: MouseEvent | TouchEvent) : boolean;\n onDragEnd(mouseEvt: MouseEvent | TouchEvent) : void;\n onDragging(dragInfo: DragInfo) : void;\n}\n\nclass Widget implements IDraggable {\n element: HTMLElement;\n parentWidget?: Widget;\n\n constructor(element?: HTMLElement) {\n this.element = element || document.createElement(\"div\");\n this.element.classList.add(\"Widget\");\n this.parentWidget = null;\n }\n\n onDragStart(evt: MouseEvent | TouchEvent) {\n this.element.classList.add(\"beingDragged\");\n return true;\n }\n\n onDragEnd(evt: MouseEvent | TouchEvent) {\n this.element.classList.remove(\"beingDragged\");\n }\n\n onDragging(dragInfo: DragInfo) {\n this.element.style.left = dragInfo.posWithOffsetToParentConsidered.x + \"px\";\n this.element.style.top = dragInfo.posWithOffsetToParentConsidered.y + \"px\";\n }\n\n onAttached() {\n }\n\n isAttached() : boolean {\n return document.body.contains(this.element);\n }\n\n onResize() {\n }\n}\n\n\nexport { Widget, IDraggable }\n","import { Vector2 } from './Math';\nimport { IDraggable } from './Widget';\n\nclass DragAndDropData\n{\n element?: HTMLElement;\n draggable?: IDraggable;\n offsetX: number;\n offsetY: number;\n dragStartX: number;\n dragStartY: number;\n prevTouchX: number;\n prevTouchY: number;\n\n constructor(element: HTMLElement,\n offsetX: number,\n offsetY: number,\n dragStartX: number,\n dragStartY: number,\n prevTouchX: number,\n prevTouchY: number) {\n this.element = element;\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n this.dragStartY = dragStartY;\n this.dragStartX = dragStartX;\n }\n}\n\ntype DragInfo = {\n mouseEvent?: MouseEvent,\n touchEvent?: TouchEvent,\n rect: DOMRect,\n posWithOffsetToParentConsidered: Vector2,\n posRelativeToElement: Vector2,\n posRelativeToDragStart: Vector2,\n movement: Vector2\n}\n\nlet _dragAndDrop = new DragAndDropData(null, 0, 0, 0, 0, 0, 0);\n\nlet currentMousePos = {\n x: -1,\n y: -1\n}\n\nexport function getClientPosFromEvent(evt: MouseEvent | TouchEvent) {\n if(evt.type.startsWith(\"touch\")) {\n const touch = (evt as TouchEvent).touches[0];\n\n return {\n x: touch.clientX,\n y: touch.clientY\n };\n }\n else {\n let mouseEvt = (evt as MouseEvent);\n \n return {\n x: mouseEvt.clientX,\n y: mouseEvt.clientY\n };\n }\n}\n\nfunction getDragStart(draggable: IDraggable, dragStartMethod?: (draggable: IDraggable, evt: MouseEvent | TouchEvent) => boolean) {\n return (evt: MouseEvent | TouchEvent) => {\n var clientPos = getClientPosFromEvent(evt);\n\n if(dragStartMethod && !dragStartMethod(draggable, evt))\n return;\n if(!dragStartMethod && draggable.onDragStart && !draggable.onDragStart(evt))\n return;\n\n var box = draggable.element.getBoundingClientRect();\n _dragAndDrop.offsetX = clientPos.x - box.left;\n _dragAndDrop.offsetY = clientPos.y - box.top;\n _dragAndDrop.dragStartX = clientPos.x;\n _dragAndDrop.dragStartY = clientPos.y;\n _dragAndDrop.draggable = draggable;\n _dragAndDrop.element = draggable.element;\n _dragAndDrop.prevTouchX = clientPos.x;\n _dragAndDrop.prevTouchY = clientPos.y;\n evt.stopPropagation();\n\n onDragging(evt);\n };\n}\n\nfunction onDragEnd(evt: MouseEvent | TouchEvent) {\n if(_dragAndDrop && _dragAndDrop.draggable) {\n _dragAndDrop.draggable.onDragEnd(evt);\n _dragAndDrop.draggable = null;\n }\n}\n\nfunction onDragging(evt: MouseEvent | TouchEvent) {\n var clientPos = getClientPosFromEvent(evt);\n if(_dragAndDrop.draggable != undefined)\n {\n let rect = _dragAndDrop.element.getBoundingClientRect();\n const mouseEvent = evt.type.startsWith(\"mouse\") ? evt as MouseEvent: null;\n const touchEvent = evt.type.startsWith(\"touch\") ? evt as TouchEvent: null;\n let dragInfo: DragInfo = {\n mouseEvent: mouseEvent,\n touchEvent: touchEvent,\n rect: rect,\n posWithOffsetToParentConsidered: new Vector2(clientPos.x - _dragAndDrop.offsetX,\n clientPos.y - _dragAndDrop.offsetY),\n posRelativeToElement: new Vector2(clientPos.x - rect.x,\n clientPos.y - rect.y),\n posRelativeToDragStart: new Vector2(clientPos.x - _dragAndDrop.dragStartX,\n clientPos.y - _dragAndDrop.dragStartY),\n movement: mouseEvent != null ? new Vector2(mouseEvent.movementX, mouseEvent.movementY) : new Vector2(clientPos.x - _dragAndDrop.prevTouchX, clientPos.y - _dragAndDrop.prevTouchY)\n };\n _dragAndDrop.draggable.onDragging(dragInfo);\n _dragAndDrop.prevTouchX = clientPos.x;\n _dragAndDrop.prevTouchY = clientPos.y;\n }\n\n currentMousePos.x = clientPos.x;\n currentMousePos.y = clientPos.y;\n}\n\nclass Draggable implements IDraggable {\n element: HTMLElement;\n onDragStart: (mouseEvt: MouseEvent) => boolean;\n onDragging: (ragInfo: DragInfo) => void;\n onDragEnd: (mouseEvt: MouseEvent) => void;\n\n constructor(element: HTMLElement, \n onDragStart: (mouseEvt: MouseEvent) => boolean,\n onDragging: (dragInfo: DragInfo) => void,\n onDragEnd: (mouseEvt: MouseEvent) => void)\n {\n this.element = element;\n this.onDragStart = onDragStart;\n this.onDragging = onDragging;\n this.onDragEnd = onDragEnd;\n }\n}\n\nwindow.addEventListener(\"mouseup\", onDragEnd, true);\nwindow.addEventListener(\"touchend\", onDragEnd, true);\nwindow.addEventListener(\"mousemove\", onDragging, true);\nwindow.addEventListener(\"touchmove\", onDragging, true);\n\nexport { getDragStart, currentMousePos, Draggable, DragInfo }\n","import { Widget } from './Widget';\n\nclass Panel extends Widget {\n children: Widget[];\n\n constructor() {\n super();\n this.element.classList.add(\"Panel\");\n this.children = [];\n }\n\n prependChild(child: Widget) {\n child.parentWidget = this;\n this.element.prepend(child.element);\n this.children.unshift(child);\n if(this.isAttached()) {\n child.onAttached();\n }\n }\n\n appendChild(child: Widget) {\n child.parentWidget = this;\n this.element.appendChild(child.element);\n this.children.push(child);\n if(this.isAttached()) {\n child.onAttached();\n }\n }\n\n removeChild(child: Widget) {\n child.parentWidget = null;\n this.element.removeChild(child.element);\n\n let childIndex = this.children.indexOf(child);\n if(childIndex >= 0)\n this.children.splice(childIndex, 1);\n }\n\n onAttached() {\n if(this.isAttached()) {\n for(let child of this.children)\n child.onAttached();\n }\n }\n\n onResize() {\n for(let child of this.children) {\n child.onResize();\n }\n }\n}\n\nexport { Panel }","import { Panel } from './Panel';\n\nconst ROOT = new Panel();\nROOT.element = document.body;\n\nexport { ROOT }","import { Widget, IDraggable } from './Widget';\nimport { rectContains } from './Math';\nimport { DragInfo, getDragStart } from './dragAndDrop'\n\nenum DockDirection {\n Left = 1,\n Right = 2,\n Top = 3,\n Bottom = 4,\n Inside = 5,\n Float = 6\n}\n\nenum Orientation {\n Horizontal = 1,\n Vertical = 2\n}\n\nlet invertOrientation = (orientation: Orientation) => orientation == Orientation.Horizontal\n ? Orientation.Vertical\n : Orientation.Horizontal;\n\nlet orientationFromDirection = (dockDirection: DockDirection) => dockDirection == DockDirection.Top || dockDirection == DockDirection.Bottom\n ? Orientation.Vertical\n : Orientation.Horizontal;\n\nclass DockingStructure {\n orientation: Orientation;\n dockPercentage: number;\n children?: DockingStructure[];\n identifier?: string;\n\n static fromDockPanel(dockPanel: DockPanel) : DockingStructure {\n let structure = new DockingStructure();\n structure.dockPercentage = dockPanel._dockPercentage,\n structure.identifier = dockPanel.identifier;\n return structure;\n }\n\n static fromDockContainer(dockContainer: DockContainer) : DockingStructure {\n let structure = new DockingStructure();\n structure.orientation = dockContainer.orientation;\n structure.dockPercentage = dockContainer._dockPercentage;\n structure.children = dockContainer.children.map(child => (child instanceof DockContainer)\n ? DockingStructure.fromDockContainer(child)\n : DockingStructure.fromDockPanel(child as DockPanel))\n return structure;\n }\n}\n\nlet _dockContainers: DockContainer[] = [];\nlet _floatingPanels: DockPanel[] = [];\n\nfunction findDockPanelForPoint(x: number, y: number) : DockPanel {\n for(let dockContainer of _dockContainers) {\n if(!dockContainer.isAttached())\n continue;\n\n let dockPanel = dockContainer.getDockPanelAtPoint(x, y);\n if(dockPanel != null) {\n return dockPanel;\n }\n }\n return null;\n}\n\nclass DockSeparator extends Widget {\n prev: Dockable;\n next: Dockable;\n\n constructor(prev: Dockable, next: Dockable, parent: DockContainer) {\n super();\n this.element.classList.add(\"DockSeparator\");\n this.element.addEventListener(\"mousedown\", getDragStart(this));\n\n this.prev = prev;\n this.next = next;\n this.parentWidget = parent;\n }\n\n onDragStart(mouseEvt: MouseEvent) {\n // don't call super -> i.e. don't set 'beingDragged' class\n return true;\n }\n\n onDragging(dragInfo: DragInfo) {\n let parentOrientation = (this.parentWidget as DockContainer).orientation;\n let diff = parentOrientation == Orientation.Horizontal ? dragInfo.mouseEvent.movementX : dragInfo.mouseEvent.movementY;\n\n let prevSize = parentOrientation == Orientation.Horizontal ? this.prev.element.getBoundingClientRect().width : this.prev.element.getBoundingClientRect().height;\n let nextSize = parentOrientation == Orientation.Horizontal ? this.next.element.getBoundingClientRect().width : this.next.element.getBoundingClientRect().height;\n\n let newPrevSize = prevSize + diff;\n let newNextSize = nextSize - diff;\n\n const minSizeLimit = 80;\n if(newPrevSize < minSizeLimit || newNextSize < minSizeLimit) {\n return;\n }\n\n this.prev._dockPercentage *= (newPrevSize / prevSize);\n this.next._dockPercentage *= (newNextSize / nextSize);\n\n (this.parentWidget as DockContainer)._layoutChildren();\n }\n\n onDragEnd(mouseEvt: MouseEvent) {\n // don't call super -> i.e. don't reset 'beingDragged' class\n }\n}\n\nabstract class Dockable extends Widget {\n _dockPercentage: number = -1;\n identifier: string | null;\n separatorBefore?: DockSeparator = null;\n separatorAfter?: DockSeparator = null;\n}\n\nclass DockContainer extends Dockable {\n children: Dockable[];\n orientation: Orientation;\n\n constructor() {\n super();\n this.element.className = \"DockContainer\";\n this._setOrientation(Orientation.Horizontal);\n this.children = [];\n }\n\n onAttached() {\n if(this.isAttached())\n _dockContainers.push(this);\n this.children.forEach(child => {\n child.onAttached();\n });\n }\n\n getFloatingPanels() {\n return _floatingPanels.map(panel => ({\n identifier: panel.identifier,\n width: parseInt(panel.element.style.width),\n height: parseInt(panel.element.style.height),\n x: parseInt(panel.element.style.left),\n y: parseInt(panel.element.style.top)\n }));\n }\n\n getDockPanelAtPoint(x: number, y: number) : DockPanel {\n if(!rectContains(this.element.getBoundingClientRect(), x, y))\n return null;\n\n for(let child of this.children) {\n if(child instanceof DockPanel && rectContains(child.element.getBoundingClientRect(), x, y)) {\n return child;\n }\n else if(child instanceof DockContainer) {\n let childAffected = child.getDockPanelAtPoint(x, y);\n if(childAffected != null)\n return childAffected;\n }\n }\n return null;\n }\n\n getDockingStructure() : DockingStructure {\n return DockingStructure.fromDockContainer(this);\n }\n\n setChildPercentages(percentages: number[]) {\n if(percentages.length != this.children.length)\n throw \"This container has \" + this.children.length\n + \" child elements, but \" + percentages.length\n + \" percentages were given!\";\n\n for(let i = 0; i < percentages.length; i++) {\n this.children[i]._dockPercentage = percentages[i];\n }\n this._layoutChildren();\n }\n\n _dockRelative(child: Dockable, relativeTo: Dockable, insertBefore: boolean, percentage: number) {\n percentage = percentage || 0.5;\n if(!(child instanceof Dockable)) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'child' must be a Dockable object\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n if(!(relativeTo instanceof Dockable)) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeTo' must be a Dockable object\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n let childIndex = this.children.indexOf(relativeTo);\n let prevToSeparator = insertBefore ? child : relativeTo;\n let nextToSeparator = insertBefore ? relativeTo : child;\n let separator = new DockSeparator(prevToSeparator, nextToSeparator, this);\n nextToSeparator.separatorBefore = separator;\n prevToSeparator.separatorAfter = separator;\n\n child._dockPercentage = relativeTo._dockPercentage * percentage;\n relativeTo._dockPercentage = relativeTo._dockPercentage * (1 - percentage);\n\n if(childIndex >= 0) {\n if(insertBefore) {\n this.children.splice(childIndex, 0, child);\n this.element.insertBefore(child.element, relativeTo.element);\n this.element.insertBefore(separator.element, relativeTo.element);\n }\n else {\n this.children.splice(childIndex + 1, 0, child);\n let next = relativeTo.element.nextSibling;\n if(next){\n this.element.insertBefore(separator.element, next);\n this.element.insertBefore(child.element, next);\n }\n else {\n this.element.appendChild(separator.element);\n this.element.appendChild(child.element);\n }\n }\n }\n else {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeTo' must be a child of a DockContainer\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n child.parentWidget = this;\n child.element.classList.remove(\"floating\");\n child.onAttached();\n this.onResize();\n }\n\n _dock(child: Dockable, insertBefore: boolean, percentage?: number) {\n percentage = percentage || (this.children.length > 0 ? 0.5 : 1);\n\n if(insertBefore) {\n if(this.children.length > 0) {\n let neighbor = this.children[0];\n let separator = new DockSeparator(child, neighbor, this);\n neighbor.separatorBefore = separator;\n child.separatorAfter = separator;\n this.element.prepend(separator.element);\n }\n\n child._dockPercentage = percentage;\n this.children.forEach(c => { c._dockPercentage *= (1 - percentage) });\n\n this.children.unshift(child);\n this.element.prepend(child.element);\n }\n else {\n if(this.children.length > 0) {\n let neighbor = this.children[this.children.length - 1];\n let separator = new DockSeparator(neighbor, child, this);\n neighbor.separatorAfter = separator;\n child.separatorBefore = separator;\n this.element.appendChild(separator.element);\n }\n\n child._dockPercentage = percentage;\n this.children.forEach(c => { c._dockPercentage *= (1 - percentage) });\n\n this.children.push(child);\n this.element.appendChild(child.element);\n }\n child.parentWidget = this;\n child.element.classList.remove(\"floating\");\n child.onAttached();\n this.onResize();\n }\n\n _setOrientation(orientation: Orientation) {\n if(this.orientation == Orientation.Horizontal) {\n this.element.classList.remove(\"horizontal\");\n }\n else {\n this.element.classList.remove(\"vertical\");\n }\n if(orientation == Orientation.Horizontal) {\n this.element.classList.add(\"horizontal\");\n }\n else {\n this.element.classList.add(\"vertical\");\n }\n this.orientation = orientation;\n }\n\n _wrapChildren() {\n let newContainer = new DockContainer();\n newContainer._setOrientation(this.orientation);\n\n // copy percentages, since they are changed while the child collection is updated\n let childPercentages = this.children.map(existingChild => existingChild._dockPercentage);\n childPercentages[0] = 1;\n let children = this.children.slice();\n\n let idx = 0;\n children.forEach(existingChild => {\n this.undock(existingChild);\n newContainer.dock(existingChild, newContainer.orientation == Orientation.Horizontal\n ? DockDirection.Right\n : DockDirection.Bottom,\n childPercentages[idx]);\n idx++;\n });\n\n this._setOrientation(invertOrientation(this.orientation));\n this.children = [];\n this.dock(newContainer, this.orientation == Orientation.Horizontal\n ? DockDirection.Left\n : DockDirection.Top);\n }\n\n _subdivide(relativeTo: Dockable, dockDirection: DockDirection) : DockContainer {\n let newContainer = new DockContainer();\n newContainer._setOrientation(orientationFromDirection(dockDirection));\n\n let relativeIndex = this.children.indexOf(relativeTo);\n if(relativeIndex < 0) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeTo' must be inside this DockContainer\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n newContainer._dockPercentage = relativeTo._dockPercentage;\n relativeTo._dockPercentage = 1;\n \n // get the separators here and update them (otherwise, they sill point to the old neighbor that has been wrapped now)\n if(relativeTo.separatorBefore)\n {\n relativeTo.separatorBefore.next = newContainer;\n relativeTo.separatorBefore = null;\n }\n if(relativeTo.separatorAfter)\n {\n relativeTo.separatorAfter.prev = newContainer;\n relativeTo.separatorAfter = null;\n }\n\n this.children.splice(relativeIndex, 1, newContainer);\n this.element.insertBefore(newContainer.element, relativeTo.element);\n this.element.removeChild(relativeTo.element)\n newContainer.parentWidget = this;\n newContainer.dock(relativeTo, dockDirection);\n \n return newContainer;\n }\n\n dockRelativeTo(child: Dockable, relativeTo: Dockable, dockDirection: DockDirection, percentage?: number) {\n if(percentage == undefined || percentage == null)\n percentage = 0.5;\n\n let targetOrientation = orientationFromDirection(dockDirection);\n let dockTarget:DockContainer = this;\n if(this.orientation != targetOrientation) {\n dockTarget = this._subdivide(relativeTo, dockDirection)\n }\n\n if(dockDirection == DockDirection.Inside)\n console.warn(\"Tabbed docks are not implemented yet!\");\n else if(dockDirection == DockDirection.Float) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'dockDirection' must not be 'Float'. Use 'undock' method to make a child float.\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n\n dockTarget._dockRelative(child, relativeTo, dockDirection == DockDirection.Left || dockDirection == DockDirection.Top, percentage);\n this._layoutChildren();\n return child;\n }\n\n dock(child: Dockable, dockDirection: DockDirection, percentage?: number) {\n let targetOrientation = orientationFromDirection(dockDirection);\n\n if(this.children.length <= 1) {\n this._setOrientation(targetOrientation);\n }\n\n if(this.orientation != targetOrientation) {\n this._wrapChildren();\n }\n\n if(dockDirection == DockDirection.Inside)\n console.warn(\"Tabbed docks are not implemented yet!\");\n else if(dockDirection == DockDirection.Float) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'dockDirection' must not be 'Float'. Use 'undock' method to make a child float.\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n\n this._dock(child, dockDirection == DockDirection.Left || dockDirection == DockDirection.Top, percentage);\n this._layoutChildren();\n return child;\n }\n\n undock(child: Dockable) {\n let childIndex = this.children.indexOf(child);\n if(childIndex < 0) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'child' must be inside a DockContainer in order to be undocked.\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n if(childIndex > 0) {\n this.children[childIndex - 1]._dockPercentage += child._dockPercentage;\n }\n else if(childIndex + 1 < this.children.length) {\n this.children[childIndex + 1]._dockPercentage += child._dockPercentage;\n }\n this.children.splice(childIndex, 1); // remove from children list\n let before = child.element.previousElementSibling;\n let after = child.element.nextElementSibling;\n\n if(before != null && before.classList.contains(\"DockSeparator\")) {\n this.element.removeChild(before);\n\n if(child.separatorBefore)\n child.separatorBefore.prev.separatorAfter = null;\n }\n else if(after != null && after.classList.contains(\"DockSeparator\")) {\n this.element.removeChild(after);\n\n if(child.separatorAfter)\n child.separatorAfter.next.separatorBefore = null;\n }\n this.element.removeChild(child.element);\n\n if(this.parentWidget != null && (this.parentWidget instanceof DockContainer) && this.children.length == 0) {\n this.parentWidget.undock(this);\n // remove from _dockContainers\n let index = _dockContainers.indexOf(this);\n if(index >= 0) {\n _dockContainers.splice(index, 1);\n }\n }\n else {\n this._layoutChildren();\n }\n\n child.parentWidget = null;\n\n if(child instanceof DockPanel) {\n child.element.classList.add(\"floating\");\n \n let indexInFloatings = _floatingPanels.indexOf(child as DockPanel);\n if(indexInFloatings < 0)\n _floatingPanels.push(child as DockPanel);\n }\n\n return child;\n }\n\n _layoutChildren(width?: number, height?: number) {\n const separatorWidth = 3;\n let rect = this.element.getBoundingClientRect();\n let x = 0;\n let y = 0;\n if(width == undefined)\n width = rect.width;\n if(height == undefined)\n height = rect.height;\n\n let separators = Array.from(this.element.children).filter(element => element.classList.contains(\"DockSeparator\") && element instanceof HTMLElement) as HTMLElement[];\n let separatorIndex = 0;\n\n if(width == 0 || width == 0)\n return;\n\n if(this.orientation == Orientation.Horizontal) {\n this.children.forEach(child => {\n let childWidth = Math.round((width - (separators.length * separatorWidth)) * child._dockPercentage);\n\n child.element.style.left = x + \"px\";\n child.element.style.top = y + \"px\";\n child.element.style.width = childWidth + \"px\";\n child.element.style.height = height + \"px\";\n\n if (child instanceof DockContainer) {\n child._layoutChildren(childWidth, height);\n }\n\n if (separatorIndex < separators.length) {\n separators[separatorIndex].style.left = x + childWidth + \"px\";\n separators[separatorIndex].style.top = y + \"px\";\n }\n x += childWidth + separatorWidth;\n separatorIndex++;\n child.onResize();\n });\n }\n else {\n this.children.forEach(child => {\n let childHeight = Math.round((height - (separators.length * separatorWidth)) * child._dockPercentage);\n\n child.element.style.left = x + \"px\";\n child.element.style.top = y + \"px\";\n child.element.style.width = width + \"px\";\n child.element.style.height = childHeight + \"px\";\n\n if (child instanceof DockContainer) {\n child._layoutChildren(width, childHeight);\n }\n\n if (separatorIndex < separators.length) {\n separators[separatorIndex].style.left = x + \"px\";\n separators[separatorIndex].style.top = y + childHeight + \"px\";\n }\n y += childHeight + separatorWidth;\n separatorIndex++;\n child.onResize();\n });\n }\n }\n}\n\nclass DockPanel extends Dockable {\n titleElement: HTMLDivElement;\n contentWidget: Widget;\n private _dragged: boolean;\n private _dockOverlay: HTMLElement;\n private _dockTargetDirection: DockDirection;\n resizeEW: HTMLDivElement;\n resizeNS: HTMLDivElement;\n resizeDiag: HTMLDivElement;\n private _resizingHorizontally: boolean;\n private _resizingVertically: boolean;\n private _dockTarget: DockPanel;\n identifier: string;\n\n constructor(title: string, contentWidget: Widget, hasCloseButton?: boolean) {\n super();\n this.element.className = \"DockPanel\";\n hasCloseButton = hasCloseButton === undefined || hasCloseButton == true;\n\n this.titleElement = document.createElement(\"div\");\n this.titleElement.textContent = title;\n this.titleElement.className = \"title\";\n\n this.contentWidget = contentWidget;\n this.contentWidget.element.classList.add(\"content\");\n\n this.element.appendChild(this.titleElement);\n this.element.appendChild(this.contentWidget.element);\n this.titleElement.addEventListener(\"mousedown\", getDragStart(this));\n this._dragged = false;\n this._dockOverlay = null;\n this._dockTarget = null;\n this._dockTargetDirection = DockDirection.Float;\n\n if(hasCloseButton) {\n let closeButton = document.createElement(\"button\");\n closeButton.className = \"closeButton\";\n closeButton.textContent = \"🗙\";\n this.titleElement.appendChild(closeButton);\n closeButton.onclick = evt => {\n this.close();\n }\n }\n\n this.resizeEW = document.createElement(\"div\");\n this.resizeNS = document.createElement(\"div\");\n this.resizeDiag = document.createElement(\"div\");\n this.resizeEW.className = \"resizeEW\";\n this.resizeNS.className = \"resizeNS\";\n this.resizeDiag.className = \"resizeDiag\";\n this.element.appendChild(this.resizeEW);\n this.element.appendChild(this.resizeNS);\n this.element.appendChild(this.resizeDiag);\n\n this._resizingHorizontally = false;\n this._resizingVertically = false;\n\n this.resizeEW.addEventListener(\"mousedown\", getDragStart(this, (draggable: IDraggable, evt: MouseEvent) => this.onResizeStart(evt, true, false)));\n this.resizeNS.addEventListener(\"mousedown\", getDragStart(this, (draggable: IDraggable, evt: MouseEvent) => this.onResizeStart(evt, false, true)));\n this.resizeDiag.addEventListener(\"mousedown\", getDragStart(this, (draggable: IDraggable, evt: MouseEvent) => this.onResizeStart(evt, true, true)));\n }\n\n onResize() {\n super.onResize();\n this.contentWidget.onResize();\n }\n\n onAttached() {\n if(this.isAttached()) {\n let indexInFloatings = _floatingPanels.indexOf(this);\n if(this.isFloating()) {\n if(indexInFloatings < 0)\n _floatingPanels.push(this);\n }\n else if(indexInFloatings >= 0) {\n _floatingPanels.splice(indexInFloatings, 1);\n }\n this.contentWidget.onAttached();\n }\n }\n\n getTitle() {\n return this.titleElement.textContent;\n }\n\n setTitle(title: string) {\n this.titleElement.textContent = title;\n }\n\n setContent(contentWidget: Widget) {\n // remove old element\n this.contentWidget.element.classList.remove(\"content\");\n this.element.removeChild(this.contentWidget.element);\n\n // set new element\n this.contentWidget = contentWidget;\n this.contentWidget.element.classList.add(\"content\");\n this.element.appendChild(this.contentWidget.element);\n\n contentWidget.onAttached();\n }\n\n isFloating() {\n return this.element.classList.contains(\"floating\");\n }\n\n close() {\n if(this.parentWidget instanceof DockContainer) {\n this.parentWidget.undock(this);\n }\n else {\n this.element.parentElement.removeChild(this.element);\n\n let indexInFloatings = _floatingPanels.indexOf(this);\n if(indexInFloatings >= 0) {\n _floatingPanels.splice(indexInFloatings, 1);\n }\n }\n }\n\n createDragOverlay() {\n this._dockOverlay = document.createElement(\"div\");\n this._dockOverlay.className = \"dockOverlay\";\n document.body.appendChild(this._dockOverlay);\n }\n\n onResizeStart(mouseEvt: MouseEvent, resizingHorizontally: boolean, resizingVertically: boolean) {\n if(!this.isFloating())\n return false;\n\n if(resizingHorizontally)\n this.element.classList.add(\"resizingHorizontally\");\n if(resizingVertically)\n this.element.classList.add(\"resizingVertically\");\n this._resizingHorizontally = resizingHorizontally;\n this._resizingVertically = resizingVertically;\n return true;\n }\n\n onResizing(dragInfo: DragInfo) {\n if(!this.isFloating())\n return;\n\n if(this._resizingHorizontally) {\n this.element.style.width = dragInfo.posRelativeToElement.x + \"px\";\n }\n if(this._resizingVertically) {\n this.element.style.height = dragInfo.posRelativeToElement.y + \"px\";\n }\n this.onResize();\n }\n\n onDragStart(mouseEvt: MouseEvent) {\n if((mouseEvt.target as HTMLElement).classList.contains(\"closeButton\"))\n return false;\n\n return super.onDragStart(mouseEvt);\n }\n\n onDragging(dragInfo: DragInfo) {\n if(this._resizingHorizontally || this._resizingVertically)\n return this.onResizing(dragInfo);\n\n const dockBorder = 0.05; // how thick are the zones where things dock?\n const moveThreshold = 10; // how many pixels do I have to drag until we start undocking?\n\n // not in onDragStart, since we want to handle clicks separately\n if(!this._dragged && (Math.abs(dragInfo.posRelativeToDragStart.x) > moveThreshold\n || Math.abs(dragInfo.posRelativeToDragStart.y) > moveThreshold)) {\n this._dragged = true;\n if(this.parentWidget instanceof DockContainer) {\n this.parentWidget.undock(this);\n document.body.appendChild(this.element);\n }\n this.createDragOverlay();\n }\n if(!this._dragged)\n return;\n\n super.onDragging(dragInfo);\n\n this._dockTarget = findDockPanelForPoint(dragInfo.mouseEvent.clientX, dragInfo.mouseEvent.clientY);\n\n if(this._dockTarget) {\n let targetRect = this._dockTarget.element.getBoundingClientRect();\n\n if(dragInfo.mouseEvent.clientX < targetRect.x + targetRect.width * dockBorder) {\n this._dockOverlay.style.left = targetRect.x + \"px\";\n this._dockOverlay.style.top = targetRect.y + \"px\";\n this._dockOverlay.style.width = targetRect.width * 0.5 + \"px\";\n this._dockOverlay.style.height = targetRect.height + \"px\";\n this._dockTargetDirection = DockDirection.Left;\n }\n else if(dragInfo.mouseEvent.clientX > targetRect.x + targetRect.width * (1 - dockBorder)) {\n this._dockOverlay.style.left = targetRect.x + targetRect.width * 0.5 + \"px\";\n this._dockOverlay.style.top = targetRect.y + \"px\";\n this._dockOverlay.style.width = targetRect.width * 0.5 + \"px\";\n this._dockOverlay.style.height = targetRect.height + \"px\";\n this._dockTargetDirection = DockDirection.Right;\n }\n else if(dragInfo.mouseEvent.clientY < targetRect.y + targetRect.height * dockBorder) {\n this._dockOverlay.style.left = targetRect.x + \"px\";\n this._dockOverlay.style.top = targetRect.y + \"px\";\n this._dockOverlay.style.width = targetRect.width + \"px\";\n this._dockOverlay.style.height = targetRect.height * 0.5 + \"px\";\n this._dockTargetDirection = DockDirection.Top;\n }\n else if(dragInfo.mouseEvent.clientY > targetRect.y + targetRect.height * (1 - dockBorder)) {\n this._dockOverlay.style.left = targetRect.x + \"px\";\n this._dockOverlay.style.top = targetRect.y + targetRect.height*0.5 + \"px\";\n this._dockOverlay.style.width = targetRect.width + \"px\";\n this._dockOverlay.style.height = targetRect.height * 0.5 + \"px\";\n this._dockTargetDirection = DockDirection.Bottom;\n }\n else {\n this._dockTargetDirection = DockDirection.Float;\n this._dockOverlay.style.width = 0 + \"px\";\n }\n }\n else {\n this._dockTargetDirection = DockDirection.Float;\n this._dockOverlay.style.width = 0 + \"px\";\n }\n }\n\n onDragEnd(mouseEvt: MouseEvent) {\n if(this._dragged) {\n this._dragged = false;\n if(this._dockOverlay != null) {\n document.body.removeChild(this._dockOverlay);\n this._dockOverlay = null;\n }\n if(this._dockTarget != null && this._dockTargetDirection != DockDirection.Float) {\n this.dockRelativeTo(this._dockTarget, this._dockTargetDirection);\n }\n }\n this._resizingHorizontally = false;\n this._resizingVertically = false;\n this.element.classList.remove(\"resizingHorizontally\");\n this.element.classList.remove(\"resizingVertically\");\n super.onDragEnd(mouseEvt);\n }\n\n float(x?: number, y?: number, width?: number, height?: number) {\n if(this.parentWidget != null) {\n if(this.parentWidget instanceof DockContainer)\n this.parentWidget.undock(this);\n }\n\n x = x || 10;\n y = y || 10;\n width = width || 400;\n height = height || 300;\n\n this.element.classList.add(\"floating\");\n this.element.style.left = x + \"px\";\n this.element.style.top = y + \"px\";\n this.element.style.width = width + \"px\";\n this.element.style.height = height + \"px\";\n document.body.appendChild(this.element);\n this.onAttached();\n this.onResize();\n \n let indexInFloatings = _floatingPanels.indexOf(this);\n if(indexInFloatings < 0)\n _floatingPanels.push(this);\n }\n\n dockRelativeTo(relativeWidget: Dockable, dockDirection: DockDirection, percentage?: number) {\n if(percentage == undefined || percentage == null)\n percentage = 0.5;\n\n if(!(relativeWidget instanceof Widget)) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeWidget' must be a Widget object\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n if(relativeWidget.parentWidget instanceof DockContainer) {\n relativeWidget.parentWidget.dockRelativeTo(this, relativeWidget, dockDirection, percentage);\n }\n else {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeWidget' must be inside a DockContainer\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n }\n}\n\nfunction updateDockContainers() {\n _dockContainers.forEach(container => {\n if(!(container.parentWidget instanceof DockContainer)) {\n container._layoutChildren();\n }\n })\n}\n\nwindow.addEventListener('resize', updateDockContainers);\n\nexport { DockContainer, DockPanel, DockDirection, Orientation }\n","import { Widget } from './Widget';\nimport { ROOT } from './ROOT';\nimport { DragInfo, getDragStart } from './dragAndDrop'\n\nclass Dialog extends Widget {\n title: string;\n titleElement: HTMLDivElement;\n modalElement: HTMLDivElement;\n contentElement: HTMLElement;\n attachedElement?: HTMLElement;\n contentWidget: Widget;\n\n constructor(title: string, contentWidget: Widget, hasCloseButton: boolean) {\n super();\n this.element.classList.add(\"Dialog\");\n this.title = title;\n this.attachedElement = null;\n hasCloseButton = hasCloseButton == undefined || hasCloseButton == true; \n \n this.titleElement = document.createElement(\"div\");\n this.titleElement.textContent = title;\n this.titleElement.className = \"title\";\n this.contentWidget = contentWidget;\n this.contentElement = contentWidget.element;\n this.contentElement.classList.add(\"content\");\n \n if(hasCloseButton) {\n let closeButton = document.createElement(\"button\");\n closeButton.className = \"closeButton\";\n closeButton.textContent = \"🗙\";\n this.titleElement.appendChild(closeButton);\n closeButton.onclick = evt => {\n this.hide();\n }\n }\n \n this.modalElement = document.createElement(\"div\");\n this.modalElement.className = \"Modal\";\n\n this.element.appendChild(this.titleElement);\n this.element.appendChild(this.contentElement);\n this.titleElement.addEventListener(\"mousedown\", getDragStart(this));\n }\n \n onAttached() {\n if(this.isAttached())\n this.contentWidget.onAttached();\n }\n\n show() {\n this.attachedElement = this.element;\n ROOT.element.appendChild(this.element);\n this.onAttached();\n }\n \n hide() {\n if(this.attachedElement != null) {\n ROOT.element.removeChild(this.attachedElement);\n this.attachedElement = null;\n }\n }\n \n showModal() {\n this.attachedElement = this.modalElement;\n this.modalElement.appendChild(this.element);\n ROOT.element.appendChild(this.modalElement);\n this.onAttached();\n }\n\n isShown() {\n return this.attachedElement != null;\n }\n\n onDragging(dragInfo: DragInfo) {\n super.onDragging(dragInfo);\n this.element.style.transform = \"none\";\n }\n}\n\nexport { Dialog }","import { Widget } from './Widget';\nimport { Color } from './Color';\nimport { DragInfo, Draggable, getDragStart } from './dragAndDrop';\nimport { Vector2 } from './Math';\nimport { Dialog } from './Dialog';\nimport { MessageDialogButton } from './MessageDialog';\n\nabstract class AbstractColorPicker extends Widget {\n private _color: Color;\n protected _onColorChanged: (oldColor: Color, newColor: Color) => void;\n \n abstract setColor(color: Color) : void;\n\n constructor(onColorChanged?: (oldColor: Color, newColor: Color) => void) {\n super();\n this.element.classList.add(\"ColorPicker\");\n this._onColorChanged = onColorChanged;\n }\n\n protected setColorProperty(color: Color) {\n const oldColor = this._color;\n this._color = color;\n\n if(this._onColorChanged)\n this._onColorChanged(oldColor, color);\n }\n\n getColor() : Color {\n return this._color;\n }\n}\n\nclass PaintStyleColorPicker extends AbstractColorPicker {\n private _hueDiv: HTMLDivElement;\n private _saturationDiv: HTMLDivElement;\n private _lightnessDiv: HTMLDivElement;\n private _colorHandle: HTMLDivElement;\n private _lightnessHandle: HTMLDivElement;\n\n constructor(color?: Color, onColorChanged?: (oldColor: Color, newColor: Color) => void) {\n super(onColorChanged);\n this.element.classList.add(\"PaintStyleColorPicker\");\n this._hueDiv = document.createElement(\"div\");\n this._hueDiv.classList.add(\"hue\");\n this._saturationDiv = document.createElement(\"div\");\n this._saturationDiv.classList.add(\"saturation\");\n this._lightnessDiv = document.createElement(\"div\");\n this._lightnessDiv.classList.add(\"lightness\");\n this._colorHandle = document.createElement(\"div\");\n this._colorHandle.classList.add(\"handle\");\n this._lightnessHandle = document.createElement(\"div\");\n this._lightnessHandle.classList.add(\"handle\");\n\n this._hueDiv.appendChild(this._saturationDiv);\n this._saturationDiv.appendChild(this._colorHandle);\n this._lightnessDiv.appendChild(this._lightnessHandle);\n this.element.appendChild(this._hueDiv);\n this.element.appendChild(this._lightnessDiv);\n\n\n let draggingHueSat = new Draggable(this._hueDiv, evt => true,\n (dragInfo) => {\n this._onHueMove(dragInfo);\n },\n evt => {});\n this._hueDiv.addEventListener(\"mousedown\", getDragStart(draggingHueSat));\n this._hueDiv.addEventListener(\"touchstart\", getDragStart(draggingHueSat));\n\n\n\n let draggingLightness = new Draggable(this._lightnessDiv, evt => true,\n (dragInfo) => {\n this._onLightnessMove(dragInfo);\n },\n evt => {});\n this._lightnessDiv.addEventListener(\"mousedown\", getDragStart(draggingLightness));\n this._lightnessDiv.addEventListener(\"touchstart\", getDragStart(draggingLightness));\n\n if(color === undefined)\n color = new Color(255, 0, 0);\n\n this.setColor(color);\n }\n\n private _onLightnessMove(dragInfo: DragInfo) {\n this._lightnessHandle.style.top = Math.max(Math.min(dragInfo.posRelativeToElement.y, this._lightnessDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _onHueMove(dragInfo: DragInfo) {\n let relativePos = dragInfo.posRelativeToElement;\n this._colorHandle.style.left = Math.max(Math.min(relativePos.x, this._hueDiv.clientWidth), 0) + \"px\";\n this._colorHandle.style.top = Math.max(Math.min(relativePos.y, this._hueDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _getColorFromCurrentPositions() : Color {\n const colorRect = this._hueDiv.getBoundingClientRect();\n const lightnessRect = this._lightnessDiv.getBoundingClientRect();\n \n const hueFactor = this._colorHandle.offsetLeft / colorRect.width;\n const satFactor = 1 - (this._colorHandle.offsetTop / colorRect.height);\n const litFactor = 1 - (this._lightnessHandle.offsetTop / lightnessRect.height);\n\n return Color.fromHsl(hueFactor * 360, satFactor, litFactor);\n }\n\n private _setColorInternal(color: Color, setPositions: boolean): void {\n const hsl = color.getHsl();\n const hueFactor = hsl.h / 360;\n const satFactor = hsl.s;\n const litFactor = hsl.l;\n\n if(setPositions) {\n const colorRect = this._hueDiv.getBoundingClientRect();\n const lightnessRect = this._lightnessDiv.getBoundingClientRect();\n \n this._colorHandle.style.left = (colorRect.width * hueFactor).toFixed(2) + \"px\";\n this._colorHandle.style.top = (colorRect.height - colorRect.height * satFactor).toFixed(2) + \"px\";\n this._lightnessHandle.style.top = (lightnessRect.height - lightnessRect.height * litFactor).toFixed(2) + \"px\";\n }\n\n let color2 = Color.fromHsl(hsl.h, hsl.s, 0.5);\n this._lightnessDiv.style.backgroundColor = color2.getHex();\n\n this.setColorProperty(color);\n }\n\n setColor(color: Color): void {\n this._setColorInternal(color, true);\n }\n\n onAttached() {\n this.setColor(this.getColor());\n }\n}\n\nclass GimpStyleColorPicker extends AbstractColorPicker {\n private _saturationDiv: HTMLDivElement;\n private _valueDiv: HTMLDivElement;\n private _hueDiv: HTMLDivElement;\n private _svHandle: HTMLDivElement;\n private _hueHandle: HTMLDivElement;\n\n constructor(color?: Color, onColorChanged?: (oldColor: Color, newColor: Color) => void) {\n super(onColorChanged);\n this.element.classList.add(\"GimpStyleColorPicker\");\n this._saturationDiv = document.createElement(\"div\");\n this._saturationDiv.classList.add(\"saturation\");\n this._valueDiv = document.createElement(\"div\");\n this._valueDiv.classList.add(\"value\");\n this._hueDiv = document.createElement(\"div\");\n this._hueDiv.classList.add(\"hue\");\n this._svHandle = document.createElement(\"div\");\n this._svHandle.classList.add(\"handle\");\n this._hueHandle = document.createElement(\"div\");\n this._hueHandle.classList.add(\"handle\");\n\n this._saturationDiv.appendChild(this._valueDiv);\n this._valueDiv.appendChild(this._svHandle);\n this._hueDiv.appendChild(this._hueHandle);\n this.element.appendChild(this._saturationDiv);\n this.element.appendChild(this._hueDiv);\n\n let draggingSatVal = new Draggable(this._saturationDiv, evt => true,\n (dragInfo) => {\n this._onSatValMove(dragInfo);\n },\n evt => {});\n this._saturationDiv.addEventListener(\"mousedown\", getDragStart(draggingSatVal));\n this._saturationDiv.addEventListener(\"touchstart\", getDragStart(draggingSatVal));\n\n let draggingHue = new Draggable(this._hueDiv, evt => true,\n (dragInfo) => {\n this._onHueMove(dragInfo);\n },\n evt => {});\n this._hueDiv.addEventListener(\"mousedown\", getDragStart(draggingHue));\n this._hueDiv.addEventListener(\"touchstart\", getDragStart(draggingHue));\n\n if(color === undefined)\n color = new Color(255, 0, 0);\n\n this.setColor(color);\n }\n\n private _onHueMove(dragInfo: DragInfo) {\n this._hueHandle.style.top = Math.max(Math.min(dragInfo.posRelativeToElement.y, this._hueDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _onSatValMove(dragInfo: DragInfo) {\n let relativePos = dragInfo.posRelativeToElement;\n this._svHandle.style.left = Math.max(Math.min(relativePos.x, this._saturationDiv.clientWidth), 0) + \"px\";\n this._svHandle.style.top = Math.max(Math.min(relativePos.y, this._saturationDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _getColorFromCurrentPositions() : Color {\n const satLitRect = this._saturationDiv.getBoundingClientRect();\n const hueRect = this._hueDiv.getBoundingClientRect();\n \n const satFactor = this._svHandle.offsetLeft / satLitRect.width;\n const litFactor = 1 - (this._svHandle.offsetTop / satLitRect.height);\n const hueFactor = this._hueHandle.offsetTop / hueRect.height;\n\n return Color.fromHsv(hueFactor * 360, satFactor, litFactor);\n }\n\n private _setColorInternal(color: Color, setPositions: boolean): void {\n const hsv = color.getHsv();\n const hueFactor = hsv.h / 360;\n const satFactor = hsv.s;\n const valFactor = hsv.v;\n\n if(setPositions) {\n const satValRect = this._hueDiv.getBoundingClientRect();\n const hueRect = this._valueDiv.getBoundingClientRect();\n \n this._svHandle.style.left = (satValRect.width * satFactor).toFixed(2) + \"px\";\n this._svHandle.style.top = (satValRect.height - satValRect.height * valFactor).toFixed(2) + \"px\";\n this._hueHandle.style.top = (hueRect.height * hueFactor).toFixed(2) + \"px\";\n }\n\n let color2 = Color.fromHsv(hsv.h, 1, 1);\n this._saturationDiv.style.backgroundColor = color2.getHex();\n\n this.setColorProperty(color);\n }\n\n setColor(color: Color): void {\n this._setColorInternal(color, true);\n }\n\n onAttached() {\n this.setColor(this.getColor());\n }\n}\n\nclass WheelColorPicker extends AbstractColorPicker {\n private _hueWheelDiv: HTMLDivElement;\n private _wheelHandle: HTMLDivElement;\n private _slHandle: HTMLDivElement;\n private _innerCircleDiv: HTMLDivElement;\n private _saturationDiv: HTMLDivElement;\n private _lightnessDiv: HTMLDivElement;\n private readonly _zeroHueVector: Vector2 = new Vector2(1, 0);\n\n constructor(color?: Color, onColorChanged?: (oldColor: Color, newColor: Color) => void) {\n super(onColorChanged);\n this.element.classList.add(\"WheelColorPicker\");\n\n this._hueWheelDiv = document.createElement(\"div\");\n this._hueWheelDiv.classList.add(\"wheel\");\n this._wheelHandle = document.createElement(\"div\");\n this._wheelHandle.classList.add(\"handle\");\n\n this._slHandle = document.createElement(\"div\");\n this._slHandle.classList.add(\"handle\");\n \n this._innerCircleDiv = document.createElement(\"div\");\n this._innerCircleDiv.classList.add(\"innerCircle\");\n\n this._saturationDiv = document.createElement(\"div\");\n this._saturationDiv.classList.add(\"saturation\");\n\n this._lightnessDiv = document.createElement(\"div\");\n this._lightnessDiv.classList.add(\"lightness\");\n\n this._lightnessDiv.appendChild(this._slHandle);\n this._saturationDiv.appendChild(this._lightnessDiv);\n this._innerCircleDiv.appendChild(this._saturationDiv);\n this._hueWheelDiv.appendChild(this._wheelHandle);\n this._hueWheelDiv.appendChild(this._innerCircleDiv);\n this.element.appendChild(this._hueWheelDiv);\n\n let draggingSatLit = new Draggable(this._saturationDiv,\n evt => true,\n (dragInfo) => {\n this._onSatLitMove(dragInfo);\n },\n evt => {});\n this._saturationDiv.addEventListener(\"mousedown\", getDragStart(draggingSatLit));\n this._saturationDiv.addEventListener(\"touchstart\", getDragStart(draggingSatLit));\n\n let draggingHue = new Draggable(this._hueWheelDiv, evt => true,\n (dragInfo) => {\n this._onHueMove(dragInfo);\n },\n evt => {});\n this._hueWheelDiv.addEventListener(\"mousedown\", getDragStart(draggingHue));\n this._hueWheelDiv.addEventListener(\"touchstart\", getDragStart(draggingHue));\n\n if(color === undefined)\n color = new Color(255, 0, 0);\n\n this.setColor(color);\n }\n\n private _onHueMove(dragInfo: DragInfo) {\n const centerX = this._hueWheelDiv.clientWidth / 2;\n const centerY = this._hueWheelDiv.clientHeight / 2;\n let handleRect = this._wheelHandle.getBoundingClientRect();\n\n \n let vector = new Vector2(dragInfo.posRelativeToElement.x - centerX, dragInfo.posRelativeToElement.y - centerY);\n vector.setLength((this._hueWheelDiv.clientWidth / 2) - (handleRect.width / 2));\n this._wheelHandle.style.left = centerX + vector.x + \"px\";\n this._wheelHandle.style.top = centerY + vector.y + \"px\";\n\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _onSatLitMove(dragInfo: DragInfo) {\n let parentRect = this._innerCircleDiv.getBoundingClientRect();\n let relativePos = dragInfo.posRelativeToElement;\n let offsetToParentX = dragInfo.rect.x - parentRect.x;\n\n relativePos.x -= (parentRect.width - offsetToParentX - offsetToParentX) / 2 ;\n relativePos.rotateInDegrees(-45);\n \n this._slHandle.style.left = Math.max(Math.min(relativePos.x, this._saturationDiv.clientWidth), 0) + \"px\";\n this._slHandle.style.top = Math.max(Math.min(relativePos.y, this._saturationDiv.clientHeight), 0) + \"px\";\n this._setColorInternal(this._getColorFromCurrentPositions(), false);\n }\n\n private _getColorFromCurrentPositions() : Color {\n const satLitRect = this._saturationDiv.getBoundingClientRect();\n const slHandleRect = this._slHandle.getBoundingClientRect();\n const hueHandleRect = this._wheelHandle.getBoundingClientRect();\n\n const x = (slHandleRect.x + (slHandleRect.width / 2)) - satLitRect.x;\n const y = (slHandleRect.y + (slHandleRect.height / 2)) - satLitRect.y;\n\n const litFactor = 1 - (y / satLitRect.height);\n\n const variableWidth = satLitRect.width * (litFactor < 0.5\n ? (litFactor * 2)\n : ((1 - litFactor) * 2));\n\n const satFactor = (x - (satLitRect.width / 2 - variableWidth / 2)) / variableWidth;\n\n let innerWidth = this._hueWheelDiv.clientWidth;\n let innerHeight = this._hueWheelDiv.clientHeight;\n let centerX = innerWidth / 2;\n let centerY = innerHeight / 2;\n let vector = new Vector2(this._wheelHandle.offsetLeft + (hueHandleRect.width / 2) - centerX, this._wheelHandle.offsetTop + (hueHandleRect.height / 2) - centerY);\n vector.setLength((innerWidth / 2) - (hueHandleRect.width / 2));\n let hue = this._zeroHueVector.getAngleToOtherInDegrees(vector);\n\n if(vector.y > 0)\n hue = 360 - hue;\n\n return Color.fromHsl(hue, satFactor, litFactor);\n }\n\n private _setColorInternal(color: Color, setPositions: boolean): void {\n const hsl = color.getHsl();\n const satFactor = hsl.s;\n const litFactor = hsl.l;\n\n if(setPositions) {\n const satLitRect = this._saturationDiv.getBoundingClientRect();\n const parentRect = this._innerCircleDiv.getBoundingClientRect();\n const variableWidth = satLitRect.width * (litFactor < 0.5\n ? (litFactor * 2)\n : ((1 - litFactor) * 2));\n\n let relativePos = new Vector2((satLitRect.width / 2) + (variableWidth * satFactor) - (variableWidth/2),\n (satLitRect.height - satLitRect.height * litFactor));\n let offsetToParentX = satLitRect.x - parentRect.x;\n relativePos.x -= (parentRect.width - offsetToParentX - offsetToParentX) / 2 ;\n relativePos.rotateInDegrees(-45);\n\n this._slHandle.style.left = relativePos.x.toFixed(2) + \"px\";\n this._slHandle.style.top = relativePos.y.toFixed(2) + \"px\";\n\n // -- hue --\n const hueHandleRect = this._wheelHandle.getBoundingClientRect();\n let innerWidth = this._hueWheelDiv.clientWidth;\n let innerHeight = this._hueWheelDiv.clientHeight;\n let centerX = innerWidth / 2;\n let centerY = innerHeight / 2;\n let vector = this._zeroHueVector.getRotatedInDegrees(-hsl.h);\n vector.setLength((innerWidth / 2) - (hueHandleRect.width / 2));\n this._wheelHandle.style.left = centerX + vector.x + \"px\";\n this._wheelHandle.style.top = centerY + vector.y + \"px\";\n }\n\n let color2 = Color.fromHsv(hsl.h, 1, 1);\n this._saturationDiv.style.backgroundColor = color2.getHex();\n\n this.setColorProperty(color);\n }\n\n setColor(color: Color): void {\n this._setColorInternal(color, true);\n }\n\n onAttached() {\n this.setColor(this.getColor());\n }\n}\n\n\n\nclass ColorPickerDialog extends Dialog {\n private colorPicker: AbstractColorPicker;\n private _textInput: HTMLInputElement;\n private _divOutput: HTMLDivElement;\n private _cancelOption: HTMLButtonElement;\n private _continueOption: HTMLButtonElement;\n private _boundKeyEvent: (evt: KeyboardEvent) => void;\n\n constructor(title: string, text: string, color: Color, buttons: MessageDialogButton[], hasCloseButton: boolean) {\n let contentWidget = new Widget();\n let contentElement = contentWidget.element;\n super(title, contentWidget, hasCloseButton);\n let textElement = document.createElement(\"div\");\n textElement.textContent = text;\n textElement.className = \"text\";\n\n this._divOutput = document.createElement(\"div\");\n this._divOutput.classList.add(\"ColorOutput\");\n this._textInput = document.createElement(\"input\");\n this.colorPicker = new WheelColorPicker(color, (oldColor, newColor) => {\n const newHexColor = newColor.getHex();\n this._textInput.value = newHexColor;\n this._divOutput.style.backgroundColor = newHexColor;\n });\n this._textInput.value = color.getHex();\n\n let textInputChanged = () => {\n let parsedColor = Color.fromHex(this._textInput.value);\n if(!parsedColor)\n return;\n\n this.colorPicker.setColor(parsedColor);\n };\n this._textInput.onkeyup = textInputChanged;\n\n let buttonsElement = document.createElement(\"div\");\n buttonsElement.className = \"buttons\";\n\n this._cancelOption = null;\n this._continueOption = null;\n\n buttons.forEach(button => {\n let buttonElement = document.createElement(\"button\");\n buttonElement.textContent = button.label;\n if(button.isCancel) {\n this._cancelOption = buttonElement;\n }\n if(button.isContinue) {\n this._continueOption = buttonElement;\n }\n buttonElement.onclick = _ => {\n this.hide();\n\n if(button.callback)\n button.callback(this);\n }\n buttonsElement.appendChild(buttonElement);\n });\n \n contentElement.appendChild(textElement);\n contentElement.appendChild(this.colorPicker.element);\n contentElement.appendChild(this._divOutput);\n contentElement.appendChild(this._textInput);\n contentElement.appendChild(buttonsElement);\n \n this.element.className = \"Dialog\";\n this.element.classList.add(\"ColorPickerDialog\");\n this.element.classList.add(\"ColorPickerDialog\");\n this._boundKeyEvent = null;\n }\n\n onAttached() {\n if(this.isAttached())\n this.colorPicker.onAttached();\n }\n\n getColor() {\n return this.colorPicker.getColor();\n }\n\n showModal() {\n super.showModal();\n this._boundKeyEvent = evt => {\n if(evt.key == \"Escape\" && this._cancelOption) {\n this._clickButton(this._cancelOption);\n }\n else if(evt.key == \"Enter\" && this._continueOption) {\n this._clickButton(this._continueOption);\n }\n }\n window.addEventListener(\"keydown\", this._boundKeyEvent);\n }\n\n _clickButton(button: HTMLButtonElement) {\n var clickEvent = new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n });\n button.dispatchEvent(clickEvent);\n }\n\n hide() {\n super.hide();\n if(this._boundKeyEvent)\n window.removeEventListener(\"keydown\", this._boundKeyEvent);\n this._boundKeyEvent = null;\n }\n}\n\nexport {\n AbstractColorPicker,\n PaintStyleColorPicker,\n GimpStyleColorPicker,\n WheelColorPicker,\n ColorPickerDialog\n}\n","import { Widget } from './Widget';\n\ntype Tab = {\n title: string,\n content: Widget,\n canBeClosed: boolean,\n};\n\nclass TabPanel extends Widget {\n tabs: Tab[];\n headers: HTMLDivElement[];\n headerElement: HTMLDivElement;\n contentElement: HTMLDivElement;\n activeIndex: number = -1;\n\n constructor(tabs? : Tab[]) {\n super();\n this.element.classList.add(\"Panel\");\n this.element.classList.add(\"TabPanel\");\n this.tabs = [];\n this.headers = [];\n\n this.headerElement = document.createElement(\"div\");\n this.headerElement.classList.add(\"TabBar\");\n\n this.contentElement = document.createElement(\"div\");\n this.contentElement.classList.add(\"Content\");\n\n this.element.appendChild(this.headerElement)\n this.element.appendChild(this.contentElement)\n\n if(tabs) {\n for(let tab of tabs) {\n this.addTab(tab);\n }\n }\n }\n\n getTabIndex(tab: Tab) { \n const idx = this.tabs.indexOf(tab);\n return idx;\n }\n\n addTab(tab: Tab) {\n this.insertTab(this.tabs.length, tab);\n }\n\n insertTab(index: number, tab: Tab) {\n const header = document.createElement(\"div\");\n header.classList.add(\"TabHeader\");\n header.textContent = tab.title;\n header.onclick = _ => this.setActiveTabIndex(this.getTabIndex(tab));\n this.headerElement.appendChild(header);\n\n this.headers.splice(index, 0, header);\n this.tabs.splice(index, 0, tab);\n\n if(this.activeIndex < 0)\n this.setActiveTabIndex(this.getTabIndex(tab));\n }\n\n removeTab(tab: Tab) {\n this.removeTabAtIndex(this.getTabIndex(tab));\n }\n\n removeTabAtIndex(index: number) {\n this.headers.splice(index, 1);\n this.tabs.splice(index, 1);\n\n if(index == this.activeIndex)\n this.setActiveTabIndex(Math.min(this.activeIndex, this.tabs.length - 1));\n }\n\n setActiveTabIndex(index: number) {\n if(this.activeIndex >= 0)\n this.headers[this.activeIndex].classList.remove(\"active\");\n if(this.contentElement.firstChild)\n this.contentElement.removeChild(this.contentElement.firstChild)\n\n this.activeIndex = index;\n\n if(index >= 0) {\n this.headers[this.activeIndex].classList.add(\"active\");\n \n this.contentElement.appendChild(this.tabs[this.activeIndex].content.element);\n \n if(this.isAttached())\n this.tabs[this.activeIndex].content.onAttached();\n }\n }\n\n onAttached() {\n if(this.activeIndex >= 0)\n this.tabs[this.activeIndex].content.onAttached();\n }\n\n onResize() {\n if(this.activeIndex >= 0)\n this.tabs[this.activeIndex].content.onResize();\n }\n}\n\nexport { TabPanel }","import { Widget } from './Widget';\n\nclass Button extends Widget {\n constructor(label: string, callback: () => void) {\n super(document.createElement(\"button\"));\n this.element.classList.add(\"Button\");\n this.element.textContent = label;\n\n if(callback)\n this.element.onclick = callback;\n }\n}\n\nexport { Button }","import { Widget } from './Widget';\n\nclass Dropdown extends Widget {\n constructor() {\n super(document.createElement(\"select\"));\n this.element.classList.add(\"Dropdown\");\n }\n\n addOption(label: string, value: string) {\n let option = document.createElement(\"option\");\n option.textContent = label;\n option.value = value;\n\n this.element.appendChild(option);\n }\n\n removeOption(value: string) {\n let options = Array.from((this.element as HTMLSelectElement).options);\n\n for(var option of options) {\n if(option.value == value) {\n this.element.removeChild(option);\n return;\n }\n }\n }\n\n getSelectedValue() {\n return (this.element as HTMLSelectElement).value;\n }\n\n setSelectedValue(value: string) {\n (this.element as HTMLSelectElement).value = value;\n }\n}\n\nexport { Dropdown }","import { Widget } from './Widget';\n\nclass ListBox extends Widget {\n private _toElementFunction: (item: any) => HTMLElement;\n private _selectedIndex: number;\n private _onItemClick: (item: any, element: HTMLElement) => void;\n private _items: any[];\n\n constructor(items: any[], toElementFunction: (item: any) => HTMLElement, onItemClick: (item: any, element: HTMLElement) => void) {\n super();\n this.element.classList.add(\"ListBox\");\n this._toElementFunction = toElementFunction || (item => item);\n this._selectedIndex = -1;\n items = items || [];\n this.setItems(items);\n this._onItemClick = onItemClick || (_ => {});\n }\n\n clear() {\n while(this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n this._items = [];\n this._selectedIndex = -1;\n }\n\n setItems(items: any[]) {\n this.clear();\n for(let item of items) {\n this.addItem(item);\n }\n }\n\n getItemCount() {\n return this._items.length;\n }\n\n addItem(item: any) {\n this._items.push(item);\n\n let itemElement = this._toElementFunction(item);\n itemElement.onclick = () => {\n this.selectItem(item);\n this._onItemClick(item, itemElement);\n }\n this.element.appendChild(itemElement);\n }\n\n removeItem(item: any) {\n let index = this._items.indexOf(item);\n this.removeItemAtIndex(index);\n }\n\n removeItemAtIndex(index: number) {\n if(index < 0)\n return;\n\n this._items.splice(index, 1);\n this.element.childNodes[index].remove();\n }\n\n selectItem(item: any) {\n let index = this._items.indexOf(item);\n this.selectItemAtIndex(index);\n }\n\n selectItemAtIndex(index: number) {\n if(this._selectedIndex >= 0)\n this.element.children[this._selectedIndex].classList.remove(\"selected\");\n\n if(index >= 0)\n this.element.children[index].classList.add(\"selected\");\n this._selectedIndex = index;\n }\n\n getSelectedItem() {\n if(this._selectedIndex >= 0)\n return this._items[this._selectedIndex];\n\n return null;\n }\n\n getItemAtIndex(index: number) {\n if(index >= 0 && index < this._items.length)\n return this._items[index];\n return null;\n }\n\n getSelectedIndex() {\n return this._selectedIndex;\n }\n}\n\nclass StringListBox extends ListBox {\n constructor(items: any[], toStringFunction?: (item: any) => string, onItemClick?: (item: any, element: HTMLElement) => void) {\n toStringFunction = toStringFunction || (item => \"\" + item);\n\n let toElementFunction = (content: string) => {\n let itemElement = document.createElement(\"div\");\n itemElement.textContent = toStringFunction(content);\n return itemElement;\n }\n super(items, toElementFunction, onItemClick);\n }\n}\n\nexport {\n ListBox, StringListBox\n}\n","import { Widget } from './Widget';\n\nclass ListViewColumn {\n name: string;\n isReadOnly: boolean;\n fromString: (value: string) => any;\n toString: (value: any) => string;\n\n constructor(name: string, isReadOnly: boolean, fromString: (value: string) => any, toString: (value: any) => string) {\n this.name = name;\n this.isReadOnly = isReadOnly;\n this.fromString = fromString;\n this.toString = toString;\n }\n\n compare(a: any, b: any) {\n return 0;\n }\n}\n \nclass StringListViewColumn extends ListViewColumn {\n constructor(name: string, isReadOnly: boolean) {\n super(name, isReadOnly, x => x, x => x);\n }\n\n compare(a: string, b: string) {\n return (a?.toLowerCase() > b?.toLowerCase())\n ? 1\n : ((b?.toLowerCase() > a?.toLowerCase())\n ? -1\n : 0);\n }\n}\n\nclass IntListViewColumn extends ListViewColumn {\n constructor(name: string, isReadOnly: boolean) {\n super(name, isReadOnly, x => parseInt(x), x => \"\" + x);\n }\n\n compare(a: number, b: number) {\n return (a > b)\n ? 1\n : ((b > a)\n ? -1\n : 0);\n }\n}\n\nclass FloatListViewColumn extends ListViewColumn {\n constructor(name: string, isReadOnly: boolean) {\n super(name, isReadOnly, x => parseFloat(x), x => \"\" + x);\n }\n\n compare(a: number, b: number) {\n return (a > b)\n ? 1\n : ((b > a)\n ? -1\n : 0);\n }\n}\n\nclass ListView extends Widget {\n private _columns: ListViewColumn[];\n private _rows: any[][];\n private _htmlRows: HTMLElement[];\n private _cellValueChangedCallback: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void;\n private _editValidationCallback: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void;\n private _cellDoubleClickCallback: (row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void;\n private _headerRow: HTMLDivElement;\n\n constructor(columns: ListViewColumn[],\n editValidationCallback?: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void,\n cellValueChangedCallback?: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void,\n cellDoubleClickCallback?: (row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void)\n {\n super();\n this.element.classList.add(\"ListView\");\n this._columns = [];\n this._rows = [];\n this._htmlRows = [];\n this._cellValueChangedCallback = cellValueChangedCallback;\n this._editValidationCallback = editValidationCallback;\n this._cellDoubleClickCallback = cellDoubleClickCallback;\n \n this._headerRow = document.createElement(\"div\");\n this._headerRow.className = \"header\";\n this.element.appendChild(this._headerRow);\n \n columns.forEach(column => {\n this.addColumn(column);\n });\n }\n\n public static fromStringColumns(columns: string[],\n areReadonly: boolean,\n editValidationCallback?: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void,\n cellValueChangedCallback?: (oldContent: any, inputContent: string, row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void,\n cellDoubleClickCallback?: (row: any[], column: ListViewColumn, rowIndex: number, columnIndex: number) => void)\n {\n return new ListView(columns.map(columnName => new StringListViewColumn(columnName, areReadonly)),\n editValidationCallback,\n cellValueChangedCallback,\n cellDoubleClickCallback);\n }\n\n // columnName: the name of the string column to add (string)\n // isReadOnly: (optional) set this to true if you want the column to be not editable\n // columnValues: (optional) a list of strings, one value per row\n // columnIndex: (optional) if this is provided, the new column is inserted at this index, otherwise it will be appended to the end\n addStringColumn(columnName: string, isReadonly?: boolean, columnValues?: string[], columnIndex?: number) {\n return this.addColumn(new StringListViewColumn(columnName, !!isReadonly), columnValues, columnIndex);\n }\n\n // column: the column to add (ListViewColumn)\n // columnValues: (optional) a list of strings, one value per row\n // columnIndex: (optional) if this is provided, the new column is inserted at this index, otherwise it will be appended to the end\n addColumn(column: ListViewColumn, columnValues?: any[], columnIndex?: number) {\n if (!(column instanceof ListViewColumn)) {\n let error = { \n name: \"Argument Error\", \n level: \"Error\", \n message: \"The argument 'column' must contain an instance of ListViewColumn, got \" + (typeof column),\n toString: function() { return this.name + \": \" + this.message; }\n }; \n console.error(error);\n throw error;\n }\n if(columnIndex === null || columnIndex === undefined)\n columnIndex = this._columns.length;\n\n let colHeader = document.createElement(\"span\");\n colHeader.textContent = column.name;\n colHeader.className = \"cell\";\n\n if(columnIndex < 0 || columnIndex >= this._headerRow.children.length) {\n this._headerRow.appendChild(colHeader);\n this._columns.push(column);\n }\n else {\n let nextSibling = this._headerRow.children.item(columnIndex);\n this._headerRow.insertBefore(colHeader, nextSibling);\n this._columns.splice(columnIndex, 0, column);\n }\n\n this.setColumnReadonly(column);\n \n // add cells if there are already rows\n if(!columnValues)\n columnValues = [];\n if(columnValues.length > this._rows.length) {\n let error = { \n name: \"Argument Error\", \n level: \"Error\", \n message: \"The argument 'columnValues' must not be longer than the total amount of rows (\" + columnValues.length + \" elements were given for \" + this._rows.length + \")\",\n toString: function() { return this.name + \": \" + this.message; }\n }; \n console.error(error);\n throw error;\n }\n for(let i = 0; i < this._rows.length; i++) {\n let row = this._rows[i];\n let htmlRow = this._htmlRows[i];\n\n let value = \"\";\n if(i < columnValues.length)\n value = columnValues[i];\n // row.push(value);\n row.splice(columnIndex, 0, value);\n this._addCellToRow(row, htmlRow, columnIndex, value);\n }\n }\n\n removeColumn(columnIndex: number) {\n this._columns.splice(columnIndex, 1);\n this._headerRow.removeChild(this._headerRow.children[columnIndex]);\n\n for(let i = 0; i < this._rows.length; i++) {\n this._rows[i].splice(columnIndex, 1);\n this._htmlRows[i].removeChild(this._htmlRows[i].children[columnIndex]);\n }\n }\n\n setColumnAtIndexReadonly(columnIndex: number, readOnly: boolean) {\n let column = this._columns[columnIndex];\n this.setColumnReadonly(column, readOnly)\n }\n\n setColumnReadonly(column: ListViewColumn, readOnly?: boolean) {\n let columnIndex = this._columns.indexOf(column);\n readOnly = readOnly !== undefined && readOnly;\n column.isReadOnly = readOnly;\n\n let i = 0;\n this._htmlRows.forEach(htmlRow => {\n let cells = Array.from(htmlRow.querySelectorAll<HTMLElement>(\".cell\"));\n if(columnIndex < cells.length)\n this._makeEditable(!column.isReadOnly, cells[columnIndex], columnIndex, this._rows[i], column);\n i++;\n });\n }\n\n removeRow(index: number) {\n this._rows.splice(index, 1);\n let htmlRow = this.element.getElementsByClassName(\"row\")[index];\n this.element.removeChild(htmlRow);\n this._htmlRows.splice(index, 1);\n }\n\n clear() {\n this._rows = [];\n this._htmlRows = [];\n let htmlRows = Array.from(this.element.getElementsByClassName(\"row\"));\n for(let htmlRow of htmlRows) {\n this.element.removeChild(htmlRow);\n }\n }\n\n sortByColumn(index: number) {\n let column = this._columns[index];\n let sortedRows = this._rows;\n sortedRows.sort((a,b) => column.compare(a[index], b[index]));\n this.clear();\n sortedRows.forEach(row => {\n this.addRow(row);\n });\n }\n\n _makeEditable(editable: boolean, htmlCell: HTMLElement, columnIndex: number, row: any[], column: ListViewColumn) {\n if(editable) {\n htmlCell.ondblclick = evt => {\n let oldContent = htmlCell.textContent;\n let cellContent = htmlCell.textContent;\n htmlCell.textContent = \"\";\n htmlCell.classList.add(\"editing\");\n let input = document.createElement(\"input\");\n input.type = \"text\";\n input.value = cellContent;\n let blurHandled = false;\n\n let processChange = (changed: boolean) => {\n let inputContent = input.value;\n\n if(changed && (!this._editValidationCallback || this._editValidationCallback(oldContent, inputContent, row, column, this._rows.indexOf(row), columnIndex))) {\n htmlCell.removeChild(input);\n htmlCell.textContent = inputContent;\n htmlCell.classList.remove(\"editing\");\n row[columnIndex] = column.fromString(inputContent);\n if(this._cellValueChangedCallback)\n this._cellValueChangedCallback(oldContent, inputContent, row, column, this._rows.indexOf(row), columnIndex);\n }\n else {\n htmlCell.textContent = cellContent;\n }\n\n htmlCell.classList.remove(\"editing\");\n \n if(!htmlCell.contains(input))\n return;\n htmlCell.removeChild(input);\n };\n \n input.onblur = evt => {\n if(blurHandled)\n return;\n\n blurHandled = true;\n processChange(true);\n };\n input.onkeyup = evt => {\n if(evt.key == \"Escape\") {\n if(blurHandled)\n return;\n blurHandled = true;\n processChange(false);\n }\n else if(evt.key == \"Enter\") {\n if(blurHandled)\n return;\n blurHandled = true;\n processChange(true);\n }\n };\n htmlCell.appendChild(input);\n input.selectionStart = input.selectionEnd = input.value.length;\n input.focus();\n };\n }\n else {\n if(this._cellDoubleClickCallback)\n htmlCell.ondblclick = _ => this._cellDoubleClickCallback(row, column, this._rows.indexOf(row), columnIndex);\n else \n htmlCell.ondblclick = null;\n }\n }\n\n _addCellToRow(row: any[], htmlRow: HTMLElement, colNo: number, value: any) {\n let htmlCell = document.createElement(\"span\");\n let column = this._columns[colNo];\n htmlCell.textContent = column.toString(value);\n htmlCell.className = \"cell\";\n\n this._makeEditable(!this._columns[colNo].isReadOnly, htmlCell, colNo, row, column);\n\n if(colNo >= htmlRow.children.length)\n htmlRow.appendChild(htmlCell);\n else\n htmlRow.insertBefore(htmlCell, htmlRow.children.item(colNo));\n return htmlCell;\n }\n \n addRow(row: any[]) {\n let htmlRow = document.createElement(\"div\");\n htmlRow.className = \"row\";\n this.element.appendChild(htmlRow);\n \n if(row.length != this._columns.length) {\n let error = { \n name: \"Argument Error\", \n level: \"Error\", \n message: \"The argument 'row' must contain \" + this._columns.length + \" entries, but \" + row.length + \" were provided\",\n toString: function() { return this.name + \": \" + this.message; }\n }; \n console.error(error);\n throw error;\n }\n\n let colNo = 0;\n row.forEach(cell => {\n this._addCellToRow(row, htmlRow, colNo, cell);\n colNo++;\n });\n this._rows.push(row);\n this._htmlRows.push(htmlRow);\n\n htmlRow.onclick = evt => {\n this.deselectRows();\n htmlRow.classList.add(\"selected\");\n };\n htmlRow.oncontextmenu = htmlRow.onclick;\n\n this.element.appendChild(htmlRow);\n }\n\n deselectRows() {\n for(let i = 0; i < this._htmlRows.length; i++) {\n this._htmlRows[i].classList.remove(\"selected\");\n }\n }\n\n selectRow(index: number) {\n for(let i = 0; i < this._htmlRows.length; i++) {\n if(i == index)\n this._htmlRows[i].classList.add(\"selected\");\n else\n this._htmlRows[i].classList.remove(\"selected\");\n }\n }\n\n getSelectedRowIndex() {\n for(let i = 0; i < this._htmlRows.length; i++) {\n if(this._htmlRows[i].classList.contains(\"selected\"))\n return i;\n }\n return -1;\n }\n\n getSelectedRow() {\n let rowIndex = this.getSelectedRowIndex();\n if(rowIndex >= 0)\n return this.getRow(rowIndex);\n\n return null;\n }\n\n getColumnCount() {\n return this._columns.length;\n }\n\n getRowCount() {\n return this._rows.length;\n }\n\n getColumns() {\n return this._columns;\n }\n\n changeCellValue(rowIndex: number, columnIndex: number, newValue: string) {\n let cells = Array.from(this._htmlRows[rowIndex].querySelectorAll(\".cell\"));\n let htmlCell = cells[columnIndex];\n htmlCell.textContent = newValue;\n this._rows[rowIndex][columnIndex] = this._columns[columnIndex].fromString(newValue);\n }\n\n getRow(index: number) {\n return this._rows[index];\n }\n\n getRows() : any[][] {\n return this._rows;\n }\n\n getColumn(index: number) {\n return this._columns[index];\n }\n\n renameColumn(index: number, newName: string) {\n this.getColumn(index).name = newName;\n this._headerRow.children[index].textContent = newName;\n }\n\n getColumnValues(index: number) {\n return this._rows.map(row => row[index]);\n }\n\n setCellContent(rowIndex: number, columnIndex: number, newValue: any) {\n let oldContent = this._rows[rowIndex][columnIndex];\n let row = this._rows[rowIndex];\n let column = this._columns[columnIndex];\n\n row[columnIndex] = column.fromString(newValue);\n this._htmlRows[rowIndex].children[columnIndex].textContent = newValue;\n\n if(this._cellValueChangedCallback)\n this._cellValueChangedCallback(oldContent, newValue, row, column, rowIndex, columnIndex);\n }\n\n getCellContent(rowIndex: number, columnIndex: number) {\n return this._rows[rowIndex][columnIndex];\n }\n}\n\nexport {\n ListView,\n ListViewColumn,\n StringListViewColumn,\n IntListViewColumn,\n FloatListViewColumn\n}","import { Widget } from './Widget';\nimport { Menu } from './Menu';\n\nclass TreeView<T> extends Widget {\n items: TreeViewItem<T>[];\n clickHandler: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void;\n _focusedItem: TreeViewItem<T>;\n\n constructor(clickHandler?: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void) {\n super();\n this.element.classList.add(\"TreeView\");\n this.items = [];\n this.clickHandler = clickHandler;\n this._focusedItem = null;\n }\n\n addItem(label: string,\n data: T,\n clickHandler: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void,\n doubleClickHandler?: (evt: MouseEvent, item: TreeViewItem<T>) => void,\n contextMenu?: Menu) : TreeViewItem<T>\n {\n let item = new TreeViewItem(label, data, clickHandler, doubleClickHandler, contextMenu);\n item.parentWidget = this;\n this.items.push(item);\n this.element.appendChild(item.element);\n return item;\n }\n\n removeItem(item: TreeViewItem<T>) {\n let idx = this.items.indexOf(item);\n if(idx >= 0) {\n this.items.splice(idx, 1);\n this.element.removeChild(item.element);\n item.parentWidget = null;\n\n if(this._focusedItem == item) {\n this._focusedItem = null;\n }\n }\n }\n\n clear() {\n this.items = [];\n this.items.forEach(item => item.parentWidget = null);\n while(this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n }\n\n getItems() : TreeViewItem<T>[] {\n return this.items;\n }\n\n deselectAll() {\n this.items.forEach(item => item.deselect());\n }\n\n getSelectedItem() : TreeViewItem<T> {\n for(let i = 0; i < this.items.length; i++) {\n let selected = this.items[i]._getIfSelected();\n if(selected != null)\n return selected;\n }\n\n return null;\n }\n\n getFocusedItem() : TreeViewItem<T> {\n return this._focusedItem;\n }\n\n _sortFunction(a: TreeViewItem<T>, b: TreeViewItem<T>) : number {\n return (a.label.toLowerCase() > b.label.toLowerCase()) ? 1\n : ((b.label.toLowerCase() > a.label.toLowerCase()) ? -1 : 0);\n }\n\n sortItems() {\n let sortedItems = this.items.splice(0);\n sortedItems.sort(this._sortFunction);\n\n this.items = [];\n while(this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n sortedItems.forEach(item => {\n if(item.children.length > 0)\n item.sortChildren();\n this.items.push(item);\n this.element.appendChild(item.element);\n });\n }\n}\n\nclass TreeViewItem<T> extends Widget {\n children: TreeViewItem<T>[];\n label: string;\n expander: HTMLSpanElement;\n labelElement: HTMLSpanElement;\n childrenElement: HTMLDivElement;\n contextMenu?: Menu;\n parentItem?: TreeViewItem<T>;\n data: T;\n\n constructor(label: string,\n data: T,\n clickHandler?: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void,\n doubleClickHandler?: (evt: MouseEvent, item: TreeViewItem<T>) => void,\n contextMenu?: Menu) {\n super();\n this.element.classList.add(\"TreeViewItem\");\n this.children = [];\n this.label = label;\n\n this.expander = document.createElement(\"span\");\n this.expander.textContent = \"›\";\n this.expander.classList.add(\"expander\");\n this.element.appendChild(this.expander);\n \n this.labelElement = document.createElement(\"span\");\n this.labelElement.textContent = label;\n this.labelElement.className = \"label\";\n this.element.appendChild(this.labelElement);\n\n this.childrenElement = document.createElement(\"div\");\n this.childrenElement.classList.add(\"children\");\n this.element.appendChild(this.childrenElement);\n this.contextMenu = contextMenu;\n this.parentItem = null;\n this.data = data;\n\n this.labelElement.draggable = true;\n\n this.labelElement.ondblclick = evt => {\n if(doubleClickHandler) {\n doubleClickHandler(evt, this);\n }\n else {\n if(this.children.length > 0) {\n this.element.classList.toggle(\"expanded\");\n }\n }\n evt.stopPropagation();\n };\n this.expander.onclick = evt => {\n if(this.children.length > 0) {\n this.element.classList.toggle(\"expanded\");\n }\n evt.stopPropagation();\n };\n\n if(contextMenu) {\n this.labelElement.oncontextmenu = evt => {\n this.setFocus(true);\n contextMenu.show(evt.clientX, evt.clientY);\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n else {\n this.labelElement.oncontextmenu = evt => {\n this.setFocus(true);\n evt.stopPropagation();\n }\n }\n\n this.labelElement.onclick = evt => {\n let oldSelection = (this.parentWidget as TreeView<T>).getSelectedItem();\n this.select();\n if(clickHandler)\n clickHandler(evt, this, oldSelection);\n if((this.parentWidget as TreeView<T>).clickHandler)\n (this.parentWidget as TreeView<T>).clickHandler(evt, this, oldSelection);\n };\n }\n\n addChildItem(item: TreeViewItem<T>) {\n item.parentItem = this;\n this.children.push(item);\n if(this.childrenElement.firstChild)\n this.childrenElement.insertBefore(item.element, this.childrenElement.firstChild);\n else\n this.childrenElement.appendChild(item.element);\n this.element.classList.add(\"expanded\");\n this.element.classList.add(\"expandable\");\n item.parentWidget = this.parentWidget;\n return item;\n }\n\n addChild(label: string,\n data: T,\n clickHandler?: (evt: MouseEvent, item: TreeViewItem<T>, previouslySelectedItem?: TreeViewItem<T>) => void,\n doubleClickHandler?: (evt: MouseEvent, item: TreeViewItem<T>) => void,\n contextMenu?: Menu)\n {\n let item = new TreeViewItem(label, data, clickHandler, doubleClickHandler, contextMenu)\n return this.addChildItem(item);\n }\n\n removeChild(child: TreeViewItem<T>) {\n let idx = this.children.indexOf(child);\n if(idx >= 0) {\n child.setFocus(false);\n\n this.childrenElement.removeChild(child.element);\n this.children.splice(idx, 1);\n child.parentWidget = null;\n child.parentItem = null;\n\n if(this.children.length == 0) {\n this.element.classList.remove(\"expanded\");\n this.element.classList.remove(\"expandable\");\n }\n }\n }\n\n sortChildren() {\n let sortedItems = this.children.splice(0);\n sortedItems.sort((this.parentWidget as TreeView<T>)._sortFunction);\n\n this.children = [];\n while(this.childrenElement.firstChild) {\n this.childrenElement.removeChild(this.childrenElement.firstChild);\n }\n sortedItems.forEach(item => {\n if(item.children.length > 0)\n item.sortChildren();\n this.children.push(item);\n this.childrenElement.appendChild(item.element);\n });\n }\n\n deselect() {\n this.labelElement.classList.remove(\"selected\");\n this.children.forEach(child => {\n child.deselect();\n });\n }\n\n select() {\n (this.parentWidget as TreeView<T>).deselectAll();\n this.labelElement.classList.add(\"selected\");\n }\n \n setFocus(hasFocus: boolean) {\n if(hasFocus) {\n if((this.parentWidget as TreeView<T>)._focusedItem) {\n (this.parentWidget as TreeView<T>)._focusedItem.setFocus(false);\n }\n (this.parentWidget as TreeView<T>)._focusedItem = this;\n this.element.classList.add(\"focused\");\n }\n else {\n this.element.classList.remove(\"focused\");\n\n if(this.contextMenu)\n this.contextMenu.hide();\n\n if(this.parentWidget && (this.parentWidget as TreeView<T>)._focusedItem == this) {\n (this.parentWidget as TreeView<T>)._focusedItem = null;\n }\n }\n }\n\n _getIfSelected() : TreeViewItem<T> {\n if(this.labelElement.classList.contains(\"selected\"))\n return this;\n\n for(let i = 0; i < this.children.length; i++) {\n let selected = this.children[i]._getIfSelected();\n if(selected != null)\n return selected;\n }\n\n return null;\n }\n}\n\nexport { TreeView, TreeViewItem }","import { MenuBar } from './MenuBar';\nimport { Widget } from './Widget';\nimport { Vector2 } from './Math';\n\nclass MenuEntry {\n name: string;\n element: HTMLElement;\n\n constructor(name: string, element: HTMLElement) {\n this.name = name;\n this.element = element;\n }\n}\n\nclass SubMenuEntry extends MenuEntry {\n menu: Menu;\n\n constructor(name: string, element: HTMLElement, menu: Menu) {\n super(name, element);\n this.menu = menu;\n }\n}\nclass SeparatorEntry extends MenuEntry {\n menu: Menu;\n\n constructor(element: HTMLElement) {\n super(\"-\", element);\n }\n}\n\nclass ClickableMenuEntry extends MenuEntry {\n canExecuteCallback: () => boolean;\n clickCallback: () => void;\n\n constructor(name: string, element: HTMLElement, clickCallback: () => void, canExecuteCallback: () => boolean) {\n super(name, element);\n this.clickCallback = clickCallback;\n this.canExecuteCallback = canExecuteCallback;\n }\n}\n\nclass Menu extends Widget {\n name: string;\n private _submenus: Menu[];\n menuEntryPanel: HTMLDivElement;\n _menuEntries: MenuEntry[];\n private _x: number;\n private _y: number;\n\n constructor(name: string) {\n super();\n this.element.classList.add(\"Menu\");\n this.name = name;\n this.element.textContent = name;\n this._submenus = [];\n this._menuEntries = [];\n\n this.menuEntryPanel = document.createElement(\"div\");\n this.menuEntryPanel.className = \"MenuContent\";\n this._x = -1;\n this._y = -1;\n\n this.element.onmouseenter = () => {\n let menuBar = this.getParentMenuBar();\n if(menuBar) {\n if(menuBar.activeMenu != null) {\n menuBar.activeMenu.hide();\n this.show();\n }\n }\n };\n\n this.element.onclick = () => {\n if(this.isShown()) {\n this.hide();\n }\n else {\n let menuBar = this.getParentMenuBar();\n if(menuBar) {\n menuBar.hideMenus();\n }\n this.show();\n }\n };\n\n document.addEventListener(\"click\", (evt: MouseEvent) => {\n let target: HTMLElement = null;\n if (evt.target instanceof HTMLElement)\n target = evt.target as HTMLElement;\n\n let parentMenu = this.getParentMenu();\n\n if(!this.menuEntryPanel.contains(target)\n && !this.element.contains(target)\n && (parentMenu == null // special case for submenus\n || !parentMenu.menuEntryPanel.contains(target))\n && this.isShown())\n {\n this.hide();\n }\n });\n }\n\n getParentMenuBar() : MenuBar {\n if(this.parentWidget != null && this.parentWidget.element.classList.contains(\"MenuBar\"))\n return this.parentWidget as MenuBar;\n return null;\n }\n\n getParentMenu() : Menu {\n if(this.parentWidget != null && this.parentWidget.element.classList.contains(\"Menu\"))\n return this.parentWidget as Menu;\n return null;\n }\n\n isShown() {\n return this.menuEntryPanel.isConnected\n && this.menuEntryPanel.style.display != undefined\n && this.menuEntryPanel.style.display != \"\"\n && this.menuEntryPanel.style.display != \"none\";\n }\n\n getPos() : Vector2 {\n let parentMenu = this.getParentMenu();\n if(parentMenu) {\n return parentMenu.getPos();\n }\n if(this.isShown()) {\n let box = this.menuEntryPanel.getBoundingClientRect();\n return new Vector2(box.left, box.top);\n }\n else {\n return new Vector2(this._x, this._y);\n }\n }\n\n show(x?: number, y?: number) {\n // check which entries are executable\n for(let i = 0; i < this.menuEntryPanel.children.length; i++) {\n if(this._menuEntries[i] instanceof ClickableMenuEntry) { \n if((this._menuEntries[i] as ClickableMenuEntry).canExecuteCallback())\n this.menuEntryPanel.children[i].classList.remove(\"disabled\");\n else\n this.menuEntryPanel.children[i].classList.add(\"disabled\");\n }\n }\n\n // if position is provided\n if(x != undefined && y != undefined) {\n if(!this.element.parentNode) {\n document.body.appendChild(this.menuEntryPanel);\n }\n this.menuEntryPanel.style.left = x + \"px\";\n this.menuEntryPanel.style.top = y + \"px\";\n this.menuEntryPanel.style.display = \"inline-block\";\n this.menuEntryPanel.style.position = \"fixed\";\n }\n // if no position is provided\n else {\n this.menuEntryPanel.style.left = this.element.getBoundingClientRect().left + \"px\";\n this.menuEntryPanel.style.display = \"inline-block\";\n \n let parentMenuBar = this.getParentMenuBar();\n if(parentMenuBar) {\n parentMenuBar.activeMenu = this;\n }\n }\n\n let box = this.menuEntryPanel.getBoundingClientRect();\n this._x = box.left;\n this._y = box.top;\n }\n\n hide() {\n this._submenus.forEach(sub => sub.hide());\n let parentMenuBar = this.getParentMenuBar();\n if(parentMenuBar) {\n if(parentMenuBar.activeMenu == this) {\n parentMenuBar.activeMenu = null;\n }\n }\n\n if(this.menuEntryPanel.parentElement == document.body) {\n document.body.removeChild(this.menuEntryPanel);\n }\n else {\n this.menuEntryPanel.style.display = \"none\";\n }\n }\n\n addEntry(title: string, callback: () => void, canExecuteCallback?: () => boolean) {\n var entry = document.createElement(\"div\");\n canExecuteCallback = canExecuteCallback || (() => true);\n entry.className = \"entry\";\n entry.textContent = title;\n entry.onclick = () => {\n this.hide();\n callback();\n };\n this.menuEntryPanel.appendChild(entry);\n this._menuEntries.push(new ClickableMenuEntry(title, entry, callback, canExecuteCallback));\n }\n\n addSubMenu(menu: Menu) {\n this._submenus.push(menu);\n var entry = document.createElement(\"div\");\n entry.className = \"entry submenu\";\n entry.textContent = menu.name;\n entry.onclick = () => {\n let rect = entry.getBoundingClientRect();\n this._submenus.forEach(sub => sub.hide());\n menu.show(Math.floor(rect.left + rect.width), rect.y);\n };\n menu.parentWidget = this;\n this.menuEntryPanel.appendChild(entry);\n this._menuEntries.push(new SubMenuEntry(menu.name, entry, menu));\n }\n\n addSeparator() {\n var separator = document.createElement(\"div\");\n separator.className = \"separator\";\n this.menuEntryPanel.appendChild(separator);\n this._menuEntries.push(new SeparatorEntry(separator));\n }\n\n clearEntries() {\n this._submenus.forEach(submenu => {\n submenu.parentWidget = null;\n });\n this._submenus = [];\n\n while(this.menuEntryPanel.firstChild)\n this.menuEntryPanel.removeChild(this.menuEntryPanel.firstChild);\n }\n}\n\nexport { Menu }","import { Widget } from './Widget';\nimport { Menu } from './Menu';\n\nclass MenuBar extends Widget {\n menus: Menu[];\n activeMenu?: Menu;\n\n constructor() {\n super();\n this.element.classList.add(\"MenuBar\");\n this.menus = [];\n this.activeMenu = null;\n }\n\n addMenu(menu: Menu) {\n if(menu instanceof Menu) {\n this.menus.push(menu);\n this.element.appendChild(menu.element);\n this.element.appendChild(menu.menuEntryPanel);\n menu.parentWidget = this;\n }\n else {\n let error = { \n name: \"Argument Error\", \n level: \"Error\", \n message: \"The argument 'menu' must be of type Menu\",\n toString: function(){return this.name + \": \" + this.message;} \n }; \n console.error(error);\n throw error;\n }\n }\n\n hideMenus() {\n this.activeMenu = null;\n this.menus.forEach(menu => {\n menu.hide();\n });\n }\n}\n\nexport { MenuBar }","import { Widget } from './Widget';\n\nclass Label extends Widget {\n constructor(text: string) {\n super();\n this.element.classList.add(\"Label\");\n this.element.textContent = text;\n }\n \n setText(text: string) {\n this.element.textContent = text;\n }\n \n getText() {\n return this.element.textContent;\n }\n}\n\nexport { Label }","import { Widget } from './Widget';\n\nclass Image extends Widget {\n constructor(src: string, width?: number, height?: number) {\n super(document.createElement(\"img\"));\n this.element.classList.add(\"Image\");\n (this.element as HTMLImageElement).src = src;\n \n if(width != undefined) {\n this.element.style.width = width + \"px\";\n }\n if(height != undefined) {\n this.element.style.height = height + \"px\";\n }\n }\n \n setSource(src: string) {\n (this.element as HTMLImageElement).src = src;\n }\n \n getSource() {\n return (this.element as HTMLImageElement).src;\n }\n}\n\nexport { Image }","enum UdoableActionCategory {\n ModifyData = 1, // should be set, when data is actually modified (default)\n ModifyView = 2 // should be set when an action is undoable, even if it doesn't mean that the actual data was changed (e.g., selecting an item in a list)\n};\n\nclass UndoHistory {\n private _history: any[];\n private _currentIndex: number;\n private _idCounter: number;\n private _onChangedCallback: (history: UndoableCommand[], index: number) => void;\n\n constructor(onChangedCallback?: (history: UndoableCommand[], index: number) => void) {\n this._history = [];\n this._currentIndex = -1;\n this._idCounter = -1;\n this._onChangedCallback = onChangedCallback || ((history, index) => {});\n }\n\n add(cmd: UndoableCommand) {\n this._currentIndex++;\n let deleteCount = this._history.length - this._currentIndex;\n this._history.splice(this._currentIndex, deleteCount, cmd);\n cmd.id = ++this._idCounter;\n\n this._onChangedCallback(this._history.slice(), this._currentIndex);\n }\n\n undo() {\n if(!this.canUndo())\n return;\n let cmd = this._history[this._currentIndex];\n this._currentIndex--;\n cmd.undo();\n this._onChangedCallback(this._history.slice(), this._currentIndex);\n }\n\n redo() {\n if(!this.canRedo())\n return;\n this._currentIndex++;\n let cmd = this._history[this._currentIndex];\n cmd.do();\n this._onChangedCallback(this._history.slice(), this._currentIndex);\n }\n\n canUndo() : boolean {\n return this._currentIndex >= 0;\n }\n\n canRedo() : boolean {\n return this._currentIndex < this._history.length - 1;\n }\n\n wasDataModifiedSinceVersion(versionId: number) : boolean {\n if(this._currentIndex < 0 || this._history[this._currentIndex].id == versionId)\n return false;\n\n // negative target index means that we look until the very beginning of the undo history...\n let targetIndex = this._history.findIndex(item => item.id == versionId);\n let step = targetIndex < this._currentIndex ? -1 : 1;\n for(let i = this._currentIndex; i != targetIndex; i += step) {\n if(this._history[i].wasDataModified())\n return true;\n }\n return false;\n }\n\n getCurrentCommand() : UndoableCommand {\n return this._history[this._currentIndex];\n }\n}\n\nclass UndoableCommand {\n id: number;\n title: string;\n do: () => void;\n undo: () => void;\n category: UdoableActionCategory;\n\n constructor(title: string, doAction: () => void, undoAction: () => void, category : UdoableActionCategory) {\n this.id = -1;\n this.title = title;\n this.do = doAction;\n this.undo = undoAction;\n this.category = category || UdoableActionCategory.ModifyData;\n }\n\n wasDataModified() : boolean {\n return this.category == UdoableActionCategory.ModifyData;\n }\n}\n\nexport { UndoHistory, UndoableCommand, UdoableActionCategory }\n","import { Widget } from './Widget';\nimport { Dialog } from './Dialog';\n\nclass MessageDialogButton\n{\n label: string;\n callback: (dlg: Dialog) => void;\n isContinue: boolean;\n isCancel: boolean;\n\n constructor(label: string,\n callback: (dlg: Dialog) => void,\n isContinue: boolean,\n isCancel: boolean) {\n this.label = label;\n this.callback = callback;\n this.isContinue = isContinue;\n this.isCancel = isCancel;\n }\n}\n\nclass MessageDialog extends Dialog {\n private _cancelOption: HTMLButtonElement;\n private _continueOption: HTMLButtonElement;\n private _boundKeyEvent: (evt: KeyboardEvent) => void;\n\n constructor(title: string, text: string, buttons: MessageDialogButton[], hasCloseButton: boolean) {\n let contentWidget = new Widget();\n let contentElement = contentWidget.element;\n super(title, contentWidget, hasCloseButton);\n\n let textElement = document.createElement(\"div\");\n textElement.textContent = text;\n textElement.className = \"text\";\n \n let buttonsElement = document.createElement(\"div\");\n buttonsElement.className = \"buttons\";\n\n this._cancelOption = null;\n this._continueOption = null;\n\n buttons.forEach(button => {\n let buttonElement = document.createElement(\"button\");\n buttonElement.textContent = button.label;\n if(button.isCancel) {\n this._cancelOption = buttonElement;\n }\n if(button.isContinue) {\n this._continueOption = buttonElement;\n }\n buttonElement.onclick = evt => {\n this.hide();\n\n if(button.callback)\n button.callback(this);\n }\n buttonsElement.appendChild(buttonElement);\n });\n \n contentElement.appendChild(textElement);\n contentElement.appendChild(buttonsElement);\n\n this._boundKeyEvent = null;\n }\n\n showModal() {\n super.showModal();\n this._boundKeyEvent = evt => {\n if(evt.key == \"Escape\" && this._cancelOption) {\n this._clickButton(this._cancelOption);\n }\n else if(evt.key == \"Enter\" && this._continueOption) {\n this._clickButton(this._continueOption);\n }\n }\n window.addEventListener(\"keydown\", this._boundKeyEvent);\n }\n\n _clickButton(button: HTMLButtonElement) {\n var clickEvent = new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n });\n button.dispatchEvent(clickEvent);\n }\n\n hide() {\n super.hide();\n if(this._boundKeyEvent)\n window.removeEventListener(\"keydown\", this._boundKeyEvent);\n this._boundKeyEvent = null;\n }\n}\n\nclass OkMessageDialog extends MessageDialog {\n constructor(title: string, text: string, hasCloseButton: boolean, callback: (dlg: Dialog) => void) {\n super(title, text, [new MessageDialogButton(\"OK\", callback, true, true)], hasCloseButton);\n }\n}\n\n\nclass InputDialog extends Dialog {\n inputElement: HTMLInputElement;\n private _cancelOption: HTMLButtonElement;\n private _continueOption: HTMLButtonElement;\n private _boundKeyEvent: (evt: KeyboardEvent) => void;\n\n constructor(title: string, text: string, value: string, buttons: MessageDialogButton[], hasCloseButton: boolean) {\n let contentWidget = new Widget();\n let contentElement = contentWidget.element;\n super(title, contentWidget, hasCloseButton);\n let textElement = document.createElement(\"div\");\n textElement.textContent = text;\n textElement.className = \"text\";\n\n this.inputElement = document.createElement(\"input\");\n this.inputElement.value = value;\n this.inputElement.type = \"text\";\n\n let buttonsElement = document.createElement(\"div\");\n buttonsElement.className = \"buttons\";\n\n this._cancelOption = null;\n this._continueOption = null;\n\n buttons.forEach(button => {\n let buttonElement = document.createElement(\"button\");\n buttonElement.textContent = button.label;\n if(button.isCancel) {\n this._cancelOption = buttonElement;\n }\n if(button.isContinue) {\n this._continueOption = buttonElement;\n }\n buttonElement.onclick = _ => {\n this.hide();\n\n if(button.callback)\n button.callback(this);\n }\n buttonsElement.appendChild(buttonElement);\n });\n \n contentElement.appendChild(textElement);\n contentElement.appendChild(this.inputElement);\n contentElement.appendChild(buttonsElement);\n \n this.element.className = \"Dialog\";\n this.element.classList.add(\"InputDialog\");\n this._boundKeyEvent = null;\n }\n\n getValue() {\n return this.inputElement.value;\n }\n\n showModal() {\n super.showModal();\n this.inputElement.focus();\n this.inputElement.select();\n this._boundKeyEvent = evt => {\n if(evt.key == \"Escape\" && this._cancelOption) {\n this._clickButton(this._cancelOption);\n }\n else if(evt.key == \"Enter\" && this._continueOption) {\n this._clickButton(this._continueOption);\n }\n }\n window.addEventListener(\"keydown\", this._boundKeyEvent);\n }\n\n _clickButton(button: HTMLButtonElement) {\n var clickEvent = new MouseEvent(\"click\", {\n \"view\": window,\n \"bubbles\": true,\n \"cancelable\": false\n });\n button.dispatchEvent(clickEvent);\n }\n\n hide() {\n super.hide();\n if(this._boundKeyEvent)\n window.removeEventListener(\"keydown\", this._boundKeyEvent);\n this._boundKeyEvent = null;\n }\n}\n\nexport { MessageDialog, OkMessageDialog, InputDialog, MessageDialogButton }","import { Widget } from './Widget';\nimport { Vector2 } from './Math';\nimport { getDragStart, Draggable, DragInfo, getClientPosFromEvent } from './dragAndDrop'\nimport { Menu } from './Menu'\nimport { UndoHistory, UndoableCommand, UdoableActionCategory } from './UndoHistory'\nimport { currentMousePos } from './dragAndDrop'\nimport { fakeClipboard, ClipboardData } from './FakeClipboard'\n\nenum DragMode {\n None = 0,\n MoveNodes = 1,\n MoveSelectedNodes = 2,\n Select = 3,\n MoveViewport\n}\n\nclass ConnectionSettingsBeforeDragging {\n fromOutput: NodePort;\n toInput: NodePort;\n\n constructor(fromOutput: NodePort, toInput: NodePort) {\n this.fromOutput = fromOutput;\n this.toInput = toInput;\n }\n}\n\nclass NodeEditorClipboardData {\n nodes: NodeClipboardData[];\n connections: NodeConnectionClipboardData[];\n\n constructor(nodes: NodeClipboardData[], connections: NodeConnectionClipboardData[]) {\n this.nodes = nodes;\n this.connections = connections;\n }\n}\n\nclass NodeConnectionClipboardData {\n fromNodeIndex: number;\n fromOutputIndex: number;\n toNodeIndex: number;\n toInputIndex: number;\n\n constructor(fromNodeIndex: number,\n fromOutputIndex: number,\n toNodeIndex: number,\n toInputIndex: number)\n {\n this.fromNodeIndex = fromNodeIndex;\n this.fromOutputIndex = fromOutputIndex;\n this.toNodeIndex = toNodeIndex;\n this.toInputIndex = toInputIndex;\n }\n}\n\nclass NodePortClipboardData {\n name: string;\n allowMultipleConnectionsForOutput: boolean;\n canConnectCheck: (other: NodePort) => boolean;\n allowMultipleConnections?: boolean;\n\n constructor(name: string,\n allowMultipleConnectionsForOutput: boolean,\n canConnectCheck: (other: NodePort) => boolean,\n allowMultipleConnections?: boolean)\n {\n this.name = name;\n this.allowMultipleConnectionsForOutput = allowMultipleConnectionsForOutput;\n this.canConnectCheck = canConnectCheck;\n this.allowMultipleConnections = allowMultipleConnections;\n }\n}\n\nexport class NodeClipboardData {\n title: string;\n inputs: NodePortClipboardData[];\n outputs: NodePortClipboardData[];\n pos: Vector2;\n data: any;\n\n constructor(title: string,\n inputs: NodePortClipboardData[],\n outputs: NodePortClipboardData[],\n pos: Vector2) {\n this.title = title;\n this.inputs = inputs;\n this.outputs = outputs;\n this.pos = pos;\n }\n}\n\nclass NodeEditorViewport {\n x: number;\n y: number;\n zoom: number;\n\n constructor(x: number, y: number, zoom: number) {\n this.x = x;\n this.y = y;\n this.zoom = zoom;\n }\n\n getPixelPos() : Vector2{\n return this.getPixelPosFromPos(0, 0);\n }\n\n getPixelPosFromPos(x: number, y: number) : Vector2 {\n return new Vector2((x - this.x) * this.zoom,\n (y - this.y) * this.zoom);\n }\n\n getPosFromPixelPos(pixelX: number, pixelY: number) : Vector2 {\n return new Vector2((pixelX / this.zoom) + this.x,\n (pixelY / this.zoom) + this.y);\n }\n}\n\nclass NodeEditor extends Widget {\n _undoHistory: UndoHistory;\n private _svg: SVGSVGElement;\n private _nodes: Node[];\n _viewport: NodeEditorViewport;\n private _scrollSpeedX: number;\n private _scrollSpeedY: number;\n _addArrowHeads: boolean;\n private _defineCtrlShortcuts: boolean;\n\n _targetInput?: NodePort;\n _targetOutput?: NodePort;\n _targetNode?: Node;\n _dragStart: Vector2;\n private _viewportDragStart: Vector2;\n _dragMode: DragMode;\n private _selectRect: HTMLDivElement;\n contextMenu: Menu;\n _draggedConnection?: NodeConnection;\n protected _hasFocus: boolean;\n _connectionSettingsBeforeDragging: ConnectionSettingsBeforeDragging;\n _selectedNodes: Node[];\n _nodeSelectedCallback: (selectedNode: Node) => void;\n _nodeDeselectedCallback: (deselectedNode: Node) => void;\n _nodeAddedCallback: (addedNode: Node) => void;\n _nodeRemovedCallback: (removedNode: Node) => void;\n _previouslySelectedNodes: any[];\n _connections: any;\n\n constructor(nodeSelectedCallback?: (selectedNode: Node) => void,\n nodeDeselectedCallback?: (deselectedNode: Node) => void,\n nodeAddedCallback?: (addedNode: Node) => void,\n nodeRemovedCallback?: (removedNode: Node) => void,\n scrollSpeedX?: number,\n scrollSpeedY?: number,\n addArrowHeads?: boolean,\n defineCtrlShortcuts?: boolean,\n undoHistory?: UndoHistory)\n {\n super();\n this.element.classList.add(\"NodeEditor\");\n\n this._undoHistory = undoHistory || new UndoHistory();\n\n this._svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this._svg.setAttributeNS(null, \"width\", \"800\");\n this._svg.setAttributeNS(null, \"height\", \"300\");\n\n let defs = document.createElementNS(\"http://www.w3.org/2000/svg\", \"defs\");\n let arrowHead = document.createElementNS(\"http://www.w3.org/2000/svg\", \"marker\");\n arrowHead.setAttributeNS(null, \"style\", \"overflow:visible;\");\n arrowHead.setAttributeNS(null, \"refX\", \"0.0\");\n arrowHead.setAttributeNS(null, \"refY\", \"0.0\");\n arrowHead.setAttributeNS(null, \"orient\", \"auto\");\n arrowHead.setAttributeNS(null, \"id\", \"ArrowHead\");\n\n let arrowHeadPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n arrowHeadPath.setAttributeNS(null, \"transform\", \"scale(0.7) translate(-8,-5)\");\n arrowHeadPath.setAttributeNS(null, \"d\", \"M 0 0 L 5 5 L 0 10 z\");\n arrowHead.appendChild(arrowHeadPath);\n defs.appendChild(arrowHead);\n this._svg.appendChild(defs);\n\n this.element.appendChild(this._svg);\n this._nodes = [];\n this._viewport = new NodeEditorViewport(0, 0, 1);\n this._scrollSpeedX = scrollSpeedX || 0.4;\n this._scrollSpeedY = scrollSpeedY || 0.4;\n this._addArrowHeads = addArrowHeads || addArrowHeads === undefined;\n\n this._targetInput = null;\n this._targetOutput = null;\n this._targetNode = null;\n this._defineCtrlShortcuts = defineCtrlShortcuts || defineCtrlShortcuts === undefined;\n\n this._dragStart = new Vector2(-1, 1 );\n this._viewportDragStart = new Vector2(-1, -1 );\n this._dragMode = DragMode.None;\n this._selectRect = document.createElement(\"div\");\n this._selectRect.className = \"selectRect\";\n this.element.appendChild(this._selectRect);\n this._selectRect.style.display = \"none\";\n\n this.contextMenu = new Menu(\"Node Editor\");\n this.contextMenu.addEntry(\"Cut\",\n () => this.onCut(),\n () => this.getSelectedNodes().length > 0);\n this.contextMenu.addEntry(\"Copy\",\n () => this.onCopy(),\n () => this.getSelectedNodes().length > 0);\n this.contextMenu.addEntry(\"Paste\",\n () => this.onPaste(true),\n () => this.canPaste());\n this.contextMenu.addEntry(\"Delete\",\n () => this._removeSelectedNodes(),\n () => this.getSelectedNodes().length > 0);\n\n this.element.addEventListener(\"contextmenu\", evt => {\n evt.preventDefault();\n this.contextMenu.show(evt.clientX, evt.clientY);\n return false;\n });\n\n let dragStart = getDragStart(this);\n this.element.addEventListener(\"mousedown\", evt => {\n dragStart(evt);\n\n this._nodes.forEach(node => {\n let pos = node.getPixelPos();\n node._dragEditorPixelStartX = pos.x;\n node._dragEditorPixelStartY = pos.y;\n });\n });\n\n this._draggedConnection = null;\n this._connectionSettingsBeforeDragging = null;\n this._selectedNodes = [];\n this._nodeSelectedCallback = nodeSelectedCallback; // node => {}\n this._nodeDeselectedCallback = nodeDeselectedCallback; // node => {}\n this._nodeAddedCallback = nodeAddedCallback; // node => {}\n this._nodeRemovedCallback = nodeRemovedCallback; // node => {}\n this._previouslySelectedNodes = [];\n\n this._hasFocus = false;\n window.addEventListener(\"mouseup\", evt => {\n this._hasFocus = this.element.contains(evt.target as HTMLElement);\n });\n\n window.addEventListener(\"keydown\", evt => {\n if(!this._hasFocus)\n return;\n\n if(evt.key == \"Delete\") {\n this._removeSelectedNodes();\n }\n else if(evt.key == \"0\" && evt.ctrlKey) {\n this._applyZoom(1);\n }\n\n if(this._defineCtrlShortcuts) {\n if(evt.key.toLowerCase() == \"z\" && evt.ctrlKey) {\n if(evt.shiftKey) {\n this._undoHistory.redo();\n }\n else {\n this._undoHistory.undo();\n }\n }\n else if(evt.key.toLowerCase() == \"y\" && evt.ctrlKey) {\n this._undoHistory.redo();\n }\n // copy\n else if(evt.key.toLowerCase() == \"c\" && evt.ctrlKey) {\n this.onCopy();\n }\n // cut\n else if(evt.key.toLowerCase() == \"x\" && evt.ctrlKey) {\n this.onCut();\n }\n // paste\n else if(evt.key.toLowerCase() == \"v\" && evt.ctrlKey) {\n this.onPaste(false);\n }\n else if(evt.key.toLowerCase() == \"a\" && evt.ctrlKey) {\n if(evt.shiftKey)\n this.deselectAllWithUndo();\n else\n this.selectAllWithUndo();\n\n evt.preventDefault();\n }\n }\n });\n\n this.element.addEventListener('wheel', evt => {\n evt.preventDefault();\n\n if(evt.ctrlKey) {\n this._hasFocus = true;\n let zoom = this._viewport.zoom - evt.deltaY * 0.001;\n\n // Restrict scale\n zoom = Math.min(Math.max(.125, zoom), 4);\n\n let bBox = this.element.getBoundingClientRect();\n this._applyZoom(zoom, evt.clientX - bBox.left, evt.clientY - bBox.top);\n }\n else {\n this._viewport.x += this._scrollSpeedX * evt.deltaX;\n this._viewport.y += this._scrollSpeedY * evt.deltaY;\n this._nodes.forEach(node => {\n node.update();\n });\n }\n\n return;\n\n\n });\n }\n\n // ------------------------------------------------\n\n onCopy() {\n this.copy();\n }\n\n onCut() {\n this.cut();\n }\n\n onPaste(fromContextMenu: boolean) {\n this.paste(fromContextMenu);\n }\n\n canPaste() {\n return fakeClipboard.containsData();\n }\n\n // ------------------------------------------------\n\n /// override this one to change the copy behavior (i.e. in order to not use the fake clipboard)\n overridableCopy(data: NodeEditorClipboardData) {\n fakeClipboard.set(new ClipboardData(\"NodeEditor\", new Date(), data));\n }\n\n /// override this one to change the paste behavior (i.e. in order to not use the fake clipboard)\n overridablePaste() : NodeEditorClipboardData {\n if(!fakeClipboard.containsData())\n return null;\n\n let clipboardContent = fakeClipboard.get();\n\n if(clipboardContent.type != \"NodeEditor\")\n return null;\n\n return clipboardContent.data;\n }\n\n // ------------------------------------------------\n\n // TODO: make \"NodeEditor\" as clipboard data customizable (=> not every editor should accept the contents of another one)\n\n copy() {\n if(this.getSelectedNodes().length > 0)\n this.overridableCopy(this._getNodesCopyData())\n }\n\n cut() {\n this.copy();\n this._removeSelectedNodes();\n }\n\n paste(useContextMenu: boolean) {\n let data = this.overridablePaste();\n if(!data)\n return;\n\n let box = this.element.getBoundingClientRect();\n let x;\n let y;\n if(useContextMenu) {\n let pos = this.contextMenu.getPos();\n x = pos.x - box.left;\n y = pos.y - box.top;\n }\n else {\n let mousePos = currentMousePos;\n x = mousePos.x - box.left;\n y = mousePos.y - box.top;\n }\n\n this._paste(data, new Vector2(x, y));\n }\n\n // ------------------------------------------------\n\n setFocus(hasFocus: boolean) {\n this._hasFocus = hasFocus;\n }\n\n hasFocus() : boolean {\n return this._hasFocus;\n }\n\n _applyZoom(newZoom: number, x?: number, y?: number) {\n x = x || 0;\n y = y || 0;\n let mousePosOld = this._viewport.getPosFromPixelPos(x, y);\n this._viewport.zoom = newZoom;\n let mousePosNew = this._viewport.getPosFromPixelPos(x, y);\n\n this._viewport.x = this._viewport.x + mousePosOld.x - mousePosNew.x;\n this._viewport.y = this._viewport.y + mousePosOld.y - mousePosNew.y;\n\n this.element.style.fontSize = newZoom + \"em\";\n\n this._nodes.forEach(node => {\n node.update();\n });\n }\n\n useArrowHeads(useArrowHeads: boolean) {\n this._addArrowHeads = useArrowHeads;\n for(let node of this._nodes) {\n for(let connection of node._connections) {\n connection.setUseArrowHead(useArrowHeads);\n }\n }\n }\n\n scrollSpeedX(scrollSpeedX: number) {\n this._scrollSpeedX = scrollSpeedX;\n }\n\n scrollSpeedY(scrollSpeedY: number) {\n this._scrollSpeedY = scrollSpeedY;\n }\n\n _addConnection(connection: NodeConnection) {\n if(!this._svg.contains(connection._path))\n this._svg.appendChild(connection._path);\n }\n\n _removeConnection(connection: NodeConnection) {\n if(this._svg.contains(connection._path))\n this._svg.removeChild(connection._path);\n }\n\n _removeSelectedNodes() {\n let selectedNodes = this._selectedNodes.splice(0);\n\n let cmd = new UndoableCommand(\"Delete Nodes\",\n () => {\n selectedNodes.forEach(node => {\n this.removeNode(node);\n });\n },\n () => {\n this.deselectAll();\n selectedNodes.forEach(node => {\n this.addNode(node);\n node.select();\n });\n }, UdoableActionCategory.ModifyData);\n cmd.do();\n this._undoHistory.add(cmd);\n }\n\n onAttached() {\n if(this.isAttached()) {\n this._nodes.forEach(node => {\n node.onAttached();\n });\n }\n }\n\n getSelectedNodes() {\n return this._selectedNodes;\n }\n\n clear() {\n this._nodes.slice().forEach(node => this.removeNode(node));\n }\n\n _createNodeForPaste(data: NodeClipboardData) {\n let node = new Node(data.title);\n for(let inputData of data.inputs) {\n node.addInput(inputData.name, inputData.canConnectCheck);\n }\n for(let outputData of data.outputs) {\n node.addOutput(outputData.name, outputData.canConnectCheck, outputData.allowMultipleConnections);\n }\n return node;\n }\n\n _getNodesCopyData() : NodeEditorClipboardData {\n let selectedNodes = this.getSelectedNodes();\n\n let nodesData = selectedNodes.map(node => node._copy());\n let connections = [];\n\n let i = 0;\n for(let selectedNode of selectedNodes) {\n for(let connection of selectedNode._connections) {\n if(connection._fromOutput._node == selectedNode) {\n let toNodeIndex = selectedNodes.indexOf(connection._toInput._node);\n if(toNodeIndex >= 0) {\n let connectionInfo = new NodeConnectionClipboardData(i, selectedNode._outputs.indexOf(connection._fromOutput),\n toNodeIndex, selectedNodes[toNodeIndex]._inputs.indexOf(connection._toInput));\n connections.push(connectionInfo);\n }\n }\n }\n i++;\n }\n return new NodeEditorClipboardData(nodesData, connections);\n }\n\n _paste(data: NodeEditorClipboardData, pixelPos: Vector2) {\n // add nodes\n let nodesData = data.nodes;\n let minX:number = null;\n let minY:number = null;\n for(let nodeData of nodesData) {\n if(minX == null || nodeData.pos.x < minX)\n minX = nodeData.pos.x\n if(minY == null || nodeData.pos.y < minY)\n minY = nodeData.pos.y\n }\n\n let nodesToPaste = nodesData.map((nodeData: NodeClipboardData) => {\n let node = this._createNodeForPaste(nodeData);\n node.setPixelPos((nodeData.pos.x - minX) + pixelPos.x, (nodeData.pos.y - minY) + pixelPos.y);\n return node;\n });\n\n let oldSelection = this._selectedNodes.slice(0);\n\n let pasteCmd = new UndoableCommand(nodesData.length > 1 ? \"Paste Nodes\" : \"Paste Node\",\n () => { // do\n this.deselectAll();\n\n for(let node of nodesToPaste) {\n this.addNode(node);\n node.select();\n }\n\n // add connections\n for(let connectionData of data.connections) {\n this.connect(nodesToPaste[connectionData.fromNodeIndex]._outputs[connectionData.fromOutputIndex],\n nodesToPaste[connectionData.toNodeIndex]._inputs[connectionData.toInputIndex]);\n }\n this._onNodesPasted(nodesToPaste);\n for(let node of nodesToPaste) {\n node.update();\n };\n }, // undo\n () => {\n nodesToPaste.forEach((node: Node) => this.removeNode(node));\n this.deselectAll();\n oldSelection.forEach(node => node.select());\n }, UdoableActionCategory.ModifyData);\n pasteCmd.do();\n this._undoHistory.add(pasteCmd);\n }\n\n _onNodesPasted(pastedNodes: Node[]) {\n }\n\n removeNode(node: Node) {\n node._editor = null;\n this.element.removeChild(node.element);\n node._connections.forEach(connection => {\n if(connection._fromOutput._node != node) {\n connection._fromOutput._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n }\n if(connection._toInput._node != node) {\n connection._toInput._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n }\n this._removeConnection(connection)\n });\n\n const index = this._nodes.indexOf(node);\n if (index > -1)\n this._nodes.splice(index, 1);\n\n const index2 = this._selectedNodes.indexOf(node);\n if (index2 > -1)\n this._selectedNodes.splice(index2, 1);\n\n if(this._nodeRemovedCallback) {\n this._nodeRemovedCallback(node);\n }\n }\n\n addNode(node: Node) {\n this._nodes.push(node);\n this.element.appendChild(node.element);\n node._editor = this;\n\n // re-add connections if the node was already part of this editor before\n node._connections.forEach(connection => {\n if(connection._fromOutput._node != node) {\n connection._fromOutput._node.addConnection(connection);\n }\n if(connection._toInput._node != node) {\n connection._toInput._node.addConnection(connection);\n }\n this._addConnection(connection)\n });\n\n node.onAttached();\n if(this._nodeAddedCallback) {\n this._nodeAddedCallback(node);\n }\n }\n\n addNodeWithUndo(node: Node, actionName: string) {\n let addCmd = new UndoableCommand(actionName || \"Add Node\",\n () => { // do\n this.addNode(node);\n }, // undo\n () => {\n this.removeNode(node);\n }, UdoableActionCategory.ModifyData);\n addCmd.do();\n this._undoHistory.add(addCmd);\n }\n\n getNodes() {\n return this._nodes;\n }\n\n connect(output: NodePort, input: NodePort) {\n let connection = new NodeConnection(output, input);\n output._node.addConnection(connection);\n input._node.addConnection(connection);\n this._addConnection(connection);\n }\n\n disconnect(output: NodePort, input: NodePort) {\n let connection = this._connections\n .find((conn: NodeConnection) => conn._fromOutput == output\n && conn._toInput == input);\n\n if(!connection)\n return;\n\n output._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n input._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n this._removeConnection(connection);\n }\n\n onDragStart(evt: MouseEvent | TouchEvent) {\n let mouseEvent = null;\n if(evt.type.startsWith(\"mouse\")) {\n mouseEvent = evt as MouseEvent;\n }\n\n let clientPos = getClientPosFromEvent(evt);\n\n // dragging the camera around\n if(mouseEvent === null || mouseEvent.button == 1 // middle mouse button\n || (mouseEvent.button == 0 && evt.ctrlKey)) // left mouse button and ctrl being pressed\n {\n this.element.classList.add(\"moving\");\n this._dragMode = DragMode.MoveViewport;\n let rect = this.element.getBoundingClientRect();\n this._dragStart.x = clientPos.x - rect.left;\n this._dragStart.y = clientPos.y - rect.top;\n\n this._viewportDragStart.x = this._viewport.x;\n this._viewportDragStart.y = this._viewport.y;\n return true;\n }\n // creating a selection rectangle\n else if((mouseEvent === null || mouseEvent.button == 0) && evt.target == this.element) {\n this._previouslySelectedNodes = this._selectedNodes.slice(0);\n this.deselectAll();\n let rect = this.element.getBoundingClientRect();\n this._dragStart.x = clientPos.x - rect.left;\n this._dragStart.y = clientPos.y - rect.top;\n\n this._dragMode = DragMode.Select;\n this._selectRect.style.display = \"block\";\n this._selectRect.style.left = this._dragStart.x + \"px\";\n this._selectRect.style.top = this._dragStart.y + \"px\";\n this._selectRect.style.width = \"0\";\n this._selectRect.style.height = \"0\";\n return true;\n }\n else {\n return false;\n }\n }\n\n onDragNodesStarted() {\n this.element.classList.add(\"moving\");\n this._selectedNodes.forEach(node => {\n node.onDragStarted();\n });\n }\n\n\n _scrollOutOfBounds(x: number, y: number) {\n if(x == 0 && y == 0)\n return;\n\n this._viewport.x += x * 0.2;\n this._viewport.y += y * 0.2;\n\n this._nodes.forEach(node => {\n node.update();\n });\n }\n\n _checkOutOfBoundsScroll(evt: MouseEvent | TouchEvent) {\n let x = 0;\n let y = 0;\n\n let clientPos = getClientPosFromEvent(evt);\n\n const rect = this.element.getBoundingClientRect();\n const posRelativeToElementX = clientPos.x - rect.x;\n const posRelativeToElementY = clientPos.y - rect.y;\n\n if(posRelativeToElementX < 0)\n x = posRelativeToElementX;\n else if(posRelativeToElementX > rect.width)\n x = posRelativeToElementX - rect.width;\n\n if(posRelativeToElementY < 0)\n y = posRelativeToElementY;\n else if(posRelativeToElementY > rect.height)\n y = posRelativeToElementY - rect.height;\n\n this._scrollOutOfBounds(x, y);\n }\n\n onDragging(dragInfo: DragInfo) {\n let rect = this.element.getBoundingClientRect();\n let xOffset = dragInfo.posWithOffsetToParentConsidered.x - rect.left;\n let yOffset = dragInfo.posWithOffsetToParentConsidered.y - rect.top;\n\n switch(this._dragMode) {\n case DragMode.MoveViewport:\n this._viewport.x = this._viewportDragStart.x - (xOffset / this._viewport.zoom);\n this._viewport.y = this._viewportDragStart.y - (yOffset / this._viewport.zoom);\n\n this._nodes.forEach(node => {\n node.update();\n });\n break;\n case DragMode.MoveSelectedNodes:\n this._selectedNodes.forEach(node => {\n node.setPixelPos(node._dragEditorPixelStartX + xOffset,\n node._dragEditorPixelStartY + yOffset);\n\n node._connections.forEach((connection: NodeConnection) => {\n connection.update();\n });\n });\n this._checkOutOfBoundsScroll(dragInfo.mouseEvent || dragInfo.touchEvent);\n break;\n case DragMode.Select:\n if(xOffset < 0) {\n this._selectRect.style.left = this._dragStart.x + xOffset + \"px\";\n xOffset *= -1;\n }\n else {\n this._selectRect.style.left = this._dragStart.x + \"px\";\n }\n if(yOffset < 0) {\n this._selectRect.style.top = this._dragStart.y + yOffset + \"px\";\n yOffset *= -1;\n }\n else {\n this._selectRect.style.top = this._dragStart.y + \"px\";\n }\n this._selectRect.style.width = xOffset + \"px\";\n this._selectRect.style.height = yOffset + \"px\";\n\n let selectRectBoundingBox = this._selectRect.getBoundingClientRect();\n let selectedNodes = this._nodes.map(node => {\n return {\n node: node,\n selected: this.intersection(selectRectBoundingBox, node.element.getBoundingClientRect())\n };\n });\n\n selectedNodes.forEach(selection => {\n if(selection.selected)\n selection.node.select();\n else\n selection.node.deselect();\n });\n this._checkOutOfBoundsScroll(dragInfo.mouseEvent || dragInfo.touchEvent);\n break;\n }\n }\n\n onDragEnd(evt: MouseEvent | TouchEvent) {\n this.element.classList.remove(\"moving\");\n switch(this._dragMode) {\n case DragMode.MoveViewport:\n break;\n case DragMode.MoveSelectedNodes:\n this._selectedNodes.forEach(node => node.onDragEnd(evt));\n\n let movedNodes = this._selectedNodes.map(node => {\n return {\n node: node,\n startPos: {\n x: node._dragEditorStartX,\n y: node._dragEditorStartY\n },\n endPos: {\n x: node._pos.x,\n y: node._pos.y\n }\n };\n });\n // only do this if the position actually changes\n if(!movedNodes.every(movedNode => movedNode.endPos.x == movedNode.startPos.x\n && movedNode.endPos.x == movedNode.startPos.x)) {\n let moveCmd = new UndoableCommand(this._selectedNodes.length > 1 ? \"Move Nodes\" : \"Move Node\",\n () => {\n movedNodes.forEach(element => {\n element.node.setPos(element.endPos.x, element.endPos.y);\n });\n },\n () => {\n movedNodes.forEach(element => {\n element.node.setPos(element.startPos.x, element.startPos.y);\n });\n }, UdoableActionCategory.ModifyData);\n moveCmd.do();\n this._undoHistory.add(moveCmd);\n }\n break;\n case DragMode.Select:\n this._selectRect.style.display = \"none\";\n\n let previouslySelectedNodes = this._previouslySelectedNodes;\n let selectedNodes = this._selectedNodes.slice(0);\n if(!(previouslySelectedNodes.length == 0 && selectedNodes.length == 0)) {\n let selectCmd = new UndoableCommand(selectedNodes.length == 0 ? \"Deselect All Nodes\" : \"Select Nodes\",\n () => {\n this.deselectAll();\n selectedNodes.forEach(node => node.select());\n },\n () => {\n this.deselectAll();\n previouslySelectedNodes.forEach(node => node.select());\n }, UdoableActionCategory.ModifyView);\n this._undoHistory.add(selectCmd);\n }\n break;\n }\n this._dragMode = DragMode.None;\n }\n\n intersection(rect1: DOMRect, rect2: DOMRect) {\n return !(rect1.right < rect2.left ||\n rect1.left > rect2.right ||\n rect1.bottom < rect2.top ||\n rect1.top > rect2.bottom)\n }\n\n deselectAllWithUndo() {\n let selectedNodes = this._selectedNodes.slice(0);\n let cmd = new UndoableCommand(\"Deselect All Nodes\",\n () => {\n this.deselectAll();\n },\n () => {\n this.deselectAll();\n selectedNodes.forEach(node => node.select());\n }, UdoableActionCategory.ModifyView);\n\n cmd.do();\n this._undoHistory.add(cmd);\n }\n\n selectAllWithUndo() {\n let selectedNodes = this._selectedNodes.slice(0);\n let cmd = new UndoableCommand(\"Select All Nodes\",\n () => {\n this.selectAll();\n },\n () => {\n this.deselectAll();\n selectedNodes.forEach(node => node.select());\n }, UdoableActionCategory.ModifyView);\n\n cmd.do();\n this._undoHistory.add(cmd);\n }\n\n deselectAll() {\n let selectedNodes = this._selectedNodes.slice(0); // copy array\n selectedNodes.forEach(node => {\n node.deselect();\n });\n }\n\n selectAll() {\n this._nodes.forEach(node => {\n node.select();\n });\n }\n}\n\nclass NodeConnection {\n _fromOutput: NodePort;\n _toInput: NodePort;\n _path: SVGPathElement;\n\n constructor(fromOutput: NodePort, toInput: NodePort) {\n this._fromOutput = fromOutput;\n this._toInput = toInput;\n\n this._path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n this._path.setAttributeNS(null, \"fill\", \"transparent\");\n this._path.setAttributeNS(null, \"stroke-width\", \"2\");\n\n if((fromOutput || toInput)._node._editor._addArrowHeads)\n this._path.setAttributeNS(null, \"style\", \"marker-end:url(#ArrowHead)\");\n\n if(this._fromOutput && this._toInput)\n this.update();\n }\n\n setUseArrowHead(useArrowHead: boolean) {\n if(useArrowHead)\n this._path.setAttributeNS(null, \"style\", \"marker-end:url(#ArrowHead)\");\n else\n this._path.setAttributeNS(null, \"style\", \"marker-end:none\");\n }\n\n update(x?: number, y?: number) {\n let fromRect;\n let toRect;\n\n if(this._fromOutput != null)\n fromRect = this._fromOutput._bullet.getBoundingClientRect();\n else\n fromRect = { left: x, top: y, width: 0, height: 0 };\n if(this._toInput != null)\n toRect = this._toInput._bullet.getBoundingClientRect();\n else\n toRect = { left: x, top: y, width: 0, height: 0 };\n\n let docRect;\n if(this._path.parentNode != null)\n docRect = this._path.parentElement.getBoundingClientRect();\n else\n docRect = { left: 0, top: 0 };\n\n let fromX = fromRect.left - docRect.left + fromRect.width * 0.5;\n let fromY = fromRect.top - docRect.top + fromRect.height * 0.5;\n let toX = toRect.left - docRect.left + toRect.width * 0.5;\n let toY = toRect.top - docRect.top + toRect.height * 0.5;\n let editor = this._fromOutput\n ? this._fromOutput._node._editor\n : this._toInput\n ? this._toInput._node._editor\n : null;\n let zoom = editor ? editor._viewport.zoom : 1;\n if(!zoom)\n zoom = 1;\n\n this._path.setAttributeNS(null, \"d\", \"M\"\n + fromX\n + \" \"\n + fromY\n + \" C \"\n + (fromX + 50 * zoom)\n + \" \"\n + fromY\n + \", \"\n + (toX - 50 * zoom)\n + \" \"\n + toY\n + \", \"\n + toX\n + \" \"\n + toY);\n }\n}\n\nexport class NodePort {\n _node: Node;\n _name: string;\n _isInput: boolean;\n _allowMultipleConnectionsForOutput: boolean;\n _canConnectCheck: (source: NodePort) => boolean;\n _bullet: HTMLSpanElement;\n\n constructor(node: Node,\n name: string,\n isInput: boolean,\n canConnectCheck?: (source: NodePort) => boolean,\n allowMultipleConnectionsForOutput?: boolean)\n {\n this._node = node;\n this._name = name;\n this._isInput = isInput;\n this._allowMultipleConnectionsForOutput = !!allowMultipleConnectionsForOutput;\n this._canConnectCheck = canConnectCheck || (source => true);\n\n if(isInput)\n this._bullet = this.createInput();\n else\n this._bullet = this.createOutput();\n }\n\n createInput() {\n let inputElement = document.createElement(\"div\");\n inputElement.className = \"input\";\n let bullet = document.createElement(\"span\");\n bullet.className = \"bullet\";\n let label = document.createElement(\"span\");\n label.className = \"label\";\n label.textContent = this._name;\n\n inputElement.appendChild(bullet);\n inputElement.appendChild(label);\n this._node._inputsElement.appendChild(inputElement);\n\n bullet.onmouseenter = evt => {\n if(!this._node._editor) return;\n\n if(this._node._editor._draggedConnection != null\n && (!this._canConnectCheck(this._node._editor._draggedConnection._fromOutput)\n || !this._node._editor._draggedConnection._fromOutput._canConnectCheck(this)))\n {\n this._node._editor._draggedConnection._path.setAttributeNS(null, \"class\", \"notConnectable\");\n }\n\n this._node._editor._targetInput = this;\n this._node._editor._targetNode = this._node;\n };\n\n bullet.onmouseleave = evt => {\n if(!this._node._editor) return;\n\n if(this._node._editor._targetInput == this)\n this._node._editor._targetInput = null;\n\n if(this._node._editor._draggedConnection) {\n this._node._editor._draggedConnection._path.setAttributeNS(null, \"class\", \"\");\n }\n };\n\n let dragStart = getDragStart(this._node._connectionDragging);\n bullet.onmousedown = evt => {\n evt.stopPropagation();\n if(this._node._editor) {\n dragStart(evt);\n let connection;\n let settings = null;\n let existingConnection = this._node._connections.find(c => c._toInput == this);\n if(existingConnection) {\n settings = new ConnectionSettingsBeforeDragging(existingConnection._fromOutput,\n existingConnection._toInput);\n connection = existingConnection;\n connection._toInput = null;\n this._node.removeConnection(connection, settings.fromOutput, settings.toInput);\n }\n else {\n connection = new NodeConnection(null, this);\n this._node.addConnection(connection);\n this._node._editor._addConnection(connection);\n }\n this._node._editor._draggedConnection = connection;\n this._node._editor._connectionSettingsBeforeDragging = settings;\n }\n };\n return bullet;\n }\n\n createOutput() {\n let outputElement = document.createElement(\"div\");\n outputElement.className = \"output\";\n let bullet = document.createElement(\"span\");\n bullet.className = \"bullet\";\n let label = document.createElement(\"span\");\n label.className = \"label\";\n label.textContent = this._name;\n\n outputElement.appendChild(label);\n outputElement.appendChild(bullet);\n this._node._outputsElement.appendChild(outputElement);\n\n bullet.onmouseenter = evt => {\n if(!this._node._editor) return;\n\n if(this._node._editor._draggedConnection != null\n && (!this._canConnectCheck(this._node._editor._draggedConnection._toInput)\n ||(this._node._editor._draggedConnection._toInput && !this._node._editor._draggedConnection._toInput._canConnectCheck(this))))\n {\n this._node._editor._draggedConnection._path.setAttributeNS(null, \"class\", \"notConnectable\");\n }\n\n this._node._editor._targetOutput = this;\n this._node._editor._targetNode = this._node;\n };\n\n bullet.onmouseleave = evt => {\n if(!this._node._editor) return;\n\n if(this._node._editor._targetOutput == this)\n this._node._editor._targetOutput = null;\n\n if(this._node._editor._draggedConnection) {\n this._node._editor._draggedConnection._path.setAttributeNS(null, \"class\", \"\");\n }\n };\n\n let dragStart = getDragStart(this._node._connectionDragging);\n bullet.onmousedown = evt => {\n evt.stopPropagation();\n if(this._node._editor) {\n dragStart(evt);\n\n let connection;\n let existingConnection = null;\n let settings = null;\n if(!this._allowMultipleConnectionsForOutput) {\n existingConnection = this._node._connections.find(c => c._fromOutput == this);\n if(existingConnection) {\n settings = {\n fromOutput: existingConnection._fromOutput,\n toInput: existingConnection._toInput\n };\n connection = existingConnection;\n connection._fromOutput = null;\n this._node.removeConnection(connection, settings.fromOutput, settings.toInput);\n }\n }\n\n if(!connection) {\n connection = new NodeConnection(this, null);\n this._node.addConnection(connection);\n this._node._editor._addConnection(connection);\n }\n this._node._editor._draggedConnection = connection;\n this._node._editor._connectionSettingsBeforeDragging = settings;\n }\n };\n\n return bullet;\n }\n\n isInput() {\n return this._isInput;\n }\n\n isOutput() {\n return !this._isInput;\n }\n}\n\nclass Node extends Widget {\n _connectionDragging: Draggable;\n private _title: HTMLDivElement;\n _pos: Vector2;\n _connections: NodeConnection[];\n _inputs: NodePort[];\n _outputs: NodePort[];\n _inputsElement: HTMLDivElement;\n _contentsElement: HTMLDivElement;\n _outputsElement: HTMLDivElement;\n _dragEditorPixelStartX: number;\n _dragEditorPixelStartY: number;\n _editor: NodeEditor;\n _dragEditorStartX: number;\n _dragEditorStartY: number;\n _wasActuallyDragged: boolean;\n\n constructor(title: string) {\n super();\n this.element.classList.add(\"Node\");\n this._title = document.createElement(\"div\");\n this.setTitle(title);\n this._title.className = \"title\";\n this.element.appendChild(this._title);\n\n let nodeBody = document.createElement(\"div\");\n\n this._pos = new Vector2(-1, -1);\n this._connections = [];\n this._inputs = [];\n this._inputsElement = document.createElement(\"div\");\n this._inputsElement.className = \"inputs\";\n nodeBody.appendChild(this._inputsElement);\n nodeBody.className = \"body\";\n\n this._contentsElement = document.createElement(\"div\");\n this._contentsElement.className = \"contents\";\n nodeBody.appendChild(this._contentsElement);\n\n\n this._outputs = [];\n this._outputsElement = document.createElement(\"div\");\n this._outputsElement.className = \"outputs\";\n nodeBody.appendChild(this._outputsElement);\n\n this.element.appendChild(nodeBody);\n\n this._dragEditorPixelStartX = 0;\n this._dragEditorPixelStartY = 0;\n this._dragEditorStartX = 0;\n this._dragEditorStartY = 0;\n this._editor = null;\n this._wasActuallyDragged = false; // only set if the node was actually moved while being dragged\n\n this._connectionDragging = new Draggable(this.element,\n (evt: MouseEvent | TouchEvent) => true, // onDragStart\n (dragInfo: DragInfo) => { // onDragging\n if(!this._editor) return;\n if(this._editor._draggedConnection) {\n this._editor._checkOutOfBoundsScroll(dragInfo.mouseEvent || dragInfo.touchEvent);\n this._editor._draggedConnection.update(dragInfo.mouseEvent?.clientX || dragInfo.touchEvent.touches[0].clientX,\n dragInfo.mouseEvent?.clientY || dragInfo.touchEvent.touches[0].clientY);\n }\n },\n (evt: MouseEvent | TouchEvent) => { // onDragEnd\n if(!this._editor) return;\n if(this._editor._draggedConnection) {\n\n let createRemoveConnectionCommand = (connectionToRemove: NodeConnection, prevSettings: ConnectionSettingsBeforeDragging) => {\n return new UndoableCommand(\"Remove Connection\",\n () => { // do\n this._removeDraggedConnection(connectionToRemove);\n },\n () => { // undo\n if(prevSettings != null) {\n connectionToRemove._fromOutput = prevSettings.fromOutput;\n connectionToRemove._toInput = prevSettings.toInput;\n }\n connectionToRemove._path.setAttributeNS(null, \"class\", \"\");\n this._editor._addConnection(connectionToRemove);\n connectionToRemove.update();\n if(connectionToRemove._fromOutput)\n connectionToRemove._fromOutput._node.addConnection(connectionToRemove)\n if(connectionToRemove._toInput)\n connectionToRemove._toInput._node.addConnection(connectionToRemove)\n }, UdoableActionCategory.ModifyData);\n }\n\n let createConnectCommand = (fromOutput: NodePort, toInput: NodePort, targetNode: Node, connectionToAdd: NodeConnection, prevSettings: ConnectionSettingsBeforeDragging, existingConnection?: NodeConnection) => {\n return new UndoableCommand(prevSettings ? \"Change Connection\" : \"Add Connection\",\n () => { // do\n if(existingConnection) {\n this._editor._removeConnection(existingConnection);\n this.removeConnection(existingConnection, existingConnection._fromOutput, existingConnection._toInput);\n targetNode.removeConnection(existingConnection, existingConnection._fromOutput, existingConnection._toInput);\n }\n\n connectionToAdd._fromOutput = fromOutput;\n connectionToAdd._toInput = toInput;\n\n // add the new connection to the editor\n this._editor._addConnection(connectionToAdd);\n this.addConnection(connectionToAdd);\n\n targetNode.addConnection(connectionToAdd);\n connectionToAdd.update();\n\n connectionToAdd._fromOutput._node._onConnectionAdded(connectionToAdd);\n connectionToAdd._toInput._node._onConnectionAdded(connectionToAdd);\n },\n () => { // undo\n if(!prevSettings) {\n // remove the added connection\n this._editor._removeConnection(connectionToAdd);\n this.removeConnection(connectionToAdd, connectionToAdd._fromOutput, connectionToAdd._toInput);\n connectionToAdd._fromOutput._node.removeConnection(connectionToAdd, connectionToAdd._fromOutput, connectionToAdd._toInput);\n connectionToAdd._toInput._node.removeConnection(connectionToAdd, connectionToAdd._fromOutput, connectionToAdd._toInput);\n }\n else {\n targetNode.removeConnection(connectionToAdd, connectionToAdd._fromOutput, connectionToAdd._toInput);\n if(prevSettings.fromOutput._node == targetNode) {\n connectionToAdd._fromOutput = prevSettings.fromOutput;\n }\n else {\n connectionToAdd._toInput = prevSettings.toInput;\n }\n\n connectionToAdd.update();\n this._onConnectionAdded(connectionToAdd);\n }\n\n if(existingConnection) {\n // re-add the removed existing connection\n targetNode.addConnection(existingConnection);\n existingConnection.update();\n connectionToAdd._fromOutput._node.update();\n connectionToAdd._toInput._node.update();\n\n connectionToAdd._fromOutput._node.addConnection(existingConnection);\n connectionToAdd._toInput._node.addConnection(existingConnection);\n connectionToAdd._fromOutput._node._onConnectionAdded(existingConnection);\n connectionToAdd._toInput._node._onConnectionAdded(existingConnection);\n }\n }, UdoableActionCategory.ModifyData);\n }\n\n\n let connect = (fromOutput: NodePort, toInput: NodePort) => {\n let prevSettings = this._editor._connectionSettingsBeforeDragging;\n\n if(!fromOutput._canConnectCheck(toInput) || !toInput._canConnectCheck(fromOutput)) {\n let connectionToRemove = this._editor._draggedConnection;\n let removeCmd = createRemoveConnectionCommand(connectionToRemove, prevSettings);\n removeCmd.do();\n this._editor._undoHistory.add(removeCmd);\n return;\n }\n\n // if a connection with the same input and output exists, remove the old one\n let existingConnection = this._connections.find(conn => conn._fromOutput == fromOutput && conn._toInput == toInput);\n\n let connectionToAdd = this._editor._draggedConnection;\n let connectCmd = createConnectCommand(fromOutput, toInput, this._editor._targetNode, connectionToAdd, prevSettings, existingConnection);\n this._editor._draggedConnection = null;\n this._editor._connectionSettingsBeforeDragging = null;\n\n connectCmd.do();\n this._editor._undoHistory.add(connectCmd);\n }\n\n\n // if the connection is drawn from an input to an output\n if(this._editor._targetInput && !this._editor._draggedConnection._toInput) {\n connect(this._editor._draggedConnection._fromOutput, this._editor._targetInput);\n }\n // if the connection is drawn from an output to an input\n else if(this._editor._targetOutput && !this._editor._draggedConnection._fromOutput) {\n connect(this._editor._targetOutput, this._editor._draggedConnection._toInput);\n }\n // if we did not hit a valid target, do not connect anything\n else {\n let connectionToRemove = this._editor._draggedConnection;\n let prevSettings = this._editor._connectionSettingsBeforeDragging;\n let removeCmd = createRemoveConnectionCommand(connectionToRemove, prevSettings);\n removeCmd.do();\n if(prevSettings)\n this._editor._undoHistory.add(removeCmd);\n }\n }\n });\n }\n\n _mapNodePort(nodePort: NodePort) : NodePortClipboardData {\n return {\n name: nodePort._name,\n allowMultipleConnectionsForOutput: nodePort._allowMultipleConnectionsForOutput,\n canConnectCheck: nodePort._canConnectCheck\n };\n }\n\n _copy() {\n return new NodeClipboardData(this.getTitle(),\n this._inputs.map(nodePort => this._mapNodePort(nodePort)),\n this._outputs.map(nodePort => this._mapNodePort(nodePort)),\n this.getPos());\n }\n\n _onConnectionAdded(connection: NodeConnection) {\n }\n\n _onConnectionRemoved(connection: NodeConnection, fromOutput: NodePort, toInput: NodePort) {\n }\n\n _removeDraggedConnection(connection: NodeConnection) {\n if(connection._fromOutput)\n connection._fromOutput._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n if(connection._toInput)\n connection._toInput._node.removeConnection(connection, connection._fromOutput, connection._toInput);\n this._editor._removeConnection(connection);\n connection = null;\n this._editor._draggedConnection = null;\n this._editor._connectionSettingsBeforeDragging = null;\n }\n\n onAttached() {\n if(this.isAttached()) {\n this._connections.forEach(connection => {\n connection.update();\n });\n\n if(this._pos.x == undefined) {\n let viewport = this._getViewport();\n this._pos.x = viewport.getPosFromPixelPos(parseInt(this.element.style.left), 0).x;\n }\n if(this._pos.y == undefined) {\n let viewport = this._getViewport();\n this._pos.y = viewport.getPosFromPixelPos(0, parseInt(this.element.style.top)).y;\n }\n this.update();\n\n this._title.addEventListener(\"mousedown\", getDragStart(this._editor,\n (editor, evt) => {\n if(this.onDragStart(evt)) {\n this._editor.onDragNodesStarted();\n return true;\n }\n return false;\n }));\n }\n }\n\n _getViewport() {\n return this._editor ? this._editor._viewport : null;\n }\n\n setPixelPos(x: number, y: number) {\n let viewport = this._getViewport();\n\n this.element.style.left = x + \"px\";\n this.element.style.top = y + \"px\";\n\n if(!viewport) { // if the node is not yet connected, we must calculate its position afterwards\n this._pos.x = undefined;\n this._pos.y = undefined;\n }\n else {\n let pos = viewport.getPosFromPixelPos(x, y);\n this._pos.x = pos.x;\n this._pos.y = pos.y;\n }\n }\n\n getPixelPos() : Vector2 {\n let viewport = this._getViewport();\n if(!viewport)\n return null;\n return viewport.getPixelPosFromPos(this._pos.x, this._pos.y);\n }\n\n setPos(x: number, y: number) {\n this._pos.x = x;\n this._pos.y = y;\n\n this.update();\n }\n\n getPos() : Vector2 {\n return new Vector2(this._pos.x, this._pos.y);\n }\n\n getTitle() : string {\n return this._title.textContent;\n }\n\n setTitle(title: string) {\n this._title.textContent = title;\n }\n\n // canConnectCheck: input / output => bool\n // can't connect if false is returned\n addInput(name: string, canConnectCheck?: (other: NodePort) => boolean) : NodePort {\n let input = new NodePort(this, name, true, canConnectCheck);\n this._inputs.push(input);\n return input;\n }\n\n addOutput(name: string, canConnectCheck?: (other: NodePort) => boolean, allowMultipleConnections?: boolean) : NodePort {\n let output = new NodePort(this, name, false, canConnectCheck, allowMultipleConnections);\n this._outputs.push(output);\n return output;\n }\n\n addConnection(nodeConnection: NodeConnection) {\n if(!this._connections.includes(nodeConnection))\n this._connections.push(nodeConnection);\n }\n\n removeConnection(nodeConnection: NodeConnection, fromOutput: NodePort, toInput: NodePort) {\n const index = this._connections.indexOf(nodeConnection);\n if (index > -1) {\n this._connections.splice(index, 1);\n }\n\n this._onConnectionRemoved(nodeConnection, fromOutput, toInput);\n }\n\n onDragStart(evt: MouseEvent | TouchEvent) {\n let mouseEvent = null;\n if(evt.type.startsWith(\"mouse\"))\n mouseEvent = evt as MouseEvent;\n\n if((mouseEvent == null || mouseEvent.button == 0 || mouseEvent.button == 2) && !this.isSelected())\n this.selectSingle();\n\n // only being dragged and selected with left mouse button\n return mouseEvent == null || mouseEvent.button == 0;\n }\n\n onDragStarted() {\n let pos = this.getPixelPos();\n this._dragEditorPixelStartX = pos.x;\n this._dragEditorPixelStartY = pos.y;\n\n this._dragEditorStartX = this._pos.x;\n this._dragEditorStartY = this._pos.y;\n\n this._editor._dragMode = DragMode.MoveSelectedNodes;\n }\n\n onDragEnd(evt: MouseEvent | TouchEvent) {\n super.onDragEnd(evt);\n this._wasActuallyDragged = false;\n }\n\n isSelected() {\n return this.element.classList.contains(\"selected\");\n }\n\n select() {\n if(this._editor._selectedNodes.indexOf(this) > -1)\n return;\n\n this._editor._selectedNodes.push(this);\n this.element.classList.add(\"selected\");\n\n if(this._editor._nodeSelectedCallback) {\n this._editor._nodeSelectedCallback(this);\n }\n }\n\n deselect() {\n if(this._editor._selectedNodes.indexOf(this) < 0)\n return;\n\n this._editor._selectedNodes.splice(this._editor._selectedNodes.indexOf(this), 1);\n this.element.classList.remove(\"selected\");\n\n if(this._editor._nodeDeselectedCallback) {\n this._editor._nodeDeselectedCallback(this);\n }\n }\n\n selectSingle() {\n let selectedNodes = this._editor._selectedNodes.slice(0);\n let cmd = new UndoableCommand(\"Select Node\",\n () => {\n this._editor.deselectAll();\n this.select();\n },\n () => {\n this._editor.deselectAll();\n selectedNodes.forEach(node => node.select());\n }, UdoableActionCategory.ModifyView);\n\n cmd.do();\n this._editor._undoHistory.add(cmd);\n }\n\n update() {\n let pixelPos = this.getPixelPos();\n\n if(!pixelPos)\n return;\n\n this.element.style.left = pixelPos.x + \"px\";\n this.element.style.top = pixelPos.y + \"px\";\n this._connections.forEach(connection => {\n connection.update();\n });\n }\n}\n\nexport { NodeEditor, Node, NodeConnection }","class FakeClipboard {\n _data: ClipboardData;\n\n constructor() {\n this._data = null;\n }\n\n set(data: ClipboardData) {\n this._data = data;\n }\n\n clear() {\n this._data = null;\n }\n\n get() {\n return this._data;\n }\n\n containsData() {\n return this._data != null;\n }\n}\n\nclass ClipboardData {\n type: string;\n timestamp: Date;\n data: any;\n constructor(type: string, timestamp: Date, data: any) {\n this.type = type;\n this.timestamp = timestamp;\n this.data = data;\n }\n}\n\nlet fakeClipboard = new FakeClipboard();\n\nexport { fakeClipboard, FakeClipboard, ClipboardData }\n"],"names":["root","factory","exports","module","define","amd","self","___CSS_LOADER_EXPORT___","push","id","styleElement","nonce","setAttribute","stylesInDOM","getIndexByIdentifier","identifier","result","i","length","modulesToDom","list","options","idCountMap","identifiers","item","base","count","concat","indexByIdentifier","obj","css","media","sourceMap","supports","layer","references","updater","addElementStyle","byIndex","splice","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","styleSheet","cssText","firstChild","removeChild","appendChild","document","createTextNode","cssWithMappingToString","toString","this","map","content","needLayer","join","modules","dedupe","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","sourceURLs","sources","source","sourceRoot","element","createElement","setAttributes","attributes","insert","memo","style","target","styleTarget","querySelector","window","HTMLIFrameElement","contentDocument","head","e","getTarget","Error","insertStyleElement","styleTagTransform","apply","parentNode","removeStyleElement","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","nc","locals","ColorModificationMode","RAD_TO_DEGREES","Math","PI","DEGREES_TO_RAD","x","y","getAngleToOtherInRadians","other","acos","max","min","getScalarProduct","getLength","getAngleToOtherInDegrees","getRotatedInRadians","radians","cos","sin","Vector2","getRotatedInDegrees","degrees","rotateInRadians","rotateInDegrees","scale","factor","getScaled","sqrt","normalize","getNormalized","setLength","getWithLength","rectContains","rect","left","right","top","bottom","_betterModulo","number","modulus","_HEX_COLOR_REGEX","RegExp","g","b","setRgb","fromRgb","Color","fromHsl","h","s","l","rgb","_hslToRgb","color","fromRgbObject","_hueInfo","fromHsv","v","_hsvToRgb","fromHex","hex","_hexToRgb","match","parseInt","c","abs","m","round","rgbObject","fromHslObject","hslObject","fromHsvObject","hsvObject","_r","_g","_b","setHsl","setHsv","setHex","setRgbObject","setHslObject","setHsvObject","getHsl","hue","cMax","cMin","delta","lightness","saturation","getHsv","getRgb","getHex","padStart","lighten","amount","mode","hsl","FixedAmount","darken","saturate","desaturate","setSaturation","rotateHue","invert","getInverted","getComplement","output","getRgbBlended","alpha","beta","getBlended","thisHsv","otherHsv","classList","add","parentWidget","onDragStart","evt","onDragEnd","onDragging","dragInfo","posWithOffsetToParentConsidered","onAttached","isAttached","body","contains","onResize","_dragAndDrop","offsetX","offsetY","dragStartY","dragStartX","currentMousePos","getClientPosFromEvent","type","startsWith","touch","touches","clientX","clientY","mouseEvt","getDragStart","draggable","dragStartMethod","clientPos","box","getBoundingClientRect","prevTouchX","prevTouchY","stopPropagation","mouseEvent","touchEvent","posRelativeToElement","posRelativeToDragStart","movement","movementX","movementY","addEventListener","children","prependChild","child","prepend","unshift","childIndex","indexOf","Widget","ROOT","Panel","DockDirection","Orientation","title","contentWidget","hasCloseButton","attachedElement","titleElement","textContent","className","contentElement","closeButton","onclick","hide","modalElement","show","showModal","isShown","transform","onColorChanged","_onColorChanged","setColorProperty","oldColor","_color","getColor","_hueDiv","_saturationDiv","_lightnessDiv","_colorHandle","_lightnessHandle","draggingHueSat","Draggable","_onHueMove","draggingLightness","_onLightnessMove","setColor","clientHeight","_setColorInternal","_getColorFromCurrentPositions","relativePos","clientWidth","colorRect","lightnessRect","hueFactor","offsetLeft","width","satFactor","offsetTop","height","litFactor","setPositions","toFixed","color2","backgroundColor","AbstractColorPicker","_valueDiv","_svHandle","_hueHandle","draggingSatVal","_onSatValMove","draggingHue","satLitRect","hueRect","hsv","valFactor","satValRect","_zeroHueVector","_hueWheelDiv","_wheelHandle","_slHandle","_innerCircleDiv","draggingSatLit","_onSatLitMove","centerX","centerY","handleRect","vector","parentRect","offsetToParentX","slHandleRect","hueHandleRect","variableWidth","innerWidth","text","buttons","textElement","_divOutput","_textInput","colorPicker","WheelColorPicker","newColor","newHexColor","onkeyup","parsedColor","buttonsElement","_cancelOption","_continueOption","forEach","button","buttonElement","label","isCancel","isContinue","_","callback","_boundKeyEvent","_clickButton","clickEvent","MouseEvent","dispatchEvent","removeEventListener","Dialog","tabs","activeIndex","headers","headerElement","tab","addTab","getTabIndex","insertTab","header","setActiveTabIndex","removeTab","removeTabAtIndex","addOption","option","removeOption","Array","from","getSelectedValue","setSelectedValue","items","toElementFunction","onItemClick","_toElementFunction","_selectedIndex","setItems","_onItemClick","clear","_items","addItem","getItemCount","itemElement","selectItem","removeItem","removeItemAtIndex","childNodes","selectItemAtIndex","getSelectedItem","getItemAtIndex","getSelectedIndex","toStringFunction","ListBox","name","isReadOnly","fromString","compare","toLowerCase","ListViewColumn","parseFloat","columns","editValidationCallback","cellValueChangedCallback","cellDoubleClickCallback","_columns","_rows","_htmlRows","_cellValueChangedCallback","_editValidationCallback","_cellDoubleClickCallback","_headerRow","column","addColumn","fromStringColumns","areReadonly","ListView","columnName","StringListViewColumn","addStringColumn","isReadonly","columnValues","columnIndex","error","level","message","console","colHeader","nextSibling","insertBefore","setColumnReadonly","row","htmlRow","_addCellToRow","removeColumn","setColumnAtIndexReadonly","readOnly","cells","querySelectorAll","_makeEditable","removeRow","getElementsByClassName","sortByColumn","sortedRows","sort","addRow","editable","htmlCell","ondblclick","oldContent","cellContent","input","blurHandled","processChange","changed","inputContent","onblur","selectionStart","selectionEnd","focus","colNo","cell","deselectRows","oncontextmenu","selectRow","getSelectedRowIndex","getSelectedRow","rowIndex","getRow","getColumnCount","getRowCount","getColumns","changeCellValue","newValue","getRows","getColumn","renameColumn","newName","getColumnValues","setCellContent","getCellContent","clickHandler","_focusedItem","doubleClickHandler","contextMenu","TreeViewItem","idx","getItems","deselectAll","deselect","selected","_getIfSelected","getFocusedItem","_sortFunction","sortItems","sortedItems","sortChildren","expander","labelElement","childrenElement","parentItem","toggle","setFocus","preventDefault","oldSelection","select","addChildItem","addChild","hasFocus","menu","MenuEntry","clickCallback","canExecuteCallback","_submenus","_menuEntries","menuEntryPanel","_x","_y","onmouseenter","menuBar","getParentMenuBar","activeMenu","hideMenus","HTMLElement","parentMenu","getParentMenu","isConnected","display","getPos","ClickableMenuEntry","position","parentMenuBar","sub","parentElement","addEntry","entry","addSubMenu","floor","SubMenuEntry","addSeparator","separator","SeparatorEntry","clearEntries","submenu","menus","addMenu","Menu","setText","getText","src","setSource","getSource","orientationFromDirection","dockDirection","Top","Bottom","Vertical","Horizontal","fromDockPanel","dockPanel","structure","DockingStructure","dockPercentage","_dockPercentage","fromDockContainer","dockContainer","orientation","DockContainer","_dockContainers","_floatingPanels","prev","next","parent","parentOrientation","diff","prevSize","nextSize","newPrevSize","newNextSize","_layoutChildren","separatorBefore","separatorAfter","_setOrientation","getFloatingPanels","panel","getDockPanelAtPoint","DockPanel","childAffected","getDockingStructure","setChildPercentages","percentages","_dockRelative","relativeTo","percentage","Dockable","prevToSeparator","nextToSeparator","DockSeparator","_dock","neighbor","_wrapChildren","newContainer","childPercentages","existingChild","slice","undock","dock","Right","Left","_subdivide","relativeIndex","dockRelativeTo","targetOrientation","dockTarget","Inside","warn","Float","before","previousElementSibling","after","nextElementSibling","separators","filter","separatorIndex","childWidth","childHeight","_dragged","_dockOverlay","_dockTarget","_dockTargetDirection","close","resizeEW","resizeNS","resizeDiag","_resizingHorizontally","_resizingVertically","onResizeStart","indexInFloatings","isFloating","getTitle","setTitle","setContent","createDragOverlay","resizingHorizontally","resizingVertically","onResizing","findDockPanelForPoint","targetRect","float","relativeWidget","container","UdoableActionCategory","MessageDialogButton","MessageDialog","inputElement","getValue","DragMode","onChangedCallback","_history","_currentIndex","_idCounter","_onChangedCallback","history","cmd","deleteCount","undo","canUndo","redo","canRedo","do","wasDataModifiedSinceVersion","versionId","targetIndex","findIndex","step","wasDataModified","getCurrentCommand","doAction","undoAction","category","ModifyData","_data","set","containsData","timestamp","fakeClipboard","FakeClipboard","fromOutput","toInput","nodes","connections","fromNodeIndex","fromOutputIndex","toNodeIndex","toInputIndex","inputs","outputs","pos","zoom","getPixelPos","getPixelPosFromPos","getPosFromPixelPos","pixelX","pixelY","nodeSelectedCallback","nodeDeselectedCallback","nodeAddedCallback","nodeRemovedCallback","scrollSpeedX","scrollSpeedY","addArrowHeads","defineCtrlShortcuts","undoHistory","_undoHistory","UndoHistory","_svg","createElementNS","setAttributeNS","defs","arrowHead","arrowHeadPath","_nodes","_viewport","NodeEditorViewport","_scrollSpeedX","_scrollSpeedY","_addArrowHeads","_targetInput","_targetOutput","_targetNode","_defineCtrlShortcuts","_dragStart","_viewportDragStart","_dragMode","None","_selectRect","onCut","getSelectedNodes","onCopy","onPaste","canPaste","_removeSelectedNodes","dragStart","node","_dragEditorPixelStartX","_dragEditorPixelStartY","_draggedConnection","_connectionSettingsBeforeDragging","_selectedNodes","_nodeSelectedCallback","_nodeDeselectedCallback","_nodeAddedCallback","_nodeRemovedCallback","_previouslySelectedNodes","_hasFocus","ctrlKey","_applyZoom","shiftKey","deselectAllWithUndo","selectAllWithUndo","deltaY","bBox","deltaX","copy","cut","fromContextMenu","paste","overridableCopy","ClipboardData","Date","overridablePaste","clipboardContent","_getNodesCopyData","useContextMenu","mousePos","_paste","newZoom","mousePosOld","mousePosNew","fontSize","useArrowHeads","_connections","setUseArrowHead","_addConnection","connection","_path","_removeConnection","selectedNodes","UndoableCommand","removeNode","addNode","_createNodeForPaste","Node","inputData","addInput","canConnectCheck","outputData","addOutput","allowMultipleConnections","nodesData","_copy","selectedNode","_fromOutput","_node","_toInput","connectionInfo","NodeConnectionClipboardData","_outputs","_inputs","NodeEditorClipboardData","pixelPos","minX","minY","nodeData","nodesToPaste","setPixelPos","pasteCmd","connectionData","connect","_onNodesPasted","pastedNodes","_editor","removeConnection","index2","addConnection","addNodeWithUndo","actionName","addCmd","getNodes","NodeConnection","disconnect","find","conn","MoveViewport","Select","onDragNodesStarted","onDragStarted","_scrollOutOfBounds","_checkOutOfBoundsScroll","posRelativeToElementX","posRelativeToElementY","xOffset","yOffset","MoveSelectedNodes","intersection","selection","startPos","_dragEditorStartX","_dragEditorStartY","endPos","_pos","every","movedNode","moveCmd","setPos","selectCmd","ModifyView","rect1","rect2","selectAll","useArrowHead","fromRect","toRect","docRect","_bullet","fromX","fromY","toX","toY","editor","isInput","allowMultipleConnectionsForOutput","_name","_isInput","_allowMultipleConnectionsForOutput","_canConnectCheck","createInput","createOutput","bullet","_inputsElement","onmouseleave","_connectionDragging","onmousedown","settings","existingConnection","ConnectionSettingsBeforeDragging","outputElement","_outputsElement","isOutput","_title","nodeBody","_contentsElement","_wasActuallyDragged","connectionToRemove","prevSettings","_removeDraggedConnection","removeCmd","connectionToAdd","connectCmd","targetNode","_onConnectionAdded","_mapNodePort","nodePort","NodeClipboardData","_onConnectionRemoved","viewport","_getViewport","NodePort","nodeConnection","includes","isSelected","selectSingle"],"sourceRoot":""}
|