#!/usr/bin/env bash set -euo pipefail echo "[1/10] Creating Templates Workspace..." mkdir -p services/templates mkdir -p hooks mkdir -p components/templates echo "[2/10] Installing..." npm install cat > services/templates/client.js <<'EOC' import api from "../api"; const templates={ list:()=>api.get("/api/templates"), categories:()=>api.get("/api/templates/categories"), featured:()=>api.get("/api/templates/featured"), load:(id)=>api.get(`/api/templates/${id}`), create:(payload)=>api.post("/api/templates",payload), update:(id,payload)=>api.put(`/api/templates/${id}`,payload), remove:(id)=>api.delete(`/api/templates/${id}`), duplicate:(id)=>api.post(`/api/templates/${id}/duplicate`), publish:(id)=>api.post(`/api/templates/${id}/publish`) }; export default templates; EOC cat > hooks/useTemplates.js <<'EOC' "use client"; import {useState} from "react"; import templates from "../services/templates/client"; export default function useTemplates(){ const [loading,setLoading]=useState(false); async function exec(fn,...args){ setLoading(true); try{ const {data}=await fn(...args); return data; }finally{ setLoading(false); } } return{ loading, list:(...a)=>exec(templates.list,...a), categories:(...a)=>exec(templates.categories,...a), featured:(...a)=>exec(templates.featured,...a), load:(...a)=>exec(templates.load,...a), create:(...a)=>exec(templates.create,...a), update:(...a)=>exec(templates.update,...a), remove:(...a)=>exec(templates.remove,...a), duplicate:(...a)=>exec(templates.duplicate,...a), publish:(...a)=>exec(templates.publish,...a) }; } EOC cat > components/templates/TemplatesWorkspace.jsx <<'EOC' "use client"; import useTemplates from "../../hooks/useTemplates"; export default function TemplatesWorkspace(){ const {loading}=useTemplates(); return(