"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) && }
);
},
);
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}
);
},
);