@reqlan/analytical 0.4.0 → 0.5.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 (42) hide show
  1. package/README.md +164 -0
  2. package/README.template.md +33 -0
  3. package/out/analysis-api.d.ts +8 -0
  4. package/out/analysis-api.js +21 -0
  5. package/out/analysis-api.js.map +1 -1
  6. package/out/core/application-memory.d.ts +11 -0
  7. package/out/core/application-memory.js +26 -0
  8. package/out/core/application-memory.js.map +1 -0
  9. package/out/create-runtime.d.ts +1 -0
  10. package/out/create-runtime.js +2 -3
  11. package/out/create-runtime.js.map +1 -1
  12. package/out/export/build-export-snapshot.js +52 -30
  13. package/out/export/build-export-snapshot.js.map +1 -1
  14. package/out/export/export-html.d.ts +4 -0
  15. package/out/export/export-html.js +8 -0
  16. package/out/export/export-html.js.map +1 -0
  17. package/out/export/html-export-assets.d.ts +2 -2
  18. package/out/export/html-export-assets.js +187 -17
  19. package/out/export/html-export-assets.js.map +1 -1
  20. package/out/export/html-export-template.d.ts +2 -1
  21. package/out/export/html-export-template.js +230 -120
  22. package/out/export/html-export-template.js.map +1 -1
  23. package/out/export/html-export-utils.d.ts +13 -2
  24. package/out/export/html-export-utils.js +167 -52
  25. package/out/export/html-export-utils.js.map +1 -1
  26. package/out/export/secret-rq.d.ts +2 -0
  27. package/out/export/secret-rq.js +9 -0
  28. package/out/export/secret-rq.js.map +1 -0
  29. package/out/export/types.d.ts +25 -0
  30. package/out/export/write-html-export.js +7 -1
  31. package/out/export/write-html-export.js.map +1 -1
  32. package/out/headless-index-service.js +2 -1
  33. package/out/headless-index-service.js.map +1 -1
  34. package/out/index-store/idea-extractor.js +42 -7
  35. package/out/index-store/idea-extractor.js.map +1 -1
  36. package/out/index-store/webview-graph-queries.d.ts +12 -0
  37. package/out/index-store/webview-graph-queries.js +37 -3
  38. package/out/index-store/webview-graph-queries.js.map +1 -1
  39. package/out/index.d.ts +5 -2
  40. package/out/index.js +4 -1
  41. package/out/index.js.map +1 -1
  42. package/package.json +2 -2
@@ -28,13 +28,16 @@ body {
28
28
  }
29
29
  a { color: var(--accent-strong); text-decoration: none; }
30
30
  a:hover { color: var(--accent); }
31
- main.layout { max-width: 1360px; margin: 0 auto; padding: 1.5rem; }
31
+ main.layout {
32
+ max-width: 1360px; margin: 0 auto; padding: 1.5rem;
33
+ display: flex; flex-direction: column; gap: 1.5rem;
34
+ }
32
35
  .topbar {
33
36
  position: sticky; top: 0; z-index: 10;
34
- background: var(--bg-elev); border-bottom: 1px solid var(--line); margin: 0 -1.5rem 1.5rem;
37
+ background: var(--bg-elev); border-bottom: 1px solid var(--line); margin: 0 -1.5rem;
35
38
  padding: 0.9rem 1.5rem;
36
39
  }
37
- .topbar-inner, .hero, .split, .grid, .detail-grid { display: grid; gap: 1rem; }
40
+ .topbar-inner, .hero, .split, .grid, .detail-grid { display: grid; gap: 1.5rem; }
38
41
  .topbar-inner { grid-template-columns: 1.3fr auto; align-items: center; }
39
42
  .nav { display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: center; }
40
43
  .nav a {
@@ -46,11 +49,35 @@ main.layout { max-width: 1360px; margin: 0 auto; padding: 1.5rem; }
46
49
  background: color-mix(in srgb, var(--rust) 28%, var(--bg-raised));
47
50
  color: var(--fg); border-color: var(--rust);
48
51
  }
