@the-syllabus/analysis-renderers 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/cells/RelationshipCardCell.d.ts +10 -0
- package/dist/cells/RelationshipCardCell.d.ts.map +1 -0
- package/dist/cells/RelationshipCardCell.js +91 -0
- package/dist/cells/RelationshipCardCell.js.map +1 -0
- package/dist/cells/TacticCardCell.d.ts +12 -0
- package/dist/cells/TacticCardCell.d.ts.map +1 -0
- package/dist/cells/TacticCardCell.js +77 -0
- package/dist/cells/TacticCardCell.js.map +1 -0
- package/dist/cells/TemplateCardCell.d.ts +29 -0
- package/dist/cells/TemplateCardCell.d.ts.map +1 -0
- package/dist/cells/TemplateCardCell.js +202 -0
- package/dist/cells/TemplateCardCell.js.map +1 -0
- package/dist/cells/index.d.ts +15 -0
- package/dist/cells/index.d.ts.map +1 -0
- package/dist/cells/index.js +85 -0
- package/dist/cells/index.js.map +1 -0
- package/dist/components/ConditionCards.d.ts +18 -0
- package/dist/components/ConditionCards.d.ts.map +1 -0
- package/dist/components/ConditionCards.js +28 -0
- package/dist/components/ConditionCards.js.map +1 -0
- package/dist/components/EvidenceTrail.d.ts +54 -0
- package/dist/components/EvidenceTrail.d.ts.map +1 -0
- package/dist/components/EvidenceTrail.js +98 -0
- package/dist/components/EvidenceTrail.js.map +1 -0
- package/dist/dispatch/SubRendererDispatch.d.ts +39 -0
- package/dist/dispatch/SubRendererDispatch.d.ts.map +1 -0
- package/dist/dispatch/SubRendererDispatch.js +153 -0
- package/dist/dispatch/SubRendererDispatch.js.map +1 -0
- package/dist/hooks/useProseExtraction.d.ts +38 -0
- package/dist/hooks/useProseExtraction.d.ts.map +1 -0
- package/dist/hooks/useProseExtraction.js +93 -0
- package/dist/hooks/useProseExtraction.js.map +1 -0
- package/dist/index.d.ts +32 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/provenance/ProvenanceSectionIcon.d.ts +15 -0
- package/dist/provenance/ProvenanceSectionIcon.d.ts.map +1 -0
- package/dist/provenance/ProvenanceSectionIcon.js +11 -0
- package/dist/provenance/ProvenanceSectionIcon.js.map +1 -0
- package/dist/renderers/AccordionRenderer.d.ts +29 -0
- package/dist/renderers/AccordionRenderer.d.ts.map +1 -0
- package/dist/renderers/AccordionRenderer.js +315 -0
- package/dist/renderers/AccordionRenderer.js.map +1 -0
- package/dist/renderers/CardGridRenderer.d.ts +24 -0
- package/dist/renderers/CardGridRenderer.d.ts.map +1 -0
- package/dist/renderers/CardGridRenderer.js +321 -0
- package/dist/renderers/CardGridRenderer.js.map +1 -0
- package/dist/renderers/CardRenderer.d.ts +27 -0
- package/dist/renderers/CardRenderer.d.ts.map +1 -0
- package/dist/renderers/CardRenderer.js +337 -0
- package/dist/renderers/CardRenderer.js.map +1 -0
- package/dist/renderers/IdeaEvolutionRenderer.d.ts +16 -0
- package/dist/renderers/IdeaEvolutionRenderer.d.ts.map +1 -0
- package/dist/renderers/IdeaEvolutionRenderer.js +187 -0
- package/dist/renderers/IdeaEvolutionRenderer.js.map +1 -0
- package/dist/renderers/ProseRenderer.d.ts +10 -0
- package/dist/renderers/ProseRenderer.d.ts.map +1 -0
- package/dist/renderers/ProseRenderer.js +42 -0
- package/dist/renderers/ProseRenderer.js.map +1 -0
- package/dist/renderers/RawJsonRenderer.d.ts +8 -0
- package/dist/renderers/RawJsonRenderer.d.ts.map +1 -0
- package/dist/renderers/RawJsonRenderer.js +17 -0
- package/dist/renderers/RawJsonRenderer.js.map +1 -0
- package/dist/renderers/StatSummaryRenderer.d.ts +12 -0
- package/dist/renderers/StatSummaryRenderer.d.ts.map +1 -0
- package/dist/renderers/StatSummaryRenderer.js +93 -0
- package/dist/renderers/StatSummaryRenderer.js.map +1 -0
- package/dist/renderers/SynthesisRenderer.d.ts +15 -0
- package/dist/renderers/SynthesisRenderer.d.ts.map +1 -0
- package/dist/renderers/SynthesisRenderer.js +60 -0
- package/dist/renderers/SynthesisRenderer.js.map +1 -0
- package/dist/renderers/TableRenderer.d.ts +19 -0
- package/dist/renderers/TableRenderer.d.ts.map +1 -0
- package/dist/renderers/TableRenderer.js +273 -0
- package/dist/renderers/TableRenderer.js.map +1 -0
- package/dist/styles/accordion.css +376 -0
- package/dist/styles/index.css +5 -0
- package/dist/styles/renderers.css +1049 -0
- package/dist/sub-renderers/SubRenderers.d.ts +73 -0
- package/dist/sub-renderers/SubRenderers.d.ts.map +1 -0
- package/dist/sub-renderers/SubRenderers.js +2462 -0
- package/dist/sub-renderers/SubRenderers.js.map +1 -0
- package/dist/tokens/DesignTokenContext.d.ts +40 -0
- package/dist/tokens/DesignTokenContext.d.ts.map +1 -0
- package/dist/tokens/DesignTokenContext.js +408 -0
- package/dist/tokens/DesignTokenContext.js.map +1 -0
- package/dist/types/designTokens.d.ts +220 -0
- package/dist/types/designTokens.d.ts.map +1 -0
- package/dist/types/designTokens.js +8 -0
- package/dist/types/designTokens.js.map +1 -0
- package/dist/types/index.d.ts +32 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +5 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/styles.d.ts +38 -0
- package/dist/types/styles.d.ts.map +1 -0
- package/dist/types/styles.js +14 -0
- package/dist/types/styles.js.map +1 -0
- package/dist/utils/tokenFlattener.d.ts +14 -0
- package/dist/utils/tokenFlattener.d.ts.map +1 -0
- package/dist/utils/tokenFlattener.js +56 -0
- package/dist/utils/tokenFlattener.js.map +1 -0
- package/package.json +31 -0
- package/src/cells/TemplateCardCell.tsx +439 -0
- package/src/cells/index.ts +98 -0
- package/src/components/ConditionCards.tsx +109 -0
- package/src/components/EvidenceTrail.tsx +203 -0
- package/src/dispatch/SubRendererDispatch.tsx +282 -0
- package/src/hooks/useProseExtraction.ts +125 -0
- package/src/index.ts +82 -0
- package/src/provenance/ProvenanceSectionIcon.tsx +19 -0
- package/src/renderers/AccordionRenderer.tsx +609 -0
- package/src/renderers/CardGridRenderer.tsx +608 -0
- package/src/renderers/CardRenderer.tsx +517 -0
- package/src/renderers/ProseRenderer.tsx +85 -0
- package/src/renderers/RawJsonRenderer.tsx +37 -0
- package/src/renderers/StatSummaryRenderer.tsx +182 -0
- package/src/renderers/TableRenderer.tsx +470 -0
- package/src/styles/accordion.css +376 -0
- package/src/styles/index.css +5 -0
- package/src/styles/renderers.css +1049 -0
- package/src/sub-renderers/SubRenderers.tsx +3487 -0
- package/src/tokens/DesignTokenContext.tsx +502 -0
- package/src/types/designTokens.ts +236 -0
- package/src/types/index.ts +53 -0
- package/src/types/styles.ts +44 -0
- package/src/utils/tokenFlattener.ts +64 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ConditionCards — Domain-specific sub-renderers for Conditions of Possibility sections.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from AccordionRenderer to follow the data-driven sub-renderer pattern.
|
|
5
|
+
* These preserve the rich visual treatment for enabling/constraining conditions:
|
|
6
|
+
* - Condition type colored chips
|
|
7
|
+
* - How-managed semantic badges
|
|
8
|
+
* - Prior works tags
|
|
9
|
+
* - Evidence blockquotes
|
|
10
|
+
*
|
|
11
|
+
* Registered as named sub-renderers in SubRenderers.tsx:
|
|
12
|
+
* enabling_conditions → EnableConditionsSubRenderer
|
|
13
|
+
* constraining_conditions → ConstrainConditionsSubRenderer
|
|
14
|
+
*/
|
|
15
|
+
import type { SubRendererProps } from '../types';
|
|
16
|
+
export declare function EnableConditionsSubRenderer({ data, config }: SubRendererProps): import("react/jsx-runtime").JSX.Element | null;
|
|
17
|
+
export declare function ConstrainConditionsSubRenderer({ data, config }: SubRendererProps): import("react/jsx-runtime").JSX.Element | null;
|
|
18
|
+
//# sourceMappingURL=ConditionCards.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionCards.d.ts","sourceRoot":"","sources":["../../src/components/ConditionCards.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAMjD,wBAAgB,2BAA2B,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,gBAAgB,kDAqD7E;AAID,wBAAgB,8BAA8B,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,gBAAgB,kDA6BhF"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useDesignTokens } from '../tokens/DesignTokenContext';
|
|
3
|
+
// ── Enabling Conditions Sub-Renderer ─────────────────────
|
|
4
|
+
export function EnableConditionsSubRenderer({ data, config }) {
|
|
5
|
+
const { getCategoryColor } = useDesignTokens();
|
|
6
|
+
if (!data || !Array.isArray(data) || data.length === 0)
|
|
7
|
+
return null;
|
|
8
|
+
const conditions = data;
|
|
9
|
+
const sectionDesc = config.section_description ||
|
|
10
|
+
'How the author\'s prior work makes the current argument possible';
|
|
11
|
+
const so = config._style_overrides;
|
|
12
|
+
return (_jsxs(_Fragment, { children: [_jsx("p", { className: "gen-section-desc", style: so?.prose || undefined, children: sectionDesc }), _jsx("div", { className: "gen-conditions-grid", children: conditions.map(cond => (_jsxs("div", { className: "gen-condition-card enabling", style: so?.card || undefined, children: [_jsxs("div", { className: "gen-condition-header", children: [_jsx("span", { className: "gen-condition-type", style: {
|
|
13
|
+
borderColor: getCategoryColor('condition', String(cond.condition_type))?.text || 'var(--dt-text-muted, #64748b)',
|
|
14
|
+
color: getCategoryColor('condition', String(cond.condition_type))?.text || 'var(--dt-text-muted, #64748b)',
|
|
15
|
+
...so?.chip,
|
|
16
|
+
}, children: String(cond.condition_type || '').replace(/_/g, ' ') }), cond.how_managed ? (_jsx("span", { className: `gen-managed-badge managed-${cond.how_managed}`, style: so?.badge || undefined, children: String(cond.how_managed) })) : null] }), _jsx("p", { className: "gen-condition-desc", children: String(cond.description || '') }), cond.how_it_enables ? (_jsxs("p", { className: "gen-condition-enables", children: [_jsx("strong", { children: "How it enables:" }), " ", String(cond.how_it_enables)] })) : null, Array.isArray(cond.prior_works_involved) && cond.prior_works_involved.length > 0 && (_jsx("div", { className: "gen-condition-works", children: cond.prior_works_involved.map((w, i) => (_jsx("span", { className: "gen-work-tag", children: w }, i))) })), cond.evidence ? (_jsx("blockquote", { className: "gen-condition-evidence", children: String(cond.evidence) })) : null] }, String(cond.condition_id)))) })] }));
|
|
17
|
+
}
|
|
18
|
+
// ── Constraining Conditions Sub-Renderer ─────────────────
|
|
19
|
+
export function ConstrainConditionsSubRenderer({ data, config }) {
|
|
20
|
+
if (!data || !Array.isArray(data) || data.length === 0)
|
|
21
|
+
return null;
|
|
22
|
+
const constraints = data;
|
|
23
|
+
const sectionDesc = config.section_description ||
|
|
24
|
+
'How prior work limits or constrains the current argument';
|
|
25
|
+
const so = config._style_overrides;
|
|
26
|
+
return (_jsxs(_Fragment, { children: [_jsx("p", { className: "gen-section-desc", style: so?.prose || undefined, children: sectionDesc }), _jsx("div", { className: "gen-constraints-list", children: constraints.map((constraint, i) => (_jsxs("div", { className: "gen-constraint-card", style: so?.card || undefined, children: [constraint.type ? (_jsx("span", { className: "gen-constraint-type", style: so?.chip || undefined, children: String(constraint.type).replace(/_/g, ' ') })) : null, _jsx("p", { children: String(constraint.description || '') }), constraint.how_navigated ? (_jsxs("p", { className: "gen-constraint-nav", children: [_jsx("strong", { children: "How navigated:" }), " ", String(constraint.how_navigated)] })) : null] }, String(constraint.constraint_id || i)))) })] }));
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=ConditionCards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConditionCards.js","sourceRoot":"","sources":["../../src/components/ConditionCards.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* EvidenceTrail — Reusable vertical chain of evidence steps.
|
|
3
|
+
*
|
|
4
|
+
* Renders a narrative progression with dot markers, gradient connectors,
|
|
5
|
+
* and quoted content. Each step can contain multiple items (with title,
|
|
6
|
+
* quote, citation) or a single text block.
|
|
7
|
+
*
|
|
8
|
+
* Two usage modes:
|
|
9
|
+
* 1. Direct — import EvidenceTrail and pass pre-built steps array
|
|
10
|
+
* 2. Sub-renderer — use EvidenceTrailSubRenderer with config-driven
|
|
11
|
+
* field mapping (registered in SubRenderers.tsx)
|
|
12
|
+
*
|
|
13
|
+
* CSS classes used (from renderers.css):
|
|
14
|
+
* .gen-evidence-trail, .gen-trail-chain, .gen-trail-step,
|
|
15
|
+
* .gen-trail-marker, .gen-trail-dot, .gen-trail-label,
|
|
16
|
+
* .gen-trail-content, .gen-trail-connector, .gen-trail-quote,
|
|
17
|
+
* .gen-quote-mark, .gen-trail-cite, .ar-card-assessment
|
|
18
|
+
*/
|
|
19
|
+
export interface EvidenceTrailItem {
|
|
20
|
+
title?: string;
|
|
21
|
+
quote?: string;
|
|
22
|
+
cite?: string;
|
|
23
|
+
}
|
|
24
|
+
export interface EvidenceTrailStep {
|
|
25
|
+
label: string;
|
|
26
|
+
variant: 'prior' | 'current' | 'assessment';
|
|
27
|
+
items?: EvidenceTrailItem[];
|
|
28
|
+
text?: string;
|
|
29
|
+
}
|
|
30
|
+
export interface EvidenceTrailProps {
|
|
31
|
+
steps: EvidenceTrailStep[];
|
|
32
|
+
accentColor?: string;
|
|
33
|
+
borderColor?: string;
|
|
34
|
+
}
|
|
35
|
+
export declare function EvidenceTrail({ steps, accentColor, borderColor }: EvidenceTrailProps): import("react/jsx-runtime").JSX.Element | null;
|
|
36
|
+
/**
|
|
37
|
+
* Config shape for sub-renderer usage:
|
|
38
|
+
* steps: Array<{
|
|
39
|
+
* label: string; — display label ("Prior work")
|
|
40
|
+
* field: string; — data field to read from
|
|
41
|
+
* variant: string; — "prior" | "current" | "assessment"
|
|
42
|
+
* item_title_field?: string; — field within each item for title
|
|
43
|
+
* item_quote_field?: string; — field within each item for quote
|
|
44
|
+
* item_cite_field?: string; — field within each item for citation
|
|
45
|
+
* is_text?: boolean; — treat field as single text (not array)
|
|
46
|
+
* }>
|
|
47
|
+
* accent_color?: string;
|
|
48
|
+
* border_color?: string;
|
|
49
|
+
*/
|
|
50
|
+
export declare function EvidenceTrailSubRenderer({ data, config, }: {
|
|
51
|
+
data: unknown;
|
|
52
|
+
config: Record<string, unknown>;
|
|
53
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
54
|
+
//# sourceMappingURL=EvidenceTrail.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EvidenceTrail.d.ts","sourceRoot":"","sources":["../../src/components/EvidenceTrail.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAMH,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,YAAY,CAAC;IAC5C,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,iBAAiB,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAID,wBAAgB,aAAa,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,EAAE,kBAAkB,kDA+EpF;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,wBAAwB,CAAC,EACvC,IAAI,EACJ,MAAM,GACP,EAAE;IACD,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC,kDAuDA"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* EvidenceTrail — Reusable vertical chain of evidence steps.
|
|
4
|
+
*
|
|
5
|
+
* Renders a narrative progression with dot markers, gradient connectors,
|
|
6
|
+
* and quoted content. Each step can contain multiple items (with title,
|
|
7
|
+
* quote, citation) or a single text block.
|
|
8
|
+
*
|
|
9
|
+
* Two usage modes:
|
|
10
|
+
* 1. Direct — import EvidenceTrail and pass pre-built steps array
|
|
11
|
+
* 2. Sub-renderer — use EvidenceTrailSubRenderer with config-driven
|
|
12
|
+
* field mapping (registered in SubRenderers.tsx)
|
|
13
|
+
*
|
|
14
|
+
* CSS classes used (from renderers.css):
|
|
15
|
+
* .gen-evidence-trail, .gen-trail-chain, .gen-trail-step,
|
|
16
|
+
* .gen-trail-marker, .gen-trail-dot, .gen-trail-label,
|
|
17
|
+
* .gen-trail-content, .gen-trail-connector, .gen-trail-quote,
|
|
18
|
+
* .gen-quote-mark, .gen-trail-cite, .ar-card-assessment
|
|
19
|
+
*/
|
|
20
|
+
import React from 'react';
|
|
21
|
+
// ── Core component ───────────────────────────────────────
|
|
22
|
+
export function EvidenceTrail({ steps, accentColor, borderColor }) {
|
|
23
|
+
if (steps.length === 0)
|
|
24
|
+
return null;
|
|
25
|
+
const accent = accentColor || 'var(--dt-text-muted)';
|
|
26
|
+
const border = borderColor || 'var(--dt-border-light)';
|
|
27
|
+
return (_jsx("div", { className: "gen-trail-chain", children: steps.map((step, idx) => {
|
|
28
|
+
const prevStep = idx > 0 ? steps[idx - 1] : null;
|
|
29
|
+
const showConnector = Boolean(prevStep);
|
|
30
|
+
const isLast = step.variant === 'assessment';
|
|
31
|
+
return (_jsxs(React.Fragment, { children: [showConnector && (_jsx("div", { className: `gen-trail-connector${isLast ? ' gen-trail-connector--final' : ''}`, style: {
|
|
32
|
+
background: isLast
|
|
33
|
+
? border
|
|
34
|
+
: `linear-gradient(to bottom, ${border}, ${accent})`,
|
|
35
|
+
} })), _jsxs("div", { className: `gen-trail-step gen-trail-step--${step.variant}`, children: [_jsxs("div", { className: "gen-trail-marker", children: [_jsx("span", { className: `gen-trail-dot gen-trail-dot--${step.variant}`, style: step.variant === 'current' ? { background: accent } : undefined }), _jsx("span", { className: "gen-trail-label", children: step.label })] }), _jsxs("div", { className: "gen-trail-content", children: [step.items && step.items.map((item, i) => {
|
|
36
|
+
if (step.variant === 'prior') {
|
|
37
|
+
return (_jsxs("div", { className: "gen-trail-ref", children: [item.title && _jsx("span", { className: "gen-ref-title", children: item.title }), item.quote && (_jsxs("blockquote", { className: "gen-trail-quote", children: [_jsx("span", { className: "gen-quote-mark", children: "\u201C" }), item.quote, _jsx("span", { className: "gen-quote-mark", children: "\u201D" })] }))] }, i));
|
|
38
|
+
}
|
|
39
|
+
// current and other variants with items
|
|
40
|
+
return (_jsxs("blockquote", { className: "gen-trail-quote gen-trail-quote--current", style: { borderLeftColor: border }, children: [_jsx("span", { className: "gen-quote-mark", children: "\u201C" }), item.quote || item.title || '', _jsx("span", { className: "gen-quote-mark", children: "\u201D" }), item.cite && _jsx("cite", { className: "gen-trail-cite", children: item.cite })] }, i));
|
|
41
|
+
}), step.text && (_jsx("p", { className: "ar-card-assessment", children: step.text }))] })] })] }, idx));
|
|
42
|
+
}) }));
|
|
43
|
+
}
|
|
44
|
+
// ── Sub-renderer wrapper (config-driven) ─────────────────
|
|
45
|
+
/**
|
|
46
|
+
* Config shape for sub-renderer usage:
|
|
47
|
+
* steps: Array<{
|
|
48
|
+
* label: string; — display label ("Prior work")
|
|
49
|
+
* field: string; — data field to read from
|
|
50
|
+
* variant: string; — "prior" | "current" | "assessment"
|
|
51
|
+
* item_title_field?: string; — field within each item for title
|
|
52
|
+
* item_quote_field?: string; — field within each item for quote
|
|
53
|
+
* item_cite_field?: string; — field within each item for citation
|
|
54
|
+
* is_text?: boolean; — treat field as single text (not array)
|
|
55
|
+
* }>
|
|
56
|
+
* accent_color?: string;
|
|
57
|
+
* border_color?: string;
|
|
58
|
+
*/
|
|
59
|
+
export function EvidenceTrailSubRenderer({ data, config, }) {
|
|
60
|
+
const obj = (data && typeof data === 'object' && !Array.isArray(data))
|
|
61
|
+
? data
|
|
62
|
+
: {};
|
|
63
|
+
const stepConfigs = config.steps;
|
|
64
|
+
if (!stepConfigs || !Array.isArray(stepConfigs))
|
|
65
|
+
return null;
|
|
66
|
+
const steps = [];
|
|
67
|
+
for (const sc of stepConfigs) {
|
|
68
|
+
const raw = obj[sc.field];
|
|
69
|
+
if (raw === undefined || raw === null || raw === '')
|
|
70
|
+
continue;
|
|
71
|
+
const variant = (sc.variant || 'prior');
|
|
72
|
+
if (sc.is_text || typeof raw === 'string') {
|
|
73
|
+
steps.push({ label: sc.label, variant, text: String(raw) });
|
|
74
|
+
}
|
|
75
|
+
else if (Array.isArray(raw)) {
|
|
76
|
+
const items = raw.map((entry) => {
|
|
77
|
+
if (typeof entry === 'string')
|
|
78
|
+
return { quote: entry };
|
|
79
|
+
if (typeof entry === 'object' && entry !== null) {
|
|
80
|
+
const e = entry;
|
|
81
|
+
return {
|
|
82
|
+
title: sc.item_title_field ? String(e[sc.item_title_field] || '') : undefined,
|
|
83
|
+
quote: sc.item_quote_field ? String(e[sc.item_quote_field] || '') : undefined,
|
|
84
|
+
cite: sc.item_cite_field ? String(e[sc.item_cite_field] || '') : undefined,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return { quote: String(entry) };
|
|
88
|
+
});
|
|
89
|
+
if (items.length > 0) {
|
|
90
|
+
steps.push({ label: sc.label, variant, items });
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (steps.length === 0)
|
|
95
|
+
return null;
|
|
96
|
+
return (_jsx(EvidenceTrail, { steps: steps, accentColor: config.accent_color, borderColor: config.border_color }));
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=EvidenceTrail.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EvidenceTrail.js","sourceRoot":"","sources":["../../src/components/EvidenceTrail.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SubRendererDispatch — Shared dispatch utilities for sub-renderer resolution.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from AccordionRenderer to be shared by both AccordionRenderer
|
|
5
|
+
* and CardRenderer. Provides:
|
|
6
|
+
* - Pre-render compatibility checking (data type vs renderer expectations)
|
|
7
|
+
* - Defense-in-depth fallback wrapper (catches empty output at layout time)
|
|
8
|
+
* - Generic recursive renderer for arbitrary data shapes
|
|
9
|
+
* - Enum color resolution via design tokens
|
|
10
|
+
*/
|
|
11
|
+
import React from 'react';
|
|
12
|
+
import type { SubRendererProps } from '../types';
|
|
13
|
+
import type { SemanticTriple } from '../types/designTokens';
|
|
14
|
+
export declare const REQUIRES_ARRAY: Set<string>;
|
|
15
|
+
export declare const REQUIRES_OBJECT: Set<string>;
|
|
16
|
+
export declare function isRendererCompatible(rendererType: string, data: unknown, rendererConfig?: Record<string, unknown>): boolean;
|
|
17
|
+
export declare function SubRendererFallback({ Renderer, data, config, sectionKey }: {
|
|
18
|
+
Renderer: React.FC<SubRendererProps>;
|
|
19
|
+
data: unknown;
|
|
20
|
+
config: Record<string, unknown>;
|
|
21
|
+
sectionKey: string;
|
|
22
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
23
|
+
export declare function resolveEnumColor(getSemanticColor: (scale: string, level: string) => SemanticTriple | null, value: string): {
|
|
24
|
+
bg: string;
|
|
25
|
+
text: string;
|
|
26
|
+
} | null;
|
|
27
|
+
export declare function GenericSectionRenderer({ data, depth, subRenderers }: {
|
|
28
|
+
data: unknown;
|
|
29
|
+
depth?: number;
|
|
30
|
+
subRenderers?: Record<string, {
|
|
31
|
+
renderer_type: string;
|
|
32
|
+
config?: Record<string, unknown>;
|
|
33
|
+
}>;
|
|
34
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
35
|
+
export declare function GenericMiniCard({ data, depth }: {
|
|
36
|
+
data: unknown;
|
|
37
|
+
depth: number;
|
|
38
|
+
}): import("react/jsx-runtime").JSX.Element | null;
|
|
39
|
+
//# sourceMappingURL=SubRendererDispatch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubRendererDispatch.d.ts","sourceRoot":"","sources":["../../src/dispatch/SubRendererDispatch.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAA4C,MAAM,OAAO,CAAC;AAEjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAO5D,eAAO,MAAM,cAAc,aAIzB,CAAC;AACH,eAAO,MAAM,eAAe,aAAkE,CAAC;AAE/F,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EACb,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,OAAO,CAMT;AAQD,wBAAgB,mBAAmB,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,EAAE;IAC1E,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC;IACrC,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB,2CAuBA;AAOD,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,cAAc,GAAG,IAAI,EACzE,KAAK,EAAE,MAAM,GACZ;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMrC;AAUD,wBAAgB,sBAAsB,CAAC,EAAE,IAAI,EAAE,KAAS,EAAE,YAAY,EAAE,EAAE;IACxE,IAAI,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC,CAAC;CAC5F,kDAwHA;AAED,wBAAgB,eAAe,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,kDAsDhF"}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* SubRendererDispatch — Shared dispatch utilities for sub-renderer resolution.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from AccordionRenderer to be shared by both AccordionRenderer
|
|
6
|
+
* and CardRenderer. Provides:
|
|
7
|
+
* - Pre-render compatibility checking (data type vs renderer expectations)
|
|
8
|
+
* - Defense-in-depth fallback wrapper (catches empty output at layout time)
|
|
9
|
+
* - Generic recursive renderer for arbitrary data shapes
|
|
10
|
+
* - Enum color resolution via design tokens
|
|
11
|
+
*/
|
|
12
|
+
import { useState, useLayoutEffect, useRef } from 'react';
|
|
13
|
+
import { resolveSubRenderer, autoDetectSubRenderer } from '../sub-renderers/SubRenderers';
|
|
14
|
+
import { useDesignTokens } from '../tokens/DesignTokenContext';
|
|
15
|
+
// ── Pre-render compatibility check ──────────────────────
|
|
16
|
+
// Sub-renderers silently return null when data doesn't match their
|
|
17
|
+
// expectations (e.g. chip_grid given a string). This check prevents
|
|
18
|
+
// blank sections by falling through to auto-detection on mismatch.
|
|
19
|
+
export const REQUIRES_ARRAY = new Set([
|
|
20
|
+
'chip_grid', 'mini_card_list', 'timeline_strip',
|
|
21
|
+
'comparison_panel', 'definition_list',
|
|
22
|
+
'intensity_matrix', 'move_repertoire', 'grouped_card_list', 'rich_description_list',
|
|
23
|
+
]);
|
|
24
|
+
export const REQUIRES_OBJECT = new Set(['stat_row', 'phase_timeline', 'distribution_summary']);
|
|
25
|
+
export function isRendererCompatible(rendererType, data, rendererConfig) {
|
|
26
|
+
if (REQUIRES_ARRAY.has(rendererType) && !Array.isArray(data))
|
|
27
|
+
return false;
|
|
28
|
+
if (REQUIRES_OBJECT.has(rendererType) && (typeof data !== 'object' || Array.isArray(data) || data === null))
|
|
29
|
+
return false;
|
|
30
|
+
// evidence_trail requires config.steps array — without it, always returns null
|
|
31
|
+
if (rendererType === 'evidence_trail' && (!rendererConfig?.steps || !Array.isArray(rendererConfig.steps)))
|
|
32
|
+
return false;
|
|
33
|
+
return true;
|
|
34
|
+
}
|
|
35
|
+
// ── Defense-in-depth fallback wrapper ────────────────────
|
|
36
|
+
// Even after the pre-render compatibility check, a sub-renderer might
|
|
37
|
+
// return null for reasons we can't predict (e.g. data is an array but
|
|
38
|
+
// items are wrong shape). This wrapper detects empty output via
|
|
39
|
+
// useLayoutEffect (before browser paint) and swaps in auto-detection.
|
|
40
|
+
export function SubRendererFallback({ Renderer, data, config, sectionKey }) {
|
|
41
|
+
const ref = useRef(null);
|
|
42
|
+
const [fallback, setFallback] = useState(false);
|
|
43
|
+
useLayoutEffect(() => {
|
|
44
|
+
if (ref.current && ref.current.innerHTML.trim() === '') {
|
|
45
|
+
console.warn(`[SubRendererDispatch] Renderer produced empty output for section '${sectionKey}' — falling back to auto-detection`);
|
|
46
|
+
setFallback(true);
|
|
47
|
+
}
|
|
48
|
+
}, []); // eslint-disable-line react-hooks/exhaustive-deps
|
|
49
|
+
if (fallback) {
|
|
50
|
+
const autoType = autoDetectSubRenderer(data);
|
|
51
|
+
const AutoComp = autoType ? resolveSubRenderer(autoType) : null;
|
|
52
|
+
if (AutoComp) {
|
|
53
|
+
return _jsx(AutoComp, { data: data, config: config });
|
|
54
|
+
}
|
|
55
|
+
return _jsx(GenericSectionRenderer, { data: data });
|
|
56
|
+
}
|
|
57
|
+
return _jsx("div", { ref: ref, children: _jsx(Renderer, { data: data, config: config }) });
|
|
58
|
+
}
|
|
59
|
+
// ── Enum color resolution ───────────────────────────────
|
|
60
|
+
// Resolve enum-like string values to semantic token colors.
|
|
61
|
+
// Tries each semantic scale in order; returns first match or null.
|
|
62
|
+
const SEMANTIC_SCALES = ['severity', 'visibility', 'change', 'modality'];
|
|
63
|
+
export function resolveEnumColor(getSemanticColor, value) {
|
|
64
|
+
for (const scale of SEMANTIC_SCALES) {
|
|
65
|
+
const result = getSemanticColor(scale, value);
|
|
66
|
+
if (result)
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
// ── Generic Section Renderer ────────────────────────────
|
|
72
|
+
// Recursively renders arbitrary structured data shapes:
|
|
73
|
+
// - string → paragraphs (with enum badge detection)
|
|
74
|
+
// - string[] → chip grid
|
|
75
|
+
// - object[] → mini-cards with key-value rendering
|
|
76
|
+
// - object → recursive render with indentation (with sub-renderer dispatch)
|
|
77
|
+
// - primitive → inline display
|
|
78
|
+
export function GenericSectionRenderer({ data, depth = 0, subRenderers }) {
|
|
79
|
+
const { getSemanticColor } = useDesignTokens();
|
|
80
|
+
if (data === null || data === undefined)
|
|
81
|
+
return null;
|
|
82
|
+
// String → paragraphs
|
|
83
|
+
if (typeof data === 'string') {
|
|
84
|
+
// Check if it looks like an enum value via semantic token lookup
|
|
85
|
+
if (data.length < 30) {
|
|
86
|
+
const enumStyle = resolveEnumColor(getSemanticColor, data);
|
|
87
|
+
if (enumStyle) {
|
|
88
|
+
return (_jsx("span", { className: "gen-enum-badge", style: { backgroundColor: enumStyle.bg, color: enumStyle.text }, children: data.replace(/_/g, ' ') }));
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return (_jsx("div", { className: "gen-field-text", style: { marginBottom: 'var(--space-xs, 0.25rem)' }, children: data.split('\n').map((p, i) => (_jsx("p", { children: p }, i))) }));
|
|
92
|
+
}
|
|
93
|
+
// Number/boolean → inline
|
|
94
|
+
if (typeof data === 'number') {
|
|
95
|
+
return _jsx("span", { className: "gen-number-value", children: String(data) });
|
|
96
|
+
}
|
|
97
|
+
if (typeof data === 'boolean') {
|
|
98
|
+
const boolColor = getSemanticColor('severity', data ? 'low' : 'high');
|
|
99
|
+
return (_jsx("span", { className: "gen-enum-badge", style: {
|
|
100
|
+
backgroundColor: boolColor?.bg || 'rgba(34, 197, 94, 0.12)',
|
|
101
|
+
color: boolColor?.text || '#16a34a',
|
|
102
|
+
}, children: String(data) }));
|
|
103
|
+
}
|
|
104
|
+
// Array of strings → chip grid
|
|
105
|
+
if (Array.isArray(data) && data.length > 0 && data.every(d => typeof d === 'string')) {
|
|
106
|
+
return (_jsx("div", { className: "gen-chip-grid", children: data.map((item, i) => (_jsx("span", { className: "gen-chip-inline", children: item }, i))) }));
|
|
107
|
+
}
|
|
108
|
+
// Array of objects → mini-cards
|
|
109
|
+
if (Array.isArray(data) && data.length > 0) {
|
|
110
|
+
return (_jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 'var(--space-sm, 0.5rem)', margin: 'var(--space-xs, 0.25rem) 0' }, children: data.map((item, i) => (_jsx(GenericMiniCard, { data: item, depth: depth }, i))) }));
|
|
111
|
+
}
|
|
112
|
+
// Empty array
|
|
113
|
+
if (Array.isArray(data) && data.length === 0) {
|
|
114
|
+
return _jsx("p", { className: "gen-empty-list", children: "None" });
|
|
115
|
+
}
|
|
116
|
+
// Object → key-value pairs (with optional sub-renderer dispatch)
|
|
117
|
+
if (typeof data === 'object') {
|
|
118
|
+
const obj = data;
|
|
119
|
+
const entries = Object.entries(obj).filter(([, v]) => v !== null && v !== undefined && v !== '');
|
|
120
|
+
if (entries.length === 0)
|
|
121
|
+
return null;
|
|
122
|
+
return (_jsx("div", { className: depth > 0 ? 'gen-nested-content' : undefined, children: entries.map(([key, value]) => {
|
|
123
|
+
// Check if a sub-renderer is configured for this key
|
|
124
|
+
const subHint = subRenderers?.[key];
|
|
125
|
+
if (subHint) {
|
|
126
|
+
const SubComp = resolveSubRenderer(subHint.renderer_type);
|
|
127
|
+
if (SubComp) {
|
|
128
|
+
return (_jsxs("div", { className: "gen-field-row", children: [_jsxs("div", { className: "gen-field-label", children: [key.replace(/_/g, ' '), ":"] }), _jsx(SubComp, { data: value, config: subHint.config || {} })] }, key));
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return (_jsxs("div", { className: "gen-field-row", children: [_jsxs("span", { className: "gen-field-label", children: [key.replace(/_/g, ' '), ":"] }), typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ? (_jsx("span", { className: "gen-field-value-inline", children: _jsx(GenericSectionRenderer, { data: value, depth: depth + 1 }) })) : (_jsx("div", { className: "gen-field-value-block", children: _jsx(GenericSectionRenderer, { data: value, depth: depth + 1 }) }))] }, key));
|
|
132
|
+
}) }));
|
|
133
|
+
}
|
|
134
|
+
// Fallback
|
|
135
|
+
return _jsx("span", { style: { fontSize: 'var(--type-body, 0.9375rem)' }, children: String(data) });
|
|
136
|
+
}
|
|
137
|
+
export function GenericMiniCard({ data, depth }) {
|
|
138
|
+
const { getSemanticColor } = useDesignTokens();
|
|
139
|
+
if (typeof data !== 'object' || data === null) {
|
|
140
|
+
return _jsx(GenericSectionRenderer, { data: data, depth: depth + 1 });
|
|
141
|
+
}
|
|
142
|
+
const obj = data;
|
|
143
|
+
const entries = Object.entries(obj).filter(([, v]) => v !== null && v !== undefined && v !== '');
|
|
144
|
+
if (entries.length === 0)
|
|
145
|
+
return null;
|
|
146
|
+
// Heuristic: find a "name" or "title" field for the card header
|
|
147
|
+
const nameKey = entries.find(([k]) => ['name', 'term', 'title', 'commitment', 'cluster_name', 'channel', 'evidence_type'].includes(k));
|
|
148
|
+
const typeKey = entries.find(([k]) => ['type', 'centrality', 'drift_type', 'explicitness'].includes(k));
|
|
149
|
+
return (_jsxs("div", { className: "gen-mini-card", children: [nameKey && (_jsxs("div", { className: "gen-mini-card-header", children: [_jsx("span", { className: "gen-mini-card-name", children: String(nameKey[1]) }), typeKey && (_jsx(GenericSectionRenderer, { data: typeKey[1], depth: depth + 1 }))] })), entries
|
|
150
|
+
.filter(([k]) => k !== nameKey?.[0] && k !== typeKey?.[0])
|
|
151
|
+
.map(([key, value]) => (_jsxs("div", { className: "gen-mini-card-field", children: [_jsxs("span", { className: "gen-mini-card-label", children: [key.replace(/_/g, ' '), ":"] }), typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ? (_jsx("span", { className: "gen-mini-card-value", style: { marginLeft: 'var(--space-xs, 0.25rem)' }, children: typeof value === 'string' && value.length < 30 && resolveEnumColor(getSemanticColor, value) ? (_jsx(GenericSectionRenderer, { data: value, depth: depth + 1 })) : (String(value)) })) : (_jsx("div", { style: { marginTop: 'var(--space-2xs, 0.125rem)' }, children: _jsx(GenericSectionRenderer, { data: value, depth: depth + 1 }) }))] }, key)))] }));
|
|
152
|
+
}
|
|
153
|
+
//# sourceMappingURL=SubRendererDispatch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SubRendererDispatch.js","sourceRoot":"","sources":["../../src/dispatch/SubRendererDispatch.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useProseExtraction — Detects prose-mode output and extracts structured data.
|
|
3
|
+
*
|
|
4
|
+
* Several workflow passes can produce output in "prose mode" (rich analytical
|
|
5
|
+
* narrative) instead of structured JSON. When this happens the data contains
|
|
6
|
+
* a `_prose_output` marker. This hook:
|
|
7
|
+
*
|
|
8
|
+
* 1. Detects the marker
|
|
9
|
+
* 2. Calls the presentation extraction endpoint to get structured data
|
|
10
|
+
* 3. Manages loading / error / extracted state
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* const { data, loading, error, isProseMode } = useProseExtraction<Pass5Result>(
|
|
14
|
+
* result.pass5_tactics,
|
|
15
|
+
* result._job_id,
|
|
16
|
+
* 'tactics'
|
|
17
|
+
* );
|
|
18
|
+
*/
|
|
19
|
+
interface ProseMarker {
|
|
20
|
+
_prose_output: string;
|
|
21
|
+
_output_mode: 'prose';
|
|
22
|
+
}
|
|
23
|
+
export interface ProseExtractionResult<T> {
|
|
24
|
+
/** The structured data — either raw (if not prose) or extracted */
|
|
25
|
+
data: T | null;
|
|
26
|
+
/** Whether extraction is in progress */
|
|
27
|
+
loading: boolean;
|
|
28
|
+
/** Extraction error message, if any */
|
|
29
|
+
error: string | null;
|
|
30
|
+
/** Whether the source data was prose mode */
|
|
31
|
+
isProseMode: boolean;
|
|
32
|
+
}
|
|
33
|
+
export declare function useProseExtraction<T>(rawData: T | ProseMarker | undefined, jobId: string | undefined, presentEndpoint: string, // e.g. 'tactics', 'conditions', 'synthesis', 'functional'
|
|
34
|
+
options?: {
|
|
35
|
+
apiPathPrefix?: string;
|
|
36
|
+
}): ProseExtractionResult<T>;
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=useProseExtraction.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProseExtraction.d.ts","sourceRoot":"","sources":["../../src/hooks/useProseExtraction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAUH,UAAU,WAAW;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB,CAAC,CAAC;IACtC,mEAAmE;IACnE,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACf,wCAAwC;IACxC,OAAO,EAAE,OAAO,CAAC;IACjB,uCAAuC;IACvC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,6CAA6C;IAC7C,WAAW,EAAE,OAAO,CAAC;CACtB;AAUD,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,OAAO,EAAE,CAAC,GAAG,WAAW,GAAG,SAAS,EACpC,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,eAAe,EAAE,MAAM,EAAE,0DAA0D;AACnF,OAAO,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GACnC,qBAAqB,CAAC,CAAC,CAAC,CAoE1B"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* useProseExtraction — Detects prose-mode output and extracts structured data.
|
|
3
|
+
*
|
|
4
|
+
* Several workflow passes can produce output in "prose mode" (rich analytical
|
|
5
|
+
* narrative) instead of structured JSON. When this happens the data contains
|
|
6
|
+
* a `_prose_output` marker. This hook:
|
|
7
|
+
*
|
|
8
|
+
* 1. Detects the marker
|
|
9
|
+
* 2. Calls the presentation extraction endpoint to get structured data
|
|
10
|
+
* 3. Manages loading / error / extracted state
|
|
11
|
+
*
|
|
12
|
+
* Usage:
|
|
13
|
+
* const { data, loading, error, isProseMode } = useProseExtraction<Pass5Result>(
|
|
14
|
+
* result.pass5_tactics,
|
|
15
|
+
* result._job_id,
|
|
16
|
+
* 'tactics'
|
|
17
|
+
* );
|
|
18
|
+
*/
|
|
19
|
+
import { useState, useEffect } from 'react';
|
|
20
|
+
// Consumer apps set this via env var. Supports CRA and Next.js conventions.
|
|
21
|
+
const API_BASE = (typeof process !== 'undefined' && process.env?.REACT_APP_API_URL) ||
|
|
22
|
+
(typeof process !== 'undefined' && process.env?.NEXT_PUBLIC_API_URL) ||
|
|
23
|
+
'http://localhost:5555/api';
|
|
24
|
+
function isProseMarker(value) {
|
|
25
|
+
return (value != null &&
|
|
26
|
+
typeof value === 'object' &&
|
|
27
|
+
'_prose_output' in value);
|
|
28
|
+
}
|
|
29
|
+
export function useProseExtraction(rawData, jobId, presentEndpoint, // e.g. 'tactics', 'conditions', 'synthesis', 'functional'
|
|
30
|
+
options) {
|
|
31
|
+
const [extracted, setExtracted] = useState(null);
|
|
32
|
+
const [loading, setLoading] = useState(false);
|
|
33
|
+
const [error, setError] = useState(null);
|
|
34
|
+
const proseMode = isProseMarker(rawData);
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
// Not prose mode — nothing to extract
|
|
37
|
+
if (!proseMode || !jobId)
|
|
38
|
+
return;
|
|
39
|
+
// Already extracted
|
|
40
|
+
if (extracted)
|
|
41
|
+
return;
|
|
42
|
+
let cancelled = false;
|
|
43
|
+
const fetchPresentation = async () => {
|
|
44
|
+
setLoading(true);
|
|
45
|
+
setError(null);
|
|
46
|
+
try {
|
|
47
|
+
const prefix = options?.apiPathPrefix || 'analysis/default';
|
|
48
|
+
const response = await fetch(`${API_BASE}/${prefix}/${jobId}/present/${presentEndpoint}`, { method: 'POST' });
|
|
49
|
+
if (cancelled)
|
|
50
|
+
return;
|
|
51
|
+
if (response.ok) {
|
|
52
|
+
const data = await response.json();
|
|
53
|
+
setExtracted(data.data);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
const errData = await response.json().catch(() => ({ detail: 'Unknown error' }));
|
|
57
|
+
setError(errData.detail || `Extraction failed (${response.status})`);
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
if (!cancelled) {
|
|
62
|
+
setError(`Network error: ${e}`);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
if (!cancelled) {
|
|
67
|
+
setLoading(false);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
fetchPresentation();
|
|
72
|
+
return () => {
|
|
73
|
+
cancelled = true;
|
|
74
|
+
};
|
|
75
|
+
}, [proseMode, jobId, presentEndpoint, extracted]);
|
|
76
|
+
// Not prose mode — return raw data directly
|
|
77
|
+
if (!proseMode) {
|
|
78
|
+
return {
|
|
79
|
+
data: rawData ?? null,
|
|
80
|
+
loading: false,
|
|
81
|
+
error: null,
|
|
82
|
+
isProseMode: false,
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
// Prose mode — return extracted data (or loading/error state)
|
|
86
|
+
return {
|
|
87
|
+
data: extracted,
|
|
88
|
+
loading,
|
|
89
|
+
error,
|
|
90
|
+
isProseMode: true,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=useProseExtraction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useProseExtraction.js","sourceRoot":"","sources":["../../src/hooks/useProseExtraction.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @the-syllabus/analysis-renderers — Shared renderer components for analyzer-v2 view definitions.
|
|
3
|
+
*
|
|
4
|
+
* This package provides the complete rendering pipeline:
|
|
5
|
+
* - Container renderers (accordion, card_grid, prose, table, etc.)
|
|
6
|
+
* - Sub-renderers (chip_grid, mini_card_list, distribution_summary, etc.)
|
|
7
|
+
* - Cell renderers (template_card, default auto-classify, etc.)
|
|
8
|
+
* - Design token system (DesignTokenProvider + useDesignTokens hook)
|
|
9
|
+
* - Renderer registry (view_key → component resolution)
|
|
10
|
+
*
|
|
11
|
+
* CSS: import '@the-syllabus/analysis-renderers/styles' for all renderer styles.
|
|
12
|
+
*/
|
|
13
|
+
export type { RendererProps, RendererComponent, CellRendererProps, CellRendererComponent, SubRendererProps, SubRendererComponent, StyleOverrides, DesignTokenSet, SemanticTriple, CategoricalItem, PrimitiveTokens, SurfaceTokens, ScaleTokens, SemanticTokens, CategoricalTokens, ComponentTokens, } from './types';
|
|
14
|
+
export { getSO } from './types';
|
|
15
|
+
export { DesignTokenProvider, useDesignTokens, FALLBACK_TOKENS, } from './tokens/DesignTokenContext';
|
|
16
|
+
export { flattenTokens } from './utils/tokenFlattener';
|
|
17
|
+
export { AccordionRenderer } from './renderers/AccordionRenderer';
|
|
18
|
+
export { CardGridRenderer } from './renderers/CardGridRenderer';
|
|
19
|
+
export { CardRenderer } from './renderers/CardRenderer';
|
|
20
|
+
export { ProseRenderer, formatProse } from './renderers/ProseRenderer';
|
|
21
|
+
export { TableRenderer } from './renderers/TableRenderer';
|
|
22
|
+
export { StatSummaryRenderer } from './renderers/StatSummaryRenderer';
|
|
23
|
+
export { RawJsonRenderer } from './renderers/RawJsonRenderer';
|
|
24
|
+
export { resolveSubRenderer, autoDetectSubRenderer, DistributionSummary, } from './sub-renderers/SubRenderers';
|
|
25
|
+
export { isRendererCompatible, SubRendererFallback, GenericSectionRenderer, GenericMiniCard, resolveEnumColor, REQUIRES_ARRAY, REQUIRES_OBJECT, } from './dispatch/SubRendererDispatch';
|
|
26
|
+
export { cellRenderers, DefaultCardCell } from './cells';
|
|
27
|
+
export { TemplateCardCell } from './cells/TemplateCardCell';
|
|
28
|
+
export { EvidenceTrail, EvidenceTrailSubRenderer } from './components/EvidenceTrail';
|
|
29
|
+
export type { EvidenceTrailStep, EvidenceTrailItem } from './components/EvidenceTrail';
|
|
30
|
+
export { EnableConditionsSubRenderer, ConstrainConditionsSubRenderer } from './components/ConditionCards';
|
|
31
|
+
export { useProseExtraction } from './hooks/useProseExtraction';
|
|
32
|
+
//# sourceMappingURL=index.d.ts.map
|