// kbpkg UI primitives — mirror the kBenestad design-system components using the // real .kb-* classes from components.css (linked via styles.css). Self-contained // so the kit renders anywhere, not only inside the Design System tab. const { useState } = React; const ICONS = { search: 'M21 21l-4.3-4.3M11 19a8 8 0 1 0 0-16 8 8 0 0 0 0 16Z', download: 'M12 3v12m0 0 4-4m-4 4-4-4M5 21h14', copy: 'M9 9h10v10H9zM5 15H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v1', check: 'M20 6 9 17l-5-5', box: 'M21 8v8a2 2 0 0 1-1 1.7l-7 4a2 2 0 0 1-2 0l-7-4A2 2 0 0 1 3 16V8a2 2 0 0 1 1-1.7l7-4a2 2 0 0 1 2 0l7 4A2 2 0 0 1 21 8ZM3.3 7 12 12l8.7-5M12 22V12', branch: 'M6 3v12M18 9a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM6 21a3 3 0 1 0 0-6 3 3 0 0 0 0 6ZM18 9a9 9 0 0 1-9 9', clock: 'M12 7v5l3 2M12 21a9 9 0 1 0 0-18 9 9 0 0 0 0 18Z', terminal: 'm4 17 6-6-6-6M12 19h8', chevronR: 'm9 6 6 6-6 6', external: 'M15 3h6v6M10 14 21 3M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6', scale: 'M12 3v18M3 7h18M7 7l-3 7a3 3 0 0 0 6 0L7 7Zm10 0-3 7a3 3 0 0 0 6 0l-3-7ZM5 21h14', drive: 'M22 12H2M5.5 6h13l3 6v6a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-6l3.5-6ZM6 16h.01M10 16h.01', layers: 'm12 2 9 5-9 5-9-5 9-5ZM3 12l9 5 9-5M3 17l9 5 9-5', user: 'M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2M12 11a4 4 0 1 0 0-8 4 4 0 0 0 0 8Z', book: 'M4 19.5A2.5 2.5 0 0 1 6.5 17H20M4 19.5A2.5 2.5 0 0 0 6.5 22H20V2H6.5A2.5 2.5 0 0 0 4 4.5v15Z', plus: 'M12 5v14M5 12h14', }; function Icon({ name, size = 16, strokeWidth = 2, style }) { return ( ); } function Button({ variant = 'primary', size, iconOnly, leftIcon, className = '', children, ...rest }) { const cls = ['kb-btn', `kb-btn--${variant}`, size && `kb-btn--${size}`, iconOnly && 'kb-btn--icon', className].filter(Boolean).join(' '); return ; } function Badge({ tone = 'neutral', dot, children }) { return {dot && }{children}; } function Tag({ children, onClick, active }) { return {children}; } function Avatar({ name = '', size = 32, square }) { const initials = name.split(/\s+/).map(w => w[0]).filter(Boolean).slice(0, 2).join('').toUpperCase(); return {initials}; } // Brand lockup (stack mark + wordmark) function Lockup({ onClick }) { return ( kBenestad ); } Object.assign(window, { Icon, Button, Badge, Tag, Avatar, Lockup, useState });