mirror of
https://github.com/anomalyco/opencode.git
synced 2026-05-01 02:06:41 +00:00
162 lines
4.3 KiB
TypeScript
162 lines
4.3 KiB
TypeScript
// @ts-nocheck
|
|
import { createSignal } from "solid-js"
|
|
import { createStore } from "solid-js/store"
|
|
import * as mod from "./resize-handle"
|
|
|
|
const docs = `### Overview
|
|
Drag handle for resizing panels or split views.
|
|
|
|
Use alongside resizable panels and split layouts.
|
|
|
|
### API
|
|
- Required: \`direction\`, \`size\`, \`min\`, \`max\`, \`onResize\`.
|
|
- Optional: \`edge\`, \`onCollapse\`, \`collapseThreshold\`.
|
|
|
|
### Variants and states
|
|
- Horizontal and vertical directions.
|
|
|
|
### Behavior
|
|
- Drag updates size and calls \`onResize\` with clamped values.
|
|
|
|
### Accessibility
|
|
- TODO: provide keyboard resizing guidance if needed.
|
|
|
|
### Theming/tokens
|
|
- Uses \`data-component="resize-handle"\` with direction/edge data attributes.
|
|
|
|
`
|
|
|
|
export default {
|
|
title: "UI/ResizeHandle",
|
|
id: "components-resize-handle",
|
|
component: mod.ResizeHandle,
|
|
tags: ["autodocs"],
|
|
parameters: {
|
|
docs: {
|
|
description: {
|
|
component: docs,
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
export const Basic = {
|
|
render: () => {
|
|
const [size, setSize] = createSignal(240)
|
|
return (
|
|
<div style={{ display: "grid", gap: "8px" }}>
|
|
<div style={{ color: "var(--text-weak)", "font-size": "12px" }}>Size: {size()}px</div>
|
|
<div
|
|
style={{
|
|
width: `${size()}px`,
|
|
height: "48px",
|
|
"background-color": "var(--background-stronger)",
|
|
"border-radius": "6px",
|
|
}}
|
|
/>
|
|
<mod.ResizeHandle
|
|
direction="horizontal"
|
|
size={size()}
|
|
min={120}
|
|
max={480}
|
|
onResize={setSize}
|
|
style="height:24px;border:1px dashed color-mix(in oklab, var(--text-base) 20%, transparent)"
|
|
/>
|
|
</div>
|
|
)
|
|
},
|
|
}
|
|
|
|
export const Vertical = {
|
|
render: () => {
|
|
const [size, setSize] = createSignal(180)
|
|
return (
|
|
<div style={{ display: "grid", gap: "8px", width: "220px" }}>
|
|
<div style={{ color: "var(--text-weak)", "font-size": "12px" }}>Size: {size()}px</div>
|
|
<div
|
|
style={{
|
|
height: `${size()}px`,
|
|
"background-color": "var(--background-stronger)",
|
|
"border-radius": "6px",
|
|
}}
|
|
/>
|
|
<mod.ResizeHandle
|
|
direction="vertical"
|
|
size={size()}
|
|
min={120}
|
|
max={320}
|
|
onResize={setSize}
|
|
style="width:24px;border:1px dashed color-mix(in oklab, var(--text-base) 20%, transparent)"
|
|
/>
|
|
</div>
|
|
)
|
|
},
|
|
}
|
|
|
|
export const Collapse = {
|
|
render: () => {
|
|
const [state, setState] = createStore({
|
|
size: 200,
|
|
collapsed: false,
|
|
})
|
|
const size = () => state.size
|
|
const collapsed = () => state.collapsed
|
|
return (
|
|
<div style={{ display: "grid", gap: "8px" }}>
|
|
<div style={{ color: "var(--text-weak)", "font-size": "12px" }}>
|
|
{collapsed() ? "Collapsed" : `Size: ${size()}px`}
|
|
</div>
|
|
<div
|
|
style={{
|
|
width: `${collapsed() ? 0 : size()}px`,
|
|
height: "48px",
|
|
"background-color": "var(--background-stronger)",
|
|
"border-radius": "6px",
|
|
}}
|
|
/>
|
|
<mod.ResizeHandle
|
|
direction="horizontal"
|
|
size={size()}
|
|
min={80}
|
|
max={360}
|
|
collapseThreshold={100}
|
|
onResize={(next) => {
|
|
setState("collapsed", false)
|
|
setState("size", next)
|
|
}}
|
|
onCollapse={() => setState("collapsed", true)}
|
|
style="height:24px;border:1px dashed color-mix(in oklab, var(--text-base) 20%, transparent)"
|
|
/>
|
|
</div>
|
|
)
|
|
},
|
|
}
|
|
|
|
export const EdgeStart = {
|
|
render: () => {
|
|
const [size, setSize] = createSignal(240)
|
|
return (
|
|
<div style={{ display: "grid", gap: "8px" }}>
|
|
<div style={{ color: "var(--text-weak)", "font-size": "12px" }}>Size: {size()}px</div>
|
|
<div
|
|
style={{
|
|
width: `${size()}px`,
|
|
height: "48px",
|
|
"background-color": "var(--background-stronger)",
|
|
"border-radius": "6px",
|
|
}}
|
|
/>
|
|
<mod.ResizeHandle
|
|
direction="horizontal"
|
|
edge="start"
|
|
size={size()}
|
|
min={120}
|
|
max={480}
|
|
onResize={setSize}
|
|
style="height:24px;border:1px dashed color-mix(in oklab, var(--text-base) 20%, transparent)"
|
|
/>
|
|
</div>
|
|
)
|
|
},
|
|
}
|