@issuegraph/editor 0.10.0 → 0.22.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/README.md +38 -7
- package/dist/a11y/baseline.d.ts.map +1 -1
- package/dist/a11y/baseline.js +4 -0
- package/dist/a11y/baseline.js.map +1 -1
- package/dist/audit/findings.d.ts +107 -1
- package/dist/audit/findings.d.ts.map +1 -1
- package/dist/audit/findings.js +113 -6
- package/dist/audit/findings.js.map +1 -1
- package/dist/audit/panel.d.ts +277 -0
- package/dist/audit/panel.d.ts.map +1 -0
- package/dist/audit/panel.js +462 -0
- package/dist/audit/panel.js.map +1 -0
- package/dist/audit/refused.d.ts +99 -0
- package/dist/audit/refused.d.ts.map +1 -0
- package/dist/audit/refused.js +276 -0
- package/dist/audit/refused.js.map +1 -0
- package/dist/audit/styles.d.ts +1 -1
- package/dist/audit/styles.d.ts.map +1 -1
- package/dist/audit/styles.js +428 -0
- package/dist/audit/styles.js.map +1 -1
- package/dist/audit/surface.d.ts +54 -12
- package/dist/audit/surface.d.ts.map +1 -1
- package/dist/audit/surface.js +53 -13
- package/dist/audit/surface.js.map +1 -1
- package/dist/create/draft.d.ts +19 -0
- package/dist/create/draft.d.ts.map +1 -1
- package/dist/create/draft.js +21 -0
- package/dist/create/draft.js.map +1 -1
- package/dist/create/keys.d.ts +68 -8
- package/dist/create/keys.d.ts.map +1 -1
- package/dist/create/keys.js +43 -5
- package/dist/create/keys.js.map +1 -1
- package/dist/index.d.ts +38 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -13
- package/dist/index.js.map +1 -1
- package/dist/overlay/render.d.ts +11 -3
- package/dist/overlay/render.d.ts.map +1 -1
- package/dist/overlay/render.js +22 -6
- package/dist/overlay/render.js.map +1 -1
- package/dist/overlay/request.d.ts +71 -0
- package/dist/overlay/request.d.ts.map +1 -0
- package/dist/overlay/request.js +129 -0
- package/dist/overlay/request.js.map +1 -0
- package/dist/overlay/styles.d.ts +1 -1
- package/dist/overlay/styles.d.ts.map +1 -1
- package/dist/overlay/styles.js +38 -7
- package/dist/overlay/styles.js.map +1 -1
- package/dist/reevaluate/parts.d.ts +130 -0
- package/dist/reevaluate/parts.d.ts.map +1 -0
- package/dist/reevaluate/parts.js +260 -0
- package/dist/reevaluate/parts.js.map +1 -0
- package/dist/reevaluate/render.d.ts +18 -11
- package/dist/reevaluate/render.d.ts.map +1 -1
- package/dist/reevaluate/render.js +21 -135
- package/dist/reevaluate/render.js.map +1 -1
- package/dist/reevaluate/styles.d.ts +1 -1
- package/dist/reevaluate/styles.d.ts.map +1 -1
- package/dist/reevaluate/styles.js +26 -0
- package/dist/reevaluate/styles.js.map +1 -1
- package/dist/reevaluate/view.d.ts +16 -1
- package/dist/reevaluate/view.d.ts.map +1 -1
- package/dist/reevaluate/view.js +21 -1
- package/dist/reevaluate/view.js.map +1 -1
- package/dist/reevaluate/words.d.ts +7 -0
- package/dist/reevaluate/words.d.ts.map +1 -1
- package/dist/scale/ladder.d.ts +62 -6
- package/dist/scale/ladder.d.ts.map +1 -1
- package/dist/scale/ladder.js +119 -8
- package/dist/scale/ladder.js.map +1 -1
- package/dist/scale/render.d.ts +44 -0
- package/dist/scale/render.d.ts.map +1 -1
- package/dist/scale/render.js +197 -27
- package/dist/scale/render.js.map +1 -1
- package/dist/scale/styles.d.ts +11 -5
- package/dist/scale/styles.d.ts.map +1 -1
- package/dist/scale/styles.js +133 -4
- package/dist/scale/styles.js.map +1 -1
- package/dist/workspace/host.d.ts +83 -1
- package/dist/workspace/host.d.ts.map +1 -1
- package/dist/workspace/host.js +197 -4
- package/dist/workspace/host.js.map +1 -1
- package/dist/workspace/inspector.d.ts +33 -7
- package/dist/workspace/inspector.d.ts.map +1 -1
- package/dist/workspace/inspector.js +15 -0
- package/dist/workspace/inspector.js.map +1 -1
- package/dist/workspace/mount.d.ts +23 -1
- package/dist/workspace/mount.d.ts.map +1 -1
- package/dist/workspace/mount.js +500 -17
- package/dist/workspace/mount.js.map +1 -1
- package/dist/workspace/rail.d.ts +5 -2
- package/dist/workspace/rail.d.ts.map +1 -1
- package/dist/workspace/rail.js.map +1 -1
- package/dist/workspace/render.d.ts +379 -3
- package/dist/workspace/render.d.ts.map +1 -1
- package/dist/workspace/render.js +893 -133
- package/dist/workspace/render.js.map +1 -1
- package/dist/workspace/selection.d.ts +11 -0
- package/dist/workspace/selection.d.ts.map +1 -1
- package/dist/workspace/selection.js +10 -0
- package/dist/workspace/selection.js.map +1 -1
- package/dist/workspace/styles.d.ts +1 -1
- package/dist/workspace/styles.d.ts.map +1 -1
- package/dist/workspace/styles.js +868 -18
- package/dist/workspace/styles.js.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The pieces every §17c rendering draws the same way.
|
|
3
|
+
*
|
|
4
|
+
* ## Why this is its own module
|
|
5
|
+
*
|
|
6
|
+
* The loop is drawn twice: by `renderReevaluate`, standalone, with its chips in
|
|
7
|
+
* a list beside the rail; and by the workspace, with the summary in the header
|
|
8
|
+
* and each chip ON its row. Two spellings of one summary or one chip is the
|
|
9
|
+
* drift the package split exists to prevent, so both call these and neither
|
|
10
|
+
* builds spans of its own. Same reasoning as `@issuegraph/viewer`'s own
|
|
11
|
+
* `parts.ts`, one layer up.
|
|
12
|
+
*
|
|
13
|
+
* ## PLACED IS NOT A STYLING FLAG — it removes a fact the row already states
|
|
14
|
+
*
|
|
15
|
+
* `renderReevaluate`'s header records why the unpositioned chip names its row
|
|
16
|
+
* in text: *"a chip that carried its key only as an attribute said nothing a
|
|
17
|
+
* reader could see about WHICH row moved."* That reasoning is conditional on
|
|
18
|
+
* being unpositioned, and it inverts once the chip sits on the row: the row
|
|
19
|
+
* names the issue immediately to its left, so a `.ig-delta-key` there is the
|
|
20
|
+
* one span on the chip that says nothing new.
|
|
21
|
+
*
|
|
22
|
+
* So `placed: true` drops the key span, and it drops nothing else. The
|
|
23
|
+
* per-member `data-ref` stays in both, because a `together-with` unit is one
|
|
24
|
+
* row speaking for several issues and the row names only its lead.
|
|
25
|
+
*
|
|
26
|
+
* ## It builds a SPEC, so it is composed and never concatenated
|
|
27
|
+
*
|
|
28
|
+
* The words come from the host through {@link ChangeWords}, and host prose may
|
|
29
|
+
* not be joined into markup out here — `audit/surface.ts` states the rule and
|
|
30
|
+
* the reason: layer 1 owns the markup primitive, and a second escaper in this
|
|
31
|
+
* package is duplication with an injection shape. `element` is that primitive,
|
|
32
|
+
* reached through the viewer's public surface, so this is the one renderer used
|
|
33
|
+
* from a second call site rather than a second renderer.
|
|
34
|
+
*
|
|
35
|
+
* @see https://github.com/autnmy/issuegraph/blob/main/SPEC.md
|
|
36
|
+
*/
|
|
37
|
+
import { KEY_ATTRIBUTE, element } from '@issuegraph/viewer';
|
|
38
|
+
/**
|
|
39
|
+
* The attribute a rail row carries while the last edit moved it.
|
|
40
|
+
*
|
|
41
|
+
* ITS VALUE IS THE ROW'S OWN DELTA KIND, not a severity: §17c tints a promoted
|
|
42
|
+
* row and a newly-held row differently, and a single boolean "changed" would
|
|
43
|
+
* make the reader read the chip to learn which. It is the same shape
|
|
44
|
+
* `AUDIT_SEVERITY_ATTRIBUTE` takes and for the same reason — the styling
|
|
45
|
+
* decision stays the host's, and this package only says which kind it is.
|
|
46
|
+
*
|
|
47
|
+
* THE VALUES ARE {@link deltaKind}'S, AND THEY COME FROM THE STORE'S OWN
|
|
48
|
+
* VOCABULARY: `promoted`, `newly-held`, `up`, `down`, `entered`, `left`. An
|
|
49
|
+
* earlier revision of this comment named `present` and `absent`, which no code
|
|
50
|
+
* path has ever produced — `RankDelta.presence` is `'entered' | 'left'` — and
|
|
51
|
+
* the stylesheet keyed a rule on `absent` accordingly. It matched nothing while
|
|
52
|
+
* reading as the neutral case, so a row the edit removed from the order took
|
|
53
|
+
* the READY tint instead. Read the union at its type rather than this list if
|
|
54
|
+
* the two ever disagree.
|
|
55
|
+
*
|
|
56
|
+
* ABSENT ON AN UNAFFECTED ROW, never `""` or `"none"`. §17c's rule is that
|
|
57
|
+
* unaffected rows are *left completely alone*, and an attribute stamped on
|
|
58
|
+
* every row with one value meaning "nothing" is not leaving it alone — it is
|
|
59
|
+
* marking it, and a host stylesheet would then have to know which value means
|
|
60
|
+
* absent.
|
|
61
|
+
*/
|
|
62
|
+
export const DELTA_ATTRIBUTE = 'data-ig-delta';
|
|
63
|
+
/**
|
|
64
|
+
* Which of a chip's facts decides the row's tint.
|
|
65
|
+
*
|
|
66
|
+
* ONE ROW, ONE TINT, and a `together-with` unit can carry several members whose
|
|
67
|
+
* deltas disagree — so this picks rather than concatenates. Readiness outranks
|
|
68
|
+
* movement because §17c's own summary orders it that way ("1 newly promoted · 1
|
|
69
|
+
* newly held · 1 pushed down"): becoming held is a change to whether the work
|
|
70
|
+
* can start, and moving five ranks is a change to when. A reader scanning for
|
|
71
|
+
* what broke is scanning for the first.
|
|
72
|
+
*
|
|
73
|
+
* `undefined` when no member carries either, which is the only way a chip with
|
|
74
|
+
* no drawable delta reaches a row. It leaves the row unmarked rather than
|
|
75
|
+
* inventing a kind for it.
|
|
76
|
+
*/
|
|
77
|
+
export function deltaKind(chip) {
|
|
78
|
+
const readiness = chip.deltas.find((delta) => delta.readiness !== undefined)?.readiness;
|
|
79
|
+
if (readiness !== undefined)
|
|
80
|
+
return readiness;
|
|
81
|
+
const movement = chip.deltas.find((delta) => delta.movement !== undefined)?.movement;
|
|
82
|
+
if (movement !== undefined)
|
|
83
|
+
return movement.direction;
|
|
84
|
+
return chip.deltas.find((delta) => delta.presence !== undefined)?.presence;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* The words a spec renders, in order, as one string.
|
|
88
|
+
*
|
|
89
|
+
* DERIVED FROM THE SPEC RATHER THAN FROM THE CHIP, which is the whole point:
|
|
90
|
+
* the row's accessible name has to say exactly what the chip says, and a second
|
|
91
|
+
* walk over `chip.deltas` composing the same words again is two spellings of
|
|
92
|
+
* one sentence — the drift this module exists to prevent, arriving on the
|
|
93
|
+
* channel where nobody would see it drift, because the difference is only
|
|
94
|
+
* audible.
|
|
95
|
+
*
|
|
96
|
+
* Whitespace-joined because the spans are laid out with a gap and no
|
|
97
|
+
* punctuation between them; the separator is the layout's, so it is a space
|
|
98
|
+
* here rather than a glyph this package would have to choose.
|
|
99
|
+
*/
|
|
100
|
+
export function textOf(spec) {
|
|
101
|
+
const parts = [];
|
|
102
|
+
const walk = (child) => {
|
|
103
|
+
if (typeof child === 'string') {
|
|
104
|
+
if (child !== '')
|
|
105
|
+
parts.push(child);
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
for (const nested of child.children ?? [])
|
|
109
|
+
walk(nested);
|
|
110
|
+
};
|
|
111
|
+
walk(spec);
|
|
112
|
+
return parts.join(' ');
|
|
113
|
+
}
|
|
114
|
+
export function countWord(count, word) {
|
|
115
|
+
return [
|
|
116
|
+
element('span', { class: 'ig-change-count' }, [String(count)]),
|
|
117
|
+
element('span', { class: 'ig-change-word' }, [word]),
|
|
118
|
+
];
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* The summary, and the held-order label when the order is being re-evaluated.
|
|
122
|
+
*
|
|
123
|
+
* THE COMPUTING LABEL IS INSIDE THE LIVE REGION, and it was a sibling of it
|
|
124
|
+
* until a reader pointed out that this makes it silent. A pending write CLEARS
|
|
125
|
+
* `lastChange`, so the region is empty in exactly the state the label exists
|
|
126
|
+
* for — a sighted reader gets a greyed rail and a sentence saying why, and a
|
|
127
|
+
* screen-reader user is told nothing at all about the ranks having gone stale.
|
|
128
|
+
* Rendered inside, its appearance IS a change to the region, which is what
|
|
129
|
+
* announces.
|
|
130
|
+
*
|
|
131
|
+
* BOTH SURFACES DRAW IT FROM HERE for that reason. `renderReevaluate` had its
|
|
132
|
+
* own copy outside its own region and had the identical defect; one builder
|
|
133
|
+
* means the fix could not land on one surface and miss the other.
|
|
134
|
+
*/
|
|
135
|
+
export function summarySpec(summary, words, options = { held: false }) {
|
|
136
|
+
return element('div', {
|
|
137
|
+
class: 'ig-change-summary',
|
|
138
|
+
// Omitted rather than falsified while there is nothing to report: an
|
|
139
|
+
// element() attribute whose value is `undefined` is not written at all,
|
|
140
|
+
// and `data-unchanged="false"` would claim an edit landed and moved
|
|
141
|
+
// nothing when no edit has landed.
|
|
142
|
+
'data-unchanged': summary === null ? undefined : summary.unchanged ? 'true' : 'false',
|
|
143
|
+
'data-op': summary?.op,
|
|
144
|
+
'data-mutation': summary?.mutationId,
|
|
145
|
+
}, [
|
|
146
|
+
// THE LIVE REGION IS ALWAYS MOUNTED, AND EMPTY UNTIL THERE IS SOMETHING
|
|
147
|
+
// TO SAY. A `role="status"` node that is CREATED already carrying its
|
|
148
|
+
// text is not reliably announced — the region has to exist first and
|
|
149
|
+
// then have its contents change — so rendering it only alongside a
|
|
150
|
+
// summary would silently lose the FIRST summary after a load, which is
|
|
151
|
+
// the one a reader is most likely to be waiting for.
|
|
152
|
+
//
|
|
153
|
+
// It is also why the region is this wrapper rather than the content
|
|
154
|
+
// inside it: an edit that moved something renders a list and one that
|
|
155
|
+
// moved nothing renders a paragraph, so a role on either would come and
|
|
156
|
+
// go with the shape. And the dismiss button stays OUTSIDE, or its label
|
|
157
|
+
// would be re-announced with every summary.
|
|
158
|
+
//
|
|
159
|
+
// It is a role, not a timer. Nothing about it expires and the region
|
|
160
|
+
// stays put until the next edit or an explicit dismissal.
|
|
161
|
+
element('div', { class: 'ig-change-line', role: 'status' }, [
|
|
162
|
+
// THE HELD LABEL FIRST, and it renders whether or not there is a
|
|
163
|
+
// summary beside it — a pending write clears `lastChange`, so "held
|
|
164
|
+
// with no summary" is the ordinary shape of this state rather than an
|
|
165
|
+
// edge of it.
|
|
166
|
+
options.held ? element('p', { class: 'ig-order-computing' }, [words.computing]) : null,
|
|
167
|
+
...(summary === null
|
|
168
|
+
? []
|
|
169
|
+
: [
|
|
170
|
+
// THE ZERO CASE RENDERS, in the summary's own place. An edit that
|
|
171
|
+
// landed and moved nothing is the finding an owner auditing an
|
|
172
|
+
// encoding most needs, and drawing nothing for it is the defect
|
|
173
|
+
// this branch prevents.
|
|
174
|
+
summary.unchanged
|
|
175
|
+
? element('p', { class: 'ig-change-unchanged' }, [words.unchanged])
|
|
176
|
+
: element('ul', { class: 'ig-change-parts' }, summary.parts.map((part) => element('li', { class: 'ig-change-part', 'data-facet': part.facet }, [
|
|
177
|
+
...countWord(part.count, words.facets[part.facet]),
|
|
178
|
+
]))),
|
|
179
|
+
]),
|
|
180
|
+
]),
|
|
181
|
+
// ITS OWN CLASS, not the ladder's `.ig-chip`. That class is defined only
|
|
182
|
+
// in `scale/styles.ts`, so borrowing it would leave this control unstyled
|
|
183
|
+
// for a host that installs this surface and not that one. Folding the two
|
|
184
|
+
// chip looks into one rule is the assembling change's call, not this
|
|
185
|
+
// leaf's — it is the change that first has both on screen at once.
|
|
186
|
+
//
|
|
187
|
+
// Absent with no summary: a control that clears nothing is a control that
|
|
188
|
+
// does nothing, and the region above is what has to persist, not this.
|
|
189
|
+
summary === null
|
|
190
|
+
? null
|
|
191
|
+
: element('button', { type: 'button', class: 'ig-change-dismiss', 'data-ig-command': 'dismiss-change' }, [words.dismiss]),
|
|
192
|
+
]);
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* What one issue's delta says, as spans.
|
|
196
|
+
*
|
|
197
|
+
* IT NAMES A DIRECTION AND A DISTANCE, NEVER A RANK. `RankMovement.from` and
|
|
198
|
+
* `.to` are the deriver's 0-BASED positions, while the rail beside them renders
|
|
199
|
+
* the viewer's 1-BASED ranks — so printing either as a number would put two
|
|
200
|
+
* different bases side by side and read as an off-by-one. `by` is a distance,
|
|
201
|
+
* which is basis-independent and safe to print. A host that knows the basis and
|
|
202
|
+
* wants the endpoints reads them off `view.chips[].deltas`, which carries every
|
|
203
|
+
* `RankDelta` untouched.
|
|
204
|
+
*/
|
|
205
|
+
function memberSpec(delta, words, named) {
|
|
206
|
+
return element('span', { class: 'ig-delta-member', 'data-ref': delta.ref }, [
|
|
207
|
+
// NAMED ONLY WHEN THE NAME ADDS SOMETHING. On a chip whose single member IS
|
|
208
|
+
// the row, the row key above has already said it and repeating it is noise.
|
|
209
|
+
// Everywhere else the ref is load-bearing: two members reading
|
|
210
|
+
// `lead 1 down 1 down` says the row moved twice rather than that a unit of
|
|
211
|
+
// two each moved down one, and a lone member that is NOT the lead is a
|
|
212
|
+
// change to an issue the row key does not name at all.
|
|
213
|
+
named ? element('span', { class: 'ig-delta-ref' }, [delta.ref]) : null,
|
|
214
|
+
delta.movement === undefined
|
|
215
|
+
? null
|
|
216
|
+
: element('span', {
|
|
217
|
+
class: 'ig-delta-move',
|
|
218
|
+
'data-direction': delta.movement.direction,
|
|
219
|
+
'data-by': delta.movement.by,
|
|
220
|
+
}, [...countWord(delta.movement.by, words.direction[delta.movement.direction])]),
|
|
221
|
+
delta.readiness === undefined
|
|
222
|
+
? null
|
|
223
|
+
: element('span', { class: 'ig-delta-readiness', 'data-readiness': delta.readiness }, [
|
|
224
|
+
words.facets[delta.readiness],
|
|
225
|
+
]),
|
|
226
|
+
delta.presence === undefined
|
|
227
|
+
? null
|
|
228
|
+
: element('span', { class: 'ig-delta-presence', 'data-presence': delta.presence }, [
|
|
229
|
+
words.facets[delta.presence],
|
|
230
|
+
]),
|
|
231
|
+
]);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* One ROW's chip — which can speak for more than one issue.
|
|
235
|
+
*
|
|
236
|
+
* A `together-with` unit is one row and several refs, so its members are nested
|
|
237
|
+
* inside a single chip rather than given one each. Each keeps its own
|
|
238
|
+
* `data-ref`, so a host can still tell which member moved.
|
|
239
|
+
*
|
|
240
|
+
* THE TAG FOLLOWS THE PLACE. Unplaced it is an `li`, because the standalone
|
|
241
|
+
* surface draws a list of them and a list item outside a list is markup a
|
|
242
|
+
* reader's assistive technology reports wrongly. Placed it is a `span`, because
|
|
243
|
+
* the row it joins is not a list and an `li` there would be the same defect
|
|
244
|
+
* mirrored.
|
|
245
|
+
*/
|
|
246
|
+
export function chipSpec(chip, words, options = { placed: false }) {
|
|
247
|
+
// One member whose ref IS the row: the key names it, so naming it again would
|
|
248
|
+
// be the only text on the chip that says nothing. Any other shape — several
|
|
249
|
+
// members, or a lone member the row is not named after — needs each fact
|
|
250
|
+
// attributed, or the chip reads as one row's facts repeated.
|
|
251
|
+
const named = chip.deltas.length > 1 || chip.deltas[0]?.ref !== chip.key;
|
|
252
|
+
const members = chip.deltas.map((delta) => memberSpec(delta, words, named));
|
|
253
|
+
return options.placed
|
|
254
|
+
? element('span', { class: 'ig-delta-chip', 'data-placed': 'true' }, members)
|
|
255
|
+
: element('li', { class: 'ig-delta-chip', [KEY_ATTRIBUTE]: chip.key }, [
|
|
256
|
+
element('span', { class: 'ig-delta-key' }, [chip.key]),
|
|
257
|
+
...members,
|
|
258
|
+
]);
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=parts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parts.js","sourceRoot":"","sources":["../../src/reevaluate/parts.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,20 +16,27 @@
|
|
|
16
16
|
* string — would have re-introduced exactly the hand-built escaping surface the
|
|
17
17
|
* spec grammar exists to remove.
|
|
18
18
|
*
|
|
19
|
-
* ## The chips are a KEYED LIST, and
|
|
19
|
+
* ## The chips are a KEYED LIST here, and the WORKSPACE draws them on the row
|
|
20
20
|
*
|
|
21
21
|
* Said plainly because the earlier wording did not: `data-ig-key` has no
|
|
22
|
-
* browser behaviour of its own.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
22
|
+
* browser behaviour of its own. In THIS surface the chips render as a list
|
|
23
|
+
* beside the rail, and the list is built to stand on its own: every chip NAMES
|
|
24
|
+
* the row it describes, which is what lets a reader account for the rows that
|
|
25
|
+
* got no chip.
|
|
26
26
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
27
|
+
* THE DEFERRAL THIS COMMENT USED TO CARRY IS DISCHARGED, and its premise was
|
|
28
|
+
* wrong rather than merely stale. It said placing a chip on its row "needs that
|
|
29
|
+
* row's geometry — which only a mount has". It does not: a row is a keyed SPEC
|
|
30
|
+
* before it is an element, and `workspace/render.ts`'s `markRail` was already
|
|
31
|
+
* walking that tree to compose the audit's mark onto it. So the workspace
|
|
32
|
+
* composes the chip the same way — no geometry, no mount, no positioning — and
|
|
33
|
+
* `parts.ts` holds the one builder both call.
|
|
34
|
+
*
|
|
35
|
+
* This surface keeps the list because it is the honest answer for a host that
|
|
36
|
+
* renders WITHOUT the workspace's rail: there is no row to sit on, so naming
|
|
37
|
+
* the row in text is the only thing that accounts for the ones that did not
|
|
38
|
+
* move. `chipSpec`'s `placed` arm is the other half, and it drops that name
|
|
39
|
+
* because there the row already carries it.
|
|
33
40
|
*
|
|
34
41
|
* ## Two rejected alternatives from the design, recorded so they stay rejected
|
|
35
42
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/reevaluate/render.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/reevaluate/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,OAAO,EACL,KAAK,KAAK,EACV,KAAK,cAAc,EAKpB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,KAAK,cAAc,EAAkB,MAAM,WAAW,CAAC;AAGhE,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,2EAA2E;IAC3E,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,CAAC;IACjD,oEAAoE;IACpE,QAAQ,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC;IAC9B,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,0DAA0D;AAC1D,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,iBAAiB,GACzB,gBAAgB,CA6ClB"}
|
|
@@ -16,20 +16,27 @@
|
|
|
16
16
|
* string — would have re-introduced exactly the hand-built escaping surface the
|
|
17
17
|
* spec grammar exists to remove.
|
|
18
18
|
*
|
|
19
|
-
* ## The chips are a KEYED LIST, and
|
|
19
|
+
* ## The chips are a KEYED LIST here, and the WORKSPACE draws them on the row
|
|
20
20
|
*
|
|
21
21
|
* Said plainly because the earlier wording did not: `data-ig-key` has no
|
|
22
|
-
* browser behaviour of its own.
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
22
|
+
* browser behaviour of its own. In THIS surface the chips render as a list
|
|
23
|
+
* beside the rail, and the list is built to stand on its own: every chip NAMES
|
|
24
|
+
* the row it describes, which is what lets a reader account for the rows that
|
|
25
|
+
* got no chip.
|
|
26
26
|
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
32
|
-
*
|
|
27
|
+
* THE DEFERRAL THIS COMMENT USED TO CARRY IS DISCHARGED, and its premise was
|
|
28
|
+
* wrong rather than merely stale. It said placing a chip on its row "needs that
|
|
29
|
+
* row's geometry — which only a mount has". It does not: a row is a keyed SPEC
|
|
30
|
+
* before it is an element, and `workspace/render.ts`'s `markRail` was already
|
|
31
|
+
* walking that tree to compose the audit's mark onto it. So the workspace
|
|
32
|
+
* composes the chip the same way — no geometry, no mount, no positioning — and
|
|
33
|
+
* `parts.ts` holds the one builder both call.
|
|
34
|
+
*
|
|
35
|
+
* This surface keeps the list because it is the honest answer for a host that
|
|
36
|
+
* renders WITHOUT the workspace's rail: there is no row to sit on, so naming
|
|
37
|
+
* the row in text is the only thing that accounts for the ones that did not
|
|
38
|
+
* move. `chipSpec`'s `placed` arm is the other half, and it drops that name
|
|
39
|
+
* because there the row already carries it.
|
|
33
40
|
*
|
|
34
41
|
* ## Two rejected alternatives from the design, recorded so they stay rejected
|
|
35
42
|
*
|
|
@@ -46,130 +53,10 @@
|
|
|
46
53
|
* store stay the single source of truth. A second copy of "has this been
|
|
47
54
|
* dismissed" held out here is the drift the command grammar exists to avoid.
|
|
48
55
|
*/
|
|
49
|
-
import {
|
|
56
|
+
import { element, renderMarkup, renderViewer, resolveTheme, } from '@issuegraph/viewer';
|
|
57
|
+
import { chipSpec, summarySpec } from "./parts.js";
|
|
50
58
|
import { reevaluateView } from "./view.js";
|
|
51
59
|
import { reevaluateStylesheet } from "./styles.js";
|
|
52
|
-
function countWord(count, word) {
|
|
53
|
-
return [
|
|
54
|
-
element('span', { class: 'ig-change-count' }, [String(count)]),
|
|
55
|
-
element('span', { class: 'ig-change-word' }, [word]),
|
|
56
|
-
];
|
|
57
|
-
}
|
|
58
|
-
function summarySpec(summary, words) {
|
|
59
|
-
return element('div', {
|
|
60
|
-
class: 'ig-change-summary',
|
|
61
|
-
// Omitted rather than falsified while there is nothing to report: an
|
|
62
|
-
// element() attribute whose value is `undefined` is not written at all,
|
|
63
|
-
// and `data-unchanged="false"` would claim an edit landed and moved
|
|
64
|
-
// nothing when no edit has landed.
|
|
65
|
-
'data-unchanged': summary === null ? undefined : summary.unchanged ? 'true' : 'false',
|
|
66
|
-
'data-op': summary?.op,
|
|
67
|
-
'data-mutation': summary?.mutationId,
|
|
68
|
-
}, [
|
|
69
|
-
// THE LIVE REGION IS ALWAYS MOUNTED, AND EMPTY UNTIL THERE IS SOMETHING
|
|
70
|
-
// TO SAY. A `role="status"` node that is CREATED already carrying its
|
|
71
|
-
// text is not reliably announced — the region has to exist first and
|
|
72
|
-
// then have its contents change — so rendering it only alongside a
|
|
73
|
-
// summary would silently lose the FIRST summary after a load, which is
|
|
74
|
-
// the one a reader is most likely to be waiting for.
|
|
75
|
-
//
|
|
76
|
-
// It is also why the region is this wrapper rather than the content
|
|
77
|
-
// inside it: an edit that moved something renders a list and one that
|
|
78
|
-
// moved nothing renders a paragraph, so a role on either would come and
|
|
79
|
-
// go with the shape. And the dismiss button stays OUTSIDE, or its label
|
|
80
|
-
// would be re-announced with every summary.
|
|
81
|
-
//
|
|
82
|
-
// It is a role, not a timer. Nothing about it expires and the region
|
|
83
|
-
// stays put until the next edit or an explicit dismissal.
|
|
84
|
-
element('div', { class: 'ig-change-line', role: 'status' }, summary === null
|
|
85
|
-
? []
|
|
86
|
-
: [
|
|
87
|
-
// THE ZERO CASE RENDERS, in the summary's own place. An edit that
|
|
88
|
-
// landed and moved nothing is the finding an owner auditing an
|
|
89
|
-
// encoding most needs, and drawing nothing for it is the defect
|
|
90
|
-
// this branch prevents.
|
|
91
|
-
summary.unchanged
|
|
92
|
-
? element('p', { class: 'ig-change-unchanged' }, [words.unchanged])
|
|
93
|
-
: element('ul', { class: 'ig-change-parts' }, summary.parts.map((part) => element('li', { class: 'ig-change-part', 'data-facet': part.facet }, [
|
|
94
|
-
...countWord(part.count, words.facets[part.facet]),
|
|
95
|
-
]))),
|
|
96
|
-
]),
|
|
97
|
-
// ITS OWN CLASS, not the ladder's `.ig-chip`. That class is defined only
|
|
98
|
-
// in `scale/styles.ts`, so borrowing it would leave this control unstyled
|
|
99
|
-
// for a host that installs this surface and not that one. Folding the two
|
|
100
|
-
// chip looks into one rule is the assembling change's call, not this
|
|
101
|
-
// leaf's — it is the change that first has both on screen at once.
|
|
102
|
-
//
|
|
103
|
-
// Absent with no summary: a control that clears nothing is a control that
|
|
104
|
-
// does nothing, and the region above is what has to persist, not this.
|
|
105
|
-
summary === null
|
|
106
|
-
? null
|
|
107
|
-
: element('button', { type: 'button', class: 'ig-change-dismiss', 'data-ig-command': 'dismiss-change' }, [words.dismiss]),
|
|
108
|
-
]);
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* What one issue's delta says, as spans.
|
|
112
|
-
*
|
|
113
|
-
* IT NAMES A DIRECTION AND A DISTANCE, NEVER A RANK. `RankMovement.from` and
|
|
114
|
-
* `.to` are the deriver's 0-BASED positions, while the rail beside them renders
|
|
115
|
-
* the viewer's 1-BASED ranks — so printing either as a number would put two
|
|
116
|
-
* different bases side by side and read as an off-by-one. `by` is a distance,
|
|
117
|
-
* which is basis-independent and safe to print. A host that knows the basis and
|
|
118
|
-
* wants the endpoints reads them off `view.chips[].deltas`, which carries every
|
|
119
|
-
* `RankDelta` untouched.
|
|
120
|
-
*/
|
|
121
|
-
function memberSpec(delta, words, named) {
|
|
122
|
-
return element('span', { class: 'ig-delta-member', 'data-ref': delta.ref }, [
|
|
123
|
-
// NAMED ONLY WHEN THE NAME ADDS SOMETHING. On a chip whose single member IS
|
|
124
|
-
// the row, the row key above has already said it and repeating it is noise.
|
|
125
|
-
// Everywhere else the ref is load-bearing: two members reading
|
|
126
|
-
// `lead 1 down 1 down` says the row moved twice rather than that a unit of
|
|
127
|
-
// two each moved down one, and a lone member that is NOT the lead is a
|
|
128
|
-
// change to an issue the row key does not name at all.
|
|
129
|
-
named ? element('span', { class: 'ig-delta-ref' }, [delta.ref]) : null,
|
|
130
|
-
delta.movement === undefined
|
|
131
|
-
? null
|
|
132
|
-
: element('span', {
|
|
133
|
-
class: 'ig-delta-move',
|
|
134
|
-
'data-direction': delta.movement.direction,
|
|
135
|
-
'data-by': delta.movement.by,
|
|
136
|
-
}, [...countWord(delta.movement.by, words.direction[delta.movement.direction])]),
|
|
137
|
-
delta.readiness === undefined
|
|
138
|
-
? null
|
|
139
|
-
: element('span', { class: 'ig-delta-readiness', 'data-readiness': delta.readiness }, [
|
|
140
|
-
words.facets[delta.readiness],
|
|
141
|
-
]),
|
|
142
|
-
delta.presence === undefined
|
|
143
|
-
? null
|
|
144
|
-
: element('span', { class: 'ig-delta-presence', 'data-presence': delta.presence }, [
|
|
145
|
-
words.facets[delta.presence],
|
|
146
|
-
]),
|
|
147
|
-
]);
|
|
148
|
-
}
|
|
149
|
-
/**
|
|
150
|
-
* One ROW's chip — which can speak for more than one issue.
|
|
151
|
-
*
|
|
152
|
-
* A `together-with` unit is one row and several refs, so its members are nested
|
|
153
|
-
* inside a single chip rather than given one each. Each keeps its own
|
|
154
|
-
* `data-ref`, so a host can still tell which member moved.
|
|
155
|
-
*
|
|
156
|
-
* IT NAMES ITS ROW IN TEXT, not only in `KEY_ATTRIBUTE`. Unpositioned, a chip
|
|
157
|
-
* that carried its key only as an attribute said nothing a reader could see
|
|
158
|
-
* about WHICH row moved — and the rows that did not move are accounted for
|
|
159
|
-
* precisely by not being named here. The key is data, not language, so naming
|
|
160
|
-
* it costs the host no word.
|
|
161
|
-
*/
|
|
162
|
-
function chipSpec(chip, words) {
|
|
163
|
-
// One member whose ref IS the row: the key names it, so naming it again would
|
|
164
|
-
// be the only text on the chip that says nothing. Any other shape — several
|
|
165
|
-
// members, or a lone member the row is not named after — needs each fact
|
|
166
|
-
// attributed, or the chip reads as one row's facts repeated.
|
|
167
|
-
const named = chip.deltas.length > 1 || chip.deltas[0]?.ref !== chip.key;
|
|
168
|
-
return element('li', { class: 'ig-delta-chip', [KEY_ATTRIBUTE]: chip.key }, [
|
|
169
|
-
element('span', { class: 'ig-delta-key' }, [chip.key]),
|
|
170
|
-
...chip.deltas.map((delta) => memberSpec(delta, words, named)),
|
|
171
|
-
]);
|
|
172
|
-
}
|
|
173
60
|
/** Render the order, and what the last edit did to it. */
|
|
174
61
|
export function renderReevaluate(input, options) {
|
|
175
62
|
const status = options.status ?? 'settled';
|
|
@@ -193,8 +80,7 @@ export function renderReevaluate(input, options) {
|
|
|
193
80
|
// sure of — which is why nothing here re-ranks anything: the ranks drawn
|
|
194
81
|
// are the ones the caller vouched for, and a chip's movement is drawn as
|
|
195
82
|
// a chip rather than as a rank.
|
|
196
|
-
view.
|
|
197
|
-
summarySpec(view.summary, options.words),
|
|
83
|
+
summarySpec(view.summary, options.words, { held: view.held }),
|
|
198
84
|
view.chips.length === 0
|
|
199
85
|
? null
|
|
200
86
|
: element('ul', { class: 'ig-delta-list' }, view.chips.map((chip) => chipSpec(chip, options.words))),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/reevaluate/render.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/reevaluate/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAEH,OAAO,EAGL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAuB,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AA0BnD,0DAA0D;AAC1D,MAAM,UAAU,gBAAgB,CAC9B,KAAqB,EACrB,OAA0B;IAE1B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE;QAC/B,UAAU,EAAE,QAAQ;QACpB,KAAK;QACL,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;KACzF,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,cAAc,CAAC,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAEhE,MAAM,IAAI,GAAG,OAAO,CAClB,SAAS,EACT;QACE,KAAK,EAAE,eAAe;QACtB,uEAAuE;QACvE,0EAA0E;QAC1E,sCAAsC;QACtC,YAAY,EAAE,MAAM;KACrB,EACD;QACE,wEAAwE;QACxE,sEAAsE;QACtE,uEAAuE;QACvE,yEAAyE;QACzE,yEAAyE;QACzE,gCAAgC;QAChC,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC;QAC7D,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YACrB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,CACL,IAAI,EACJ,EAAE,KAAK,EAAE,eAAe,EAAE,EAC1B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CACxD;QACL,0DAA0D;QAC1D,IAAI,CAAC,KAAK,CAAC,IAAI;KAChB,CACF,CAAC;IAEF,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,KAAK,oBAAoB,EAAE;QACjD,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;KACxD,CAAC;AACJ,CAAC"}
|
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
* evidence the edit worked disappears before it is read. A stylesheet is a
|
|
21
21
|
* place both could creep back in.
|
|
22
22
|
*/
|
|
23
|
-
export declare const reevaluateStylesheet = "\n.ig-reevaluate {\n display: flex;\n flex-direction: column;\n gap: var(--ig-space);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size);\n line-height: var(--ig-line-height);\n color: var(--ig-text-body);\n}\n\n/* Greyed one step, and never hidden: a stale order that is labelled is still\n the most useful thing on the screen.\n\n A FILTER, NOT A COLOUR, and that is the whole point of this rule. color on\n the rail greys almost nothing: the viewer's own stylesheet sets color\n directly on .ig-title, .ig-id and .ig-hold, and carries the stations\n and badges in background and border-color, none of which inherit at all.\n A specified value beats an inherited one, so the stale order would have kept\n its normal palette while this rule looked like it was doing something.\n\n The enumeration is the trap here, not the oversight: listing the descendants\n to override is the \"a static rule names one spelling of a capability\"\n class this repository has already paid for several times over, and it would\n go stale the first time layer 1 colours something new. filter applies to\n an element AND its whole subtree whatever properties that subtree sets, so\n a descendant added later is covered by construction. styles.test.ts pins\n both halves: that layer 1 really does colour its own descendants, and that\n this rule is not a bare color. */\n.ig-reevaluate[data-order='held'] .ig-viewer {\n filter: grayscale(1);\n}\n\n.ig-order-computing {\n margin: 0;\n color: var(--ig-text-muted);\n font-size: var(--ig-font-size-small);\n}\n\n.ig-change-summary {\n display: flex;\n gap: var(--ig-space);\n align-items: baseline;\n flex-wrap: wrap;\n}\n\n.ig-change-line {\n display: flex;\n align-items: baseline;\n}\n\n.ig-change-parts {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-wrap: wrap;\n /* The blast radius reads as ONE line. The gap is the separator, so no\n punctuation glyph is baked into the markup \u2014 that would be a second\n language choice on top of the words themselves. */\n gap: var(--ig-space);\n}\n\n.ig-change-part {\n display: flex;\n gap: var(--ig-space-tight);\n align-items: baseline;\n}\n\n.ig-change-count {\n font-family: var(--ig-font-mono);\n color: var(--ig-text);\n}\n\n.ig-change-word {\n color: var(--ig-text-body);\n}\n\n.ig-change-unchanged {\n margin: 0;\n color: var(--ig-text-body);\n}\n\n.ig-change-dismiss {\n align-self: flex-start;\n background: var(--ig-surface-2);\n color: var(--ig-text-body);\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n padding: var(--ig-space-tight) var(--ig-space);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size-small);\n cursor: pointer;\n}\n\n.ig-change-dismiss:focus-visible {\n outline: var(--ig-focus-ring) solid var(--ig-focus);\n outline-offset: var(--ig-space-tight);\n}\n\n.ig-delta-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--ig-space-tight);\n}\n\n.ig-delta-chip {\n display: flex;\n gap: var(--ig-space-tight);\n align-items: baseline;\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n padding: var(--ig-space-tight);\n background: var(--ig-surface-2);\n}\n\n.ig-delta-member {\n display: flex;\n gap: var(--ig-space-tight);\n align-items: baseline;\n}\n\n.ig-delta-key,\n.ig-delta-ref {\n font-family: var(--ig-font-mono);\n color: var(--ig-text-muted);\n}\n\n/* The count and its word are adjacent spans with no text between them, so\n without this they render as 2up. Same reason .ig-change-part has one. */\n.ig-delta-move {\n display: flex;\n gap: var(--ig-space-tight);\n align-items: baseline;\n}\n\n.ig-delta-move[data-direction='up'] .ig-change-count {\n color: var(--ig-station-ready);\n}\n\n.ig-delta-move[data-direction='down'] .ig-change-count {\n color: var(--ig-text-muted);\n}\n\n.ig-delta-readiness[data-readiness='promoted'] {\n color: var(--ig-station-ready);\n}\n\n.ig-delta-readiness[data-readiness='newly-held'] {\n color: var(--ig-station-held);\n}\n\n.ig-delta-presence {\n color: var(--ig-text-muted);\n}\n";
|
|
23
|
+
export declare const reevaluateStylesheet = "\n.ig-reevaluate {\n display: flex;\n flex-direction: column;\n gap: var(--ig-space);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size);\n line-height: var(--ig-line-height);\n color: var(--ig-text-body);\n}\n\n/* Greyed one step, and never hidden: a stale order that is labelled is still\n the most useful thing on the screen.\n\n A FILTER, NOT A COLOUR, and that is the whole point of this rule. color on\n the rail greys almost nothing: the viewer's own stylesheet sets color\n directly on .ig-title, .ig-id and .ig-hold, and carries the stations\n and badges in background and border-color, none of which inherit at all.\n A specified value beats an inherited one, so the stale order would have kept\n its normal palette while this rule looked like it was doing something.\n\n The enumeration is the trap here, not the oversight: listing the descendants\n to override is the \"a static rule names one spelling of a capability\"\n class this repository has already paid for several times over, and it would\n go stale the first time layer 1 colours something new. filter applies to\n an element AND its whole subtree whatever properties that subtree sets, so\n a descendant added later is covered by construction. styles.test.ts pins\n both halves: that layer 1 really does colour its own descendants, and that\n this rule is not a bare color. */\n.ig-reevaluate[data-order='held'] .ig-viewer {\n filter: grayscale(1);\n}\n\n.ig-order-computing {\n margin: 0;\n color: var(--ig-text-muted);\n font-size: var(--ig-font-size-small);\n}\n\n.ig-change-summary {\n display: flex;\n gap: var(--ig-space);\n align-items: baseline;\n flex-wrap: wrap;\n}\n\n.ig-change-line {\n display: flex;\n align-items: baseline;\n}\n\n.ig-change-parts {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-wrap: wrap;\n /* The blast radius reads as ONE line. The gap is the separator, so no\n punctuation glyph is baked into the markup \u2014 that would be a second\n language choice on top of the words themselves. */\n gap: var(--ig-space);\n}\n\n.ig-change-part {\n display: flex;\n gap: var(--ig-space-tight);\n align-items: baseline;\n}\n\n.ig-change-count {\n font-family: var(--ig-font-mono);\n color: var(--ig-text);\n}\n\n.ig-change-word {\n color: var(--ig-text-body);\n}\n\n.ig-change-unchanged {\n margin: 0;\n color: var(--ig-text-body);\n}\n\n.ig-change-dismiss {\n align-self: flex-start;\n background: var(--ig-surface-2);\n color: var(--ig-text-body);\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n padding: var(--ig-space-tight) var(--ig-space);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size-small);\n cursor: pointer;\n}\n\n.ig-change-dismiss:focus-visible {\n outline: var(--ig-focus-ring) solid var(--ig-focus);\n outline-offset: var(--ig-space-tight);\n}\n\n.ig-delta-list {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--ig-space-tight);\n}\n\n.ig-delta-chip {\n display: flex;\n gap: var(--ig-space-tight);\n align-items: baseline;\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n padding: var(--ig-space-tight);\n background: var(--ig-surface-2);\n}\n\n.ig-delta-member {\n display: flex;\n gap: var(--ig-space-tight);\n align-items: baseline;\n}\n\n.ig-delta-key,\n.ig-delta-ref {\n font-family: var(--ig-font-mono);\n color: var(--ig-text-muted);\n}\n\n/* The count and its word are adjacent spans with no text between them, so\n without this they render as 2up. Same reason .ig-change-part has one. */\n.ig-delta-move {\n display: flex;\n gap: var(--ig-space-tight);\n align-items: baseline;\n}\n\n.ig-delta-move[data-direction='up'] .ig-change-count {\n color: var(--ig-station-ready);\n}\n\n.ig-delta-move[data-direction='down'] .ig-change-count {\n color: var(--ig-text-muted);\n}\n\n.ig-delta-readiness[data-readiness='promoted'] {\n color: var(--ig-station-ready);\n}\n\n.ig-delta-readiness[data-readiness='newly-held'] {\n color: var(--ig-station-held);\n}\n\n.ig-delta-presence {\n color: var(--ig-text-muted);\n}\n\n/* THE PLACED CHIP IS NOT A LIST ITEM and does not lay out like one: it sits at\n the end of its row, after whatever the row already drew, and it never grows\n the row's height on its own.\n\n WHAT PUTS IT AT THE TRAILING EDGE IS NOT HERE, and this comment claimed it\n was. It named margin-inline-start: auto, which an earlier revision of this\n rule did set and this one does not \u2014 the ranked row reaches the edge by\n being given a third grid column in workspace/styles.ts instead, and the\n footer row, which is a flex box rather than that grid, is pushed there by a\n rule of its own beside it. Both live with the row shapes they are about;\n what is left here is only what a placed chip looks like whatever it sits in.\n The claim survived the change that falsified it, which is this codebase's\n named failure mode and not a new one. */\n.ig-delta-chip[data-placed] {\n display: inline-flex;\n gap: var(--ig-space-tight);\n align-items: baseline;\n align-self: center;\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n padding: 0 var(--ig-space-tight);\n background: var(--ig-surface-2);\n font-size: var(--ig-font-size-small);\n}\n\n";
|
|
24
24
|
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/reevaluate/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,eAAO,MAAM,oBAAoB,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/reevaluate/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,eAAO,MAAM,oBAAoB,00KAwLhC,CAAC"}
|
|
@@ -178,5 +178,31 @@ export const reevaluateStylesheet = `
|
|
|
178
178
|
.ig-delta-presence {
|
|
179
179
|
color: var(--ig-text-muted);
|
|
180
180
|
}
|
|
181
|
+
|
|
182
|
+
/* THE PLACED CHIP IS NOT A LIST ITEM and does not lay out like one: it sits at
|
|
183
|
+
the end of its row, after whatever the row already drew, and it never grows
|
|
184
|
+
the row's height on its own.
|
|
185
|
+
|
|
186
|
+
WHAT PUTS IT AT THE TRAILING EDGE IS NOT HERE, and this comment claimed it
|
|
187
|
+
was. It named margin-inline-start: auto, which an earlier revision of this
|
|
188
|
+
rule did set and this one does not — the ranked row reaches the edge by
|
|
189
|
+
being given a third grid column in workspace/styles.ts instead, and the
|
|
190
|
+
footer row, which is a flex box rather than that grid, is pushed there by a
|
|
191
|
+
rule of its own beside it. Both live with the row shapes they are about;
|
|
192
|
+
what is left here is only what a placed chip looks like whatever it sits in.
|
|
193
|
+
The claim survived the change that falsified it, which is this codebase's
|
|
194
|
+
named failure mode and not a new one. */
|
|
195
|
+
.ig-delta-chip[data-placed] {
|
|
196
|
+
display: inline-flex;
|
|
197
|
+
gap: var(--ig-space-tight);
|
|
198
|
+
align-items: baseline;
|
|
199
|
+
align-self: center;
|
|
200
|
+
border: var(--ig-stroke) solid var(--ig-line);
|
|
201
|
+
border-radius: var(--ig-radius);
|
|
202
|
+
padding: 0 var(--ig-space-tight);
|
|
203
|
+
background: var(--ig-surface-2);
|
|
204
|
+
font-size: var(--ig-font-size-small);
|
|
205
|
+
}
|
|
206
|
+
|
|
181
207
|
`;
|
|
182
208
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/reevaluate/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/reevaluate/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,MAAM,CAAC,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAwLnC,CAAC"}
|
|
@@ -98,5 +98,20 @@ export declare function summaryOf(change: OrderChange): ChangeSummary;
|
|
|
98
98
|
* report — NOT that nothing happened, which is what {@link ChangeSummary.unchanged}
|
|
99
99
|
* says.
|
|
100
100
|
*/
|
|
101
|
-
|
|
101
|
+
/**
|
|
102
|
+
* Refs the CALLER knows are in the order but not in this scene.
|
|
103
|
+
*
|
|
104
|
+
* WITHOUT IT A DIAGNOSTIC CANNOT TELL TWO THINGS APART, and they are opposite
|
|
105
|
+
* facts: a projection that disagrees with the change — the defect worth
|
|
106
|
+
* reporting — and a surface that deliberately drew fewer rows than the order
|
|
107
|
+
* has. The workspace does the second on every render: its rail is windowed, and
|
|
108
|
+
* its audit filter narrows it further. Both are ordinary, and a diagnostic for
|
|
109
|
+
* either is noise that trains a host to ignore the ones that matter.
|
|
110
|
+
*
|
|
111
|
+
* A SET OF REFS RATHER THAN A BOOLEAN, because "this surface windows" is not
|
|
112
|
+
* the question. A ref in the order but off-window is expected; a ref in NO row
|
|
113
|
+
* of the order at all is the inconsistency, and only the caller holding the
|
|
114
|
+
* unwindowed order can tell which one it has.
|
|
115
|
+
*/
|
|
116
|
+
export declare function reevaluateView(change: OrderChange | null | undefined, scene: Scene, status: OrderStatus, expected?: ReadonlySet<string>): ReevaluateView;
|
|
102
117
|
//# sourceMappingURL=view.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/reevaluate/view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAgB,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACjH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,iEAMf,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAmBzD,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IACzB,gFAAgF;IAChF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAY5D;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACtC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/reevaluate/view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,OAAO,KAAK,EAAgB,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACjH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,iEAMf,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAmBzD,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,yEAAyE;AACzE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAC5B,yEAAyE;IACzE,QAAQ,CAAC,KAAK,EAAE,SAAS,WAAW,EAAE,CAAC;IACvC;;;;;;;;OAQG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;;;;;;;GAUG;AACH,MAAM,WAAW,UAAU;IACzB,gFAAgF;IAChF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED,MAAM,WAAW,cAAc;IAC7B,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAAC;IACvC,oEAAoE;IACpE,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,0EAA0E;IAC1E,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAED,6EAA6E;AAC7E,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAY5D;AAED;;;;;;;GAOG;AACH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,GAAG,IAAI,GAAG,SAAS,EACtC,KAAK,EAAE,KAAK,EACZ,MAAM,EAAE,WAAW,EACnB,QAAQ,GAAE,WAAW,CAAC,MAAM,CAAa,GACxC,cAAc,CAgChB"}
|