Skip to content

Commit 7077e87

Browse files
authored
Allow double-clicking a gutter between panels to reset its sizing to default (#4000)
Support double-clicking to reset inter-panel gutter sizing
1 parent b52bf7b commit 7077e87

File tree

1 file changed

+23
-4
lines changed

1 file changed

+23
-4
lines changed

frontend/src/components/window/Workspace.svelte

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
/* └─ */ layers: 55,
1818
} as const;
1919
20-
let panelSizes: Record<string, number> = PANEL_SIZES;
20+
let panelSizes: Record<string, number> = { ...PANEL_SIZES };
2121
let documentPanel: Panel | undefined;
2222
let gutterResizeRestore: [number, number] | undefined = undefined;
2323
let pointerCaptureId: number | undefined = undefined;
@@ -41,6 +41,25 @@
4141
const editor = getContext<EditorWrapper>("editor");
4242
const portfolio = getContext<PortfolioStore>("portfolio");
4343
44+
function isPanelName(name: string): name is keyof typeof PANEL_SIZES {
45+
return name in PANEL_SIZES;
46+
}
47+
48+
function resetPanelSizes(e: MouseEvent) {
49+
const gutter = e.currentTarget;
50+
if (!(gutter instanceof HTMLDivElement)) return;
51+
52+
const nextSibling = gutter.nextElementSibling;
53+
const prevSibling = gutter.previousElementSibling;
54+
if (!(nextSibling instanceof HTMLDivElement) || !(prevSibling instanceof HTMLDivElement)) return;
55+
56+
const nextSiblingName = nextSibling.getAttribute("data-subdivision-name") || undefined;
57+
const prevSiblingName = prevSibling.getAttribute("data-subdivision-name") || undefined;
58+
if (!nextSiblingName || !prevSiblingName || !isPanelName(nextSiblingName) || !isPanelName(prevSiblingName)) return;
59+
60+
panelSizes = { ...panelSizes, [nextSiblingName]: PANEL_SIZES[nextSiblingName], [prevSiblingName]: PANEL_SIZES[prevSiblingName] };
61+
}
62+
4463
function resizePanel(e: PointerEvent) {
4564
const gutter = e.target;
4665
if (!(gutter instanceof HTMLDivElement)) return;
@@ -157,22 +176,22 @@
157176
/>
158177
</LayoutRow>
159178
{#if $portfolio.dataPanelOpen}
160-
<LayoutRow class="workspace-grid-resize-gutter" data-gutter-vertical on:pointerdown={(e) => resizePanel(e)} />
179+
<LayoutRow class="workspace-grid-resize-gutter" data-gutter-vertical on:pointerdown={(e) => resizePanel(e)} on:dblclick={(e) => resetPanelSizes(e)} />
161180
<LayoutRow class="workspace-grid-subdivision" styles={{ "flex-grow": panelSizes["data"] }} data-subdivision-name="data">
162181
<Panel panelType="Data" tabLabels={[{ name: "Data" }]} tabActiveIndex={0} />
163182
</LayoutRow>
164183
{/if}
165184
</LayoutCol>
166185
{#if $portfolio.propertiesPanelOpen || $portfolio.layersPanelOpen}
167-
<LayoutCol class="workspace-grid-resize-gutter" data-gutter-horizontal on:pointerdown={(e) => resizePanel(e)} />
186+
<LayoutCol class="workspace-grid-resize-gutter" data-gutter-horizontal on:pointerdown={(e) => resizePanel(e)} on:dblclick={(e) => resetPanelSizes(e)} />
168187
<LayoutCol class="workspace-grid-subdivision" styles={{ "flex-grow": panelSizes["details"] }} data-subdivision-name="details">
169188
{#if $portfolio.propertiesPanelOpen}
170189
<LayoutRow class="workspace-grid-subdivision" styles={{ "flex-grow": panelSizes["properties"] }} data-subdivision-name="properties">
171190
<Panel panelType="Properties" tabLabels={[{ name: "Properties" }]} tabActiveIndex={0} />
172191
</LayoutRow>
173192
{/if}
174193
{#if $portfolio.propertiesPanelOpen && $portfolio.layersPanelOpen}
175-
<LayoutRow class="workspace-grid-resize-gutter" data-gutter-vertical on:pointerdown={(e) => resizePanel(e)} />
194+
<LayoutRow class="workspace-grid-resize-gutter" data-gutter-vertical on:pointerdown={(e) => resizePanel(e)} on:dblclick={(e) => resetPanelSizes(e)} />
176195
{/if}
177196
{#if $portfolio.layersPanelOpen}
178197
<LayoutRow class="workspace-grid-subdivision" styles={{ "flex-grow": panelSizes["layers"] }} data-subdivision-name="layers">

0 commit comments

Comments
 (0)