@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,321 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* CardGridRenderer — Generic card grid with pluggable cell renderers.
|
|
4
|
+
*
|
|
5
|
+
* Layout shell that handles:
|
|
6
|
+
* - Data normalization (arrays stay as-is, Records are flattened)
|
|
7
|
+
* - Grouping by a configurable field
|
|
8
|
+
* - Summary bar with distribution counts
|
|
9
|
+
* - Variable card sizing with hero card pattern
|
|
10
|
+
* - Hover elevation and card type indicators
|
|
11
|
+
* - Style override consumption for polish integration
|
|
12
|
+
* - Expandable cards (optional)
|
|
13
|
+
*
|
|
14
|
+
* renderer_config keys:
|
|
15
|
+
* cell_renderer: string — key into cellRenderers registry
|
|
16
|
+
* group_by: string — field to group items by (optional)
|
|
17
|
+
* group_style_map: string — category name for getCategoryColor lookups
|
|
18
|
+
* group_descriptions: Record — optional per-group description text
|
|
19
|
+
* columns: number — grid columns (default: 2)
|
|
20
|
+
* expandable: boolean — cards expand on click (default: false)
|
|
21
|
+
* summary_fields: string[] — fields for summary bar above grid
|
|
22
|
+
*/
|
|
23
|
+
import { useState, useMemo, useEffect, useRef } from 'react';
|
|
24
|
+
import { cellRenderers, DefaultCardCell } from '../cells';
|
|
25
|
+
import { useDesignTokens } from '../tokens/DesignTokenContext';
|
|
26
|
+
import { useProseExtraction } from '../hooks/useProseExtraction';
|
|
27
|
+
import { getSO } from '../types/styles';
|
|
28
|
+
import { DistributionSummary } from '../sub-renderers/SubRenderers';
|
|
29
|
+
// ── Content length estimation ─────────────────────────────
|
|
30
|
+
/** Estimate the text content length of an item for hero detection */
|
|
31
|
+
function estimateContentLength(item) {
|
|
32
|
+
let total = 0;
|
|
33
|
+
for (const value of Object.values(item)) {
|
|
34
|
+
if (typeof value === 'string')
|
|
35
|
+
total += value.length;
|
|
36
|
+
}
|
|
37
|
+
return total;
|
|
38
|
+
}
|
|
39
|
+
// ── Prose mode rendering helpers ─────────────────────────
|
|
40
|
+
function ProseLoadingState() {
|
|
41
|
+
return (_jsxs("div", { style: { padding: '2rem', textAlign: 'center' }, children: [_jsx("div", { className: "gen-extracting-spinner" }), _jsx("p", { children: "Preparing structured view from analytical prose..." })] }));
|
|
42
|
+
}
|
|
43
|
+
function ProseErrorState({ error }) {
|
|
44
|
+
return (_jsx("div", { className: "gen-extraction-error", style: { padding: '1rem' }, children: _jsxs("p", { children: ["Could not extract structured data: ", error] }) }));
|
|
45
|
+
}
|
|
46
|
+
// ── Data normalization ───────────────────────────────────
|
|
47
|
+
function normalizeToArray(data) {
|
|
48
|
+
if (Array.isArray(data))
|
|
49
|
+
return data;
|
|
50
|
+
if (data && typeof data === 'object' && !Array.isArray(data)) {
|
|
51
|
+
const obj = data;
|
|
52
|
+
const entries = Object.entries(obj);
|
|
53
|
+
// Detect pattern: object whose values are arrays of objects
|
|
54
|
+
// e.g. { enabling_conditions: [{...}], constraining_conditions: [{...}] }
|
|
55
|
+
// Flatten into a single array with _category tag for grouping
|
|
56
|
+
const arrayOfObjectEntries = entries.filter(([, v]) => Array.isArray(v) && v.length > 0 && v[0] != null && typeof v[0] === 'object');
|
|
57
|
+
if (arrayOfObjectEntries.length > 0) {
|
|
58
|
+
return arrayOfObjectEntries.flatMap(([key, arr]) => arr.map(item => ({
|
|
59
|
+
_category: key,
|
|
60
|
+
...item,
|
|
61
|
+
})));
|
|
62
|
+
}
|
|
63
|
+
// Fallback: Record<string, T> → flatten to array with docKey field
|
|
64
|
+
return entries.map(([key, value]) => {
|
|
65
|
+
if (value && typeof value === 'object' && !Array.isArray(value)) {
|
|
66
|
+
return { docKey: key, ...value };
|
|
67
|
+
}
|
|
68
|
+
return { docKey: key, value };
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
function groupItems(items, groupBy, styleMapKey, getCategoryColor) {
|
|
74
|
+
if (!groupBy) {
|
|
75
|
+
return [{
|
|
76
|
+
key: '__all__',
|
|
77
|
+
label: '',
|
|
78
|
+
style: { bg: 'transparent', text: 'inherit', border: 'transparent' },
|
|
79
|
+
items,
|
|
80
|
+
}];
|
|
81
|
+
}
|
|
82
|
+
const category = styleMapKey || undefined;
|
|
83
|
+
const defaultStyle = { bg: 'var(--dt-surface-alt)', text: 'var(--dt-text-muted)', border: 'var(--dt-border-light)', label: undefined };
|
|
84
|
+
const grouped = {};
|
|
85
|
+
for (const item of items) {
|
|
86
|
+
const groupValue = String(item[groupBy] || 'unknown');
|
|
87
|
+
if (!grouped[groupValue])
|
|
88
|
+
grouped[groupValue] = [];
|
|
89
|
+
grouped[groupValue].push(item);
|
|
90
|
+
}
|
|
91
|
+
// Sort groups by count (most frequent first)
|
|
92
|
+
return Object.entries(grouped)
|
|
93
|
+
.sort((a, b) => b[1].length - a[1].length)
|
|
94
|
+
.map(([key, groupItems]) => {
|
|
95
|
+
const mapStyle = category && getCategoryColor ? getCategoryColor(category, key) : null;
|
|
96
|
+
// Format label: "enabling_conditions" → "Enabling Conditions"
|
|
97
|
+
const rawLabel = key.replace(/_/g, ' ');
|
|
98
|
+
const titleLabel = rawLabel.replace(/\b\w/g, c => c.toUpperCase());
|
|
99
|
+
return {
|
|
100
|
+
key,
|
|
101
|
+
label: mapStyle?.label || titleLabel,
|
|
102
|
+
style: mapStyle || defaultStyle,
|
|
103
|
+
items: groupItems,
|
|
104
|
+
};
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
// ── Main Component ───────────────────────────────────────
|
|
108
|
+
/**
|
|
109
|
+
* Navigate a dotted path into an object.
|
|
110
|
+
*/
|
|
111
|
+
function getPath(obj, path) {
|
|
112
|
+
if (!path)
|
|
113
|
+
return obj;
|
|
114
|
+
const parts = path.split('.');
|
|
115
|
+
let current = obj;
|
|
116
|
+
for (const part of parts) {
|
|
117
|
+
if (current == null || typeof current !== 'object')
|
|
118
|
+
return undefined;
|
|
119
|
+
current = current[part];
|
|
120
|
+
}
|
|
121
|
+
return current;
|
|
122
|
+
}
|
|
123
|
+
export function CardGridRenderer({ data, config }) {
|
|
124
|
+
const { getCategoryColor, getSemanticColor, getLabel } = useDesignTokens();
|
|
125
|
+
const cellRendererKey = config.cell_renderer;
|
|
126
|
+
const groupBy = config.group_by;
|
|
127
|
+
const groupStyleMap = config.group_style_map;
|
|
128
|
+
const expandable = config.expandable;
|
|
129
|
+
const itemsPath = config.items_path;
|
|
130
|
+
const proseEndpoint = config.prose_endpoint;
|
|
131
|
+
// Group scroll-to targeting (from URL ?group= param)
|
|
132
|
+
const targetGroup = config._targetGroup;
|
|
133
|
+
const onGroupConsumed = config._onGroupConsumed;
|
|
134
|
+
// Capture mode
|
|
135
|
+
const captureMode = config._captureMode;
|
|
136
|
+
const onCapture = config._onCapture;
|
|
137
|
+
const captureJobId = config._captureJobId;
|
|
138
|
+
const captureViewKey = config._captureViewKey;
|
|
139
|
+
const captureSourceType = config._captureSourceType;
|
|
140
|
+
const captureEntityId = config._captureEntityId;
|
|
141
|
+
const so = getSO(config);
|
|
142
|
+
const [activeFilter, setActiveFilter] = useState(null);
|
|
143
|
+
// Prose extraction — detect if the data has _prose_output marker
|
|
144
|
+
const { data: extractedData, loading, error, isProseMode } = useProseExtraction(data, config._jobId, proseEndpoint || 'data', { apiPathPrefix: config._apiPathPrefix });
|
|
145
|
+
const workingData = isProseMode ? extractedData : data;
|
|
146
|
+
const workingObj = workingData;
|
|
147
|
+
// Resolve cell renderer
|
|
148
|
+
const CellRenderer = cellRendererKey
|
|
149
|
+
? cellRenderers[cellRendererKey] || DefaultCardCell
|
|
150
|
+
: DefaultCardCell;
|
|
151
|
+
// Extract items array from the data using items_path
|
|
152
|
+
const rawItems = useMemo(() => {
|
|
153
|
+
if (!workingData)
|
|
154
|
+
return [];
|
|
155
|
+
const extracted = itemsPath ? getPath(workingData, itemsPath) : workingData;
|
|
156
|
+
return normalizeToArray(extracted);
|
|
157
|
+
}, [workingData, itemsPath]);
|
|
158
|
+
// Auto-detect group_by: if items have _category (from flattening), group by it
|
|
159
|
+
const effectiveGroupBy = groupBy || (rawItems.length > 0 && rawItems[0]._category ? '_category' : undefined);
|
|
160
|
+
// Group items
|
|
161
|
+
const groups = useMemo(() => groupItems(rawItems, effectiveGroupBy, groupStyleMap, getCategoryColor), [rawItems, effectiveGroupBy, groupStyleMap, getCategoryColor]);
|
|
162
|
+
// Apply active filter
|
|
163
|
+
const visibleGroups = activeFilter
|
|
164
|
+
? groups.filter(g => g.key === activeFilter)
|
|
165
|
+
: groups;
|
|
166
|
+
if (loading)
|
|
167
|
+
return _jsx(ProseLoadingState, {});
|
|
168
|
+
if (error)
|
|
169
|
+
return _jsx(ProseErrorState, { error: error });
|
|
170
|
+
if (!workingData) {
|
|
171
|
+
return _jsx("p", { className: "gen-empty", children: "No data available yet." });
|
|
172
|
+
}
|
|
173
|
+
if (rawItems.length === 0) {
|
|
174
|
+
return _jsx("p", { className: "gen-empty", children: "No items found." });
|
|
175
|
+
}
|
|
176
|
+
const hasGroups = groups.length > 1 || groups[0]?.key !== '__all__';
|
|
177
|
+
// Summary panel config — either from view definition or legacy tactic_patterns fallback
|
|
178
|
+
const summaryConfig = config.summary;
|
|
179
|
+
const summaryDataPath = summaryConfig?.data_path || 'distribution';
|
|
180
|
+
const summaryData = workingObj?.[summaryDataPath];
|
|
181
|
+
const hasSummary = Boolean(summaryData);
|
|
182
|
+
const handleFilterClick = (groupKey) => {
|
|
183
|
+
if (!groupKey) {
|
|
184
|
+
setActiveFilter(null);
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
setActiveFilter(prev => prev === groupKey ? null : groupKey);
|
|
188
|
+
};
|
|
189
|
+
return (_jsxs("div", { className: "ar-card-grid", style: so?.view_wrapper || undefined, children: [isProseMode && (_jsx("div", { className: "gen-prose-badge", children: _jsx("span", { className: "gen-prose-indicator", children: "Extracted from analytical prose" }) })), hasSummary && (_jsx(DistributionSummary, { data: summaryData, config: {
|
|
190
|
+
...summaryConfig?.renderer_config,
|
|
191
|
+
_onFilterClick: handleFilterClick,
|
|
192
|
+
_activeFilter: activeFilter,
|
|
193
|
+
_groups: hasGroups ? groups : undefined,
|
|
194
|
+
} })), hasGroups && !hasSummary && (_jsxs("div", { className: "ar-grid-summary", children: [_jsxs("span", { className: "ar-grid-total", children: [rawItems.length, " item", rawItems.length !== 1 ? 's' : ''] }), _jsxs("div", { className: "ar-grid-dist", children: [groups.map(group => (_jsxs("button", { type: "button", className: `ar-grid-dist-tag ${activeFilter === group.key ? 'ar-grid-dist-tag--active' : ''}`, style: {
|
|
195
|
+
background: activeFilter === group.key ? group.style.text : group.style.bg,
|
|
196
|
+
color: activeFilter === group.key ? 'var(--dt-text-inverse)' : group.style.text,
|
|
197
|
+
borderColor: group.style.border,
|
|
198
|
+
}, onClick: () => handleFilterClick(group.key), children: [group.label, ": ", group.items.length] }, group.key))), activeFilter && (_jsx("button", { type: "button", className: "ar-grid-dist-clear", onClick: () => setActiveFilter(null), children: "Show all" }))] })] })), visibleGroups.map(group => {
|
|
199
|
+
// Sort items within group: major first, then moderate, then minor
|
|
200
|
+
const severityWeight = { major: 3, moderate: 2, minor: 1 };
|
|
201
|
+
const sortedItems = [...group.items].sort((a, b) => {
|
|
202
|
+
const wa = severityWeight[String(a.severity || 'minor').toLowerCase()] || 0;
|
|
203
|
+
const wb = severityWeight[String(b.severity || 'minor').toLowerCase()] || 0;
|
|
204
|
+
return wb - wa;
|
|
205
|
+
});
|
|
206
|
+
const majorCount = sortedItems.filter(i => String(i.severity || '').toLowerCase() === 'major').length;
|
|
207
|
+
const description = config.group_descriptions?.[group.key];
|
|
208
|
+
return (_jsx(GroupSection, { group: group, sortedItems: sortedItems, majorCount: majorCount, description: description, hasGroups: hasGroups, config: config, expandable: expandable, CellRenderer: CellRenderer, so: so, isTarget: targetGroup === group.key, onTargetConsumed: targetGroup === group.key ? onGroupConsumed : undefined }, group.key));
|
|
209
|
+
})] }));
|
|
210
|
+
}
|
|
211
|
+
// ── Group Section ─────────────────────────────────────────
|
|
212
|
+
function GroupSection({ group, sortedItems, majorCount, description, hasGroups, config, expandable, CellRenderer, so, isTarget, onTargetConsumed, }) {
|
|
213
|
+
const groupRef = useRef(null);
|
|
214
|
+
const [highlight, setHighlight] = useState(false);
|
|
215
|
+
// Scroll-to + highlight when this is the target group
|
|
216
|
+
useEffect(() => {
|
|
217
|
+
if (!isTarget || !groupRef.current)
|
|
218
|
+
return;
|
|
219
|
+
const el = groupRef.current;
|
|
220
|
+
// Small delay to ensure layout is settled
|
|
221
|
+
const timer = setTimeout(() => {
|
|
222
|
+
el.scrollIntoView({ behavior: 'smooth', block: 'start' });
|
|
223
|
+
setHighlight(true);
|
|
224
|
+
// Remove highlight after animation
|
|
225
|
+
const fadeTimer = setTimeout(() => {
|
|
226
|
+
setHighlight(false);
|
|
227
|
+
onTargetConsumed?.();
|
|
228
|
+
}, 2000);
|
|
229
|
+
return () => clearTimeout(fadeTimer);
|
|
230
|
+
}, 300);
|
|
231
|
+
return () => clearTimeout(timer);
|
|
232
|
+
}, [isTarget, onTargetConsumed]);
|
|
233
|
+
// Derive subtle background tint from group color
|
|
234
|
+
const groupTintBg = hasGroups && group.style.text !== 'inherit'
|
|
235
|
+
? `${group.style.text}06`
|
|
236
|
+
: undefined;
|
|
237
|
+
const groupStyle = groupTintBg
|
|
238
|
+
? {
|
|
239
|
+
background: groupTintBg,
|
|
240
|
+
borderRadius: 'var(--radius-lg, 12px)',
|
|
241
|
+
padding: 'var(--space-lg, 1.5rem)',
|
|
242
|
+
...(highlight ? { outline: '2px solid var(--dt-accent, #6366f1)', outlineOffset: '2px', transition: 'outline-color 0.5s' } : {}),
|
|
243
|
+
}
|
|
244
|
+
: (highlight ? { outline: '2px solid var(--dt-accent, #6366f1)', outlineOffset: '2px', transition: 'outline-color 0.5s' } : undefined);
|
|
245
|
+
return (_jsxs("div", { ref: groupRef, id: `group-${group.key}`, className: hasGroups ? 'ar-grid-group ar-grid-group--enhanced' : '', style: groupStyle, children: [hasGroups && (_jsxs("div", { className: "ar-grid-group-header ar-grid-group-header--enhanced", style: { '--group-accent': group.style.text, '--group-border': group.style.border }, children: [_jsx("div", { className: "ar-grid-group-rule", style: { background: `linear-gradient(to right, ${group.style.text}, ${group.style.border}40)` } }), _jsxs("h3", { style: so?.section_title || undefined, children: [_jsx("span", { className: "ar-grid-group-badge", style: { background: group.style.bg, color: group.style.text, borderColor: group.style.border }, children: group.label }), _jsxs("span", { className: "ar-grid-group-count", children: [group.items.length, " item", group.items.length !== 1 ? 's' : ''] }), majorCount > 0 && (_jsxs("span", { className: "ar-grid-major-pill", children: [majorCount, " major"] }))] }), description && (_jsx("p", { className: "ar-grid-group-desc", style: so?.section_description || undefined, children: description }))] })), _jsx("div", { className: "ar-grid-cards ar-grid-cards--variable", style: so?.items_container || undefined, children: sortedItems.map((item, idx) => {
|
|
246
|
+
const isHero = idx === 0 && sortedItems.length > 1;
|
|
247
|
+
const isLongContent = estimateContentLength(item) > 200;
|
|
248
|
+
const spanFull = isHero || isLongContent;
|
|
249
|
+
const isSingleCard = sortedItems.length === 1;
|
|
250
|
+
return (_jsx(CardWrapper, { item: item, config: config, expandable: expandable, CellRenderer: CellRenderer, groupStyle: group.style, isHero: spanFull, isSingleCard: isSingleCard, so: so }, String(item.id || item.docKey || idx)));
|
|
251
|
+
}) })] }));
|
|
252
|
+
}
|
|
253
|
+
// ── Card Wrapper (handles expansion, hero sizing, type indicators) ──
|
|
254
|
+
function CardWrapper({ item, config, expandable, CellRenderer, groupStyle, isHero, isSingleCard, so, }) {
|
|
255
|
+
const { getSemanticColor, getLabel } = useDesignTokens();
|
|
256
|
+
const [expanded, setExpanded] = useState(false);
|
|
257
|
+
// Default cell renderer always gets expand/collapse (text is clamped by CSS)
|
|
258
|
+
const isDefaultCell = CellRenderer === DefaultCardCell;
|
|
259
|
+
const canExpand = expandable || isDefaultCell;
|
|
260
|
+
// Determine severity for type indicator dot
|
|
261
|
+
const severityKey = String(item.severity || '').toLowerCase();
|
|
262
|
+
const severityStyle = getSemanticColor('severity', severityKey);
|
|
263
|
+
// Card type from _category or type
|
|
264
|
+
const cardType = String(item._category || item.type || '');
|
|
265
|
+
// Build card class names
|
|
266
|
+
const cardClasses = [
|
|
267
|
+
'ar-grid-card',
|
|
268
|
+
'ar-grid-card--enhanced',
|
|
269
|
+
expanded ? 'expanded' : '',
|
|
270
|
+
isHero ? 'ar-grid-card--hero' : '',
|
|
271
|
+
isSingleCard ? 'ar-grid-card--single' : '',
|
|
272
|
+
].filter(Boolean).join(' ');
|
|
273
|
+
// Build inline styles: merge base with style overrides
|
|
274
|
+
const baseCardStyle = {
|
|
275
|
+
borderLeftColor: groupStyle.text,
|
|
276
|
+
cursor: canExpand ? 'pointer' : 'default',
|
|
277
|
+
};
|
|
278
|
+
const cardStyle = isHero
|
|
279
|
+
? { ...baseCardStyle, ...so?.hero_card, ...so?.card }
|
|
280
|
+
: { ...baseCardStyle, ...so?.card };
|
|
281
|
+
// Capture button (rendered outside JSX to avoid TS2746)
|
|
282
|
+
const captureBtn = config._captureMode && config._onCapture ? (_jsx("button", { title: "Capture this card", onClick: e => {
|
|
283
|
+
e.stopPropagation();
|
|
284
|
+
const onCap = config._onCapture;
|
|
285
|
+
const title = String(item.title || item.name || item.id || '');
|
|
286
|
+
const parentSectionKey = config._parentSectionKey;
|
|
287
|
+
const parentSectionTitle = config._parentSectionTitle;
|
|
288
|
+
onCap({
|
|
289
|
+
source_view_key: String(config._captureViewKey || ''),
|
|
290
|
+
source_item_index: undefined,
|
|
291
|
+
source_renderer_type: 'card_grid',
|
|
292
|
+
content_type: 'card',
|
|
293
|
+
selected_text: (item.summary || item.analysis || item.description || JSON.stringify(item)).toString().slice(0, 500),
|
|
294
|
+
structured_data: item,
|
|
295
|
+
context_title: parentSectionKey
|
|
296
|
+
? `${config._captureViewKey || 'Analysis'} > ${parentSectionTitle || ''} > ${title}`
|
|
297
|
+
: `${config._captureViewKey || 'Analysis'} > ${title}`,
|
|
298
|
+
source_type: (config._captureSourceType || 'analysis'),
|
|
299
|
+
entity_id: String(config._captureEntityId || config._captureJobId || ''),
|
|
300
|
+
depth_level: parentSectionKey ? 'L2_element' : 'L1_section',
|
|
301
|
+
parent_context: parentSectionKey ? {
|
|
302
|
+
section_key: parentSectionKey,
|
|
303
|
+
section_title: parentSectionTitle || '',
|
|
304
|
+
} : undefined,
|
|
305
|
+
});
|
|
306
|
+
}, style: {
|
|
307
|
+
position: 'absolute',
|
|
308
|
+
top: '6px',
|
|
309
|
+
right: '6px',
|
|
310
|
+
background: 'rgba(255,255,255,0.9)',
|
|
311
|
+
border: '1px solid #ccc',
|
|
312
|
+
borderRadius: '4px',
|
|
313
|
+
cursor: 'pointer',
|
|
314
|
+
padding: '2px 5px',
|
|
315
|
+
fontSize: '0.7rem',
|
|
316
|
+
lineHeight: 1,
|
|
317
|
+
zIndex: 2,
|
|
318
|
+
}, children: "\uD83D\uDCCC" }, "capture-btn")) : null;
|
|
319
|
+
return (_jsxs("div", { className: cardClasses, style: cardStyle, onClick: canExpand ? () => setExpanded(!expanded) : undefined, children: [captureBtn, (severityStyle || cardType) && (_jsxs("div", { className: "ar-card-type-indicator", children: [severityStyle && (_jsx("span", { className: "ar-card-type-dot", style: { background: severityStyle.text }, title: `Severity: ${severityKey}` })), cardType && (_jsx("span", { className: "ar-card-type-label", style: so?.badge || undefined, children: getLabel('tactic', cardType) || cardType.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase()) }))] })), _jsx("div", { className: "ar-card-content", style: so?.card_body || undefined, children: _jsx(CellRenderer, { item: item, config: config }) }), canExpand && (_jsx("div", { className: "card-cell-expand-hint", children: expanded ? 'click to collapse' : 'click to expand' }))] }));
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=CardGridRenderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardGridRenderer.js","sourceRoot":"","sources":["../../src/renderers/CardGridRenderer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CardRenderer — Expandable detail cards with subsections.
|
|
3
|
+
*
|
|
4
|
+
* Unlike CardGridRenderer (many small cards in a grid), this renders a smaller
|
|
5
|
+
* number of detailed cards with rich subsection content. Each card can be
|
|
6
|
+
* expanded/collapsed.
|
|
7
|
+
*
|
|
8
|
+
* Supports the same sub-renderer dispatch chain as AccordionRenderer:
|
|
9
|
+
* 1. Check section_renderers[key] for a configured sub-renderer
|
|
10
|
+
* 2. Pre-render compatibility check: skip if data type mismatches renderer
|
|
11
|
+
* 3. SubRendererFallback wrapper: catch null output via useLayoutEffect
|
|
12
|
+
* 4. nested_sections → GenericSectionRenderer with sub_renderers
|
|
13
|
+
* 5. Auto-detect sub-renderer from data shape
|
|
14
|
+
* 6. GenericSectionRenderer as final fallback (handles any data)
|
|
15
|
+
*
|
|
16
|
+
* renderer_config keys:
|
|
17
|
+
* card_title_field: string — field for card header (default: "title")
|
|
18
|
+
* subsections: (string | {key, title})[] — named sections within each card
|
|
19
|
+
* section_renderers: Record<string, {renderer_type, config?, sub_renderers?}>
|
|
20
|
+
* show_relationship_badge: boolean — show relationship_type badge
|
|
21
|
+
* expandable: boolean — collapse/expand on click (default: true)
|
|
22
|
+
* items_path: string — dotted path to extract items
|
|
23
|
+
* prose_endpoint: string — for useProseExtraction
|
|
24
|
+
*/
|
|
25
|
+
import { RendererProps } from '../types';
|
|
26
|
+
export declare function CardRenderer({ data, config }: RendererProps): import("react/jsx-runtime").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=CardRenderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CardRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/CardRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA6GzC,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,2CA6X3D"}
|