// ============================================================ // Shared primitives — icons, logo lockup, status badges // Lucide-style stroke icons (24px grid, currentColor) // ============================================================ const Icon = ({ d, size = 22, sw = 1.9, fill = "none", children, style }) => ( {d ? : children} ); const Icons = { sun: (p) => , moon: (p) => , search: (p) => , chevDown:(p) => , camera: (p) => , upload: (p) => , pin: (p) => , check: (p) => , x: (p) => , refresh:(p) => , edit: (p) => , eye: (p) => , bell: (p) => , filter: (p) => , send: (p) => , arrowR: (p) => , layers: (p) => , user: (p) => , trash: (p) => , facebook:(p) => , xLogo: (p) => , instagram:(p) => , youtube:(p) => , globe: (p) => , home: (p) => , plus: (p) => , news: (p) => , chevR: (p) => , bookmark:(p) => , sliders:(p) => , help: (p) => , }; // ---------- Nambikkai logo lockup ---------- function Logo({ height = 44, stacked = false, sub = true }) { return (
Nambikkai {sub && (
Ground News v1.0 · ground intelligence
)}
); } // ---------- Status badge ---------- const STATUS = { DRAFT: { c: "var(--st-draft)", fill: false }, "UNDER REVIEW": { c: "var(--st-review)", fill: true }, APPROVED: { c: "var(--st-approve)", fill: true }, HELD: { c: "var(--st-held)", fill: true }, REJECTED: { c: "var(--red)", fill: true }, PENDING: { c: "var(--st-review)", fill: false }, FLAGGED: { c: "var(--red)", fill: false }, "CHANGES REQ.": { c: "var(--st-review)", fill: true }, }; function Badge({ status, size = "md" }) { const s = STATUS[status] || STATUS.DRAFT; const pad = size === "sm" ? "2px 9px" : "2px 10px"; const fs = size === "sm" ? 11.5 : 12; return ( {status} ); } // ---------- Category pill ---------- function Pill({ children, active, onClick, mono = true }) { return ( ); } Object.assign(window, { Icon, Icons, Logo, Badge, Pill, STATUS });