@issuegraph/viewer 0.1.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/LICENSE +201 -0
- package/README.md +156 -0
- package/dist/clusters.d.ts +34 -0
- package/dist/clusters.d.ts.map +1 -0
- package/dist/clusters.js +195 -0
- package/dist/clusters.js.map +1 -0
- package/dist/document.d.ts +190 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +308 -0
- package/dist/document.js.map +1 -0
- package/dist/element.d.ts +95 -0
- package/dist/element.d.ts.map +1 -0
- package/dist/element.js +174 -0
- package/dist/element.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +33 -0
- package/dist/index.js.map +1 -0
- package/dist/layout.d.ts +122 -0
- package/dist/layout.d.ts.map +1 -0
- package/dist/layout.js +297 -0
- package/dist/layout.js.map +1 -0
- package/dist/mount.d.ts +64 -0
- package/dist/mount.d.ts.map +1 -0
- package/dist/mount.js +402 -0
- package/dist/mount.js.map +1 -0
- package/dist/navigation.d.ts +56 -0
- package/dist/navigation.d.ts.map +1 -0
- package/dist/navigation.js +121 -0
- package/dist/navigation.js.map +1 -0
- package/dist/parts.d.ts +89 -0
- package/dist/parts.d.ts.map +1 -0
- package/dist/parts.js +214 -0
- package/dist/parts.js.map +1 -0
- package/dist/projections/graph.d.ts +30 -0
- package/dist/projections/graph.d.ts.map +1 -0
- package/dist/projections/graph.js +644 -0
- package/dist/projections/graph.js.map +1 -0
- package/dist/projections/linear.d.ts +35 -0
- package/dist/projections/linear.d.ts.map +1 -0
- package/dist/projections/linear.js +157 -0
- package/dist/projections/linear.js.map +1 -0
- package/dist/projections/tree.d.ts +17 -0
- package/dist/projections/tree.d.ts.map +1 -0
- package/dist/projections/tree.js +209 -0
- package/dist/projections/tree.js.map +1 -0
- package/dist/render.d.ts +35 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +45 -0
- package/dist/render.js.map +1 -0
- package/dist/scene.d.ts +94 -0
- package/dist/scene.d.ts.map +1 -0
- package/dist/scene.js +48 -0
- package/dist/scene.js.map +1 -0
- package/dist/styles.d.ts +17 -0
- package/dist/styles.d.ts.map +1 -0
- package/dist/styles.js +389 -0
- package/dist/styles.js.map +1 -0
- package/dist/theme.d.ts +71 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +169 -0
- package/dist/theme.js.map +1 -0
- package/dist/vocabulary.d.ts +107 -0
- package/dist/vocabulary.d.ts.map +1 -0
- package/dist/vocabulary.js +98 -0
- package/dist/vocabulary.js.map +1 -0
- package/package.json +56 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/projections/graph.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The linear projection: the work order as rows.
|
|
3
|
+
*
|
|
4
|
+
* Sequence is vertical position and nothing else — the list IS the order, so
|
|
5
|
+
* there is no number to hunt for and no layout that shifts between refreshes.
|
|
6
|
+
* Everything else about a row (readiness, provenance, relationships, holds)
|
|
7
|
+
* hangs off that one line.
|
|
8
|
+
*
|
|
9
|
+
* The two hold families are drawn differently on purpose, and it is the rule
|
|
10
|
+
* this projection exists to honour: a graph-derived hold stays INLINE at the
|
|
11
|
+
* rank the work would have taken, because "why isn't my P1 running" has to be
|
|
12
|
+
* answerable in place; a runner- or tracker-derived hold is not a fact about
|
|
13
|
+
* the work, earns no rank slot, and collapses into the footer with duplicates.
|
|
14
|
+
*/
|
|
15
|
+
import type { NormalizedDocument, ViewerSlot } from '../document.ts';
|
|
16
|
+
import { type ElementSpec } from '../element.ts';
|
|
17
|
+
import { type Scene } from '../scene.ts';
|
|
18
|
+
export interface SceneOptions {
|
|
19
|
+
/** The selected key, if any. Rendered as `aria-current`. */
|
|
20
|
+
readonly selected?: string | null | undefined;
|
|
21
|
+
/** The key holding the roving tab stop. Defaults to the first in order. */
|
|
22
|
+
readonly focused?: string | null | undefined;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* A slot the footer owns.
|
|
26
|
+
*
|
|
27
|
+
* ANY tracker-family hold sends the slot to the footer, even alongside a
|
|
28
|
+
* graph-derived one. A slot the runner has already claimed is not waiting on
|
|
29
|
+
* the graph in any sense a rank could express, so giving it a position would
|
|
30
|
+
* claim work is queued that nothing can start.
|
|
31
|
+
*/
|
|
32
|
+
export declare function isFooterSlot(slot: ViewerSlot): boolean;
|
|
33
|
+
export declare function excludedRow(document: NormalizedDocument, key: string, canonical: string, options: SceneOptions): ElementSpec;
|
|
34
|
+
export declare function linearScene(document: NormalizedDocument, rawOptions?: SceneOptions): Scene;
|
|
35
|
+
//# sourceMappingURL=linear.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../src/projections/linear.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACrE,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,eAAe,CAAC;AAe1D,OAAO,EAA0B,KAAK,KAAK,EAAmB,MAAM,aAAa,CAAC;AAGlF,MAAM,WAAW,YAAY;IAC3B,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC9C;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAEtD;AAoDD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,kBAAkB,EAC5B,GAAG,EAAE,MAAM,EACX,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,YAAY,GACpB,WAAW,CA0Bb;AAUD,wBAAgB,WAAW,CACzB,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,GAAE,YAAiB,GAC5B,KAAK,CAoFP"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The linear projection: the work order as rows.
|
|
3
|
+
*
|
|
4
|
+
* Sequence is vertical position and nothing else — the list IS the order, so
|
|
5
|
+
* there is no number to hunt for and no layout that shifts between refreshes.
|
|
6
|
+
* Everything else about a row (readiness, provenance, relationships, holds)
|
|
7
|
+
* hangs off that one line.
|
|
8
|
+
*
|
|
9
|
+
* The two hold families are drawn differently on purpose, and it is the rule
|
|
10
|
+
* this projection exists to honour: a graph-derived hold stays INLINE at the
|
|
11
|
+
* rank the work would have taken, because "why isn't my P1 running" has to be
|
|
12
|
+
* answerable in place; a runner- or tracker-derived hold is not a fact about
|
|
13
|
+
* the work, earns no rank slot, and collapses into the footer with duplicates.
|
|
14
|
+
*/
|
|
15
|
+
import { element } from "../element.js";
|
|
16
|
+
import { edgeBadges, emptyState, holdLine, identity, legend, provenanceLine, slotLabel, slotTitle, station, stationFill, stationsOf, atStations, } from "../parts.js";
|
|
17
|
+
import { resolveFocusKey } from "../scene.js";
|
|
18
|
+
import { treatmentFor } from "../vocabulary.js";
|
|
19
|
+
/**
|
|
20
|
+
* A slot the footer owns.
|
|
21
|
+
*
|
|
22
|
+
* ANY tracker-family hold sends the slot to the footer, even alongside a
|
|
23
|
+
* graph-derived one. A slot the runner has already claimed is not waiting on
|
|
24
|
+
* the graph in any sense a rank could express, so giving it a position would
|
|
25
|
+
* claim work is queued that nothing can start.
|
|
26
|
+
*/
|
|
27
|
+
export function isFooterSlot(slot) {
|
|
28
|
+
return slot.holds.some((hold) => hold.family === 'tracker');
|
|
29
|
+
}
|
|
30
|
+
function slotRow(document, slot, options, showRank) {
|
|
31
|
+
const held = !slot.ready;
|
|
32
|
+
const lead = document.byKey.get(slot.lead);
|
|
33
|
+
const selected = options.selected === slot.lead;
|
|
34
|
+
const focused = options.focused === slot.lead;
|
|
35
|
+
const rank = showRank
|
|
36
|
+
? element('span', { class: 'ig-rank', 'data-held': held ? 'true' : 'false', 'aria-hidden': 'true' },
|
|
37
|
+
// A held slot never prints a number: it has no position in the
|
|
38
|
+
// sequence, and printing one would claim work is queued that nothing
|
|
39
|
+
// can start.
|
|
40
|
+
[slot.rank === null ? '—' : String(slot.rank)])
|
|
41
|
+
: null;
|
|
42
|
+
const children = [
|
|
43
|
+
rank,
|
|
44
|
+
station(stationFill(slot)),
|
|
45
|
+
element('span', { class: 'ig-title' }, [slotTitle(document, slot)]),
|
|
46
|
+
lead === undefined ? null : identity(lead),
|
|
47
|
+
edgeBadges(document, slot.members),
|
|
48
|
+
provenanceLine(lead?.provenance),
|
|
49
|
+
...slot.holds.map(holdLine),
|
|
50
|
+
];
|
|
51
|
+
return element('li', {
|
|
52
|
+
class: 'ig-slot',
|
|
53
|
+
'data-ig-key': slot.lead,
|
|
54
|
+
'data-held': held ? 'true' : 'false',
|
|
55
|
+
'aria-current': selected ? 'true' : 'false',
|
|
56
|
+
'aria-label': slotLabel(document, slot),
|
|
57
|
+
tabindex: focused ? 0 : -1,
|
|
58
|
+
}, children);
|
|
59
|
+
}
|
|
60
|
+
// EXPORTED FOR THE GRAPH'S REFUSAL, which is the only other place an exclusion
|
|
61
|
+
// has to be drawn: when the graph refuses, its rail is the whole order UI and
|
|
62
|
+
// an exclusion rendered nowhere would make the refusal's own completeness claim
|
|
63
|
+
// false. One row shape for both projections rather than a second that can drift.
|
|
64
|
+
export function excludedRow(document, key, canonical, options) {
|
|
65
|
+
const issue = document.byKey.get(key);
|
|
66
|
+
return element('li', {
|
|
67
|
+
class: 'ig-slot',
|
|
68
|
+
'data-ig-key': key,
|
|
69
|
+
'data-held': 'true',
|
|
70
|
+
'aria-current': options.selected === key ? 'true' : 'false',
|
|
71
|
+
'aria-label': `${issue?.title ?? key} — ${treatmentFor('duplicate-of').label} ${canonical}, never worked`,
|
|
72
|
+
// A HARDCODED -1 HERE MEANT THE VIEWER LOST ITS TAB STOP ENTIRELY. An
|
|
73
|
+
// exclusion is in `focusOrder`, so focus can resolve to one — and when it
|
|
74
|
+
// did, no element carried `tabindex="0"` and Tab could not enter the
|
|
75
|
+
// viewer at all. Every row that can hold focus renders the roving stop.
|
|
76
|
+
tabindex: options.focused === key ? 0 : -1,
|
|
77
|
+
}, [
|
|
78
|
+
station('dashed'),
|
|
79
|
+
element('span', { class: 'ig-title' }, [issue?.title ?? key]),
|
|
80
|
+
issue === undefined ? null : identity(issue),
|
|
81
|
+
edgeBadges(document, [key]),
|
|
82
|
+
element('p', { class: 'ig-hold', 'data-family': 'tracker' }, [
|
|
83
|
+
`${treatmentFor('duplicate-of').label} ${canonical} — never worked`,
|
|
84
|
+
]),
|
|
85
|
+
]);
|
|
86
|
+
}
|
|
87
|
+
/** The one count chip isolated issues collapse into (they carry no information as rows). */
|
|
88
|
+
function isolatedChip(count) {
|
|
89
|
+
if (count === 0)
|
|
90
|
+
return null;
|
|
91
|
+
return element('p', { class: 'ig-count' }, [
|
|
92
|
+
`${String(count)} ${count === 1 ? 'issue is' : 'issues are'} in no slot and declare no relationships`,
|
|
93
|
+
]);
|
|
94
|
+
}
|
|
95
|
+
export function linearScene(document, rawOptions = {}) {
|
|
96
|
+
// NAMED THE WAY THIS PROJECTION NAMES THEM, BEFORE ANYTHING IS DRAWN. A
|
|
97
|
+
// together unit is one row keyed by its lead, so a caller handing us a
|
|
98
|
+
// partner is naming a subject this projection has a different name for —
|
|
99
|
+
// and building the markup from the partner marked nothing `aria-current`
|
|
100
|
+
// and left the tab stop on the fallback.
|
|
101
|
+
const stations = stationsOf(document);
|
|
102
|
+
const options = atStations(rawOptions, stations);
|
|
103
|
+
const inline = document.order.slots.filter((slot) => !isFooterSlot(slot));
|
|
104
|
+
const footerSlots = document.order.slots.filter(isFooterSlot);
|
|
105
|
+
const focusOrder = [
|
|
106
|
+
...inline.map((slot) => slot.lead),
|
|
107
|
+
...footerSlots.map((slot) => slot.lead),
|
|
108
|
+
...document.order.excluded.map((exclusion) => exclusion.key),
|
|
109
|
+
];
|
|
110
|
+
// A REQUESTED KEY THIS PROJECTION NO LONGER DRAWS must not silently render no
|
|
111
|
+
// tab stop at all — that leaves the viewer unreachable by keyboard. The
|
|
112
|
+
// shared rule resolves it, and `reconcile` uses the same one, so the markup
|
|
113
|
+
// and `handle.state.focused` cannot disagree about where focus sits.
|
|
114
|
+
const withFocus = {
|
|
115
|
+
...options,
|
|
116
|
+
focused: resolveFocusKey(focusOrder, options.focused, options.selected),
|
|
117
|
+
};
|
|
118
|
+
const body = inline.length === 0
|
|
119
|
+
? emptyState('Nothing is in the order right now.')
|
|
120
|
+
: element('ol',
|
|
121
|
+
// A PLAIN LIST, not a listbox. Every row carries a deep-link chip, and
|
|
122
|
+
// an interactive descendant inside `role="option"` is a pattern
|
|
123
|
+
// violation that real screen readers and axe both flag — so selection
|
|
124
|
+
// is announced with `aria-current`, which any element may carry.
|
|
125
|
+
{ class: 'ig-list', 'aria-label': 'work order' }, inline.map((slot) => slotRow(document, slot, withFocus, true)));
|
|
126
|
+
const footerEntries = [
|
|
127
|
+
...footerSlots.map((slot) => slotRow(document, slot, withFocus, false)),
|
|
128
|
+
...document.order.excluded.map((exclusion) => excludedRow(document, exclusion.key, exclusion.canonical, withFocus)),
|
|
129
|
+
];
|
|
130
|
+
const footer = footerEntries.length === 0
|
|
131
|
+
? null
|
|
132
|
+
: element('section', { class: 'ig-footer' }, [
|
|
133
|
+
element('p', { class: 'ig-footer-title' }, [
|
|
134
|
+
'Held outside the order — claimed, parked, or never worked',
|
|
135
|
+
]),
|
|
136
|
+
element('ol', { class: 'ig-list', 'aria-label': 'held outside the order' }, footerEntries),
|
|
137
|
+
]);
|
|
138
|
+
const root = element('section', { class: 'ig-viewer ig-linear', 'data-projection': 'linear', 'aria-label': 'issue order' }, [legend(), body, footer, isolatedChip(document.isolated.length)]);
|
|
139
|
+
// The linear projection has one column, so nothing sits left or right of
|
|
140
|
+
// anything. An empty map is the honest answer; a self-referencing one would
|
|
141
|
+
// make a lateral key press look handled.
|
|
142
|
+
const lateral = new Map();
|
|
143
|
+
// No lateral axis here, so nothing is reachable sideways that the order does
|
|
144
|
+
// not already contain.
|
|
145
|
+
return {
|
|
146
|
+
projection: 'linear',
|
|
147
|
+
root,
|
|
148
|
+
focusOrder,
|
|
149
|
+
navigable: focusOrder,
|
|
150
|
+
lateral,
|
|
151
|
+
// A together unit is ONE row keyed by its lead, so its partners are drawn
|
|
152
|
+
// under that station and are absent from the order above.
|
|
153
|
+
stationOf: stations,
|
|
154
|
+
diagnostics: [],
|
|
155
|
+
};
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=linear.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/projections/linear.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,EAAoB,OAAO,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EACL,UAAU,EACV,UAAU,EACV,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,cAAc,EACd,SAAS,EACT,SAAS,EACT,OAAO,EACP,WAAW,EACX,UAAU,EACV,UAAU,GACX,MAAM,aAAa,CAAC;AACrB,OAAO,EAAsC,eAAe,EAAE,MAAM,aAAa,CAAC;AAClF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAShD;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,OAAO,CACd,QAA4B,EAC5B,IAAgB,EAChB,OAAqB,EACrB,QAAiB;IAEjB,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,IAAI,CAAC,IAAI,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,IAAI,CAAC;IAE9C,MAAM,IAAI,GAAG,QAAQ;QACnB,CAAC,CAAC,OAAO,CACL,MAAM,EACN,EAAE,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,MAAM,EAAE;QACjF,+DAA+D;QAC/D,qEAAqE;QACrE,aAAa;QACb,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAC/C;QACH,CAAC,CAAC,IAAI,CAAC;IAET,MAAM,QAAQ,GAAG;QACf,IAAI;QACJ,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAC1B,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC;QACnE,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC;QAC1C,UAAU,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;QAClC,cAAc,CAAC,IAAI,EAAE,UAAU,CAAC;QAChC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC;KAC5B,CAAC;IAEF,OAAO,OAAO,CACZ,IAAI,EACJ;QACE,KAAK,EAAE,SAAS;QAChB,aAAa,EAAE,IAAI,CAAC,IAAI;QACxB,WAAW,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACpC,cAAc,EAAE,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QAC3C,YAAY,EAAE,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC;QACvC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3B,EACD,QAAQ,CACT,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,8EAA8E;AAC9E,gFAAgF;AAChF,iFAAiF;AACjF,MAAM,UAAU,WAAW,CACzB,QAA4B,EAC5B,GAAW,EACX,SAAiB,EACjB,OAAqB;IAErB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,OAAO,OAAO,CACZ,IAAI,EACJ;QACE,KAAK,EAAE,SAAS;QAChB,aAAa,EAAE,GAAG;QAClB,WAAW,EAAE,MAAM;QACnB,cAAc,EAAE,OAAO,CAAC,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QAC3D,YAAY,EAAE,GAAG,KAAK,EAAE,KAAK,IAAI,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,SAAS,gBAAgB;QACzG,sEAAsE;QACtE,0EAA0E;QAC1E,qEAAqE;QACrE,wEAAwE;QACxE,QAAQ,EAAE,OAAO,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KAC3C,EACD;QACE,OAAO,CAAC,QAAQ,CAAC;QACjB,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;QAC7D,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC5C,UAAU,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,EAAE;YAC3D,GAAG,YAAY,CAAC,cAAc,CAAC,CAAC,KAAK,IAAI,SAAS,iBAAiB;SACpE,CAAC;KACH,CACF,CAAC;AACJ,CAAC;AAED,4FAA4F;AAC5F,SAAS,YAAY,CAAC,KAAa;IACjC,IAAI,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAC7B,OAAO,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE;QACzC,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,0CAA0C;KACtG,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,WAAW,CACzB,QAA4B,EAC5B,aAA2B,EAAE;IAE7B,wEAAwE;IACxE,uEAAuE;IACvE,yEAAyE;IACzE,yEAAyE;IACzE,yCAAyC;IACzC,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC1E,MAAM,WAAW,GAAG,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IAE9D,MAAM,UAAU,GAAG;QACjB,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QACvC,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;KAC7D,CAAC;IAEF,8EAA8E;IAC9E,wEAAwE;IACxE,4EAA4E;IAC5E,qEAAqE;IACrE,MAAM,SAAS,GAAiB;QAC9B,GAAG,OAAO;QACV,OAAO,EAAE,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC;KACxE,CAAC;IAEF,MAAM,IAAI,GACR,MAAM,CAAC,MAAM,KAAK,CAAC;QACjB,CAAC,CAAC,UAAU,CAAC,oCAAoC,CAAC;QAClD,CAAC,CAAC,OAAO,CACL,IAAI;QACJ,uEAAuE;QACvE,gEAAgE;QAChE,sEAAsE;QACtE,iEAAiE;QACjE,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,EAChD,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,CAAC,CAAC,CAC/D,CAAC;IAER,MAAM,aAAa,GAAG;QACpB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACvE,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,SAAS,EAAE,EAAE,CAC3C,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,CACrE;KACF,CAAC;IAEF,MAAM,MAAM,GACV,aAAa,CAAC,MAAM,KAAK,CAAC;QACxB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE;YACzC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE;gBACzC,2DAA2D;aAC5D,CAAC;YACF,OAAO,CACL,IAAI,EACJ,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,wBAAwB,EAAE,EAC5D,aAAa,CACd;SACF,CAAC,CAAC;IAET,MAAM,IAAI,GAAG,OAAO,CAClB,SAAS,EACT,EAAE,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,EAC1F,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CACjE,CAAC;IAEF,yEAAyE;IACzE,4EAA4E;IAC5E,yCAAyC;IACzC,MAAM,OAAO,GAA2C,IAAI,GAAG,EAAE,CAAC;IAElE,6EAA6E;IAC7E,uBAAuB;IACvB,OAAO;QACL,UAAU,EAAE,QAAQ;QACpB,IAAI;QACJ,UAAU;QACV,SAAS,EAAE,UAAU;QACrB,OAAO;QACP,0EAA0E;QAC1E,0DAA0D;QAC1D,SAAS,EAAE,QAAQ;QACnB,WAAW,EAAE,EAAE;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tree projection: `decomposed-from` provenance, drawn as a hierarchy.
|
|
3
|
+
*
|
|
4
|
+
* `decomposed-from` is the one field that describes a hierarchy and orders
|
|
5
|
+
* nothing — which is exactly why it deserves its own projection rather than a
|
|
6
|
+
* badge. "Where did this piece of work come from" is a different question from
|
|
7
|
+
* "what runs next", and answering it on the spine would imply an ordering the
|
|
8
|
+
* format explicitly denies.
|
|
9
|
+
*
|
|
10
|
+
* Nothing here assumes graph-theory literacy of the reader: it is a nested
|
|
11
|
+
* list, announced as one, with each level stating what it is.
|
|
12
|
+
*/
|
|
13
|
+
import type { NormalizedDocument } from '../document.ts';
|
|
14
|
+
import { type Scene } from '../scene.ts';
|
|
15
|
+
import type { SceneOptions } from './linear.ts';
|
|
16
|
+
export declare function treeScene(document: NormalizedDocument, options?: SceneOptions): Scene;
|
|
17
|
+
//# sourceMappingURL=tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/projections/tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAGzD,OAAO,EAA0B,KAAK,KAAK,EAAmB,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAyMhD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,GAAE,YAAiB,GAAG,KAAK,CA0CzF"}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The tree projection: `decomposed-from` provenance, drawn as a hierarchy.
|
|
3
|
+
*
|
|
4
|
+
* `decomposed-from` is the one field that describes a hierarchy and orders
|
|
5
|
+
* nothing — which is exactly why it deserves its own projection rather than a
|
|
6
|
+
* badge. "Where did this piece of work come from" is a different question from
|
|
7
|
+
* "what runs next", and answering it on the spine would imply an ordering the
|
|
8
|
+
* format explicitly denies.
|
|
9
|
+
*
|
|
10
|
+
* Nothing here assumes graph-theory literacy of the reader: it is a nested
|
|
11
|
+
* list, announced as one, with each level stating what it is.
|
|
12
|
+
*/
|
|
13
|
+
import { element } from "../element.js";
|
|
14
|
+
import { edgeBadges, emptyState, identity, legend, provenanceLine } from "../parts.js";
|
|
15
|
+
import { resolveFocusKey } from "../scene.js";
|
|
16
|
+
/**
|
|
17
|
+
* Build the forest.
|
|
18
|
+
*
|
|
19
|
+
* `decomposed-from` points from the derived issue TO its origin, so the parent
|
|
20
|
+
* of `A` is the `to` of `A`'s own edge. An issue with several declared origins
|
|
21
|
+
* keeps the first — the format's own single-cardinality rule — and the rest are
|
|
22
|
+
* diagnosed rather than silently merged.
|
|
23
|
+
*/
|
|
24
|
+
function buildForest(document) {
|
|
25
|
+
const diagnostics = [];
|
|
26
|
+
// NO CARDINALITY CHECK HERE ANY MORE. `normalizeDocument` applies the
|
|
27
|
+
// format's single-origin rule where the edges are read, so a second origin
|
|
28
|
+
// cannot reach this map — and a branch that can never fire, carrying a
|
|
29
|
+
// diagnostic nothing can trigger, reads as a guard while guarding nothing.
|
|
30
|
+
const parentOf = new Map();
|
|
31
|
+
for (const edge of document.edges) {
|
|
32
|
+
if (edge.field !== 'decomposed-from')
|
|
33
|
+
continue;
|
|
34
|
+
parentOf.set(edge.from, edge.to);
|
|
35
|
+
}
|
|
36
|
+
const childrenOf = new Map();
|
|
37
|
+
const roots = [];
|
|
38
|
+
for (const issue of document.issues) {
|
|
39
|
+
const parent = parentOf.get(issue.key);
|
|
40
|
+
if (parent === undefined) {
|
|
41
|
+
roots.push(issue.key);
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const existing = childrenOf.get(parent);
|
|
45
|
+
if (existing === undefined)
|
|
46
|
+
childrenOf.set(parent, [issue.key]);
|
|
47
|
+
else
|
|
48
|
+
existing.push(issue.key);
|
|
49
|
+
}
|
|
50
|
+
// `decomposed-from` cannot form a cycle by specification, but a document
|
|
51
|
+
// assembled by hand can. Detect it, promote the members to roots so every
|
|
52
|
+
// issue is still reachable, and say so — recursing would hang, and dropping
|
|
53
|
+
// them would lose issues the reader can see elsewhere.
|
|
54
|
+
const rooted = new Set(roots);
|
|
55
|
+
const settled = new Set(roots);
|
|
56
|
+
for (const issue of document.issues) {
|
|
57
|
+
if (settled.has(issue.key))
|
|
58
|
+
continue;
|
|
59
|
+
const path = [];
|
|
60
|
+
const walking = new Set();
|
|
61
|
+
let cursor = issue.key;
|
|
62
|
+
while (cursor !== undefined && !settled.has(cursor)) {
|
|
63
|
+
if (walking.has(cursor)) {
|
|
64
|
+
// PROMOTE THE CYCLE, NOT THE WALK THAT REACHED IT. `path` is everything
|
|
65
|
+
// this walk touched, so when an acyclic TAIL leads into a cycle — `A ->
|
|
66
|
+
// B` with `B -> C -> B` — it holds `A` as well. Promoting all of it
|
|
67
|
+
// rooted `A` and deleted its perfectly valid `A -> B` edge, so a
|
|
68
|
+
// malformed cycle two levels up silently erased a decomposition that
|
|
69
|
+
// was never part of it. Slicing at the repeated node is what makes the
|
|
70
|
+
// blast radius the cycle itself.
|
|
71
|
+
const cycle = path.slice(path.indexOf(cursor));
|
|
72
|
+
diagnostics.push(`decomposed-from cycle through ${cycle.join(' -> ')}; each member is drawn once as a root`);
|
|
73
|
+
for (const member of cycle) {
|
|
74
|
+
if (!rooted.has(member)) {
|
|
75
|
+
rooted.add(member);
|
|
76
|
+
roots.push(member);
|
|
77
|
+
}
|
|
78
|
+
const parent = parentOf.get(member);
|
|
79
|
+
if (parent !== undefined) {
|
|
80
|
+
const siblings = childrenOf.get(parent);
|
|
81
|
+
if (siblings !== undefined) {
|
|
82
|
+
childrenOf.set(parent, siblings.filter((sibling) => sibling !== member));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
walking.add(cursor);
|
|
89
|
+
path.push(cursor);
|
|
90
|
+
cursor = parentOf.get(cursor);
|
|
91
|
+
}
|
|
92
|
+
for (const member of path)
|
|
93
|
+
settled.add(member);
|
|
94
|
+
}
|
|
95
|
+
return { roots, childrenOf, diagnostics };
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Depth-first order — what `Tab` and the vertical keys walk.
|
|
99
|
+
*
|
|
100
|
+
* ITERATIVE, like the element build below and like the cluster walk. Nothing
|
|
101
|
+
* bounds how deep a host's `decomposed-from` chain runs, and `renderViewer`
|
|
102
|
+
* documents itself as TOTAL — a document that makes it throw falsifies that
|
|
103
|
+
* claim, whatever the depth was.
|
|
104
|
+
*/
|
|
105
|
+
function collectOrder(forest, roots) {
|
|
106
|
+
const order = [];
|
|
107
|
+
const stack = [...roots].reverse();
|
|
108
|
+
while (stack.length > 0) {
|
|
109
|
+
const key = stack.pop();
|
|
110
|
+
order.push(key);
|
|
111
|
+
const children = forest.childrenOf.get(key) ?? [];
|
|
112
|
+
for (let index = children.length - 1; index >= 0; index -= 1) {
|
|
113
|
+
stack.push(children[index]);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return order;
|
|
117
|
+
}
|
|
118
|
+
/** The row for one issue, without its children — those are attached below. */
|
|
119
|
+
function treeRow(document, key, level, hasChildren, options, focused) {
|
|
120
|
+
const issue = document.byKey.get(key);
|
|
121
|
+
const outOfSet = document.outOfSetOrigins.get(key);
|
|
122
|
+
const children = [];
|
|
123
|
+
const spec = element('li', {
|
|
124
|
+
class: 'ig-tree-item',
|
|
125
|
+
'data-ig-key': key,
|
|
126
|
+
// NESTED LISTS, NOT `role="tree"`. Every item carries a deep-link chip,
|
|
127
|
+
// and `role="treeitem"` forbids a focusable descendant — a violation axe
|
|
128
|
+
// reports as `nested-interactive` and real screen readers act on. A
|
|
129
|
+
// nested list is announced with its depth natively, needs no ARIA to say
|
|
130
|
+
// so, and leaves the link legal. `data-level` is for styling and tests.
|
|
131
|
+
'data-level': level,
|
|
132
|
+
'aria-current': options.selected === key ? 'true' : 'false',
|
|
133
|
+
'aria-label': `${issue?.title ?? key} — ${key}`,
|
|
134
|
+
tabindex: focused === key ? 0 : -1,
|
|
135
|
+
}, [
|
|
136
|
+
element('span', { class: 'ig-title' }, [issue?.title ?? key]),
|
|
137
|
+
issue === undefined ? null : identity(issue),
|
|
138
|
+
edgeBadges(document, [key]),
|
|
139
|
+
provenanceLine(issue?.provenance),
|
|
140
|
+
outOfSet === undefined
|
|
141
|
+
? null
|
|
142
|
+
: element('p', { class: 'ig-provenance' }, [
|
|
143
|
+
`decomposed from ${outOfSet}, which is outside this document`,
|
|
144
|
+
]),
|
|
145
|
+
// A SPEC LITERAL, not `element()`. That helper FILTERS its children, which
|
|
146
|
+
// copies the array — so the list this row hands back would no longer be
|
|
147
|
+
// the one the `<ul>` holds, and every child appended afterwards would
|
|
148
|
+
// land in a detached array. The whole iterative build turns on this
|
|
149
|
+
// array's identity surviving.
|
|
150
|
+
hasChildren ? { tag: 'ul', attrs: { class: 'ig-list' }, children } : null,
|
|
151
|
+
]);
|
|
152
|
+
return { spec, children };
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* Build the whole forest iteratively.
|
|
156
|
+
*
|
|
157
|
+
* The obvious shape is one recursive call per level, and it is the shape that
|
|
158
|
+
* exhausts the call stack on a chain nothing bounds. Each row is built with an
|
|
159
|
+
* EMPTY children array that the row's own `<ul>` already holds by reference, so
|
|
160
|
+
* a child appended later lands inside its parent without the parent's builder
|
|
161
|
+
* still being on the stack.
|
|
162
|
+
*/
|
|
163
|
+
function buildForestElements(document, forest, options, focused) {
|
|
164
|
+
const roots = [];
|
|
165
|
+
const pending = [];
|
|
166
|
+
for (let index = forest.roots.length - 1; index >= 0; index -= 1) {
|
|
167
|
+
pending.push({ key: forest.roots[index], level: 1, into: roots });
|
|
168
|
+
}
|
|
169
|
+
while (pending.length > 0) {
|
|
170
|
+
const { key, level, into } = pending.pop();
|
|
171
|
+
const children = forest.childrenOf.get(key) ?? [];
|
|
172
|
+
const row = treeRow(document, key, level, children.length > 0, options, focused);
|
|
173
|
+
into.push(row.spec);
|
|
174
|
+
for (let index = children.length - 1; index >= 0; index -= 1) {
|
|
175
|
+
pending.push({ key: children[index], level: level + 1, into: row.children });
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return roots;
|
|
179
|
+
}
|
|
180
|
+
export function treeScene(document, options = {}) {
|
|
181
|
+
const forest = buildForest(document);
|
|
182
|
+
const focusOrder = collectOrder(forest, forest.roots);
|
|
183
|
+
// A focus the caller supplied wins, but only when it is a key this projection
|
|
184
|
+
// actually draws; otherwise the roving tab stop would land nowhere and the
|
|
185
|
+
// whole tree would be unreachable by keyboard. The rule is shared with
|
|
186
|
+
// `reconcile` so the markup and the reported state cannot disagree.
|
|
187
|
+
const focused = resolveFocusKey(focusOrder, options.focused, options.selected);
|
|
188
|
+
const body = forest.roots.length === 0
|
|
189
|
+
? emptyState('This document declares no issues, so there is nothing to trace.')
|
|
190
|
+
: element('ul', { class: 'ig-tree ig-list', 'aria-label': 'decomposition' }, buildForestElements(document, forest, options, focused));
|
|
191
|
+
const root = element('section', { class: 'ig-viewer ig-tree-view', 'data-projection': 'tree', 'aria-label': 'issue decomposition' }, [legend(), body]);
|
|
192
|
+
// A tree's lateral axis is its nesting, which the vertical keys already walk,
|
|
193
|
+
// so there is nothing beside a node to move to.
|
|
194
|
+
const lateral = new Map();
|
|
195
|
+
return {
|
|
196
|
+
projection: 'tree',
|
|
197
|
+
root,
|
|
198
|
+
focusOrder,
|
|
199
|
+
navigable: focusOrder,
|
|
200
|
+
lateral,
|
|
201
|
+
// EMPTY, AND NOT AN OVERSIGHT. The tree draws every key its own row, so a
|
|
202
|
+
// together unit's partner is its own subject here and stands in for
|
|
203
|
+
// nobody. Publishing the linear and graph stations would make selecting a
|
|
204
|
+
// partner in the tree jump to its lead — a row the reader did not click.
|
|
205
|
+
stationOf: new Map(),
|
|
206
|
+
diagnostics: forest.diagnostics,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
//# sourceMappingURL=tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/projections/tree.ts"],"names":[],"mappings":"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"}
|
package/dist/render.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `renderViewer` — the pure entry point.
|
|
3
|
+
*
|
|
4
|
+
* Everything the package draws is reachable from here without a DOM: markup for
|
|
5
|
+
* server rendering, the stylesheet and the theme's custom properties, the
|
|
6
|
+
* scene's traversal order, and whatever the document forced it to drop. That is
|
|
7
|
+
* deliberate — a rendering package whose output can only be inspected by
|
|
8
|
+
* mounting it cannot be tested at the level its correctness actually lives at.
|
|
9
|
+
*/
|
|
10
|
+
import { type NormalizedDocument, type ViewerDocument } from './document.ts';
|
|
11
|
+
import { type GraphOptions } from './projections/graph.ts';
|
|
12
|
+
import type { Projection, Scene } from './scene.ts';
|
|
13
|
+
export interface RenderOptions extends GraphOptions {
|
|
14
|
+
readonly projection?: Projection | undefined;
|
|
15
|
+
/** The selector `themeCss` writes the custom properties onto. */
|
|
16
|
+
readonly themeSelector?: string | undefined;
|
|
17
|
+
}
|
|
18
|
+
export interface RenderResult {
|
|
19
|
+
readonly markup: string;
|
|
20
|
+
/** The stylesheet and the theme, in that order. Install both. */
|
|
21
|
+
readonly styles: string;
|
|
22
|
+
readonly scene: Scene;
|
|
23
|
+
/** Everything the document and the projection had to drop or refuse. */
|
|
24
|
+
readonly diagnostics: readonly string[];
|
|
25
|
+
}
|
|
26
|
+
/** Build the scene for one projection. Exported so `mount` reuses it exactly. */
|
|
27
|
+
export declare function sceneFor(document: NormalizedDocument, projection: Projection, options: GraphOptions): Scene;
|
|
28
|
+
/**
|
|
29
|
+
* Render a document.
|
|
30
|
+
*
|
|
31
|
+
* Pure and total: no global is read, nothing is fetched, and a malformed
|
|
32
|
+
* document produces diagnostics rather than a throw.
|
|
33
|
+
*/
|
|
34
|
+
export declare function renderViewer(input: ViewerDocument, options?: RenderOptions): RenderResult;
|
|
35
|
+
//# sourceMappingURL=render.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,cAAc,EAAqB,MAAM,eAAe,CAAC;AAEhG,OAAO,EAAE,KAAK,YAAY,EAAc,MAAM,wBAAwB,CAAC;AAGvE,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAIpD,MAAM,WAAW,aAAc,SAAQ,YAAY;IACjD,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IAC7C,iEAAiE;IACjE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,iEAAiE;IACjE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,wEAAwE;IACxE,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,iFAAiF;AACjF,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,kBAAkB,EAC5B,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE,YAAY,GACpB,KAAK,CASP;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,GAAE,aAAkB,GAAG,YAAY,CAW7F"}
|
package/dist/render.js
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `renderViewer` — the pure entry point.
|
|
3
|
+
*
|
|
4
|
+
* Everything the package draws is reachable from here without a DOM: markup for
|
|
5
|
+
* server rendering, the stylesheet and the theme's custom properties, the
|
|
6
|
+
* scene's traversal order, and whatever the document forced it to drop. That is
|
|
7
|
+
* deliberate — a rendering package whose output can only be inspected by
|
|
8
|
+
* mounting it cannot be tested at the level its correctness actually lives at.
|
|
9
|
+
*/
|
|
10
|
+
import { normalizeDocument } from "./document.js";
|
|
11
|
+
import { renderMarkup } from "./element.js";
|
|
12
|
+
import { graphScene } from "./projections/graph.js";
|
|
13
|
+
import { linearScene } from "./projections/linear.js";
|
|
14
|
+
import { treeScene } from "./projections/tree.js";
|
|
15
|
+
import { defaultTheme, themeCss } from "./theme.js";
|
|
16
|
+
import { viewerStylesheet } from "./styles.js";
|
|
17
|
+
/** Build the scene for one projection. Exported so `mount` reuses it exactly. */
|
|
18
|
+
export function sceneFor(document, projection, options) {
|
|
19
|
+
switch (projection) {
|
|
20
|
+
case 'linear':
|
|
21
|
+
return linearScene(document, options);
|
|
22
|
+
case 'graph':
|
|
23
|
+
return graphScene(document, options);
|
|
24
|
+
case 'tree':
|
|
25
|
+
return treeScene(document, options);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Render a document.
|
|
30
|
+
*
|
|
31
|
+
* Pure and total: no global is read, nothing is fetched, and a malformed
|
|
32
|
+
* document produces diagnostics rather than a throw.
|
|
33
|
+
*/
|
|
34
|
+
export function renderViewer(input, options = {}) {
|
|
35
|
+
const { document, diagnostics } = normalizeDocument(input);
|
|
36
|
+
const theme = options.theme ?? defaultTheme;
|
|
37
|
+
const scene = sceneFor(document, options.projection ?? 'linear', { ...options, theme });
|
|
38
|
+
return {
|
|
39
|
+
markup: renderMarkup(scene.root),
|
|
40
|
+
styles: `${viewerStylesheet}\n${themeCss(theme, options.themeSelector ?? ':root')}`,
|
|
41
|
+
scene,
|
|
42
|
+
diagnostics: [...diagnostics, ...scene.diagnostics],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=render.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAgD,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAqB,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,OAAO,EAAc,YAAY,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAiB/C,iFAAiF;AACjF,MAAM,UAAU,QAAQ,CACtB,QAA4B,EAC5B,UAAsB,EACtB,OAAqB;IAErB,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxC,KAAK,OAAO;YACV,OAAO,UAAU,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvC,KAAK,MAAM;YACT,OAAO,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,KAAqB,EAAE,UAAyB,EAAE;IAC7E,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAU,OAAO,CAAC,KAAK,IAAI,YAAY,CAAC;IACnD,MAAM,KAAK,GAAG,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,UAAU,IAAI,QAAQ,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAExF,OAAO;QACL,MAAM,EAAE,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC;QAChC,MAAM,EAAE,GAAG,gBAAgB,KAAK,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,EAAE;QACnF,KAAK;QACL,WAAW,EAAE,CAAC,GAAG,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC;KACpD,CAAC;AACJ,CAAC"}
|