@zea.cl/cranium-sdk 0.3.4 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cranium-add.mjs +1 -1
- package/bin/cranium-init.mjs +1 -1
- package/dist/components/index.js +1 -1
- package/dist/components/index.js.map +1 -1
- package/dist/components/index.mjs +1 -1
- package/dist/components/index.mjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/hooks/useCranium.ts","../../src/hooks/useCraniumRouter.ts","../../src/components/CraniumTable.tsx","../../src/components/CraniumDashboard.tsx","../../src/components/CraniumForm.tsx","../../src/components/CraniumShell.tsx"],"names":["useState","useCallback","useEffect","jsx","jsxs","React"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client'\nimport { useState, useEffect, useCallback } from 'react'\nimport type { Piece, SiteConfig, CraniumOptions } from '../types'\n\nexport interface UseCraniumReturn {\n pieces: Piece[]\n active: string\n setActive: (slug: string) => void\n loading: boolean\n error: string | null\n refresh: () => Promise<void>\n create: (piece: Partial<Piece>) => Promise<boolean>\n remove: (id: string) => Promise<boolean>\n}\n\nfunction getAuthHeaders(options: CraniumOptions): Record<string, string> {\n const headers: Record<string, string> = {}\n if (options.apiKey) headers['x-api-key'] = options.apiKey\n try {\n const auth = JSON.parse(localStorage.getItem('thalamus_auth') || 'null')\n if (auth?.accessToken) headers['Authorization'] = `Bearer ${auth.accessToken}`\n if (auth?.user?.organization_id) headers['x-zea-org-id'] = auth.user.organization_id\n } catch {}\n return headers\n}\n\nexport function useCranium(options: CraniumOptions): UseCraniumReturn {\n const [pieces, setPieces] = useState<Piece[]>([])\n const [active, setActiveState] = useState<string>('')\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [refreshKey, setRefreshKey] = useState(0)\n const api = `${options.baseUrl || ''}/api/v1`\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const res = await fetch(`${api}/site`, { headers: getAuthHeaders(options) })\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n const d: SiteConfig = await res.json()\n const enabled = (d?.pieces || []).filter(p => p.enabled)\n setPieces(enabled)\n if (enabled.length > 0 && !active) setActiveState(enabled[0].slug)\n } catch (e: any) {\n setError(e.message)\n }\n setLoading(false)\n }, [api, options.apiKey])\n\n useEffect(() => { refresh() }, [])\n\n const setActive = (slug: string) => {\n setActiveState(slug)\n try { localStorage.setItem('cranium:active', slug) } catch {}\n }\n\n const create = async (piece: Partial<Piece>): Promise<boolean> => {\n try {\n const res = await fetch(`${api}/pieces`, {\n method: 'POST',\n headers: { ...getAuthHeaders(options), 'Content-Type': 'application/json' },\n body: JSON.stringify(piece),\n })\n if (res.ok) { refresh(); return true }\n } catch {}\n return false\n }\n\n const remove = async (id: string): Promise<boolean> => {\n try {\n const res = await fetch(`${api}/pieces/${id}`, {\n method: 'DELETE',\n headers: getAuthHeaders(options),\n })\n if (res.ok) { refresh(); return true }\n } catch {}\n return false\n }\n\n const refreshPiece = useCallback((slug: string) => {\n if (slug === active) setRefreshKey(k => k + 1)\n }, [active])\n\n return { pieces, active, setActive, loading, error, refresh, create, remove }\n}\n","'use client'\nimport { useState, useEffect, useCallback } from 'react'\n\nexport interface CraniumRoute {\n path: string\n activePiece: string | null\n activeSection: string | null\n activeSub: string | null\n navigate: (to: string) => void\n back: () => void\n}\n\n/**\n * Internal router for CraniumShell.\n * Uses pushState/popstate for navigation.\n * Route format:\n * /pieces/:slug → activePiece = slug\n * /section/:id → activeSection = id\n * /section/:id/:sub → activeSection = id, activeSub = sub\n */\nexport function useCraniumRouter(): CraniumRoute {\n const [path, setPath] = useState(() => {\n if (typeof window !== 'undefined') return window.location.pathname\n return '/'\n })\n\n const parse = useCallback((p: string) => {\n const parts = p.split('/').filter(Boolean)\n\n if (parts[0] === 'pieces' && parts[1]) {\n return { piece: parts[1], section: null, sub: null }\n }\n if (parts[0] === 'section' && parts[1]) {\n return { piece: null, section: parts[1], sub: parts[2] || null }\n }\n return { piece: null, section: null, sub: null }\n }, [])\n\n const parsed = parse(path)\n\n const navigate = useCallback((to: string) => {\n if (typeof window === 'undefined') return\n window.history.pushState({}, '', to)\n setPath(to)\n }, [])\n\n const back = useCallback(() => {\n if (typeof window === 'undefined') return\n window.history.back()\n }, [])\n\n useEffect(() => {\n const onPop = () => setPath(window.location.pathname)\n window.addEventListener('popstate', onPop)\n return () => window.removeEventListener('popstate', onPop)\n }, [])\n\n // Clean path on mount if loaded with OAuth callback params\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const params = new URLSearchParams(window.location.search)\n if (params.has('code') || params.has('state')) {\n // OAuth callback — let useThalamus handle it, then clean\n return\n }\n }\n }, [])\n\n return {\n path,\n activePiece: parsed.piece,\n activeSection: parsed.section,\n activeSub: parsed.sub,\n navigate,\n back,\n }\n}\n","'use client'\nimport React, { useState, useMemo } from 'react'\n\nexport interface ColumnDef {\n key: string\n label: string\n sortable?: boolean\n render?: (value: any, row: any) => React.ReactNode\n}\n\nexport interface CraniumTableProps {\n columns: ColumnDef[]\n rows: Record<string, any>[]\n onRowClick?: (row: Record<string, any>, index: number) => void\n emptyMessage?: string\n className?: string\n}\n\nexport function CraniumTable({ columns, rows, onRowClick, emptyMessage = 'No data', className }: CraniumTableProps) {\n const [sortKey, setSortKey] = useState<string | null>(null)\n const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc')\n\n const sorted = useMemo(() => {\n if (!sortKey) return rows\n return [...rows].sort((a, b) => {\n const av = a[sortKey], bv = b[sortKey]\n if (av == null) return 1\n if (bv == null) return -1\n const cmp = String(av).localeCompare(String(bv), undefined, { numeric: true })\n return sortDir === 'asc' ? cmp : -cmp\n })\n }, [rows, sortKey, sortDir])\n\n const toggleSort = (key: string) => {\n if (sortKey === key) {\n setSortDir(d => d === 'asc' ? 'desc' : 'asc')\n } else {\n setSortKey(key)\n setSortDir('asc')\n }\n }\n\n if (rows.length === 0) {\n return (\n <div style={{ padding: 32, textAlign: 'center', color: '#8b949e', fontSize: 14 }}>\n {emptyMessage}\n </div>\n )\n }\n\n return (\n <div className={className} style={{ overflow: 'auto', height: '100%' }}>\n <table style={{ width: '100%', borderCollapse: 'collapse', fontFamily: 'system-ui, sans-serif', fontSize: 13 }}>\n <thead>\n <tr style={{ position: 'sticky', top: 0, zIndex: 5 }}>\n {columns.map(col => (\n <th\n key={col.key}\n onClick={() => col.sortable !== false && toggleSort(col.key)}\n style={{\n padding: '10px 16px',\n textAlign: 'left',\n fontWeight: 600,\n fontSize: 11,\n color: '#8b949e',\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n borderBottom: '1px solid #21262d',\n background: '#0d1117',\n cursor: col.sortable !== false ? 'pointer' : 'default',\n userSelect: 'none',\n whiteSpace: 'nowrap',\n }}\n >\n {col.label}\n {sortKey === col.key && (\n <span style={{ marginLeft: 4, fontSize: 10 }}>{sortDir === 'asc' ? '▲' : '▼'}</span>\n )}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {sorted.map((row, i) => (\n <tr\n key={row.id || i}\n onClick={() => onRowClick?.(row, i)}\n style={{\n cursor: onRowClick ? 'pointer' : 'default',\n borderBottom: '1px solid #21262d',\n transition: 'background 0.1s',\n }}\n onMouseEnter={e => { if (onRowClick) e.currentTarget.style.background = '#161b22' }}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n {columns.map(col => (\n <td\n key={col.key}\n style={{\n padding: '10px 16px',\n color: '#e6edf3',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: 300,\n }}\n >\n {col.render ? col.render(row[col.key], row) : formatCell(row[col.key])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nfunction formatCell(value: any): string {\n if (value === null || value === undefined) return '—'\n if (typeof value === 'boolean') return value ? '✓' : '✗'\n if (value instanceof Date) return value.toLocaleDateString()\n return String(value)\n}\n","'use client'\nimport React from 'react'\n\nexport interface DashboardWidget {\n type: 'card' | 'chart' | 'list'\n title: string\n value?: string | number\n subtitle?: string\n trend?: 'up' | 'down' | 'neutral'\n data?: { label: string; value: number }[]\n span?: 1 | 2 | 3\n}\n\nexport interface CraniumDashboardProps {\n widgets: DashboardWidget[]\n className?: string\n}\n\nexport function CraniumDashboard({ widgets, className }: CraniumDashboardProps) {\n if (widgets.length === 0) {\n return (\n <div style={{ padding: 32, textAlign: 'center', color: '#8b949e', fontSize: 14 }}>\n No widgets configured\n </div>\n )\n }\n\n return (\n <div\n className={className}\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(260px, 1fr))',\n gap: 16,\n padding: 20,\n overflow: 'auto',\n height: '100%',\n alignContent: 'start',\n fontFamily: 'system-ui, sans-serif',\n }}\n >\n {widgets.map((w, i) => (\n <div\n key={i}\n style={{\n gridColumn: `span ${w.span || 1}`,\n background: '#161b22',\n border: '1px solid #21262d',\n borderRadius: 8,\n padding: 20,\n }}\n >\n {w.type === 'card' && <CardWidget w={w} />}\n {w.type === 'chart' && <ChartWidget w={w} />}\n {w.type === 'list' && <ListWidget w={w} />}\n </div>\n ))}\n </div>\n )\n}\n\nfunction CardWidget({ w }: { w: DashboardWidget }) {\n const trendColor = w.trend === 'up' ? '#3fb950' : w.trend === 'down' ? '#f85149' : '#8b949e'\n const trendIcon = w.trend === 'up' ? '↑' : w.trend === 'down' ? '↓' : '→'\n\n return (\n <div>\n <div style={{ fontSize: 11, color: '#8b949e', textTransform: 'uppercase', letterSpacing: '0.04em', marginBottom: 8 }}>\n {w.title}\n </div>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: 8 }}>\n <span style={{ fontSize: 28, fontWeight: 700, color: '#e6edf3' }}>{w.value}</span>\n {w.trend && (\n <span style={{ fontSize: 13, color: trendColor, fontWeight: 600 }}>\n {trendIcon} {w.subtitle}\n </span>\n )}\n </div>\n </div>\n )\n}\n\nfunction ChartWidget({ w }: { w: DashboardWidget }) {\n const max = Math.max(...(w.data || []).map(d => d.value), 1)\n\n return (\n <div>\n <div style={{ fontSize: 11, color: '#8b949e', textTransform: 'uppercase', letterSpacing: '0.04em', marginBottom: 12 }}>\n {w.title}\n </div>\n <div style={{ display: 'flex', alignItems: 'flex-end', gap: 6, height: 100 }}>\n {(w.data || []).map((d, i) => (\n <div key={i} style={{ flex: 1, display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 4 }}>\n <div\n style={{\n width: '100%',\n height: `${(d.value / max) * 100}%`,\n background: '#58a6ff',\n borderRadius: '3px 3px 0 0',\n minHeight: 2,\n transition: 'height 0.3s',\n }}\n />\n <span style={{ fontSize: 9, color: '#484f58', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', maxWidth: '100%' }}>\n {d.label}\n </span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction ListWidget({ w }: { w: DashboardWidget }) {\n return (\n <div>\n <div style={{ fontSize: 11, color: '#8b949e', textTransform: 'uppercase', letterSpacing: '0.04em', marginBottom: 12 }}>\n {w.title}\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {(w.data || []).map((d, i) => (\n <div key={i} style={{ display: 'flex', justifyContent: 'space-between', fontSize: 13 }}>\n <span style={{ color: '#e6edf3' }}>{d.label}</span>\n <span style={{ color: '#8b949e', fontWeight: 600 }}>{d.value}</span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","'use client'\nimport React, { useState } from 'react'\n\nexport interface FieldDef {\n key: string\n label: string\n type?: 'text' | 'email' | 'password' | 'number' | 'select' | 'checkbox'\n required?: boolean\n options?: { label: string; value: string }[]\n placeholder?: string\n}\n\nexport interface CraniumFormProps {\n schema: FieldDef[]\n onSubmit: (data: Record<string, any>) => Promise<void>\n submitLabel?: string\n className?: string\n}\n\nexport function CraniumForm({ schema, onSubmit, submitLabel = 'Save', className }: CraniumFormProps) {\n const [values, setValues] = useState<Record<string, any>>({})\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true); setError(null)\n try { await onSubmit(values) }\n catch (err: any) { setError(err.message) }\n finally { setLoading(false) }\n }\n\n const s = (p: React.CSSProperties = {}): React.CSSProperties => ({\n background: '#0d1117', border: '1px solid #21262d', borderRadius: 6,\n color: '#e6edf3', padding: '8px 12px', fontSize: 13,\n fontFamily: 'system-ui, sans-serif', width: '100%',\n outline: 'none',\n ...p,\n })\n\n return (\n <div className={className} style={{ maxWidth: 520, margin: '40px auto', padding: '0 24px' }}>\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n {schema.map(field => (\n <div key={field.key}>\n <label style={{ display: 'block', fontSize: 12, fontWeight: 600, color: '#8b949e', marginBottom: 4 }}>\n {field.label} {field.required && <span style={{ color: '#f85149' }}>*</span>}\n </label>\n {field.type === 'select' ? (\n <select\n value={values[field.key] || ''}\n onChange={e => setValues(v => ({ ...v, [field.key]: e.target.value }))}\n required={field.required}\n style={s()}\n >\n <option value=\"\">Select...</option>\n {(field.options || []).map(o => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n ) : field.type === 'checkbox' ? (\n <label style={{ display: 'flex', alignItems: 'center', gap: 8, cursor: 'pointer' }}>\n <input\n type=\"checkbox\"\n checked={!!values[field.key]}\n onChange={e => setValues(v => ({ ...v, [field.key]: e.target.checked }))}\n />\n <span style={{ fontSize: 13, color: '#e6edf3' }}>{field.label}</span>\n </label>\n ) : (\n <input\n type={field.type || 'text'}\n value={values[field.key] || ''}\n onChange={e => setValues(v => ({ ...v, [field.key]: e.target.value }))}\n required={field.required}\n placeholder={field.placeholder}\n style={s()}\n />\n )}\n </div>\n ))}\n {error && <div style={{ color: '#f85149', fontSize: 12 }}>{error}</div>}\n <button\n type=\"submit\"\n disabled={loading}\n style={{\n background: '#238636', color: '#fff', border: 'none', borderRadius: 6,\n padding: '10px 24px', cursor: 'pointer', fontSize: 14, fontWeight: 600,\n fontFamily: 'inherit', opacity: loading ? 0.6 : 1,\n }}\n >\n {loading ? 'Saving...' : submitLabel}\n </button>\n </form>\n </div>\n )\n}\n","'use client'\nimport React, { useState } from 'react'\nimport type { Piece, CraniumOptions } from '../types'\nimport { useCranium } from '../hooks/useCranium'\nimport { useCraniumRouter } from '../hooks/useCraniumRouter'\nimport { CraniumTable } from './CraniumTable'\nimport { CraniumDashboard } from './CraniumDashboard'\nimport { CraniumForm } from './CraniumForm'\n\nexport interface CraniumTheme {\n bg?: string; b1?: string; bc?: string\n tx?: string; mu?: string; pr?: string\n fc?: string; ha?: string\n}\n\nexport interface SidebarSection {\n id: string\n label: string\n content: React.ReactNode\n}\n\nexport interface CraniumShellProps {\n config: CraniumOptions\n /** Theme overrides. Defaults to ZEA dark theme */\n theme?: CraniumTheme\n brandName?: string\n rightPiece?: React.ReactNode\n /** Sidebar sections injected by cranium-add (below dynamic pieces) */\n sidebarSections?: SidebarSection[]\n sidebarWidth?: number\n rightWidth?: number\n showRight?: boolean\n className?: string\n headerContent?: React.ReactNode\n subHeaderContent?: React.ReactNode\n footerContent?: React.ReactNode\n renderIcon?: (icon: string) => React.ReactNode\n}\n\nexport function CraniumShell({ config, theme, brandName, rightPiece, sidebarSections, sidebarWidth: iSW = 240, rightWidth: iRW = 420, showRight: iR = true, className, headerContent, subHeaderContent, footerContent, renderIcon }: CraniumShellProps) {\n const { pieces, active, setActive, loading, error, refresh } = useCranium(config)\n const router = useCraniumRouter()\n const [sw, setSw] = useState(() => { try { return Number(localStorage.getItem('cr:sw') || iSW) } catch { return iSW } })\n const [rw, setRw] = useState(() => { try { return Number(localStorage.getItem('cr:rw') || iRW) } catch { return iRW } })\n const [rv, setRv] = useState(iR)\n\n // Sync active piece from router on mount\n const activeFromRouter = router.activePiece || active\n const ap = pieces.find(p => p.slug === activeFromRouter)\n\n const handleSelect = (slug: string) => {\n setActive(slug)\n router.navigate(`/pieces/${slug}`)\n }\n\n return (\n <div className={`cr-shell ${className || ''}`} style={{ gridTemplateColumns: `${sw}px 4px 1fr ${rv ? `4px ${rw}px` : '0px 0px'}` }}>\n <Sidebar pieces={pieces} active={activeFromRouter} onSelect={handleSelect} loading={loading} error={error} onRefresh={refresh} sections={sidebarSections} brandName={brandName} headerContent={headerContent} subHeaderContent={subHeaderContent} footerContent={footerContent} renderIcon={renderIcon} />\n <Handle p=\"cr:sw\" w={sw} setW={setSw} min={160} max={400} />\n <Content piece={ap} rv={rv} toggle={() => setRv(v => !v)} config={config} />\n {rv ? <Handle p=\"cr:rw\" w={rw} setW={setRw} min={300} max={700} dir={-1} /> : <div />}\n {rv ? <aside className=\"cr-right-panel\">{rightPiece || <DefaultRight />}</aside> : <div />}\n </div>\n )\n}\n\nfunction Sidebar({ pieces, active, onSelect, loading, error, onRefresh, sections, brandName, headerContent, subHeaderContent, footerContent, renderIcon }: any) {\n const groups = pieces.reduce((acc: any, p: Piece) => { const c = p.category || 'General'; if (!acc[c]) acc[c] = []; acc[c].push(p); return acc }, {})\n const secs: SidebarSection[] = sections || []\n return (\n <aside className=\"cr-sidebar\">\n <div className=\"cr-sidebar-header\">\n <div style={{ display:'flex', alignItems:'center', gap:8, fontSize: 14 }}>\n {(() => {\n const parts = (brandName || 'Cranium').split(' ')\n if (parts.length > 1) {\n return (\n <>\n {parts[0].toUpperCase() === 'ZEA' ? (\n <img src=\"https://zea.cl/text-zea.svg\" alt=\"ZEA\" style={{ height: 13, transform: 'translateY(1px)' }} />\n ) : (\n <span style={{ fontWeight: 700, color: 'var(--cr-text)' }}>{parts[0]}</span>\n )}\n <span style={{ color: 'var(--cr-text-muted)' }}>|</span>\n <span style={{ fontWeight: 600, color: 'var(--cr-text-muted)', fontSize: 13, letterSpacing: '0.04em' }}>{parts.slice(1).join(' ').trim().toUpperCase()}</span>\n </>\n )\n }\n return <span style={{ fontWeight: 600, color: 'var(--cr-text)' }}>{brandName || 'Cranium'}</span>\n })()}\n </div>\n {headerContent && <div>{headerContent}</div>}\n </div>\n {subHeaderContent && <div style={{ padding: '12px 16px 0', flexShrink: 0 }}>{subHeaderContent}</div>}\n <nav className=\"cr-sidebar-nav\">\n {loading && <div style={{ padding:'16px', color:'var(--cr-text-muted)', fontSize:12 }}>Loading...</div>}\n {error && <div style={{ padding:'12px 16px' }}><div style={{ color:'#ff7b72', fontSize:11, marginBottom:6 }}>{error}</div><button onClick={onRefresh} className=\"cr-btn\">Retry</button></div>}\n {!loading && !error && Object.entries(groups).map(([cat, items]: any) => (\n <div key={cat}>\n <div className=\"cr-sidebar-section-title\">{cat}</div>\n {(items as Piece[]).map(p => (\n <button key={p.slug} onClick={() => onSelect(p.slug)} className={`cr-sidebar-item ${active === p.slug ? 'cr-sidebar-item--active' : ''}`}>\n {p.icon && <span style={{ fontSize:14, width:20, display:'flex', alignItems:'center', justifyContent:'center', flexShrink:0, opacity: active===p.slug?1:0.7 }}>{renderIcon ? renderIcon(p.icon) : p.icon}</span>}\n <span style={{ flex:1, overflow:'hidden', textOverflow:'ellipsis', whiteSpace:'nowrap' }}>{p.name}</span>\n </button>\n ))}\n </div>\n ))}\n\n {/* Sidebar sections (dynamic, injected by cranium-add) */}\n {(secs).map(s => (\n <div key={s.id}>\n <div className=\"cr-sidebar-section-title\">{s.label}</div>\n <div style={{ padding:'0 0 8px 0' }}>{s.content}</div>\n </div>\n ))}\n </nav>\n {footerContent ? (\n <div className=\"cr-sidebar-footer\">\n {footerContent}\n </div>\n ) : (\n <div className=\"cr-sidebar-footer\" style={{ display:'flex', alignItems:'center', gap:10 }}>\n <div style={{ width:28, height:28, borderRadius:'50%', background:'var(--cr-primary)', color:'#fff', display:'flex', alignItems:'center', justifyContent:'center', fontSize:11, fontWeight:700, flexShrink:0 }}>?</div>\n <div style={{ fontSize:12, fontWeight:600, color:'var(--cr-text)', overflow:'hidden', textOverflow:'ellipsis', whiteSpace:'nowrap', flex:1 }}>User</div>\n <button onClick={() => { localStorage.removeItem('thalamus_auth'); window.location.reload() }} className=\"cr-btn\">Logout</button>\n </div>\n )}\n </aside>\n )\n}\n\nfunction Content({ piece, rv, toggle, config }: { piece?: Piece; rv: boolean; toggle: () => void; config: CraniumOptions }) {\n const [data, setData] = useState<any>(null)\n const [fetchError, setFetchError] = useState<string | null>(null)\n const [fetchLoading, setFetchLoading] = useState(false)\n const [formSchema, setFormSchema] = useState<any>(null)\n const [formConfig, setFormConfig] = useState<any>(null)\n const [refreshKey, setRefreshKey] = useState(0)\n\n React.useEffect(() => {\n if (!piece || piece.renderMode === 'iframe' || !piece.renderMode) return\n setFormSchema(null); setFormConfig(null)\n setFetchLoading(true); setFetchError(null)\n const headers = getApiHeaders(config.apiKey)\n // Auto-append org filter for Thalamus API\n const auth = getToken()\n let url = piece.url\n if (url.includes('auth.zea.localhost/api/users') && auth?.user?.organization_id) {\n url += (url.includes('?') ? '&' : '?') + 'organization_id=' + auth.user.organization_id\n }\n fetch(url, { headers })\n .then(r => { if (!r.ok) throw new Error(`HTTP ${r.status}`); return r.json() })\n .then(d => setData(d))\n .catch(e => setFetchError(e.message))\n .finally(() => setFetchLoading(false))\n }, [piece?.slug, piece?.renderMode, piece?.url, refreshKey])\n\n // Auto-refresh table after form submit\n const tableKey = useState(0)[1]\n const refreshTable = () => tableKey((k: number) => k + 1)\n\n return (\n <main className=\"cr-main\">\n <header className=\"cr-header\">\n <div style={{ display:'flex', alignItems:'center', gap:8 }}>\n {piece && <span style={{ color:'var(--cr-text)', fontWeight:500 }}>{piece.name}</span>}\n </div>\n <div style={{ display:'flex', alignItems:'center', gap:8 }}>\n {piece?.addAction && (\n <button onClick={() => {\n fetch(piece.addAction!.url)\n .then(r => r.json())\n .then(d => { setFormSchema(d.schema); setFormConfig(d) })\n .catch(e => setFetchError(e.message))\n }} className=\"cr-btn cr-btn--primary\">\n + {piece.addAction.label || 'Add'}\n </button>\n )}\n <button onClick={toggle} className=\"cr-btn\">{rv?'Hide Panel':'Panel'}</button>\n </div>\n </header>\n <div className=\"cr-content-area\">\n {!piece && <div style={{ display:'flex', alignItems:'center', justifyContent:'center', height:'100%', color:'var(--cr-text-muted)', fontSize:14 }}>Select a piece from the sidebar</div>}\n {piece && fetchLoading && <div style={{ display:'flex', alignItems:'center', justifyContent:'center', height:'100%', color:'var(--cr-text-muted)', fontSize:14 }}>Loading...</div>}\n {piece && fetchError && (\n <div style={{ display:'flex', flexDirection:'column', alignItems:'center', justifyContent:'center', height:'100%', gap:12 }}>\n <div style={{ color:'#f85149', fontSize:13 }}>{fetchError}</div>\n <button onClick={() => setFetchError(null)} className=\"cr-btn\">Retry</button>\n </div>\n )}\n {piece && !fetchLoading && !fetchError && piece.renderMode === 'table' && data && (\n <>\n {formSchema ? (\n <CraniumForm\n schema={formSchema}\n onSubmit={async (values) => {\n const submitUrl = formConfig?.submitUrl\n if (submitUrl) {\n const res = await fetch(submitUrl, {\n method: formConfig?.submitMethod || 'POST',\n headers: { 'Content-Type': 'application/json', ...getApiHeaders() },\n body: JSON.stringify(values),\n })\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n await res.json()\n }\n setFormSchema(null)\n setFormConfig(null)\n setRefreshKey(k => k + 1)\n }}\n />\n ) : (\n <CraniumTable columns={piece.columns || buildColumns(data?.data || data?.items?.[0] ? data.items : data)} rows={Array.isArray(data) ? data : data?.items || data?.data || data?.rows || []} />\n )}\n </>\n )}\n {piece && !fetchLoading && !fetchError && piece.renderMode === 'dashboard' && data && (\n <CraniumDashboard widgets={data.widgets || (Array.isArray(data) ? data : buildDashboardWidgets(data))} />\n )}\n {piece && !fetchLoading && !fetchError && piece.renderMode === 'form' && data?.schema && (\n <CraniumForm\n schema={data.schema}\n onSubmit={async (values) => {\n const submitUrl = data?.submitUrl || piece.url\n if (submitUrl) {\n const res = await fetch(submitUrl, {\n method: data?.submitMethod || 'POST',\n headers: { 'Content-Type': 'application/json', ...getApiHeaders() },\n body: JSON.stringify(values),\n })\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n }\n }}\n />\n )}\n {piece && !fetchLoading && !fetchError && (!piece.renderMode || piece.renderMode === 'iframe') && (\n <iframe key={piece.slug} src={piece.url} style={{ width:'100%', height:'100%', border:'none' }} title={piece.name} />\n )}\n </div>\n </main>\n )\n}\n\nfunction DefaultRight() {\n return <div style={{ display:'flex', alignItems:'center', justifyContent:'center', height:'100%', color:'var(--cr-text-muted)', fontSize:13 }}>Right panel — integrate a piece here</div>\n}\n\nfunction buildColumns(data: any[]): { key: string; label: string }[] {\n if (!data || !Array.isArray(data) || data.length === 0) return []\n return Object.keys(data[0]).map(k => ({ key: k, label: k.replace(/_/g, ' ').replace(/\\b\\w/g, c => c.toUpperCase()) }))\n}\n\nfunction buildDashboardWidgets(data: Record<string, any>): { type: 'card'; title: string; value: string | number }[] {\n return Object.entries(data).map(([key, value]) => ({\n type: 'card' as const,\n title: key.replace(/_/g, ' ').replace(/\\b\\w/g, c => c.toUpperCase()),\n value: typeof value === 'number' ? String(value) : String(value),\n }))\n}\n\nfunction getToken() {\n try { const s = localStorage.getItem('thalamus_auth'); return s ? JSON.parse(s) : null } catch { return null }\n}\n\nfunction getApiHeaders(apiKey?: string) {\n const headers: Record<string, string> = {}\n if (apiKey) headers['x-api-key'] = apiKey\n const auth = getToken()\n if (auth?.accessToken) headers['Authorization'] = `Bearer ${auth.accessToken}`\n if (auth?.user?.organization_id) headers['x-zea-org-id'] = auth.user.organization_id\n return headers\n}\n\nfunction Handle({ p, w, setW, min, max, dir=1 }: { p:string; w:number; setW:(v:number)=>void; min:number; max:number; dir?:1|-1 }) {\n const down = (e: React.MouseEvent) => { e.preventDefault(); const sx=e.clientX, sw=w; document.body.style.cursor='col-resize'; document.body.style.userSelect='none'\n const mv = (ev:MouseEvent) => { setW(Math.min(max, Math.max(min, sw+(ev.clientX-sx)*dir))) }\n const up = () => { document.body.style.cursor=''; document.body.style.userSelect=''; document.removeEventListener('mousemove',mv); document.removeEventListener('mouseup',up); try{localStorage.setItem(p,String(w))}catch{} }\n document.addEventListener('mousemove',mv); document.addEventListener('mouseup',up) }\n return <div onMouseDown={down} className=\"cr-handle\" />\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/hooks/useCranium.ts","../../src/hooks/useCraniumRouter.ts","../../src/components/CraniumTable.tsx","../../src/components/CraniumDashboard.tsx","../../src/components/CraniumForm.tsx","../../src/components/CraniumShell.tsx"],"names":["useState","useCallback","useEffect","jsx","jsxs","React"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client'\nimport { useState, useEffect, useCallback } from 'react'\nimport type { Piece, SiteConfig, CraniumOptions } from '../types'\n\nexport interface UseCraniumReturn {\n pieces: Piece[]\n active: string\n setActive: (slug: string) => void\n loading: boolean\n error: string | null\n refresh: () => Promise<void>\n create: (piece: Partial<Piece>) => Promise<boolean>\n remove: (id: string) => Promise<boolean>\n}\n\nfunction getAuthHeaders(options: CraniumOptions): Record<string, string> {\n const headers: Record<string, string> = {}\n if (options.apiKey) headers['x-api-key'] = options.apiKey\n try {\n const auth = JSON.parse(localStorage.getItem('thalamus_auth') || 'null')\n if (auth?.accessToken) headers['Authorization'] = `Bearer ${auth.accessToken}`\n if (auth?.user?.organization_id) headers['x-zea-org-id'] = auth.user.organization_id\n } catch {}\n return headers\n}\n\nexport function useCranium(options: CraniumOptions): UseCraniumReturn {\n const [pieces, setPieces] = useState<Piece[]>([])\n const [active, setActiveState] = useState<string>('')\n const [loading, setLoading] = useState(true)\n const [error, setError] = useState<string | null>(null)\n const [refreshKey, setRefreshKey] = useState(0)\n const api = `${options.baseUrl || ''}/api/v1`\n\n const refresh = useCallback(async () => {\n setLoading(true)\n setError(null)\n try {\n const res = await fetch(`${api}/site`, { headers: getAuthHeaders(options) })\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n const d: SiteConfig = await res.json()\n const enabled = (d?.pieces || []).filter(p => p.enabled)\n setPieces(enabled)\n if (enabled.length > 0 && !active) setActiveState(enabled[0].slug)\n } catch (e: any) {\n setError(e.message)\n }\n setLoading(false)\n }, [api, options.apiKey])\n\n useEffect(() => { refresh() }, [])\n\n const setActive = (slug: string) => {\n setActiveState(slug)\n try { localStorage.setItem('cranium:active', slug) } catch {}\n }\n\n const create = async (piece: Partial<Piece>): Promise<boolean> => {\n try {\n const res = await fetch(`${api}/pieces`, {\n method: 'POST',\n headers: { ...getAuthHeaders(options), 'Content-Type': 'application/json' },\n body: JSON.stringify(piece),\n })\n if (res.ok) { refresh(); return true }\n } catch {}\n return false\n }\n\n const remove = async (id: string): Promise<boolean> => {\n try {\n const res = await fetch(`${api}/pieces/${id}`, {\n method: 'DELETE',\n headers: getAuthHeaders(options),\n })\n if (res.ok) { refresh(); return true }\n } catch {}\n return false\n }\n\n const refreshPiece = useCallback((slug: string) => {\n if (slug === active) setRefreshKey(k => k + 1)\n }, [active])\n\n return { pieces, active, setActive, loading, error, refresh, create, remove }\n}\n","'use client'\nimport { useState, useEffect, useCallback } from 'react'\n\nexport interface CraniumRoute {\n path: string\n activePiece: string | null\n activeSection: string | null\n activeSub: string | null\n navigate: (to: string) => void\n back: () => void\n}\n\n/**\n * Internal router for CraniumShell.\n * Uses pushState/popstate for navigation.\n * Route format:\n * /pieces/:slug → activePiece = slug\n * /section/:id → activeSection = id\n * /section/:id/:sub → activeSection = id, activeSub = sub\n */\nexport function useCraniumRouter(): CraniumRoute {\n const [path, setPath] = useState(() => {\n if (typeof window !== 'undefined') return window.location.pathname\n return '/'\n })\n\n const parse = useCallback((p: string) => {\n const parts = p.split('/').filter(Boolean)\n\n if (parts[0] === 'pieces' && parts[1]) {\n return { piece: parts[1], section: null, sub: null }\n }\n if (parts[0] === 'section' && parts[1]) {\n return { piece: null, section: parts[1], sub: parts[2] || null }\n }\n return { piece: null, section: null, sub: null }\n }, [])\n\n const parsed = parse(path)\n\n const navigate = useCallback((to: string) => {\n if (typeof window === 'undefined') return\n window.history.pushState({}, '', to)\n setPath(to)\n }, [])\n\n const back = useCallback(() => {\n if (typeof window === 'undefined') return\n window.history.back()\n }, [])\n\n useEffect(() => {\n const onPop = () => setPath(window.location.pathname)\n window.addEventListener('popstate', onPop)\n return () => window.removeEventListener('popstate', onPop)\n }, [])\n\n // Clean path on mount if loaded with OAuth callback params\n useEffect(() => {\n if (typeof window !== 'undefined') {\n const params = new URLSearchParams(window.location.search)\n if (params.has('code') || params.has('state')) {\n // OAuth callback — let useThalamus handle it, then clean\n return\n }\n }\n }, [])\n\n return {\n path,\n activePiece: parsed.piece,\n activeSection: parsed.section,\n activeSub: parsed.sub,\n navigate,\n back,\n }\n}\n","'use client'\nimport React, { useState, useMemo } from 'react'\n\nexport interface ColumnDef {\n key: string\n label: string\n sortable?: boolean\n render?: (value: any, row: any) => React.ReactNode\n}\n\nexport interface CraniumTableProps {\n columns: ColumnDef[]\n rows: Record<string, any>[]\n onRowClick?: (row: Record<string, any>, index: number) => void\n emptyMessage?: string\n className?: string\n}\n\nexport function CraniumTable({ columns, rows, onRowClick, emptyMessage = 'No data', className }: CraniumTableProps) {\n const [sortKey, setSortKey] = useState<string | null>(null)\n const [sortDir, setSortDir] = useState<'asc' | 'desc'>('asc')\n\n const sorted = useMemo(() => {\n if (!sortKey) return rows\n return [...rows].sort((a, b) => {\n const av = a[sortKey], bv = b[sortKey]\n if (av == null) return 1\n if (bv == null) return -1\n const cmp = String(av).localeCompare(String(bv), undefined, { numeric: true })\n return sortDir === 'asc' ? cmp : -cmp\n })\n }, [rows, sortKey, sortDir])\n\n const toggleSort = (key: string) => {\n if (sortKey === key) {\n setSortDir(d => d === 'asc' ? 'desc' : 'asc')\n } else {\n setSortKey(key)\n setSortDir('asc')\n }\n }\n\n if (rows.length === 0) {\n return (\n <div style={{ padding: 32, textAlign: 'center', color: '#8b949e', fontSize: 14 }}>\n {emptyMessage}\n </div>\n )\n }\n\n return (\n <div className={className} style={{ overflow: 'auto', height: '100%' }}>\n <table style={{ width: '100%', borderCollapse: 'collapse', fontFamily: 'system-ui, sans-serif', fontSize: 13 }}>\n <thead>\n <tr style={{ position: 'sticky', top: 0, zIndex: 5 }}>\n {columns.map(col => (\n <th\n key={col.key}\n onClick={() => col.sortable !== false && toggleSort(col.key)}\n style={{\n padding: '10px 16px',\n textAlign: 'left',\n fontWeight: 600,\n fontSize: 11,\n color: '#8b949e',\n textTransform: 'uppercase',\n letterSpacing: '0.04em',\n borderBottom: '1px solid #21262d',\n background: '#0d1117',\n cursor: col.sortable !== false ? 'pointer' : 'default',\n userSelect: 'none',\n whiteSpace: 'nowrap',\n }}\n >\n {col.label}\n {sortKey === col.key && (\n <span style={{ marginLeft: 4, fontSize: 10 }}>{sortDir === 'asc' ? '▲' : '▼'}</span>\n )}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {sorted.map((row, i) => (\n <tr\n key={row.id || i}\n onClick={() => onRowClick?.(row, i)}\n style={{\n cursor: onRowClick ? 'pointer' : 'default',\n borderBottom: '1px solid #21262d',\n transition: 'background 0.1s',\n }}\n onMouseEnter={e => { if (onRowClick) e.currentTarget.style.background = '#161b22' }}\n onMouseLeave={e => e.currentTarget.style.background = 'transparent'}\n >\n {columns.map(col => (\n <td\n key={col.key}\n style={{\n padding: '10px 16px',\n color: '#e6edf3',\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n maxWidth: 300,\n }}\n >\n {col.render ? col.render(row[col.key], row) : formatCell(row[col.key])}\n </td>\n ))}\n </tr>\n ))}\n </tbody>\n </table>\n </div>\n )\n}\n\nfunction formatCell(value: any): string {\n if (value === null || value === undefined) return '—'\n if (typeof value === 'boolean') return value ? '✓' : '✗'\n if (value instanceof Date) return value.toLocaleDateString()\n return String(value)\n}\n","'use client'\nimport React from 'react'\n\nexport interface DashboardWidget {\n type: 'card' | 'chart' | 'list'\n title: string\n value?: string | number\n subtitle?: string\n trend?: 'up' | 'down' | 'neutral'\n data?: { label: string; value: number }[]\n span?: 1 | 2 | 3\n}\n\nexport interface CraniumDashboardProps {\n widgets: DashboardWidget[]\n className?: string\n}\n\nexport function CraniumDashboard({ widgets, className }: CraniumDashboardProps) {\n if (widgets.length === 0) {\n return (\n <div style={{ padding: 32, textAlign: 'center', color: '#8b949e', fontSize: 14 }}>\n No widgets configured\n </div>\n )\n }\n\n return (\n <div\n className={className}\n style={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fill, minmax(260px, 1fr))',\n gap: 16,\n padding: 20,\n overflow: 'auto',\n height: '100%',\n alignContent: 'start',\n fontFamily: 'system-ui, sans-serif',\n }}\n >\n {widgets.map((w, i) => (\n <div\n key={i}\n style={{\n gridColumn: `span ${w.span || 1}`,\n background: '#161b22',\n border: '1px solid #21262d',\n borderRadius: 8,\n padding: 20,\n }}\n >\n {w.type === 'card' && <CardWidget w={w} />}\n {w.type === 'chart' && <ChartWidget w={w} />}\n {w.type === 'list' && <ListWidget w={w} />}\n </div>\n ))}\n </div>\n )\n}\n\nfunction CardWidget({ w }: { w: DashboardWidget }) {\n const trendColor = w.trend === 'up' ? '#3fb950' : w.trend === 'down' ? '#f85149' : '#8b949e'\n const trendIcon = w.trend === 'up' ? '↑' : w.trend === 'down' ? '↓' : '→'\n\n return (\n <div>\n <div style={{ fontSize: 11, color: '#8b949e', textTransform: 'uppercase', letterSpacing: '0.04em', marginBottom: 8 }}>\n {w.title}\n </div>\n <div style={{ display: 'flex', alignItems: 'baseline', gap: 8 }}>\n <span style={{ fontSize: 28, fontWeight: 700, color: '#e6edf3' }}>{w.value}</span>\n {w.trend && (\n <span style={{ fontSize: 13, color: trendColor, fontWeight: 600 }}>\n {trendIcon} {w.subtitle}\n </span>\n )}\n </div>\n </div>\n )\n}\n\nfunction ChartWidget({ w }: { w: DashboardWidget }) {\n const max = Math.max(...(w.data || []).map(d => d.value), 1)\n\n return (\n <div>\n <div style={{ fontSize: 11, color: '#8b949e', textTransform: 'uppercase', letterSpacing: '0.04em', marginBottom: 12 }}>\n {w.title}\n </div>\n <div style={{ display: 'flex', alignItems: 'flex-end', gap: 6, height: 100 }}>\n {(w.data || []).map((d, i) => (\n <div key={i} style={{ flex: 1, display: 'flex', flexDirection: 'column', alignItems: 'center', gap: 4 }}>\n <div\n style={{\n width: '100%',\n height: `${(d.value / max) * 100}%`,\n background: '#58a6ff',\n borderRadius: '3px 3px 0 0',\n minHeight: 2,\n transition: 'height 0.3s',\n }}\n />\n <span style={{ fontSize: 9, color: '#484f58', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis', maxWidth: '100%' }}>\n {d.label}\n </span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n\nfunction ListWidget({ w }: { w: DashboardWidget }) {\n return (\n <div>\n <div style={{ fontSize: 11, color: '#8b949e', textTransform: 'uppercase', letterSpacing: '0.04em', marginBottom: 12 }}>\n {w.title}\n </div>\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {(w.data || []).map((d, i) => (\n <div key={i} style={{ display: 'flex', justifyContent: 'space-between', fontSize: 13 }}>\n <span style={{ color: '#e6edf3' }}>{d.label}</span>\n <span style={{ color: '#8b949e', fontWeight: 600 }}>{d.value}</span>\n </div>\n ))}\n </div>\n </div>\n )\n}\n","'use client'\nimport React, { useState } from 'react'\n\nexport interface FieldDef {\n key: string\n label: string\n type?: 'text' | 'email' | 'password' | 'number' | 'select' | 'checkbox'\n required?: boolean\n options?: { label: string; value: string }[]\n placeholder?: string\n}\n\nexport interface CraniumFormProps {\n schema: FieldDef[]\n onSubmit: (data: Record<string, any>) => Promise<void>\n submitLabel?: string\n className?: string\n}\n\nexport function CraniumForm({ schema, onSubmit, submitLabel = 'Save', className }: CraniumFormProps) {\n const [values, setValues] = useState<Record<string, any>>({})\n const [loading, setLoading] = useState(false)\n const [error, setError] = useState<string | null>(null)\n\n const handleSubmit = async (e: React.FormEvent) => {\n e.preventDefault()\n setLoading(true); setError(null)\n try { await onSubmit(values) }\n catch (err: any) { setError(err.message) }\n finally { setLoading(false) }\n }\n\n const s = (p: React.CSSProperties = {}): React.CSSProperties => ({\n background: '#0d1117', border: '1px solid #21262d', borderRadius: 6,\n color: '#e6edf3', padding: '8px 12px', fontSize: 13,\n fontFamily: 'system-ui, sans-serif', width: '100%',\n outline: 'none',\n ...p,\n })\n\n return (\n <div className={className} style={{ maxWidth: 520, margin: '40px auto', padding: '0 24px' }}>\n <form onSubmit={handleSubmit} style={{ display: 'flex', flexDirection: 'column', gap: 16 }}>\n {schema.map(field => (\n <div key={field.key}>\n <label style={{ display: 'block', fontSize: 12, fontWeight: 600, color: '#8b949e', marginBottom: 4 }}>\n {field.label} {field.required && <span style={{ color: '#f85149' }}>*</span>}\n </label>\n {field.type === 'select' ? (\n <select\n value={values[field.key] || ''}\n onChange={e => setValues(v => ({ ...v, [field.key]: e.target.value }))}\n required={field.required}\n style={s()}\n >\n <option value=\"\">Select...</option>\n {(field.options || []).map(o => (\n <option key={o.value} value={o.value}>{o.label}</option>\n ))}\n </select>\n ) : field.type === 'checkbox' ? (\n <label style={{ display: 'flex', alignItems: 'center', gap: 8, cursor: 'pointer' }}>\n <input\n type=\"checkbox\"\n checked={!!values[field.key]}\n onChange={e => setValues(v => ({ ...v, [field.key]: e.target.checked }))}\n />\n <span style={{ fontSize: 13, color: '#e6edf3' }}>{field.label}</span>\n </label>\n ) : (\n <input\n type={field.type || 'text'}\n value={values[field.key] || ''}\n onChange={e => setValues(v => ({ ...v, [field.key]: e.target.value }))}\n required={field.required}\n placeholder={field.placeholder}\n style={s()}\n />\n )}\n </div>\n ))}\n {error && <div style={{ color: '#f85149', fontSize: 12 }}>{error}</div>}\n <button\n type=\"submit\"\n disabled={loading}\n style={{\n background: '#238636', color: '#fff', border: 'none', borderRadius: 6,\n padding: '10px 24px', cursor: 'pointer', fontSize: 14, fontWeight: 600,\n fontFamily: 'inherit', opacity: loading ? 0.6 : 1,\n }}\n >\n {loading ? 'Saving...' : submitLabel}\n </button>\n </form>\n </div>\n )\n}\n","'use client'\nimport React, { useState } from 'react'\nimport type { Piece, CraniumOptions } from '../types'\nimport { useCranium } from '../hooks/useCranium'\nimport { useCraniumRouter } from '../hooks/useCraniumRouter'\nimport { CraniumTable } from './CraniumTable'\nimport { CraniumDashboard } from './CraniumDashboard'\nimport { CraniumForm } from './CraniumForm'\n\nexport interface CraniumTheme {\n bg?: string; b1?: string; bc?: string\n tx?: string; mu?: string; pr?: string\n fc?: string; ha?: string\n}\n\nexport interface SidebarSection {\n id: string\n label: string\n content: React.ReactNode\n}\n\nexport interface CraniumShellProps {\n config: CraniumOptions\n /** Theme overrides. Defaults to ZEA dark theme */\n theme?: CraniumTheme\n brandName?: string\n rightPiece?: React.ReactNode\n /** Sidebar sections injected by cranium-add (below dynamic pieces) */\n sidebarSections?: SidebarSection[]\n sidebarWidth?: number\n rightWidth?: number\n showRight?: boolean\n className?: string\n headerContent?: React.ReactNode\n subHeaderContent?: React.ReactNode\n footerContent?: React.ReactNode\n renderIcon?: (icon: string) => React.ReactNode\n}\n\nexport function CraniumShell({ config, theme, brandName, rightPiece, sidebarSections, sidebarWidth: iSW = 240, rightWidth: iRW = 420, showRight: iR = true, className, headerContent, subHeaderContent, footerContent, renderIcon }: CraniumShellProps) {\n const { pieces, active, setActive, loading, error, refresh } = useCranium(config)\n const router = useCraniumRouter()\n const [sw, setSw] = useState(() => { try { return Number(localStorage.getItem('cr:sw') || iSW) } catch { return iSW } })\n const [rw, setRw] = useState(() => { try { return Number(localStorage.getItem('cr:rw') || iRW) } catch { return iRW } })\n const [rv, setRv] = useState(iR)\n\n // Sync active piece from router on mount\n const activeFromRouter = router.activePiece || active\n const ap = pieces.find(p => p.slug === activeFromRouter)\n\n const handleSelect = (slug: string) => {\n setActive(slug)\n router.navigate(`/pieces/${slug}`)\n }\n\n return (\n <div className={`cr-shell ${className || ''}`} style={{ gridTemplateColumns: `${sw}px 4px 1fr ${rv ? `4px ${rw}px` : '0px 0px'}` }}>\n <Sidebar pieces={pieces} active={activeFromRouter} onSelect={handleSelect} loading={loading} error={error} onRefresh={refresh} sections={sidebarSections} brandName={brandName} headerContent={headerContent} subHeaderContent={subHeaderContent} footerContent={footerContent} renderIcon={renderIcon} />\n <Handle p=\"cr:sw\" w={sw} setW={setSw} min={160} max={400} />\n <Content piece={ap} rv={rv} toggle={() => setRv(v => !v)} config={config} />\n {rv ? <Handle p=\"cr:rw\" w={rw} setW={setRw} min={300} max={700} dir={-1} /> : <div />}\n {rv ? <aside className=\"cr-right-panel\">{rightPiece || <DefaultRight />}</aside> : <div />}\n </div>\n )\n}\n\nfunction Sidebar({ pieces, active, onSelect, loading, error, onRefresh, sections, brandName, headerContent, subHeaderContent, footerContent, renderIcon }: any) {\n const groups = pieces.reduce((acc: any, p: Piece) => { const c = p.category || 'General'; if (!acc[c]) acc[c] = []; acc[c].push(p); return acc }, {})\n const secs: SidebarSection[] = sections || []\n return (\n <aside className=\"cr-sidebar\">\n <div className=\"cr-sidebar-header\">\n <div style={{ display:'flex', alignItems:'center', gap:8, fontSize: 14 }}>\n {(() => {\n const parts = (brandName || 'Cranium').split(' ')\n if (parts.length > 1) {\n return (\n <>\n {parts[0].toUpperCase() === 'ZEA' ? (\n <img src=\"https://zea.cl/text-zea.svg\" alt=\"ZEA\" style={{ height: 13, transform: 'translateY(1px)' }} />\n ) : (\n <span style={{ fontWeight: 700, color: 'var(--cr-text)' }}>{parts[0]}</span>\n )}\n <span style={{ color: 'var(--cr-text-muted)' }}>|</span>\n <span style={{ fontWeight: 600, color: 'var(--cr-text-muted)', fontSize: 13, letterSpacing: '0.04em' }}>{parts.slice(1).join(' ').trim().toUpperCase()}</span>\n </>\n )\n }\n return <span style={{ fontWeight: 600, color: 'var(--cr-text)' }}>{brandName || 'Cranium'}</span>\n })()}\n </div>\n {headerContent && <div>{headerContent}</div>}\n </div>\n {subHeaderContent && <div style={{ padding: '12px 16px 0', flexShrink: 0 }}>{subHeaderContent}</div>}\n <nav className=\"cr-sidebar-nav\">\n {loading && <div style={{ padding:'16px', color:'var(--cr-text-muted)', fontSize:12 }}>Loading...</div>}\n {error && <div style={{ padding:'12px 16px' }}><div style={{ color:'#ff7b72', fontSize:11, marginBottom:6 }}>{error}</div><button onClick={onRefresh} className=\"cr-btn\">Retry</button></div>}\n {!loading && !error && Object.entries(groups).map(([cat, items]: any) => (\n <div key={cat}>\n <div className=\"cr-sidebar-section-title\">{cat}</div>\n {(items as Piece[]).map(p => (\n <button key={p.slug} onClick={() => onSelect(p.slug)} className={`cr-sidebar-item ${active === p.slug ? 'cr-sidebar-item--active' : ''}`}>\n {p.icon && <span style={{ fontSize:14, width:20, display:'flex', alignItems:'center', justifyContent:'center', flexShrink:0, opacity: active===p.slug?1:0.7 }}>{renderIcon ? renderIcon(p.icon) : p.icon}</span>}\n <span style={{ flex:1, overflow:'hidden', textOverflow:'ellipsis', whiteSpace:'nowrap' }}>{p.name}</span>\n </button>\n ))}\n </div>\n ))}\n\n {/* Sidebar sections (dynamic, injected by cranium-add) */}\n {(secs).map(s => (\n <div key={s.id}>\n <div className=\"cr-sidebar-section-title\">{s.label}</div>\n <div style={{ padding:'0 0 8px 0' }}>{s.content}</div>\n </div>\n ))}\n </nav>\n {footerContent ? (\n <div className=\"cr-sidebar-footer\">\n {footerContent}\n </div>\n ) : (\n <div className=\"cr-sidebar-footer\" style={{ display:'flex', alignItems:'center', gap:10 }}>\n <div style={{ width:28, height:28, borderRadius:'50%', background:'var(--cr-primary)', color:'#fff', display:'flex', alignItems:'center', justifyContent:'center', fontSize:11, fontWeight:700, flexShrink:0 }}>?</div>\n <div style={{ fontSize:12, fontWeight:600, color:'var(--cr-text)', overflow:'hidden', textOverflow:'ellipsis', whiteSpace:'nowrap', flex:1 }}>User</div>\n <button onClick={() => { localStorage.removeItem('thalamus_auth'); window.location.reload() }} className=\"cr-btn\">Logout</button>\n </div>\n )}\n </aside>\n )\n}\n\nfunction Content({ piece, rv, toggle, config }: { piece?: Piece; rv: boolean; toggle: () => void; config: CraniumOptions }) {\n const [data, setData] = useState<any>(null)\n const [fetchError, setFetchError] = useState<string | null>(null)\n const [fetchLoading, setFetchLoading] = useState(false)\n const [formSchema, setFormSchema] = useState<any>(null)\n const [formConfig, setFormConfig] = useState<any>(null)\n const [refreshKey, setRefreshKey] = useState(0)\n\n React.useEffect(() => {\n if (!piece || piece.renderMode === 'iframe' || !piece.renderMode) return\n setFormSchema(null); setFormConfig(null)\n setFetchLoading(true); setFetchError(null)\n const headers = getApiHeaders(config.apiKey)\n // Auto-append org filter for Thalamus API\n const auth = getToken()\n let url = piece.url\n if (url.includes('auth.zea.cl/api/users') && auth?.user?.organization_id) {\n url += (url.includes('?') ? '&' : '?') + 'organization_id=' + auth.user.organization_id\n }\n fetch(url, { headers })\n .then(r => { if (!r.ok) throw new Error(`HTTP ${r.status}`); return r.json() })\n .then(d => setData(d))\n .catch(e => setFetchError(e.message))\n .finally(() => setFetchLoading(false))\n }, [piece?.slug, piece?.renderMode, piece?.url, refreshKey])\n\n // Auto-refresh table after form submit\n const tableKey = useState(0)[1]\n const refreshTable = () => tableKey((k: number) => k + 1)\n\n return (\n <main className=\"cr-main\">\n <header className=\"cr-header\">\n <div style={{ display:'flex', alignItems:'center', gap:8 }}>\n {piece && <span style={{ color:'var(--cr-text)', fontWeight:500 }}>{piece.name}</span>}\n </div>\n <div style={{ display:'flex', alignItems:'center', gap:8 }}>\n {piece?.addAction && (\n <button onClick={() => {\n fetch(piece.addAction!.url)\n .then(r => r.json())\n .then(d => { setFormSchema(d.schema); setFormConfig(d) })\n .catch(e => setFetchError(e.message))\n }} className=\"cr-btn cr-btn--primary\">\n + {piece.addAction.label || 'Add'}\n </button>\n )}\n <button onClick={toggle} className=\"cr-btn\">{rv?'Hide Panel':'Panel'}</button>\n </div>\n </header>\n <div className=\"cr-content-area\">\n {!piece && <div style={{ display:'flex', alignItems:'center', justifyContent:'center', height:'100%', color:'var(--cr-text-muted)', fontSize:14 }}>Select a piece from the sidebar</div>}\n {piece && fetchLoading && <div style={{ display:'flex', alignItems:'center', justifyContent:'center', height:'100%', color:'var(--cr-text-muted)', fontSize:14 }}>Loading...</div>}\n {piece && fetchError && (\n <div style={{ display:'flex', flexDirection:'column', alignItems:'center', justifyContent:'center', height:'100%', gap:12 }}>\n <div style={{ color:'#f85149', fontSize:13 }}>{fetchError}</div>\n <button onClick={() => setFetchError(null)} className=\"cr-btn\">Retry</button>\n </div>\n )}\n {piece && !fetchLoading && !fetchError && piece.renderMode === 'table' && data && (\n <>\n {formSchema ? (\n <CraniumForm\n schema={formSchema}\n onSubmit={async (values) => {\n const submitUrl = formConfig?.submitUrl\n if (submitUrl) {\n const res = await fetch(submitUrl, {\n method: formConfig?.submitMethod || 'POST',\n headers: { 'Content-Type': 'application/json', ...getApiHeaders() },\n body: JSON.stringify(values),\n })\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n await res.json()\n }\n setFormSchema(null)\n setFormConfig(null)\n setRefreshKey(k => k + 1)\n }}\n />\n ) : (\n <CraniumTable columns={piece.columns || buildColumns(data?.data || data?.items?.[0] ? data.items : data)} rows={Array.isArray(data) ? data : data?.items || data?.data || data?.rows || []} />\n )}\n </>\n )}\n {piece && !fetchLoading && !fetchError && piece.renderMode === 'dashboard' && data && (\n <CraniumDashboard widgets={data.widgets || (Array.isArray(data) ? data : buildDashboardWidgets(data))} />\n )}\n {piece && !fetchLoading && !fetchError && piece.renderMode === 'form' && data?.schema && (\n <CraniumForm\n schema={data.schema}\n onSubmit={async (values) => {\n const submitUrl = data?.submitUrl || piece.url\n if (submitUrl) {\n const res = await fetch(submitUrl, {\n method: data?.submitMethod || 'POST',\n headers: { 'Content-Type': 'application/json', ...getApiHeaders() },\n body: JSON.stringify(values),\n })\n if (!res.ok) throw new Error(`HTTP ${res.status}`)\n }\n }}\n />\n )}\n {piece && !fetchLoading && !fetchError && (!piece.renderMode || piece.renderMode === 'iframe') && (\n <iframe key={piece.slug} src={piece.url} style={{ width:'100%', height:'100%', border:'none' }} title={piece.name} />\n )}\n </div>\n </main>\n )\n}\n\nfunction DefaultRight() {\n return <div style={{ display:'flex', alignItems:'center', justifyContent:'center', height:'100%', color:'var(--cr-text-muted)', fontSize:13 }}>Right panel — integrate a piece here</div>\n}\n\nfunction buildColumns(data: any[]): { key: string; label: string }[] {\n if (!data || !Array.isArray(data) || data.length === 0) return []\n return Object.keys(data[0]).map(k => ({ key: k, label: k.replace(/_/g, ' ').replace(/\\b\\w/g, c => c.toUpperCase()) }))\n}\n\nfunction buildDashboardWidgets(data: Record<string, any>): { type: 'card'; title: string; value: string | number }[] {\n return Object.entries(data).map(([key, value]) => ({\n type: 'card' as const,\n title: key.replace(/_/g, ' ').replace(/\\b\\w/g, c => c.toUpperCase()),\n value: typeof value === 'number' ? String(value) : String(value),\n }))\n}\n\nfunction getToken() {\n try { const s = localStorage.getItem('thalamus_auth'); return s ? JSON.parse(s) : null } catch { return null }\n}\n\nfunction getApiHeaders(apiKey?: string) {\n const headers: Record<string, string> = {}\n if (apiKey) headers['x-api-key'] = apiKey\n const auth = getToken()\n if (auth?.accessToken) headers['Authorization'] = `Bearer ${auth.accessToken}`\n if (auth?.user?.organization_id) headers['x-zea-org-id'] = auth.user.organization_id\n return headers\n}\n\nfunction Handle({ p, w, setW, min, max, dir=1 }: { p:string; w:number; setW:(v:number)=>void; min:number; max:number; dir?:1|-1 }) {\n const down = (e: React.MouseEvent) => { e.preventDefault(); const sx=e.clientX, sw=w; document.body.style.cursor='col-resize'; document.body.style.userSelect='none'\n const mv = (ev:MouseEvent) => { setW(Math.min(max, Math.max(min, sw+(ev.clientX-sx)*dir))) }\n const up = () => { document.body.style.cursor=''; document.body.style.userSelect=''; document.removeEventListener('mousemove',mv); document.removeEventListener('mouseup',up); try{localStorage.setItem(p,String(w))}catch{} }\n document.addEventListener('mousemove',mv); document.addEventListener('mouseup',up) }\n return <div onMouseDown={down} className=\"cr-handle\" />\n}\n"]}
|
package/dist/index.js
CHANGED
|
@@ -498,7 +498,7 @@ function Content({ piece, rv, toggle, config }) {
|
|
|
498
498
|
const headers = getApiHeaders(config.apiKey);
|
|
499
499
|
const auth = getToken();
|
|
500
500
|
let url = piece.url;
|
|
501
|
-
if (url.includes("auth.zea.
|
|
501
|
+
if (url.includes("auth.zea.cl/api/users") && auth?.user?.organization_id) {
|
|
502
502
|
url += (url.includes("?") ? "&" : "?") + "organization_id=" + auth.user.organization_id;
|
|
503
503
|
}
|
|
504
504
|
fetch(url, { headers }).then((r) => {
|