49
- .hero { grid-template-columns: 2fr 1fr; margin-bottom: 1.5rem; }
50
- .grid { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
51
- .split, .detail-grid { grid-template-columns: repeat(auto-fit, minmax(320px, 1fr)); }
52
+ .nav a.brand-link {
53
+ background: transparent;
54
+ border-color: transparent;
55
+ color: var(--fg);
56
+ font-weight: 650;
57
+ letter-spacing: 0.02em;
58
+ padding-left: 0.15rem;
59
+ padding-right: 0.9rem;
60
+ }
61
+ .nav a.brand-link:hover {
62
+ color: var(--accent);
63
+ border-color: transparent;
64
+ background: transparent;
65
+ }
66
+ .hero { grid-template-columns: 2fr 1fr; }
67
+ .grid {
68
+ display: grid;
69
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 140px), 1fr));
70
+ gap: 1.5rem;
71
+ row-gap: 1.5rem;
72
+ column-gap: 1.5rem;
73
+ }
74
+ .split, .detail-grid {
75
+ display: grid;
76
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
77
+ gap: 1.5rem;
78
+ }
52
79
  .panel, .metric, .card, .table-shell, .graph-shell, .print-card, .search-result {
53
- background: var(--bg-soft);
80
+ background: var(--bg-raised);
54
81
  border: 1px solid var(--line);
55
82
  border-radius: 10px;
56
83
  }
@@ -59,20 +86,23 @@ main.layout { max-width: 1360px; margin: 0 auto; padding: 1.5rem; }
59
86
  .metric-link, .metric > span, .metric > strong {
60
87
  display: flex; flex-direction: column; gap: 0.35rem; padding: 1rem; color: inherit;
61
88
  }
62
- .metric-link:hover { background: var(--bg-raised); }
89
+ .metric-link:hover { background: color-mix(in srgb, var(--accent) 10%, var(--bg-raised)); }
63
90
  .metric-label, .subtle, .eyebrow, .breadcrumbs { color: var(--muted); }
64
91
  .metric-value { font-size: 1.75rem; color: var(--accent-strong); }
65
92
  .eyebrow { text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.75rem; color: var(--rust); }
66
- .page-header { margin-bottom: 1rem; }
93
+ .page-header { display: grid; gap: 0.55rem; }
94
+ .page-header h1 { margin: 0; }
95
+ .page-header .eyebrow { margin: 0; }
96
+ .page-header .subtle { margin: 0; }
67
97
  .toolbar {
68
98
  display: flex; flex-wrap: wrap; gap: 0.75rem; align-items: center; justify-content: space-between;
69
99
  margin-bottom: 0.9rem;
70
100
  }
71
- .toolbar .actions, .pill-row, .breadcrumbs { display: flex; gap: 0.55rem; flex-wrap: wrap; align-items: center; }
101
+ .toolbar .actions, .pill-row, .breadcrumbs { display: flex; gap: 0.75rem; row-gap: 0.85rem; flex-wrap: wrap; align-items: center; }
72
102
  .chip, .pill {
73
103
  display: inline-flex; align-items: center; gap: 0.35rem;
74
104
  padding: 0.28rem 0.6rem; border-radius: 8px;
75
- border: 1px solid var(--line); background: var(--bg-raised); color: var(--muted);
105
+ border: 1px solid var(--line); background: var(--bg); color: var(--muted);
76
106
  }
77
107
  a.pill:hover { color: var(--accent-strong); border-color: color-mix(in srgb, var(--accent) 40%, var(--line)); }
