diff options
| author | David Hill <[email protected]> | 2026-01-26 18:57:26 +0000 |
|---|---|---|
| committer | David Hill <[email protected]> | 2026-01-26 19:47:58 +0000 |
| commit | 010ed55590534feaff2094145597154d79da3324 (patch) | |
| tree | 59a6b647e4f438d440dcfe0e402896d29449c852 | |
| parent | 2be45980114dfcd7aa1c455df850b25369eb7f12 (diff) | |
| download | opencode-010ed55590534feaff2094145597154d79da3324.tar.gz opencode-010ed55590534feaff2094145597154d79da3324.zip | |
fix(app): dim non-deep filetree guide lines
| -rw-r--r-- | packages/app/src/components/file-tree.tsx | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/packages/app/src/components/file-tree.tsx b/packages/app/src/components/file-tree.tsx index 5cc02ee09..83a39a16c 100644 --- a/packages/app/src/components/file-tree.tsx +++ b/packages/app/src/components/file-tree.tsx @@ -33,6 +33,19 @@ export default function FileTree(props: { const draggable = () => props.draggable ?? true const tooltip = () => props.tooltip ?? true + const maxOpen = (dir: string, lvl: number): number => { + const expanded = file.tree.state(dir)?.expanded ?? false + if (!expanded) return -1 + + const nodes = file.tree.children(dir) + const child = nodes.reduce((max, node) => { + if (node.type !== "directory") return max + return Math.max(max, maxOpen(node.path, lvl + 1)) + }, -1) + + return Math.max(lvl, child) + } + const filter = createMemo(() => { const allowed = props.allowed if (!allowed) return @@ -152,6 +165,7 @@ export default function FileTree(props: { <For each={nodes()}> {(node) => { const expanded = () => file.tree.state(node.path)?.expanded ?? false + const deep = createMemo(() => (node.type === "directory" ? maxOpen(node.path, level) : -1)) const Wrapper = (p: ParentProps) => { if (!tooltip()) return p.children return ( @@ -181,7 +195,15 @@ export default function FileTree(props: { </Node> </Wrapper> </Collapsible.Trigger> - <Collapsible.Content class="mt-0.5"> + <Collapsible.Content class="relative pt-0.5"> + <div + classList={{ + "absolute top-0 bottom-0 w-px pointer-events-none bg-border-weak-base": true, + "opacity-100": expanded() && deep() === level, + "opacity-50": !(expanded() && deep() === level), + }} + style={`left: ${Math.max(0, 8 + level * 12 - 4) + 8}px`} + /> <FileTree path={node.path} level={level + 1} |
