@deephaven/golden-layout 1.23.1-legacy-table-plugin.bbf55c8.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.
- package/css/goldenlayout-base.css +1 -1
- package/css/goldenlayout-base.css.map +1 -1
- package/dist/controls/IntersectionSplitter.d.ts +49 -0
- package/dist/controls/IntersectionSplitter.d.ts.map +1 -0
- package/dist/controls/IntersectionSplitter.js +86 -0
- package/dist/controls/IntersectionSplitter.js.map +1 -0
- package/dist/controls/index.d.ts +1 -0
- package/dist/controls/index.d.ts.map +1 -1
- package/dist/controls/index.js +1 -0
- package/dist/controls/index.js.map +1 -1
- package/dist/items/RowOrColumn.d.ts +189 -0
- package/dist/items/RowOrColumn.d.ts.map +1 -1
- package/dist/items/RowOrColumn.js +655 -1
- package/dist/items/RowOrColumn.js.map +1 -1
- package/package.json +3 -3
- package/scss/goldenlayout-base.scss +30 -0
|
@@ -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,
|
|
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":[]}
|
package/dist/controls/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/controls/index.js
CHANGED
|
@@ -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,
|
|
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,
|
|
1
|
+
{"version":3,"file":"RowOrColumn.d.ts","sourceRoot":"","sources":["../../src/items/RowOrColumn.ts"],"names":[],"mappings":"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"}
|