Two panes — equal split
import { html, renderApp } from 'mates';
import { VerticalSegments } from 'mates-ui';
const App = () => () => html`
<div style="height:300px;width:100%;max-width:40rem;border:1px solid var(--md-color-border);border-radius:var(--md-radius-md);overflow:hidden;">
${VerticalSegments([
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Left pane</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">Drag the divider to resize.</p></div>`,
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Right pane</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">Both panes start at equal widths.</p></div>`,
])}
</div>
`;
renderApp(App, document.getElementById('app'));
Three panes — custom widths
import { html, renderApp } from 'mates';
import { VerticalSegments } from 'mates-ui';
const App = () => () => html`
<div style="height:320px;width:100%;max-width:40rem;border:1px solid var(--md-color-border);border-radius:var(--md-radius-md);overflow:hidden;">
${VerticalSegments([
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Navigation</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">220 px starting width.</p></div>`,
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Editor</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">40% starting width.</p></div>`,
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Preview</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">"auto" — remaining space.</p></div>`,
], { defaultWidths: ["220px", "40%", "auto"] })}
</div>
`;
renderApp(App, document.getElementById('app'));
No handle
import { html, renderApp } from 'mates';
import { VerticalSegments } from 'mates-ui';
const App = () => () => html`
<div style="height:240px;width:100%;max-width:40rem;border:1px solid var(--md-color-border);border-radius:var(--md-radius-md);overflow:hidden;">
${VerticalSegments([
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Left pane</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">No grip dots — plain divider line.</p></div>`,
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Right pane</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">Clean divider, no affordance.</p></div>`,
], { showHandle: false })}
</div>
`;
renderApp(App, document.getElementById('app'));
Minimum pane width
import { html, renderApp } from 'mates';
import { VerticalSegments } from 'mates-ui';
const App = () => () => html`
<div style="height:280px;width:100%;max-width:40rem;border:1px solid var(--md-color-border);border-radius:var(--md-radius-md);overflow:hidden;">
${VerticalSegments([
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Pane A</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">Min 120 px — won't collapse below.</p></div>`,
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Pane B</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">Also clamped at 120 px.</p></div>`,
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Pane C</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">Same floor for every pane.</p></div>`,
], { minPaneWidth: "120px" })}
</div>
`;
renderApp(App, document.getElementById('app'));
Single pane — no divider
import { html, renderApp } from 'mates';
import { VerticalSegments } from 'mates-ui';
const App = () => () => html`
<div style="height:160px;width:100%;max-width:40rem;border:1px solid var(--md-color-border);border-radius:var(--md-radius-md);overflow:hidden;">
${VerticalSegments([
html`<div style="padding:var(--md-space-4);height:100%;box-sizing:border-box;"><p style="margin:0;font-weight:600;font-size:var(--md-text-sm);">Single pane — no separator rendered</p><p style="margin:var(--md-space-2) 0 0;font-size:var(--md-text-sm);color:var(--md-color-text-muted);">One child = plain flex container with no dividers.</p></div>`,
])}
</div>
`;
renderApp(App, document.getElementById('app'));