@robosystems/report-components 0.1.3 → 0.2.0
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/dist/adapters/index.d.ts +1 -1
- package/dist/adapters/index.js +1 -1
- package/dist/chunk-POSLHOTN.js +564 -0
- package/dist/chunk-POSLHOTN.js.map +1 -0
- package/dist/{index-DDFpPfUd.d.ts → index-D6FzPTm5.d.ts} +77 -13
- package/dist/index.d.ts +27 -3
- package/dist/index.js +185 -50
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/chunk-JTTICHPF.js +0 -273
- package/dist/chunk-JTTICHPF.js.map +0 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/format.ts","../src/project.ts","../src/components/FactInspector.tsx","../src/components/StatementTable.tsx","../src/components/ReportView.tsx"],"names":["styles","jsxs","jsx"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Pure formatting helpers shared by the projection and the components. No React\n * here, so the projection can depend on it without pulling in a renderer.\n */\nimport type { PeriodInfo } from './model'\n\n/**\n * Accounting-style money: negatives in parentheses, no sign, an em-dash for\n * absent values. Matches the RoboLedger statement renderer.\n */\nexport function formatMoney(\n value: number | null | undefined,\n opts: { currencySymbol?: string } = {}\n): string {\n if (value === null || value === undefined || Number.isNaN(value)) return '—'\n const symbol = opts.currencySymbol ?? '$'\n const abs = Math.abs(value).toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })\n return value < 0 ? `${symbol}(${abs})` : `${symbol}${abs}`\n}\n\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\n/** `2024-03-31` → `Mar 31, 2024`. Falls back to the raw string if unparseable. */\nexport function formatDate(iso: string | null | undefined): string {\n if (!iso) return ''\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(iso)\n if (!m) return iso\n const [, year, month, day] = m\n const idx = Number(month) - 1\n return `${MONTHS[idx] ?? month} ${Number(day)}, ${year}`\n}\n\n/** A human description of a period — \"As of …\" for instants, a span for durations. */\nexport function formatPeriod(period: PeriodInfo): string {\n if (period.type === 'instant') {\n return `As of ${formatDate(period.instant ?? period.end)}`\n }\n return `${formatDate(period.startDate)} – ${formatDate(period.endDate ?? period.end)}`\n}\n","/**\n * Reconstruction: a `NormalizedReport` → renderable `Statement`s.\n *\n * This is the source-agnostic half of the library — the part that is identical\n * for every adapter. It is a TypeScript port of the RoboSystems platform's\n * DataBook converter:\n *\n * - **presentation walk** — a post-order DFS of the presentation network, so a\n * total renders *after* its components (cash + receivables … then *Assets,\n * Current*; the section subtotals last). `order` is the flattened post-order\n * position; `depth` is the tree depth (drives indentation).\n * - **subtotal detection** — a concept is a subtotal iff it is a *calculation\n * parent*. A presentation leaf can still be a subtotal (Gross Profit is a\n * presentation sibling but a calculation parent), so bolding off the calc\n * tree marks exactly the right rows.\n * - **table projection** — collect a block's facts by `factSet`, key by\n * element, derive period columns from the facts themselves, lay rows out in\n * presentation order.\n */\nimport { BLOCK_ORDER, BLOCK_TITLES, humanize, qname } from './constants'\nimport { formatDate } from './format'\nimport type {\n CalcAssociation,\n ElementInfo,\n Fact,\n InformationBlock,\n NormalizedReport,\n PeriodInfo,\n RowCell,\n Statement,\n StatementColumn,\n StatementRow,\n StructureInfo,\n} from './model'\n\ninterface OrderEntry {\n order: number\n depth: number\n}\n\nfunction fallbackElement(id: string): ElementInfo {\n return {\n id,\n qname: qname(id),\n label: humanize(id),\n balance: null,\n periodType: null,\n abstract: false,\n monetary: false,\n }\n}\n\n/**\n * Post-order the presentation arcs of one structure → `{element: {order, depth}}`.\n * Roots (a `from` that is never a `to`) are visited by their subtree's leading\n * arc order, so a balance sheet's roots (Assets, then Liabilities and Equity)\n * come out in the right sequence.\n */\nexport function presentationOrder(\n model: NormalizedReport,\n structureId: string\n): Map<string, OrderEntry> {\n const children = new Map<string, Array<[number, string]>>()\n const froms = new Set<string>()\n const tos = new Set<string>()\n\n for (const assoc of model.presAssociations) {\n if (assoc.structure !== structureId) continue\n const kids = children.get(assoc.parent) ?? []\n kids.push([assoc.order, assoc.child])\n children.set(assoc.parent, kids)\n froms.add(assoc.parent)\n tos.add(assoc.child)\n }\n for (const kids of children.values()) {\n kids.sort((a, b) => a[0] - b[0])\n }\n\n const out = new Map<string, OrderEntry>()\n const seen = new Set<string>()\n let counter = 0\n\n const walk = (node: string, depth: number): void => {\n if (seen.has(node)) return\n seen.add(node)\n for (const [, child] of children.get(node) ?? []) {\n walk(child, depth + 1)\n }\n out.set(node, { order: counter, depth })\n counter += 1\n }\n\n const rootKey = (root: string): number => {\n const kids = children.get(root)\n return kids && kids.length ? kids[0][0] : 0\n }\n\n const roots = [...froms].filter((f) => !tos.has(f)).sort((a, b) => rootKey(a) - rootKey(b))\n for (const root of roots) walk(root, 0)\n return out\n}\n\n/** Concepts that are calculation parents — the authoritative subtotal set. */\nexport function calcSubtotals(model: NormalizedReport): Set<string> {\n const out = new Set<string>()\n for (const assoc of model.calcAssociations) out.add(assoc.parent)\n return out\n}\n\nfunction structureForBlock(model: NormalizedReport, blockType: string): StructureInfo | null {\n return model.structures.find((s) => s.blockType === blockType) ?? null\n}\n\nfunction columnLabel(period: PeriodInfo): string {\n return formatDate(period.end)\n}\n\n/** Period columns derived from the facts in one block, keyed and sorted by end. */\nfunction deriveColumns(model: NormalizedReport, facts: Fact[]): StatementColumn[] {\n const byEnd = new Map<string, PeriodInfo>()\n for (const fact of facts) {\n const period = model.periods[fact.period]\n if (!period || !period.end) continue\n const existing = byEnd.get(period.end)\n // Prefer a duration as the column representative — it carries the span.\n if (!existing || (existing.type === 'instant' && period.type === 'duration')) {\n byEnd.set(period.end, period)\n }\n }\n return [...byEnd.values()]\n .sort((a, b) => {\n const aStart = a.startDate ?? a.end\n const bStart = b.startDate ?? b.end\n return aStart.localeCompare(bStart) || a.end.localeCompare(b.end)\n })\n .map((period) => ({ key: period.end, label: columnLabel(period), period }))\n}\n\nfunction buildStatement(\n model: NormalizedReport,\n ib: InformationBlock,\n subtotals: Set<string>\n): Statement {\n const structure = structureForBlock(model, ib.blockType)\n const order = structure ? presentationOrder(model, structure.id) : new Map<string, OrderEntry>()\n\n const facts = model.facts.filter((f) => f.factSet !== null && f.factSet === ib.factSet)\n const columns = deriveColumns(model, facts)\n const colIndex = new Map(columns.map((c, i) => [c.key, i]))\n\n const cellsByElement = new Map<string, RowCell[]>()\n for (const fact of facts) {\n const period = model.periods[fact.period]\n if (!period) continue\n const idx = colIndex.get(period.end)\n if (idx === undefined) continue\n let cells = cellsByElement.get(fact.element)\n if (!cells) {\n cells = columns.map(() => ({ value: null, fact: null }))\n cellsByElement.set(fact.element, cells)\n }\n cells[idx] = { value: fact.value, fact }\n }\n\n const rows: StatementRow[] = [...cellsByElement.keys()]\n .map((id) => {\n const entry = order.get(id)\n return {\n id,\n order: entry ? entry.order : Number.MAX_SAFE_INTEGER,\n depth: entry ? entry.depth : 0,\n }\n })\n .sort((a, b) => a.order - b.order || a.id.localeCompare(b.id))\n .map(({ id, depth }) => ({\n element: model.elements[id] ?? fallbackElement(id),\n depth,\n isSubtotal: subtotals.has(id),\n cells: cellsByElement.get(id) as RowCell[],\n }))\n\n return {\n ib,\n blockType: ib.blockType,\n title: BLOCK_TITLES[ib.blockType] ?? ib.label ?? ib.blockType,\n structureName: structure?.structureName ?? ib.label ?? null,\n columns,\n rows,\n }\n}\n\n/** Reconstruct every statement in the report, in canonical block order. */\nexport function buildStatements(model: NormalizedReport): Statement[] {\n const subtotals = calcSubtotals(model)\n return [...model.informationBlocks]\n .sort(\n (a, b) =>\n (BLOCK_ORDER[a.blockType] ?? 99) - (BLOCK_ORDER[b.blockType] ?? 99) ||\n a.blockType.localeCompare(b.blockType)\n )\n .map((ib) => buildStatement(model, ib, subtotals))\n}\n\n// ── Footing check ────────────────────────────────────────────────────────────\n\nexport interface FootTerm {\n element: ElementInfo\n weight: number\n value: number | null\n}\n\nexport interface FootCheck {\n element: ElementInfo\n columnIndex: number\n terms: FootTerm[]\n /** Σ child·weight over the present terms, or null if none are present. */\n expected: number | null\n /** The subtotal's own reported value in this column. */\n actual: number | null\n ok: boolean\n}\n\n/**\n * Foot a subtotal live: sum its calculation children (× weight) and compare to\n * its reported value, e.g. `13,550 + 900 = 14,450 ✓`. Returns `null` when the\n * element is not a calculation parent (nothing to foot).\n */\nexport function footCheck(\n model: NormalizedReport,\n statement: Statement,\n elementId: string,\n columnIndex: number\n): FootCheck | null {\n const kids: CalcAssociation[] = model.calcAssociations.filter((a) => a.parent === elementId)\n if (!kids.length) return null\n\n const valueOf = (id: string): number | null => {\n const row = statement.rows.find((r) => r.element.id === id)\n return row ? (row.cells[columnIndex]?.value ?? null) : null\n }\n\n const terms: FootTerm[] = kids\n .slice()\n .sort((a, b) => a.order - b.order)\n .map((a) => ({\n element: model.elements[a.child] ?? fallbackElement(a.child),\n weight: a.weight,\n value: valueOf(a.child),\n }))\n\n const present = terms.filter((t) => t.value !== null)\n const expected = present.length\n ? present.reduce((sum, t) => sum + (t.value as number) * t.weight, 0)\n : null\n const actual = valueOf(elementId)\n const ok = expected !== null && actual !== null && Math.abs(expected - actual) < 0.005\n\n return {\n element: model.elements[elementId] ?? fallbackElement(elementId),\n columnIndex,\n terms,\n expected,\n actual,\n ok,\n }\n}\n","/**\n * Click-a-fact inspection: the selected cell's element / period / unit, plus —\n * when the element is a calculation subtotal — the calculation rule it foots,\n * computed live in the browser (`13,550 + 900 = 14,450 ✓`).\n */\nimport type { CSSProperties, ReactNode } from 'react'\nimport { formatMoney, formatPeriod } from '../format'\nimport type { NormalizedReport, Statement, StatementRow } from '../model'\nimport { footCheck } from '../project'\n\nexport interface FactInspectorProps {\n report: NormalizedReport\n statement: Statement\n row: StatementRow\n columnIndex: number\n onClose?: () => void\n currencySymbol?: string\n}\n\nconst styles: Record<string, CSSProperties> = {\n panel: {\n fontFamily: 'var(--rs-font-sans, ui-sans-serif, system-ui, sans-serif)',\n color: 'var(--rs-text, #111827)',\n border: '1px solid var(--rs-border, #e5e7eb)',\n borderRadius: '12px',\n padding: '1rem 1.25rem',\n background: 'var(--rs-panel-bg, #ffffff)',\n boxShadow: '0 1px 3px rgba(0,0,0,0.08)',\n },\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n gap: '1rem',\n marginBottom: '0.75rem',\n },\n label: { fontSize: '1rem', fontWeight: 700, margin: 0 },\n qname: {\n fontFamily: 'var(--rs-font-mono, ui-monospace, monospace)',\n fontSize: '0.8rem',\n color: 'var(--rs-primary-700, #1d4ed8)',\n },\n close: {\n border: 'none',\n background: 'transparent',\n fontSize: '1.25rem',\n lineHeight: 1,\n cursor: 'pointer',\n color: 'var(--rs-muted, #6b7280)',\n },\n grid: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gap: '0.35rem 1rem',\n fontSize: '0.85rem',\n margin: '0.5rem 0',\n },\n key: { color: 'var(--rs-muted, #6b7280)' },\n mono: { fontFamily: 'var(--rs-font-mono, ui-monospace, monospace)' },\n footing: {\n marginTop: '0.85rem',\n paddingTop: '0.75rem',\n borderTop: '1px solid var(--rs-border, #e5e7eb)',\n },\n footTitle: {\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--rs-muted, #6b7280)',\n marginBottom: '0.4rem',\n },\n equation: {\n fontFamily: 'var(--rs-font-mono, ui-monospace, monospace)',\n fontSize: '0.85rem',\n lineHeight: 1.6,\n },\n}\n\nfunction Field({ k, children }: { k: string; children: ReactNode }) {\n return (\n <>\n <span style={styles.key}>{k}</span>\n <span>{children}</span>\n </>\n )\n}\n\nexport function FactInspector({\n report,\n statement,\n row,\n columnIndex,\n onClose,\n currencySymbol = '$',\n}: FactInspectorProps) {\n const { element } = row\n const cell = row.cells[columnIndex]\n const column = statement.columns[columnIndex]\n const unit = cell.fact?.unit ? report.units[cell.fact.unit] : null\n const foot = footCheck(report, statement, element.id, columnIndex)\n const sym = currencySymbol\n\n return (\n <div style={styles.panel}>\n <div style={styles.header}>\n <div>\n <p style={styles.label}>{element.label}</p>\n <span style={styles.qname}>{element.qname}</span>\n </div>\n {onClose ? (\n <button style={styles.close} onClick={onClose} aria-label=\"Close\">\n ×\n </button>\n ) : null}\n </div>\n\n <div style={styles.grid}>\n <Field k=\"Value\">\n <span style={styles.mono}>{formatMoney(cell.value, { currencySymbol: sym })}</span>\n </Field>\n <Field k=\"Period\">\n {formatPeriod(column.period)} <span style={styles.key}>({column.period.type})</span>\n </Field>\n <Field k=\"Unit\">{unit ? unit.label : '—'}</Field>\n {element.balance ? <Field k=\"Balance\">{element.balance}</Field> : null}\n {cell.fact?.decimals ? <Field k=\"Decimals\">{cell.fact.decimals}</Field> : null}\n </div>\n\n {foot ? (\n <div style={styles.footing}>\n <div style={styles.footTitle}>Calculation {foot.ok ? '✓ foots' : '⚠ does not foot'}</div>\n <div style={styles.equation}>\n {foot.terms.map((term, i) => {\n const op = i === 0 ? (term.weight < 0 ? '−' : '') : term.weight < 0 ? ' − ' : ' + '\n return (\n <span key={term.element.id} title={term.element.qname}>\n {op}\n {formatMoney(term.value === null ? 0 : Math.abs(term.value), {\n currencySymbol: sym,\n })}\n </span>\n )\n })}\n {' = '}\n <strong>{formatMoney(foot.expected, { currencySymbol: sym })}</strong>{' '}\n {foot.ok ? (\n <span style={{ color: 'var(--rs-success, #00875a)' }}>✓</span>\n ) : (\n <span style={{ color: 'var(--rs-error, #dc2626)' }}>\n ✗ (reported {formatMoney(foot.actual, { currencySymbol: sym })})\n </span>\n )}\n </div>\n </div>\n ) : null}\n </div>\n )\n}\n","/**\n * Renders one reconstructed `Statement` as a financial-statement table.\n *\n * Framework-agnostic plain React — no `next/*`, no CSS framework required. Styled\n * with inline styles that read CSS custom properties (`--rs-*`) so a host app can\n * theme it, with sensible RoboSystems defaults baked in as fallbacks.\n */\nimport type { CSSProperties } from 'react'\nimport { formatMoney, formatPeriod } from '../format'\nimport type { Statement, StatementRow } from '../model'\n\nexport interface StatementTableProps {\n statement: Statement\n /** Called when a value cell is clicked — drives fact inspection. */\n onCellClick?: (row: StatementRow, columnIndex: number) => void\n /** Currency symbol for values (default `$`). */\n currencySymbol?: string\n /** The currently-selected cell, highlighted. */\n selected?: { elementId: string; columnIndex: number } | null\n}\n\nconst styles: Record<string, CSSProperties> = {\n wrap: {\n fontFamily: 'var(--rs-font-sans, ui-sans-serif, system-ui, sans-serif)',\n color: 'var(--rs-text, #111827)',\n marginBottom: '2.5rem',\n },\n heading: {\n textAlign: 'center',\n marginBottom: '1rem',\n },\n title: {\n fontFamily: 'var(--rs-font-heading, var(--rs-font-sans, sans-serif))',\n fontSize: '1.15rem',\n fontWeight: 700,\n letterSpacing: '0.02em',\n margin: 0,\n },\n subtitle: {\n fontSize: '0.85rem',\n color: 'var(--rs-muted, #6b7280)',\n marginTop: '0.25rem',\n },\n table: {\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '0.875rem',\n },\n th: {\n borderBottom: '2px solid var(--rs-border-strong, #9ca3af)',\n padding: '0.5rem 0.75rem',\n fontWeight: 600,\n color: 'var(--rs-muted, #6b7280)',\n fontSize: '0.8rem',\n },\n thConcept: { textAlign: 'left' },\n thNum: { textAlign: 'right', whiteSpace: 'nowrap' },\n labelCell: {\n padding: '0.3rem 0.75rem',\n whiteSpace: 'normal',\n },\n numCell: {\n padding: '0.3rem 0.75rem',\n textAlign: 'right',\n whiteSpace: 'nowrap',\n fontFamily: 'var(--rs-font-mono, ui-monospace, SFMono-Regular, monospace)',\n fontVariantNumeric: 'tabular-nums',\n },\n}\n\nexport function StatementTable({\n statement,\n onCellClick,\n currencySymbol = '$',\n selected = null,\n}: StatementTableProps) {\n const { columns, rows } = statement\n const periodCaption = columns.length === 1 ? formatPeriod(columns[0].period) : null\n\n return (\n <section style={styles.wrap}>\n <header style={styles.heading}>\n <h3 style={styles.title}>{statement.title}</h3>\n {statement.structureName ? (\n <div style={styles.subtitle}>{statement.structureName}</div>\n ) : null}\n {periodCaption ? <div style={styles.subtitle}>{periodCaption}</div> : null}\n </header>\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={{ ...styles.th, ...styles.thConcept }}>Concept</th>\n {columns.map((col) => (\n <th key={col.key} style={{ ...styles.th, ...styles.thNum }}>\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => {\n const isGrandTotal = row.isSubtotal && row.depth === 0\n const allZeroOrNull = row.cells.every((c) => c.value === null || c.value === 0)\n const rowStyle: CSSProperties = {\n backgroundColor: row.isSubtotal ? 'var(--rs-subtotal-bg, #f9fafb)' : undefined,\n }\n const labelStyle: CSSProperties = {\n ...styles.labelCell,\n paddingLeft: `${row.depth * 20 + 12}px`,\n fontWeight: row.isSubtotal ? 600 : 400,\n color: !row.isSubtotal && allZeroOrNull ? 'var(--rs-muted, #9ca3af)' : undefined,\n borderBottom: isGrandTotal ? '3px double var(--rs-text, #111827)' : undefined,\n }\n return (\n <tr key={row.element.id} style={rowStyle}>\n <td style={labelStyle} title={row.element.qname}>\n {row.element.label}\n </td>\n {row.cells.map((cell, i) => {\n const isSelected =\n selected !== null &&\n selected.elementId === row.element.id &&\n selected.columnIndex === i\n const clickable = onCellClick && cell.fact !== null\n const numStyle: CSSProperties = {\n ...styles.numCell,\n fontWeight: row.isSubtotal ? 600 : 400,\n borderBottom: isGrandTotal ? '3px double var(--rs-text, #111827)' : undefined,\n cursor: clickable ? 'pointer' : 'default',\n backgroundColor: isSelected ? 'var(--rs-selected-bg, #dbeafe)' : undefined,\n color:\n !row.isSubtotal && (cell.value === null || cell.value === 0)\n ? 'var(--rs-muted, #9ca3af)'\n : undefined,\n }\n return (\n <td\n key={columns[i].key}\n style={numStyle}\n onClick={clickable ? () => onCellClick?.(row, i) : undefined}\n >\n {formatMoney(cell.value, { currencySymbol })}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </section>\n )\n}\n","/**\n * Top-level renderer: a `NormalizedReport` → the entity header, every statement,\n * and an inline fact inspector wired to cell selection. This is the one\n * component a consuming app typically renders.\n */\nimport type { CSSProperties } from 'react'\nimport { useMemo, useState } from 'react'\nimport type { NormalizedReport, StatementRow } from '../model'\nimport { buildStatements } from '../project'\nimport { FactInspector } from './FactInspector'\nimport { StatementTable } from './StatementTable'\n\nexport interface ReportViewProps {\n report: NormalizedReport\n currencySymbol?: string\n /** Disable the click-to-inspect fact panel (render-only). */\n inspect?: boolean\n}\n\ninterface Selection {\n statementIndex: number\n elementId: string\n columnIndex: number\n}\n\nconst styles: Record<string, CSSProperties> = {\n layout: {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\n gap: '1.5rem',\n alignItems: 'start',\n },\n layoutWithPanel: {\n gridTemplateColumns: 'minmax(0, 1fr) 340px',\n },\n entity: {\n fontFamily: 'var(--rs-font-heading, var(--rs-font-sans, sans-serif))',\n textAlign: 'center',\n marginBottom: '1.5rem',\n },\n entityName: {\n fontSize: '1.5rem',\n fontWeight: 700,\n margin: 0,\n color: 'var(--rs-text, #111827)',\n },\n entitySub: { fontSize: '0.85rem', color: 'var(--rs-muted, #6b7280)' },\n panel: { position: 'sticky', top: '1rem' },\n}\n\nexport function ReportView({ report, currencySymbol = '$', inspect = true }: ReportViewProps) {\n const statements = useMemo(() => buildStatements(report), [report])\n const [selection, setSelection] = useState<Selection | null>(null)\n\n const selected = selection !== null ? statements[selection.statementIndex] : null\n const selectedRow = selected?.rows.find((r) => r.element.id === selection?.elementId) ?? null\n\n return (\n <div>\n {report.entity ? (\n <header style={styles.entity}>\n <h2 style={styles.entityName}>{report.entity.name}</h2>\n {report.entity.country ? (\n <div style={styles.entitySub}>{report.entity.country}</div>\n ) : null}\n </header>\n ) : null}\n\n <div\n style={{\n ...styles.layout,\n ...(inspect && selectedRow ? styles.layoutWithPanel : {}),\n }}\n >\n <div>\n {statements.map((statement, statementIndex) => (\n <StatementTable\n key={statement.ib.id}\n statement={statement}\n currencySymbol={currencySymbol}\n selected={\n selection && selection.statementIndex === statementIndex\n ? {\n elementId: selection.elementId,\n columnIndex: selection.columnIndex,\n }\n : null\n }\n onCellClick={\n inspect\n ? (row: StatementRow, columnIndex: number) =>\n setSelection({\n statementIndex,\n elementId: row.element.id,\n columnIndex,\n })\n : undefined\n }\n />\n ))}\n </div>\n\n {inspect && selected && selectedRow && selection ? (\n <div style={styles.panel}>\n <FactInspector\n report={report}\n statement={selected}\n row={selectedRow}\n columnIndex={selection.columnIndex}\n currencySymbol={currencySymbol}\n onClose={() => setSelection(null)}\n />\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/format.ts","../src/project.ts","../src/components/ExternalTextBlock.tsx","../src/components/FactInspector.tsx","../src/components/StatementTable.tsx","../src/components/ReportView.tsx"],"names":["styles","jsxs","jsx","useState"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * Pure formatting helpers shared by the projection and the components. No React\n * here, so the projection can depend on it without pulling in a renderer.\n */\nimport type { PeriodInfo } from './model'\n\n/**\n * Accounting-style money: negatives in parentheses, no sign, an em-dash for\n * absent values. Matches the RoboLedger statement renderer.\n */\nexport function formatMoney(\n value: number | null | undefined,\n opts: { currencySymbol?: string } = {}\n): string {\n if (value === null || value === undefined || Number.isNaN(value)) return '—'\n const symbol = opts.currencySymbol ?? '$'\n const abs = Math.abs(value).toLocaleString('en-US', {\n minimumFractionDigits: 2,\n maximumFractionDigits: 2,\n })\n return value < 0 ? `${symbol}(${abs})` : `${symbol}${abs}`\n}\n\nconst MONTHS = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']\n\n/** `2024-03-31` → `Mar 31, 2024`. Falls back to the raw string if unparseable. */\nexport function formatDate(iso: string | null | undefined): string {\n if (!iso) return ''\n const m = /^(\\d{4})-(\\d{2})-(\\d{2})/.exec(iso)\n if (!m) return iso\n const [, year, month, day] = m\n const idx = Number(month) - 1\n return `${MONTHS[idx] ?? month} ${Number(day)}, ${year}`\n}\n\n/** A human description of a period — \"As of …\" for instants, a span for durations. */\nexport function formatPeriod(period: PeriodInfo): string {\n if (period.type === 'instant') {\n return `As of ${formatDate(period.instant ?? period.end)}`\n }\n return `${formatDate(period.startDate)} – ${formatDate(period.endDate ?? period.end)}`\n}\n","/**\n * Reconstruction: a `NormalizedReport` → renderable `Statement`s.\n *\n * This is the source-agnostic half of the library — the part that is identical\n * for every adapter. It is a TypeScript port of the RoboSystems platform's\n * DataBook converter:\n *\n * - **presentation walk** — a post-order DFS of the presentation network, so a\n * total renders *after* its components (cash + receivables … then *Assets,\n * Current*; the section subtotals last). `order` is the flattened post-order\n * position; `depth` is the tree depth (drives indentation).\n * - **subtotal detection** — a concept is a subtotal iff it is a *calculation\n * parent*. A presentation leaf can still be a subtotal (Gross Profit is a\n * presentation sibling but a calculation parent), so bolding off the calc\n * tree marks exactly the right rows.\n * - **table projection** — collect a block's facts by `factSet`, key by\n * element, derive period columns from the facts themselves, lay rows out in\n * presentation order.\n */\nimport { BLOCK_ORDER, BLOCK_TITLES, humanize, qname } from './constants'\nimport { formatDate } from './format'\nimport type {\n CalcAssociation,\n ElementInfo,\n Fact,\n InformationBlock,\n NormalizedReport,\n PeriodInfo,\n RowCell,\n Statement,\n StatementColumn,\n StatementRow,\n StructureInfo,\n} from './model'\n\ninterface OrderEntry {\n order: number\n depth: number\n}\n\nfunction fallbackElement(id: string): ElementInfo {\n return {\n id,\n qname: qname(id),\n label: humanize(id),\n balance: null,\n periodType: null,\n abstract: false,\n monetary: false,\n }\n}\n\n/**\n * Post-order the presentation arcs of one structure → `{element: {order, depth}}`.\n * Roots (a `from` that is never a `to`) are visited by their subtree's leading\n * arc order, so a balance sheet's roots (Assets, then Liabilities and Equity)\n * come out in the right sequence.\n */\nexport function presentationOrder(\n model: NormalizedReport,\n structureId: string\n): Map<string, OrderEntry> {\n const children = new Map<string, Array<[number, string]>>()\n const froms = new Set<string>()\n const tos = new Set<string>()\n\n for (const assoc of model.presAssociations) {\n if (assoc.structure !== structureId) continue\n const kids = children.get(assoc.parent) ?? []\n kids.push([assoc.order, assoc.child])\n children.set(assoc.parent, kids)\n froms.add(assoc.parent)\n tos.add(assoc.child)\n }\n for (const kids of children.values()) {\n kids.sort((a, b) => a[0] - b[0])\n }\n\n const out = new Map<string, OrderEntry>()\n const seen = new Set<string>()\n let counter = 0\n\n const walk = (node: string, depth: number): void => {\n if (seen.has(node)) return\n seen.add(node)\n for (const [, child] of children.get(node) ?? []) {\n walk(child, depth + 1)\n }\n out.set(node, { order: counter, depth })\n counter += 1\n }\n\n const rootKey = (root: string): number => {\n const kids = children.get(root)\n return kids && kids.length ? kids[0][0] : 0\n }\n\n const roots = [...froms].filter((f) => !tos.has(f)).sort((a, b) => rootKey(a) - rootKey(b))\n for (const root of roots) walk(root, 0)\n return out\n}\n\n/** Concepts that are calculation parents — the authoritative subtotal set. */\nexport function calcSubtotals(model: NormalizedReport): Set<string> {\n const out = new Set<string>()\n for (const assoc of model.calcAssociations) out.add(assoc.parent)\n return out\n}\n\n/**\n * The structure supplying a block's networks. An Information Block with a\n * `structureId` (the SEC adapter) resolves by identity — a filing has many\n * structures, several sharing one `blockType` (balance sheet main + parenthetical),\n * so identity is the only unambiguous link. The holon/file path has no\n * `structureId` and matches by `blockType` (one structure per canonical block).\n */\nfunction structureForBlock(model: NormalizedReport, ib: InformationBlock): StructureInfo | null {\n if (ib.structureId) {\n const byId = model.structures.find((s) => s.id === ib.structureId)\n if (byId) return byId\n }\n return model.structures.find((s) => s.blockType === ib.blockType) ?? null\n}\n\n/** Ordering key for a block: its structure's filing sequence, else the canonical order. */\nfunction blockOrder(model: NormalizedReport, ib: InformationBlock): number {\n if (ib.structureId) {\n const s = model.structures.find((x) => x.id === ib.structureId)\n if (s?.order !== undefined) return s.order\n }\n return BLOCK_ORDER[ib.blockType] ?? 99\n}\n\nfunction columnLabel(period: PeriodInfo): string {\n return formatDate(period.end)\n}\n\n/** Period columns derived from the facts in one block, keyed and sorted by end. */\nfunction deriveColumns(model: NormalizedReport, facts: Fact[]): StatementColumn[] {\n const byEnd = new Map<string, PeriodInfo>()\n for (const fact of facts) {\n const period = model.periods[fact.period]\n if (!period || !period.end) continue\n const existing = byEnd.get(period.end)\n // Prefer a duration as the column representative — it carries the span.\n if (!existing || (existing.type === 'instant' && period.type === 'duration')) {\n byEnd.set(period.end, period)\n }\n }\n return [...byEnd.values()]\n .sort((a, b) => {\n const aStart = a.startDate ?? a.end\n const bStart = b.startDate ?? b.end\n return aStart.localeCompare(bStart) || a.end.localeCompare(b.end)\n })\n .map((period) => ({ key: period.end, label: columnLabel(period), period }))\n}\n\nfunction buildStatement(\n model: NormalizedReport,\n ib: InformationBlock,\n subtotals: Set<string>\n): Statement {\n const structure = structureForBlock(model, ib)\n const order = structure ? presentationOrder(model, structure.id) : new Map<string, OrderEntry>()\n\n const facts = model.facts.filter((f) => f.factSet !== null && f.factSet === ib.factSet)\n const columns = deriveColumns(model, facts)\n const colIndex = new Map(columns.map((c, i) => [c.key, i]))\n\n const cellsByElement = new Map<string, RowCell[]>()\n for (const fact of facts) {\n const period = model.periods[fact.period]\n if (!period) continue\n const idx = colIndex.get(period.end)\n if (idx === undefined) continue\n let cells = cellsByElement.get(fact.element)\n if (!cells) {\n cells = columns.map(() => ({ value: null, fact: null, textValue: null }))\n cellsByElement.set(fact.element, cells)\n }\n cells[idx] = { value: fact.value, fact, textValue: fact.textValue ?? null }\n }\n\n const rows: StatementRow[] = [...cellsByElement.keys()]\n .map((id) => {\n const entry = order.get(id)\n return {\n id,\n order: entry ? entry.order : Number.MAX_SAFE_INTEGER,\n depth: entry ? entry.depth : 0,\n }\n })\n .sort((a, b) => a.order - b.order || a.id.localeCompare(b.id))\n .map(({ id, depth }) => ({\n element: model.elements[id] ?? fallbackElement(id),\n depth,\n isSubtotal: subtotals.has(id),\n cells: cellsByElement.get(id) as RowCell[],\n }))\n\n // A block linked to a specific structure (SEC) titles itself from that\n // structure's name — \"Consolidated Balance Sheets\", distinct from its\n // \"(Parenthetical)\" sibling — rather than the generic canonical heading.\n const title = ib.structureId\n ? (structure?.structureName ?? ib.label ?? BLOCK_TITLES[ib.blockType] ?? ib.blockType)\n : (BLOCK_TITLES[ib.blockType] ?? ib.label ?? ib.blockType)\n\n return {\n ib,\n blockType: ib.blockType,\n title,\n structureName: ib.structureId ? null : (structure?.structureName ?? ib.label ?? null),\n columns,\n rows,\n }\n}\n\n/** Section metadata (id + display title) for a report, in canonical order. */\nexport function reportSections(model: NormalizedReport): Array<{ id: string; title: string }> {\n return buildStatements(model).map((s) => ({ id: s.ib.id, title: s.title }))\n}\n\n/**\n * Narrow a whole report to a single section (one Information Block) so it can be\n * rendered on its own. `buildStatements` only iterates `informationBlocks`, so\n * restricting to one yields exactly that section — the facts, structures, and\n * networks stay intact because `buildStatement` filters them by the block.\n */\nexport function sliceReportSection(\n model: NormalizedReport,\n informationBlockId: string\n): NormalizedReport {\n const ib = model.informationBlocks.find((b) => b.id === informationBlockId)\n return { ...model, informationBlocks: ib ? [ib] : [] }\n}\n\n/** Reconstruct every statement in the report, in canonical block order. */\nexport function buildStatements(model: NormalizedReport): Statement[] {\n const subtotals = calcSubtotals(model)\n return [...model.informationBlocks]\n .sort(\n (a, b) =>\n blockOrder(model, a) - blockOrder(model, b) || a.blockType.localeCompare(b.blockType)\n )\n .map((ib) => buildStatement(model, ib, subtotals))\n}\n\n// ── Footing check ────────────────────────────────────────────────────────────\n\nexport interface FootTerm {\n element: ElementInfo\n weight: number\n value: number | null\n}\n\nexport interface FootCheck {\n element: ElementInfo\n columnIndex: number\n terms: FootTerm[]\n /** Σ child·weight over the present terms, or null if none are present. */\n expected: number | null\n /** The subtotal's own reported value in this column. */\n actual: number | null\n ok: boolean\n}\n\n/**\n * Foot a subtotal live: sum its calculation children (× weight) and compare to\n * its reported value, e.g. `13,550 + 900 = 14,450 ✓`. Returns `null` when the\n * element is not a calculation parent (nothing to foot).\n */\nexport function footCheck(\n model: NormalizedReport,\n statement: Statement,\n elementId: string,\n columnIndex: number\n): FootCheck | null {\n const kids: CalcAssociation[] = model.calcAssociations.filter((a) => a.parent === elementId)\n if (!kids.length) return null\n\n const valueOf = (id: string): number | null => {\n const row = statement.rows.find((r) => r.element.id === id)\n return row ? (row.cells[columnIndex]?.value ?? null) : null\n }\n\n const terms: FootTerm[] = kids\n .slice()\n .sort((a, b) => a.order - b.order)\n .map((a) => ({\n element: model.elements[a.child] ?? fallbackElement(a.child),\n weight: a.weight,\n value: valueOf(a.child),\n }))\n\n const present = terms.filter((t) => t.value !== null)\n const expected = present.length\n ? present.reduce((sum, t) => sum + (t.value as number) * t.weight, 0)\n : null\n const actual = valueOf(elementId)\n const ok = expected !== null && actual !== null && Math.abs(expected - actual) < 0.005\n\n return {\n element: model.elements[elementId] ?? fallbackElement(elementId),\n columnIndex,\n terms,\n expected,\n actual,\n ok,\n }\n}\n","/**\n * Renders an *externalized* text-block fact — a large XBRL narrative/table\n * disclosure whose HTML body the platform offloaded to the public CDN, leaving\n * the fact's value as a `…/fact_<hash>.html` (or `.txt`) URL.\n *\n * The CDN serves these with `Access-Control-Allow-Origin: *`, so the browser can\n * fetch the body directly (no proxy). HTML bodies are self-contained fragments\n * (inline styles, no scripts) rendered inside a **sandboxed** iframe: `srcdoc`\n * plus `sandbox=\"allow-same-origin\"` (note: no `allow-scripts`) means any script\n * in the payload is inert — XSS-safe — while the same-origin document stays\n * measurable so the frame auto-sizes to its content. Plain-text bodies render in\n * a `<pre>`.\n */\nimport type { CSSProperties } from 'react'\nimport { useEffect, useRef, useState } from 'react'\n\nexport interface ExternalTextBlockProps {\n url: string\n}\n\ntype LoadState = 'loading' | 'ready' | 'error'\n\nconst styles: Record<string, CSSProperties> = {\n status: {\n fontFamily: 'var(--rs-font-sans, ui-sans-serif, system-ui, sans-serif)',\n fontSize: '0.85rem',\n color: 'var(--rs-muted, #6b7280)',\n padding: '0.75rem 0',\n },\n link: { color: 'var(--rs-primary-700, #1d4ed8)' },\n frame: { width: '100%', border: 'none', display: 'block' },\n pre: {\n whiteSpace: 'pre-wrap',\n wordBreak: 'break-word',\n fontFamily: 'var(--rs-font-mono, ui-monospace, monospace)',\n fontSize: '0.85rem',\n color: 'var(--rs-text, #111827)',\n margin: 0,\n },\n}\n\n// A minimal host document: neutral typography, responsive media/tables, links\n// open in a new tab. The payload's own inline styles ride on top.\nfunction wrapHtml(body: string): string {\n return `<!doctype html><html><head><meta charset=\"utf-8\"><base target=\"_blank\"><style>\n :root { color-scheme: light; }\n body { margin: 0; color: #111827;\n font-family: ui-sans-serif, system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif;\n font-size: 13px; line-height: 1.45; }\n img, svg { max-width: 100%; height: auto; }\n table { max-width: 100%; border-collapse: collapse; }\n a { color: #1d4ed8; }\n </style></head><body>${body}</body></html>`\n}\n\nfunction SandboxedHtml({ html }: { html: string }) {\n const ref = useRef<HTMLIFrameElement>(null)\n\n // Size the frame to its content. Content is script-free and static, so a\n // measure on load (plus one after fonts/images settle) is enough.\n const fit = () => {\n const frame = ref.current\n const doc = frame?.contentWindow?.document\n if (!frame || !doc) return\n try {\n frame.style.height = `${doc.documentElement.scrollHeight}px`\n } catch {\n // Same-origin read blocked (shouldn't happen with allow-same-origin) — leave default.\n }\n }\n\n return (\n <iframe\n ref={ref}\n title=\"Disclosure\"\n sandbox=\"allow-same-origin\"\n srcDoc={wrapHtml(html)}\n style={styles.frame}\n onLoad={() => {\n fit()\n // Re-measure shortly after in case late layout (images/fonts) grew it.\n setTimeout(fit, 250)\n }}\n />\n )\n}\n\nexport function ExternalTextBlock({ url }: ExternalTextBlockProps) {\n const [state, setState] = useState<LoadState>('loading')\n const [body, setBody] = useState('')\n const isHtml = /\\.html$/i.test(url)\n\n useEffect(() => {\n let cancelled = false\n setState('loading')\n fetch(url)\n .then((r) => {\n if (!r.ok) throw new Error(`HTTP ${r.status}`)\n return r.text()\n })\n .then((text) => {\n if (cancelled) return\n setBody(text)\n setState('ready')\n })\n .catch(() => {\n if (!cancelled) setState('error')\n })\n return () => {\n cancelled = true\n }\n }, [url])\n\n if (state === 'loading') return <div style={styles.status}>Loading disclosure…</div>\n if (state === 'error') {\n return (\n <div style={styles.status}>\n Could not load this disclosure.{' '}\n <a style={styles.link} href={url} target=\"_blank\" rel=\"noreferrer\">\n Open it directly ↗\n </a>\n </div>\n )\n }\n if (!isHtml) return <pre style={styles.pre}>{body}</pre>\n return <SandboxedHtml html={body} />\n}\n","/**\n * Click-a-fact inspection: the selected cell's element / period / unit, plus —\n * when the element is a calculation subtotal — the calculation rule it foots,\n * computed live in the browser (`13,550 + 900 = 14,450 ✓`).\n */\nimport type { CSSProperties, ReactNode } from 'react'\nimport { formatMoney, formatPeriod } from '../format'\nimport type { NormalizedReport, Statement, StatementRow } from '../model'\nimport { footCheck } from '../project'\n\nexport interface FactInspectorProps {\n report: NormalizedReport\n statement: Statement\n row: StatementRow\n columnIndex: number\n onClose?: () => void\n currencySymbol?: string\n}\n\nconst styles: Record<string, CSSProperties> = {\n panel: {\n fontFamily: 'var(--rs-font-sans, ui-sans-serif, system-ui, sans-serif)',\n color: 'var(--rs-text, #111827)',\n border: '1px solid var(--rs-border, #e5e7eb)',\n borderRadius: '12px',\n padding: '1rem 1.25rem',\n background: 'var(--rs-panel-bg, #ffffff)',\n boxShadow: '0 1px 3px rgba(0,0,0,0.08)',\n },\n header: {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'flex-start',\n gap: '1rem',\n marginBottom: '0.75rem',\n },\n // `minWidth: 0` lets this flex child shrink below its content so the long\n // label / qname wrap inside the panel instead of overflowing it.\n headerText: { minWidth: 0 },\n label: { fontSize: '1rem', fontWeight: 700, margin: 0, overflowWrap: 'anywhere' },\n qname: {\n display: 'block',\n fontFamily: 'var(--rs-font-mono, ui-monospace, monospace)',\n fontSize: '0.8rem',\n color: 'var(--rs-primary-700, #1d4ed8)',\n // qnames are single unbroken tokens — break anywhere so they don't overflow.\n overflowWrap: 'anywhere',\n },\n close: {\n border: 'none',\n background: 'transparent',\n fontSize: '1.25rem',\n lineHeight: 1,\n cursor: 'pointer',\n color: 'var(--rs-muted, #6b7280)',\n },\n grid: {\n display: 'grid',\n gridTemplateColumns: 'auto 1fr',\n gap: '0.35rem 1rem',\n fontSize: '0.85rem',\n margin: '0.5rem 0',\n },\n key: { color: 'var(--rs-muted, #6b7280)' },\n mono: { fontFamily: 'var(--rs-font-mono, ui-monospace, monospace)' },\n footing: {\n marginTop: '0.85rem',\n paddingTop: '0.75rem',\n borderTop: '1px solid var(--rs-border, #e5e7eb)',\n },\n footTitle: {\n fontSize: '0.75rem',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n color: 'var(--rs-muted, #6b7280)',\n marginBottom: '0.4rem',\n },\n equation: {\n fontFamily: 'var(--rs-font-mono, ui-monospace, monospace)',\n fontSize: '0.85rem',\n lineHeight: 1.6,\n },\n}\n\nfunction Field({ k, children }: { k: string; children: ReactNode }) {\n return (\n <>\n <span style={styles.key}>{k}</span>\n <span>{children}</span>\n </>\n )\n}\n\nexport function FactInspector({\n report,\n statement,\n row,\n columnIndex,\n onClose,\n currencySymbol = '$',\n}: FactInspectorProps) {\n const { element } = row\n const cell = row.cells[columnIndex]\n const column = statement.columns[columnIndex]\n const unit = cell.fact?.unit ? report.units[cell.fact.unit] : null\n const foot = footCheck(report, statement, element.id, columnIndex)\n const sym = currencySymbol\n\n return (\n <div style={styles.panel}>\n <div style={styles.header}>\n <div style={styles.headerText}>\n <p style={styles.label}>{element.label}</p>\n <span style={styles.qname}>{element.qname}</span>\n </div>\n {onClose ? (\n <button style={styles.close} onClick={onClose} aria-label=\"Close\">\n ×\n </button>\n ) : null}\n </div>\n\n <div style={styles.grid}>\n <Field k=\"Value\">\n {cell.value === null && cell.textValue ? (\n <span>{cell.textValue}</span>\n ) : (\n <span style={styles.mono}>{formatMoney(cell.value, { currencySymbol: sym })}</span>\n )}\n </Field>\n <Field k=\"Period\">\n {formatPeriod(column.period)} <span style={styles.key}>({column.period.type})</span>\n </Field>\n <Field k=\"Unit\">{unit ? unit.label : '—'}</Field>\n {element.balance ? <Field k=\"Balance\">{element.balance}</Field> : null}\n {cell.fact?.decimals ? <Field k=\"Decimals\">{cell.fact.decimals}</Field> : null}\n </div>\n\n {foot ? (\n <div style={styles.footing}>\n <div style={styles.footTitle}>Calculation {foot.ok ? '✓ foots' : '⚠ does not foot'}</div>\n <div style={styles.equation}>\n {foot.terms.map((term, i) => {\n const op = i === 0 ? (term.weight < 0 ? '−' : '') : term.weight < 0 ? ' − ' : ' + '\n return (\n <span key={term.element.id} title={term.element.qname}>\n {op}\n {formatMoney(term.value === null ? 0 : Math.abs(term.value), {\n currencySymbol: sym,\n })}\n </span>\n )\n })}\n {' = '}\n <strong>{formatMoney(foot.expected, { currencySymbol: sym })}</strong>{' '}\n {foot.ok ? (\n <span style={{ color: 'var(--rs-success, #00875a)' }}>✓</span>\n ) : (\n <span style={{ color: 'var(--rs-error, #dc2626)' }}>\n ✗ (reported {formatMoney(foot.actual, { currencySymbol: sym })})\n </span>\n )}\n </div>\n </div>\n ) : null}\n </div>\n )\n}\n","/**\n * Renders one reconstructed `Statement` as a financial-statement table.\n *\n * Framework-agnostic plain React — no `next/*`, no CSS framework required. Styled\n * with inline styles that read CSS custom properties (`--rs-*`) so a host app can\n * theme it, with sensible RoboSystems defaults baked in as fallbacks.\n */\nimport type { CSSProperties } from 'react'\nimport { isExternalFactUrl } from '../constants'\nimport { formatMoney, formatPeriod } from '../format'\nimport type { Statement, StatementRow } from '../model'\nimport { ExternalTextBlock } from './ExternalTextBlock'\n\nexport interface StatementTableProps {\n statement: Statement\n /** Called when a value cell is clicked — drives fact inspection. */\n onCellClick?: (row: StatementRow, columnIndex: number) => void\n /** Currency symbol for values (default `$`). */\n currencySymbol?: string\n /** The currently-selected cell, highlighted. */\n selected?: { elementId: string; columnIndex: number } | null\n}\n\nconst styles: Record<string, CSSProperties> = {\n wrap: {\n fontFamily: 'var(--rs-font-sans, ui-sans-serif, system-ui, sans-serif)',\n color: 'var(--rs-text, #111827)',\n marginBottom: '2.5rem',\n },\n heading: {\n textAlign: 'center',\n marginBottom: '1rem',\n },\n title: {\n fontFamily: 'var(--rs-font-heading, var(--rs-font-sans, sans-serif))',\n fontSize: '1.15rem',\n fontWeight: 700,\n letterSpacing: '0.02em',\n margin: 0,\n },\n subtitle: {\n fontSize: '0.85rem',\n color: 'var(--rs-muted, #6b7280)',\n marginTop: '0.25rem',\n },\n table: {\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '0.875rem',\n },\n th: {\n borderBottom: '2px solid var(--rs-border-strong, #9ca3af)',\n padding: '0.5rem 0.75rem',\n fontWeight: 600,\n color: 'var(--rs-muted, #6b7280)',\n fontSize: '0.8rem',\n },\n thConcept: { textAlign: 'left' },\n thNum: { textAlign: 'right', whiteSpace: 'nowrap' },\n labelCell: {\n padding: '0.3rem 0.75rem',\n whiteSpace: 'normal',\n },\n numCell: {\n padding: '0.3rem 0.75rem',\n textAlign: 'right',\n whiteSpace: 'nowrap',\n fontFamily: 'var(--rs-font-mono, ui-monospace, SFMono-Regular, monospace)',\n fontVariantNumeric: 'tabular-nums',\n },\n textBlockCell: {\n padding: '0.75rem',\n borderTop: '1px solid var(--rs-border, #e5e7eb)',\n },\n textBlockLabel: {\n fontSize: '0.7rem',\n textTransform: 'uppercase',\n letterSpacing: '0.05em',\n fontWeight: 600,\n color: 'var(--rs-muted, #6b7280)',\n marginBottom: '0.5rem',\n },\n}\n\nexport function StatementTable({\n statement,\n onCellClick,\n currencySymbol = '$',\n selected = null,\n}: StatementTableProps) {\n const { columns, rows } = statement\n const periodCaption = columns.length === 1 ? formatPeriod(columns[0].period) : null\n\n return (\n <section style={styles.wrap}>\n <header style={styles.heading}>\n <h3 style={styles.title}>{statement.title}</h3>\n {statement.structureName ? (\n <div style={styles.subtitle}>{statement.structureName}</div>\n ) : null}\n {periodCaption ? <div style={styles.subtitle}>{periodCaption}</div> : null}\n </header>\n\n <table style={styles.table}>\n <thead>\n <tr>\n <th style={{ ...styles.th, ...styles.thConcept }}>Concept</th>\n {columns.map((col) => (\n <th key={col.key} style={{ ...styles.th, ...styles.thNum }}>\n {col.label}\n </th>\n ))}\n </tr>\n </thead>\n <tbody>\n {rows.map((row) => {\n // An externalized text-block / policy disclosure: render its fetched\n // HTML full-width instead of a URL squeezed into a value cell.\n const textBlock = row.cells.find(\n (c) => c.value === null && isExternalFactUrl(c.textValue)\n )\n if (textBlock?.textValue) {\n return (\n <tr key={row.element.id}>\n <td colSpan={columns.length + 1} style={styles.textBlockCell}>\n <div style={styles.textBlockLabel} title={row.element.qname}>\n {row.element.label}\n </div>\n <ExternalTextBlock url={textBlock.textValue} />\n </td>\n </tr>\n )\n }\n\n const isGrandTotal = row.isSubtotal && row.depth === 0\n const allZeroOrNull = row.cells.every((c) => c.value === null || c.value === 0)\n const rowStyle: CSSProperties = {\n backgroundColor: row.isSubtotal ? 'var(--rs-subtotal-bg, #f9fafb)' : undefined,\n }\n const labelStyle: CSSProperties = {\n ...styles.labelCell,\n paddingLeft: `${row.depth * 20 + 12}px`,\n fontWeight: row.isSubtotal ? 600 : 400,\n color: !row.isSubtotal && allZeroOrNull ? 'var(--rs-muted, #9ca3af)' : undefined,\n borderBottom: isGrandTotal ? '3px double var(--rs-text, #111827)' : undefined,\n }\n return (\n <tr key={row.element.id} style={rowStyle}>\n <td style={labelStyle} title={row.element.qname}>\n {row.element.label}\n </td>\n {row.cells.map((cell, i) => {\n const isSelected =\n selected !== null &&\n selected.elementId === row.element.id &&\n selected.columnIndex === i\n const clickable = onCellClick && cell.fact !== null\n // A non-numeric fact (a Cover Page flag, a narrative disclosure)\n // renders its string left-aligned in a normal face, not as a\n // right-aligned em-dash.\n const isText =\n cell.value === null && cell.textValue != null && cell.textValue !== ''\n const numStyle: CSSProperties = {\n ...styles.numCell,\n fontWeight: row.isSubtotal ? 600 : 400,\n borderBottom: isGrandTotal ? '3px double var(--rs-text, #111827)' : undefined,\n cursor: clickable ? 'pointer' : 'default',\n backgroundColor: isSelected ? 'var(--rs-selected-bg, #dbeafe)' : undefined,\n color:\n !isText && !row.isSubtotal && (cell.value === null || cell.value === 0)\n ? 'var(--rs-muted, #9ca3af)'\n : undefined,\n ...(isText\n ? {\n textAlign: 'left',\n whiteSpace: 'normal',\n fontFamily: 'var(--rs-font-sans, ui-sans-serif, system-ui, sans-serif)',\n }\n : {}),\n }\n return (\n <td\n key={columns[i].key}\n style={numStyle}\n onClick={clickable ? () => onCellClick?.(row, i) : undefined}\n >\n {isText ? cell.textValue : formatMoney(cell.value, { currencySymbol })}\n </td>\n )\n })}\n </tr>\n )\n })}\n </tbody>\n </table>\n </section>\n )\n}\n","/**\n * Top-level renderer: a `NormalizedReport` → the entity header, every statement,\n * and an inline fact inspector wired to cell selection. This is the one\n * component a consuming app typically renders.\n */\nimport type { CSSProperties } from 'react'\nimport { useMemo, useState } from 'react'\nimport type { NormalizedReport, StatementRow } from '../model'\nimport { buildStatements } from '../project'\nimport { FactInspector } from './FactInspector'\nimport { StatementTable } from './StatementTable'\n\nexport interface ReportViewProps {\n report: NormalizedReport\n currencySymbol?: string\n /** Disable the click-to-inspect fact panel (render-only). */\n inspect?: boolean\n}\n\ninterface Selection {\n statementIndex: number\n elementId: string\n columnIndex: number\n}\n\nconst styles: Record<string, CSSProperties> = {\n layout: {\n display: 'grid',\n gridTemplateColumns: 'minmax(0, 1fr)',\n gap: '1.5rem',\n alignItems: 'start',\n },\n layoutWithPanel: {\n gridTemplateColumns: 'minmax(0, 1fr) 340px',\n },\n entity: {\n fontFamily: 'var(--rs-font-heading, var(--rs-font-sans, sans-serif))',\n textAlign: 'center',\n marginBottom: '1.5rem',\n },\n entityName: {\n fontSize: '1.5rem',\n fontWeight: 700,\n margin: 0,\n color: 'var(--rs-text, #111827)',\n },\n panel: { position: 'sticky', top: '1rem' },\n}\n\nexport function ReportView({ report, currencySymbol = '$', inspect = true }: ReportViewProps) {\n const statements = useMemo(() => buildStatements(report), [report])\n const [selection, setSelection] = useState<Selection | null>(null)\n\n const selected = selection !== null ? statements[selection.statementIndex] : null\n const selectedRow = selected?.rows.find((r) => r.element.id === selection?.elementId) ?? null\n\n return (\n <div>\n {report.entity ? (\n <header style={styles.entity}>\n <h2 style={styles.entityName}>{report.entity.name}</h2>\n </header>\n ) : null}\n\n <div\n style={{\n ...styles.layout,\n ...(inspect && selectedRow ? styles.layoutWithPanel : {}),\n }}\n >\n <div>\n {statements.map((statement, statementIndex) => (\n <StatementTable\n key={statement.ib.id}\n statement={statement}\n currencySymbol={currencySymbol}\n selected={\n selection && selection.statementIndex === statementIndex\n ? {\n elementId: selection.elementId,\n columnIndex: selection.columnIndex,\n }\n : null\n }\n onCellClick={\n inspect\n ? (row: StatementRow, columnIndex: number) =>\n setSelection({\n statementIndex,\n elementId: row.element.id,\n columnIndex,\n })\n : undefined\n }\n />\n ))}\n </div>\n\n {inspect && selected && selectedRow && selection ? (\n <div style={styles.panel}>\n <FactInspector\n report={report}\n statement={selected}\n row={selectedRow}\n columnIndex={selection.columnIndex}\n currencySymbol={currencySymbol}\n onClose={() => setSelection(null)}\n />\n </div>\n ) : null}\n </div>\n </div>\n )\n}\n"]}
|
package/package.json
CHANGED
package/dist/chunk-JTTICHPF.js
DELETED
|
@@ -1,273 +0,0 @@
|
|
|
1
|
-
import { DataFactory, Store, Parser } from 'n3';
|
|
2
|
-
import jsonld from 'jsonld';
|
|
3
|
-
|
|
4
|
-
// src/constants.ts
|
|
5
|
-
var NS = {
|
|
6
|
-
rdf: "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
|
|
7
|
-
rs: "https://robosystems.ai/vocab/",
|
|
8
|
-
rsgaap: "https://robosystems.ai/taxonomy/rs-gaap/v1/",
|
|
9
|
-
skos: "http://www.w3.org/2004/02/skos/core#",
|
|
10
|
-
xlink: "http://www.w3.org/1999/xlink#",
|
|
11
|
-
xbrli: "http://www.xbrl.org/2003/instance#",
|
|
12
|
-
link: "http://www.xbrl.org/2003/linkbase#",
|
|
13
|
-
iso4217: "http://www.xbrl.org/2003/iso4217#"
|
|
14
|
-
};
|
|
15
|
-
var IRI = {
|
|
16
|
-
type: NS.rdf + "type",
|
|
17
|
-
// rs: classes
|
|
18
|
-
Report: NS.rs + "Report",
|
|
19
|
-
Fact: NS.rs + "Fact",
|
|
20
|
-
InformationBlock: NS.rs + "InformationBlock",
|
|
21
|
-
Structure: NS.rs + "Structure",
|
|
22
|
-
Association: NS.rs + "Association",
|
|
23
|
-
Element: NS.rs + "Element",
|
|
24
|
-
Period: NS.rs + "Period",
|
|
25
|
-
Unit: NS.rs + "Unit",
|
|
26
|
-
Entity: NS.rs + "Entity",
|
|
27
|
-
// rs: predicates
|
|
28
|
-
element: NS.rs + "element",
|
|
29
|
-
period: NS.rs + "period",
|
|
30
|
-
unit: NS.rs + "unit",
|
|
31
|
-
entity: NS.rs + "entity",
|
|
32
|
-
factSet: NS.rs + "factSet",
|
|
33
|
-
numericValue: NS.rs + "numericValue",
|
|
34
|
-
decimals: NS.rs + "decimals",
|
|
35
|
-
blockType: NS.rs + "blockType",
|
|
36
|
-
associationType: NS.rs + "associationType",
|
|
37
|
-
hasAssociation: NS.rs + "hasAssociation",
|
|
38
|
-
roleUri: NS.rs + "roleUri",
|
|
39
|
-
structureName: NS.rs + "structureName",
|
|
40
|
-
abstract: NS.rs + "abstract",
|
|
41
|
-
monetary: NS.rs + "monetary",
|
|
42
|
-
legalName: NS.rs + "legalName",
|
|
43
|
-
country: NS.rs + "country",
|
|
44
|
-
// skos:
|
|
45
|
-
prefLabel: NS.skos + "prefLabel",
|
|
46
|
-
// xlink:
|
|
47
|
-
from: NS.xlink + "from",
|
|
48
|
-
to: NS.xlink + "to",
|
|
49
|
-
role: NS.xlink + "role",
|
|
50
|
-
// xbrli:
|
|
51
|
-
instant: NS.xbrli + "instant",
|
|
52
|
-
startDate: NS.xbrli + "startDate",
|
|
53
|
-
endDate: NS.xbrli + "endDate",
|
|
54
|
-
periodType: NS.xbrli + "periodType",
|
|
55
|
-
balance: NS.xbrli + "balance",
|
|
56
|
-
measure: NS.xbrli + "measure",
|
|
57
|
-
// link:
|
|
58
|
-
order: NS.link + "order",
|
|
59
|
-
weight: NS.link + "weight"
|
|
60
|
-
};
|
|
61
|
-
var PREFIXES = [
|
|
62
|
-
["rs-gaap", NS.rsgaap],
|
|
63
|
-
["disclosures", "https://robosystems.ai/taxonomy/rs-gaap/disclosures/v1/"],
|
|
64
|
-
["us-gaap", "http://fasb.org/us-gaap/"],
|
|
65
|
-
["dei", "http://xbrl.sec.gov/dei/"],
|
|
66
|
-
["rs", NS.rs],
|
|
67
|
-
["skos", NS.skos],
|
|
68
|
-
["xbrli", NS.xbrli],
|
|
69
|
-
["xlink", NS.xlink],
|
|
70
|
-
["link", NS.link],
|
|
71
|
-
["iso4217", NS.iso4217]
|
|
72
|
-
];
|
|
73
|
-
function qname(iri) {
|
|
74
|
-
for (const [prefix, ns] of PREFIXES) {
|
|
75
|
-
if (iri.startsWith(ns)) {
|
|
76
|
-
return `${prefix}:${iri.slice(ns.length)}`;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
const slash = iri.lastIndexOf("/");
|
|
80
|
-
const hash = iri.lastIndexOf("#");
|
|
81
|
-
return iri.slice(Math.max(slash, hash) + 1);
|
|
82
|
-
}
|
|
83
|
-
function humanize(iri) {
|
|
84
|
-
const local = qname(iri).split(":").pop() ?? iri;
|
|
85
|
-
return local.replace(/(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/g, " ");
|
|
86
|
-
}
|
|
87
|
-
var BLOCK_ORDER = {
|
|
88
|
-
balance_sheet: 0,
|
|
89
|
-
income_statement: 1,
|
|
90
|
-
cash_flow_statement: 2,
|
|
91
|
-
equity_statement: 3
|
|
92
|
-
};
|
|
93
|
-
var BLOCK_TITLES = {
|
|
94
|
-
balance_sheet: "Balance Sheet",
|
|
95
|
-
income_statement: "Income Statement",
|
|
96
|
-
cash_flow_statement: "Cash Flow Statement",
|
|
97
|
-
equity_statement: "Statement of Changes in Equity"
|
|
98
|
-
};
|
|
99
|
-
|
|
100
|
-
// src/adapters/cypher.ts
|
|
101
|
-
function cypherAdapter(config) {
|
|
102
|
-
return {
|
|
103
|
-
source: `cypher:${config.graphId}/${config.reportId}`,
|
|
104
|
-
load: async () => {
|
|
105
|
-
throw new Error(
|
|
106
|
-
"The cypher adapter is not implemented yet (phase 2 / Mode B \u2014 live SEC graph)."
|
|
107
|
-
);
|
|
108
|
-
}
|
|
109
|
-
};
|
|
110
|
-
}
|
|
111
|
-
var { namedNode } = DataFactory;
|
|
112
|
-
function makeReaders(store) {
|
|
113
|
-
const objects = (s, p) => store.getObjects(namedNode(s), namedNode(p), null);
|
|
114
|
-
const firstValue = (s, p) => {
|
|
115
|
-
const os = objects(s, p);
|
|
116
|
-
return os.length ? os[0].value : null;
|
|
117
|
-
};
|
|
118
|
-
const subjectsOfType = (type) => store.getSubjects(namedNode(IRI.type), namedNode(type), null).map((t) => t.value);
|
|
119
|
-
return { objects, firstValue, subjectsOfType };
|
|
120
|
-
}
|
|
121
|
-
function toNumber(raw) {
|
|
122
|
-
if (raw === null || raw === "") return null;
|
|
123
|
-
const n = Number(raw);
|
|
124
|
-
return Number.isNaN(n) ? null : n;
|
|
125
|
-
}
|
|
126
|
-
function parseStore(store) {
|
|
127
|
-
const { objects, firstValue, subjectsOfType } = makeReaders(store);
|
|
128
|
-
const elements = {};
|
|
129
|
-
for (const id of subjectsOfType(IRI.Element)) {
|
|
130
|
-
const balance = firstValue(id, IRI.balance);
|
|
131
|
-
const periodType = firstValue(id, IRI.periodType);
|
|
132
|
-
elements[id] = {
|
|
133
|
-
id,
|
|
134
|
-
qname: qname(id),
|
|
135
|
-
label: firstValue(id, IRI.prefLabel) ?? humanize(id),
|
|
136
|
-
balance: balance === "debit" || balance === "credit" ? balance : null,
|
|
137
|
-
periodType: periodType === "instant" || periodType === "duration" ? periodType : null,
|
|
138
|
-
abstract: firstValue(id, IRI.abstract) === "true",
|
|
139
|
-
monetary: firstValue(id, IRI.monetary) === "true"
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
const periods = {};
|
|
143
|
-
for (const id of subjectsOfType(IRI.Period)) {
|
|
144
|
-
const declared = firstValue(id, IRI.periodType);
|
|
145
|
-
const instant = firstValue(id, IRI.instant);
|
|
146
|
-
const startDate = firstValue(id, IRI.startDate);
|
|
147
|
-
const endDate = firstValue(id, IRI.endDate);
|
|
148
|
-
const type = declared === "instant" ? "instant" : declared === "duration" ? "duration" : instant ? "instant" : "duration";
|
|
149
|
-
const end = (type === "instant" ? instant : endDate) ?? instant ?? endDate ?? "";
|
|
150
|
-
periods[id] = { id, type, instant, startDate, endDate, end };
|
|
151
|
-
}
|
|
152
|
-
const units = {};
|
|
153
|
-
for (const id of subjectsOfType(IRI.Unit)) {
|
|
154
|
-
const measureTerm = objects(id, IRI.measure)[0];
|
|
155
|
-
const measure = measureTerm ? qname(measureTerm.value) : "unknown";
|
|
156
|
-
units[id] = {
|
|
157
|
-
id,
|
|
158
|
-
measure,
|
|
159
|
-
label: measure.includes(":") ? measure.split(":").pop() : measure
|
|
160
|
-
};
|
|
161
|
-
}
|
|
162
|
-
let entity = null;
|
|
163
|
-
const entityIds = subjectsOfType(IRI.Entity);
|
|
164
|
-
if (entityIds.length) {
|
|
165
|
-
const id = entityIds[0];
|
|
166
|
-
entity = {
|
|
167
|
-
id,
|
|
168
|
-
name: firstValue(id, IRI.prefLabel) ?? firstValue(id, IRI.legalName) ?? "Entity",
|
|
169
|
-
legalName: firstValue(id, IRI.legalName),
|
|
170
|
-
country: firstValue(id, IRI.country)
|
|
171
|
-
};
|
|
172
|
-
}
|
|
173
|
-
const facts = [];
|
|
174
|
-
for (const id of subjectsOfType(IRI.Fact)) {
|
|
175
|
-
facts.push({
|
|
176
|
-
id,
|
|
177
|
-
element: firstValue(id, IRI.element) ?? "",
|
|
178
|
-
period: firstValue(id, IRI.period) ?? "",
|
|
179
|
-
unit: firstValue(id, IRI.unit),
|
|
180
|
-
entity: firstValue(id, IRI.entity),
|
|
181
|
-
factSet: firstValue(id, IRI.factSet),
|
|
182
|
-
value: toNumber(firstValue(id, IRI.numericValue)),
|
|
183
|
-
decimals: firstValue(id, IRI.decimals)
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
const informationBlocks = [];
|
|
187
|
-
for (const id of subjectsOfType(IRI.InformationBlock)) {
|
|
188
|
-
informationBlocks.push({
|
|
189
|
-
id,
|
|
190
|
-
blockType: firstValue(id, IRI.blockType) ?? "",
|
|
191
|
-
factSet: firstValue(id, IRI.factSet),
|
|
192
|
-
label: firstValue(id, IRI.prefLabel)
|
|
193
|
-
});
|
|
194
|
-
}
|
|
195
|
-
const structures = [];
|
|
196
|
-
const assocStructure = /* @__PURE__ */ new Map();
|
|
197
|
-
for (const id of subjectsOfType(IRI.Structure)) {
|
|
198
|
-
structures.push({
|
|
199
|
-
id,
|
|
200
|
-
blockType: firstValue(id, IRI.blockType) ?? "",
|
|
201
|
-
roleUri: firstValue(id, IRI.roleUri),
|
|
202
|
-
structureName: firstValue(id, IRI.structureName)
|
|
203
|
-
});
|
|
204
|
-
for (const assoc of objects(id, IRI.hasAssociation)) {
|
|
205
|
-
assocStructure.set(assoc.value, id);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
const calcAssociations = [];
|
|
209
|
-
const presAssociations = [];
|
|
210
|
-
for (const id of subjectsOfType(IRI.Association)) {
|
|
211
|
-
const parent = firstValue(id, IRI.from);
|
|
212
|
-
const child = firstValue(id, IRI.to);
|
|
213
|
-
if (!parent || !child) continue;
|
|
214
|
-
const type = firstValue(id, IRI.associationType);
|
|
215
|
-
const order = toNumber(firstValue(id, IRI.order)) ?? 0;
|
|
216
|
-
const role = firstValue(id, IRI.role);
|
|
217
|
-
const structure = assocStructure.get(id) ?? null;
|
|
218
|
-
if (type === "calculation") {
|
|
219
|
-
calcAssociations.push({
|
|
220
|
-
parent,
|
|
221
|
-
child,
|
|
222
|
-
weight: toNumber(firstValue(id, IRI.weight)) ?? 1,
|
|
223
|
-
order,
|
|
224
|
-
role,
|
|
225
|
-
structure
|
|
226
|
-
});
|
|
227
|
-
} else if (type === "presentation") {
|
|
228
|
-
presAssociations.push({ parent, child, order, role, structure });
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
let reportIri = null;
|
|
232
|
-
for (const graph of store.getGraphs(null, null, null)) {
|
|
233
|
-
const hash = graph.value.indexOf("#");
|
|
234
|
-
if (hash > 0) {
|
|
235
|
-
reportIri = graph.value.slice(0, hash);
|
|
236
|
-
break;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
if (!reportIri) {
|
|
240
|
-
const reports = subjectsOfType(IRI.Report);
|
|
241
|
-
reportIri = reports.length ? reports[0] : null;
|
|
242
|
-
}
|
|
243
|
-
const reportId = reportIri ? reportIri.split("/").pop() ?? null : null;
|
|
244
|
-
return {
|
|
245
|
-
reportId,
|
|
246
|
-
reportIri,
|
|
247
|
-
entity,
|
|
248
|
-
informationBlocks,
|
|
249
|
-
structures,
|
|
250
|
-
facts,
|
|
251
|
-
elements,
|
|
252
|
-
periods,
|
|
253
|
-
units,
|
|
254
|
-
calcAssociations,
|
|
255
|
-
presAssociations
|
|
256
|
-
};
|
|
257
|
-
}
|
|
258
|
-
async function parseJsonld(doc) {
|
|
259
|
-
const json = typeof doc === "string" ? JSON.parse(doc) : doc;
|
|
260
|
-
const nquads = await jsonld.toRDF(json, { format: "application/n-quads" });
|
|
261
|
-
const store = new Store(new Parser({ format: "application/n-quads" }).parse(nquads));
|
|
262
|
-
return parseStore(store);
|
|
263
|
-
}
|
|
264
|
-
function jsonldFileAdapter(doc, source = "holon.jsonld") {
|
|
265
|
-
return {
|
|
266
|
-
source,
|
|
267
|
-
load: () => parseJsonld(doc)
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
export { BLOCK_ORDER, BLOCK_TITLES, NS, cypherAdapter, humanize, jsonldFileAdapter, parseJsonld, parseStore, qname };
|
|
272
|
-
//# sourceMappingURL=chunk-JTTICHPF.js.map
|
|
273
|
-
//# sourceMappingURL=chunk-JTTICHPF.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/constants.ts","../src/adapters/cypher.ts","../src/adapters/store.ts","../src/adapters/jsonld.ts"],"names":["Store"],"mappings":";;;;AAQO,IAAM,EAAA,GAAK;AAAA,EAChB,GAAA,EAAK,6CAAA;AAAA,EACL,EAAA,EAAI,+BAAA;AAAA,EACJ,MAAA,EAAQ,6CAAA;AAAA,EACR,IAAA,EAAM,sCAAA;AAAA,EACN,KAAA,EAAO,+BAAA;AAAA,EACP,KAAA,EAAO,oCAAA;AAAA,EACP,IAAA,EAAM,oCAAA;AAAA,EACN,OAAA,EAAS;AACX;AAGO,IAAM,GAAA,GAAM;AAAA,EACjB,IAAA,EAAM,GAAG,GAAA,GAAM,MAAA;AAAA;AAAA,EAEf,MAAA,EAAQ,GAAG,EAAA,GAAK,QAAA;AAAA,EAChB,IAAA,EAAM,GAAG,EAAA,GAAK,MAAA;AAAA,EACd,gBAAA,EAAkB,GAAG,EAAA,GAAK,kBAAA;AAAA,EAC1B,SAAA,EAAW,GAAG,EAAA,GAAK,WAAA;AAAA,EACnB,WAAA,EAAa,GAAG,EAAA,GAAK,aAAA;AAAA,EACrB,OAAA,EAAS,GAAG,EAAA,GAAK,SAAA;AAAA,EACjB,MAAA,EAAQ,GAAG,EAAA,GAAK,QAAA;AAAA,EAChB,IAAA,EAAM,GAAG,EAAA,GAAK,MAAA;AAAA,EACd,MAAA,EAAQ,GAAG,EAAA,GAAK,QAAA;AAAA;AAAA,EAEhB,OAAA,EAAS,GAAG,EAAA,GAAK,SAAA;AAAA,EACjB,MAAA,EAAQ,GAAG,EAAA,GAAK,QAAA;AAAA,EAChB,IAAA,EAAM,GAAG,EAAA,GAAK,MAAA;AAAA,EACd,MAAA,EAAQ,GAAG,EAAA,GAAK,QAAA;AAAA,EAChB,OAAA,EAAS,GAAG,EAAA,GAAK,SAAA;AAAA,EACjB,YAAA,EAAc,GAAG,EAAA,GAAK,cAAA;AAAA,EACtB,QAAA,EAAU,GAAG,EAAA,GAAK,UAAA;AAAA,EAClB,SAAA,EAAW,GAAG,EAAA,GAAK,WAAA;AAAA,EACnB,eAAA,EAAiB,GAAG,EAAA,GAAK,iBAAA;AAAA,EACzB,cAAA,EAAgB,GAAG,EAAA,GAAK,gBAAA;AAAA,EACxB,OAAA,EAAS,GAAG,EAAA,GAAK,SAAA;AAAA,EACjB,aAAA,EAAe,GAAG,EAAA,GAAK,eAAA;AAAA,EACvB,QAAA,EAAU,GAAG,EAAA,GAAK,UAAA;AAAA,EAClB,QAAA,EAAU,GAAG,EAAA,GAAK,UAAA;AAAA,EAClB,SAAA,EAAW,GAAG,EAAA,GAAK,WAAA;AAAA,EACnB,OAAA,EAAS,GAAG,EAAA,GAAK,SAAA;AAAA;AAAA,EAEjB,SAAA,EAAW,GAAG,IAAA,GAAO,WAAA;AAAA;AAAA,EAErB,IAAA,EAAM,GAAG,KAAA,GAAQ,MAAA;AAAA,EACjB,EAAA,EAAI,GAAG,KAAA,GAAQ,IAAA;AAAA,EACf,IAAA,EAAM,GAAG,KAAA,GAAQ,MAAA;AAAA;AAAA,EAEjB,OAAA,EAAS,GAAG,KAAA,GAAQ,SAAA;AAAA,EACpB,SAAA,EAAW,GAAG,KAAA,GAAQ,WAAA;AAAA,EACtB,OAAA,EAAS,GAAG,KAAA,GAAQ,SAAA;AAAA,EACpB,UAAA,EAAY,GAAG,KAAA,GAAQ,YAAA;AAAA,EACvB,OAAA,EAAS,GAAG,KAAA,GAAQ,SAAA;AAAA,EACpB,OAAA,EAAS,GAAG,KAAA,GAAQ,SAAA;AAAA;AAAA,EAEpB,KAAA,EAAO,GAAG,IAAA,GAAO,OAAA;AAAA,EACjB,MAAA,EAAQ,GAAG,IAAA,GAAO;AACpB,CAAA;AAMA,IAAM,QAAA,GAAqD;AAAA,EACzD,CAAC,SAAA,EAAW,EAAA,CAAG,MAAM,CAAA;AAAA,EACrB,CAAC,eAAe,yDAAyD,CAAA;AAAA,EACzE,CAAC,WAAW,0BAA0B,CAAA;AAAA,EACtC,CAAC,OAAO,0BAA0B,CAAA;AAAA,EAClC,CAAC,IAAA,EAAM,EAAA,CAAG,EAAE,CAAA;AAAA,EACZ,CAAC,MAAA,EAAQ,EAAA,CAAG,IAAI,CAAA;AAAA,EAChB,CAAC,OAAA,EAAS,EAAA,CAAG,KAAK,CAAA;AAAA,EAClB,CAAC,OAAA,EAAS,EAAA,CAAG,KAAK,CAAA;AAAA,EAClB,CAAC,MAAA,EAAQ,EAAA,CAAG,IAAI,CAAA;AAAA,EAChB,CAAC,SAAA,EAAW,EAAA,CAAG,OAAO;AACxB,CAAA;AAGO,SAAS,MAAM,GAAA,EAAqB;AACzC,EAAA,KAAA,MAAW,CAAC,MAAA,EAAQ,EAAE,CAAA,IAAK,QAAA,EAAU;AACnC,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,EAAE,CAAA,EAAG;AACtB,MAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,IAAI,KAAA,CAAM,EAAA,CAAG,MAAM,CAAC,CAAA,CAAA;AAAA,IAC1C;AAAA,EACF;AACA,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,WAAA,CAAY,GAAG,CAAA;AACjC,EAAA,MAAM,IAAA,GAAO,GAAA,CAAI,WAAA,CAAY,GAAG,CAAA;AAChC,EAAA,OAAO,IAAI,KAAA,CAAM,IAAA,CAAK,IAAI,KAAA,EAAO,IAAI,IAAI,CAAC,CAAA;AAC5C;AAOO,SAAS,SAAS,GAAA,EAAqB;AAC5C,EAAA,MAAM,KAAA,GAAQ,MAAM,GAAG,CAAA,CAAE,MAAM,GAAG,CAAA,CAAE,KAAI,IAAK,GAAA;AAC7C,EAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,kDAAA,EAAoD,GAAG,CAAA;AAC9E;AAGO,IAAM,WAAA,GAAsC;AAAA,EACjD,aAAA,EAAe,CAAA;AAAA,EACf,gBAAA,EAAkB,CAAA;AAAA,EAClB,mBAAA,EAAqB,CAAA;AAAA,EACrB,gBAAA,EAAkB;AACpB;AAGO,IAAM,YAAA,GAAuC;AAAA,EAClD,aAAA,EAAe,eAAA;AAAA,EACf,gBAAA,EAAkB,kBAAA;AAAA,EAClB,mBAAA,EAAqB,qBAAA;AAAA,EACrB,gBAAA,EAAkB;AACpB;;;ACnGO,SAAS,cAAc,MAAA,EAA4C;AACxE,EAAA,OAAO;AAAA,IACL,QAAQ,CAAA,OAAA,EAAU,MAAA,CAAO,OAAO,CAAA,CAAA,EAAI,OAAO,QAAQ,CAAA,CAAA;AAAA,IACnD,MAAM,YAAY;AAChB,MAAA,MAAM,IAAI,KAAA;AAAA,QACR;AAAA,OACF;AAAA,IACF;AAAA,GACF;AACF;ACJA,IAAM,EAAE,WAAU,GAAI,WAAA;AAEtB,SAAS,YAAY,KAAA,EAAc;AACjC,EAAA,MAAM,OAAA,GAAU,CAAC,CAAA,EAAW,CAAA,KAAc,KAAA,CAAM,UAAA,CAAW,SAAA,CAAU,CAAC,CAAA,EAAG,SAAA,CAAU,CAAC,CAAA,EAAG,IAAI,CAAA;AAC3F,EAAA,MAAM,UAAA,GAAa,CAAC,CAAA,EAAW,CAAA,KAA6B;AAC1D,IAAA,MAAM,EAAA,GAAK,OAAA,CAAQ,CAAA,EAAG,CAAC,CAAA;AACvB,IAAA,OAAO,EAAA,CAAG,MAAA,GAAS,EAAA,CAAG,CAAC,EAAE,KAAA,GAAQ,IAAA;AAAA,EACnC,CAAA;AACA,EAAA,MAAM,iBAAiB,CAAC,IAAA,KACtB,MAAM,WAAA,CAAY,SAAA,CAAU,IAAI,IAAI,CAAA,EAAG,SAAA,CAAU,IAAI,GAAG,IAAI,CAAA,CAAE,IAAI,CAAC,CAAA,KAAM,EAAE,KAAK,CAAA;AAClF,EAAA,OAAO,EAAE,OAAA,EAAS,UAAA,EAAY,cAAA,EAAe;AAC/C;AAEA,SAAS,SAAS,GAAA,EAAmC;AACnD,EAAA,IAAI,GAAA,KAAQ,IAAA,IAAQ,GAAA,KAAQ,EAAA,EAAI,OAAO,IAAA;AACvC,EAAA,MAAM,CAAA,GAAI,OAAO,GAAG,CAAA;AACpB,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,GAAO,CAAA;AAClC;AAGO,SAAS,WAAW,KAAA,EAAgC;AACzD,EAAA,MAAM,EAAE,OAAA,EAAS,UAAA,EAAY,cAAA,EAAe,GAAI,YAAY,KAAK,CAAA;AAGjE,EAAA,MAAM,WAAwC,EAAC;AAC/C,EAAA,KAAA,MAAW,EAAA,IAAM,cAAA,CAAe,GAAA,CAAI,OAAO,CAAA,EAAG;AAC5C,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,OAAO,CAAA;AAC1C,IAAA,MAAM,UAAA,GAAa,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,UAAU,CAAA;AAChD,IAAA,QAAA,CAAS,EAAE,CAAA,GAAI;AAAA,MACb,EAAA;AAAA,MACA,KAAA,EAAO,MAAM,EAAE,CAAA;AAAA,MACf,OAAO,UAAA,CAAW,EAAA,EAAI,IAAI,SAAS,CAAA,IAAK,SAAS,EAAE,CAAA;AAAA,MACnD,OAAA,EAAS,OAAA,KAAY,OAAA,IAAW,OAAA,KAAY,WAAW,OAAA,GAAU,IAAA;AAAA,MACjE,UAAA,EAAY,UAAA,KAAe,SAAA,IAAa,UAAA,KAAe,aAAa,UAAA,GAAa,IAAA;AAAA,MACjF,QAAA,EAAU,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,QAAQ,CAAA,KAAM,MAAA;AAAA,MAC3C,QAAA,EAAU,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,QAAQ,CAAA,KAAM;AAAA,KAC7C;AAAA,EACF;AAGA,EAAA,MAAM,UAAsC,EAAC;AAC7C,EAAA,KAAA,MAAW,EAAA,IAAM,cAAA,CAAe,GAAA,CAAI,MAAM,CAAA,EAAG;AAC3C,IAAA,MAAM,QAAA,GAAW,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,UAAU,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,OAAO,CAAA;AAC1C,IAAA,MAAM,SAAA,GAAY,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,SAAS,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,OAAO,CAAA;AAC1C,IAAA,MAAM,IAAA,GACJ,aAAa,SAAA,GACT,SAAA,GACA,aAAa,UAAA,GACX,UAAA,GACA,UACE,SAAA,GACA,UAAA;AACV,IAAA,MAAM,OAAO,IAAA,KAAS,SAAA,GAAY,OAAA,GAAU,OAAA,KAAY,WAAW,OAAA,IAAW,EAAA;AAC9E,IAAA,OAAA,CAAQ,EAAE,IAAI,EAAE,EAAA,EAAI,MAAM,OAAA,EAAS,SAAA,EAAW,SAAS,GAAA,EAAI;AAAA,EAC7D;AAGA,EAAA,MAAM,QAAkC,EAAC;AACzC,EAAA,KAAA,MAAW,EAAA,IAAM,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AACzC,IAAA,MAAM,cAAc,OAAA,CAAQ,EAAA,EAAI,GAAA,CAAI,OAAO,EAAE,CAAC,CAAA;AAC9C,IAAA,MAAM,OAAA,GAAU,WAAA,GAAc,KAAA,CAAM,WAAA,CAAY,KAAK,CAAA,GAAI,SAAA;AACzD,IAAA,KAAA,CAAM,EAAE,CAAA,GAAI;AAAA,MACV,EAAA;AAAA,MACA,OAAA;AAAA,MACA,KAAA,EAAO,OAAA,CAAQ,QAAA,CAAS,GAAG,CAAA,GAAK,QAAQ,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,EAAI,GAAe;AAAA,KACxE;AAAA,EACF;AAGA,EAAA,IAAI,MAAA,GAA4B,IAAA;AAChC,EAAA,MAAM,SAAA,GAAY,cAAA,CAAe,GAAA,CAAI,MAAM,CAAA;AAC3C,EAAA,IAAI,UAAU,MAAA,EAAQ;AACpB,IAAA,MAAM,EAAA,GAAK,UAAU,CAAC,CAAA;AACtB,IAAA,MAAA,GAAS;AAAA,MACP,EAAA;AAAA,MACA,IAAA,EAAM,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,SAAS,KAAK,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,SAAS,CAAA,IAAK,QAAA;AAAA,MACxE,SAAA,EAAW,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,SAAS,CAAA;AAAA,MACvC,OAAA,EAAS,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,OAAO;AAAA,KACrC;AAAA,EACF;AAGA,EAAA,MAAM,QAAgB,EAAC;AACvB,EAAA,KAAA,MAAW,EAAA,IAAM,cAAA,CAAe,GAAA,CAAI,IAAI,CAAA,EAAG;AACzC,IAAA,KAAA,CAAM,IAAA,CAAK;AAAA,MACT,EAAA;AAAA,MACA,OAAA,EAAS,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,OAAO,CAAA,IAAK,EAAA;AAAA,MACxC,MAAA,EAAQ,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,MAAM,CAAA,IAAK,EAAA;AAAA,MACtC,IAAA,EAAM,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,IAAI,CAAA;AAAA,MAC7B,MAAA,EAAQ,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,MAAM,CAAA;AAAA,MACjC,OAAA,EAAS,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,OAAO,CAAA;AAAA,MACnC,OAAO,QAAA,CAAS,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,YAAY,CAAC,CAAA;AAAA,MAChD,QAAA,EAAU,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,QAAQ;AAAA,KACtC,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,oBAAwC,EAAC;AAC/C,EAAA,KAAA,MAAW,EAAA,IAAM,cAAA,CAAe,GAAA,CAAI,gBAAgB,CAAA,EAAG;AACrD,IAAA,iBAAA,CAAkB,IAAA,CAAK;AAAA,MACrB,EAAA;AAAA,MACA,SAAA,EAAW,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,SAAS,CAAA,IAAK,EAAA;AAAA,MAC5C,OAAA,EAAS,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,OAAO,CAAA;AAAA,MACnC,KAAA,EAAO,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,SAAS;AAAA,KACpC,CAAA;AAAA,EACH;AAGA,EAAA,MAAM,aAA8B,EAAC;AACrC,EAAA,MAAM,cAAA,uBAAqB,GAAA,EAAoB;AAC/C,EAAA,KAAA,MAAW,EAAA,IAAM,cAAA,CAAe,GAAA,CAAI,SAAS,CAAA,EAAG;AAC9C,IAAA,UAAA,CAAW,IAAA,CAAK;AAAA,MACd,EAAA;AAAA,MACA,SAAA,EAAW,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,SAAS,CAAA,IAAK,EAAA;AAAA,MAC5C,OAAA,EAAS,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,OAAO,CAAA;AAAA,MACnC,aAAA,EAAe,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,aAAa;AAAA,KAChD,CAAA;AACD,IAAA,KAAA,MAAW,KAAA,IAAS,OAAA,CAAQ,EAAA,EAAI,GAAA,CAAI,cAAc,CAAA,EAAG;AACnD,MAAA,cAAA,CAAe,GAAA,CAAI,KAAA,CAAM,KAAA,EAAO,EAAE,CAAA;AAAA,IACpC;AAAA,EACF;AAGA,EAAA,MAAM,mBAAsC,EAAC;AAC7C,EAAA,MAAM,mBAAsC,EAAC;AAC7C,EAAA,KAAA,MAAW,EAAA,IAAM,cAAA,CAAe,GAAA,CAAI,WAAW,CAAA,EAAG;AAChD,IAAA,MAAM,MAAA,GAAS,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,IAAI,CAAA;AACtC,IAAA,MAAM,KAAA,GAAQ,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,EAAE,CAAA;AACnC,IAAA,IAAI,CAAC,MAAA,IAAU,CAAC,KAAA,EAAO;AACvB,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,eAAe,CAAA;AAC/C,IAAA,MAAM,QAAQ,QAAA,CAAS,UAAA,CAAW,IAAI,GAAA,CAAI,KAAK,CAAC,CAAA,IAAK,CAAA;AACrD,IAAA,MAAM,IAAA,GAAO,UAAA,CAAW,EAAA,EAAI,GAAA,CAAI,IAAI,CAAA;AACpC,IAAA,MAAM,SAAA,GAAY,cAAA,CAAe,GAAA,CAAI,EAAE,CAAA,IAAK,IAAA;AAC5C,IAAA,IAAI,SAAS,aAAA,EAAe;AAC1B,MAAA,gBAAA,CAAiB,IAAA,CAAK;AAAA,QACpB,MAAA;AAAA,QACA,KAAA;AAAA,QACA,QAAQ,QAAA,CAAS,UAAA,CAAW,IAAI,GAAA,CAAI,MAAM,CAAC,CAAA,IAAK,CAAA;AAAA,QAChD,KAAA;AAAA,QACA,IAAA;AAAA,QACA;AAAA,OACD,CAAA;AAAA,IACH,CAAA,MAAA,IAAW,SAAS,cAAA,EAAgB;AAClC,MAAA,gBAAA,CAAiB,KAAK,EAAE,MAAA,EAAQ,OAAO,KAAA,EAAO,IAAA,EAAM,WAAW,CAAA;AAAA,IACjE;AAAA,EACF;AAMA,EAAA,IAAI,SAAA,GAA2B,IAAA;AAC/B,EAAA,KAAA,MAAW,SAAS,KAAA,CAAM,SAAA,CAAU,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,EAAG;AACrD,IAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA;AACpC,IAAA,IAAI,OAAO,CAAA,EAAG;AACZ,MAAA,SAAA,GAAY,KAAA,CAAM,KAAA,CAAM,KAAA,CAAM,CAAA,EAAG,IAAI,CAAA;AACrC,MAAA;AAAA,IACF;AAAA,EACF;AACA,EAAA,IAAI,CAAC,SAAA,EAAW;AACd,IAAA,MAAM,OAAA,GAAU,cAAA,CAAe,GAAA,CAAI,MAAM,CAAA;AACzC,IAAA,SAAA,GAAY,OAAA,CAAQ,MAAA,GAAS,OAAA,CAAQ,CAAC,CAAA,GAAI,IAAA;AAAA,EAC5C;AACA,EAAA,MAAM,QAAA,GAAW,YAAa,SAAA,CAAU,KAAA,CAAM,GAAG,CAAA,CAAE,GAAA,MAAS,IAAA,GAAQ,IAAA;AAEpE,EAAA,OAAO;AAAA,IACL,QAAA;AAAA,IACA,SAAA;AAAA,IACA,MAAA;AAAA,IACA,iBAAA;AAAA,IACA,UAAA;AAAA,IACA,KAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,KAAA;AAAA,IACA,gBAAA;AAAA,IACA;AAAA,GACF;AACF;ACzLA,eAAsB,YAAY,GAAA,EAAiD;AACjF,EAAA,MAAM,OAAQ,OAAO,GAAA,KAAQ,WAAW,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,GAAI,GAAA;AAG1D,EAAA,MAAM,MAAA,GAAU,MAAM,MAAA,CAAO,KAAA,CAAM,MAAM,EAAE,MAAA,EAAQ,uBAAuB,CAAA;AAC1E,EAAA,MAAM,KAAA,GAAQ,IAAIA,KAAAA,CAAM,IAAI,MAAA,CAAO,EAAE,MAAA,EAAQ,qBAAA,EAAuB,CAAA,CAAE,KAAA,CAAM,MAAM,CAAC,CAAA;AACnF,EAAA,OAAO,WAAW,KAAK,CAAA;AACzB;AAGO,SAAS,iBAAA,CAAkB,GAAA,EAAsB,MAAA,GAAS,cAAA,EAA+B;AAC9F,EAAA,OAAO;AAAA,IACL,MAAA;AAAA,IACA,IAAA,EAAM,MAAM,WAAA,CAAY,GAAG;AAAA,GAC7B;AACF","file":"chunk-JTTICHPF.js","sourcesContent":["/**\n * RDF vocabulary and display helpers shared across adapters and projection.\n *\n * A report holon mixes several vocabularies: `rs:` for structure, `skos:` for\n * human labels, and the XBRL family (`xlink:` / `xbrli:` / `link:`) for the\n * networks. These constants are the single source of truth for the full IRIs.\n */\n\nexport const NS = {\n rdf: 'http://www.w3.org/1999/02/22-rdf-syntax-ns#',\n rs: 'https://robosystems.ai/vocab/',\n rsgaap: 'https://robosystems.ai/taxonomy/rs-gaap/v1/',\n skos: 'http://www.w3.org/2004/02/skos/core#',\n xlink: 'http://www.w3.org/1999/xlink#',\n xbrli: 'http://www.xbrl.org/2003/instance#',\n link: 'http://www.xbrl.org/2003/linkbase#',\n iso4217: 'http://www.xbrl.org/2003/iso4217#',\n} as const\n\n/** Frequently-referenced full IRIs, pre-concatenated for terseness. */\nexport const IRI = {\n type: NS.rdf + 'type',\n // rs: classes\n Report: NS.rs + 'Report',\n Fact: NS.rs + 'Fact',\n InformationBlock: NS.rs + 'InformationBlock',\n Structure: NS.rs + 'Structure',\n Association: NS.rs + 'Association',\n Element: NS.rs + 'Element',\n Period: NS.rs + 'Period',\n Unit: NS.rs + 'Unit',\n Entity: NS.rs + 'Entity',\n // rs: predicates\n element: NS.rs + 'element',\n period: NS.rs + 'period',\n unit: NS.rs + 'unit',\n entity: NS.rs + 'entity',\n factSet: NS.rs + 'factSet',\n numericValue: NS.rs + 'numericValue',\n decimals: NS.rs + 'decimals',\n blockType: NS.rs + 'blockType',\n associationType: NS.rs + 'associationType',\n hasAssociation: NS.rs + 'hasAssociation',\n roleUri: NS.rs + 'roleUri',\n structureName: NS.rs + 'structureName',\n abstract: NS.rs + 'abstract',\n monetary: NS.rs + 'monetary',\n legalName: NS.rs + 'legalName',\n country: NS.rs + 'country',\n // skos:\n prefLabel: NS.skos + 'prefLabel',\n // xlink:\n from: NS.xlink + 'from',\n to: NS.xlink + 'to',\n role: NS.xlink + 'role',\n // xbrli:\n instant: NS.xbrli + 'instant',\n startDate: NS.xbrli + 'startDate',\n endDate: NS.xbrli + 'endDate',\n periodType: NS.xbrli + 'periodType',\n balance: NS.xbrli + 'balance',\n measure: NS.xbrli + 'measure',\n // link:\n order: NS.link + 'order',\n weight: NS.link + 'weight',\n} as const\n\n/**\n * Prefixes for compacting concept IRIs to `prefix:Local`. Order matters — the\n * most specific namespace must come first so `rs-gaap:` wins over `rs:`.\n */\nconst PREFIXES: ReadonlyArray<readonly [string, string]> = [\n ['rs-gaap', NS.rsgaap],\n ['disclosures', 'https://robosystems.ai/taxonomy/rs-gaap/disclosures/v1/'],\n ['us-gaap', 'http://fasb.org/us-gaap/'],\n ['dei', 'http://xbrl.sec.gov/dei/'],\n ['rs', NS.rs],\n ['skos', NS.skos],\n ['xbrli', NS.xbrli],\n ['xlink', NS.xlink],\n ['link', NS.link],\n ['iso4217', NS.iso4217],\n]\n\n/** Compact a concept IRI to `prefix:Local` (e.g. `rs-gaap:Assets`). */\nexport function qname(iri: string): string {\n for (const [prefix, ns] of PREFIXES) {\n if (iri.startsWith(ns)) {\n return `${prefix}:${iri.slice(ns.length)}`\n }\n }\n const slash = iri.lastIndexOf('/')\n const hash = iri.lastIndexOf('#')\n return iri.slice(Math.max(slash, hash) + 1)\n}\n\n/**\n * Readable concept name from a local name when no `skos:prefLabel` is present —\n * splits CamelCase into words (`AssetsCurrent` → `Assets Current`). A graceful\n * fallback for bundles that predate label emit.\n */\nexport function humanize(iri: string): string {\n const local = qname(iri).split(':').pop() ?? iri\n return local.replace(/(?<=[a-z0-9])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])/g, ' ')\n}\n\n/** Stable display order for the canonical statement blocks; others fall after. */\nexport const BLOCK_ORDER: Record<string, number> = {\n balance_sheet: 0,\n income_statement: 1,\n cash_flow_statement: 2,\n equity_statement: 3,\n}\n\n/** Friendly section headings keyed by block type. */\nexport const BLOCK_TITLES: Record<string, string> = {\n balance_sheet: 'Balance Sheet',\n income_statement: 'Income Statement',\n cash_flow_statement: 'Cash Flow Statement',\n equity_statement: 'Statement of Changes in Equity',\n}\n","/**\n * The cypher / GraphQL adapter — a live graph database (an entity graph **or**\n * the SEC repository) read read-only with an API key. One adapter for both:\n * only the endpoint / `graphId` differ.\n *\n * Phase 2 (Mode B). Stubbed for now so the seam and the `./adapters` export\n * surface are in place; the holon-viewer's SEC mode will drive its build-out.\n */\nimport type { ReportAdapter } from './types'\n\nexport interface CypherAdapterConfig {\n /** GraphQL / cypher endpoint base URL. */\n endpoint: string\n /** User-supplied API key (sent client-side; never app-managed). */\n apiKey: string\n /** Target graph — an entity graph id or the SEC repository id. */\n graphId: string\n /** The report to materialize. */\n reportId: string\n}\n\nexport function cypherAdapter(config: CypherAdapterConfig): ReportAdapter {\n return {\n source: `cypher:${config.graphId}/${config.reportId}`,\n load: async () => {\n throw new Error(\n 'The cypher adapter is not implemented yet (phase 2 / Mode B — live SEC graph).'\n )\n },\n }\n}\n","/**\n * The shared quad-store → `NormalizedReport` traversal.\n *\n * An adapter fills an N3 quad `Store` from its source, then hands it here. The\n * store is read as a **union** across its graphs (`graph = null`) — the\n * scene/boundary/projection partition is a publication concern, not a rendering\n * one, so the join is identical however the quads arrived (a dataset-form\n * JSON-LD holon, a flat graph, …). No SPARQL engine is required; only store\n * traversal. The only per-source code is how the store gets filled.\n */\nimport { DataFactory, Store } from 'n3'\nimport { IRI, humanize, qname } from '../constants'\nimport type {\n CalcAssociation,\n ElementInfo,\n EntityInfo,\n Fact,\n InformationBlock,\n NormalizedReport,\n PeriodInfo,\n PeriodType,\n PresAssociation,\n StructureInfo,\n UnitInfo,\n} from '../model'\n\nconst { namedNode } = DataFactory\n\nfunction makeReaders(store: Store) {\n const objects = (s: string, p: string) => store.getObjects(namedNode(s), namedNode(p), null)\n const firstValue = (s: string, p: string): string | null => {\n const os = objects(s, p)\n return os.length ? os[0].value : null\n }\n const subjectsOfType = (type: string): string[] =>\n store.getSubjects(namedNode(IRI.type), namedNode(type), null).map((t) => t.value)\n return { objects, firstValue, subjectsOfType }\n}\n\nfunction toNumber(raw: string | null): number | null {\n if (raw === null || raw === '') return null\n const n = Number(raw)\n return Number.isNaN(n) ? null : n\n}\n\n/** Traverse a populated quad `Store` into the normalized report model. */\nexport function parseStore(store: Store): NormalizedReport {\n const { objects, firstValue, subjectsOfType } = makeReaders(store)\n\n // ── Elements ──\n const elements: Record<string, ElementInfo> = {}\n for (const id of subjectsOfType(IRI.Element)) {\n const balance = firstValue(id, IRI.balance)\n const periodType = firstValue(id, IRI.periodType)\n elements[id] = {\n id,\n qname: qname(id),\n label: firstValue(id, IRI.prefLabel) ?? humanize(id),\n balance: balance === 'debit' || balance === 'credit' ? balance : null,\n periodType: periodType === 'instant' || periodType === 'duration' ? periodType : null,\n abstract: firstValue(id, IRI.abstract) === 'true',\n monetary: firstValue(id, IRI.monetary) === 'true',\n }\n }\n\n // ── Periods ──\n const periods: Record<string, PeriodInfo> = {}\n for (const id of subjectsOfType(IRI.Period)) {\n const declared = firstValue(id, IRI.periodType)\n const instant = firstValue(id, IRI.instant)\n const startDate = firstValue(id, IRI.startDate)\n const endDate = firstValue(id, IRI.endDate)\n const type: PeriodType =\n declared === 'instant'\n ? 'instant'\n : declared === 'duration'\n ? 'duration'\n : instant\n ? 'instant'\n : 'duration'\n const end = (type === 'instant' ? instant : endDate) ?? instant ?? endDate ?? ''\n periods[id] = { id, type, instant, startDate, endDate, end }\n }\n\n // ── Units ──\n const units: Record<string, UnitInfo> = {}\n for (const id of subjectsOfType(IRI.Unit)) {\n const measureTerm = objects(id, IRI.measure)[0]\n const measure = measureTerm ? qname(measureTerm.value) : 'unknown'\n units[id] = {\n id,\n measure,\n label: measure.includes(':') ? (measure.split(':').pop() as string) : measure,\n }\n }\n\n // ── Entity ──\n let entity: EntityInfo | null = null\n const entityIds = subjectsOfType(IRI.Entity)\n if (entityIds.length) {\n const id = entityIds[0]\n entity = {\n id,\n name: firstValue(id, IRI.prefLabel) ?? firstValue(id, IRI.legalName) ?? 'Entity',\n legalName: firstValue(id, IRI.legalName),\n country: firstValue(id, IRI.country),\n }\n }\n\n // ── Facts ──\n const facts: Fact[] = []\n for (const id of subjectsOfType(IRI.Fact)) {\n facts.push({\n id,\n element: firstValue(id, IRI.element) ?? '',\n period: firstValue(id, IRI.period) ?? '',\n unit: firstValue(id, IRI.unit),\n entity: firstValue(id, IRI.entity),\n factSet: firstValue(id, IRI.factSet),\n value: toNumber(firstValue(id, IRI.numericValue)),\n decimals: firstValue(id, IRI.decimals),\n })\n }\n\n // ── Information Blocks ──\n const informationBlocks: InformationBlock[] = []\n for (const id of subjectsOfType(IRI.InformationBlock)) {\n informationBlocks.push({\n id,\n blockType: firstValue(id, IRI.blockType) ?? '',\n factSet: firstValue(id, IRI.factSet),\n label: firstValue(id, IRI.prefLabel),\n })\n }\n\n // ── Structures + association → structure membership ──\n const structures: StructureInfo[] = []\n const assocStructure = new Map<string, string>()\n for (const id of subjectsOfType(IRI.Structure)) {\n structures.push({\n id,\n blockType: firstValue(id, IRI.blockType) ?? '',\n roleUri: firstValue(id, IRI.roleUri),\n structureName: firstValue(id, IRI.structureName),\n })\n for (const assoc of objects(id, IRI.hasAssociation)) {\n assocStructure.set(assoc.value, id)\n }\n }\n\n // ── Associations ──\n const calcAssociations: CalcAssociation[] = []\n const presAssociations: PresAssociation[] = []\n for (const id of subjectsOfType(IRI.Association)) {\n const parent = firstValue(id, IRI.from)\n const child = firstValue(id, IRI.to)\n if (!parent || !child) continue\n const type = firstValue(id, IRI.associationType)\n const order = toNumber(firstValue(id, IRI.order)) ?? 0\n const role = firstValue(id, IRI.role)\n const structure = assocStructure.get(id) ?? null\n if (type === 'calculation') {\n calcAssociations.push({\n parent,\n child,\n weight: toNumber(firstValue(id, IRI.weight)) ?? 1,\n order,\n role,\n structure,\n })\n } else if (type === 'presentation') {\n presAssociations.push({ parent, child, order, role, structure })\n }\n }\n\n // ── Report IRI / id ──\n // Prefer the named-graph name (`<report>#scene` → `<report>`) — present in a\n // dataset-form holon. Fall back to the `rs:Report` subject so a flat,\n // single-graph document still resolves its identity.\n let reportIri: string | null = null\n for (const graph of store.getGraphs(null, null, null)) {\n const hash = graph.value.indexOf('#')\n if (hash > 0) {\n reportIri = graph.value.slice(0, hash)\n break\n }\n }\n if (!reportIri) {\n const reports = subjectsOfType(IRI.Report)\n reportIri = reports.length ? reports[0] : null\n }\n const reportId = reportIri ? (reportIri.split('/').pop() ?? null) : null\n\n return {\n reportId,\n reportIri,\n entity,\n informationBlocks,\n structures,\n facts,\n elements,\n periods,\n units,\n calcAssociations,\n presAssociations,\n }\n}\n","/**\n * The `holon.jsonld` adapter — offline, no backend, no auth.\n *\n * The canonical, API-native holon: **dataset-form JSON-LD** carrying the three\n * named graphs (`#scene`, `#boundary`, `#projection`) as `@id` + nested\n * `@graph`. JSON is native to the RoboSystems JSON API, so this is the one\n * holon file format.\n *\n * N3.js doesn't parse JSON-LD, so this adapter uses the `jsonld` processor to\n * expand the document to N-Quads (which preserves the named-graph labels),\n * parses those into an N3 quad `Store`, and delegates to the shared\n * `parseStore` traversal (`store.ts`).\n */\nimport type { JsonLdDocument } from 'jsonld'\nimport jsonld from 'jsonld'\nimport { Parser, Store } from 'n3'\nimport type { NormalizedReport } from '../model'\nimport { parseStore } from './store'\nimport type { ReportAdapter } from './types'\n\n/** Parse a `holon.jsonld` document (string or parsed object) into the model. */\nexport async function parseJsonld(doc: string | object): Promise<NormalizedReport> {\n const json = (typeof doc === 'string' ? JSON.parse(doc) : doc) as JsonLdDocument\n // `toRDF` with the n-quads format returns a serialized string; each quad\n // carries its graph label, so the holon's named graphs survive the expansion.\n const nquads = (await jsonld.toRDF(json, { format: 'application/n-quads' })) as string\n const store = new Store(new Parser({ format: 'application/n-quads' }).parse(nquads))\n return parseStore(store)\n}\n\n/** A `ReportAdapter` over an in-memory `holon.jsonld` document. */\nexport function jsonldFileAdapter(doc: string | object, source = 'holon.jsonld'): ReportAdapter {\n return {\n source,\n load: () => parseJsonld(doc),\n }\n}\n"]}
|