// Shared header, footer, marquee, gorilla-mark SVG const useIsMobile = (bp = 768) => { const [mob, setMob] = React.useState(window.innerWidth < bp); React.useEffect(() => { const fn = () => setMob(window.innerWidth < bp); window.addEventListener('resize', fn, { passive: true }); return () => window.removeEventListener('resize', fn); }, [bp]); return mob; }; const Mark = ({ size = 44 }) => (
KING KONG STICKERS
); const TopBar = () => (
{[...Array(2)].map((_,i)=>(
β˜… Free shipping on orders over $25 πŸ‡¦πŸ‡Ί Printed in Sydney, Australia ⚑ Free proof ♻️ Waterproof + weather resistant β˜… Trusted by Aussie creators & brands 🚚 Same-day dispatch on weekdays
))}
AUD $
); const navLinks = [ { label:'Shop', page:'shop' }, { label:'Die-Cut', page:'die-cut' }, { label:'Sheets', page:'sheets' }, { label:'Holographic', page:'holo' }, { label:'Glitter', page:'glitter' }, { label:'Mural', page:'mural' }, { label:'Bulk', page:'bulk' }, { label:'Sample Pack', page:'sample' }, ]; const Header = ({ go, cart: _cartProp = 0 }) => { const m = useIsMobile(); const [open, setOpen] = React.useState(false); const [cart, setCart] = React.useState(_cartProp); React.useEffect(() => { fetch('/wp-json/wc/store/v1/cart', { credentials: 'include' }) .then(r => r.ok ? r.json() : null) .then(d => { if (d) setCart(d.items_count || 0); }) .catch(() => {}); }, []); const [q, setQ] = React.useState(''); const runSearch = (val) => { const s = (val || '').toLowerCase().trim(); if (!s) return; const map = [ [['holo','holographic'],'holo'], [['glitter'],'glitter'], [['clear','transparent'],'clear'], [['kiss'],'kiss-cut'], [['sheet'],'sheets'], [['bulk','wholesale','bundle'],'bulk'], [['mural','wall','wallpaper'],'mural'], [['sample'],'sample'], ]; for (const [keys, page] of map) { if (keys.some(k => s.includes(k))) { go(page); return; } } go('shop'); }; if (m) return (
{open && (
setQ(e.target.value)} onKeyDown={e=>{ if(e.key==='Enter'){ runSearch(q); setOpen(false); } }} style={{border:'none',background:'transparent',outline:'none',width:'100%',fontFamily:'inherit',fontSize:16}}/>
)}
); return (
setQ(e.target.value)} onKeyDown={e=>{ if(e.key==='Enter') runSearch(q); }} style={{border:'none',background:'transparent',outline:'none',width:'100%',fontFamily:'inherit',fontSize:14}}/>
); }; const footerCols = [ { h:'Shop', l:[ {label:'Die-cut stickers', page:'die-cut'}, {label:'Sticker sheets', page:'sheets'}, {label:'Holographic', page:'holo'}, {label:'Glitter', page:'glitter'}, {label:'Clear vinyl', page:'clear'}, {label:'Kiss-cut', page:'kiss-cut'}, {label:'Bulk + wholesale', page:'bulk'}, {label:'Sample pack', page:'sample'}, ]}, { h:'Resources', l:[ {label:'Artwork guidelines', page:'artwork-guidelines'},{label:'Templates', page:'templates'}, {label:'Materials', page:'materials-guide'},{label:'Sizing guide', page:'sizing-guide'}, {label:'Sustainability', page:'sustainability'},{label:'Blog', page:'blog'}, ]}, { h:'Support', l:[ {label:'Contact', page:'contact'},{label:'Help center', page:'help-center'}, {label:'Order tracking', page:'order-tracking'},{label:'Returns', page:'returns'}, {label:'Shipping', page:'shipping'}, {label:'Application guide', page:'install-guide'}, ]}, ]; const Footer = ({ go }) => { const m = useIsMobile(); const [subEmail, setSubEmail] = React.useState(''); const [subState, setSubState] = React.useState('idle'); // idle | loading | done | error const handleSubscribe = async (e) => { e.preventDefault(); if (!subEmail || subState === 'loading' || subState === 'done') return; setSubState('loading'); try { const res = await fetch('/wp-json/kk/v1/subscribe', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ email: subEmail }), }); setSubState(res.ok ? 'done' : 'error'); } catch { setSubState('error'); } }; const NewsletterForm = () => subState === 'done' ? (
You're in! Check your inbox for your 10% code.
) : (
setSubEmail(e.target.value)} style={{flex:1,padding:'12px 14px',borderRadius:10,border:`2px solid ${subState==='error'?'#FF4444':'#fff'}`,background:'transparent',color:'#fff',fontFamily:'inherit',fontSize:14}} />
); return ( ); }; const TrustStrip = () => { const m = useIsMobile(); return (
{[ { i:, h:'Aussie Made', s:'Printed + shipped from Sydney' }, { i:, h:'Free shipping $25+', s:'Same-day dispatch weekdays' }, { i:, h:'Free proof', s:'Real designers, not bots' }, { i:, h:'Aussie customer love', s:'Honest reviews from real buyers' }, ].map((t,i)=>(
{t.i}
{t.h}
{t.s}
))}
); }; // ── SEO hook β€” updates , meta description, OG tags & JSON-LD per page ── const useSEO = ({ title, description, schema } = {}) => { React.useEffect(() => { const KK = ' | King Kong Stickers Australia'; const prevTitle = document.title; const prevDesc = document.querySelector('meta[name="description"]')?.content || ''; if (title) { document.title = title + KK; const og = document.querySelector('meta[property="og:title"]'); if (og) og.content = title + KK; } if (description) { const d = document.querySelector('meta[name="description"]'); if (d) d.content = description; const ogd = document.querySelector('meta[property="og:description"]'); if (ogd) ogd.content = description; } let schemaEl = document.getElementById('kk-page-schema'); if (schema) { if (!schemaEl) { schemaEl = document.createElement('script'); schemaEl.id = 'kk-page-schema'; schemaEl.type = 'application/ld+json'; document.head.appendChild(schemaEl); } // Accept single schema object or array of schemas schemaEl.textContent = JSON.stringify(Array.isArray(schema) ? schema : schema); } return () => { document.title = prevTitle; const d = document.querySelector('meta[name="description"]'); if (d) d.content = prevDesc; if (schemaEl) schemaEl.remove(); }; }, [title, description]); }; window.useIsMobile = useIsMobile; window.useSEO = useSEO; window.Mark = Mark; window.Header = Header; window.Footer = Footer; window.TrustStrip = TrustStrip;