// wf-kit.jsx — Wiggleverse ecomm wireframe primitives. // Mid-fi: real Wiggleverse tokens + composed DS components (Button, Soul, Eyebrow, Tag, Notice). // Everything exported to window at the bottom so sibling babel scripts can use it. const DS = window.WiggleverseDesignSystem_94cd80; const { Button, Soul, Eyebrow, Tag, Notice } = DS; // ---- token shorthands (resolved from the linked token stylesheets) ------- const T = { sky: 'var(--wv-midnight)', raised: 'var(--wv-indigo)', raisedHi: 'var(--wv-indigo-2)', night: 'var(--wv-night)', star: 'var(--wv-starlight)', soft: 'var(--wv-starlight-78)', mute: 'var(--wv-starlight-60)', lilac: 'var(--wv-lilac)', gold: 'var(--wv-gold)', goldInk: 'var(--wv-gold-ink)', hair: 'var(--border-soft)', hairCard: 'var(--border-card)', disp: 'var(--wv-font-display)', body: 'var(--wv-font-body)', }; // faint scattered starfield — the brand's one decorative texture (off-center, low alpha) const STARFIELD = 'radial-gradient(1.4px 1.4px at 18% 24%, rgba(237,234,255,.5), transparent),' + 'radial-gradient(1.4px 1.4px at 73% 16%, rgba(237,234,255,.35), transparent),' + 'radial-gradient(1.2px 1.2px at 88% 52%, rgba(155,140,255,.45), transparent),' + 'radial-gradient(1.6px 1.6px at 32% 70%, rgba(237,234,255,.4), transparent),' + 'radial-gradient(1.2px 1.2px at 58% 84%, rgba(237,234,255,.3), transparent),' + 'radial-gradient(1.3px 1.3px at 8% 58%, rgba(155,140,255,.4), transparent),' + 'radial-gradient(1.1px 1.1px at 46% 40%, rgba(237,234,255,.28), transparent)'; // ── Screen — fills the artboard, the midnight ground, column flow ────────── function Screen({ children, starfield = false, bg = T.sky, style = {} }) { return (
{children}
); } // ── Wordmark — the mark tile + "ecomm" (Space Grotesk) ───────────────────── function Wordmark({ size = 26, muted = false }) { return ( ecomm ); } // ── TopBar — the chrome shared by every authenticated surface ────────────── function TopBar({ left, right, pad = '0 32px', height = 64 }) { return (
{left}
{right}
); } // account chip used at top-right of authenticated surfaces function AccountChip({ email = 'mara@studiofern.com', menu = false }) { return (
{email} {menu && (
{email}
Sign out
)}
); } function MenuRow({ children, strong }) { return
{children}
; } // ── Field — label + input + helper/error. Real token styling. ────────────── function Field({ label, placeholder, value, helper, error, focus = false, optional = false }) { return (
{value || placeholder} {focus && !value && }
{error && {error}} {helper && !error && {helper}}
); } function FieldNote({ children, tone }) { return {tone === 'attn' && } {children} ; } // ── CodeField — one-time-code entry, 6 cells ─────────────────────────────── function CodeField({ filled = 0, error = false }) { const cells = [0, 1, 2, 3, 4, 5]; const vals = ['4', '1', '9', '', '', '']; return (
{cells.map((i) => { const active = i === filled; const has = i < filled; return (
{has ? vals[i] : (active ? : '')}
); })}
); } // ── Banner — inline status. attn = gold (no red in palette); info = lilac ── function Banner({ children, tone = 'attn', title }) { const attn = tone === 'attn'; return (
{title &&
{title}
} {children}
); } // ── AuthCard — the centered raised surface for Direction A ───────────────── function AuthCard({ children, width = 420 }) { return (
{children}
); } // ── BrandRail — the persistent identity panel for Direction B ────────────── function BrandRail({ compact = false, soul = 'Your storefront is yours.' }) { return ( ); } // ── Footer — minimal project identity + the standing dedication ──────────── function Footer({ onDark = true }) { return (
ecomm · a Wiggleverse line Privacy · Open Core
); } // ── Section wrapper used in the canvas to title state stacks ─────────────── function StateBlock({ label, note, children, h }) { return (
{label} {note && {note}}
{children}
); } // ── Honest-empty admin body — the heart of PUC-8 ─────────────────────────── function EmptyAdmin({ storefront = 'Studio Fern', compact = false }) { return (
Your storefront

{storefront}

There's nothing to manage yet. Catalog, orders, and settings will appear here as ecomm grows.

); } Object.assign(window, { WF_T: T, WF_STARFIELD: STARFIELD, Screen, Wordmark, TopBar, AccountChip, MenuRow, Field, FieldNote, CodeField, Banner, AuthCard, BrandRail, Footer, StateBlock, EmptyAdmin, WF_DS: DS, });