@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 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,YAAY,EACV,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,EACf,eAAe,EACf,aAAa,EACb,WAAW,EACX,cAAc,EACd,iBAAiB,EACjB,eAAe,GAChB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAGhC,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAG9D,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAGtC,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAG5D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AACrF,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACvF,OAAO,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAG1G,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,38 @@
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 { getSO } from './types';
14
+ // ── Design Tokens ────────────────────────────────────────
15
+ export { DesignTokenProvider, useDesignTokens, FALLBACK_TOKENS, } from './tokens/DesignTokenContext';
16
+ // ── Utilities ────────────────────────────────────────────
17
+ export { flattenTokens } from './utils/tokenFlattener';
18
+ // ── Container Renderers ──────────────────────────────────
19
+ export { AccordionRenderer } from './renderers/AccordionRenderer';
20
+ export { CardGridRenderer } from './renderers/CardGridRenderer';
21
+ export { CardRenderer } from './renderers/CardRenderer';
22
+ export { ProseRenderer, formatProse } from './renderers/ProseRenderer';
23
+ export { TableRenderer } from './renderers/TableRenderer';
24
+ export { StatSummaryRenderer } from './renderers/StatSummaryRenderer';
25
+ export { RawJsonRenderer } from './renderers/RawJsonRenderer';
26
+ // ── Sub-Renderers ────────────────────────────────────────
27
+ export { resolveSubRenderer, autoDetectSubRenderer, DistributionSummary, } from './sub-renderers/SubRenderers';
28
+ // ── Sub-Renderer Dispatch ────────────────────────────────
29
+ export { isRendererCompatible, SubRendererFallback, GenericSectionRenderer, GenericMiniCard, resolveEnumColor, REQUIRES_ARRAY, REQUIRES_OBJECT, } from './dispatch/SubRendererDispatch';
30
+ // ── Cell Renderers ───────────────────────────────────────
31
+ export { cellRenderers, DefaultCardCell } from './cells';
32
+ export { TemplateCardCell } from './cells/TemplateCardCell';
33
+ // ── Shared Components ────────────────────────────────────
34
+ export { EvidenceTrail, EvidenceTrailSubRenderer } from './components/EvidenceTrail';
35
+ export { EnableConditionsSubRenderer, ConstrainConditionsSubRenderer } from './components/ConditionCards';
36
+ // ── Hooks ────────────────────────────────────────────────
37
+ export { useProseExtraction } from './hooks/useProseExtraction';
38
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAqBH,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,4DAA4D;AAC5D,OAAO,EACL,mBAAmB,EACnB,eAAe,EACf,eAAe,GAChB,MAAM,6BAA6B,CAAC;AAErC,4DAA4D;AAC5D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,4DAA4D;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,iCAAiC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,4DAA4D;AAC5D,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,8BAA8B,CAAC;AAEtC,4DAA4D;AAC5D,OAAO,EACL,oBAAoB,EACpB,mBAAmB,EACnB,sBAAsB,EACtB,eAAe,EACf,gBAAgB,EAChB,cAAc,EACd,eAAe,GAChB,MAAM,gCAAgC,CAAC;AAExC,4DAA4D;AAC5D,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,4DAA4D;AAC5D,OAAO,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAC;AAErF,OAAO,EAAE,2BAA2B,EAAE,8BAA8B,EAAE,MAAM,6BAA6B,CAAC;AAE1G,4DAA4D;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * ProvenanceSectionIcon — Stub for the provenance icon in accordion section headers.
3
+ *
4
+ * Consumer apps that support provenance tracking should override this component
5
+ * by importing and registering their own implementation.
6
+ */
7
+ interface ProvenanceSectionIconProps {
8
+ sectionKey: string;
9
+ config: unknown;
10
+ children_payloads?: unknown;
11
+ }
12
+ /** Default no-op stub — renders nothing. Consumer apps override for provenance UI. */
13
+ export declare function ProvenanceSectionIcon(_props: ProvenanceSectionIconProps): null;
14
+ export {};
15
+ //# sourceMappingURL=ProvenanceSectionIcon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvenanceSectionIcon.d.ts","sourceRoot":"","sources":["../../src/provenance/ProvenanceSectionIcon.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,UAAU,0BAA0B;IAClC,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,iBAAiB,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,sFAAsF;AACtF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,0BAA0B,QAEvE"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * ProvenanceSectionIcon — Stub for the provenance icon in accordion section headers.
3
+ *
4
+ * Consumer apps that support provenance tracking should override this component
5
+ * by importing and registering their own implementation.
6
+ */
7
+ /** Default no-op stub — renders nothing. Consumer apps override for provenance UI. */
8
+ export function ProvenanceSectionIcon(_props) {
9
+ return null;
10
+ }
11
+ //# sourceMappingURL=ProvenanceSectionIcon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProvenanceSectionIcon.js","sourceRoot":"","sources":["../../src/provenance/ProvenanceSectionIcon.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH,sFAAsF;AACtF,MAAM,UAAU,qBAAqB,CAAC,MAAkC;IACtE,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * AccordionRenderer — Generic collapsible sections renderer.
3
+ *
4
+ * Reads section definitions from renderer_config.sections, renders each
5
+ * as a collapsible panel. Supports prose mode via useProseExtraction.
6
+ *
7
+ * All sections dispatch through a resilient fallback chain:
8
+ * 1. Check section_renderers[key] for a configured sub-renderer
9
+ * 2. Pre-render compatibility check: skip if data type mismatches renderer
10
+ * 3. SubRendererFallback wrapper: catch null output via useLayoutEffect
11
+ * 4. Auto-detect sub-renderer from data shape
12
+ * 5. GenericSectionRenderer as final fallback (handles any data)
13
+ *
14
+ * renderer_config keys:
15
+ * sections: Array<{key, title}> — sections to render
16
+ * expand_first: boolean — auto-expand first section
17
+ * prose_endpoint: string — endpoint key for prose extraction
18
+ * section_renderers: Record<string, {renderer_type, config?, sub_renderers?}>
19
+ *
20
+ * Per-section polish keys (threaded via config._*):
21
+ * _onPolishSection: (sectionKey, feedback) => void
22
+ * _onResetSection: (sectionKey) => void
23
+ * _sectionPolishState: Record<string, 'idle'|'polishing'|'polished'|'error'>
24
+ * _section_overrides: Record<string, {style_overrides, renderer_config_patch?}>
25
+ * _section_descriptions: Record<string, string> — section subtitle text from polish
26
+ */
27
+ import { RendererProps } from '../types';
28
+ export declare function AccordionRenderer({ data, config }: RendererProps): import("react/jsx-runtime").JSX.Element;
29
+ //# sourceMappingURL=AccordionRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/AccordionRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAqDzC,wBAAgB,iBAAiB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,2CA8gBhE"}
@@ -0,0 +1,315 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * AccordionRenderer — Generic collapsible sections renderer.
4
+ *
5
+ * Reads section definitions from renderer_config.sections, renders each
6
+ * as a collapsible panel. Supports prose mode via useProseExtraction.
7
+ *
8
+ * All sections dispatch through a resilient fallback chain:
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. Auto-detect sub-renderer from data shape
13
+ * 5. GenericSectionRenderer as final fallback (handles any data)
14
+ *
15
+ * renderer_config keys:
16
+ * sections: Array<{key, title}> — sections to render
17
+ * expand_first: boolean — auto-expand first section
18
+ * prose_endpoint: string — endpoint key for prose extraction
19
+ * section_renderers: Record<string, {renderer_type, config?, sub_renderers?}>
20
+ *
21
+ * Per-section polish keys (threaded via config._*):
22
+ * _onPolishSection: (sectionKey, feedback) => void
23
+ * _onResetSection: (sectionKey) => void
24
+ * _sectionPolishState: Record<string, 'idle'|'polishing'|'polished'|'error'>
25
+ * _section_overrides: Record<string, {style_overrides, renderer_config_patch?}>
26
+ * _section_descriptions: Record<string, string> — section subtitle text from polish
27
+ */
28
+ import { useState, useEffect, useRef } from 'react';
29
+ import { useProseExtraction } from '../hooks/useProseExtraction';
30
+ import { resolveSubRenderer, autoDetectSubRenderer } from '../sub-renderers/SubRenderers';
31
+ import { isRendererCompatible, SubRendererFallback, GenericSectionRenderer } from '../dispatch/SubRendererDispatch';
32
+ import { ProvenanceSectionIcon } from '../provenance/ProvenanceSectionIcon';
33
+ import { useDesignTokens } from '../tokens/DesignTokenContext';
34
+ /**
35
+ * Extract a short preview string from various data shapes.
36
+ * Used to show a hint of section content when collapsed.
37
+ */
38
+ function extractPreviewText(data, maxLen = 80) {
39
+ if (typeof data === 'string') {
40
+ const clean = data.replace(/\n/g, ' ').trim();
41
+ return clean.length > maxLen ? clean.slice(0, maxLen) + '\u2026' : clean;
42
+ }
43
+ if (Array.isArray(data) && data.length > 0) {
44
+ const first = data[0];
45
+ if (typeof first === 'string') {
46
+ const clean = first.replace(/\n/g, ' ').trim();
47
+ return clean.length > maxLen ? clean.slice(0, maxLen) + '\u2026' : clean;
48
+ }
49
+ if (typeof first === 'object' && first !== null) {
50
+ const obj = first;
51
+ for (const key of ['name', 'title', 'term', 'summary', 'description', 'commitment']) {
52
+ if (typeof obj[key] === 'string') {
53
+ const val = obj[key].replace(/\n/g, ' ').trim();
54
+ return val.length > maxLen ? val.slice(0, maxLen) + '\u2026' : val;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ if (typeof data === 'object' && data !== null && !Array.isArray(data)) {
60
+ const obj = data;
61
+ for (const key of ['summary', 'description', 'overview', 'analysis', 'assessment']) {
62
+ if (typeof obj[key] === 'string') {
63
+ const val = obj[key].replace(/\n/g, ' ').trim();
64
+ return val.length > maxLen ? val.slice(0, maxLen) + '\u2026' : val;
65
+ }
66
+ }
67
+ }
68
+ return '';
69
+ }
70
+ export function AccordionRenderer({ data, config }) {
71
+ const { getSemanticColor } = useDesignTokens();
72
+ const sections = config.sections || [];
73
+ const expandFirst = config.expand_first;
74
+ const proseEndpoint = config.prose_endpoint || 'conditions';
75
+ const styleOverrides = config._style_overrides;
76
+ // Section descriptions from polish (threaded by Phase 1 or available directly)
77
+ const sectionDescriptions = config._section_descriptions;
78
+ // Per-section polish controls (threaded from GenealogyPage)
79
+ const onPolishSection = config._onPolishSection;
80
+ const onResetSection = config._onResetSection;
81
+ const sectionPolishState = config._sectionPolishState;
82
+ const sectionOverrides = config._section_overrides;
83
+ // Capture mode support (threaded from CaptureContext → V2TabContent)
84
+ const captureMode = config._captureMode;
85
+ const onCapture = config._onCapture;
86
+ const captureJobId = config._captureJobId;
87
+ const captureViewKey = config._captureViewKey;
88
+ const captureSourceType = config._captureSourceType;
89
+ const captureEntityId = config._captureEntityId;
90
+ const captureStatusMap = config._captureStatusMap;
91
+ const provenanceEnabled = config._provenanceEnabled;
92
+ const provenanceChildren = config._provenanceChildren;
93
+ // Prose extraction
94
+ const { data: extractedData, loading, error, isProseMode } = useProseExtraction(data, config._jobId, proseEndpoint, { apiPathPrefix: config._apiPathPrefix });
95
+ const workingData = (isProseMode ? extractedData : data);
96
+ // Track which sections are expanded
97
+ const [expandedSections, setExpandedSections] = useState(() => {
98
+ if (expandFirst && sections.length > 0) {
99
+ return new Set([sections[0].key]);
100
+ }
101
+ return new Set();
102
+ });
103
+ // Track ever-expanded for animation (keep content in DOM after first expand)
104
+ const [everExpanded, setEverExpanded] = useState(() => {
105
+ if (expandFirst && sections.length > 0) {
106
+ return new Set([sections[0].key]);
107
+ }
108
+ return new Set();
109
+ });
110
+ // Track which sections have the feedback row open
111
+ const [feedbackOpen, setFeedbackOpen] = useState(new Set());
112
+ // Track feedback text per section
113
+ const [feedbackText, setFeedbackText] = useState({});
114
+ // ── Deep-link support: auto-expand, scroll, highlight target section ──
115
+ const deepLinkSection = config._deepLinkSection;
116
+ const onDeepLinkConsumed = config._onDeepLinkConsumed;
117
+ const deepLinkProcessedRef = useRef(false);
118
+ useEffect(() => {
119
+ if (!deepLinkSection || deepLinkProcessedRef.current)
120
+ return;
121
+ const targetSection = sections.find(s => s.key === deepLinkSection);
122
+ if (!targetSection) {
123
+ console.warn(`[DeepLink] section_key "${deepLinkSection}" not found in accordion sections`);
124
+ onDeepLinkConsumed?.();
125
+ return;
126
+ }
127
+ // Expand the target section
128
+ setExpandedSections(prev => { const next = new Set(prev); next.add(deepLinkSection); return next; });
129
+ setEverExpanded(prev => { const next = new Set(prev); next.add(deepLinkSection); return next; });
130
+ deepLinkProcessedRef.current = true;
131
+ // Wait for DOM to render the expanded section, then scroll + highlight
132
+ requestAnimationFrame(() => {
133
+ setTimeout(() => {
134
+ const el = document.getElementById(`section-${deepLinkSection}`);
135
+ if (el) {
136
+ el.scrollIntoView({ behavior: 'smooth', block: 'start' });
137
+ el.classList.add('gen-accordion-section--highlighted');
138
+ setTimeout(() => el.classList.remove('gen-accordion-section--highlighted'), 2000);
139
+ }
140
+ onDeepLinkConsumed?.();
141
+ }, 150);
142
+ });
143
+ }, [deepLinkSection, sections, onDeepLinkConsumed]);
144
+ const toggleSection = (key) => {
145
+ setExpandedSections(prev => {
146
+ const next = new Set(prev);
147
+ if (next.has(key)) {
148
+ next.delete(key);
149
+ }
150
+ else {
151
+ next.add(key);
152
+ }
153
+ return next;
154
+ });
155
+ // Track ever-expanded so content stays in DOM for animation
156
+ setEverExpanded(prev => {
157
+ if (prev.has(key))
158
+ return prev;
159
+ const next = new Set(prev);
160
+ next.add(key);
161
+ return next;
162
+ });
163
+ };
164
+ const toggleFeedback = (key) => {
165
+ setFeedbackOpen(prev => {
166
+ const next = new Set(prev);
167
+ if (next.has(key)) {
168
+ next.delete(key);
169
+ }
170
+ else {
171
+ next.add(key);
172
+ }
173
+ return next;
174
+ });
175
+ };
176
+ const handlePolishClick = (sectionKey) => {
177
+ if (onPolishSection) {
178
+ onPolishSection(sectionKey, feedbackText[sectionKey] || '');
179
+ setFeedbackOpen(prev => {
180
+ const next = new Set(prev);
181
+ next.delete(sectionKey);
182
+ return next;
183
+ });
184
+ }
185
+ };
186
+ if (loading) {
187
+ return (_jsx("div", { className: "gen-conditions-tab", children: _jsxs("div", { className: "gen-extracting-notice", children: [_jsx("div", { className: "gen-extracting-spinner" }), _jsx("p", { children: "Preparing structured view from analytical prose..." }), _jsx("p", { className: "gen-extracting-detail", children: "Extracting structured data for display." })] }) }));
188
+ }
189
+ if (error) {
190
+ return (_jsx("div", { className: "gen-conditions-tab", children: _jsxs("div", { className: "gen-extraction-error", children: [_jsxs("p", { children: ["Could not extract structured data: ", error] }), _jsx("p", { className: "gen-extraction-fallback", children: "Try refreshing the page or running the analysis again." })] }) }));
191
+ }
192
+ if (!workingData) {
193
+ return _jsx("p", { className: "gen-empty", children: "No data available yet." });
194
+ }
195
+ // Check if synthetic_judgment is already included as an accordion section
196
+ const hasSyntheticSection = sections.some(s => s.key === 'synthetic_judgment');
197
+ // Check if counterfactual_analysis is handled (either as 'counterfactual_analysis' or legacy 'counterfactuals')
198
+ const hasCounterfactualSection = sections.some(s => s.key === 'counterfactual_analysis' || s.key === 'counterfactuals');
199
+ return (_jsxs("div", { className: "gen-conditions-tab", children: [isProseMode && (_jsx("div", { className: "gen-prose-mode-badge", children: "Schema-on-read: extracted from analytical prose" })), sections.map(section => {
200
+ // Resolve section data — with backward-compat fallback for renamed keys
201
+ let sectionData = workingData[section.key];
202
+ if (!sectionData && section.key === 'counterfactuals') {
203
+ sectionData = workingData.counterfactual_analysis;
204
+ }
205
+ if (!sectionData)
206
+ return null;
207
+ const isExpanded = expandedSections.has(section.key);
208
+ const hasEverExpanded = everExpanded.has(section.key);
209
+ const polishState = sectionPolishState?.[section.key] || 'idle';
210
+ const hasOverride = !!sectionOverrides?.[section.key];
211
+ const isFeedbackOpen = feedbackOpen.has(section.key);
212
+ // Per-section style overrides take precedence over view-level
213
+ const effectiveSO = sectionOverrides?.[section.key]?.style_overrides || styleOverrides;
214
+ // Section description from polish or config
215
+ const description = sectionDescriptions?.[section.key];
216
+ // Preview text for collapsed state
217
+ const previewText = !isExpanded ? extractPreviewText(sectionData) : '';
218
+ // Accent color for border and badge
219
+ const accentColor = effectiveSO?.accent_color;
220
+ return (_jsxs("div", { id: `section-${section.key}`, className: `gen-accordion-section ${isExpanded ? 'gen-accordion-section--expanded' : ''}`, children: [_jsxs("div", { className: "gen-accordion-header", onClick: () => toggleSection(section.key), style: {
221
+ ...(effectiveSO?.section_header || {}),
222
+ borderLeftColor: accentColor || undefined,
223
+ }, children: [_jsxs("div", { className: "gen-accordion-header-row", children: [_jsx("span", { className: `gen-accordion-chevron ${isExpanded ? 'gen-accordion-chevron--open' : ''}`, children: "\u25B8" }), _jsx("span", { className: "gen-accordion-title", style: effectiveSO?.section_title || undefined, children: section.title }), Array.isArray(sectionData) && (_jsx("span", { className: "gen-accordion-count", style: accentColor ? { backgroundColor: accentColor, color: '#fff' } : undefined, children: sectionData.length })), provenanceEnabled && (_jsx(ProvenanceSectionIcon, { sectionKey: section.key, config: config.section_renderers?.[section.key], children_payloads: provenanceChildren })), (() => {
224
+ const statusKey = `${captureViewKey || ''}::${section.key}`;
225
+ const statuses = captureStatusMap?.[statusKey];
226
+ if (!statuses?.length)
227
+ return null;
228
+ const hasArsenal = statuses.some(s => s.destination === 'arsenal');
229
+ const hasResearchAnswered = statuses.some(s => s.destination === 'research_todo' && s.has_answer);
230
+ const hasResearchPending = statuses.some(s => s.destination === 'research_todo' && !s.has_answer);
231
+ return (_jsxs("span", { className: "capture-status-dots", onClick: e => e.stopPropagation(), children: [hasArsenal && _jsx("span", { className: "capture-status-dot capture-status-dot--arsenal", title: "Sent to Arsenal" }), hasResearchAnswered && _jsx("span", { className: "capture-status-dot capture-status-dot--answered", title: "Research answered" }), hasResearchPending && _jsx("span", { className: "capture-status-dot capture-status-dot--research", title: "Research question pending" })] }));
232
+ })(), captureMode && onCapture && (_jsx("button", { className: "section-capture-btn", title: "Capture this section", onClick: e => {
233
+ e.stopPropagation();
234
+ onCapture({
235
+ source_view_key: captureViewKey || '',
236
+ source_section_key: section.key,
237
+ source_renderer_type: 'accordion',
238
+ content_type: 'section',
239
+ selected_text: previewText || extractPreviewText(sectionData) || section.title || section.key,
240
+ structured_data: sectionData,
241
+ context_title: `${captureViewKey || 'Analysis'} > ${section.title || section.key}`,
242
+ source_type: (captureSourceType || 'analysis'),
243
+ entity_id: captureEntityId || captureJobId || '',
244
+ depth_level: 'L1_section',
245
+ });
246
+ }, style: {
247
+ marginLeft: onPolishSection ? '0' : 'auto',
248
+ background: 'none',
249
+ border: '1px solid #475569',
250
+ borderRadius: '4px',
251
+ color: '#94a3b8',
252
+ cursor: 'pointer',
253
+ padding: '2px 6px',
254
+ fontSize: '0.75rem',
255
+ lineHeight: 1,
256
+ }, children: "\uD83D\uDCCC" })), onPolishSection && (_jsxs("span", { className: "section-polish-controls", onClick: e => e.stopPropagation(), style: {
257
+ marginLeft: 'auto',
258
+ display: 'inline-flex',
259
+ alignItems: 'center',
260
+ gap: '0.375rem',
261
+ }, children: [polishState === 'polishing' && (_jsx("span", { className: "section-polish-spinner", title: "Polishing..." })), hasOverride && polishState !== 'polishing' && (_jsx("span", { style: { color: getSemanticColor('severity', 'low')?.text || '#16a34a', fontSize: '0.85rem', cursor: 'default' }, title: "Section polished", children: "\u2713" })), hasOverride && onResetSection && (_jsx("button", { className: "section-polish-btn section-polish-reset", onClick: () => onResetSection(section.key), title: "Reset section polish", children: "Reset" })), !hasOverride && polishState !== 'polishing' && (_jsx("button", { className: "section-polish-btn section-polish-pencil", onClick: () => toggleFeedback(section.key), title: "Polish this section", children: "\u270E" })), polishState === 'error' && (_jsx("span", { style: { color: getSemanticColor('severity', 'high')?.text || '#dc2626', fontSize: '0.72rem' }, children: "failed" }))] }))] }), description && (_jsx("div", { className: "gen-accordion-description", style: effectiveSO?.section_description || undefined, children: description })), !isExpanded && previewText && (_jsx("div", { className: "gen-accordion-preview", children: previewText }))] }), isFeedbackOpen && !hasOverride && polishState !== 'polishing' && (_jsxs("div", { className: "section-polish-feedback-row", children: [_jsx("input", { type: "text", className: "section-polish-feedback-input", placeholder: "Optional: describe what to improve...", value: feedbackText[section.key] || '', onChange: e => setFeedbackText(prev => ({ ...prev, [section.key]: e.target.value })), onKeyDown: e => {
262
+ if (e.key === 'Enter')
263
+ handlePolishClick(section.key);
264
+ } }), _jsx("button", { className: "section-polish-btn section-polish-go", onClick: () => handlePolishClick(section.key), children: "Polish" }), _jsx("button", { className: "section-polish-btn section-polish-cancel", onClick: () => toggleFeedback(section.key), children: "\u00D7" })] })), _jsx("div", { className: `gen-section-collapse ${isExpanded ? 'gen-section-expanded' : ''}`, children: _jsx("div", { className: "gen-section-collapse-inner", children: hasEverExpanded && (_jsx("div", { className: "gen-section-content", style: effectiveSO?.section_content || undefined, children: (() => {
265
+ // Sub-renderer dispatch with resilient fallback chain:
266
+ // 1. Try configured renderer (if compatible with data)
267
+ // 2. If incompatible or unresolved, try nested_sections
268
+ // 3. Auto-detect renderer based on data shape
269
+ // 4. GenericSectionRenderer as final fallback
270
+ // Forward capture config so sub-renderers (CardGrid, Card, etc.) show capture buttons
271
+ const captureForward = {
272
+ _captureMode: captureMode,
273
+ _onCapture: onCapture,
274
+ _captureJobId: captureJobId,
275
+ _captureViewKey: captureViewKey,
276
+ _parentSectionKey: section.key,
277
+ _parentSectionTitle: section.title,
278
+ };
279
+ const sectionHints = config.section_renderers;
280
+ const hint = sectionHints?.[section.key];
281
+ if (hint) {
282
+ const SectionRenderer = resolveSubRenderer(hint.renderer_type);
283
+ const subConfig = { ...(hint.config || {}), _style_overrides: effectiveSO, ...captureForward };
284
+ if (SectionRenderer) {
285
+ // Pre-render compatibility check: skip renderer if
286
+ // data type doesn't match (e.g. chip_grid given a string)
287
+ if (!isRendererCompatible(hint.renderer_type, sectionData, hint.config)) {
288
+ console.warn(`[AccordionRenderer] Configured '${hint.renderer_type}' incompatible with ${Array.isArray(sectionData) ? 'array' : typeof sectionData} data for section '${section.key}' — falling through to auto-detection`);
289
+ }
290
+ else {
291
+ // Wrap in SubRendererFallback for defense-in-depth:
292
+ // catches cases where data type matches but content
293
+ // still causes null (e.g. empty array, wrong item shape)
294
+ return (_jsx(SubRendererFallback, { Renderer: SectionRenderer, data: sectionData, config: subConfig, sectionKey: section.key }));
295
+ }
296
+ }
297
+ // nested_sections: pass sub_renderers to generic
298
+ if (hint.sub_renderers) {
299
+ return _jsx(GenericSectionRenderer, { data: sectionData, subRenderers: hint.sub_renderers });
300
+ }
301
+ }
302
+ // Auto-detect the best sub-renderer based on data shape
303
+ const autoRenderer = autoDetectSubRenderer(sectionData);
304
+ if (autoRenderer) {
305
+ const AutoComp = resolveSubRenderer(autoRenderer);
306
+ if (AutoComp) {
307
+ return _jsx(AutoComp, { data: sectionData, config: { _style_overrides: effectiveSO, ...captureForward } });
308
+ }
309
+ }
310
+ // Final fallback: generic renderer handles any data shape
311
+ return _jsx(GenericSectionRenderer, { data: sectionData });
312
+ })() })) }) })] }, section.key));
313
+ }), !hasSyntheticSection && workingData.synthetic_judgment ? (_jsxs("div", { className: "gen-synthetic-judgment", children: [_jsx("h3", { children: "Synthetic Judgment" }), _jsx("div", { className: "gen-judgment-text", children: String(workingData.synthetic_judgment).split('\n').map((p, i) => (_jsx("p", { children: p }, i))) })] })) : null, !hasCounterfactualSection && workingData.counterfactual_analysis ? (_jsxs("div", { className: "gen-counterfactual", children: [_jsx("h3", { children: "Counterfactual Analysis" }), _jsx("p", { className: "gen-section-desc", children: "What the argument would look like without the author's prior work" }), _jsx("div", { className: "gen-counterfactual-text", children: String(workingData.counterfactual_analysis).split('\n').map((p, i) => (_jsx("p", { children: p }, i))) })] })) : null] }));
314
+ }
315
+ //# sourceMappingURL=AccordionRenderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"AccordionRenderer.js","sourceRoot":"","sources":["../../src/renderers/AccordionRenderer.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * CardGridRenderer — Generic card grid with pluggable cell renderers.
3
+ *
4
+ * Layout shell that handles:
5
+ * - Data normalization (arrays stay as-is, Records are flattened)
6
+ * - Grouping by a configurable field
7
+ * - Summary bar with distribution counts
8
+ * - Variable card sizing with hero card pattern
9
+ * - Hover elevation and card type indicators
10
+ * - Style override consumption for polish integration
11
+ * - Expandable cards (optional)
12
+ *
13
+ * renderer_config keys:
14
+ * cell_renderer: string — key into cellRenderers registry
15
+ * group_by: string — field to group items by (optional)
16
+ * group_style_map: string — category name for getCategoryColor lookups
17
+ * group_descriptions: Record — optional per-group description text
18
+ * columns: number — grid columns (default: 2)
19
+ * expandable: boolean — cards expand on click (default: false)
20
+ * summary_fields: string[] — fields for summary bar above grid
21
+ */
22
+ import { RendererProps } from '../types';
23
+ export declare function CardGridRenderer({ data, config }: RendererProps): import("react/jsx-runtime").JSX.Element;
24
+ //# sourceMappingURL=CardGridRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardGridRenderer.d.ts","sourceRoot":"","sources":["../../src/renderers/CardGridRenderer.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AA8IzC,wBAAgB,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,aAAa,2CAsL/D"}