// ====================== SHARED DATA ====================== const CATEGORIES = [ { id: "escritorio", label: "Materiais de Escritório", short: "DE ESCRITÓRIO", slot: "Foto: material de escritório" }, { id: "limpeza", label: "Produtos de Limpeza", short: "DE LIMPEZA", slot: "Foto: produtos de limpeza" }, { id: "copa", label: "Produtos de Copa", short: "DE COPA", slot: "Foto: café / produtos de copa" }, { id: "descartaveis", label: "Descartáveis", short: "DESCARTÁVEIS", slot: "Foto: copos descartáveis" }, { id: "equipamentos", label: "Equipamentos", short: "EQUIPAMENTOS", slot: "Foto: cadeira / equipamento" }, { id: "papelaria", label: "Papelaria", short: "PAPELARIA", slot: "Foto: caderno / papelaria" }]; const EQUIP_SUB = ["Cadeiras de Escritório", "Mesas e Estações", "Bebedouros", "Ventiladores", "Aspiradores", "Carrinhos de Limpeza"]; // URLs das categorias já publicadas (as demais ainda abrem aviso/Home) const PAGE_URLS = { limpeza: "Produtos de Limpeza.html", escritorio: "Materiais de Escritorio.html", copa: "Copa e Cozinha.html", }; // só as categorias que já têm página publicada aparecem no site const VISIBLE_CATEGORIES = CATEGORIES.filter((c) => PAGE_URLS[c.id]); // ====================== IMAGE PLACEHOLDER ====================== // Striped placeholder with image icon + monospace label, per user request. function ImgSlot({ label = "Imagem", radius = 8, dark = false, style, iconSize = 26, compact = false }) { const fg = dark ? "rgba(255,255,255,.62)" : "#9aa3b5"; const stripe = dark ? "rgba(255,255,255,.05)" : "rgba(22,41,77,.045)"; const base = dark ? "rgba(255,255,255,.04)" : "#eef1f6"; return (
{!compact && {label} }
); } // ====================== JGF LOGO (real brand image) ====================== function Logo({ scale = 1, white = false }) { return ( JGF Distribuidora); } // ====================== TOAST SYSTEM ====================== const ToastCtx = React.createContext(() => {}); function ToastProvider({ children }) { const [toasts, setToasts] = React.useState([]); const push = React.useCallback((msg, kind = "info") => { const id = Math.random().toString(36).slice(2); setToasts((t) => [...t, { id, msg, kind }]); setTimeout(() => setToasts((t) => t.filter((x) => x.id !== id)), 2600); }, []); return ( {children}
{toasts.map((t) =>
{t.msg}
)}
); } const useToast = () => React.useContext(ToastCtx); // ====================== PERSISTENT CART (shared across pages via localStorage) ====================== const CART_KEY = "jgf_cart_v1"; const WHATSAPP_NUMBER = "558173008306"; // <-- número que recebe os pedidos (DDI 55 + DDD 81) function usePersistentCart() { const [cart, setCart] = React.useState(() => { try { return JSON.parse(localStorage.getItem(CART_KEY) || "[]"); } catch (e) { return []; } }); React.useEffect(() => { try { localStorage.setItem(CART_KEY, JSON.stringify(cart)); } catch (e) {} }, [cart]); // keep multiple open tabs / pages in sync React.useEffect(() => { const onStorage = (e) => { if (e.key === CART_KEY) { try { setCart(JSON.parse(e.newValue || "[]")); } catch (err) {} } }; window.addEventListener("storage", onStorage); return () => window.removeEventListener("storage", onStorage); }, []); return [cart, setCart]; } Object.assign(window, { CATEGORIES, VISIBLE_CATEGORIES, EQUIP_SUB, PAGE_URLS, ImgSlot, Logo, ToastProvider, useToast, usePersistentCart, WHATSAPP_NUMBER });