import type { ChakraProps } from '@chakra-ui/react'; import { Accordion, AccordionButton, AccordionIcon, AccordionItem, AccordionPanel, Icon, chakra, useColorModeValue } from '@chakra-ui/react'; import React from 'react'; import type { FileTree } from './types'; import iconFile from './icons/file.svg'; import iconFolderOpen from './icons/folder-open.svg'; import iconFolder from './icons/folder.svg'; import iconSolidity from './icons/solidity.svg'; interface Props { tree: FileTree; level?: number; isCollapsed?: boolean; onItemClick: (event: React.MouseEvent) => void; } const CodeEditorFileTree = ({ tree, level = 0, onItemClick, isCollapsed }: Props) => { const itemProps: ChakraProps = { borderWidth: '0px', cursor: 'pointer', lineHeight: '22px', _last: { borderBottomWidth: '0px', }, }; const rowHoverBgColor = useColorModeValue('blackAlpha.200', 'whiteAlpha.200'); return ( index) } reduceMotion> { tree.map((leaf, index) => { const leafName = { leaf.name }; if ('children' in leaf) { return ( { ({ isExpanded }) => ( <> { leafName } ) } ); } const icon = /.sol|.yul|.vy$/.test(leaf.name) ? iconSolidity : iconFile; return ( { leafName } ); }) } ); }; export default React.memo(CodeEditorFileTree);