@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.
Files changed (128) hide show
  1. package/dist/cells/RelationshipCardCell.d.ts +10 -0
  2. package/dist/cells/RelationshipCardCell.d.ts.map +1 -0
  3. package/dist/cells/RelationshipCardCell.js +91 -0
  4. package/dist/cells/RelationshipCardCell.js.map +1 -0
  5. package/dist/cells/TacticCardCell.d.ts +12 -0
  6. package/dist/cells/TacticCardCell.d.ts.map +1 -0
  7. package/dist/cells/TacticCardCell.js +77 -0
  8. package/dist/cells/TacticCardCell.js.map +1 -0
  9. package/dist/cells/TemplateCardCell.d.ts +29 -0
  10. package/dist/cells/TemplateCardCell.d.ts.map +1 -0
  11. package/dist/cells/TemplateCardCell.js +202 -0
  12. package/dist/cells/TemplateCardCell.js.map +1 -0
  13. package/dist/cells/index.d.ts +15 -0
  14. package/dist/cells/index.d.ts.map +1 -0
  15. package/dist/cells/index.js +85 -0
  16. package/dist/cells/index.js.map +1 -0
  17. package/dist/components/ConditionCards.d.ts +18 -0
  18. package/dist/components/ConditionCards.d.ts.map +1 -0
  19. package/dist/components/ConditionCards.js +28 -0
  20. package/dist/components/ConditionCards.js.map +1 -0
  21. package/dist/components/EvidenceTrail.d.ts +54 -0
  22. package/dist/components/EvidenceTrail.d.ts.map +1 -0
  23. package/dist/components/EvidenceTrail.js +98 -0
  24. package/dist/components/EvidenceTrail.js.map +1 -0
  25. package/dist/dispatch/SubRendererDispatch.d.ts +39 -0
  26. package/dist/dispatch/SubRendererDispatch.d.ts.map +1 -0
  27. package/dist/dispatch/SubRendererDispatch.js +153 -0
  28. package/dist/dispatch/SubRendererDispatch.js.map +1 -0
  29. package/dist/hooks/useProseExtraction.d.ts +38 -0
  30. package/dist/hooks/useProseExtraction.d.ts.map +1 -0
  31. package/dist/hooks/useProseExtraction.js +93 -0
  32. package/dist/hooks/useProseExtraction.js.map +1 -0
  33. package/dist/index.d.ts +32 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +38 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/provenance/ProvenanceSectionIcon.d.ts +15 -0
  38. package/dist/provenance/ProvenanceSectionIcon.d.ts.map +1 -0
  39. package/dist/provenance/ProvenanceSectionIcon.js +11 -0
  40. package/dist/provenance/ProvenanceSectionIcon.js.map +1 -0
  41. package/dist/renderers/AccordionRenderer.d.ts +29 -0
  42. package/dist/renderers/AccordionRenderer.d.ts.map +1 -0
  43. package/dist/renderers/AccordionRenderer.js +315 -0
  44. package/dist/renderers/AccordionRenderer.js.map +1 -0
  45. package/dist/renderers/CardGridRenderer.d.ts +24 -0
  46. package/dist/renderers/CardGridRenderer.d.ts.map +1 -0
  47. package/dist/renderers/CardGridRenderer.js +321 -0
  48. package/dist/renderers/CardGridRenderer.js.map +1 -0
  49. package/dist/renderers/CardRenderer.d.ts +27 -0
  50. package/dist/renderers/CardRenderer.d.ts.map +1 -0
  51. package/dist/renderers/CardRenderer.js +337 -0
  52. package/dist/renderers/CardRenderer.js.map +1 -0
  53. package/dist/renderers/IdeaEvolutionRenderer.d.ts +16 -0
  54. package/dist/renderers/IdeaEvolutionRenderer.d.ts.map +1 -0
  55. package/dist/renderers/IdeaEvolutionRenderer.js +187 -0
  56. package/dist/renderers/IdeaEvolutionRenderer.js.map +1 -0
  57. package/dist/renderers/ProseRenderer.d.ts +10 -0
  58. package/dist/renderers/ProseRenderer.d.ts.map +1 -0
  59. package/dist/renderers/ProseRenderer.js +42 -0
  60. package/dist/renderers/ProseRenderer.js.map +1 -0
  61. package/dist/renderers/RawJsonRenderer.d.ts +8 -0
  62. package/dist/renderers/RawJsonRenderer.d.ts.map +1 -0
  63. package/dist/renderers/RawJsonRenderer.js +17 -0
  64. package/dist/renderers/RawJsonRenderer.js.map +1 -0
  65. package/dist/renderers/StatSummaryRenderer.d.ts +12 -0
  66. package/dist/renderers/StatSummaryRenderer.d.ts.map +1 -0
  67. package/dist/renderers/StatSummaryRenderer.js +93 -0
  68. package/dist/renderers/StatSummaryRenderer.js.map +1 -0
  69. package/dist/renderers/SynthesisRenderer.d.ts +15 -0
  70. package/dist/renderers/SynthesisRenderer.d.ts.map +1 -0
  71. package/dist/renderers/SynthesisRenderer.js +60 -0
  72. package/dist/renderers/SynthesisRenderer.js.map +1 -0
  73. package/dist/renderers/TableRenderer.d.ts +19 -0
  74. package/dist/renderers/TableRenderer.d.ts.map +1 -0
  75. package/dist/renderers/TableRenderer.js +273 -0
  76. package/dist/renderers/TableRenderer.js.map +1 -0
  77. package/dist/styles/accordion.css +376 -0
  78. package/dist/styles/index.css +5 -0
  79. package/dist/styles/renderers.css +1049 -0
  80. package/dist/sub-renderers/SubRenderers.d.ts +73 -0
  81. package/dist/sub-renderers/SubRenderers.d.ts.map +1 -0
  82. package/dist/sub-renderers/SubRenderers.js +2462 -0
  83. package/dist/sub-renderers/SubRenderers.js.map +1 -0
  84. package/dist/tokens/DesignTokenContext.d.ts +40 -0
  85. package/dist/tokens/DesignTokenContext.d.ts.map +1 -0
  86. package/dist/tokens/DesignTokenContext.js +408 -0
  87. package/dist/tokens/DesignTokenContext.js.map +1 -0
  88. package/dist/types/designTokens.d.ts +220 -0
  89. package/dist/types/designTokens.d.ts.map +1 -0
  90. package/dist/types/designTokens.js +8 -0
  91. package/dist/types/designTokens.js.map +1 -0
  92. package/dist/types/index.d.ts +32 -0
  93. package/dist/types/index.d.ts.map +1 -0
  94. package/dist/types/index.js +5 -0
  95. package/dist/types/index.js.map +1 -0
  96. package/dist/types/styles.d.ts +38 -0
  97. package/dist/types/styles.d.ts.map +1 -0
  98. package/dist/types/styles.js +14 -0
  99. package/dist/types/styles.js.map +1 -0
  100. package/dist/utils/tokenFlattener.d.ts +14 -0
  101. package/dist/utils/tokenFlattener.d.ts.map +1 -0
  102. package/dist/utils/tokenFlattener.js +56 -0
  103. package/dist/utils/tokenFlattener.js.map +1 -0
  104. package/package.json +31 -0
  105. package/src/cells/TemplateCardCell.tsx +439 -0
  106. package/src/cells/index.ts +98 -0
  107. package/src/components/ConditionCards.tsx +109 -0
  108. package/src/components/EvidenceTrail.tsx +203 -0
  109. package/src/dispatch/SubRendererDispatch.tsx +282 -0
  110. package/src/hooks/useProseExtraction.ts +125 -0
  111. package/src/index.ts +82 -0
  112. package/src/provenance/ProvenanceSectionIcon.tsx +19 -0
  113. package/src/renderers/AccordionRenderer.tsx +609 -0
  114. package/src/renderers/CardGridRenderer.tsx +608 -0
  115. package/src/renderers/CardRenderer.tsx +517 -0
  116. package/src/renderers/ProseRenderer.tsx +85 -0
  117. package/src/renderers/RawJsonRenderer.tsx +37 -0
  118. package/src/renderers/StatSummaryRenderer.tsx +182 -0
  119. package/src/renderers/TableRenderer.tsx +470 -0
  120. package/src/styles/accordion.css +376 -0
  121. package/src/styles/index.css +5 -0
  122. package/src/styles/renderers.css +1049 -0
  123. package/src/sub-renderers/SubRenderers.tsx +3487 -0
  124. package/src/tokens/DesignTokenContext.tsx +502 -0
  125. package/src/types/designTokens.ts +236 -0
  126. package/src/types/index.ts +53 -0
  127. package/src/types/styles.ts +44 -0
  128. 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":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAc,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAkB,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AAEpE,6DAA6D;AAE7D,qEAAqE;AACrE,SAAS,qBAAqB,CAAC,IAA6B;IAC1D,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC;IACvD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,4DAA4D;AAE5D,SAAS,iBAAiB;IACxB,OAAO,CACL,eAAK,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,QAAiB,EAAE,aAC3D,cAAK,SAAS,EAAC,wBAAwB,GAAG,EAC1C,6EAAyD,IACrD,CACP,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,EAAE,KAAK,EAAqB;IACnD,OAAO,CACL,cAAK,SAAS,EAAC,sBAAsB,EAAC,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,YAC9D,+DAAuC,KAAK,IAAK,GAC7C,CACP,CAAC;AACJ,CAAC;AAED,4DAA4D;AAE5D,SAAS,gBAAgB,CAAC,IAAa;IACrC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAErC,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7D,MAAM,GAAG,GAAG,IAA+B,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAEpC,4DAA4D;QAC5D,0EAA0E;QAC1E,8DAA8D;QAC9D,MAAM,oBAAoB,GAAG,OAAO,CAAC,MAAM,CACzC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,QAAQ,CACxF,CAAC;QAEF,IAAI,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAChD,GAAiC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC9C,SAAS,EAAE,GAAG;gBACd,GAAG,IAAI;aACR,CAAC,CAAC,CACJ,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YAClC,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,KAAgC,EAAE,CAAC;YAC9D,CAAC;YACD,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;QAChC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,CAAC;AACZ,CAAC;AAWD,SAAS,UAAU,CACjB,KAAqC,EACrC,OAA2B,EAC3B,WAA+B,EAC/B,gBAAyH;IAEzH,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC;gBACN,GAAG,EAAE,SAAS;gBACd,KAAK,EAAE,EAAE;gBACT,KAAK,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE;gBACpE,KAAK;aACN,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,WAAW,IAAI,SAAS,CAAC;IAC1C,MAAM,YAAY,GAAG,EAAE,EAAE,EAAE,uBAAuB,EAAE,IAAI,EAAE,sBAAsB,EAAE,MAAM,EAAE,wBAAwB,EAAE,KAAK,EAAE,SAA+B,EAAE,CAAC;IAE7J,MAAM,OAAO,GAAmD,EAAE,CAAC;IACnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC;QACtD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,OAAO,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;QACnD,OAAO,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC;IAED,6CAA6C;IAC7C,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC;SAC3B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;SACzC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,UAAU,CAAC,EAAE,EAAE;QACzB,MAAM,QAAQ,GAAG,QAAQ,IAAI,gBAAgB,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACvF,8DAA8D;QAC9D,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QACnE,OAAO;YACL,GAAG;YACH,KAAK,EAAE,QAAQ,EAAE,KAAK,IAAI,UAAU;YACpC,KAAK,EAAE,QAAQ,IAAI,YAAY;YAC/B,KAAK,EAAE,UAAU;SAClB,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC;AAED,4DAA4D;AAE5D;;GAEG;AACH,SAAS,OAAO,CAAC,GAAY,EAAE,IAAY;IACzC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC;IACtB,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,GAAG,CAAC;IAC3B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACrE,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAiB;IAC9D,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IAE3E,MAAM,eAAe,GAAG,MAAM,CAAC,aAAmC,CAAC;IACnE,MAAM,OAAO,GAAG,MAAM,CAAC,QAA8B,CAAC;IACtD,MAAM,aAAa,GAAG,MAAM,CAAC,eAAqC,CAAC;IACnE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAiC,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,UAAgC,CAAC;IAC1D,MAAM,aAAa,GAAG,MAAM,CAAC,cAAoC,CAAC;IAElE,qDAAqD;IACrD,MAAM,WAAW,GAAG,MAAM,CAAC,YAAkC,CAAC;IAC9D,MAAM,eAAe,GAAG,MAAM,CAAC,gBAA4C,CAAC;IAE5E,eAAe;IACf,MAAM,WAAW,GAAG,MAAM,CAAC,YAAmC,CAAC;IAC/D,MAAM,SAAS,GAAG,MAAM,CAAC,UAEZ,CAAC;IACd,MAAM,YAAY,GAAG,MAAM,CAAC,aAAmC,CAAC;IAChE,MAAM,cAAc,GAAG,MAAM,CAAC,eAAqC,CAAC;IACpE,MAAM,iBAAiB,GAAG,MAAM,CAAC,kBAAwC,CAAC;IAC1E,MAAM,eAAe,GAAG,MAAM,CAAC,gBAAsC,CAAC;IAEtE,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;IAEzB,MAAM,CAAC,YAAY,EAAE,eAAe,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAEtE,iEAAiE;IACjE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,kBAAkB,CAC7E,IAAe,EACf,MAAM,CAAC,MAA4B,EACnC,aAAa,IAAI,MAAM,EACvB,EAAE,aAAa,EAAE,MAAM,CAAC,cAAoC,EAAE,CAC/D,CAAC;IAEF,MAAM,WAAW,GAAG,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC;IACvD,MAAM,UAAU,GAAG,WAAkD,CAAC;IAEtE,wBAAwB;IACxB,MAAM,YAAY,GAAG,eAAe;QAClC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,IAAI,eAAe;QACnD,CAAC,CAAC,eAAe,CAAC;IAEpB,qDAAqD;IACrD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC,WAAW;YAAE,OAAO,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;QAC5E,OAAO,gBAAgB,CAAC,SAAS,CAAC,CAAC;IACrC,CAAC,EAAE,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC,CAAC;IAE7B,+EAA+E;IAC/E,MAAM,gBAAgB,GAAG,OAAO,IAAI,CAClC,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CACvE,CAAC;IAEF,cAAc;IACd,MAAM,MAAM,GAAG,OAAO,CACpB,GAAG,EAAE,CAAC,UAAU,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,CAAC,EAC7E,CAAC,QAAQ,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,CAAC,CAC9D,CAAC;IAEF,sBAAsB;IACtB,MAAM,aAAa,GAAG,YAAY;QAChC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,YAAY,CAAC;QAC5C,CAAC,CAAC,MAAM,CAAC;IAEX,IAAI,OAAO;QAAE,OAAO,KAAC,iBAAiB,KAAG,CAAC;IAC1C,IAAI,KAAK;QAAE,OAAO,KAAC,eAAe,IAAC,KAAK,EAAE,KAAK,GAAI,CAAC;IAEpD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,YAAG,SAAS,EAAC,WAAW,uCAA2B,CAAC;IAC7D,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,YAAG,SAAS,EAAC,WAAW,gCAAoB,CAAC;IACtD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,KAAK,SAAS,CAAC;IAEpE,wFAAwF;IACxF,MAAM,aAAa,GAAG,MAAM,CAAC,OAGhB,CAAC;IACd,MAAM,eAAe,GAAG,aAAa,EAAE,SAAS,IAAI,cAAc,CAAC;IACnE,MAAM,WAAW,GAAG,UAAU,EAAE,CAAC,eAAe,CAAwC,CAAC;IACzF,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAExC,MAAM,iBAAiB,GAAG,CAAC,QAAgB,EAAE,EAAE;QAC7C,IAAI,CAAC,QAAQ,EAAE,CAAC;YAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACjD,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC/D,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,cAAc,EAAC,KAAK,EAAE,EAAE,EAAE,YAAY,IAAI,SAAS,aAE/D,WAAW,IAAI,CACd,cAAK,SAAS,EAAC,iBAAiB,YAC9B,eAAM,SAAS,EAAC,qBAAqB,gDAAuC,GACxE,CACP,EAGA,UAAU,IAAI,CACb,KAAC,mBAAmB,IAClB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE;oBACN,GAAG,aAAa,EAAE,eAAe;oBACjC,cAAc,EAAE,iBAAiB;oBACjC,aAAa,EAAE,YAAY;oBAC3B,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;iBACxC,GACD,CACH,EAGA,SAAS,IAAI,CAAC,UAAU,IAAI,CAC3B,eAAK,SAAS,EAAC,iBAAiB,aAC9B,gBAAM,SAAS,EAAC,eAAe,aAC5B,QAAQ,CAAC,MAAM,WAAO,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAClD,EACP,eAAK,SAAS,EAAC,cAAc,aAC1B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CACnB,kBAEE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAE,oBAAoB,YAAY,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,EAAE,EAAE,EAC7F,KAAK,EAAE;oCACL,UAAU,EAAE,YAAY,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE;oCAC1E,KAAK,EAAE,YAAY,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,wBAAwB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI;oCAC/E,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM;iCAChC,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,GAAG,CAAC,aAE1C,KAAK,CAAC,KAAK,QAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAV7B,KAAK,CAAC,GAAG,CAWP,CACV,CAAC,EACD,YAAY,IAAI,CACf,iBACE,IAAI,EAAC,QAAQ,EACb,SAAS,EAAC,oBAAoB,EAC9B,OAAO,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,yBAG7B,CACV,IACG,IACF,CACP,EAGA,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;gBACzB,kEAAkE;gBAClE,MAAM,cAAc,GAA2B,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBACnF,MAAM,WAAW,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACjD,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;oBAC5E,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,IAAI,CAAC,CAAC;oBAC5E,OAAO,EAAE,GAAG,EAAE,CAAC;gBACjB,CAAC,CAAC,CAAC;gBACH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,CAAC,MAAM,CAAC;gBACtG,MAAM,WAAW,GAAI,MAAM,CAAC,kBAAyD,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAEnG,OAAO,CACL,KAAC,YAAY,IAEX,KAAK,EAAE,KAAK,EACZ,WAAW,EAAE,WAAW,EACxB,UAAU,EAAE,UAAU,EACtB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,WAAW,KAAK,KAAK,CAAC,GAAG,EACnC,gBAAgB,EAAE,WAAW,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,IAXpE,KAAK,CAAC,GAAG,CAYd,CACH,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC;AAED,6DAA6D;AAE7D,SAAS,YAAY,CAAC,EACpB,KAAK,EACL,WAAW,EACX,UAAU,EACV,WAAW,EACX,SAAS,EACT,MAAM,EACN,UAAU,EACV,YAAY,EACZ,EAAE,EACF,QAAQ,EACR,gBAAgB,GAajB;IACC,MAAM,QAAQ,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAElD,sDAAsD;IACtD,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,CAAC,OAAO;YAAE,OAAO;QAC3C,MAAM,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC;QAC5B,0CAA0C;QAC1C,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;YAC5B,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC;YAC1D,YAAY,CAAC,IAAI,CAAC,CAAC;YACnB,mCAAmC;YACnC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACpB,gBAAgB,EAAE,EAAE,CAAC;YACvB,CAAC,EAAE,IAAI,CAAC,CAAC;YACT,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QACvC,CAAC,EAAE,GAAG,CAAC,CAAC;QACR,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC,CAAC;IAEjC,iDAAiD;IACjD,MAAM,WAAW,GAAG,SAAS,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS;QAC7D,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,IAAI;QACzB,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,UAAU,GAAoC,WAAW;QAC7D,CAAC,CAAC;YACE,UAAU,EAAE,WAAW;YACvB,YAAY,EAAE,wBAAwB;YACtC,OAAO,EAAE,yBAAyB;YAClC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,qCAAqC,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACjI;QACH,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,qCAAqC,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IAEzI,OAAO,CACL,eACE,GAAG,EAAE,QAAQ,EACb,EAAE,EAAE,SAAS,KAAK,CAAC,GAAG,EAAE,EACxB,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,uCAAuC,CAAC,CAAC,CAAC,EAAE,EACnE,KAAK,EAAE,UAAU,aAEhB,SAAS,IAAI,CACZ,eACE,SAAS,EAAC,qDAAqD,EAC/D,KAAK,EAAE,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAyB,aAE1G,cAAK,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,EAAE,UAAU,EAAE,6BAA6B,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,EAAE,GAAI,EACxI,cAAI,KAAK,EAAE,EAAE,EAAE,aAAa,IAAI,SAAS,aACvC,eACE,SAAS,EAAC,qBAAqB,EAC/B,KAAK,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,YAE9F,KAAK,CAAC,KAAK,GACP,EACP,gBAAM,SAAS,EAAC,qBAAqB,aAClC,KAAK,CAAC,KAAK,CAAC,MAAM,WAAO,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IACxD,EACN,UAAU,GAAG,CAAC,IAAI,CACjB,gBAAM,SAAS,EAAC,oBAAoB,aAAE,UAAU,cAAc,CAC/D,IACE,EACJ,WAAW,IAAI,CACd,YAAG,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,EAAE,EAAE,mBAAmB,IAAI,SAAS,YAAG,WAAW,GAAK,CACjG,IACG,CACP,EACD,cAAK,SAAS,EAAC,uCAAuC,EAAC,KAAK,EAAE,EAAE,EAAE,eAAe,IAAI,SAAS,YAC3F,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;oBAC7B,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC;oBACnD,MAAM,aAAa,GAAG,qBAAqB,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;oBACxD,MAAM,QAAQ,GAAG,MAAM,IAAI,aAAa,CAAC;oBACzC,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,CAAC;oBAE9C,OAAO,CACL,KAAC,WAAW,IAEV,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,YAAY,EAC1B,UAAU,EAAE,KAAK,CAAC,KAAK,EACvB,MAAM,EAAE,QAAQ,EAChB,YAAY,EAAE,YAAY,EAC1B,EAAE,EAAE,EAAE,IARD,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,MAAM,IAAI,GAAG,CAAC,CAS1C,CACH,CAAC;gBACJ,CAAC,CAAC,GACE,IACF,CACP,CAAC;AACJ,CAAC;AAED,uEAAuE;AAEvE,SAAS,WAAW,CAAC,EACnB,IAAI,EACJ,MAAM,EACN,UAAU,EACV,YAAY,EACZ,UAAU,EACV,MAAM,EACN,YAAY,EACZ,EAAE,GAUH;IACC,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,GAAG,eAAe,EAAE,CAAC;IACzD,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEhD,6EAA6E;IAC7E,MAAM,aAAa,GAAG,YAAY,KAAK,eAAe,CAAC;IACvD,MAAM,SAAS,GAAG,UAAU,IAAI,aAAa,CAAC;IAE9C,4CAA4C;IAC5C,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IAC9D,MAAM,aAAa,GAAG,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAEhE,mCAAmC;IACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAE3D,yBAAyB;IACzB,MAAM,WAAW,GAAG;QAClB,cAAc;QACd,wBAAwB;QACxB,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;QAC1B,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,EAAE;QAClC,YAAY,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,EAAE;KAC3C,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAE5B,uDAAuD;IACvD,MAAM,aAAa,GAA2B;QAC5C,eAAe,EAAE,UAAU,CAAC,IAAI;QAChC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS;KAC1C,CAAC;IACF,MAAM,SAAS,GAAG,MAAM;QACtB,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE;QACrD,CAAC,CAAC,EAAE,GAAG,aAAa,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC;IAEtC,wDAAwD;IACxD,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAC5D,iBAEE,KAAK,EAAC,mBAAmB,EACzB,OAAO,EAAE,CAAC,CAAC,EAAE;YACX,CAAC,CAAC,eAAe,EAAE,CAAC;YACpB,MAAM,KAAK,GAAG,MAAM,CAAC,UAA6C,CAAC;YACnE,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;YAC/D,MAAM,gBAAgB,GAAG,MAAM,CAAC,iBAAuC,CAAC;YACxE,MAAM,kBAAkB,GAAG,MAAM,CAAC,mBAAyC,CAAC;YAC5E,KAAK,CAAC;gBACJ,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC;gBACrD,iBAAiB,EAAE,SAAS;gBAC5B,oBAAoB,EAAE,WAAW;gBACjC,YAAY,EAAE,MAAM;gBACpB,aAAa,EAAE,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;gBACnH,eAAe,EAAE,IAAI;gBACrB,aAAa,EAAE,gBAAgB;oBAC7B,CAAC,CAAC,GAAG,MAAM,CAAC,eAAe,IAAI,UAAU,MAAM,kBAAkB,IAAI,EAAE,MAAM,KAAK,EAAE;oBACpF,CAAC,CAAC,GAAG,MAAM,CAAC,eAAe,IAAI,UAAU,MAAM,KAAK,EAAE;gBACxD,WAAW,EAAE,CAAE,MAAM,CAAC,kBAA6B,IAAI,UAAU,CAAW;gBAC5E,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,gBAAgB,IAAI,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC;gBACxE,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY;gBAC3D,cAAc,EAAE,gBAAgB,CAAC,CAAC,CAAC;oBACjC,WAAW,EAAE,gBAAgB;oBAC7B,aAAa,EAAE,kBAAkB,IAAI,EAAE;iBACxC,CAAC,CAAC,CAAC,SAAS;aACd,CAAC,CAAC;QACL,CAAC,EACD,KAAK,EAAE;YACL,QAAQ,EAAE,UAAmB;YAC7B,GAAG,EAAE,KAAK;YACV,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,uBAAuB;YACnC,MAAM,EAAE,gBAAgB;YACxB,YAAY,EAAE,KAAK;YACnB,MAAM,EAAE,SAAS;YACjB,OAAO,EAAE,SAAS;YAClB,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,CAAC;YACb,MAAM,EAAE,CAAC;SACV,8BAvCG,aAAa,CA0CV,CACV,CAAC,CAAC,CAAC,IAAI,CAAC;IAET,OAAO,CACL,eACE,SAAS,EAAE,WAAW,EACtB,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,aAE5D,UAAU,EAEV,CAAC,aAAa,IAAI,QAAQ,CAAC,IAAI,CAC9B,eAAK,SAAS,EAAC,wBAAwB,aACpC,aAAa,IAAI,CAChB,eACE,SAAS,EAAC,kBAAkB,EAC5B,KAAK,EAAE,EAAE,UAAU,EAAE,aAAa,CAAC,IAAI,EAAE,EACzC,KAAK,EAAE,aAAa,WAAW,EAAE,GACjC,CACH,EACA,QAAQ,IAAI,CACX,eAAM,SAAS,EAAC,oBAAoB,EAAC,KAAK,EAAE,EAAE,EAAE,KAAK,IAAI,SAAS,YAC/D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,GAC9F,CACR,IACG,CACP,EAGD,cAAK,SAAS,EAAC,iBAAiB,EAAC,KAAK,EAAE,EAAE,EAAE,SAAS,IAAI,SAAS,YAChE,KAAC,YAAY,IAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAI,GACxC,EAEL,SAAS,IAAI,CACZ,cAAK,SAAS,EAAC,uBAAuB,YACnC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,iBAAiB,GAC/C,CACP,IACG,CACP,CAAC;AACJ,CAAC"}
@@ -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"}