@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 @@
|
|
|
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"}
|