@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,376 @@
1
+ /* =============================================
2
+ * AccordionRenderer.css
3
+ * Collapsible section styling for the Humanist
4
+ * Data Craft design system.
5
+ *
6
+ * Uses --dt-* design tokens from DesignTokenContext
7
+ * and --type, --space, --weight vars from GenealogyPage.css
8
+ * ============================================= */
9
+
10
+ /* === Section Wrapper === */
11
+ .gen-accordion-section {
12
+ margin-bottom: var(--space-sm, 0.5rem);
13
+ }
14
+
15
+ /* === Deep-link highlight pulse === */
16
+ .gen-accordion-section--highlighted {
17
+ animation: deeplink-pulse 2s ease-out;
18
+ }
19
+
20
+ @keyframes deeplink-pulse {
21
+ 0% { box-shadow: 0 0 0 3px rgba(99, 102, 241, 0.5); }
22
+ 100% { box-shadow: 0 0 0 0 rgba(99, 102, 241, 0); }
23
+ }
24
+
25
+ /* === Clickable Header === */
26
+ .gen-accordion-header {
27
+ background: var(--dt-surface-elevated, var(--color-surface-alt, #f9f7f4));
28
+ border-left: 3px solid var(--dt-border-default, var(--color-border, #e2e5e9));
29
+ border-radius: var(--radius-md, 8px);
30
+ padding: var(--space-sm, 0.75rem) var(--space-md, 1rem);
31
+ cursor: pointer;
32
+ user-select: none;
33
+ transition: background 150ms ease-out,
34
+ border-color 150ms ease-out,
35
+ box-shadow 150ms ease-out;
36
+ }
37
+
38
+ .gen-accordion-header:hover {
39
+ background: var(--dt-surface-alt, #f4f1ec);
40
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
41
+ }
42
+
43
+ .gen-accordion-section--expanded > .gen-accordion-header {
44
+ border-radius: var(--radius-md, 8px) var(--radius-md, 8px) 0 0;
45
+ border-left-color: var(--dt-page-accent, #b5343a);
46
+ }
47
+
48
+ /* === Header Row (chevron + title + badge + controls) === */
49
+ .gen-accordion-header-row {
50
+ display: flex;
51
+ align-items: center;
52
+ gap: var(--space-sm, 0.5rem);
53
+ min-height: 2.25rem;
54
+ }
55
+
56
+ /* === Chevron with rotation === */
57
+ .gen-accordion-chevron {
58
+ display: inline-flex;
59
+ align-items: center;
60
+ justify-content: center;
61
+ font-size: 0.75rem;
62
+ color: var(--dt-text-faint, var(--color-text-muted, #6b7280));
63
+ transition: transform 150ms ease-out,
64
+ color 150ms ease-out;
65
+ flex-shrink: 0;
66
+ width: 1.25rem;
67
+ }
68
+
69
+ .gen-accordion-chevron--open {
70
+ transform: rotate(90deg);
71
+ color: var(--dt-page-accent, #b5343a);
72
+ }
73
+
74
+ /* === Title === */
75
+ .gen-accordion-title {
76
+ font-size: var(--type-subheading, 1.0625rem);
77
+ font-weight: var(--weight-medium, 500);
78
+ font-family: 'Source Serif 4', 'Source Serif Pro', Georgia, serif;
79
+ color: var(--dt-text-default, var(--color-text, #1a1d23));
80
+ line-height: var(--leading-snug, 1.35);
81
+ flex: 1;
82
+ min-width: 0;
83
+ }
84
+
85
+ /* === Count Badge (pill) === */
86
+ .gen-accordion-count {
87
+ display: inline-flex;
88
+ align-items: center;
89
+ justify-content: center;
90
+ min-width: 1.375rem;
91
+ height: 1.375rem;
92
+ padding: 0 var(--space-xs, 0.375rem);
93
+ border-radius: var(--radius-pill, 9999px);
94
+ font-size: 0.6875rem;
95
+ font-weight: var(--weight-bold, 700);
96
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
97
+ background: var(--dt-text-faint, #94a3b8);
98
+ color: var(--dt-surface-default, #fff);
99
+ flex-shrink: 0;
100
+ letter-spacing: 0.02em;
101
+ }
102
+
103
+ .gen-accordion-section--expanded .gen-accordion-count {
104
+ background: var(--dt-page-accent, #b5343a);
105
+ }
106
+
107
+ /* === Section Description (italic subtitle below title) === */
108
+ .gen-accordion-description {
109
+ font-size: var(--type-caption, 0.8125rem);
110
+ color: var(--dt-text-muted, var(--color-text-muted, #6b7280));
111
+ font-style: italic;
112
+ line-height: var(--leading-normal, 1.5);
113
+ margin-top: var(--space-2xs, 0.25rem);
114
+ padding-left: 1.75rem; /* align with title (chevron width + gap) */
115
+ max-width: 72ch;
116
+ }
117
+
118
+ /* === Preview Text (collapsed only) === */
119
+ .gen-accordion-preview {
120
+ font-size: var(--type-caption, 0.8125rem);
121
+ color: var(--dt-text-faint, var(--color-text-faint, #9ca3af));
122
+ line-height: var(--leading-normal, 1.5);
123
+ margin-top: var(--space-2xs, 0.125rem);
124
+ padding-left: 1.75rem;
125
+ overflow: hidden;
126
+ text-overflow: ellipsis;
127
+ white-space: nowrap;
128
+ max-width: 100%;
129
+ }
130
+
131
+ /* === Collapse Animation (CSS Grid trick) === */
132
+ .gen-section-collapse {
133
+ display: grid;
134
+ grid-template-rows: 0fr;
135
+ transition: grid-template-rows 300ms cubic-bezier(0.16, 1, 0.3, 1);
136
+ }
137
+
138
+ .gen-section-collapse.gen-section-expanded {
139
+ grid-template-rows: 1fr;
140
+ }
141
+
142
+ .gen-section-collapse-inner {
143
+ overflow: hidden;
144
+ min-height: 0;
145
+ }
146
+
147
+ .gen-section-collapse .gen-section-content {
148
+ padding: var(--space-md, 1rem) var(--space-lg, 1.5rem);
149
+ border: 1px solid var(--dt-border-light, var(--color-border-light, #eef0f2));
150
+ border-top: none;
151
+ border-radius: 0 0 var(--radius-md, 8px) var(--radius-md, 8px);
152
+ background: var(--dt-surface-default, #ffffff);
153
+ }
154
+
155
+ /* === Capture status dots (always visible) === */
156
+ .capture-status-dots {
157
+ display: inline-flex;
158
+ gap: 4px;
159
+ align-items: center;
160
+ margin-left: 6px;
161
+ }
162
+
163
+ .capture-status-dot {
164
+ width: 8px;
165
+ height: 8px;
166
+ border-radius: 50%;
167
+ flex-shrink: 0;
168
+ }
169
+
170
+ .capture-status-dot--arsenal { background: #f59e0b; } /* amber */
171
+ .capture-status-dot--research { background: #6366f1; } /* indigo */
172
+ .capture-status-dot--answered { background: #22c55e; } /* green */
173
+
174
+ /* === Polish pencil hover === */
175
+ .gen-accordion-section:hover .section-polish-pencil {
176
+ opacity: 1;
177
+ color: var(--dt-page-accent, #b5343a);
178
+ }
179
+
180
+ /* =============================================
181
+ * GenericMiniCard — Used by SubRenderers for
182
+ * individual items in mini_card_list, etc.
183
+ * ============================================= */
184
+
185
+ .gen-mini-card {
186
+ padding: var(--space-md, 1rem);
187
+ border-radius: var(--radius-md, 8px);
188
+ background: var(--dt-surface-default, #ffffff);
189
+ border: 1px solid var(--dt-border-light, var(--color-border-light, #eef0f2));
190
+ transition: box-shadow 150ms ease-out,
191
+ transform 150ms ease-out;
192
+ }
193
+
194
+ .gen-mini-card:hover {
195
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.06);
196
+ transform: translateY(-1px);
197
+ }
198
+
199
+ .gen-mini-card-header {
200
+ display: flex;
201
+ align-items: center;
202
+ gap: var(--space-sm, 0.5rem);
203
+ margin-bottom: var(--space-xs, 0.375rem);
204
+ }
205
+
206
+ .gen-mini-card-name {
207
+ font-size: var(--type-body, 0.9375rem);
208
+ font-weight: var(--weight-semibold, 600);
209
+ font-family: 'Source Serif 4', 'Source Serif Pro', Georgia, serif;
210
+ color: var(--dt-text-default, var(--color-text, #1a1d23));
211
+ line-height: var(--leading-snug, 1.35);
212
+ }
213
+
214
+ .gen-mini-card-field {
215
+ margin-bottom: var(--space-xs, 0.25rem);
216
+ }
217
+
218
+ .gen-mini-card-label {
219
+ font-size: 0.6875rem;
220
+ font-weight: var(--weight-medium, 500);
221
+ color: var(--dt-text-faint, var(--color-text-faint, #9ca3af));
222
+ text-transform: capitalize;
223
+ letter-spacing: 0.02em;
224
+ font-family: 'Inter', -apple-system, sans-serif;
225
+ }
226
+
227
+ .gen-mini-card-value {
228
+ font-size: var(--type-caption, 0.8125rem);
229
+ color: var(--dt-text-muted, var(--color-text-muted, #6b7280));
230
+ line-height: var(--leading-normal, 1.5);
231
+ }
232
+
233
+ /* =============================================
234
+ * GenericSectionRenderer — Fallback renderer
235
+ * for arbitrary structured data in accordion sections
236
+ * ============================================= */
237
+
238
+ .gen-field-label {
239
+ font-size: 0.6875rem;
240
+ font-weight: var(--weight-medium, 500);
241
+ color: var(--dt-text-muted, var(--color-text-muted, #6b7280));
242
+ text-transform: capitalize;
243
+ letter-spacing: 0.02em;
244
+ font-family: 'Inter', -apple-system, sans-serif;
245
+ }
246
+
247
+ .gen-field-text p {
248
+ margin: var(--space-xs, 0.25rem) 0;
249
+ font-size: var(--type-body, 0.9375rem);
250
+ line-height: var(--leading-relaxed, 1.65);
251
+ color: var(--dt-text-default, var(--color-text, #1a1d23));
252
+ max-width: 72ch;
253
+ }
254
+
255
+ .gen-enum-badge {
256
+ display: inline-block;
257
+ padding: 2px var(--space-sm, 0.5rem);
258
+ border-radius: var(--radius-sm, 4px);
259
+ font-size: 0.6875rem;
260
+ font-weight: var(--weight-semibold, 600);
261
+ font-family: 'Inter', -apple-system, sans-serif;
262
+ }
263
+
264
+ .gen-chip-grid {
265
+ display: flex;
266
+ gap: 6px;
267
+ flex-wrap: wrap;
268
+ margin: var(--space-xs, 0.25rem) 0;
269
+ }
270
+
271
+ .gen-chip-inline {
272
+ display: inline-block;
273
+ padding: 3px var(--space-sm, 0.5rem);
274
+ border-radius: var(--radius-sm, 4px);
275
+ font-size: 0.6875rem;
276
+ background: var(--dt-surface-elevated, #f1f5f9);
277
+ color: var(--dt-text-muted, #475569);
278
+ border: 1px solid var(--dt-border-light, #e2e8f0);
279
+ font-family: 'Inter', -apple-system, sans-serif;
280
+ }
281
+
282
+ .gen-nested-content {
283
+ padding-left: var(--space-md, 1rem);
284
+ border-left: 2px solid var(--dt-border-light, #e2e8f0);
285
+ margin-top: var(--space-xs, 0.25rem);
286
+ }
287
+
288
+ .gen-field-row {
289
+ margin-bottom: var(--space-sm, 0.5rem);
290
+ }
291
+
292
+ .gen-field-value-inline {
293
+ margin-left: var(--space-sm, 0.5rem);
294
+ font-size: var(--type-body, 0.9375rem);
295
+ }
296
+
297
+ .gen-field-value-block {
298
+ margin-top: var(--space-2xs, 0.125rem);
299
+ }
300
+
301
+ .gen-empty-list {
302
+ font-size: var(--type-caption, 0.8125rem);
303
+ color: var(--dt-text-faint, var(--color-text-faint, #9ca3af));
304
+ font-style: italic;
305
+ }
306
+
307
+ .gen-number-value {
308
+ font-size: var(--type-body, 0.9375rem);
309
+ font-weight: var(--weight-medium, 500);
310
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
311
+ color: var(--dt-text-default, #1a1d23);
312
+ }
313
+
314
+ /* === "show more" / "show less" link styling === */
315
+ .gen-show-more-link {
316
+ background: none;
317
+ border: none;
318
+ cursor: pointer;
319
+ padding: 0;
320
+ font-size: var(--type-label, 0.6875rem);
321
+ font-weight: var(--weight-medium, 500);
322
+ color: var(--dt-page-accent, var(--color-accent, #b5343a));
323
+ letter-spacing: 0.02em;
324
+ transition: color 150ms ease;
325
+ }
326
+
327
+ .gen-show-more-link:hover {
328
+ color: var(--dt-page-accent-hover, var(--color-accent-hover, #9a2c32));
329
+ text-decoration: underline;
330
+ }
331
+
332
+ /* === Subsection heading inside card/accordion (softer) === */
333
+ .gen-subsection-heading {
334
+ font-size: 0.75rem;
335
+ font-weight: var(--weight-medium, 500);
336
+ color: var(--dt-text-muted, var(--color-text-muted, #6b7280));
337
+ letter-spacing: 0.02em;
338
+ margin: 0 0 6px 0;
339
+ text-transform: capitalize;
340
+ }
341
+
342
+ /* === Keyword tag badge (softer pill) === */
343
+ .gen-keyword-tag {
344
+ display: inline-block;
345
+ padding: 2px 8px;
346
+ border-radius: var(--radius-pill, 9999px);
347
+ font-size: var(--type-label, 0.6875rem);
348
+ font-weight: var(--weight-medium, 500);
349
+ background: var(--dt-surface-alt, #f8f9fa);
350
+ color: var(--dt-text-muted, #6b7280);
351
+ border: 1px solid var(--dt-border-light, #eef0f2);
352
+ font-family: 'Inter', -apple-system, sans-serif;
353
+ letter-spacing: 0.01em;
354
+ }
355
+
356
+ /* === Inline field label (for METHODOLOGICAL SIGNATURE etc.) === */
357
+ .gen-inline-label {
358
+ font-size: var(--type-label, 0.6875rem);
359
+ font-weight: var(--weight-medium, 500);
360
+ color: var(--dt-text-faint, var(--color-text-faint, #9ca3af));
361
+ text-transform: capitalize;
362
+ letter-spacing: 0.02em;
363
+ }
364
+
365
+ /* === Card grid equal heights === */
366
+ .gen-card-grid-equal {
367
+ display: grid;
368
+ grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
369
+ gap: var(--space-md, 1rem);
370
+ align-items: stretch;
371
+ }
372
+
373
+ .gen-card-grid-equal > * {
374
+ display: flex;
375
+ flex-direction: column;
376
+ }
@@ -0,0 +1,5 @@
1
+ /* @caii/analysis-renderers — Aggregate CSS entry point */
2
+ /* Import this as: import '@caii/analysis-renderers/styles' */
3
+
4
+ @import './accordion.css';
5
+ @import './renderers.css';