Skip to content

Commit e252217

Browse files
refactor: remove collapsible editors and update breakpoint styles. (#113)
1 parent d7809d3 commit e252217

13 files changed

Lines changed: 63 additions & 243 deletions

playwright/helpers/app-test-helpers.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -305,10 +305,8 @@ export const getActiveStylesEditorLineNumber = async (page: Page) => {
305305
.then(text => text.trim())
306306
}
307307

308-
export const getCollapseButton = (
309-
page: Page,
310-
panelName: 'component' | 'styles' | 'preview',
311-
) => page.locator(`#collapse-${panelName}`)
308+
export const getCollapseButton = (page: Page, panelName: 'preview') =>
309+
page.locator(`#collapse-${panelName}`)
312310

313311
export const getToolsButton = (page: Page, panelName: 'component' | 'styles') =>
314312
page.locator(`#tools-${panelName}`)
@@ -564,7 +562,7 @@ export const connectByotWithSingleRepo = async (
564562

565563
export const expectCollapseButtonState = async (
566564
page: Page,
567-
panelName: 'component' | 'styles' | 'preview',
565+
panelName: 'preview',
568566
{
569567
axis,
570568
direction,

playwright/layout-panels.spec.ts

Lines changed: 20 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -162,49 +162,32 @@ test('expanded component and styles can shrink consistently in fixed layout', as
162162
test('panel collapse axis and direction match fixed layout', async ({ page }) => {
163163
await waitForInitialRender(page)
164164
await expect(page.getByRole('main')).toHaveClass(/app-grid--preview-right/)
165+
await expect(page.locator('#collapse-component')).toHaveCount(0)
166+
await expect(page.locator('#collapse-styles')).toHaveCount(0)
165167

166-
await expectCollapseButtonState(page, 'component', {
167-
axis: 'vertical',
168-
direction: 'none',
169-
collapsed: false,
170-
})
171-
await expectCollapseButtonState(page, 'styles', {
172-
axis: 'vertical',
173-
direction: 'none',
174-
collapsed: false,
175-
})
176168
await expectCollapseButtonState(page, 'preview', {
177169
axis: 'horizontal',
178170
direction: 'right',
179171
collapsed: false,
180172
})
181173
})
182174

183-
test('prevents collapsing all three panels at once', async ({ page }) => {
175+
test('preview panel can collapse and expand', async ({ page }) => {
184176
await waitForInitialRender(page)
185-
const componentPanel = page.locator('#editor-panel-component')
186-
const stylesPanel = page.locator('#editor-panel-styles')
187-
188-
await getCollapseButton(page, 'component').click()
189-
await page.getByRole('button', { name: 'Open tab app.css' }).click()
190-
await getCollapseButton(page, 'styles').click()
177+
const previewPanel = page.locator('#preview-panel')
191178

192-
await expect(componentPanel).toHaveClass(/panel--collapsed-vertical/)
193-
await expect(stylesPanel).toHaveClass(/panel--collapsed-vertical/)
179+
await getCollapseButton(page, 'preview').click()
180+
await expect(previewPanel).toHaveClass(/panel--collapsed-horizontal/)
194181

195182
await expectCollapseButtonState(page, 'preview', {
196183
axis: 'horizontal',
197184
direction: 'right',
198-
collapsed: false,
199-
disabled: true,
185+
collapsed: true,
186+
disabled: false,
200187
})
201-
await expect(getCollapseButton(page, 'preview')).toHaveAttribute(
202-
'title',
203-
'At least one panel must remain expanded.',
204-
)
205188

206-
await page.getByRole('button', { name: 'Open tab App.tsx' }).click()
207-
await getCollapseButton(page, 'component').click()
189+
await getCollapseButton(page, 'preview').click()
190+
await expect(previewPanel).not.toHaveClass(/panel--collapsed-horizontal/)
208191
await expectCollapseButtonState(page, 'preview', {
209192
axis: 'horizontal',
210193
direction: 'right',
@@ -215,25 +198,25 @@ test('prevents collapsing all three panels at once', async ({ page }) => {
215198

216199
test('does not persist panel collapse state across reload', async ({ page }) => {
217200
await waitForInitialRender(page)
218-
const componentPanel = page.locator('#editor-panel-component')
201+
const previewPanel = page.locator('#preview-panel')
219202

220-
await getCollapseButton(page, 'component').click()
221-
await expect(componentPanel).toHaveClass(/panel--collapsed-vertical/)
222-
await expectCollapseButtonState(page, 'component', {
223-
axis: 'vertical',
224-
direction: 'none',
203+
await getCollapseButton(page, 'preview').click()
204+
await expect(previewPanel).toHaveClass(/panel--collapsed-horizontal/)
205+
await expectCollapseButtonState(page, 'preview', {
206+
axis: 'horizontal',
207+
direction: 'right',
225208
collapsed: true,
226209
})
227210

228211
await page.reload()
229212
await waitForInitialRender(page)
230213

231-
await expect(componentPanel).not.toHaveClass(
214+
await expect(previewPanel).not.toHaveClass(
232215
/panel--collapsed-horizontal|panel--collapsed-vertical/,
233216
)
234-
await expectCollapseButtonState(page, 'component', {
235-
axis: 'vertical',
236-
direction: 'none',
217+
await expectCollapseButtonState(page, 'preview', {
218+
axis: 'horizontal',
219+
direction: 'right',
237220
collapsed: false,
238221
})
239222
})

playwright/workspace-tabs.spec.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -414,8 +414,6 @@ test('active tab remains source of truth for visible editor panel', async ({ pag
414414
).toHaveAttribute('aria-current', 'true')
415415
await expect(componentPanel).not.toHaveAttribute('hidden', '')
416416
await expect(stylesPanel).toHaveAttribute('hidden', '')
417-
418-
await page.locator('#collapse-component').click()
419417
await page.getByRole('button', { name: 'Open tab app.css' }).click()
420418

421419
await expect(page.getByRole('button', { name: 'Open tab app.css' })).toHaveAttribute(

src/app.js

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -379,8 +379,6 @@ const {
379379
compactAiControlsUi,
380380
appGrid,
381381
previewPanel,
382-
componentEditorPanel,
383-
stylesEditorPanel,
384382
panelCollapseButtons,
385383
editorKinds,
386384
editorPanelsByKind,

src/index.html

Lines changed: 0 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -383,23 +383,6 @@ <h2 id="editor-header-component" class="panel-header__title-with-status">
383383
</svg>
384384
</h2>
385385
<div class="controls controls--quick-actions panel-header-quick-actions">
386-
<button
387-
class="panel-collapse-toggle"
388-
id="collapse-component"
389-
type="button"
390-
data-panel-collapse="component"
391-
data-collapse-axis="vertical"
392-
data-collapsed="false"
393-
aria-expanded="true"
394-
aria-controls="editor-panel-content-component"
395-
aria-label="Collapse editor panel"
396-
title="Collapse editor panel"
397-
>
398-
<svg viewBox="0 0 24 24" aria-hidden="true">
399-
<path d="m6 9 6 6 6-6"></path>
400-
</svg>
401-
<span class="panel-collapse-toggle__label">Collapse</span>
402-
</button>
403386
<button
404387
class="icon-button editor-tools-toggle"
405388
id="tools-component"
@@ -515,23 +498,6 @@ <h2 id="editor-header-styles" class="panel-header__title-with-status">
515498
</svg>
516499
</h2>
517500
<div class="controls controls--quick-actions panel-header-quick-actions">
518-
<button
519-
class="panel-collapse-toggle"
520-
id="collapse-styles"
521-
type="button"
522-
data-panel-collapse="styles"
523-
data-collapse-axis="vertical"
524-
data-collapsed="false"
525-
aria-expanded="true"
526-
aria-controls="editor-panel-content-styles"
527-
aria-label="Collapse editor panel"
528-
title="Collapse editor panel"
529-
>
530-
<svg viewBox="0 0 24 24" aria-hidden="true">
531-
<path d="m6 9 6 6 6-6"></path>
532-
</svg>
533-
<span class="panel-collapse-toggle__label">Collapse</span>
534-
</button>
535501
<button
536502
class="icon-button editor-tools-toggle"
537503
id="tools-styles"

src/modules/app-core/layout-diagnostics-setup.js

Lines changed: 7 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ const createLayoutDiagnosticsSetup = ({
22
compactAiControlsUi,
33
appGrid,
44
previewPanel,
5-
componentEditorPanel,
6-
stylesEditorPanel,
75
panelCollapseButtons,
86
editorKinds,
97
editorPanelsByKind,
@@ -20,19 +18,15 @@ const createLayoutDiagnosticsSetup = ({
2018
cssEditor,
2119
}) => {
2220
const getPanelCollapseAxis = panelName => {
23-
if (compactAiControlsUi.isCompactViewport()) {
21+
if (panelName !== 'preview') {
2422
return 'vertical'
2523
}
2624

27-
if (panelName === 'preview') {
28-
return 'horizontal'
29-
}
30-
31-
if (panelName === 'component' || panelName === 'styles') {
25+
if (compactAiControlsUi.isCompactViewport()) {
3226
return 'vertical'
3327
}
3428

35-
return 'vertical'
29+
return 'horizontal'
3630
}
3731

3832
const getPanelCollapseDirection = panelName => {
@@ -45,20 +39,10 @@ const createLayoutDiagnosticsSetup = ({
4539
return 'right'
4640
}
4741

48-
if (panelName === 'component') {
49-
return 'left'
50-
}
51-
52-
if (panelName === 'styles') {
53-
return 'right'
54-
}
55-
5642
return 'right'
5743
}
5844

5945
const panelCollapseState = {
60-
component: false,
61-
styles: false,
6246
preview: false,
6347
}
6448

@@ -91,19 +75,7 @@ const createLayoutDiagnosticsSetup = ({
9175
}
9276
}
9377

94-
const normalizePanelCollapseState = () => {
95-
const collapsedPanels = Object.entries(panelCollapseState)
96-
.filter(([, isCollapsed]) => isCollapsed)
97-
.map(([panelName]) => panelName)
98-
99-
if (collapsedPanels.length === Object.keys(panelCollapseState).length) {
100-
panelCollapseState.preview = false
101-
}
102-
}
103-
10478
const syncPanelCollapseButtons = () => {
105-
const collapsedCount = Object.values(panelCollapseState).filter(Boolean).length
106-
10779
for (const button of panelCollapseButtons) {
10880
const panelName = button.dataset.panelCollapse
10981
if (!panelName || !Object.hasOwn(panelCollapseState, panelName)) {
@@ -114,57 +86,26 @@ const createLayoutDiagnosticsSetup = ({
11486
const direction = getPanelCollapseDirection(panelName)
11587
const isCollapsed = panelCollapseState[panelName] === true
11688
const panelTitle = `${panelName.charAt(0).toUpperCase()}${panelName.slice(1)}`
117-
const canCollapse = isCollapsed || collapsedCount < 2
11889

11990
button.dataset.collapseAxis = axis
12091
button.dataset.collapseDirection = direction
12192
button.dataset.collapsed = isCollapsed ? 'true' : 'false'
12293
button.setAttribute('aria-expanded', isCollapsed ? 'false' : 'true')
123-
button.disabled = !canCollapse
124-
button.setAttribute('aria-disabled', canCollapse ? 'false' : 'true')
94+
button.disabled = false
95+
button.setAttribute('aria-disabled', 'false')
12596
button.setAttribute(
12697
'aria-label',
12798
`${isCollapsed ? 'Expand' : 'Collapse'} ${panelTitle.toLowerCase()} panel`,
12899
)
129100
button.setAttribute(
130101
'title',
131-
canCollapse
132-
? `${isCollapsed ? 'Expand' : 'Collapse'} ${panelTitle.toLowerCase()} panel`
133-
: 'At least one panel must remain expanded.',
102+
`${isCollapsed ? 'Expand' : 'Collapse'} ${panelTitle.toLowerCase()} panel`,
134103
)
135104
}
136105
}
137106

138107
const applyPanelCollapseState = () => {
139-
normalizePanelCollapseState()
140-
141108
const previewAxis = getPanelCollapseAxis('preview')
142-
const componentAxis = getPanelCollapseAxis('component')
143-
const stylesAxis = getPanelCollapseAxis('styles')
144-
145-
if (componentEditorPanel) {
146-
const isCollapsed = panelCollapseState.component
147-
componentEditorPanel.classList.toggle(
148-
'panel--collapsed-vertical',
149-
isCollapsed && componentAxis === 'vertical',
150-
)
151-
componentEditorPanel.classList.toggle(
152-
'panel--collapsed-horizontal',
153-
isCollapsed && componentAxis === 'horizontal',
154-
)
155-
}
156-
157-
if (stylesEditorPanel) {
158-
const isCollapsed = panelCollapseState.styles
159-
stylesEditorPanel.classList.toggle(
160-
'panel--collapsed-vertical',
161-
isCollapsed && stylesAxis === 'vertical',
162-
)
163-
stylesEditorPanel.classList.toggle(
164-
'panel--collapsed-horizontal',
165-
isCollapsed && stylesAxis === 'horizontal',
166-
)
167-
}
168109

169110
if (previewPanel) {
170111
const isCollapsed = panelCollapseState.preview
@@ -183,25 +124,12 @@ const createLayoutDiagnosticsSetup = ({
183124
panelCollapseState.preview && previewAxis === 'horizontal',
184125
)
185126
appGrid.classList.toggle('app-grid--preview-collapsed', panelCollapseState.preview)
186-
appGrid.classList.toggle(
187-
'app-grid--component-collapsed',
188-
panelCollapseState.component,
189-
)
190-
appGrid.classList.toggle('app-grid--styles-collapsed', panelCollapseState.styles)
191-
appGrid.classList.toggle(
192-
'app-grid--component-collapsed-horizontal',
193-
panelCollapseState.component && componentAxis === 'horizontal',
194-
)
195-
appGrid.classList.toggle(
196-
'app-grid--styles-collapsed-horizontal',
197-
panelCollapseState.styles && stylesAxis === 'horizontal',
198-
)
199127

200128
syncPanelCollapseButtons()
201129
}
202130

203131
const togglePanelCollapse = panelName => {
204-
if (!Object.hasOwn(panelCollapseState, panelName)) {
132+
if (panelName !== 'preview') {
205133
return
206134
}
207135

src/styles/ai-controls.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1029,7 +1029,7 @@
10291029
accent-color: var(--accent);
10301030
}
10311031

1032-
@media (max-width: 1090px) {
1032+
@media (width <= 1090px) {
10331033
.app-grid-layout-controls {
10341034
flex-wrap: nowrap;
10351035
}
@@ -1045,7 +1045,7 @@
10451045
}
10461046
}
10471047

1048-
@media (max-width: 900px) {
1048+
@media (width <= 900px) {
10491049
.app-grid-layout-controls {
10501050
flex-wrap: nowrap;
10511051
}

src/styles/base.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ body {
200200
color: var(--shell-text);
201201
}
202202

203-
@media (max-width: 900px) {
203+
@media (width <= 900px) {
204204
body {
205205
height: auto;
206206
min-height: 100dvh;

src/styles/diagnostics.css

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@
217217
}
218218
}
219219

220-
@media (max-width: 900px) {
220+
@media (width <= 900px) {
221221
.diagnostics-drawer {
222222
top: auto;
223223
right: 24px;

src/styles/dialogs-overlays.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
outline-offset: 1px;
8888
}
8989

90-
@media (max-width: 900px) {
90+
@media (width <= 900px) {
9191
.panel-header-main-actions .controls,
9292
.controls--actions {
9393
justify-content: flex-start;
@@ -128,7 +128,7 @@
128128
transform: translateY(0);
129129
}
130130

131-
@media (max-width: 900px) {
131+
@media (width <= 900px) {
132132
.app-toast {
133133
left: 12px;
134134
right: 12px;

0 commit comments

Comments
 (0)