import { motion } from "framer-motion"; import { useTree } from "../../hooks"; import { treeTemplates } from "../../constants"; import { useAppSelector } from "../../store/hook"; import { theme_state } from "../../store/features/themeSlice"; import { compiler_state } from "../../store/features/compilerSlice"; import { TemplateSelectionSkeleton } from "../Skeleton/TemplateSelectionSkeleton"; import { modalVariant } from "./config"; const TemplateModal = () => { const { theme } = useAppSelector(theme_state); const { esbuildStatus } = useAppSelector(compiler_state); const { setTree } = useTree(); let arr = []; for (const item of Object.entries(treeTemplates)) { arr.push(item); } const templates = arr.map((template, key) => ( <button key={key} name={template[1].name} onClick={() => setTree(template[1])} className="p-2 rounded-sm" > <div className="flex pointer-events-none"> <img alt={template[1].name} src={template[1].iconSrc} className="h-9 w-9 rounded-sm" /> <div className="flex flex-col items-start justify-start pl-4"> <div>{template[1].name}</div> <div className="text-xs text-gray-400">{template[1].description}</div> </div> </div> </button> )); return ( <motion.div className="sm:mt-44 mx-auto h-full sm:h-auto sm:w-8/12 lg:w-6/12 sm:pb-20 sm:rounded-xl overflow-hidden glassmorphism" variants={modalVariant} initial="initial" animate="animate" exit="exit" transition={{ ease: "easeOut", duration: 0.3 }} onClick={(e) => e.stopPropagation()} > <div style={{ backgroundColor: theme.foreground }} className="border-b border-black h-10 flex items-center px-7" > <h1 className="text-xl">Templates</h1> </div> <div className="pt-6 px-7 flex flex-wrap gap-x-14 gap-y-8"> {esbuildStatus.isReady ? templates : <TemplateSelectionSkeleton />} </div> </motion.div> ); }; export default TemplateModal;