import type {Signal} from '@preact/signals'; import {Collapse, Toggle} from '@revideo/ui'; import {clsx} from 'clsx'; import type {ComponentChildren, JSX} from 'preact'; import type {Ref} from 'preact/hooks'; import styles from './index.module.scss'; const DEPTH_VAR = '--depth'; interface TreeElementProps extends Omit, 'label' | 'icon'> { icon?: ComponentChildren; label: ComponentChildren; children?: ComponentChildren; selected?: boolean; open: Signal; depth?: number; forwardRef?: Ref; } export function TreeElement({ label, children, selected, depth = 0, open, icon, forwardRef, ...props }: TreeElementProps) { const hasChildren = !!children; return ( <>
{ if (hasChildren) { open.value = !open.value; } }} {...props} style={{[DEPTH_VAR]: `${depth}`}} > {hasChildren && ( { open.value = value; }} onDblClick={e => { e.stopPropagation(); }} /> )} {icon} {label}
{hasChildren && ( {children} )} ); }