@deephaven/golden-layout 1.23.1-alpha-pivot-builder.5e6a5fd.0 → 1.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- .lm_root{position:relative}.lm_row>.lm_item{float:left}.lm_content{overflow:hidden;position:relative;outline:0}.lm_dragging,.lm_dragging *{cursor:grabbing !important;user-select:none}.lm_maximised{position:absolute;top:0;left:0;z-index:40}.lm_maximise_placeholder{display:none}.lm_splitter{position:relative;z-index:20}.lm_splitter:hover,.lm_splitter.lm_dragging{background:orange}.lm_splitter.lm_vertical .lm_drag_handle{width:100%;position:absolute;cursor:ns-resize}.lm_splitter.lm_horizontal{float:left;height:100%}.lm_splitter.lm_horizontal .lm_drag_handle{height:100%;position:absolute;cursor:ew-resize}.lm_header{display:flex;justify-content:space-between;max-width:100%;z-index:12;position:relative;overflow:hidden}.lm_header.lm_dropdown_open{z-index:22}.lm_header [class^=lm_]{box-sizing:content-box !important}.lm_header .lm_controls{display:flex;user-select:none}.lm_header .lm_controls>li{cursor:pointer;float:left;width:18px;height:18px;text-align:center}.lm_header .lm_controls>li[disabled]{cursor:default;opacity:.1}.lm_header ul{margin:0;padding:0;list-style-type:none}.lm_header .lm_tabs{display:flex;flex-grow:1;overflow:hidden}.lm_header .lm_tab{cursor:pointer;height:14px;margin-top:1px;padding:0 10px 5px;padding-right:25px;position:relative;min-width:0;flex-shrink:0}.lm_header .lm_tab .lm_title{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.lm_header .lm_tab .lm_close_tab{width:14px;height:14px;position:absolute;top:0;right:0;text-align:center}.lm_stack.lm_left .lm_header,.lm_stack.lm_right .lm_header{height:100%}.lm_dragProxy.lm_left .lm_header,.lm_dragProxy.lm_right .lm_header,.lm_stack.lm_left .lm_header,.lm_stack.lm_right .lm_header{width:20px;float:left;vertical-align:top}.lm_dragProxy.lm_left .lm_header .lm_tabs,.lm_dragProxy.lm_right .lm_header .lm_tabs,.lm_stack.lm_left .lm_header .lm_tabs,.lm_stack.lm_right .lm_header .lm_tabs{transform-origin:left top;top:0;width:1000px}.lm_dragProxy.lm_left .lm_header .lm_controls,.lm_dragProxy.lm_right .lm_header .lm_controls,.lm_stack.lm_left .lm_header .lm_controls,.lm_stack.lm_right .lm_header .lm_controls{bottom:0}.lm_dragProxy.lm_left .lm_items,.lm_dragProxy.lm_right .lm_items,.lm_stack.lm_left .lm_items,.lm_stack.lm_right .lm_items{float:left}.lm_dragProxy.lm_left .lm_header .lm_tabs,.lm_stack.lm_left .lm_header .lm_tabs{transform:rotate(-90deg) scaleX(-1);left:0}.lm_dragProxy.lm_left .lm_header .lm_tabs .lm_tab,.lm_stack.lm_left .lm_header .lm_tabs .lm_tab{transform:scaleX(-1);margin-top:1px}.lm_dragProxy.lm_left .lm_header .lm_tabdropdown_list,.lm_stack.lm_left .lm_header .lm_tabdropdown_list{top:initial;right:initial;left:20px}.lm_dragProxy.lm_right .lm_content{float:left}.lm_dragProxy.lm_right .lm_header .lm_tabs,.lm_stack.lm_right .lm_header .lm_tabs{transform:rotate(90deg) scaleX(1);left:100%;margin-left:0}.lm_dragProxy.lm_right .lm_header .lm_controls,.lm_stack.lm_right .lm_header .lm_controls{left:3px}.lm_dragProxy.lm_right .lm_header .lm_tabdropdown_list,.lm_stack.lm_right .lm_header .lm_tabdropdown_list{top:initial;right:20px}.lm_dragProxy.lm_bottom .lm_header .lm_tab,.lm_stack.lm_bottom .lm_header .lm_tab{margin-top:0;border-top:none}.lm_dragProxy.lm_bottom .lm_header .lm_controls,.lm_stack.lm_bottom .lm_header .lm_controls{top:3px}.lm_dragProxy.lm_bottom .lm_header .lm_tabdropdown_list,.lm_stack.lm_bottom .lm_header .lm_tabdropdown_list{top:initial;bottom:20px}.lm_drop_tab_placeholder{flex-shrink:0}.lm_tabdropdown_list{position:absolute;overflow-y:auto;overflow-x:hidden;top:0;left:0;max-height:100%}.lm_tabdropdown_list .lm_tabs{flex-direction:column}.lm_tabdropdown_list .lm_tab{padding-right:10px}.lm_tabdropdown_list .lm_tab .lm_title{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.lm_tabdropdown_list .lm_close_tab{display:none !important}.lm_dragProxy{position:absolute;top:0;left:0;z-index:30;pointer-events:none}.lm_dragProxy .lm_header{background:transparent}.lm_dragProxy .lm_content{border-top:none;overflow:hidden}.lm_dropTargetIndicator{display:none;position:absolute;z-index:20;pointer-events:none}.lm_dropTargetIndicator .lm_inner{width:100%;height:100%;position:relative;top:0;left:0}.lm_popin{width:20px;height:20px;position:absolute;bottom:0;right:0;z-index:9999}.lm_popin>*{width:100%;height:100%;position:absolute;top:0;left:0}.lm_popin>.lm_bg{z-index:10}.lm_popin>.lm_icon{z-index:20}/*# sourceMappingURL=goldenlayout-base.css.map */
1
+ .lm_root{position:relative}.lm_row>.lm_item{float:left}.lm_content{overflow:hidden;position:relative;outline:0}.lm_dragging,.lm_dragging *{cursor:grabbing !important;user-select:none}.lm_maximised{position:absolute;top:0;left:0;z-index:40}.lm_maximise_placeholder{display:none}.lm_splitter{position:relative;z-index:20}.lm_splitter:hover,.lm_splitter.lm_dragging{background:orange}.lm_splitter.lm_vertical .lm_drag_handle{width:100%;position:absolute;cursor:ns-resize}.lm_splitter.lm_horizontal{float:left;height:100%}.lm_splitter.lm_horizontal .lm_drag_handle{height:100%;position:absolute;cursor:ew-resize}.lm_splitter.lm_intersection_line{z-index:21}.lm_intersection_splitter{position:absolute;z-index:22;cursor:move}.lm_intersection_splitter .lm_drag_handle{position:absolute;width:100%;height:100%;cursor:move}.lm_dragging .lm_intersection_splitter{pointer-events:none}.lm_header{display:flex;justify-content:space-between;max-width:100%;z-index:12;position:relative;overflow:hidden}.lm_header.lm_dropdown_open{z-index:22}.lm_header [class^=lm_]{box-sizing:content-box !important}.lm_header .lm_controls{display:flex;user-select:none}.lm_header .lm_controls>li{cursor:pointer;float:left;width:18px;height:18px;text-align:center}.lm_header .lm_controls>li[disabled]{cursor:default;opacity:.1}.lm_header ul{margin:0;padding:0;list-style-type:none}.lm_header .lm_tabs{display:flex;flex-grow:1;overflow:hidden}.lm_header .lm_tab{cursor:pointer;height:14px;margin-top:1px;padding:0 10px 5px;padding-right:25px;position:relative;min-width:0;flex-shrink:0}.lm_header .lm_tab .lm_title{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.lm_header .lm_tab .lm_close_tab{width:14px;height:14px;position:absolute;top:0;right:0;text-align:center}.lm_stack.lm_left .lm_header,.lm_stack.lm_right .lm_header{height:100%}.lm_dragProxy.lm_left .lm_header,.lm_dragProxy.lm_right .lm_header,.lm_stack.lm_left .lm_header,.lm_stack.lm_right .lm_header{width:20px;float:left;vertical-align:top}.lm_dragProxy.lm_left .lm_header .lm_tabs,.lm_dragProxy.lm_right .lm_header .lm_tabs,.lm_stack.lm_left .lm_header .lm_tabs,.lm_stack.lm_right .lm_header .lm_tabs{transform-origin:left top;top:0;width:1000px}.lm_dragProxy.lm_left .lm_header .lm_controls,.lm_dragProxy.lm_right .lm_header .lm_controls,.lm_stack.lm_left .lm_header .lm_controls,.lm_stack.lm_right .lm_header .lm_controls{bottom:0}.lm_dragProxy.lm_left .lm_items,.lm_dragProxy.lm_right .lm_items,.lm_stack.lm_left .lm_items,.lm_stack.lm_right .lm_items{float:left}.lm_dragProxy.lm_left .lm_header .lm_tabs,.lm_stack.lm_left .lm_header .lm_tabs{transform:rotate(-90deg) scaleX(-1);left:0}.lm_dragProxy.lm_left .lm_header .lm_tabs .lm_tab,.lm_stack.lm_left .lm_header .lm_tabs .lm_tab{transform:scaleX(-1);margin-top:1px}.lm_dragProxy.lm_left .lm_header .lm_tabdropdown_list,.lm_stack.lm_left .lm_header .lm_tabdropdown_list{top:initial;right:initial;left:20px}.lm_dragProxy.lm_right .lm_content{float:left}.lm_dragProxy.lm_right .lm_header .lm_tabs,.lm_stack.lm_right .lm_header .lm_tabs{transform:rotate(90deg) scaleX(1);left:100%;margin-left:0}.lm_dragProxy.lm_right .lm_header .lm_controls,.lm_stack.lm_right .lm_header .lm_controls{left:3px}.lm_dragProxy.lm_right .lm_header .lm_tabdropdown_list,.lm_stack.lm_right .lm_header .lm_tabdropdown_list{top:initial;right:20px}.lm_dragProxy.lm_bottom .lm_header .lm_tab,.lm_stack.lm_bottom .lm_header .lm_tab{margin-top:0;border-top:none}.lm_dragProxy.lm_bottom .lm_header .lm_controls,.lm_stack.lm_bottom .lm_header .lm_controls{top:3px}.lm_dragProxy.lm_bottom .lm_header .lm_tabdropdown_list,.lm_stack.lm_bottom .lm_header .lm_tabdropdown_list{top:initial;bottom:20px}.lm_drop_tab_placeholder{flex-shrink:0}.lm_tabdropdown_list{position:absolute;overflow-y:auto;overflow-x:hidden;top:0;left:0;max-height:100%}.lm_tabdropdown_list .lm_tabs{flex-direction:column}.lm_tabdropdown_list .lm_tab{padding-right:10px}.lm_tabdropdown_list .lm_tab .lm_title{display:inline-block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.lm_tabdropdown_list .lm_close_tab{display:none !important}.lm_dragProxy{position:absolute;top:0;left:0;z-index:30;pointer-events:none}.lm_dragProxy .lm_header{background:transparent}.lm_dragProxy .lm_content{border-top:none;overflow:hidden}.lm_dropTargetIndicator{display:none;position:absolute;z-index:20;pointer-events:none}.lm_dropTargetIndicator .lm_inner{width:100%;height:100%;position:relative;top:0;left:0}.lm_popin{width:20px;height:20px;position:absolute;bottom:0;right:0;z-index:9999}.lm_popin>*{width:100%;height:100%;position:absolute;top:0;left:0}.lm_popin>.lm_bg{z-index:10}.lm_popin>.lm_icon{z-index:20}/*# sourceMappingURL=goldenlayout-base.css.map */
@@ -1 +1 @@
1
- {"version":3,"sourceRoot":"","sources":["../scss/goldenlayout-base.scss"],"names":[],"mappings":"AAmBA,SACE,kBAGF,iBACE,WAIF,YACE,gBACA,kBACA,UAIF,4BAEE,2BACA,iBAIF,cACE,kBACA,MACA,OACA,WAGF,yBACE,aAIF,aACE,kBACA,WAEA,4CAEE,kBAIA,yCACE,MA/DG,KAgEH,kBACA,iBAIJ,2BACE,WACA,OA9DM,KAgEN,2CACE,OAjEI,KAkEJ,kBACA,iBAMN,WACE,aACA,8BACA,eACA,WACA,kBACA,gBAEA,4BAQE,WAGF,wBACE,kCAIF,wBACE,aACA,iBAEA,2BACE,eACA,WACA,MA7GG,KA8GH,OApGI,KAqGJ,kBAGF,qCACE,eACA,WAIJ,cACE,SACA,UACA,qBAGF,oBACE,aACA,YACA,gBAIF,mBACE,eACA,OAhIM,KAiIN,eACA,mBACA,mBACA,kBACA,YACA,cAEA,6BACE,qBACA,mBACA,gBACA,uBACA,eAIF,iCACE,MA1JG,KA2JH,OAnJI,KAoJJ,kBACA,MACA,QACA,kBAQJ,2DACE,YAQF,8HACE,WACA,WACA,mBACA,kKACE,0BACA,MACA,aAEF,kLACE,SAGJ,0HACE,WAOA,gFACE,oCACA,OACA,gGACE,qBACA,eAGJ,wGACE,YACA,cACA,UAKN,mCACE,WAME,kFACE,kCACA,UACA,cAEF,0FACE,SAEF,0GACE,YACA,WAQF,kFACE,aACA,gBAEF,4FACE,QAEF,4GACE,YACA,YAKN,yBACE,cAIF,qBACE,kBACA,gBACA,kBACA,MACA,OACA,gBAEA,8BACE,sBAGF,6BACE,mBAEA,uCACE,qBACA,mBACA,gBACA,uBACA,eAIJ,mCACE,wBASJ,cACE,kBACA,MACA,OACA,WACA,oBAEA,yBACE,uBAGF,0BACE,gBACA,gBAKJ,wBACE,aACA,kBACA,WACA,oBAGA,kCACE,MAhUK,KAiUL,OAxTM,KAyTN,kBACA,MACA,OAKJ,UACE,MAzUO,KA0UP,OAjUQ,KAkUR,kBACA,SACA,QACA,aAEA,YACE,MAlVK,KAmVL,OA1UM,KA2UN,kBACA,MACA,OAGF,iBACE,WAGF,mBACE","file":"goldenlayout-base.css","sourcesContent":["/* stylelint-disable no-descending-specificity */\n// Width variables (appears count calculates by raw css)\n$width0: 100%; // Appears 3 times\n$width1: 20px; // Appears 2 times\n$width2: 100px; // Appears 1 time\n$width3: 14px; // Appears 1 time\n$width4: 18px; // Appears 1 time\n$width5: 15px; // Appears 1 time\n$width6: 2px; // Appears 1 time\n\n// Height variables (appears count calculates by raw css)\n$height0: 100%; // Appears 4 times\n$height1: 20px; // Appears 2 times\n$height2: 14px; // Appears 2 times\n$height3: 10px; // Appears 1 time\n$height4: 19px; // Appears 1 time\n$height5: 18px; // Appears 1 time\n$height6: 15px; // Appears 1 time\n\n.lm_root {\n position: relative;\n}\n\n.lm_row > .lm_item {\n float: left;\n}\n\n// Single Pane content (area in which final dragged content is contained)\n.lm_content {\n overflow: hidden;\n position: relative;\n outline: 0;\n}\n\n// \".lm_dragging\" is applied to BODY tag during Drag and is also directly applied to the root of the object being dragged\n.lm_dragging,\n.lm_dragging * {\n cursor: grabbing !important;\n user-select: none;\n}\n\n// If a specific Pane is maximized\n.lm_maximised {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 40;\n}\n\n.lm_maximise_placeholder {\n display: none;\n}\n\n// Separator line (handle to change pane size)\n.lm_splitter {\n position: relative;\n z-index: 20;\n\n &:hover, // When hovered by mouse...\n &.lm_dragging {\n background: orange;\n }\n\n &.lm_vertical {\n .lm_drag_handle {\n width: $width0;\n position: absolute;\n cursor: ns-resize;\n }\n }\n\n &.lm_horizontal {\n float: left;\n height: $height0;\n\n .lm_drag_handle {\n height: $height0;\n position: absolute;\n cursor: ew-resize;\n }\n }\n}\n\n// Pane Header (container of Tabs for each pane)\n.lm_header {\n display: flex;\n justify-content: space-between;\n max-width: 100%;\n z-index: 12; //above lm_content, below lm_splitter\n position: relative;\n overflow: hidden;\n\n &.lm_dropdown_open {\n // This is an ugly hack, z-index of the whole header needs to be moved up\n // when the menu is open, because its positioned relative to header.\n // The header has a position, which creates a stacking context\n // that can result in the next header being \"above\" the dropdown.\n // The same problem happens for splitters too.\n // A better solution would refactor the dropdown to be a root node,\n // and in general use z-index way less.\n z-index: 22; //above other lm_headers and lm_splitter\n }\n\n [class^='lm_'] {\n box-sizing: content-box !important;\n }\n\n // Pane controls (popout, maximize, minimize, close)\n .lm_controls {\n display: flex;\n user-select: none;\n\n > li {\n cursor: pointer;\n float: left;\n width: $width4;\n height: $height5;\n text-align: center;\n }\n\n > li[disabled] {\n cursor: default;\n opacity: 0.1;\n }\n }\n\n ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n }\n\n .lm_tabs {\n display: flex;\n flex-grow: 1;\n overflow: hidden;\n }\n\n // Single Tab container. A single Tab is set for each pane, a group of Tabs are contained in \".lm_header\"\n .lm_tab {\n cursor: pointer;\n height: $height2;\n margin-top: 1px;\n padding: 0 10px 5px;\n padding-right: 25px;\n position: relative;\n min-width: 0;\n flex-shrink: 0;\n\n .lm_title {\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n\n // Close Tab Icon\n .lm_close_tab {\n width: $width3;\n height: $height2;\n position: absolute;\n top: 0;\n right: 0;\n text-align: center;\n }\n }\n}\n\n// Headers positions\n.lm_stack.lm_left,\n.lm_stack.lm_right {\n .lm_header {\n height: 100%;\n }\n}\n\n.lm_dragProxy.lm_left,\n.lm_dragProxy.lm_right,\n.lm_stack.lm_left,\n.lm_stack.lm_right {\n .lm_header {\n width: 20px;\n float: left;\n vertical-align: top;\n .lm_tabs {\n transform-origin: left top;\n top: 0;\n width: 1000px; /* hack */\n }\n .lm_controls {\n bottom: 0;\n }\n }\n .lm_items {\n float: left;\n }\n}\n\n.lm_dragProxy.lm_left,\n.lm_stack.lm_left {\n .lm_header {\n .lm_tabs {\n transform: rotate(-90deg) scaleX(-1);\n left: 0;\n .lm_tab {\n transform: scaleX(-1);\n margin-top: 1px;\n }\n }\n .lm_tabdropdown_list {\n top: initial;\n right: initial;\n left: 20px;\n }\n }\n}\n\n.lm_dragProxy.lm_right .lm_content {\n float: left;\n}\n\n.lm_dragProxy.lm_right,\n.lm_stack.lm_right {\n .lm_header {\n .lm_tabs {\n transform: rotate(90deg) scaleX(1);\n left: 100%;\n margin-left: 0;\n }\n .lm_controls {\n left: 3px;\n }\n .lm_tabdropdown_list {\n top: initial;\n right: 20px;\n }\n }\n}\n\n.lm_dragProxy.lm_bottom,\n.lm_stack.lm_bottom {\n .lm_header {\n .lm_tab {\n margin-top: 0;\n border-top: none;\n }\n .lm_controls {\n top: 3px;\n }\n .lm_tabdropdown_list {\n top: initial;\n bottom: 20px;\n }\n }\n}\n\n.lm_drop_tab_placeholder {\n flex-shrink: 0;\n}\n\n// Dropdown arrow for additional tabs when too many to be displayed\n.lm_tabdropdown_list {\n position: absolute;\n overflow-y: auto;\n overflow-x: hidden;\n top: 0;\n left: 0;\n max-height: 100%;\n\n .lm_tabs {\n flex-direction: column;\n }\n\n .lm_tab {\n padding-right: 10px;\n\n .lm_title {\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n }\n\n .lm_close_tab {\n display: none !important;\n }\n}\n\n/***********************************\n* Drag Proxy\n***********************************/\n\n// Single Pane content during Drag (style of moving window following mouse)\n.lm_dragProxy {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 30;\n pointer-events: none;\n\n .lm_header {\n background: transparent;\n }\n\n .lm_content {\n border-top: none;\n overflow: hidden;\n }\n}\n\n// Placeholder Container of target position\n.lm_dropTargetIndicator {\n display: none;\n position: absolute;\n z-index: 20;\n pointer-events: none;\n\n // Inner Placeholder\n .lm_inner {\n width: $width0;\n height: $height0;\n position: relative;\n top: 0;\n left: 0;\n }\n}\n\n// If a specific Pane is Popped Out, so move it to a different Browser Window, Icon to restore original position is:\n.lm_popin {\n width: $width1;\n height: $height1;\n position: absolute;\n bottom: 0;\n right: 0;\n z-index: 9999;\n\n > * {\n width: $width0;\n height: $height0;\n position: absolute;\n top: 0;\n left: 0;\n }\n\n > .lm_bg {\n z-index: 10;\n }\n\n > .lm_icon {\n z-index: 20;\n }\n}\n"]}
1
+ {"version":3,"sourceRoot":"","sources":["../scss/goldenlayout-base.scss"],"names":[],"mappings":"AAmBA,SACE,kBAGF,iBACE,WAIF,YACE,gBACA,kBACA,UAIF,4BAEE,2BACA,iBAIF,cACE,kBACA,MACA,OACA,WAGF,yBACE,aAIF,aACE,kBACA,WAEA,4CAEE,kBAIA,yCACE,MA/DG,KAgEH,kBACA,iBAIJ,2BACE,WACA,OA9DM,KAgEN,2CACE,OAjEI,KAkEJ,kBACA,iBAQJ,kCACE,WAOJ,0BACE,kBACA,WACA,YAEA,0CACE,kBACA,WACA,YACA,YAMJ,uCACE,oBAIF,WACE,aACA,8BACA,eACA,WACA,kBACA,gBAEA,4BAQE,WAGF,wBACE,kCAIF,wBACE,aACA,iBAEA,2BACE,eACA,WACA,MA3IG,KA4IH,OAlII,KAmIJ,kBAGF,qCACE,eACA,WAIJ,cACE,SACA,UACA,qBAGF,oBACE,aACA,YACA,gBAIF,mBACE,eACA,OA9JM,KA+JN,eACA,mBACA,mBACA,kBACA,YACA,cAEA,6BACE,qBACA,mBACA,gBACA,uBACA,eAIF,iCACE,MAxLG,KAyLH,OAjLI,KAkLJ,kBACA,MACA,QACA,kBAQJ,2DACE,YAQF,8HACE,WACA,WACA,mBACA,kKACE,0BACA,MACA,aAEF,kLACE,SAGJ,0HACE,WAOA,gFACE,oCACA,OACA,gGACE,qBACA,eAGJ,wGACE,YACA,cACA,UAKN,mCACE,WAME,kFACE,kCACA,UACA,cAEF,0FACE,SAEF,0GACE,YACA,WAQF,kFACE,aACA,gBAEF,4FACE,QAEF,4GACE,YACA,YAKN,yBACE,cAIF,qBACE,kBACA,gBACA,kBACA,MACA,OACA,gBAEA,8BACE,sBAGF,6BACE,mBAEA,uCACE,qBACA,mBACA,gBACA,uBACA,eAIJ,mCACE,wBASJ,cACE,kBACA,MACA,OACA,WACA,oBAEA,yBACE,uBAGF,0BACE,gBACA,gBAKJ,wBACE,aACA,kBACA,WACA,oBAGA,kCACE,MA9VK,KA+VL,OAtVM,KAuVN,kBACA,MACA,OAKJ,UACE,MAvWO,KAwWP,OA/VQ,KAgWR,kBACA,SACA,QACA,aAEA,YACE,MAhXK,KAiXL,OAxWM,KAyWN,kBACA,MACA,OAGF,iBACE,WAGF,mBACE","file":"goldenlayout-base.css","sourcesContent":["/* stylelint-disable no-descending-specificity */\n// Width variables (appears count calculates by raw css)\n$width0: 100%; // Appears 3 times\n$width1: 20px; // Appears 2 times\n$width2: 100px; // Appears 1 time\n$width3: 14px; // Appears 1 time\n$width4: 18px; // Appears 1 time\n$width5: 15px; // Appears 1 time\n$width6: 2px; // Appears 1 time\n\n// Height variables (appears count calculates by raw css)\n$height0: 100%; // Appears 4 times\n$height1: 20px; // Appears 2 times\n$height2: 14px; // Appears 2 times\n$height3: 10px; // Appears 1 time\n$height4: 19px; // Appears 1 time\n$height5: 18px; // Appears 1 time\n$height6: 15px; // Appears 1 time\n\n.lm_root {\n position: relative;\n}\n\n.lm_row > .lm_item {\n float: left;\n}\n\n// Single Pane content (area in which final dragged content is contained)\n.lm_content {\n overflow: hidden;\n position: relative;\n outline: 0;\n}\n\n// \".lm_dragging\" is applied to BODY tag during Drag and is also directly applied to the root of the object being dragged\n.lm_dragging,\n.lm_dragging * {\n cursor: grabbing !important;\n user-select: none;\n}\n\n// If a specific Pane is maximized\n.lm_maximised {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 40;\n}\n\n.lm_maximise_placeholder {\n display: none;\n}\n\n// Separator line (handle to change pane size)\n.lm_splitter {\n position: relative;\n z-index: 20;\n\n &:hover, // When hovered by mouse...\n &.lm_dragging {\n background: orange;\n }\n\n &.lm_vertical {\n .lm_drag_handle {\n width: $width0;\n position: absolute;\n cursor: ns-resize;\n }\n }\n\n &.lm_horizontal {\n float: left;\n height: $height0;\n\n .lm_drag_handle {\n height: $height0;\n position: absolute;\n cursor: ew-resize;\n }\n }\n\n // While part of an active 2D intersection (hover or drag), lift the line above\n // pane content so an offset T/cross junction renders cleanly instead of being\n // clipped by the neighbouring pane. Stays below the intersection handle\n // (z-index 22) so the handle always wins pointer priority for 2D dragging.\n &.lm_intersection_line {\n z-index: 21;\n }\n}\n\n// Intersection splitter: invisible grab area at crossing points for 2D resizing.\n// pointer-events intentionally inherits from ancestor so foreign drags (1D splitter,\n// grid column) suppress the handle without needing extra rules here.\n.lm_intersection_splitter {\n position: absolute;\n z-index: 22;\n cursor: move;\n\n .lm_drag_handle {\n position: absolute;\n width: 100%;\n height: 100%;\n cursor: move;\n }\n}\n\n// Disable the intersection handle while a golden-layout drag is active.\n// The dark theme sets this on `.lm_dragging` too; this rule covers other themes.\n.lm_dragging .lm_intersection_splitter {\n pointer-events: none;\n}\n\n// Pane Header (container of Tabs for each pane)\n.lm_header {\n display: flex;\n justify-content: space-between;\n max-width: 100%;\n z-index: 12; //above lm_content, below lm_splitter\n position: relative;\n overflow: hidden;\n\n &.lm_dropdown_open {\n // This is an ugly hack, z-index of the whole header needs to be moved up\n // when the menu is open, because its positioned relative to header.\n // The header has a position, which creates a stacking context\n // that can result in the next header being \"above\" the dropdown.\n // The same problem happens for splitters too.\n // A better solution would refactor the dropdown to be a root node,\n // and in general use z-index way less.\n z-index: 22; //above other lm_headers and lm_splitter\n }\n\n [class^='lm_'] {\n box-sizing: content-box !important;\n }\n\n // Pane controls (popout, maximize, minimize, close)\n .lm_controls {\n display: flex;\n user-select: none;\n\n > li {\n cursor: pointer;\n float: left;\n width: $width4;\n height: $height5;\n text-align: center;\n }\n\n > li[disabled] {\n cursor: default;\n opacity: 0.1;\n }\n }\n\n ul {\n margin: 0;\n padding: 0;\n list-style-type: none;\n }\n\n .lm_tabs {\n display: flex;\n flex-grow: 1;\n overflow: hidden;\n }\n\n // Single Tab container. A single Tab is set for each pane, a group of Tabs are contained in \".lm_header\"\n .lm_tab {\n cursor: pointer;\n height: $height2;\n margin-top: 1px;\n padding: 0 10px 5px;\n padding-right: 25px;\n position: relative;\n min-width: 0;\n flex-shrink: 0;\n\n .lm_title {\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n\n // Close Tab Icon\n .lm_close_tab {\n width: $width3;\n height: $height2;\n position: absolute;\n top: 0;\n right: 0;\n text-align: center;\n }\n }\n}\n\n// Headers positions\n.lm_stack.lm_left,\n.lm_stack.lm_right {\n .lm_header {\n height: 100%;\n }\n}\n\n.lm_dragProxy.lm_left,\n.lm_dragProxy.lm_right,\n.lm_stack.lm_left,\n.lm_stack.lm_right {\n .lm_header {\n width: 20px;\n float: left;\n vertical-align: top;\n .lm_tabs {\n transform-origin: left top;\n top: 0;\n width: 1000px; /* hack */\n }\n .lm_controls {\n bottom: 0;\n }\n }\n .lm_items {\n float: left;\n }\n}\n\n.lm_dragProxy.lm_left,\n.lm_stack.lm_left {\n .lm_header {\n .lm_tabs {\n transform: rotate(-90deg) scaleX(-1);\n left: 0;\n .lm_tab {\n transform: scaleX(-1);\n margin-top: 1px;\n }\n }\n .lm_tabdropdown_list {\n top: initial;\n right: initial;\n left: 20px;\n }\n }\n}\n\n.lm_dragProxy.lm_right .lm_content {\n float: left;\n}\n\n.lm_dragProxy.lm_right,\n.lm_stack.lm_right {\n .lm_header {\n .lm_tabs {\n transform: rotate(90deg) scaleX(1);\n left: 100%;\n margin-left: 0;\n }\n .lm_controls {\n left: 3px;\n }\n .lm_tabdropdown_list {\n top: initial;\n right: 20px;\n }\n }\n}\n\n.lm_dragProxy.lm_bottom,\n.lm_stack.lm_bottom {\n .lm_header {\n .lm_tab {\n margin-top: 0;\n border-top: none;\n }\n .lm_controls {\n top: 3px;\n }\n .lm_tabdropdown_list {\n top: initial;\n bottom: 20px;\n }\n }\n}\n\n.lm_drop_tab_placeholder {\n flex-shrink: 0;\n}\n\n// Dropdown arrow for additional tabs when too many to be displayed\n.lm_tabdropdown_list {\n position: absolute;\n overflow-y: auto;\n overflow-x: hidden;\n top: 0;\n left: 0;\n max-height: 100%;\n\n .lm_tabs {\n flex-direction: column;\n }\n\n .lm_tab {\n padding-right: 10px;\n\n .lm_title {\n display: inline-block;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n max-width: 100%;\n }\n }\n\n .lm_close_tab {\n display: none !important;\n }\n}\n\n/***********************************\n* Drag Proxy\n***********************************/\n\n// Single Pane content during Drag (style of moving window following mouse)\n.lm_dragProxy {\n position: absolute;\n top: 0;\n left: 0;\n z-index: 30;\n pointer-events: none;\n\n .lm_header {\n background: transparent;\n }\n\n .lm_content {\n border-top: none;\n overflow: hidden;\n }\n}\n\n// Placeholder Container of target position\n.lm_dropTargetIndicator {\n display: none;\n position: absolute;\n z-index: 20;\n pointer-events: none;\n\n // Inner Placeholder\n .lm_inner {\n width: $width0;\n height: $height0;\n position: relative;\n top: 0;\n left: 0;\n }\n}\n\n// If a specific Pane is Popped Out, so move it to a different Browser Window, Icon to restore original position is:\n.lm_popin {\n width: $width1;\n height: $height1;\n position: absolute;\n bottom: 0;\n right: 0;\n z-index: 9999;\n\n > * {\n width: $width0;\n height: $height0;\n position: absolute;\n top: 0;\n left: 0;\n }\n\n > .lm_bg {\n z-index: 10;\n }\n\n > .lm_icon {\n z-index: 20;\n }\n}\n"]}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * IntersectionSplitter is a 2D drag handle that appears at the intersection of
3
+ * two perpendicular splitters (e.g., where a horizontal splitter crosses a vertical splitter).
4
+ *
5
+ * This allows users to drag in both X and Y dimensions simultaneously to resize both
6
+ * rows and columns at the same time, similar to VS Code's window management.
7
+ *
8
+ * Key differences from standard Splitter:
9
+ * - Supports 2D mouse movement (both X and Y offsets)
10
+ * - Uses a `move` (4-way) cursor
11
+ * - Positioned at the intersection point
12
+ * - Emits drag events with both offsetX and offsetY
13
+ */
14
+ export default class IntersectionSplitter {
15
+ private _size;
16
+ private _grabSize;
17
+ private _hitAreaSize;
18
+ private _dragListener;
19
+ element: JQuery<HTMLElement>;
20
+ /**
21
+ * Creates a new IntersectionSplitter.
22
+ *
23
+ * @param size The size of the splitter in pixels (usually matches border width)
24
+ * @param grabSize The size of the grab area (can be larger for usability)
25
+ */
26
+ constructor(size: number, grabSize: number);
27
+ /**
28
+ * Listen to events on this intersection splitter.
29
+ *
30
+ * @param event The event name ('drag', 'dragStart', 'dragStop')
31
+ * @param callback The callback function
32
+ * @param context The context to bind to
33
+ */
34
+ on(event: string, callback: Function, context?: unknown): void;
35
+ /**
36
+ * Clean up and remove this intersection splitter from the DOM.
37
+ */
38
+ _$destroy(): void;
39
+ /**
40
+ * Create the DOM element for the intersection splitter.
41
+ *
42
+ * The element is an invisible square grab area positioned at the crossing
43
+ * point of two perpendicular splitters. It allows dragging in both dimensions.
44
+ *
45
+ * @returns The created jQuery element
46
+ */
47
+ private _createElement;
48
+ }
49
+ //# sourceMappingURL=IntersectionSplitter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntersectionSplitter.d.ts","sourceRoot":"","sources":["../../src/controls/IntersectionSplitter.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAoB;IACvC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,aAAa,CAAsB;IAE3C,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAE7B;;;;;OAKG;gBACS,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAQ1C;;;;;;OAMG;IACH,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,OAAO;IAIvD;;OAEG;IACH,SAAS;IAMT;;;;;;;OAOG;IACH,OAAO,CAAC,cAAc;CAkBvB"}
@@ -0,0 +1,86 @@
1
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
2
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
3
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
4
+ import $ from 'jquery';
5
+ import { DragListener } from "../utils/index.js";
6
+ /**
7
+ * IntersectionSplitter is a 2D drag handle that appears at the intersection of
8
+ * two perpendicular splitters (e.g., where a horizontal splitter crosses a vertical splitter).
9
+ *
10
+ * This allows users to drag in both X and Y dimensions simultaneously to resize both
11
+ * rows and columns at the same time, similar to VS Code's window management.
12
+ *
13
+ * Key differences from standard Splitter:
14
+ * - Supports 2D mouse movement (both X and Y offsets)
15
+ * - Uses a `move` (4-way) cursor
16
+ * - Positioned at the intersection point
17
+ * - Emits drag events with both offsetX and offsetY
18
+ */
19
+ export default class IntersectionSplitter {
20
+ /**
21
+ * Creates a new IntersectionSplitter.
22
+ *
23
+ * @param size The size of the splitter in pixels (usually matches border width)
24
+ * @param grabSize The size of the grab area (can be larger for usability)
25
+ */
26
+ constructor(size, grabSize) {
27
+ _defineProperty(this, "_size", void 0);
28
+ _defineProperty(this, "_grabSize", void 0);
29
+ _defineProperty(this, "_hitAreaSize", void 0);
30
+ _defineProperty(this, "_dragListener", void 0);
31
+ _defineProperty(this, "element", void 0);
32
+ this._size = size;
33
+ this._grabSize = grabSize < size ? size : grabSize;
34
+ this._hitAreaSize = Math.max(this._grabSize, 14);
35
+ this.element = this._createElement();
36
+ this._dragListener = new DragListener(this.element);
37
+ }
38
+
39
+ /**
40
+ * Listen to events on this intersection splitter.
41
+ *
42
+ * @param event The event name ('drag', 'dragStart', 'dragStop')
43
+ * @param callback The callback function
44
+ * @param context The context to bind to
45
+ */
46
+ on(event, callback, context) {
47
+ var _this$_dragListener;
48
+ (_this$_dragListener = this._dragListener) === null || _this$_dragListener === void 0 || _this$_dragListener.on(event, callback, context);
49
+ }
50
+
51
+ /**
52
+ * Clean up and remove this intersection splitter from the DOM.
53
+ */
54
+ _$destroy() {
55
+ var _this$_dragListener2;
56
+ (_this$_dragListener2 = this._dragListener) === null || _this$_dragListener2 === void 0 || _this$_dragListener2.destroy();
57
+ this._dragListener = null;
58
+ this.element.remove();
59
+ }
60
+
61
+ /**
62
+ * Create the DOM element for the intersection splitter.
63
+ *
64
+ * The element is an invisible square grab area positioned at the crossing
65
+ * point of two perpendicular splitters. It allows dragging in both dimensions.
66
+ *
67
+ * @returns The created jQuery element
68
+ */
69
+ _createElement() {
70
+ var dragHandle = $('<div class="lm_drag_handle"></div>');
71
+ var element = $('<div class="lm_intersection_splitter"></div>');
72
+ element.append(dragHandle);
73
+ element.css({
74
+ width: this._hitAreaSize,
75
+ height: this._hitAreaSize
76
+ });
77
+
78
+ // Prevent the mousedown from bubbling to the parent splitter's DragListener,
79
+ // which would otherwise start a 1D drag in parallel.
80
+ element.on('mousedown touchstart', event => {
81
+ event.stopPropagation();
82
+ });
83
+ return element;
84
+ }
85
+ }
86
+ //# sourceMappingURL=IntersectionSplitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IntersectionSplitter.js","names":["$","DragListener","IntersectionSplitter","constructor","size","grabSize","_defineProperty","_size","_grabSize","_hitAreaSize","Math","max","element","_createElement","_dragListener","on","event","callback","context","_this$_dragListener","_$destroy","_this$_dragListener2","destroy","remove","dragHandle","append","css","width","height","stopPropagation"],"sources":["../../src/controls/IntersectionSplitter.ts"],"sourcesContent":["import $ from 'jquery';\nimport { DragListener } from '../utils';\n\n/**\n * IntersectionSplitter is a 2D drag handle that appears at the intersection of\n * two perpendicular splitters (e.g., where a horizontal splitter crosses a vertical splitter).\n *\n * This allows users to drag in both X and Y dimensions simultaneously to resize both\n * rows and columns at the same time, similar to VS Code's window management.\n *\n * Key differences from standard Splitter:\n * - Supports 2D mouse movement (both X and Y offsets)\n * - Uses a `move` (4-way) cursor\n * - Positioned at the intersection point\n * - Emits drag events with both offsetX and offsetY\n */\nexport default class IntersectionSplitter {\n private _size: number;\n private _grabSize: number;\n private _hitAreaSize: number;\n private _dragListener: DragListener | null;\n\n element: JQuery<HTMLElement>;\n\n /**\n * Creates a new IntersectionSplitter.\n *\n * @param size The size of the splitter in pixels (usually matches border width)\n * @param grabSize The size of the grab area (can be larger for usability)\n */\n constructor(size: number, grabSize: number) {\n this._size = size;\n this._grabSize = grabSize < size ? size : grabSize;\n this._hitAreaSize = Math.max(this._grabSize, 14);\n this.element = this._createElement();\n this._dragListener = new DragListener(this.element);\n }\n\n /**\n * Listen to events on this intersection splitter.\n *\n * @param event The event name ('drag', 'dragStart', 'dragStop')\n * @param callback The callback function\n * @param context The context to bind to\n */\n on(event: string, callback: Function, context?: unknown) {\n this._dragListener?.on(event, callback, context);\n }\n\n /**\n * Clean up and remove this intersection splitter from the DOM.\n */\n _$destroy() {\n this._dragListener?.destroy();\n this._dragListener = null;\n this.element.remove();\n }\n\n /**\n * Create the DOM element for the intersection splitter.\n *\n * The element is an invisible square grab area positioned at the crossing\n * point of two perpendicular splitters. It allows dragging in both dimensions.\n *\n * @returns The created jQuery element\n */\n private _createElement() {\n const dragHandle = $('<div class=\"lm_drag_handle\"></div>');\n const element = $('<div class=\"lm_intersection_splitter\"></div>');\n element.append(dragHandle);\n\n element.css({\n width: this._hitAreaSize,\n height: this._hitAreaSize,\n });\n\n // Prevent the mousedown from bubbling to the parent splitter's DragListener,\n // which would otherwise start a 1D drag in parallel.\n element.on('mousedown touchstart', event => {\n event.stopPropagation();\n });\n\n return element;\n }\n}\n"],"mappings":";;;AAAA,OAAOA,CAAC,MAAM,QAAQ;AAAC,SACdC,YAAY;AAErB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,eAAe,MAAMC,oBAAoB,CAAC;EAQxC;AACF;AACA;AACA;AACA;AACA;EACEC,WAAWA,CAACC,IAAY,EAAEC,QAAgB,EAAE;IAAAC,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAAAA,eAAA;IAC1C,IAAI,CAACC,KAAK,GAAGH,IAAI;IACjB,IAAI,CAACI,SAAS,GAAGH,QAAQ,GAAGD,IAAI,GAAGA,IAAI,GAAGC,QAAQ;IAClD,IAAI,CAACI,YAAY,GAAGC,IAAI,CAACC,GAAG,CAAC,IAAI,CAACH,SAAS,EAAE,EAAE,CAAC;IAChD,IAAI,CAACI,OAAO,GAAG,IAAI,CAACC,cAAc,CAAC,CAAC;IACpC,IAAI,CAACC,aAAa,GAAG,IAAIb,YAAY,CAAC,IAAI,CAACW,OAAO,CAAC;EACrD;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACEG,EAAEA,CAACC,KAAa,EAAEC,QAAkB,EAAEC,OAAiB,EAAE;IAAA,IAAAC,mBAAA;IACvD,CAAAA,mBAAA,OAAI,CAACL,aAAa,cAAAK,mBAAA,eAAlBA,mBAAA,CAAoBJ,EAAE,CAACC,KAAK,EAAEC,QAAQ,EAAEC,OAAO,CAAC;EAClD;;EAEA;AACF;AACA;EACEE,SAASA,CAAA,EAAG;IAAA,IAAAC,oBAAA;IACV,CAAAA,oBAAA,OAAI,CAACP,aAAa,cAAAO,oBAAA,eAAlBA,oBAAA,CAAoBC,OAAO,CAAC,CAAC;IAC7B,IAAI,CAACR,aAAa,GAAG,IAAI;IACzB,IAAI,CAACF,OAAO,CAACW,MAAM,CAAC,CAAC;EACvB;;EAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACUV,cAAcA,CAAA,EAAG;IACvB,IAAMW,UAAU,GAAGxB,CAAC,CAAC,oCAAoC,CAAC;IAC1D,IAAMY,OAAO,GAAGZ,CAAC,CAAC,8CAA8C,CAAC;IACjEY,OAAO,CAACa,MAAM,CAACD,UAAU,CAAC;IAE1BZ,OAAO,CAACc,GAAG,CAAC;MACVC,KAAK,EAAE,IAAI,CAAClB,YAAY;MACxBmB,MAAM,EAAE,IAAI,CAACnB;IACf,CAAC,CAAC;;IAEF;IACA;IACAG,OAAO,CAACG,EAAE,CAAC,sBAAsB,EAAEC,KAAK,IAAI;MAC1CA,KAAK,CAACa,eAAe,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,OAAOjB,OAAO;EAChB;AACF","ignoreList":[]}
@@ -5,6 +5,7 @@ export { default as DragSourceFromEvent } from './DragSourceFromEvent';
5
5
  export { default as DropTargetIndicator } from './DropTargetIndicator';
6
6
  export { default as Header } from './Header';
7
7
  export { default as HeaderButton } from './HeaderButton';
8
+ export { default as IntersectionSplitter } from './IntersectionSplitter';
8
9
  export { default as Splitter } from './Splitter';
9
10
  export { default as Tab } from './Tab';
10
11
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/controls/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACzD,OAAO,EAAE,OAAO,IAAI,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,EAAE,OAAO,IAAI,GAAG,EAAE,MAAM,OAAO,CAAC"}
@@ -5,6 +5,7 @@ export { default as DragSourceFromEvent } from "./DragSourceFromEvent.js";
5
5
  export { default as DropTargetIndicator } from "./DropTargetIndicator.js";
6
6
  export { default as Header } from "./Header.js";
7
7
  export { default as HeaderButton } from "./HeaderButton.js";
8
+ export { default as IntersectionSplitter } from "./IntersectionSplitter.js";
8
9
  export { default as Splitter } from "./Splitter.js";
9
10
  export { default as Tab } from "./Tab.js";
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["default","BrowserPopout","DragProxy","DragSource","DragSourceFromEvent","DropTargetIndicator","Header","HeaderButton","Splitter","Tab"],"sources":["../../src/controls/index.ts"],"sourcesContent":["export { default as BrowserPopout } from './BrowserPopout';\nexport { default as DragProxy } from './DragProxy';\nexport { default as DragSource } from './DragSource';\nexport { default as DragSourceFromEvent } from './DragSourceFromEvent';\nexport { default as DropTargetIndicator } from './DropTargetIndicator';\nexport { default as Header } from './Header';\nexport { default as HeaderButton } from './HeaderButton';\nexport { default as Splitter } from './Splitter';\nexport { default as Tab } from './Tab';\n"],"mappings":"SAASA,OAAO,IAAIC,aAAa;AAAA,SACxBD,OAAO,IAAIE,SAAS;AAAA,SACpBF,OAAO,IAAIG,UAAU;AAAA,SACrBH,OAAO,IAAII,mBAAmB;AAAA,SAC9BJ,OAAO,IAAIK,mBAAmB;AAAA,SAC9BL,OAAO,IAAIM,MAAM;AAAA,SACjBN,OAAO,IAAIO,YAAY;AAAA,SACvBP,OAAO,IAAIQ,QAAQ;AAAA,SACnBR,OAAO,IAAIS,GAAG","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["default","BrowserPopout","DragProxy","DragSource","DragSourceFromEvent","DropTargetIndicator","Header","HeaderButton","IntersectionSplitter","Splitter","Tab"],"sources":["../../src/controls/index.ts"],"sourcesContent":["export { default as BrowserPopout } from './BrowserPopout';\nexport { default as DragProxy } from './DragProxy';\nexport { default as DragSource } from './DragSource';\nexport { default as DragSourceFromEvent } from './DragSourceFromEvent';\nexport { default as DropTargetIndicator } from './DropTargetIndicator';\nexport { default as Header } from './Header';\nexport { default as HeaderButton } from './HeaderButton';\nexport { default as IntersectionSplitter } from './IntersectionSplitter';\nexport { default as Splitter } from './Splitter';\nexport { default as Tab } from './Tab';\n"],"mappings":"SAASA,OAAO,IAAIC,aAAa;AAAA,SACxBD,OAAO,IAAIE,SAAS;AAAA,SACpBF,OAAO,IAAIG,UAAU;AAAA,SACrBH,OAAO,IAAII,mBAAmB;AAAA,SAC9BJ,OAAO,IAAIK,mBAAmB;AAAA,SAC9BL,OAAO,IAAIM,MAAM;AAAA,SACjBN,OAAO,IAAIO,YAAY;AAAA,SACvBP,OAAO,IAAIQ,oBAAoB;AAAA,SAC/BR,OAAO,IAAIS,QAAQ;AAAA,SACnBT,OAAO,IAAIU,GAAG","ignoreList":[]}
@@ -8,6 +8,7 @@ export default class RowOrColumn extends AbstractContentItem {
8
8
  childElementContainer: JQuery<HTMLElement>;
9
9
  parent: AbstractContentItem | null;
10
10
  private _splitter;
11
+ private _intersectionSplitter;
11
12
  private _splitterSize;
12
13
  private _splitterGrabSize;
13
14
  private _isColumn;
@@ -15,6 +16,12 @@ export default class RowOrColumn extends AbstractContentItem {
15
16
  private _splitterPosition;
16
17
  private _splitterMinPosition;
17
18
  private _splitterMaxPosition;
19
+ private _isIntersectionDragging;
20
+ private _activeFourWayPartner;
21
+ private _activeFourWaySharedCenterMin;
22
+ private _activeFourWaySharedCenterMax;
23
+ private _activeFourWayBaseCenter;
24
+ private _activeFourWayPartnerBaseCenter;
18
25
  constructor(isColumn: true, layoutManager: LayoutManager, config: ColumnItemConfig, parent: AbstractContentItem | null);
19
26
  constructor(isColumn: false, layoutManager: LayoutManager, config: RowItemConfig, parent: AbstractContentItem | null);
20
27
  /**
@@ -153,5 +160,187 @@ export default class RowOrColumn extends AbstractContentItem {
153
160
  * @param {lm.controls.Splitter} splitter
154
161
  */
155
162
  _onSplitterDragStop(splitter: Splitter): void;
163
+ /**
164
+ * Applies drag-stop updates for one splitter without scheduling layout.
165
+ */
166
+ private _applySplitterDragStop;
167
+ /**
168
+ * Schedules a full descendant size update on the next animation frame.
169
+ */
170
+ private _scheduleSetSize;
171
+ /**
172
+ * Schedule intersection handle refresh after layout and browser positioning settle.
173
+ */
174
+ private _scheduleIntersectionRefresh;
175
+ /**
176
+ * Schedule an intersection handle refresh on every RowOrColumn ancestor so
177
+ * crossing handles stay aligned after a drag that only resized descendants.
178
+ */
179
+ private _scheduleAncestorIntersectionRefresh;
180
+ /**
181
+ * Create intersection splitters at the crossing points between this
182
+ * RowOrColumn's splitters and the splitters of any perpendicular child.
183
+ *
184
+ * Each handle is appended into this RowOrColumn's container and positioned
185
+ * with JS (via `_positionIntersectionSplitter`) during refresh so it stays
186
+ * aligned as the layout changes. Handles are keyed by their splitter indices
187
+ * so existing ones are reused rather than recreated.
188
+ *
189
+ * @returns The set of crossing keys that currently exist, so callers can
190
+ * sweep handles whose crossing no longer exists.
191
+ */
192
+ private _createIntersectionSplitters;
193
+ /**
194
+ * Collect every perpendicular splitter line within `item`'s subtree that
195
+ * reaches the shared edge with one of this row/column's splitter bars, so a
196
+ * crossing handle can be created for it. Lines can be nested arbitrarily deep,
197
+ * so descend until the edge is no longer shared.
198
+ *
199
+ * @param item The subtree root to search.
200
+ * @param nearEdge true when the bar sits at the start of `item` along the bar
201
+ * main axis (junction at the near end), false when at the end.
202
+ * @param path Dot/colon-delimited string uniquely identifying this stem within
203
+ * the layout tree, used as part of the intersection handle key.
204
+ * @returns Array of stem descriptors for each crossing found in the subtree.
205
+ */
206
+ private _collectEdgeStemSplitters;
207
+ /**
208
+ * Recreate intersection splitters based on current splitter topology.
209
+ * This keeps handles aligned and present after layout tree mutations.
210
+ */
211
+ private _refreshIntersectionSplitters;
212
+ /**
213
+ * Destroy all previously created intersection splitters.
214
+ */
215
+ private _destroyIntersectionSplitters;
216
+ /**
217
+ * Tear down splitters (including intersection handles and their document-level
218
+ * drag listeners) before delegating to the base destroy logic.
219
+ */
220
+ _$destroy(): void;
221
+ /**
222
+ * Whether any golden-layout drag that should suppress intersection hover
223
+ * affordances is in progress. Covers a 1D splitter drag or a panel drag
224
+ * (both signalled by `lm_dragging` on the body) and the 2D intersection drag
225
+ * itself (`lm_intersection_dragging`). During these the handle must not light
226
+ * up its cross as the pointer passes over a crossing.
227
+ *
228
+ * @returns True when a golden-layout drag is active.
229
+ */
230
+ private static _isAnyDragInProgress;
231
+ /**
232
+ * Create a single intersection splitter anchored in this row/column overlay
233
+ * at the given coordinates.
234
+ *
235
+ * @param key Unique key identifying this crossing (parent splitter index plus
236
+ * the stem's tree path), used to reuse an existing handle instead
237
+ * of creating a duplicate.
238
+ * @param parentSplitterIndex Index into this row/column's `_splitter` array of
239
+ * the "bar" splitter that owns the crossing.
240
+ * @param stemOwner The RowOrColumn (possibly a descendant) that owns the
241
+ * perpendicular "stem" splitter crossing the bar.
242
+ * @param stemSplitterIndex Index into `stemOwner._splitter` of the stem
243
+ * splitter.
244
+ * @param junctionAtNearEdge True when the stem meets the bar at the stem
245
+ * owner's near edge, false at its far edge.
246
+ */
247
+ private _ensureIntersectionSplitter;
248
+ /**
249
+ * Move an intersection handle to the current centre of its crossing.
250
+ *
251
+ * @param record The intersection handle record to reposition.
252
+ */
253
+ private _positionIntersectionSplitter;
254
+ /**
255
+ * Compute intersection coordinates (the centre of the crossing) relative to
256
+ * this row/column container.
257
+ *
258
+ * Uses `getBoundingClientRect` for the container and both splitter elements
259
+ * rather than jQuery `.position()`. `.position()` is relative to each
260
+ * element's offset parent, which varies with nesting and `position: relative`
261
+ * on intermediate items, so adding those values together mis-places the
262
+ * handle at some crossings. Rect-based deltas are independent of the offset
263
+ * parent chain and always land on the visual crossing.
264
+ *
265
+ * @param record The intersection handle record to locate.
266
+ * @returns The `{ left, top }` crossing centre relative to this row/column
267
+ * container, or null when the geometry is unavailable.
268
+ */
269
+ private _getIntersectionPosition;
270
+ /**
271
+ * Toggle the active-line highlight on both splitters that meet at an
272
+ * intersection. Reuses the standard `.lm_dragging` line style so the 2D
273
+ * affordance is visually identical to the existing 1D drag affordance, and
274
+ * adds `.lm_intersection_line` to lift the lines above pane content so an
275
+ * offset junction renders cleanly instead of being clipped by a neighbour.
276
+ *
277
+ * @param record The intersection handle whose two perpendicular lines to
278
+ * toggle.
279
+ * @param highlighted True to add the highlight, false to remove it.
280
+ */
281
+ private _setIntersectionHighlight;
282
+ /**
283
+ * Find a nearby sibling intersection on the same parent splitter so a
284
+ * near-aligned 4-way corner can be dragged as one.
285
+ *
286
+ * @param record The intersection handle to find a partner for.
287
+ * @returns The closest sibling handle within tolerance, or null if none.
288
+ */
289
+ private _findNearFourWayPartner;
290
+ /**
291
+ * Clamp and apply one splitter visual drag offset on the owner's active axis.
292
+ *
293
+ * @param owner The RowOrColumn that owns the splitter and its min/max bounds.
294
+ * @param splitter The splitter whose visual position to move.
295
+ * @param offset The desired pixel offset along the owner's active axis;
296
+ * clamped to the owner's min/max drag range before applying.
297
+ */
298
+ private _setSplitterDragOffset;
299
+ /**
300
+ * Get the splitter line center on the owner's active drag axis.
301
+ *
302
+ * @param owner The RowOrColumn that determines the active axis.
303
+ * @param splitter The splitter to measure.
304
+ * @returns The line centre in client coordinates on the active axis, or null
305
+ * when the element is unavailable.
306
+ */
307
+ private _getSplitterAxisCenter;
308
+ /**
309
+ * Invoked when an intersection splitter's DragListener fires dragStart.
310
+ * Calculates movement bounds for both axes (via the existing 1D logic) so the
311
+ * drag stays within valid ranges, and highlights both perpendicular lines.
312
+ *
313
+ * @param record The intersection handle that started dragging.
314
+ */
315
+ private _onIntersectionSplitterDragStart;
316
+ /**
317
+ * Invoked when an intersection splitter's DragListener fires drag. Moves both
318
+ * splitter lines by delegating to the existing 1D logic, which clamps each
319
+ * axis to its own valid range. The lines moving form the 2D drag affordance.
320
+ *
321
+ * The stem line spans the full extent of its owner along the parent axis, so
322
+ * when the parent line moves the junction would otherwise detach. The stem is
323
+ * stretched to follow the parent line while its far tip stays anchored.
324
+ *
325
+ * The stretch is applied with a CSS `transform: scale(...)` about the far tip
326
+ * rather than by changing the line's `width`/`height`/`top`/`left`. Splitter
327
+ * lines are real in-flow elements (floated / `position: relative`), so
328
+ * mutating their box size reflows sibling panes and headers (tabs jump,
329
+ * content shifts, gaps appear). A transform is painted without affecting
330
+ * layout, so the affordance stretches cleanly even for deeply nested grids.
331
+ *
332
+ * @param record The intersection handle being dragged.
333
+ * @param offsetX Horizontal pixels moved from the drag origin. Can be negative.
334
+ * @param offsetY Vertical pixels moved from the drag origin. Can be negative.
335
+ */
336
+ private _onIntersectionSplitterDrag;
337
+ /**
338
+ * Invoked when an intersection splitter's DragListener fires dragStop.
339
+ * Applies both axis updates atomically (via the existing 1D logic), clears the
340
+ * highlight unless the pointer is still over the handle, then relayouts once.
341
+ *
342
+ * @param record The intersection handle that finished dragging.
343
+ */
344
+ private _onIntersectionSplitterDragStop;
156
345
  }
157
346
  //# sourceMappingURL=RowOrColumn.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RowOrColumn.d.ts","sourceRoot":"","sources":["../../src/items/RowOrColumn.ts"],"names":[],"mappings":"AACA,OAAO,mBAAmB,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,aAAa,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,gBAAgB,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE7E,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,mBAAmB;IAC1D,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAC3C,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAAC;IAEnC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,SAAS,CAAU;IAC3B,OAAO,CAAC,UAAU,CAAqB;IACvC,OAAO,CAAC,iBAAiB,CAAuB;IAChD,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,oBAAoB,CAAuB;gBAGjD,QAAQ,EAAE,IAAI,EACd,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,mBAAmB,GAAG,IAAI;gBAGlC,QAAQ,EAAE,KAAK,EACf,aAAa,EAAE,aAAa,EAC5B,MAAM,EAAE,aAAa,EACrB,MAAM,EAAE,mBAAmB,GAAG,IAAI;IA6BpC;;;;;;;;;OASG;IACH,QAAQ,CACN,WAAW,EAAE,mBAAmB,GAAG,UAAU,EAC7C,KAAK,CAAC,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,OAAO;IAiD3B;;;;;OAKG;IACH,WAAW,CAAC,WAAW,EAAE,mBAAmB,EAAE,SAAS,EAAE,OAAO;IAiDhE;;;;;;OAMG;IACH,YAAY,CACV,QAAQ,EAAE,mBAAmB,EAC7B,QAAQ,EAAE,mBAAmB,EAC7B,eAAe,UAAQ;IASzB;;OAEG;IACH,OAAO;IASP;;;;OAIG;IACH,MAAM;IAYN;;;;;OAKG;IACH,iBAAiB;IAmBjB;;;OAGG;IACH,uBAAuB;;;;;;IAuCvB;;;;;;;;;;;;;;;;;OAiBG;IACH,uBAAuB;IA0DvB;;OAEG;IACH,oBAAoB;IAyEpB;;;;;;;;OAQG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAsBxC;;;;;;;;;OASG;IACH,oBAAoB,CAAC,QAAQ,EAAE,QAAQ;;;;IAavC;;;;OAIG;IACH,qBAAqB,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE;;;;IAYtE;;;;;OAKG;IACH,oBAAoB,CAAC,QAAQ,EAAE,QAAQ;IA8BvC;;;;;;;OAOG;IACH,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;IAmBpE;;;;;;OAMG;IACH,mBAAmB,CAAC,QAAQ,EAAE,QAAQ;CAwBvC"}
1
+ {"version":3,"file":"RowOrColumn.d.ts","sourceRoot":"","sources":["../../src/items/RowOrColumn.ts"],"names":[],"mappings":"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"}