@cpfr/tootframes 1.0.10 → 1.0.11

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.js","mappings":"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","sources":["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":["// 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":["___CSS_LOADER_EXPORT___","push","module","id","exports","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":""}
1
+ {"version":3,"file":"tootframes.js","mappings":"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","sources":["webpack://tootframes/./src/style.scss","webpack://tootframes/./node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleTagTransform.js","webpack://tootframes/./node_modules/css-loader/dist/runtime/api.js","webpack://tootframes/./node_modules/css-loader/dist/runtime/sourceMaps.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertStyleElement.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/insertBySelector.js","webpack://tootframes/./node_modules/style-loader/dist/runtime/styleDomAPI.js","webpack://tootframes/webpack/bootstrap","webpack://tootframes/webpack/runtime/compat get default export","webpack://tootframes/webpack/runtime/define property getters","webpack://tootframes/webpack/runtime/hasOwnProperty shorthand","webpack://tootframes/webpack/runtime/make namespace object","webpack://tootframes/webpack/runtime/nonce","webpack://tootframes/./src/style.scss?75ba","webpack://tootframes/./src/Math.ts","webpack://tootframes/./src/Color.ts","webpack://tootframes/./src/Widget.ts","webpack://tootframes/./src/dragAndDrop.ts","webpack://tootframes/./src/Panel.ts","webpack://tootframes/./src/ROOT.ts","webpack://tootframes/./src/DockContainer.ts","webpack://tootframes/./src/Dialog.ts","webpack://tootframes/./src/ColorPicker.ts","webpack://tootframes/./src/Button.ts","webpack://tootframes/./src/Dropdown.ts","webpack://tootframes/./src/ListBox.ts","webpack://tootframes/./src/ListView.ts","webpack://tootframes/./src/TreeView.ts","webpack://tootframes/./src/Menu.ts","webpack://tootframes/./src/MenuBar.ts","webpack://tootframes/./src/Label.ts","webpack://tootframes/./src/Image.ts","webpack://tootframes/./src/UndoHistory.ts","webpack://tootframes/./src/MessageDialog.ts","webpack://tootframes/./src/NodeEditor.ts","webpack://tootframes/./src/FakeClipboard.ts"],"sourcesContent":["// 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/* istanbul ignore next */\nfunction setAttributesWithoutAttributes(styleElement) {\n var nonce = typeof __webpack_nonce__ !== \"undefined\" ? __webpack_nonce__ : null;\n\n if (nonce) {\n styleElement.setAttribute(\"nonce\", nonce);\n }\n}\n\nmodule.exports = setAttributesWithoutAttributes;","\"use strict\";\n\nvar stylesInDOM = [];\n\nfunction getIndexByIdentifier(identifier) {\n var result = -1;\n\n for (var i = 0; i < stylesInDOM.length; i++) {\n if (stylesInDOM[i].identifier === identifier) {\n result = i;\n break;\n }\n }\n\n return result;\n}\n\nfunction modulesToDom(list, options) {\n var idCountMap = {};\n var identifiers = [];\n\n for (var i = 0; i < list.length; i++) {\n var item = list[i];\n var id = options.base ? item[0] + options.base : item[0];\n var count = idCountMap[id] || 0;\n var identifier = \"\".concat(id, \" \").concat(count);\n idCountMap[id] = count + 1;\n var indexByIdentifier = getIndexByIdentifier(identifier);\n var obj = {\n css: item[1],\n media: item[2],\n sourceMap: item[3],\n supports: item[4],\n layer: item[5]\n };\n\n if (indexByIdentifier !== -1) {\n stylesInDOM[indexByIdentifier].references++;\n stylesInDOM[indexByIdentifier].updater(obj);\n } else {\n var updater = addElementStyle(obj, options);\n options.byIndex = i;\n stylesInDOM.splice(i, 0, {\n identifier: identifier,\n updater: updater,\n references: 1\n });\n }\n\n identifiers.push(identifier);\n }\n\n return identifiers;\n}\n\nfunction addElementStyle(obj, options) {\n var api = options.domAPI(options);\n api.update(obj);\n\n var updater = function updater(newObj) {\n if (newObj) {\n if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap && newObj.supports === obj.supports && newObj.layer === obj.layer) {\n return;\n }\n\n api.update(obj = newObj);\n } else {\n api.remove();\n }\n };\n\n return updater;\n}\n\nmodule.exports = function (list, options) {\n options = options || {};\n list = list || [];\n var lastIdentifiers = modulesToDom(list, options);\n return function update(newList) {\n newList = newList || [];\n\n for (var i = 0; i < lastIdentifiers.length; i++) {\n var identifier = lastIdentifiers[i];\n var index = getIndexByIdentifier(identifier);\n stylesInDOM[index].references--;\n }\n\n var newLastIdentifiers = modulesToDom(newList, options);\n\n for (var _i = 0; _i < lastIdentifiers.length; _i++) {\n var _identifier = lastIdentifiers[_i];\n\n var _index = getIndexByIdentifier(_identifier);\n\n if (stylesInDOM[_index].references === 0) {\n stylesInDOM[_index].updater();\n\n stylesInDOM.splice(_index, 1);\n }\n }\n\n lastIdentifiers = newLastIdentifiers;\n };\n};","\"use strict\";\n\n/* istanbul ignore next */\nfunction styleTagTransform(css, styleElement) {\n if (styleElement.styleSheet) {\n styleElement.styleSheet.cssText = css;\n } else {\n while (styleElement.firstChild) {\n styleElement.removeChild(styleElement.firstChild);\n }\n\n styleElement.appendChild(document.createTextNode(css));\n }\n}\n\nmodule.exports = styleTagTransform;","\"use strict\";\n\n/*\n MIT License http://www.opensource.org/licenses/mit-license.php\n Author Tobias Koppers @sokra\n*/\nmodule.exports = function (cssWithMappingToString) {\n var list = []; // return the list of modules as css string\n\n list.toString = function toString() {\n return this.map(function (item) {\n var content = \"\";\n var needLayer = typeof item[5] !== \"undefined\";\n\n if (item[4]) {\n content += \"@supports (\".concat(item[4], \") {\");\n }\n\n if (item[2]) {\n content += \"@media \".concat(item[2], \" {\");\n }\n\n if (needLayer) {\n content += \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\");\n }\n\n content += cssWithMappingToString(item);\n\n if (needLayer) {\n content += \"}\";\n }\n\n if (item[2]) {\n content += \"}\";\n }\n\n if (item[4]) {\n content += \"}\";\n }\n\n return content;\n }).join(\"\");\n }; // import a list of modules into the list\n\n\n list.i = function i(modules, media, dedupe, supports, layer) {\n if (typeof modules === \"string\") {\n modules = [[null, modules, undefined]];\n }\n\n var alreadyImportedModules = {};\n\n if (dedupe) {\n for (var k = 0; k < this.length; k++) {\n var id = this[k][0];\n\n if (id != null) {\n alreadyImportedModules[id] = true;\n }\n }\n }\n\n for (var _k = 0; _k < modules.length; _k++) {\n var item = [].concat(modules[_k]);\n\n if (dedupe && alreadyImportedModules[item[0]]) {\n continue;\n }\n\n if (typeof layer !== \"undefined\") {\n if (typeof item[5] === \"undefined\") {\n item[5] = layer;\n } else {\n item[1] = \"@layer\".concat(item[5].length > 0 ? \" \".concat(item[5]) : \"\", \" {\").concat(item[1], \"}\");\n item[5] = layer;\n }\n }\n\n if (media) {\n if (!item[2]) {\n item[2] = media;\n } else {\n item[1] = \"@media \".concat(item[2], \" {\").concat(item[1], \"}\");\n item[2] = media;\n }\n }\n\n if (supports) {\n if (!item[4]) {\n item[4] = \"\".concat(supports);\n } else {\n item[1] = \"@supports (\".concat(item[4], \") {\").concat(item[1], \"}\");\n item[4] = supports;\n }\n }\n\n list.push(item);\n }\n };\n\n return list;\n};","\"use strict\";\n\nmodule.exports = function (item) {\n var content = item[1];\n var cssMapping = item[3];\n\n if (!cssMapping) {\n return content;\n }\n\n if (typeof btoa === \"function\") {\n var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping))));\n var data = \"sourceMappingURL=data:application/json;charset=utf-8;base64,\".concat(base64);\n var sourceMapping = \"/*# \".concat(data, \" */\");\n var sourceURLs = cssMapping.sources.map(function (source) {\n return \"/*# sourceURL=\".concat(cssMapping.sourceRoot || \"\").concat(source, \" */\");\n });\n return [content].concat(sourceURLs).concat([sourceMapping]).join(\"\\n\");\n }\n\n return [content].join(\"\\n\");\n};","\"use strict\";\n\n/* istanbul ignore next */\nfunction insertStyleElement(options) {\n var element = document.createElement(\"style\");\n options.setAttributes(element, options.attributes);\n options.insert(element, options.options);\n return element;\n}\n\nmodule.exports = insertStyleElement;","\"use strict\";\n\nvar memo = {};\n/* istanbul ignore next */\n\nfunction getTarget(target) {\n if (typeof memo[target] === \"undefined\") {\n var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself\n\n if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {\n try {\n // This will throw an exception if access to iframe is blocked\n // due to cross-origin restrictions\n styleTarget = styleTarget.contentDocument.head;\n } catch (e) {\n // istanbul ignore next\n styleTarget = null;\n }\n }\n\n memo[target] = styleTarget;\n }\n\n return memo[target];\n}\n/* istanbul ignore next */\n\n\nfunction insertBySelector(insert, style) {\n var target = getTarget(insert);\n\n if (!target) {\n throw new Error(\"Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.\");\n }\n\n target.appendChild(style);\n}\n\nmodule.exports = insertBySelector;","\"use strict\";\n\n/* istanbul ignore next */\nfunction apply(styleElement, options, obj) {\n var css = \"\";\n\n if (obj.supports) {\n css += \"@supports (\".concat(obj.supports, \") {\");\n }\n\n if (obj.media) {\n css += \"@media \".concat(obj.media, \" {\");\n }\n\n var needLayer = typeof obj.layer !== \"undefined\";\n\n if (needLayer) {\n css += \"@layer\".concat(obj.layer.length > 0 ? \" \".concat(obj.layer) : \"\", \" {\");\n }\n\n css += obj.css;\n\n if (needLayer) {\n css += \"}\";\n }\n\n if (obj.media) {\n css += \"}\";\n }\n\n if (obj.supports) {\n css += \"}\";\n }\n\n var sourceMap = obj.sourceMap;\n\n if (sourceMap && typeof btoa !== \"undefined\") {\n css += \"\\n/*# sourceMappingURL=data:application/json;base64,\".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), \" */\");\n } // For old IE\n\n /* istanbul ignore if */\n\n\n options.styleTagTransform(css, styleElement, options.options);\n}\n\nfunction removeStyleElement(styleElement) {\n // istanbul ignore if\n if (styleElement.parentNode === null) {\n return false;\n }\n\n styleElement.parentNode.removeChild(styleElement);\n}\n/* istanbul ignore next */\n\n\nfunction domAPI(options) {\n var styleElement = options.insertStyleElement(options);\n return {\n update: function update(obj) {\n apply(styleElement, options, obj);\n },\n remove: function remove() {\n removeStyleElement(styleElement);\n }\n };\n}\n\nmodule.exports = domAPI;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nc = undefined;","\n import API from \"!../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./style.scss\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../node_modules/css-loader/dist/cjs.js!../node_modules/sass-loader/dist/cjs.js!./style.scss\";\n export default content && content.locals ? content.locals : undefined;\n","\nconst RAD_TO_DEGREES = 180.0 / Math.PI;\nconst DEGREES_TO_RAD = Math.PI / 180\n\nclass Vector2 {\n x: number;\n y: number;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n getAngleToOtherInRadians(other: Vector2) {\n return Math.acos(Math.max(Math.min(((this.getScalarProduct(other)) / (this.getLength() * other.getLength())), 1), -1))\n }\n\n getAngleToOtherInDegrees(other: Vector2) {\n return this.getAngleToOtherInRadians(other) * RAD_TO_DEGREES;\n }\n\n getRotatedInRadians(radians: number) {\n let cos = Math.cos(radians)\n let sin = Math.sin(radians)\n\n return new Vector2(this.x * cos - this.y * sin,\n this.x * sin + this.y * cos);\n }\n\n getRotatedInDegrees(degrees: number) {\n return this.getRotatedInRadians(degrees * DEGREES_TO_RAD);\n }\n\n rotateInRadians(radians: number) {\n let cos = Math.cos(radians)\n let sin = Math.sin(radians)\n\n let x = this.x * cos - this.y * sin;\n let y = this.x * sin + this.y * cos;\n\n this.x = x;\n this.y = y;\n }\n\n rotateInDegrees(degrees: number) {\n this.rotateInRadians(degrees * DEGREES_TO_RAD);\n }\n\n getScalarProduct(other: Vector2) {\n return (this.x * other.x) + (this.y * other.y);\n }\n\n scale(factor: number) {\n this.x *= factor;\n this.y *= factor;\n }\n\n getScaled(factor: number) {\n return new Vector2(this.x * factor, this.y * factor);\n }\n\n getLength() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n normalize() {\n let length = this.getLength();\n this.x = this.x / length;\n this.y = this.y / length;\n }\n\n getNormalized() {\n let length = this.getLength();\n return new Vector2(this.x / length, this.y / length);\n }\n\n setLength(length: number) {\n this.normalize();\n this.scale(length);\n }\n\n getWithLength(length: number) {\n let result = this.getNormalized();\n result.scale(length);\n return result;\n }\n}\n\nfunction rectContains(rect: DOMRect, x: number, y: number) {\n return x >= rect.left && x <= rect.right\n && y >= rect.top && y <= rect.bottom;\n}\n\nexport { Vector2, rectContains, RAD_TO_DEGREES, DEGREES_TO_RAD }\n","function _betterModulo(number: number, modulus: number) {\n return ((number % modulus) + modulus) % modulus;\n}\n\nenum ColorModificationMode {\n Percentage,\n FixedAmount\n}\n\nconst _HEX_COLOR_REGEX = new RegExp(/^#?([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/);\n\nclass Color {\n private _r: number;\n private _g: number;\n private _b: number;\n private _hueInfo?: number;\n\n constructor(r?: number, g?: number, b?: number) {\n this.setRgb(r || 0, g || 0, b || 0);\n }\n\n static fromRgb(r: number, g: number, b: number) {\n return new Color(r, g, b);\n }\n\n static fromHsl(h: number, s: number, l: number) {\n let rgb = Color._hslToRgb(h, s, l);\n let color = Color.fromRgbObject(rgb);\n color._hueInfo = h;\n return color;\n }\n\n static fromHsv(h: number, s: number, v: number) {\n let rgb = Color._hsvToRgb(h, s, v);\n let color = Color.fromRgbObject(rgb);\n color._hueInfo = h;\n return color;\n }\n\n static fromHex(hex: string) {\n let rgb = Color._hexToRgb(hex);\n if(!rgb)\n return null;\n return Color.fromRgbObject(rgb);\n }\n\n private static _hexToRgb(hex: string) {\n let match = hex.match(_HEX_COLOR_REGEX);\n if(!match)\n return null;\n\n let r = parseInt(match[1], 16);\n let g = parseInt(match[2], 16);\n let b = parseInt(match[3], 16);\n\n return {\n r: r,\n g: g,\n b: b\n }\n }\n\n private static _hslToRgb(h: number, s: number, l: number) {\n h = _betterModulo(h, 360);\n\n let c = (1 - Math.abs(2 * l - 1)) * s;\n let x = c * (1 - Math.abs(_betterModulo((h / 60), 2) - 1));\n let m = l - (c / 2);\n\n let r, g, b;\n if(h >= 0 && h < 60) {\n r = c;\n g = x;\n b = 0;\n }\n else if(h >= 60 && h < 120) {\n r = x;\n g = c;\n b = 0;\n }\n else if(h >= 120 && h < 180) {\n r = 0;\n g = c;\n b = x;\n }\n else if(h >= 180 && h < 240) {\n r = 0;\n g = x;\n b = c;\n }\n else if(h >= 240 && h < 300) {\n r = x;\n g = 0;\n b = c;\n }\n else if(h >= 300 && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n else {\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n }\n }\n\n private static _hsvToRgb(h: number, s: number, v: number) {\n h = _betterModulo(h, 360);\n\n let c = v * s;\n let x = c * (1 - Math.abs(_betterModulo((h / 60), 2) - 1));\n let m = v - c;\n\n let r, g, b;\n if(h >= 0 && h < 60) {\n r = c;\n g = x;\n b = 0;\n }\n else if(h >= 60 && h < 120) {\n r = x;\n g = c;\n b = 0;\n }\n else if(h >= 120 && h < 180) {\n r = 0;\n g = c;\n b = x;\n }\n else if(h >= 180 && h < 240) {\n r = 0;\n g = x;\n b = c;\n }\n else if(h >= 240 && h < 300) {\n r = x;\n g = 0;\n b = c;\n }\n else if(h >= 300 && h < 360) {\n r = c;\n g = 0;\n b = x;\n }\n\n return {\n r: Math.round((r + m) * 255),\n g: Math.round((g + m) * 255),\n b: Math.round((b + m) * 255)\n }\n }\n\n static fromRgbObject(rgbObject: { r: number, g: number, b: number }) {\n return Color.fromRgb(rgbObject.r, rgbObject.g, rgbObject.b);\n }\n \n static fromHslObject(hslObject: { h: number, s: number, l: number }) {\n return Color.fromHsl(hslObject.h, hslObject.s, hslObject.l);\n }\n \n static fromHsvObject(hsvObject: { h: number, s: number, v: number }) {\n return Color.fromHsv(hsvObject.h, hsvObject.s, hsvObject.v);\n }\n\n setRgb(r: number, g: number, b: number) {\n this._r = Math.max(Math.min(Math.round(r), 255), 0);\n this._g = Math.max(Math.min(Math.round(g), 255), 0);\n this._b = Math.max(Math.min(Math.round(b), 255), 0);\n }\n\n setHsl(h: number, s: number, l: number) {\n let rgb = Color._hslToRgb(h, s, l);\n this._r = rgb.r;\n this._g = rgb.g;\n this._b = rgb.b;\n this._hueInfo = h;\n }\n\n setHsv(h: number, s: number, v: number) {\n let rgb = Color._hsvToRgb(h, s, v);\n this._r = rgb.r;\n this._g = rgb.g;\n this._b = rgb.b;\n this._hueInfo = h;\n }\n\n setHex(hex: string) {\n let rgb = Color._hexToRgb(hex);\n this._r = rgb.r;\n this._g = rgb.g;\n this._b = rgb.b;\n }\n\n setRgbObject(rgbObject: {r: number, g: number, b: number}) {\n this.setRgb(rgbObject.r, rgbObject.g, rgbObject.b);\n }\n\n setHslObject(hslObject: {h: number, s: number, l: number}) {\n this.setHsl(hslObject.h, hslObject.s, hslObject.l);\n }\n\n setHsvObject(hsvObject: {h: number, s: number, v: number}) {\n this.setHsv(hsvObject.h, hsvObject.s, hsvObject.v);\n }\n\n getHsl() {\n let r = this._r / 255;\n let g = this._g / 255;\n let b = this._b / 255;\n let cMax = Math.max(r, g, b);\n let cMin = Math.min(r, g, b);\n let delta = cMax - cMin;\n\n let hue;\n if(delta == 0)\n hue = 0;\n else if(cMax == r) {\n hue = 60 * (_betterModulo(((g - b) / delta), 6));\n }\n else if(cMax == g) {\n hue = 60 * (((b - r) / delta) + 2);\n }\n else if(cMax == b) {\n hue = 60 * (((r - g) / delta) + 4);\n }\n\n let lightness = (cMax + cMin) / 2\n\n let saturation = delta == 0\n ? 0\n : delta / (1 - Math.abs(2 * lightness - 1));\n return {\n h: (hue == 0 && this._hueInfo) ? this._hueInfo :hue,\n s: saturation,\n l: lightness\n };\n }\n\n getHsv() {\n let r = this._r / 255;\n let g = this._g / 255;\n let b = this._b / 255;\n let cMax = Math.max(r, g, b);\n let cMin = Math.min(r, g, b);\n let delta = cMax - cMin;\n\n let hue;\n if(delta == 0)\n hue = 0;\n else if(cMax == r)\n hue = 60 * (_betterModulo(((g - b) / delta), 6));\n else if(cMax == g)\n hue = 60 * (((b - r) / delta) + 2);\n else if(cMax == b)\n hue = 60 * (((r - g) / delta) + 4);\n\n let saturation = delta == 0\n ? 0\n : delta / cMax;\n\n let value = cMax;\n\n return {\n h: (hue == 0 && this._hueInfo) ? this._hueInfo :hue,\n s: saturation,\n v: value\n };\n }\n\n getRgb() {\n return {\n r: this._r,\n g: this._g,\n b: this._b\n }\n }\n\n getHex() {\n let r = this._r.toString(16).padStart(2, \"0\");\n let g = this._g.toString(16).padStart(2, \"0\");\n let b = this._b.toString(16).padStart(2, \"0\");\n return `#${r}${g}${b}`\n }\n\n lighten(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.l = Math.max(0, Math.min(hsl.l + amount, 1))\n else\n hsl.l = Math.max(0, Math.min(hsl.l * (amount + 1), 1))\n this.setHslObject(hsl);\n }\n\n darken(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.l = Math.max(0, Math.min(hsl.l - amount, 1))\n else\n hsl.l = Math.max(0, Math.min(hsl.l * (1 - amount), 1))\n this.setHslObject(hsl);\n }\n\n saturate(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.s = Math.max(0, Math.min(hsl.s + amount, 1))\n else\n hsl.s = Math.max(0, Math.min(hsl.s * (amount + 1), 1))\n this.setHslObject(hsl);\n }\n\n desaturate(amount: number, mode: ColorModificationMode) {\n let hsl = this.getHsl();\n if(mode == ColorModificationMode.FixedAmount)\n hsl.s = Math.max(0, Math.min(hsl.s + amount, 1))\n else\n hsl.s = Math.max(0, Math.min(hsl.s * (1 - amount), 1))\n this.setHslObject(hsl);\n }\n\n setSaturation(saturation: number) {\n saturation = Math.min(Math.max(saturation, 0), 1);\n let hsl = this.getHsl();\n hsl.s = saturation;\n this.setHslObject(hsl);\n }\n\n rotateHue(degrees: number) {\n let hsl = this.getHsl();\n hsl.h = _betterModulo(hsl.h + degrees, 360);\n this.setHslObject(hsl);\n }\n\n invert() {\n this._r = 255 - this._r;\n this._g = 255 - this._g;\n this._b = 255 - this._b;\n if(this._hueInfo)\n this._hueInfo = _betterModulo(this._hueInfo + 180, 360);\n }\n\n getInverted() {\n return Color.fromRgb(255 - this._r,\n 255 - this._g,\n 255 - this._b);\n }\n\n getComplement() {\n let output = Color.fromRgb(this._r,\n this._g,\n this._b);\n output.rotateHue(180);\n return output;\n }\n\n getBlended(other: Color, alpha: number) {\n alpha = Math.max(Math.min(alpha, 1), 0);\n let beta = 1 - alpha;\n return Color.fromRgb(Math.round(this._r * beta + other._r * alpha),\n Math.round(this._g * beta + other._g * alpha),\n Math.round(this._b * beta + other._b * alpha));\n }\n}\n\nexport { Color, ColorModificationMode }\n","import { DragInfo } from \"./dragAndDrop\"\n\ninterface IDraggable {\n element: HTMLElement;\n onDragStart(mouseEvt: MouseEvent) : 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 separatorBefore?: DockSeparator = null;\n separatorAfter?: DockSeparator = null;\n}\n\nclass DockContainer extends Dockable {\n children: Dockable[];\n orientation: Orientation;\n\n constructor() {\n super();\n this.element.className = \"DockContainer\";\n this._setOrientation(Orientation.Horizontal);\n this.children = [];\n }\n\n onAttached() {\n if(this.isAttached())\n _dockContainers.push(this);\n this.children.forEach(child => {\n child.onAttached();\n });\n }\n\n getFloatingPanels() {\n return _floatingPanels.map(panel => ({\n identifier: panel.identifier,\n width: parseInt(panel.element.style.width),\n height: parseInt(panel.element.style.height),\n x: parseInt(panel.element.style.left),\n y: parseInt(panel.element.style.top)\n }));\n }\n\n getDockPanelAtPoint(x: number, y: number) : DockPanel {\n if(!rectContains(this.element.getBoundingClientRect(), x, y))\n return null;\n\n for(let child of this.children) {\n if(child instanceof DockPanel && rectContains(child.element.getBoundingClientRect(), x, y)) {\n return child;\n }\n else if(child instanceof DockContainer) {\n let childAffected = child.getDockPanelAtPoint(x, y);\n if(childAffected != null)\n return childAffected;\n }\n }\n return null;\n }\n\n getDockingStructure() : DockingStructure {\n return DockingStructure.fromDockContainer(this);\n }\n\n setChildPercentages(percentages: number[]) {\n if(percentages.length != this.children.length)\n throw \"This container has \" + this.children.length\n + \" child elements, but \" + percentages.length\n + \" percentages were given!\";\n\n for(let i = 0; i < percentages.length; i++) {\n this.children[i]._dockPercentage = percentages[i];\n }\n this._layoutChildren();\n }\n\n _dockRelative(child: Dockable, relativeTo: Dockable, insertBefore: boolean, percentage: number) {\n percentage = percentage || 0.5;\n if(!(child instanceof Dockable)) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'child' must be a Dockable object\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n if(!(relativeTo instanceof Dockable)) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeTo' must be a Dockable object\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n let childIndex = this.children.indexOf(relativeTo);\n let prevToSeparator = insertBefore ? child : relativeTo;\n let nextToSeparator = insertBefore ? relativeTo : child;\n let separator = new DockSeparator(prevToSeparator, nextToSeparator, this);\n nextToSeparator.separatorBefore = separator;\n prevToSeparator.separatorAfter = separator;\n\n child._dockPercentage = relativeTo._dockPercentage * percentage;\n relativeTo._dockPercentage = relativeTo._dockPercentage * (1 - percentage);\n\n if(childIndex >= 0) {\n if(insertBefore) {\n this.children.splice(childIndex, 0, child);\n this.element.insertBefore(child.element, relativeTo.element);\n this.element.insertBefore(separator.element, relativeTo.element);\n }\n else {\n this.children.splice(childIndex + 1, 0, child);\n let next = relativeTo.element.nextSibling;\n if(next){\n this.element.insertBefore(separator.element, next);\n this.element.insertBefore(child.element, next);\n }\n else {\n this.element.appendChild(separator.element);\n this.element.appendChild(child.element);\n }\n }\n }\n else {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeTo' must be a child of a DockContainer\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n child.parentWidget = this;\n child.element.classList.remove(\"floating\");\n child.onAttached();\n this.onResize();\n }\n\n _dock(child: Dockable, insertBefore: boolean, percentage?: number) {\n percentage = percentage || (this.children.length > 0 ? 0.5 : 1);\n\n if(insertBefore) {\n if(this.children.length > 0) {\n let neighbor = this.children[0];\n let separator = new DockSeparator(child, neighbor, this);\n neighbor.separatorBefore = separator;\n child.separatorAfter = separator;\n this.element.prepend(separator.element);\n }\n\n child._dockPercentage = percentage;\n this.children.forEach(c => { c._dockPercentage *= (1 - percentage) });\n\n this.children.unshift(child);\n this.element.prepend(child.element);\n }\n else {\n if(this.children.length > 0) {\n let neighbor = this.children[this.children.length - 1];\n let separator = new DockSeparator(neighbor, child, this);\n neighbor.separatorAfter = separator;\n child.separatorBefore = separator;\n this.element.appendChild(separator.element);\n }\n\n child._dockPercentage = percentage;\n this.children.forEach(c => { c._dockPercentage *= (1 - percentage) });\n\n this.children.push(child);\n this.element.appendChild(child.element);\n }\n child.parentWidget = this;\n child.element.classList.remove(\"floating\");\n child.onAttached();\n this.onResize();\n }\n\n _setOrientation(orientation: Orientation) {\n if(this.orientation == Orientation.Horizontal) {\n this.element.classList.remove(\"horizontal\");\n }\n else {\n this.element.classList.remove(\"vertical\");\n }\n if(orientation == Orientation.Horizontal) {\n this.element.classList.add(\"horizontal\");\n }\n else {\n this.element.classList.add(\"vertical\");\n }\n this.orientation = orientation;\n }\n\n _wrapChildren() {\n let newContainer = new DockContainer();\n newContainer._setOrientation(this.orientation);\n\n // copy percentages, since they are changed while the child collection is updated\n let childPercentages = this.children.map(existingChild => existingChild._dockPercentage);\n childPercentages[0] = 1;\n let children = this.children.slice();\n\n let idx = 0;\n children.forEach(existingChild => {\n this.undock(existingChild);\n newContainer.dock(existingChild, newContainer.orientation == Orientation.Horizontal\n ? DockDirection.Right\n : DockDirection.Bottom,\n childPercentages[idx]);\n idx++;\n });\n\n this._setOrientation(invertOrientation(this.orientation));\n this.children = [];\n this.dock(newContainer, this.orientation == Orientation.Horizontal\n ? DockDirection.Left\n : DockDirection.Top);\n }\n\n _subdivide(relativeTo: Dockable, dockDirection: DockDirection) : DockContainer {\n let newContainer = new DockContainer();\n newContainer._setOrientation(orientationFromDirection(dockDirection));\n\n let relativeIndex = this.children.indexOf(relativeTo);\n if(relativeIndex < 0) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'relativeTo' must be inside this DockContainer\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n newContainer._dockPercentage = relativeTo._dockPercentage;\n relativeTo._dockPercentage = 1;\n \n // get the separators here and update them (otherwise, they sill point to the old neighbor that has been wrapped now)\n if(relativeTo.separatorBefore)\n {\n relativeTo.separatorBefore.next = newContainer;\n relativeTo.separatorBefore = null;\n }\n if(relativeTo.separatorAfter)\n {\n relativeTo.separatorAfter.prev = newContainer;\n relativeTo.separatorAfter = null;\n }\n\n this.children.splice(relativeIndex, 1, newContainer);\n this.element.insertBefore(newContainer.element, relativeTo.element);\n this.element.removeChild(relativeTo.element)\n newContainer.parentWidget = this;\n newContainer.dock(relativeTo, dockDirection);\n \n return newContainer;\n }\n\n dockRelativeTo(child: Dockable, relativeTo: Dockable, dockDirection: DockDirection, percentage?: number) {\n if(percentage == undefined || percentage == null)\n percentage = 0.5;\n\n let targetOrientation = orientationFromDirection(dockDirection);\n let dockTarget:DockContainer = this;\n if(this.orientation != targetOrientation) {\n dockTarget = this._subdivide(relativeTo, dockDirection)\n }\n\n if(dockDirection == DockDirection.Inside)\n console.warn(\"Tabbed docks are not implemented yet!\");\n else if(dockDirection == DockDirection.Float) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'dockDirection' must not be 'Float'. Use 'undock' method to make a child float.\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n\n dockTarget._dockRelative(child, relativeTo, dockDirection == DockDirection.Left || dockDirection == DockDirection.Top, percentage);\n this._layoutChildren();\n return child;\n }\n\n dock(child: Dockable, dockDirection: DockDirection, percentage?: number) {\n let targetOrientation = orientationFromDirection(dockDirection);\n\n if(this.children.length <= 1) {\n this._setOrientation(targetOrientation);\n }\n\n if(this.orientation != targetOrientation) {\n this._wrapChildren();\n }\n\n if(dockDirection == DockDirection.Inside)\n console.warn(\"Tabbed docks are not implemented yet!\");\n else if(dockDirection == DockDirection.Float) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'dockDirection' must not be 'Float'. Use 'undock' method to make a child float.\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n\n this._dock(child, dockDirection == DockDirection.Left || dockDirection == DockDirection.Top, percentage);\n this._layoutChildren();\n return child;\n }\n\n undock(child: Dockable) {\n let childIndex = this.children.indexOf(child);\n if(childIndex < 0) {\n let error = {\n name: \"Argument Error\",\n level: \"Error\",\n message: \"The argument 'child' must be inside a DockContainer in order to be undocked.\",\n toString: function() { return this.name + \": \" + this.message; }\n };\n console.error(error);\n throw error;\n }\n if(childIndex > 0) {\n this.children[childIndex - 1]._dockPercentage += child._dockPercentage;\n }\n else if(childIndex + 1 < this.children.length) {\n this.children[childIndex + 1]._dockPercentage += child._dockPercentage;\n }\n this.children.splice(childIndex, 1); // remove from children list\n let before = child.element.previousElementSibling;\n let after = child.element.nextElementSibling;\n\n if(before != null && before.classList.contains(\"DockSeparator\")) {\n this.element.removeChild(before);\n\n if(child.separatorBefore)\n child.separatorBefore.prev.separatorAfter = null;\n }\n else if(after != null && after.classList.contains(\"DockSeparator\")) {\n this.element.removeChild(after);\n\n if(child.separatorAfter)\n child.separatorAfter.next.separatorBefore = null;\n }\n this.element.removeChild(child.element);\n\n if(this.parentWidget != null && (this.parentWidget instanceof DockContainer) && this.children.length == 0) {\n this.parentWidget.undock(this);\n // remove from _dockContainers\n let index = _dockContainers.indexOf(this);\n if(index >= 0) {\n _dockContainers.splice(index, 1);\n }\n }\n else {\n this._layoutChildren();\n }\n\n child.parentWidget = null;\n 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":["___CSS_LOADER_EXPORT___","push","module","id","exports","styleElement","nonce","setAttribute","stylesInDOM","getIndexByIdentifier","identifier","result","i","length","modulesToDom","list","options","idCountMap","identifiers","item","base","count","concat","indexByIdentifier","obj","css","media","sourceMap","supports","layer","references","updater","addElementStyle","byIndex","splice","api","domAPI","update","newObj","remove","lastIdentifiers","newList","index","newLastIdentifiers","_i","_index","styleSheet","cssText","firstChild","removeChild","appendChild","document","createTextNode","cssWithMappingToString","toString","this","map","content","needLayer","join","modules","dedupe","undefined","alreadyImportedModules","k","_k","cssMapping","btoa","base64","unescape","encodeURIComponent","JSON","stringify","data","sourceMapping","sourceURLs","sources","source","sourceRoot","element","createElement","setAttributes","attributes","insert","memo","style","target","styleTarget","querySelector","window","HTMLIFrameElement","contentDocument","head","e","getTarget","Error","insertStyleElement","styleTagTransform","apply","parentNode","removeStyleElement","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","n","getter","__esModule","d","a","definition","key","o","Object","defineProperty","enumerable","get","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","nc","locals","ColorModificationMode","RAD_TO_DEGREES","Math","PI","DEGREES_TO_RAD","x","y","getAngleToOtherInRadians","other","acos","max","min","getScalarProduct","getLength","getAngleToOtherInDegrees","getRotatedInRadians","radians","cos","sin","Vector2","getRotatedInDegrees","degrees","rotateInRadians","rotateInDegrees","scale","factor","getScaled","sqrt","normalize","getNormalized","setLength","getWithLength","rectContains","rect","left","right","top","bottom","_betterModulo","number","modulus","_HEX_COLOR_REGEX","RegExp","g","b","setRgb","fromRgb","Color","fromHsl","h","s","l","rgb","_hslToRgb","color","fromRgbObject","_hueInfo","fromHsv","v","_hsvToRgb","fromHex","hex","_hexToRgb","match","parseInt","c","abs","m","round","rgbObject","fromHslObject","hslObject","fromHsvObject","hsvObject","_r","_g","_b","setHsl","setHsv","setHex","setRgbObject","setHslObject","setHsvObject","getHsl","hue","cMax","cMin","delta","lightness","saturation","getHsv","getRgb","getHex","padStart","lighten","amount","mode","hsl","FixedAmount","darken","saturate","desaturate","setSaturation","rotateHue","invert","getInverted","getComplement","output","getBlended","alpha","beta","classList","add","parentWidget","onDragStart","mouseEvt","onDragEnd","onDragging","dragInfo","posWithOffsetToParentConsidered","onAttached","isAttached","body","contains","onResize","_dragAndDrop","offsetX","offsetY","dragStartY","dragStartX","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","separatorBefore","separatorAfter","_setOrientation","getFloatingPanels","panel","getDockPanelAtPoint","DockPanel","childAffected","getDockingStructure","setChildPercentages","percentages","_dockRelative","relativeTo","percentage","Dockable","prevToSeparator","nextToSeparator","DockSeparator","_dock","neighbor","_wrapChildren","newContainer","childPercentages","existingChild","slice","undock","dock","Right","Left","_subdivide","relativeIndex","dockRelativeTo","targetOrientation","dockTarget","Inside","warn","Float","before","previousElementSibling","after","nextElementSibling","separators","filter","separatorIndex","childWidth","childHeight","_dragged","_dockOverlay","_dockTarget","_dockTargetDirection","close","resizeEW","resizeNS","resizeDiag","_resizingHorizontally","_resizingVertically","onResizeStart","indexInFloatings","isFloating","getTitle","setTitle","setContent","createDragOverlay","resizingHorizontally","resizingVertically","onResizing","findDockPanelForPoint","targetRect","float","relativeWidget","container","UdoableActionCategory","MessageDialogButton","MessageDialog","inputElement","getValue","DragMode","onChangedCallback","_history","_currentIndex","_idCounter","_onChangedCallback","history","cmd","deleteCount","undo","canUndo","redo","canRedo","do","wasDataModifiedSinceVersion","versionId","targetIndex","findIndex","step","wasDataModified","getCurrentCommand","doAction","undoAction","category","ModifyData","_data","set","containsData","timestamp","fakeClipboard","FakeClipboard","fromOutput","toInput","nodes","connections","fromNodeIndex","fromOutputIndex","toNodeIndex","toInputIndex","inputs","outputs","pos","zoom","getPixelPos","getPixelPosFromPos","getPosFromPixelPos","pixelX","pixelY","nodeSelectedCallback","nodeDeselectedCallback","nodeAddedCallback","nodeRemovedCallback","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":""}