@issuegraph/viewer 0.3.0 → 0.9.1
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/clusters.d.ts +116 -0
- package/dist/clusters.d.ts.map +1 -1
- package/dist/clusters.js +85 -2
- package/dist/clusters.js.map +1 -1
- package/dist/document.d.ts +228 -5
- package/dist/document.d.ts.map +1 -1
- package/dist/document.js +204 -3
- package/dist/document.js.map +1 -1
- package/dist/element.d.ts +11 -0
- package/dist/element.d.ts.map +1 -1
- package/dist/element.js.map +1 -1
- package/dist/index.d.ts +17 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +31 -4
- package/dist/index.js.map +1 -1
- package/dist/layout.d.ts +79 -50
- package/dist/layout.d.ts.map +1 -1
- package/dist/layout.js +371 -170
- package/dist/layout.js.map +1 -1
- package/dist/marks.d.ts +105 -0
- package/dist/marks.d.ts.map +1 -0
- package/dist/marks.js +430 -0
- package/dist/marks.js.map +1 -0
- package/dist/mount.d.ts +13 -0
- package/dist/mount.d.ts.map +1 -1
- package/dist/mount.js +69 -1
- package/dist/mount.js.map +1 -1
- package/dist/navigation.d.ts +14 -0
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +51 -0
- package/dist/navigation.js.map +1 -1
- package/dist/parts.d.ts +308 -2
- package/dist/parts.d.ts.map +1 -1
- package/dist/parts.js +845 -65
- package/dist/parts.js.map +1 -1
- package/dist/projections/graph.d.ts +25 -0
- package/dist/projections/graph.d.ts.map +1 -1
- package/dist/projections/graph.js +476 -335
- package/dist/projections/graph.js.map +1 -1
- package/dist/projections/linear.d.ts +135 -0
- package/dist/projections/linear.d.ts.map +1 -1
- package/dist/projections/linear.js +266 -31
- package/dist/projections/linear.js.map +1 -1
- package/dist/projections/tree.d.ts.map +1 -1
- package/dist/projections/tree.js +29 -3
- package/dist/projections/tree.js.map +1 -1
- package/dist/styles.d.ts +10 -1
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +1275 -132
- package/dist/styles.js.map +1 -1
- package/dist/theme.d.ts +5 -6
- package/dist/theme.d.ts.map +1 -1
- package/dist/theme.js +119 -7
- package/dist/theme.js.map +1 -1
- package/dist/vocabulary.d.ts +39 -0
- package/dist/vocabulary.d.ts.map +1 -1
- package/dist/vocabulary.js +27 -0
- package/dist/vocabulary.js.map +1 -1
- package/package.json +2 -2
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
* the work, earns no rank slot, and collapses into the footer with duplicates.
|
|
14
14
|
*/
|
|
15
15
|
import { element } from "../element.js";
|
|
16
|
-
import { caveatLines, edgeBadges, emptyState, footerLabels, holdLine, hostHeader, identity, legend, nowRows, provenanceLine, slotLabel, slotTitle, station, stationFill, stationsOf, atStations, } from "../parts.js";
|
|
16
|
+
import { adoptionNote, caveatBadges, caveatLines, conditionKind, conditionNotice, edgeBadgeList, edgeBadges, emptyState, evidenceBadge, footerLabels, holdLine, hostHeader, identity, legend, notReadyBadge, nowRows, priorityBadge, provenanceLine, slotLabel, slotTitle, station, statesItsOwnCause, stationFill, stationsOf, unitBlock, unitMark, atStations, } from "../parts.js";
|
|
17
17
|
import { resolveFocusKey } from "../scene.js";
|
|
18
18
|
import { treatmentFor } from "../vocabulary.js";
|
|
19
19
|
/**
|
|
@@ -24,41 +24,196 @@ import { treatmentFor } from "../vocabulary.js";
|
|
|
24
24
|
* the graph in any sense a rank could express, so giving it a position would
|
|
25
25
|
* claim work is queued that nothing can start.
|
|
26
26
|
*/
|
|
27
|
+
/**
|
|
28
|
+
* What the footer group calls itself.
|
|
29
|
+
*
|
|
30
|
+
* IT COVERS TWO FAMILIES, AND SAYING "held by the runner" COVERED ONE. §16a's
|
|
31
|
+
* own group lists a duplicate under that heading, but §16d's table is explicit
|
|
32
|
+
* that a duplicate is a different fact — "canonical elsewhere, never worked" —
|
|
33
|
+
* from a claim or a park. A document with one duplicate and no tracker hold
|
|
34
|
+
* therefore read "1 held by the runner" about an issue no runner has touched.
|
|
35
|
+
* Shared by both projections, so the two cannot word one group two ways.
|
|
36
|
+
*/
|
|
37
|
+
export function footerHeading(count, kinds) {
|
|
38
|
+
const reasons = [
|
|
39
|
+
kinds.runner ? 'held by the runner' : null,
|
|
40
|
+
kinds.neverWorked ? 'never worked' : null,
|
|
41
|
+
kinds.undrawn ? 'not drawn at this width' : null,
|
|
42
|
+
].filter((reason) => reason !== null);
|
|
43
|
+
const tail = reasons.length === 0
|
|
44
|
+
? ''
|
|
45
|
+
: ` — ${reasons.slice(0, -1).join(', ')}${reasons.length > 1 ? ', or ' : ''}${reasons[reasons.length - 1] ?? ''}`;
|
|
46
|
+
return `${String(count)} outside the order${tail}`;
|
|
47
|
+
}
|
|
27
48
|
export function isFooterSlot(slot) {
|
|
28
49
|
return slot.holds.some((hold) => hold.family === 'tracker');
|
|
29
50
|
}
|
|
30
|
-
|
|
51
|
+
/**
|
|
52
|
+
* One ranked row: the rank track, then everything else in one body column.
|
|
53
|
+
*
|
|
54
|
+
* TWO CHILDREN, WHICH IS THE FRAME'S GRID EXACTLY. The row that shipped was a
|
|
55
|
+
* four-column grid with more than four children, so the extras auto-placed into
|
|
56
|
+
* column one — the rank track — and a single relationship badge set that
|
|
57
|
+
* column's width for the whole list, pushing every title across to pay for it.
|
|
58
|
+
* A rank cell and a body cell cannot do that: there is no third column for a
|
|
59
|
+
* child to fall into, and the alignment grid the rows hang off is therefore a
|
|
60
|
+
* property of the markup rather than of remembering to place each new child.
|
|
61
|
+
*/
|
|
62
|
+
export function slotRow(document, slot, options, showRank) {
|
|
31
63
|
const held = !slot.ready;
|
|
32
64
|
const lead = document.byKey.get(slot.lead);
|
|
33
65
|
const selected = options.selected === slot.lead;
|
|
34
66
|
const focused = options.focused === slot.lead;
|
|
35
|
-
const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
67
|
+
const unit = slot.members.length > 1;
|
|
68
|
+
const expanded = options.expanded?.includes(slot.lead) ?? false;
|
|
69
|
+
const rankCell = element('div', { class: 'ig-rank-cell', 'aria-hidden': 'true' }, [
|
|
70
|
+
showRank
|
|
71
|
+
? element('span', { class: 'ig-rank', 'data-held': held ? 'true' : 'false' },
|
|
72
|
+
// The em dash is for a slot the host could not PLACE, which since
|
|
73
|
+
// `RULINGS.md` §1 is narrower than "held": a held slot whose blocker
|
|
74
|
+
// is inside the previewed order carries a number, and the `data-held`
|
|
75
|
+
// channel beside it is what says the work cannot start.
|
|
76
|
+
[slot.rank === null ? '—' : String(slot.rank)])
|
|
77
|
+
: null,
|
|
44
78
|
station(stationFill(slot)),
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
79
|
+
]);
|
|
80
|
+
// A UNIT'S HEAD IS ITS ENCLOSURE, not a joined title. Every other row keeps
|
|
81
|
+
// the frame's two-line pair: the title, and the identity 2px beneath it.
|
|
82
|
+
const badges = [
|
|
83
|
+
priorityBadge(lead?.provenance),
|
|
84
|
+
evidenceBadge(lead),
|
|
85
|
+
notReadyBadge(slot),
|
|
86
|
+
...caveatBadges(lead),
|
|
87
|
+
].filter((badge) => badge !== null);
|
|
88
|
+
// ONE BADGE ROW, FED BY FOUR SOURCES. §16a draws the tier, the evidence, the
|
|
89
|
+
// readiness and the relationships as one wrapping row of chips, in that
|
|
90
|
+
// order — the facts a reader scans for before they read a word of the
|
|
91
|
+
// sentence beneath.
|
|
92
|
+
const badgeRow = [...badges, ...edgeBadgeList(document, slot.members)];
|
|
93
|
+
// THE IDENTITY AND THE BADGES ARE ONE LINE, NOT TWO BLOCKS — which is what
|
|
94
|
+
// §17j's row anatomy asks for and what the old markup could not express.
|
|
95
|
+
//
|
|
96
|
+
// `17j` draws line 2 as a single mono run: `#512 · P0 · ⊘ #488`. The identity
|
|
97
|
+
// used to sit inside the head and the chips in a sibling block beneath it, so
|
|
98
|
+
// the two could never share a line however they were styled, and a row that
|
|
99
|
+
// should be 53px stacked to 5-11 lines. Nesting them in one `.ig-row-meta`
|
|
100
|
+
// makes the frame's line a property of the markup rather than of a CSS trick.
|
|
101
|
+
//
|
|
102
|
+
// IT SERVES BOTH DENSITIES, which is why this is a restructure and not a
|
|
103
|
+
// rail-only branch. §16a's row is the same sequence — title, identity, chips,
|
|
104
|
+
// then the provenance turnstile — and at that panel's width the line simply
|
|
105
|
+
// wraps and the provenance stays inline. `17j`: *"Same row, two densities."*
|
|
106
|
+
const meta = lead === undefined && badgeRow.length === 0
|
|
107
|
+
? null
|
|
108
|
+
: element('div', { class: 'ig-row-meta' }, [
|
|
109
|
+
lead === undefined ? null : identity(lead),
|
|
110
|
+
badgeRow.length === 0 ? null : element('div', { class: 'ig-badges' }, badgeRow),
|
|
111
|
+
]);
|
|
112
|
+
// A TOGETHER UNIT IS ONE ROW AND ONE RANK, IN BOTH DENSITIES — and the two
|
|
113
|
+
// densities draw it differently, so the markup carries both and the container
|
|
114
|
+
// query picks.
|
|
115
|
+
//
|
|
116
|
+
// `RULINGS.md` §1: *"A together-unit is one row, one rank, containing a box.
|
|
117
|
+
// Not two rows, not a box spanning ranks."* §16a's wide panel IS that box —
|
|
118
|
+
// the `⧉ ONE UNIT · 2 ISSUES` pill, the note, and a member list. But `17j`
|
|
119
|
+
// draws the same unit in the 390px rail as `⧉ 2` inline with an ORDINARY
|
|
120
|
+
// title and an ordinary meta line, at the same 53px as every other row,
|
|
121
|
+
// because a box of member cards cannot be 53px and the rail's row height is
|
|
122
|
+
// not negotiable.
|
|
123
|
+
//
|
|
124
|
+
// So a unit row now carries an ordinary head as well as its enclosure, and
|
|
125
|
+
// each density hides the other's. The lead's title is what the rail shows;
|
|
126
|
+
// `slotTitle` joins every member and stays the ACCESSIBLE name through
|
|
127
|
+
// `slotLabel`, so what a screen reader hears still names both issues while
|
|
128
|
+
// the 53px row shows the one it has room for.
|
|
129
|
+
const unitCount = unit
|
|
130
|
+
? element('span', { class: 'ig-unit-count' }, [`⧉ ${String(slot.members.length)}`])
|
|
131
|
+
: null;
|
|
132
|
+
const railTitle = unit ? (lead?.title ?? slot.lead) : slotTitle(document, slot);
|
|
133
|
+
const head = [
|
|
134
|
+
element('div', { class: 'ig-row-head' }, [
|
|
135
|
+
element('span', { class: 'ig-title' }, [unitCount, railTitle]),
|
|
136
|
+
meta,
|
|
137
|
+
]),
|
|
138
|
+
...(unit ? [unitMark(slot), unitBlock(document, slot)] : []),
|
|
139
|
+
];
|
|
140
|
+
const body = element('div', { class: 'ig-row-body' }, [
|
|
141
|
+
...head,
|
|
48
142
|
provenanceLine(lead?.provenance),
|
|
49
143
|
// THE LEAD'S CAVEATS, like the lead's provenance: a together unit is one
|
|
50
144
|
// row and one rank, and the host facts about that rank ride on its lead.
|
|
51
145
|
...caveatLines(lead),
|
|
52
146
|
...slot.holds.map(holdLine),
|
|
53
|
-
];
|
|
147
|
+
]);
|
|
54
148
|
return element('li', {
|
|
55
149
|
class: 'ig-slot',
|
|
56
150
|
'data-ig-key': slot.lead,
|
|
57
151
|
'data-held': held ? 'true' : 'false',
|
|
152
|
+
'data-unit': unit ? 'true' : 'false',
|
|
58
153
|
'aria-current': selected ? 'true' : 'false',
|
|
59
154
|
'aria-label': slotLabel(document, slot),
|
|
155
|
+
// ONLY WHEN THERE IS SOMETHING TO EXPAND. `aria-expanded` on a row with
|
|
156
|
+
// no provenance line would advertise a disclosure that cannot open, which
|
|
157
|
+
// is the "control that cannot complete its own action" class this package
|
|
158
|
+
// refuses elsewhere. A row whose host stated no provenance carries no
|
|
159
|
+
// attribute at all.
|
|
160
|
+
...(lead?.provenance === undefined
|
|
161
|
+
? {}
|
|
162
|
+
: { 'aria-expanded': expanded ? 'true' : 'false' }),
|
|
60
163
|
tabindex: focused ? 0 : -1,
|
|
61
|
-
},
|
|
164
|
+
}, [rankCell, body]);
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* One footer entry: a label chip, a title and an identity, on one line.
|
|
168
|
+
*
|
|
169
|
+
* THESE ARE NOT FACTS ABOUT THE WORK, which is the whole reason they are down
|
|
170
|
+
* here rather than in the order — so they get no rank, no station and no
|
|
171
|
+
* explanation block. Drawing them as full rows, which is what shipped, claimed
|
|
172
|
+
* the opposite: a reader saw a claimed issue laid out exactly like a queued
|
|
173
|
+
* one and had only the heading to tell them apart.
|
|
174
|
+
*/
|
|
175
|
+
export function footerRow(document, slot, options) {
|
|
176
|
+
const lead = document.byKey.get(slot.lead);
|
|
177
|
+
// THE REASON RIDES THE NAME. A footer entry is one line — a chip, a title and
|
|
178
|
+
// an identity — because it is not a fact about the work; but the host still
|
|
179
|
+
// said WHY, and dropping the sentence entirely would lose it from the panel.
|
|
180
|
+
// The same channel the graph's cards use for the same reason: sighted readers
|
|
181
|
+
// hover, screen readers hear it, and the one-line row is untouched.
|
|
182
|
+
const because = slot.holds.map((hold) => hold.reason).join(' · ');
|
|
183
|
+
// NARROWED THROUGH THE FAMILY, because the union is what carries the label:
|
|
184
|
+
// a graph hold has none to read, and reaching for one on the union is a
|
|
185
|
+
// compile error rather than a silent undefined.
|
|
186
|
+
const labelled = slot.holds.find((hold) => hold.family === 'tracker' && hold.label !== undefined && hold.label !== '');
|
|
187
|
+
return element('li', {
|
|
188
|
+
class: 'ig-footer-row',
|
|
189
|
+
'data-ig-key': slot.lead,
|
|
190
|
+
'aria-current': options.selected === slot.lead ? 'true' : 'false',
|
|
191
|
+
'aria-label': because === '' ? slotLabel(document, slot) : `${slotLabel(document, slot)} — ${because}`,
|
|
192
|
+
title: because === '' ? null : because,
|
|
193
|
+
tabindex: options.focused === slot.lead ? 0 : -1,
|
|
194
|
+
}, [
|
|
195
|
+
labelled === undefined
|
|
196
|
+
? null
|
|
197
|
+
: element('span', { class: 'ig-badge', 'data-hold': labelled.label }, [labelled.label]),
|
|
198
|
+
element('span', { class: 'ig-title' }, [slotTitle(document, slot)]),
|
|
199
|
+
lead === undefined ? null : identity(lead),
|
|
200
|
+
footerRelationships(document, slot.members),
|
|
201
|
+
]);
|
|
202
|
+
}
|
|
203
|
+
/**
|
|
204
|
+
* The relationships of the keys a footer row stands for.
|
|
205
|
+
*
|
|
206
|
+
* EVERY FOOTER SHAPE CARRIES THEM, and that is the rule rather than three
|
|
207
|
+
* places to remember. A footer row is the ONLY mark either projection makes for
|
|
208
|
+
* its issue — the list draws no arc at all, and the graph draws no node for
|
|
209
|
+
* anything down here — so an edge whose ends are both in this group had nothing
|
|
210
|
+
* left to represent it and disappeared entirely while both issues stayed
|
|
211
|
+
* visible. That is a picture that lies about the document rather than one that
|
|
212
|
+
* shows less of it, and it arrived once per row shape: the aside row, then this
|
|
213
|
+
* one. One helper, called by all three.
|
|
214
|
+
*/
|
|
215
|
+
function footerRelationships(document, keys) {
|
|
216
|
+
return edgeBadges(document, keys);
|
|
62
217
|
}
|
|
63
218
|
// EXPORTED FOR THE GRAPH'S REFUSAL, which is the only other place an exclusion
|
|
64
219
|
// has to be drawn: when the graph refuses, its rail is the whole order UI and
|
|
@@ -66,10 +221,13 @@ function slotRow(document, slot, options, showRank) {
|
|
|
66
221
|
// false. One row shape for both projections rather than a second that can drift.
|
|
67
222
|
export function excludedRow(document, key, canonical, options) {
|
|
68
223
|
const issue = document.byKey.get(key);
|
|
224
|
+
// THE SAME ONE-LINE SHAPE THE OTHER FOOTER ENTRIES TAKE. A duplicate is the
|
|
225
|
+
// clearest case of "not a fact about the work": it is never worked at all, so
|
|
226
|
+
// giving it a station, a badge row and a hold paragraph drew it as heavier
|
|
227
|
+
// than the ranked rows it is excluded from.
|
|
69
228
|
return element('li', {
|
|
70
|
-
class: 'ig-
|
|
229
|
+
class: 'ig-footer-row',
|
|
71
230
|
'data-ig-key': key,
|
|
72
|
-
'data-held': 'true',
|
|
73
231
|
'aria-current': options.selected === key ? 'true' : 'false',
|
|
74
232
|
'aria-label': `${issue?.title ?? key} — ${treatmentFor('duplicate-of').label} ${canonical}, never worked`,
|
|
75
233
|
// A HARDCODED -1 HERE MEANT THE VIEWER LOST ITS TAB STOP ENTIRELY. An
|
|
@@ -78,13 +236,37 @@ export function excludedRow(document, key, canonical, options) {
|
|
|
78
236
|
// viewer at all. Every row that can hold focus renders the roving stop.
|
|
79
237
|
tabindex: options.focused === key ? 0 : -1,
|
|
80
238
|
}, [
|
|
81
|
-
|
|
239
|
+
element('span', { class: 'ig-badge', 'data-edge': 'duplicate-of' }, ['duplicate']),
|
|
82
240
|
element('span', { class: 'ig-title' }, [issue?.title ?? key]),
|
|
83
241
|
issue === undefined ? null : identity(issue),
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
242
|
+
element('span', { class: 'ig-id' }, [`→ ${canonical}`]),
|
|
243
|
+
footerRelationships(document, [key]),
|
|
244
|
+
]);
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* A footer entry that is neither a slot nor an exclusion: an ordinary issue the
|
|
248
|
+
* canvas had no column for.
|
|
249
|
+
*
|
|
250
|
+
* ONLY THE COMPACT GRAPH PRODUCES ONE. It draws no gutters, so an off-order
|
|
251
|
+
* relationship endpoint — an open blocker, a closed split origin — has nowhere
|
|
252
|
+
* on the picture to be, and vanishing is not an option: a smaller view must not
|
|
253
|
+
* be a lying one. It takes the same one-line shape as every other footer entry,
|
|
254
|
+
* because the reason it is down here is the same one — it is not a fact about
|
|
255
|
+
* the order.
|
|
256
|
+
*/
|
|
257
|
+
export function asideRow(document, key, options) {
|
|
258
|
+
const issue = document.byKey.get(key);
|
|
259
|
+
return element('li', {
|
|
260
|
+
class: 'ig-footer-row',
|
|
261
|
+
'data-ig-key': key,
|
|
262
|
+
'aria-current': options.selected === key ? 'true' : 'false',
|
|
263
|
+
'aria-label': `${issue?.title ?? key} — ${key} — outside the order`,
|
|
264
|
+
tabindex: options.focused === key ? 0 : -1,
|
|
265
|
+
}, [
|
|
266
|
+
element('span', { class: 'ig-badge' }, ['outside the order']),
|
|
267
|
+
element('span', { class: 'ig-title' }, [issue?.title ?? key]),
|
|
268
|
+
issue === undefined ? null : identity(issue),
|
|
269
|
+
footerRelationships(document, [key]),
|
|
88
270
|
]);
|
|
89
271
|
}
|
|
90
272
|
/** The one count chip isolated issues collapse into (they carry no information as rows). */
|
|
@@ -119,7 +301,15 @@ export function linearScene(document, rawOptions = {}) {
|
|
|
119
301
|
focused: resolveFocusKey(focusOrder, options.focused, options.selected),
|
|
120
302
|
};
|
|
121
303
|
const body = inline.length === 0
|
|
122
|
-
?
|
|
304
|
+
? // A CONDITION IS THE PANEL'S ONE CAUSE STATEMENT. This sentence is
|
|
305
|
+
// DERIVED — it is what an empty slot list looks like from in here — and
|
|
306
|
+
// the host's notice is RECORDED, so when both are drawn the panel says
|
|
307
|
+
// two things about one state and the derived one can be flatly wrong
|
|
308
|
+
// ("nothing is in the order" beside "your import is still running").
|
|
309
|
+
// The recorded fact wins and the derivation is not drawn.
|
|
310
|
+
statesItsOwnCause(document)
|
|
311
|
+
? null
|
|
312
|
+
: emptyState('Nothing is in the order right now.')
|
|
123
313
|
: element('ol',
|
|
124
314
|
// A PLAIN LIST, not a listbox. Every row carries a deep-link chip, and
|
|
125
315
|
// an interactive descendant inside `role="option"` is a pattern
|
|
@@ -127,25 +317,70 @@ export function linearScene(document, rawOptions = {}) {
|
|
|
127
317
|
// is announced with `aria-current`, which any element may carry.
|
|
128
318
|
{ class: 'ig-list', 'aria-label': 'work order' }, inline.map((slot) => slotRow(document, slot, withFocus, true)));
|
|
129
319
|
const footerEntries = [
|
|
130
|
-
...footerSlots.map((slot) =>
|
|
320
|
+
...footerSlots.map((slot) => footerRow(document, slot, withFocus)),
|
|
131
321
|
...document.order.excluded.map((exclusion) => excludedRow(document, exclusion.key, exclusion.canonical, withFocus)),
|
|
132
322
|
];
|
|
133
|
-
// The runner's own words, when the host supplied them,
|
|
134
|
-
//
|
|
323
|
+
// The runner's own words, when the host supplied them, to the RIGHT of the
|
|
324
|
+
// count — which is where §16a puts them, and it is the difference between a
|
|
325
|
+
// heading that says what this group is and one that also has to list the
|
|
326
|
+
// reasons inside it.
|
|
135
327
|
const labels = footerLabels(footerSlots);
|
|
136
328
|
const footer = footerEntries.length === 0
|
|
137
329
|
? null
|
|
138
330
|
: element('section', { class: 'ig-footer' }, [
|
|
139
|
-
element('
|
|
140
|
-
|
|
331
|
+
element('div', { class: 'ig-footer-head' }, [
|
|
332
|
+
element('p', { class: 'ig-footer-title' }, [
|
|
333
|
+
footerHeading(footerEntries.length, {
|
|
334
|
+
runner: footerSlots.length > 0,
|
|
335
|
+
neverWorked: document.order.excluded.length > 0,
|
|
336
|
+
// The list draws every column it has, so it never withholds one.
|
|
337
|
+
undrawn: false,
|
|
338
|
+
}),
|
|
339
|
+
]),
|
|
340
|
+
labels === '' ? null : element('span', { class: 'ig-footer-labels' }, [labels]),
|
|
141
341
|
]),
|
|
142
342
|
element('ol', { class: 'ig-list', 'aria-label': 'held outside the order' }, footerEntries),
|
|
143
343
|
]);
|
|
144
|
-
const root = element('section', {
|
|
344
|
+
const root = element('section', {
|
|
345
|
+
class: 'ig-viewer ig-linear',
|
|
346
|
+
'data-projection': 'linear',
|
|
347
|
+
// §17j'S DENSITY, WHERE THE HOST TOOK IT OVER. Absent is the whole
|
|
348
|
+
// default: the stylesheet keys the density block off this attribute's
|
|
349
|
+
// PRESENCE, so a viewer that renders none is decided by the container
|
|
350
|
+
// exactly as §17j asks. See `SceneOptions.density`.
|
|
351
|
+
'data-density': options.density,
|
|
352
|
+
'data-ig-condition': conditionKind(document, options.chrome),
|
|
353
|
+
'aria-label': 'issue order',
|
|
354
|
+
},
|
|
145
355
|
// The host facts first: what the runner is doing and how fresh the mirror
|
|
146
356
|
// is frame the order beneath them. Both are `null` for a host that stated
|
|
147
357
|
// nothing, and the section then begins at the legend exactly as before.
|
|
148
|
-
|
|
358
|
+
// THE LEGEND IS A FOOTER BAR, WHERE §16b PUTS IT, and it comes last. Above
|
|
359
|
+
// the rows it was the first thing a reader met — a table of five symbols
|
|
360
|
+
// before a single row of the thing they came for — and §16a draws no
|
|
361
|
+
// legend at that position at all.
|
|
362
|
+
[
|
|
363
|
+
options.chrome === false
|
|
364
|
+
? null
|
|
365
|
+
: hostHeader(document, { projection: 'linear', switchable: options.switchable === true }),
|
|
366
|
+
nowRows(document),
|
|
367
|
+
// BELOW THE NOW ROW, ABOVE THE ORDER. §16a puts what the runner is doing
|
|
368
|
+
// directly under the header as the first thing a reader meets, and under
|
|
369
|
+
// an `error` or `importing` notice the running job is exactly the
|
|
370
|
+
// reassurance the notice points at — demoting it would contradict the
|
|
371
|
+
// sentence beside it. Here the notice sits over the order it qualifies.
|
|
372
|
+
//
|
|
373
|
+
// CHROME, so it carries the same flag the header does — the rule lives in
|
|
374
|
+
// `conditionNotice` rather than being restated at each of the three roots.
|
|
375
|
+
conditionNotice(document, options.chrome),
|
|
376
|
+
body,
|
|
377
|
+
footer,
|
|
378
|
+
isolatedChip(document.isolated.length),
|
|
379
|
+
legend(),
|
|
380
|
+
// LAST, because §16h calls it the panel FOOTER and the legend is a footer
|
|
381
|
+
// bar. Above it, the line was not the last thing on the panel.
|
|
382
|
+
adoptionNote(document, options.chrome),
|
|
383
|
+
]);
|
|
149
384
|
// The linear projection has one column, so nothing sits left or right of
|
|
150
385
|
// anything. An empty map is the honest answer; a self-referencing one would
|
|
151
386
|
// make a lateral key press look handled.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/projections/linear.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../src/projections/linear.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +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;
|
|
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;AAezD,OAAO,EAA0B,KAAK,KAAK,EAAmB,MAAM,aAAa,CAAC;AAClF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA4MhD,wBAAgB,SAAS,CAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,GAAE,YAAiB,GAAG,KAAK,CAmEzF"}
|
package/dist/projections/tree.js
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* list, announced as one, with each level stating what it is.
|
|
12
12
|
*/
|
|
13
13
|
import { element } from "../element.js";
|
|
14
|
-
import { caveatLines, edgeBadges, emptyState, hostHeader, identity, legend, provenanceLine } from "../parts.js";
|
|
14
|
+
import { adoptionNote, caveatLines, conditionKind, conditionNotice, edgeBadges, emptyState, hostHeader, identity, legend, provenanceLine, statesItsOwnCause, } from "../parts.js";
|
|
15
15
|
import { resolveFocusKey } from "../scene.js";
|
|
16
16
|
/**
|
|
17
17
|
* Build the forest.
|
|
@@ -189,9 +189,35 @@ export function treeScene(document, options = {}) {
|
|
|
189
189
|
// `reconcile` so the markup and the reported state cannot disagree.
|
|
190
190
|
const focused = resolveFocusKey(focusOrder, options.focused, options.selected);
|
|
191
191
|
const body = forest.roots.length === 0
|
|
192
|
-
?
|
|
192
|
+
? // THE HOST'S NOTICE IS THE PANEL'S ONE CAUSE STATEMENT — see `linear.ts`.
|
|
193
|
+
statesItsOwnCause(document)
|
|
194
|
+
? null
|
|
195
|
+
: emptyState('This document declares no issues, so there is nothing to trace.')
|
|
193
196
|
: element('ul', { class: 'ig-tree ig-list', 'aria-label': 'decomposition' }, buildForestElements(document, forest, options, focused));
|
|
194
|
-
const root = element('section', {
|
|
197
|
+
const root = element('section', {
|
|
198
|
+
class: 'ig-viewer ig-tree-view',
|
|
199
|
+
'data-projection': 'tree',
|
|
200
|
+
// See `SceneOptions.density`; stamped on all three roots so a
|
|
201
|
+
// projection toggle cannot drop the host's decision.
|
|
202
|
+
'data-density': options.density,
|
|
203
|
+
'data-ig-condition': conditionKind(document, options.chrome),
|
|
204
|
+
'aria-label': 'issue decomposition',
|
|
205
|
+
},
|
|
206
|
+
// The legend last, as a footer bar, the way §16b draws it — one placement
|
|
207
|
+
// for all three projections, so a reader meets the grammar in one place.
|
|
208
|
+
[
|
|
209
|
+
options.chrome === false
|
|
210
|
+
? null
|
|
211
|
+
: hostHeader(document, { projection: 'tree', switchable: options.switchable === true }),
|
|
212
|
+
// This projection draws no NOW row, so the notice follows the header
|
|
213
|
+
// directly — the same position relative to the order it qualifies.
|
|
214
|
+
conditionNotice(document, options.chrome),
|
|
215
|
+
body,
|
|
216
|
+
legend(),
|
|
217
|
+
// LAST, because §16h calls it the panel FOOTER and the legend is a footer
|
|
218
|
+
// bar. Above it, the line was not the last thing on the panel.
|
|
219
|
+
adoptionNote(document, options.chrome),
|
|
220
|
+
]);
|
|
195
221
|
// A tree's lateral axis is its nesting, which the vertical keys already walk,
|
|
196
222
|
// so there is nothing beside a node to move to.
|
|
197
223
|
const lateral = new Map();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/projections/tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAoC,OAAO,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/projections/tree.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAoC,OAAO,EAAE,MAAM,eAAe,CAAC;AAC1E,OAAO,EACL,YAAY,EACZ,WAAW,EACX,aAAa,EACb,eAAe,EACf,UAAU,EACV,UAAU,EACV,UAAU,EACV,QAAQ,EACR,MAAM,EACN,cAAc,EACd,iBAAiB,GAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAsC,eAAe,EAAE,MAAM,aAAa,CAAC;AASlF;;;;;;;GAOG;AACH,SAAS,WAAW,CAAC,QAA4B;IAC/C,MAAM,WAAW,GAAa,EAAE,CAAC;IACjC,sEAAsE;IACtE,2EAA2E;IAC3E,uEAAuE;IACvE,2EAA2E;IAC3E,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC3C,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;QAClC,IAAI,IAAI,CAAC,KAAK,KAAK,iBAAiB;YAAE,SAAS;QAC/C,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,EAAoB,CAAC;IAC/C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACtB,SAAS;QACX,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,QAAQ,KAAK,SAAS;YAAE,UAAU,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;;YAC3D,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAChC,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,4EAA4E;IAC5E,uDAAuD;IACvD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC;YAAE,SAAS;QACrC,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,IAAI,MAAM,GAAuB,KAAK,CAAC,GAAG,CAAC;QAC3C,OAAO,MAAM,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YACpD,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;gBACxB,wEAAwE;gBACxE,wEAAwE;gBACxE,oEAAoE;gBACpE,iEAAiE;gBACjE,qEAAqE;gBACrE,uEAAuE;gBACvE,iCAAiC;gBACjC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;gBAC/C,WAAW,CAAC,IAAI,CACd,iCAAiC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,uCAAuC,CAC3F,CAAC;gBACF,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;oBAC3B,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;wBACxB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACnB,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACrB,CAAC;oBACD,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBACpC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;wBACzB,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;wBACxC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;4BAC3B,UAAU,CAAC,GAAG,CACZ,MAAM,EACN,QAAQ,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,MAAM,CAAC,CACjD,CAAC;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;gBACD,MAAM;YACR,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClB,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;QACD,KAAK,MAAM,MAAM,IAAI,IAAI;YAAE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,CAAC;AAC5C,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,YAAY,CAAC,MAAc,EAAE,KAAwB;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC;IACnC,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,EAAY,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAClD,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC7D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAW,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8EAA8E;AAC9E,SAAS,OAAO,CACd,QAA4B,EAC5B,GAAW,EACX,KAAa,EACb,WAAoB,EACpB,OAAqB,EACrB,OAAsB;IAEtB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,QAAQ,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACnD,MAAM,QAAQ,GAAgB,EAAE,CAAC;IAEjC,MAAM,IAAI,GAAG,OAAO,CAClB,IAAI,EACJ;QACE,KAAK,EAAE,cAAc;QACrB,aAAa,EAAE,GAAG;QAClB,wEAAwE;QACxE,yEAAyE;QACzE,oEAAoE;QACpE,yEAAyE;QACzE,wEAAwE;QACxE,YAAY,EAAE,KAAK;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,GAAG,EAAE;QAC/C,QAAQ,EAAE,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;KACnC,EACD;QACE,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,cAAc,CAAC,KAAK,EAAE,UAAU,CAAC;QACjC,0EAA0E;QAC1E,wEAAwE;QACxE,GAAG,WAAW,CAAC,KAAK,CAAC;QACrB,QAAQ,KAAK,SAAS;YACpB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE;gBACvC,mBAAmB,QAAQ,kCAAkC;aAC9D,CAAC;QACN,2EAA2E;QAC3E,wEAAwE;QACxE,sEAAsE;QACtE,oEAAoE;QACpE,8BAA8B;QAC9B,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;KAC1E,CACF,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;AAC5B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAC1B,QAA4B,EAC5B,MAAc,EACd,OAAqB,EACrB,OAAsB;IAEtB,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,MAAM,OAAO,GAAwD,EAAE,CAAC;IACxE,KAAK,IAAI,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAW,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,GAAG,EAIvC,CAAC;QACF,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAClD,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;QACjF,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,KAAK,IAAI,KAAK,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,CAAC,KAAK,CAAW,EAAE,KAAK,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,QAA4B,EAAE,UAAwB,EAAE;IAChF,MAAM,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtD,8EAA8E;IAC9E,2EAA2E;IAC3E,uEAAuE;IACvE,oEAAoE;IACpE,MAAM,OAAO,GAAG,eAAe,CAAC,UAAU,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE/E,MAAM,IAAI,GACR,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACvB,CAAC,CAAC,0EAA0E;YAC1E,iBAAiB,CAAC,QAAQ,CAAC;gBAC3B,CAAC,CAAC,IAAI;gBACN,CAAC,CAAC,UAAU,CAAC,iEAAiE,CAAC;QACjF,CAAC,CAAC,OAAO,CACL,IAAI,EACJ,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,EAAE,EAC3D,mBAAmB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CACxD,CAAC;IAER,MAAM,IAAI,GAAG,OAAO,CAClB,SAAS,EACT;QACE,KAAK,EAAE,wBAAwB;QAC/B,iBAAiB,EAAE,MAAM;QACzB,8DAA8D;QAC9D,qDAAqD;QACrD,cAAc,EAAE,OAAO,CAAC,OAAO;QAC/B,mBAAmB,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC;QAC5D,YAAY,EAAE,qBAAqB;KACpC;IACD,0EAA0E;IAC1E,yEAAyE;IACzE;QACE,OAAO,CAAC,MAAM,KAAK,KAAK;YACtB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,UAAU,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,KAAK,IAAI,EAAE,CAAC;QACzF,qEAAqE;QACrE,mEAAmE;QACnE,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC;QACzC,IAAI;QACJ,MAAM,EAAE;QACR,0EAA0E;QAC1E,+DAA+D;QAC/D,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC;KACvC,CACF,CAAC;IAEF,8EAA8E;IAC9E,gDAAgD;IAChD,MAAM,OAAO,GAA2C,IAAI,GAAG,EAAE,CAAC;IAElE,OAAO;QACL,UAAU,EAAE,MAAM;QAClB,IAAI;QACJ,UAAU;QACV,SAAS,EAAE,UAAU;QACrB,OAAO;QACP,0EAA0E;QAC1E,oEAAoE;QACpE,0EAA0E;QAC1E,yEAAyE;QACzE,SAAS,EAAE,IAAI,GAAG,EAAE;QACpB,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC;AACJ,CAAC"}
|
package/dist/styles.d.ts
CHANGED
|
@@ -12,6 +12,15 @@
|
|
|
12
12
|
* loaded by a bare Node runtime (`ERR_UNKNOWN_FILE_EXTENSION`), and this
|
|
13
13
|
* package's floor is checked by a smoke test that imports the built entry. A
|
|
14
14
|
* string also means no consumer needs a bundler to use it.
|
|
15
|
+
*
|
|
16
|
+
* THE VIEWER DRAWS THE PANEL, and that is a decision this file records rather
|
|
17
|
+
* than a detail. §16a is one bordered surface with a header bar, hairline-
|
|
18
|
+
* separated rows and a footer group on a second ground; §9097's done-when read
|
|
19
|
+
* "§16 IS that test — the viewer with no editor attached", so the thing a host
|
|
20
|
+
* mounts with no chrome of its own has to BE the frame. Rows therefore carry no
|
|
21
|
+
* border and no radius of their own — they are separated by the panel's own
|
|
22
|
+
* hairlines — and a host that wants the panel suppressed overrides the four
|
|
23
|
+
* properties on `.ig-viewer`.
|
|
15
24
|
*/
|
|
16
|
-
export declare const viewerStylesheet = "\n.ig-viewer {\n background: var(--ig-bg);\n color: var(--ig-text-body);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size);\n line-height: var(--ig-line-height);\n position: relative;\n}\n\n.ig-viewer *,\n.ig-viewer *::before,\n.ig-viewer *::after {\n box-sizing: border-box;\n}\n\n.ig-viewer :focus-visible {\n outline: var(--ig-focus-ring) solid var(--ig-focus);\n outline-offset: var(--ig-space-tight);\n}\n\n.ig-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n/* \u2500\u2500 the spine \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.ig-slot {\n align-items: center;\n background: var(--ig-surface);\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n column-gap: var(--ig-space);\n display: grid;\n grid-template-columns: auto auto 1fr auto;\n margin-bottom: var(--ig-space-tight);\n min-height: var(--ig-row-height);\n padding: var(--ig-space-tight) var(--ig-space);\n}\n\n.ig-slot[data-held='true'] {\n background: var(--ig-surface-2);\n border-style: dashed;\n}\n\n.ig-slot[aria-current='true'] {\n border-color: var(--ig-accent);\n}\n\n/* A CANVAS-OWNED NODE IS SELECTABLE TOO, and only the rail rows had a selected\n look \u2014 so clicking a gutter, excluded or tracker-held node set aria-current on\n the group and changed nothing a reader could see. A pointer does not normally\n raise :focus-visible either, so those selections had no visible state at all\n on the channel most likely to make them. Same accent the rail uses, so one\n selection reads the same whichever surface drew it. */\n.ig-node-group[aria-current='true'] .ig-node {\n stroke: var(--ig-accent);\n stroke-width: calc(var(--ig-stroke) * 2);\n}\n\n.ig-rank {\n color: var(--ig-text);\n font-family: var(--ig-font-mono);\n font-variant-numeric: tabular-nums;\n min-width: calc(var(--ig-char-width) * 4);\n text-align: right;\n}\n\n.ig-rank[data-held='true'] {\n color: var(--ig-text-muted);\n}\n\n/* \u2500\u2500 readiness stations \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.ig-station {\n block-size: var(--ig-station-size);\n border: var(--ig-stroke) solid var(--ig-station-held);\n border-radius: 50%;\n box-shadow: 0 0 0 var(--ig-station-halo) var(--ig-bg);\n display: inline-block;\n inline-size: var(--ig-station-size);\n}\n\n.ig-station[data-fill='filled'] {\n background: var(--ig-station-ready);\n border-color: var(--ig-station-ready);\n}\n\n.ig-station[data-fill='hollow'] {\n background: transparent;\n border-color: var(--ig-station-pending);\n}\n\n.ig-station[data-fill='dashed'] {\n background: transparent;\n border-style: dashed;\n border-color: var(--ig-station-held);\n}\n\n/* \u2500\u2500 titles, identity, provenance \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.ig-title {\n color: var(--ig-text);\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.ig-id,\n.ig-count {\n color: var(--ig-text-muted);\n font-family: var(--ig-font-mono);\n font-variant-numeric: tabular-nums;\n}\n\n.ig-link {\n color: var(--ig-accent);\n text-decoration: none;\n}\n\n.ig-link:hover {\n text-decoration: underline;\n}\n\n.ig-provenance,\n.ig-hold,\n.ig-caveat {\n color: var(--ig-text-muted);\n font-size: var(--ig-font-size-small);\n grid-column: 3 / -1;\n}\n\n.ig-strike {\n text-decoration: line-through;\n}\n\n/* \u2500\u2500 edge badges \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* SPANNED FROM THE TITLE COLUMN, LIKE EVERY OTHER FULL-WIDTH ROW MEMBER. Left\n unplaced this was the fifth child of a four-column grid, so it auto-placed\n into column ONE of a second row \u2014 the rank track, an auto-sized column that\n takes the width of its widest item. One relationship badge then set the width\n of the rank column for the whole row, pushing the station and title across\n and squeezing the title to pay for it. Badges belong with the row's other\n metadata, which is what 3 / -1 already means here for provenance and holds.\n (No backticks in this file: the stylesheet is a template literal.) */\n.ig-badges {\n display: flex;\n flex-wrap: wrap;\n gap: var(--ig-space-tight);\n grid-column: 3 / -1;\n}\n\n.ig-badge {\n align-items: center;\n /* Not currentColor any more: the label and the border now carry DIFFERENT\n colours deliberately \u2014 see below. Left as currentColor the border would\n follow the text to --ig-text and the hue channel would vanish from the\n badge entirely, which is the opposite of the fix. */\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n color: var(--ig-text);\n display: inline-flex;\n font-size: var(--ig-font-size-small);\n gap: var(--ig-space-tight);\n padding: 0 var(--ig-space-tight);\n}\n\n/* THE HUE IS A BORDER COLOUR HERE, NOT A TEXT COLOUR \u2014 the theme holds the\n edge hues to the 3:1 NON-TEXT bar, and says so where it defines them, so\n painting badge LABELS with them contradicted the palette's own claim. It was\n not merely theoretical: at this size duplicate-of measured 3.98:1 on\n --ig-surface and decomposed-from 4.37:1, both under the 4.5:1 the text test\n asserts for every text colour. The label now takes --ig-text, which that\n test already proves on all three surfaces, and the hue keeps the non-text\n use it was measured for.\n NO CHANNEL IS LOST. Hue is one of four redundant channels and it is still\n carried by the border; the dash pattern and the glyph are untouched; and the\n vocabulary test independently proves all five stay distinguishable with hue\n removed ENTIRELY, which is the stronger claim. */\n.ig-badge[data-edge='blocked-by'] { border-color: var(--ig-edge-blocked-by); border-style: solid; }\n.ig-badge[data-edge='serialize-with'] { border-color: var(--ig-edge-serialize-with); border-style: double; }\n.ig-badge[data-edge='together-with'] { border-color: var(--ig-edge-together-with); border-style: solid; }\n.ig-badge[data-edge='duplicate-of'] { border-color: var(--ig-edge-duplicate-of); border-style: dotted; }\n.ig-badge[data-edge='decomposed-from'] { border-color: var(--ig-edge-decomposed-from); border-style: dashed; }\n\n.ig-glyph {\n font-family: var(--ig-font-mono);\n}\n\n/* \u2500\u2500 the footer group: holds that earn no rank slot \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.ig-footer {\n border-top: var(--ig-stroke) solid var(--ig-line);\n margin-top: var(--ig-space);\n padding-top: var(--ig-space);\n}\n\n.ig-footer-title {\n color: var(--ig-text-muted);\n font-size: var(--ig-font-size-small);\n margin: 0 0 var(--ig-space-tight);\n}\n\n/* \u2500\u2500 the host facts: what the graph cannot say \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* Present only when the host stated a fact; a document with none draws no\n header at all, which is what keeps the pure-graph markup unchanged. */\n.ig-header {\n align-items: baseline;\n display: flex;\n flex-wrap: wrap;\n gap: var(--ig-space);\n margin: 0 0 var(--ig-space);\n}\n\n.ig-summary,\n.ig-freshness {\n color: var(--ig-text-muted);\n font-size: var(--ig-font-size-small);\n font-variant-numeric: tabular-nums;\n margin: 0;\n}\n\n/* STALE GOES GOLD, as the design draws it. The gold this palette already holds\n is the conflict state's \u2014 \"the document moved upstream\" \u2014 and a stale mirror\n is that fact about the whole document, so the state hue is reused rather\n than a token added for one word. No new token: the theme's token list is\n the contract every host theme has to fill. */\n.ig-freshness[data-stale='true'] {\n color: var(--ig-state-conflict);\n}\n\n/* A control the viewer publishes and does not wire: the UA button reset, so it\n reads as the inline link it sits beside. */\n.ig-refresh {\n background: none;\n border: 0;\n color: var(--ig-accent);\n cursor: pointer;\n font: inherit;\n margin-left: var(--ig-space-tight);\n padding: 0;\n}\n\n.ig-refresh:hover {\n text-decoration: underline;\n}\n\n.ig-now {\n list-style: none;\n margin: 0 0 var(--ig-space);\n padding: 0;\n}\n\n/* The same row grammar as a slot, minus the rank track: the marker takes its\n place, so the title column lines up with the order beneath it. */\n.ig-now-row {\n align-items: center;\n background: var(--ig-surface);\n border: var(--ig-stroke) solid var(--ig-accent);\n border-radius: var(--ig-radius);\n column-gap: var(--ig-space);\n display: grid;\n grid-template-columns: auto 1fr auto auto;\n min-height: var(--ig-row-height);\n padding: var(--ig-space-tight) var(--ig-space);\n}\n\n.ig-now-mark {\n color: var(--ig-accent);\n font-family: var(--ig-font-mono);\n font-size: var(--ig-font-size-small);\n text-transform: uppercase;\n}\n\n.ig-now-phase {\n color: var(--ig-text-muted);\n font-size: var(--ig-font-size-small);\n white-space: nowrap;\n}\n\n/* A caveat or hold-label chip carries no relationship hue: it is a word, not\n an edge, so it keeps the line colour the plain badge has. */\n.ig-badge[data-caveat],\n.ig-badge[data-hold] {\n color: var(--ig-text-muted);\n}\n\n/* \u2500\u2500 the graph canvas \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n/* The stage carries the LAYOUT's own size, so one SVG unit is one CSS pixel\n and an absolutely-positioned rail row lands on the node it names. A\n percentage-width canvas would rescale under the rail and drift. It scrolls\n rather than shrinking, because shrinking would silently break that. */\n.ig-stage {\n block-size: var(--ig-stage-h);\n inline-size: var(--ig-stage-w);\n max-inline-size: 100%;\n overflow-x: auto;\n overflow-y: hidden;\n position: relative;\n}\n\n.ig-canvas {\n block-size: var(--ig-stage-h);\n display: block;\n inline-size: var(--ig-stage-w);\n}\n\n/* The ranks and stations FOR the spine nodes, sitting on them. */\n.ig-rail {\n inset: 0;\n pointer-events: none;\n position: absolute;\n}\n\n.ig-rail-row {\n block-size: var(--ig-row-h);\n inline-size: var(--ig-row-w);\n inset-block-start: var(--ig-row-y);\n inset-inline-start: var(--ig-row-x);\n margin-bottom: 0;\n min-block-size: 0;\n pointer-events: auto;\n position: absolute;\n}\n\n.ig-node {\n fill: var(--ig-surface);\n stroke: var(--ig-line);\n stroke-width: var(--ig-stroke);\n}\n\n.ig-node[data-held='true'] {\n fill: var(--ig-surface-2);\n stroke-dasharray: 4 3;\n}\n\n.ig-node-label {\n fill: var(--ig-text);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size-small);\n}\n\n.ig-edge {\n fill: none;\n stroke-width: var(--ig-stroke);\n}\n\n.ig-edge[data-edge='blocked-by'] { stroke: var(--ig-edge-blocked-by); }\n.ig-edge[data-edge='serialize-with'] { stroke: var(--ig-edge-serialize-with); }\n.ig-edge[data-edge='together-with'] { stroke: var(--ig-edge-together-with); }\n.ig-edge[data-edge='duplicate-of'] { stroke: var(--ig-edge-duplicate-of); }\n.ig-edge[data-edge='decomposed-from'] { stroke: var(--ig-edge-decomposed-from); }\n\n/* The dash pattern is set per element from the edge vocabulary, never here \u2014\n one source for the channel the colour-blind-safety claim rests on. */\n.ig-enclosure {\n fill: none;\n stroke: var(--ig-edge-together-with);\n stroke-width: var(--ig-stroke);\n}\n\n.ig-connector {\n stroke: var(--ig-edge-together-with);\n stroke-width: var(--ig-stroke-connector);\n}\n\n/* currentColor on the marker resolves to the inherited text colour, not to the\n edge's stroke \u2014 so a terminal has to be given the hue explicitly or it renders\n in body text and the fourth channel silently collapses. */\n.ig-terminal {\n color: var(--ig-text-body);\n stroke-width: var(--ig-stroke);\n}\n\n.ig-terminal[data-edge='blocked-by'] { color: var(--ig-edge-blocked-by); }\n.ig-terminal[data-edge='serialize-with'] { color: var(--ig-edge-serialize-with); }\n.ig-terminal[data-edge='together-with'] { color: var(--ig-edge-together-with); }\n.ig-terminal[data-edge='duplicate-of'] { color: var(--ig-edge-duplicate-of); }\n.ig-terminal[data-edge='decomposed-from'] { color: var(--ig-edge-decomposed-from); }\n\n/* \u2500\u2500 refusals and empty states \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.ig-refusal,\n.ig-empty {\n background: var(--ig-surface-2);\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n color: var(--ig-text-body);\n padding: var(--ig-space);\n}\n\n.ig-refusal-next {\n color: var(--ig-text);\n margin: var(--ig-space-tight) 0 0;\n}\n\n/* The capsule is INFORMATIONAL \u2014 a plain list item again. It was briefly a\n button, to make the refusal's advertised action keyboard-reachable; the\n action itself has since gone, because this package cannot narrow a document\n and so could never complete it. With the control removed the UA button reset\n goes too: there is no button look left to undo. */\n.ig-capsule {\n align-items: baseline;\n background: var(--ig-surface);\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n display: flex;\n gap: var(--ig-space);\n margin-top: var(--ig-space-tight);\n padding: var(--ig-space-tight) var(--ig-space);\n}\n\n.ig-refusal-omitted {\n color: var(--ig-text-muted);\n font-size: var(--ig-font-size-small);\n margin: var(--ig-space-tight) 0 0;\n}\n\n/* \u2500\u2500 the decomposition tree \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.ig-tree,\n.ig-tree .ig-list {\n list-style: none;\n margin: 0;\n padding: 0;\n}\n\n.ig-tree .ig-list {\n border-left: var(--ig-stroke) dashed var(--ig-edge-decomposed-from);\n margin-left: var(--ig-space);\n padding-left: var(--ig-space);\n}\n\n.ig-tree-item {\n padding: var(--ig-space-tight) 0;\n}\n\n/* \u2500\u2500 legend \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.ig-legend {\n border: 0;\n display: flex;\n flex-wrap: wrap;\n gap: var(--ig-space);\n margin: 0 0 var(--ig-space);\n padding: 0;\n}\n\n.ig-legend-caption {\n color: var(--ig-text-muted);\n font-size: var(--ig-font-size-small);\n padding: 0;\n}\n";
|
|
25
|
+
export declare const viewerStylesheet: string;
|
|
17
26
|
//# sourceMappingURL=styles.d.ts.map
|
package/dist/styles.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AA0RH,eAAO,MAAM,gBAAgB,QAiyC5B,CAAC"}
|