"use client"; import clsx from "clsx"; import type { CSSProperties } from "react"; import { memo, useState } from "react"; import FileIcon from "../../icons/file"; import FolderIcon from "../../icons/folder-closed"; import LambdaIcon from "../../icons/lambda-rectangle"; import MinusIcon from "../../icons/minus"; import PlusIcon from "../../icons/plus"; import { DepthContextProvider, useDepth } from "./DepthContext"; import styles from "./file-tree.module.css"; export const Tree = ({ children, style }) => { return (
{children}
); }; interface Props { style?: CSSProperties; name: string; } interface FolderProps extends Props { open?: boolean; defaultOpen?: boolean; // TODO onToggle?: () => void; } export const Folder: React.FC> = memo( ({ children, name, open, style, defaultOpen = false }) => { const depth = useDepth(); const [isOpen, setIsOpen] = useState(defaultOpen); return (
  • setIsOpen((s) => !s)} style={style}> {Array.from(Array(depth)).map((_e, i) => { return ; })} {open || isOpen ? ( ) : ( )} {} {name} {(open || isOpen) &&
      {children}
    }
  • ); }, ); interface FileProps extends Props { active?: boolean; type?: "lambda"; } export const File: React.ComponentType = memo( ({ name, style, active, type }) => { const depth = useDepth(); return (
  • {Array.from(Array(depth)).map((_e, i) => { return ; })} {type === "lambda" ? ( ) : ( )} {name}
  • ); }, );