// Shared Mekor UI primitives (React globals from UMD). Loaded before each page's inline Babel script. function LogoMark({ size = 40 }) { const s = size; const cx = s / 2; const cy = s / 2; const r0 = s * 0.42; const n = s * 0.072; const x1 = cx - s * 0.22; const y1 = cy + s * 0.2; const x2 = cx + s * 0.24; const y2 = cy + s * 0.06; const x3 = cx; const y3 = cy - s * 0.26; const sw = Math.max(1.5, s * 0.045); return ( ); } const SearchInput = React.forwardRef(function SearchInput({ value, onChange, onKeyDown, onSearch, loading, compact, autoFocus }, ref) { return (
{ e.currentTarget.style.borderColor = 'var(--teal)'; e.currentTarget.style.boxShadow = '0 0 0 3px rgba(29,115,121,0.12), var(--shadow-md)'; }} onBlurCapture={e => { e.currentTarget.style.borderColor = 'var(--border-mid)'; e.currentTarget.style.boxShadow = compact ? 'var(--shadow-sm)' : 'var(--shadow-md)'; }}>
onChange(e.target.value)} onKeyDown={onKeyDown} placeholder="Search…" style={{ flex: 1, border: 'none', outline: 'none', background: 'transparent', fontFamily: "'DM Sans', sans-serif", fontSize: compact ? 14 : 15, color: 'var(--ink)', padding: compact ? '10px 0' : '16px 0', letterSpacing: '-0.01em', }} /> {value && ( )}
); }); function LoadingDots() { return (
{[0,1,2].map(i => (
))}
); } function PrimaryButton({ children, onClick, disabled, loading, type = 'button', style: extra }) { const off = disabled || loading; return ( ); } function SecondaryButton({ children, onClick, disabled, loading, type = 'button', style: extra }) { const off = disabled || loading; return ( ); } window.MekorUI = { LogoMark, LoadingDots, SearchInput, PrimaryButton, SecondaryButton };