@cpfr/tootframes 1.0.9 → 1.0.10

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.
@@ -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/css-loader/dist/runtime/api.js","webpack://tootframes/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleTagTransform.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;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:.8em;height:.8em;border-radius:.4em}.Node .bullet:hover{background-color:#63696b}.Node .inputs{display:inline-block;vertical-align:text-top}.Node .inputs .bullet{margin-left:-0.3em;margin-right:.5em}.Node .inputs .input{display:block;position:relative;font-size:.7em;margin:.3em 0}.Node .outputs{display:inline-block;vertical-align:text-top;text-align:right}.Node .outputs .bullet{margin-left:.5em;margin-right:-0.3em}.Node .outputs .output{display:block;position:relative;font-size:.7em;margin:.3em 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\":\"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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 \\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;\\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 width: 0.8em;\\n height: 0.8em;\\n border-radius: 0.4em;\\n\\n &:hover {\\n background-color: lighten($backgroundColor, 25%);\\n }\\n }\\n\\n .inputs {\\n display: inline-block;\\n vertical-align: text-top;\\n \\n .bullet {\\n margin-left: -0.3em;\\n margin-right: 0.5em;\\n }\\n \\n .input {\\n display: block;\\n position: relative;\\n font-size: 0.7em;\\n margin: 0.3em 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.3em;\\n }\\n \\n .output {\\n display: block;\\n position: relative;\\n font-size: 0.7em;\\n margin: 0.3em 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/*\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\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\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 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\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\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;","\"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;","// 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) : boolean;\n onDragEnd(mouseEvt: MouseEvent) : 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(mouseEvt: MouseEvent) {\n this.element.classList.add(\"beingDragged\");\n return true;\n }\n\n onDragEnd(mouseEvt: MouseEvent) {\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\n constructor(element: HTMLElement,\n offsetX: number,\n offsetY: number,\n dragStartX: number,\n dragStartY: 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 rect: DOMRect,\n posWithOffsetToParentConsidered: Vector2,\n posRelativeToElement: Vector2\n posRelativeToDragStart: Vector2\n}\n\nlet _dragAndDrop = new DragAndDropData(null, 0, 0, 0, 0);\n\nlet currentMousePos = {\n x: -1,\n y: -1\n}\n\nfunction getDragStart(draggable: IDraggable, dragStartMethod?: (draggable: IDraggable, evt: MouseEvent) => boolean) {\n return (evt: MouseEvent) => {\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 = evt.clientX - box.left;\n _dragAndDrop.offsetY = evt.clientY - box.top;\n _dragAndDrop.dragStartX = evt.clientY;\n _dragAndDrop.dragStartY = evt.clientY;\n _dragAndDrop.draggable = draggable;\n _dragAndDrop.element = draggable.element;\n evt.stopPropagation();\n };\n}\n\nfunction onDragEnd(evt: MouseEvent) {\n if(_dragAndDrop && _dragAndDrop.draggable) {\n _dragAndDrop.draggable.onDragEnd(evt);\n _dragAndDrop.draggable = null;\n }\n}\n\nfunction onDragging(evt: MouseEvent) {\n if(_dragAndDrop.draggable != undefined)\n {\n let rect = _dragAndDrop.element.getBoundingClientRect();\n let dragInfo: DragInfo = {\n mouseEvent: evt,\n rect: rect,\n posWithOffsetToParentConsidered: new Vector2(evt.clientX - _dragAndDrop.offsetX,\n evt.clientY - _dragAndDrop.offsetY),\n posRelativeToElement: new Vector2(evt.clientX - rect.x,\n evt.clientY - rect.y),\n posRelativeToDragStart: new Vector2(evt.clientX - _dragAndDrop.dragStartX,\n evt.clientY - _dragAndDrop.dragStartY)\n };\n _dragAndDrop.draggable.onDragging(dragInfo);\n }\n currentMousePos.x = evt.clientX;\n currentMousePos.y = evt.clientY;\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(\"mousemove\", 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 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}\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 }\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\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) { // TODO: store a handle to the separators somewhere...\n let separator = new DockSeparator(child, this.children[0], this);\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) { // TODO: store a handle to the separators somewhere...\n let separator = new DockSeparator(this.children[this.children.length - 1], child, this);\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 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 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 else if(after != null && after.classList.contains(\"DockSeparator\"))\n this.element.removeChild(after);\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 child.element.classList.add(\"floating\");\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 }\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\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\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\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\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\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\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\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._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 } 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 _zoomWithoutCtrl: boolean;\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 zoomWithoutCtrl?: boolean,\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._zoomWithoutCtrl = zoomWithoutCtrl || zoomWithoutCtrl === undefined;\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 if(!evt.ctrlKey && !this._zoomWithoutCtrl)\n return;\n evt.preventDefault();\n\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 }\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 _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 zoomWithoutCtrl(zoomWithoutCtrl: boolean) {\n this._zoomWithoutCtrl = zoomWithoutCtrl;\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 this._undoHistory.add(pasteCmd);\n pasteCmd.do();\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);\n }\n if(connection._toInput._node != node) {\n connection._toInput._node.removeConnection(connection);\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 this._undoHistory.add(addCmd);\n addCmd.do();\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);\n input._node.removeConnection(connection);\n this._removeConnection(connection);\n }\n\n onDragStart(mouseEvt: MouseEvent) {\n // dragging the camera around\n if(mouseEvt.button == 1 // middle mouse button\n || mouseEvt.button == 0 && mouseEvt.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 = mouseEvt.clientX - rect.left;\n this._dragStart.y = mouseEvt.clientY - 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(mouseEvt.button == 0 && mouseEvt.target == this.element) {\n this._previouslySelectedNodes = this._selectedNodes.slice(0);\n this.deselectAll();\n let rect = this.element.getBoundingClientRect();\n this._dragStart.x = mouseEvt.clientX - rect.left;\n this._dragStart.y = mouseEvt.clientY - 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 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 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 break;\n }\n }\n\n onDragEnd(mouseEvt: MouseEvent) {\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(mouseEvt));\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 this._undoHistory.add(moveCmd);\n moveCmd.do();\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);\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._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);\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) => true, // onDragStart\n (dragInfo: DragInfo) => { // onDragging\n if(!this._editor) return;\n if(this._editor._draggedConnection) {\n this._editor._draggedConnection.update(dragInfo.mouseEvent.clientX, dragInfo.mouseEvent.clientY);\n }\n },\n (evt: MouseEvent) => { // 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 this._onConnectionRemoved(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);\n targetNode.removeConnection(existingConnection);\n this._onConnectionRemoved(existingConnection);\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 this._onConnectionAdded(connectionToAdd);\n targetNode._onConnectionAdded(connectionToAdd);\n },\n () => { // undo\n if(!prevSettings) {\n // remove the added connection\n this._editor._removeConnection(connectionToAdd);\n this.removeConnection(connectionToAdd);\n connectionToAdd._fromOutput._node.removeConnection(connectionToAdd);\n connectionToAdd._toInput._node.removeConnection(connectionToAdd);\n this._onConnectionRemoved(connectionToAdd);\n }\n else {\n targetNode.removeConnection(connectionToAdd);\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 targetNode._onConnectionRemoved(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 this._editor._undoHistory.add(removeCmd);\n removeCmd.do();\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 this._editor._undoHistory.add(connectCmd);\n connectCmd.do();\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 if(prevSettings)\n this._editor._undoHistory.add(removeCmd);\n removeCmd.do();\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) {\n }\n \n _removeDraggedConnection(connection: NodeConnection) {\n if(connection._fromOutput)\n connection._fromOutput._node.removeConnection(connection);\n if(connection._toInput)\n connection._toInput._node.removeConnection(connection);\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 = (parseInt(this.element.style.left) + viewport._x) / viewport._zoom;\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 = (parseInt(this.element.style.top) + viewport._y) / viewport._zoom;\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) {\n const index = this._connections.indexOf(nodeConnection);\n if (index > -1) {\n this._connections.splice(index, 1);\n }\n }\n\n onDragStart(mouseEvt: MouseEvent) {\n if((mouseEvt.button == 0 || mouseEvt.button == 2) && !this.isSelected())\n this.selectSingle();\n\n // only being dragged and selected with left mouse button\n return mouseEvt.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(mouseEvt: MouseEvent) {\n super.onDragEnd(mouseEvt);\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","cssWithMappingToString","list","toString","this","map","item","content","needLayer","concat","length","join","i","modules","media","dedupe","supports","layer","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","sourceURLs","sources","source","sourceRoot","stylesInDOM","getIndexByIdentifier","identifier","result","modulesToDom","options","idCountMap","identifiers","base","count","indexByIdentifier","obj","css","sourceMap","references","updater","addElementStyle","byIndex","splice","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","memo","insert","style","target","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","e","getTarget","Error","appendChild","element","createElement","setAttributes","attributes","styleElement","nonce","setAttribute","insertStyleElement","styleTagTransform","apply","parentNode","removeChild","removeStyleElement","styleSheet","cssText","firstChild","createTextNode","__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","mouseEvt","onDragEnd","onDragging","dragInfo","posWithOffsetToParentConsidered","onAttached","isAttached","body","contains","onResize","_dragAndDrop","offsetX","offsetY","dragStartX","dragStartY","currentMousePos","getDragStart","draggable","dragStartMethod","evt","box","getBoundingClientRect","clientX","clientY","stopPropagation","addEventListener","mouseEvent","posRelativeToElement","posRelativeToDragStart","children","child","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","type","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","movementX","movementY","prevSize","nextSize","newPrevSize","newNextSize","_layoutChildren","_setOrientation","getFloatingPanels","panel","getDockPanelAtPoint","DockPanel","getDockingStructure","setChildPercentages","percentages","_dockRelative","relativeTo","percentage","Dockable","DockSeparator","_dock","prepend","unshift","_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","zoomWithoutCtrl","addArrowHeads","defineCtrlShortcuts","undoHistory","_undoHistory","UndoHistory","_svg","createElementNS","setAttributeNS","defs","arrowHead","arrowHeadPath","_nodes","_viewport","NodeEditorViewport","_zoomWithoutCtrl","_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","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","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","_onConnectionRemoved","removeCmd","connectionToAdd","connectCmd","targetNode","_onConnectionAdded","_mapNodePort","nodePort","NodeClipboardData","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/css-loader/dist/runtime/api.js","webpack://tootframes/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleTagTransform.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;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:.8em;height:.8em;border-radius:.4em}.Node .bullet:hover{background-color:#63696b}.Node .inputs{display:inline-block;vertical-align:text-top}.Node .inputs .bullet{margin-left:-0.3em;margin-right:.5em}.Node .inputs .input{display:block;position:relative;font-size:.7em;margin:.3em 0}.Node .outputs{display:inline-block;vertical-align:text-top;text-align:right}.Node .outputs .bullet{margin-left:.5em;margin-right:-0.3em}.Node .outputs .output{display:block;position:relative;font-size:.7em;margin:.3em 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\":\"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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 \\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;\\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 width: 0.8em;\\n height: 0.8em;\\n border-radius: 0.4em;\\n\\n &:hover {\\n background-color: lighten($backgroundColor, 25%);\\n }\\n }\\n\\n .inputs {\\n display: inline-block;\\n vertical-align: text-top;\\n \\n .bullet {\\n margin-left: -0.3em;\\n margin-right: 0.5em;\\n }\\n \\n .input {\\n display: block;\\n position: relative;\\n font-size: 0.7em;\\n margin: 0.3em 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.3em;\\n }\\n \\n .output {\\n display: block;\\n position: relative;\\n font-size: 0.7em;\\n margin: 0.3em 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/*\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\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\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 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\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\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;","\"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;","// 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) : boolean;\n onDragEnd(mouseEvt: MouseEvent) : 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(mouseEvt: MouseEvent) {\n this.element.classList.add(\"beingDragged\");\n return true;\n }\n\n onDragEnd(mouseEvt: MouseEvent) {\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\n constructor(element: HTMLElement,\n offsetX: number,\n offsetY: number,\n dragStartX: number,\n dragStartY: 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 rect: DOMRect,\n posWithOffsetToParentConsidered: Vector2,\n posRelativeToElement: Vector2\n posRelativeToDragStart: Vector2\n}\n\nlet _dragAndDrop = new DragAndDropData(null, 0, 0, 0, 0);\n\nlet currentMousePos = {\n x: -1,\n y: -1\n}\n\nfunction getDragStart(draggable: IDraggable, dragStartMethod?: (draggable: IDraggable, evt: MouseEvent) => boolean) {\n return (evt: MouseEvent) => {\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 = evt.clientX - box.left;\n _dragAndDrop.offsetY = evt.clientY - box.top;\n _dragAndDrop.dragStartX = evt.clientY;\n _dragAndDrop.dragStartY = evt.clientY;\n _dragAndDrop.draggable = draggable;\n _dragAndDrop.element = draggable.element;\n evt.stopPropagation();\n };\n}\n\nfunction onDragEnd(evt: MouseEvent) {\n if(_dragAndDrop && _dragAndDrop.draggable) {\n _dragAndDrop.draggable.onDragEnd(evt);\n _dragAndDrop.draggable = null;\n }\n}\n\nfunction onDragging(evt: MouseEvent) {\n if(_dragAndDrop.draggable != undefined)\n {\n let rect = _dragAndDrop.element.getBoundingClientRect();\n let dragInfo: DragInfo = {\n mouseEvent: evt,\n rect: rect,\n posWithOffsetToParentConsidered: new Vector2(evt.clientX - _dragAndDrop.offsetX,\n evt.clientY - _dragAndDrop.offsetY),\n posRelativeToElement: new Vector2(evt.clientX - rect.x,\n evt.clientY - rect.y),\n posRelativeToDragStart: new Vector2(evt.clientX - _dragAndDrop.dragStartX,\n evt.clientY - _dragAndDrop.dragStartY)\n };\n _dragAndDrop.draggable.onDragging(dragInfo);\n }\n currentMousePos.x = evt.clientX;\n currentMousePos.y = evt.clientY;\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(\"mousemove\", 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}\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 }\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\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) { // TODO: store a handle to the separators somewhere...\n let separator = new DockSeparator(child, this.children[0], this);\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) { // TODO: store a handle to the separators somewhere...\n let separator = new DockSeparator(this.children[this.children.length - 1], child, this);\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 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 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 else if(after != null && after.classList.contains(\"DockSeparator\"))\n this.element.removeChild(after);\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 child.element.classList.add(\"floating\");\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 }\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\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\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\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\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\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\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\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._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 } 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 _zoomWithoutCtrl: boolean;\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 zoomWithoutCtrl?: boolean,\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._zoomWithoutCtrl = zoomWithoutCtrl || zoomWithoutCtrl === undefined;\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 if(!evt.ctrlKey && !this._zoomWithoutCtrl)\n return;\n evt.preventDefault();\n\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 }\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 _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 zoomWithoutCtrl(zoomWithoutCtrl: boolean) {\n this._zoomWithoutCtrl = zoomWithoutCtrl;\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 this._undoHistory.add(pasteCmd);\n pasteCmd.do();\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);\n }\n if(connection._toInput._node != node) {\n connection._toInput._node.removeConnection(connection);\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 this._undoHistory.add(addCmd);\n addCmd.do();\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);\n input._node.removeConnection(connection);\n this._removeConnection(connection);\n }\n\n onDragStart(mouseEvt: MouseEvent) {\n // dragging the camera around\n if(mouseEvt.button == 1 // middle mouse button\n || mouseEvt.button == 0 && mouseEvt.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 = mouseEvt.clientX - rect.left;\n this._dragStart.y = mouseEvt.clientY - 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(mouseEvt.button == 0 && mouseEvt.target == this.element) {\n this._previouslySelectedNodes = this._selectedNodes.slice(0);\n this.deselectAll();\n let rect = this.element.getBoundingClientRect();\n this._dragStart.x = mouseEvt.clientX - rect.left;\n this._dragStart.y = mouseEvt.clientY - 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 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 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 break;\n }\n }\n\n onDragEnd(mouseEvt: MouseEvent) {\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(mouseEvt));\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 this._undoHistory.add(moveCmd);\n moveCmd.do();\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);\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._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);\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) => true, // onDragStart\n (dragInfo: DragInfo) => { // onDragging\n if(!this._editor) return;\n if(this._editor._draggedConnection) {\n this._editor._draggedConnection.update(dragInfo.mouseEvent.clientX, dragInfo.mouseEvent.clientY);\n }\n },\n (evt: MouseEvent) => { // 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 this._onConnectionRemoved(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);\n targetNode.removeConnection(existingConnection);\n this._onConnectionRemoved(existingConnection);\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 this._onConnectionAdded(connectionToAdd);\n targetNode._onConnectionAdded(connectionToAdd);\n },\n () => { // undo\n if(!prevSettings) {\n // remove the added connection\n this._editor._removeConnection(connectionToAdd);\n this.removeConnection(connectionToAdd);\n connectionToAdd._fromOutput._node.removeConnection(connectionToAdd);\n connectionToAdd._toInput._node.removeConnection(connectionToAdd);\n this._onConnectionRemoved(connectionToAdd);\n }\n else {\n targetNode.removeConnection(connectionToAdd);\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 targetNode._onConnectionRemoved(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 this._editor._undoHistory.add(removeCmd);\n removeCmd.do();\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 this._editor._undoHistory.add(connectCmd);\n connectCmd.do();\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 if(prevSettings)\n this._editor._undoHistory.add(removeCmd);\n removeCmd.do();\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) {\n }\n \n _removeDraggedConnection(connection: NodeConnection) {\n if(connection._fromOutput)\n connection._fromOutput._node.removeConnection(connection);\n if(connection._toInput)\n connection._toInput._node.removeConnection(connection);\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 = (parseInt(this.element.style.left) + viewport._x) / viewport._zoom;\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 = (parseInt(this.element.style.top) + viewport._y) / viewport._zoom;\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) {\n const index = this._connections.indexOf(nodeConnection);\n if (index > -1) {\n this._connections.splice(index, 1);\n }\n }\n\n onDragStart(mouseEvt: MouseEvent) {\n if((mouseEvt.button == 0 || mouseEvt.button == 2) && !this.isSelected())\n this.selectSingle();\n\n // only being dragged and selected with left mouse button\n return mouseEvt.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(mouseEvt: MouseEvent) {\n super.onDragEnd(mouseEvt);\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","cssWithMappingToString","list","toString","this","map","item","content","needLayer","concat","length","join","i","modules","media","dedupe","supports","layer","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","sourceURLs","sources","source","sourceRoot","stylesInDOM","getIndexByIdentifier","identifier","result","modulesToDom","options","idCountMap","identifiers","base","count","indexByIdentifier","obj","css","sourceMap","references","updater","addElementStyle","byIndex","splice","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","memo","insert","style","target","styleTarget","document","querySelector","window","HTMLIFrameElement","contentDocument","head","e","getTarget","Error","appendChild","element","createElement","setAttributes","attributes","styleElement","nonce","setAttribute","insertStyleElement","styleTagTransform","apply","parentNode","removeChild","removeStyleElement","styleSheet","cssText","firstChild","createTextNode","__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","mouseEvt","onDragEnd","onDragging","dragInfo","posWithOffsetToParentConsidered","onAttached","isAttached","body","contains","onResize","_dragAndDrop","offsetX","offsetY","dragStartX","dragStartY","currentMousePos","getDragStart","draggable","dragStartMethod","evt","box","getBoundingClientRect","clientX","clientY","stopPropagation","addEventListener","mouseEvent","posRelativeToElement","posRelativeToDragStart","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","type","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","movementX","movementY","prevSize","nextSize","newPrevSize","newNextSize","_layoutChildren","_setOrientation","getFloatingPanels","panel","getDockPanelAtPoint","DockPanel","getDockingStructure","setChildPercentages","percentages","_dockRelative","relativeTo","percentage","Dockable","DockSeparator","_dock","_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","zoomWithoutCtrl","addArrowHeads","defineCtrlShortcuts","undoHistory","_undoHistory","UndoHistory","_svg","createElementNS","setAttributeNS","defs","arrowHead","arrowHeadPath","_nodes","_viewport","NodeEditorViewport","_zoomWithoutCtrl","_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","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","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","_onConnectionRemoved","removeCmd","connectionToAdd","connectCmd","targetNode","_onConnectionAdded","_mapNodePort","nodePort","NodeClipboardData","viewport","_getViewport","NodePort","nodeConnection","includes","isSelected","selectSingle"],"sourceRoot":""}