78
108
  .graph-controls-bar {
@@ -84,8 +114,9 @@ a.pill:hover { color: var(--accent-strong); border-color: color-mix(in srgb, var
84
114
  padding: 0.8rem;
85
115
  border: 1px solid var(--line);
86
116
  border-radius: 10px;
87
- background: var(--bg-raised);
117
+ background: var(--bg);
88
118
  }
119
+ .graph-shell > .pill-row { margin-bottom: 0.9rem; }
89
120
  .graph-filter {
90
121
  flex: 1 1 180px;
91
122
  min-width: 160px;
@@ -125,6 +156,23 @@ th, td {
125
156
  th { color: var(--muted); font-size: 0.94rem; }
126
157
  tbody tr:hover { background: var(--bg-raised); }
127
158
  .table-shell { overflow-x: auto; }
159
+ .scroll-window {
160
+ --scroll-window-max: min(28rem, 50vh);
161
+ }
162
+ body[data-runtime-mode="interactive"] .scroll-window {
163
+ max-height: var(--scroll-window-max);
164
+ overflow: auto;
165
+ border: 1px solid var(--line);
166
+ border-radius: 8px;
167
+ background: var(--bg);
168
+ }
169
+ body[data-runtime-mode="interactive"] .scroll-window > table {
170
+ margin: 0;
171
+ }
172
+ body[data-runtime-mode="interactive"] .scroll-window .entity-list,
173
+ body[data-runtime-mode="interactive"] .scroll-window .rollup-list {
174
+ padding: 0.75rem;
175
+ }
128
176
  .sortable-th { padding: 0.45rem 0.4rem; }
129
177
  .sort-button {
130
178
  display: inline-flex; align-items: center; gap: 0.35rem;
@@ -136,6 +184,29 @@ tbody tr:hover { background: var(--bg-raised); }
136
184
  .sort-button.sort-active { color: var(--accent-strong); }
137
185
  .sort-indicator { color: var(--faint); font-size: 0.8em; min-width: 1em; }
138
186
  .sort-button.sort-active .sort-indicator { color: var(--accent-strong); }
187
+ .table-filter-toggle {
188
+ display: inline-flex; align-items: center; justify-content: center;
189
+ width: 2.25rem; height: 2.25rem; padding: 0;
190
+ border: 1px solid var(--line); border-radius: 8px;
191
+ background: var(--bg-raised); color: var(--muted); cursor: pointer;
192
+ }
193
+ .table-filter-toggle:hover { color: var(--fg); border-color: color-mix(in srgb, var(--accent) 40%, var(--line)); }
194
+ .table-filter-toggle.is-active {
195
+ color: var(--fg);
196
+ border-color: var(--accent);
197
+ background: color-mix(in srgb, var(--accent) 18%, var(--bg-raised));
198
+ }
199
+ .table-filter-toggle.has-filters:not(.is-active) {
200
+ color: var(--accent-strong);
201
+ border-color: color-mix(in srgb, var(--accent) 45%, var(--line));
202
+ }
203
+ .table-filter-toggle svg { width: 1rem; height: 1rem; display: block; }
204
+ .table-filter-actions {
205
+ display: flex; justify-content: flex-end; gap: 0.55rem;
206
+ margin-bottom: 0.65rem;
207
+ }
208
+ .column-filter-row { display: none; }
209
+ .column-filter-row.is-open { display: table-row; }
139
210
  .column-filter-row th {
140
211
  padding: 0.35rem 0.4rem 0.75rem; border-bottom: 1px solid var(--line); font-weight: 400;
141
212
  }
@@ -148,18 +219,50 @@ tbody tr:hover { background: var(--bg-raised); }
148
219
  border-color: var(--accent);
149
220
  box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 25%, transparent);
150
221
  }
151
- .entity-list { display: grid; gap: 0.85rem; }
222
+ body[data-runtime-mode="interactive"] .scroll-window thead tr:first-child th {
223
+ position: sticky;
224
+ top: 0;
225
+ z-index: 2;
226
+ background: var(--bg-raised);
227
+ box-shadow: 0 1px 0 var(--line);
228
+ }
229
+ body[data-runtime-mode="interactive"] .scroll-window thead .column-filter-row.is-open th {
230
+ position: sticky;
231
+ top: 2.65rem;
232
+ z-index: 1;
233
+ background: var(--bg-raised);
234
+ box-shadow: 0 1px 0 var(--line);
235
+ }
236
+ .entity-list { display: grid; gap: 1.5rem; }
152
237
  .entity-card {
153
- border: 1px solid var(--line); border-radius: 10px; padding: 0.9rem 1rem; background: var(--bg-raised);
238
+ border: 1px solid var(--line); border-radius: 10px; padding: 0.9rem 1rem; background: var(--bg);
154
239
  color: inherit;
155
240
  }
156
241
  .entity-card:hover { border-color: color-mix(in srgb, var(--accent) 40%, var(--line)); }
157
- .entity-card h3, .panel h2, .table-shell h2, .graph-shell h2 { margin-top: 0; }
242
+ .entity-card h3, .entity-card p { margin: 0; }
243
+ .entity-card p + p, .entity-card strong + p, .entity-card h3 + p { margin-top: 0.35rem; }
244
+ .panel > h2, .table-shell > h2, .graph-shell > h2, .print-card > h3 { margin-top: 0; margin-bottom: 0.75rem; }
245
+ .toolbar h2 { margin: 0; }
158
246
  .rollup-list { display: grid; gap: 0.5rem; }
159
247
  .rollup-list div {
160
248
  display: flex; justify-content: space-between; gap: 1rem; border-bottom: 1px solid var(--line); padding-bottom: 0.4rem;
161
249
  }
162
250
  .rollup-list dd { margin: 0; }
251
+ .distribution-track {
252
+ height: 0.7rem;
253
+ min-width: 6rem;
254
+ border-radius: 999px;
255
+ background: var(--bg);
256
+ border: 1px solid var(--line);
257
+ overflow: hidden;
258
+ }
259
+ .distribution-fill {
260
+ display: block;
261
+ height: 100%;
262
+ border-radius: inherit;
263
+ background: linear-gradient(90deg, var(--accent-dim), var(--accent-strong));
264
+ min-width: 0;
265
+ }
163
266
  .graph-root svg {
164
267
  width: 100%; min-height: 620px; background: var(--bg); border-radius: 10px; border: 1px solid var(--line);
165
268
  }
@@ -173,6 +276,7 @@ tbody tr:hover { background: var(--bg-raised); }
173
276
  transition: fill 180ms ease, stroke 180ms ease, r 180ms ease;
174
277
  }
175
278
  .graph-root .external circle { fill: var(--rust-muted); stroke: color-mix(in srgb, var(--rust) 50%, transparent); }
279
+ .graph-root .ideaset circle { fill: color-mix(in srgb, #d18616 78%, white); stroke: #d18616; }
176
280
  .graph-root .subject circle {
177
281
  fill: var(--rust);
178
282
  stroke: var(--accent-strong);
@@ -212,7 +316,6 @@ tbody tr:hover { background: var(--bg-raised); }
212
316
  .search-results { display: grid; gap: 0.7rem; margin-top: 1rem; }
213
317
  .search-result:hover { border-color: var(--accent-dim); }
214
318
  .hidden { display: none !important; }
215
- .breadcrumbs { margin-bottom: 0.65rem; }
216
319
  .breadcrumbs a { color: var(--muted); }
217
320
  .breadcrumbs a:hover { color: var(--accent-strong); }
218
321
  .section-link { font-size: 0.92rem; }
@@ -261,11 +364,21 @@ pre.code-like {
261
364
  @media print {
262
365
  :root { color-scheme: light; }
263
366
  body { background: white; color: black; }
264
- .topbar, .searchbar, .toolbar .actions, .graph-shell .toolbar, .column-filter-row, .hide-on-print { display: none !important; }
367
+ .topbar, .searchbar, .toolbar .actions, .graph-shell .toolbar, .column-filter-row, .table-filter-toggle, .table-filter-actions, .hide-on-print { display: none !important; }
265
368
  .sort-button { cursor: default; }
266
369
  .panel, .metric, .card, .table-shell, .graph-shell, .print-card, .search-result, .entity-card {
267
370
  background: white; color: black; border-color: #cbd5e1; box-shadow: none;
268
371
  }
372
+ .scroll-window {
373
+ max-height: none !important;
374
+ overflow: visible !important;
375
+ border: none !important;
376
+ background: transparent !important;
377
+ }
378
+ .scroll-window thead th {
379
+ position: static !important;
380
+ box-shadow: none !important;
381
+ }
269
382
  a { color: black; text-decoration: underline; }
270
383
  .print-break-avoid { break-inside: avoid; }
271
384
  }
@@ -377,6 +490,44 @@ function isPlaceholderRow(row) {
377
490
  return [...row.cells].some(cell => Number(cell.colSpan || 1) > 1);
378
491
  }
379
492
 
493
+ const FILTER_ICON_SVG = '<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><polygon points="22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3"></polygon></svg>';
494
+
495
+ function ensureTableFilterToggle(table, filterRow, filterInputs, syncToggleState) {
496
+ const shell = table.closest('.table-shell') || table.parentElement;
497
+ const toolbar = shell ? shell.querySelector(':scope > .toolbar') : null;
498
+ let actions = toolbar ? toolbar.querySelector('.actions') : null;
499
+ if (toolbar && !actions) {
500
+ actions = document.createElement('div');
501
+ actions.className = 'actions';
502
+ toolbar.appendChild(actions);
503
+ }
504
+ if (!actions) {
505
+ actions = document.createElement('div');
506
+ actions.className = 'actions table-filter-actions';
507
+ table.parentElement?.insertBefore(actions, table);
508
+ }
509
+
510
+ const toggle = document.createElement('button');
511
+ toggle.type = 'button';
512
+ toggle.className = 'table-filter-toggle';
513
+ toggle.setAttribute('aria-label', 'Toggle column filters');
514
+ toggle.setAttribute('aria-expanded', 'false');
515
+ toggle.setAttribute('title', 'Column filters');
516
+ toggle.innerHTML = FILTER_ICON_SVG;
517
+ toggle.addEventListener('click', () => {
518
+ const open = !filterRow.classList.contains('is-open');
519
+ filterRow.classList.toggle('is-open', open);
520
+ toggle.classList.toggle('is-active', open);
521
+ toggle.setAttribute('aria-expanded', open ? 'true' : 'false');
522
+ syncToggleState();
523
+ if (open) {
524
+ filterInputs[0]?.focus();
525
+ }
526
+ });
527
+ actions.appendChild(toggle);
528
+ return toggle;
529
+ }
530
+
380
531
  function wireTables(root) {
381
532
  const tables = root.querySelectorAll('table');
382
533
  const tableControllers = [];
@@ -395,6 +546,12 @@ function wireTables(root) {
395
546
  let sortIndex = -1;
396
547
  let sortDir = 'asc';
397
548
  const filterInputs = [];
549
+ let filterToggle = null;
550
+ const syncToggleState = () => {
551
+ if (!filterToggle) return;
552
+ const hasFilters = filterInputs.some(input => input.value.trim());
553
+ filterToggle.classList.toggle('has-filters', hasFilters);
554
+ };
398
555
  const controller = {
399
556
  table,
400
557
  tbody,
@@ -417,6 +574,7 @@ function wireTables(root) {
417
574
  });
418
575
  row.classList.toggle('hidden', !(matchesGlobal && matchesColumns));
419
576
  }
577
+ syncToggleState();
420
578
  }
421
579
  };
422
580
 
@@ -482,6 +640,7 @@ function wireTables(root) {
482
640
  filterRow.appendChild(cell);
483
641
  });
484
642
  thead.appendChild(filterRow);
643
+ filterToggle = ensureTableFilterToggle(table, filterRow, filterInputs, syncToggleState);
485
644
  tableControllers.push(controller);
486
645
  }
487
646
 
@@ -854,6 +1013,7 @@ function wireGraph(root) {
854
1013
  const group = document.createElementNS('http://www.w3.org/2000/svg', 'g');
855
1014
  const classes = ['node'];
856
1015
  if (node.isExternal) classes.push('external');
1016
+ if (node.kind === 'ideaset') classes.push('ideaset');
857
1017
  if (node.isSubject || node.id === graph.centerId) classes.push('subject');
858
1018
  group.setAttribute('class', classes.join(' '));
859
1019
  group.dataset.nodeId = node.id;
@@ -989,6 +1149,7 @@ function wireGraph(root) {
989
1149
  const statusQuery = lower(statusSelect?.value?.trim());
990
1150
  const tagQuery = lower(tagSelect?.value?.trim());
991
1151
  if (hideExternal && node.isExternal) return false;
1152
+ if (hideIdeasets && node.kind === 'ideaset') return false;
992
1153
  const haystack = [node.name, node.kind, node.fileUri, node.status || '', ...(node.tags || [])].map(lower).join(' ');
993
1154
  if (query && !haystack.includes(query)) return false;
994
1155
  if (pathQuery && !lower(node.fileUri).includes(pathQuery)) return false;
@@ -1016,6 +1177,12 @@ function wireGraph(root) {
1016
1177
  toggleExternal.textContent = hideExternal ? 'Show external' : 'Hide external';
1017
1178
  refresh();
1018
1179
  });
1180
+ toggleIdeasets?.addEventListener('click', () => {
1181
+ hideIdeasets = !hideIdeasets;
1182
+ toggleIdeasets.classList.toggle('is-active', hideIdeasets);
1183
+ toggleIdeasets.textContent = hideIdeasets ? 'Show ideasets' : 'Hide ideasets';
1184
+ refresh();
1185
+ });
1019
1186
  togglePhysics?.addEventListener('click', () => {
1020
1187
  livePhysics = !livePhysics;
1021
1188
  togglePhysics.classList.toggle('is-active', livePhysics);
@@ -1035,8 +1202,11 @@ function wireGraph(root) {
1035
1202
  if (statusSelect) statusSelect.value = '';
1036
1203
  if (tagSelect) tagSelect.value = '';
1037
1204
  hideExternal = false;
1205
+ hideIdeasets = false;
1038
1206
  toggleExternal?.classList.remove('is-active');
1207
+ toggleIdeasets?.classList.remove('is-active');
1039
1208
  if (toggleExternal) toggleExternal.textContent = 'Hide external';
1209
+ if (toggleIdeasets) toggleIdeasets.textContent = 'Hide ideasets';
1040
1210
  positions.clear();
1041
1211
  velocities.clear();
1042
1212
  pinnedIds.clear();
@@ -1 +1 @@
1
- {"version":3,"file":"html-export-assets.js","sourceRoot":"","sources":["../../src/export/html-export-assets.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Q5B,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqxBrB,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,SAAkB;IACrD,OAAO,wCAAwC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;AAC3G,CAAC"}
1
+ {"version":3,"file":"html-export-assets.js","sourceRoot":"","sources":["../../src/export/html-export-assets.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgY5B,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA80BrB,CAAC;AAEF,MAAM,UAAU,sBAAsB,CAAC,SAAkB;IACrD,OAAO,wCAAwC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,CAAC;AAC3G,CAAC"}
@@ -1,10 +1,11 @@
1
- import type { ExportClusterRecord, ExportCodeFileRecord, ExportFileRecord, ExportIdeaRecord, ExportSnapshot } from './types.js';
1
+ import type { ExportAttributeRecord, ExportClusterRecord, ExportCodeFileRecord, ExportFileRecord, ExportIdeaRecord, ExportSnapshot } from './types.js';
2
2
  export declare function renderHomePage(snapshot: ExportSnapshot): string;
3
3
  export declare function renderIdeasIndexPage(snapshot: ExportSnapshot): string;
4
4
  export declare function renderFilesIndexPage(snapshot: ExportSnapshot): string;
5
5
  export declare function renderCodeFilesIndexPage(snapshot: ExportSnapshot): string;
6
6
  export declare function renderClustersIndexPage(snapshot: ExportSnapshot): string;
7
7
  export declare function renderAttributesIndexPage(snapshot: ExportSnapshot): string;
8
+ export declare function renderAttributeDetailPage(snapshot: ExportSnapshot, attribute: ExportAttributeRecord): string;
8
9
  export declare function renderGraphPage(snapshot: ExportSnapshot): string;
9
10
  export declare function renderIdeaDetailPage(snapshot: ExportSnapshot, idea: ExportIdeaRecord): string;
10
11
  export declare function renderFileDetailPage(snapshot: ExportSnapshot, file: ExportFileRecord): string;