@issuegraph/editor 0.4.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.
Files changed (137) hide show
  1. package/README.md +65 -9
  2. package/dist/a11y/baseline.d.ts +182 -0
  3. package/dist/a11y/baseline.d.ts.map +1 -0
  4. package/dist/a11y/baseline.js +434 -0
  5. package/dist/a11y/baseline.js.map +1 -0
  6. package/dist/audit/findings.d.ts +107 -1
  7. package/dist/audit/findings.d.ts.map +1 -1
  8. package/dist/audit/findings.js +113 -6
  9. package/dist/audit/findings.js.map +1 -1
  10. package/dist/audit/panel.d.ts +277 -0
  11. package/dist/audit/panel.d.ts.map +1 -0
  12. package/dist/audit/panel.js +462 -0
  13. package/dist/audit/panel.js.map +1 -0
  14. package/dist/audit/refused.d.ts +99 -0
  15. package/dist/audit/refused.d.ts.map +1 -0
  16. package/dist/audit/refused.js +276 -0
  17. package/dist/audit/refused.js.map +1 -0
  18. package/dist/audit/styles.d.ts +1 -1
  19. package/dist/audit/styles.d.ts.map +1 -1
  20. package/dist/audit/styles.js +429 -1
  21. package/dist/audit/styles.js.map +1 -1
  22. package/dist/audit/surface.d.ts +54 -12
  23. package/dist/audit/surface.d.ts.map +1 -1
  24. package/dist/audit/surface.js +53 -13
  25. package/dist/audit/surface.js.map +1 -1
  26. package/dist/create/draft.d.ts +36 -0
  27. package/dist/create/draft.d.ts.map +1 -1
  28. package/dist/create/draft.js +40 -0
  29. package/dist/create/draft.js.map +1 -1
  30. package/dist/create/keys.d.ts +134 -9
  31. package/dist/create/keys.d.ts.map +1 -1
  32. package/dist/create/keys.js +119 -20
  33. package/dist/create/keys.js.map +1 -1
  34. package/dist/firstpass/candidates.d.ts +17 -1
  35. package/dist/firstpass/candidates.d.ts.map +1 -1
  36. package/dist/index.d.ts +42 -17
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +45 -14
  39. package/dist/index.js.map +1 -1
  40. package/dist/overlay/render.d.ts +11 -3
  41. package/dist/overlay/render.d.ts.map +1 -1
  42. package/dist/overlay/render.js +76 -20
  43. package/dist/overlay/render.js.map +1 -1
  44. package/dist/overlay/request.d.ts +71 -0
  45. package/dist/overlay/request.d.ts.map +1 -0
  46. package/dist/overlay/request.js +129 -0
  47. package/dist/overlay/request.js.map +1 -0
  48. package/dist/overlay/styles.d.ts +1 -1
  49. package/dist/overlay/styles.d.ts.map +1 -1
  50. package/dist/overlay/styles.js +78 -7
  51. package/dist/overlay/styles.js.map +1 -1
  52. package/dist/picker/render.d.ts +26 -16
  53. package/dist/picker/render.d.ts.map +1 -1
  54. package/dist/picker/render.js +25 -36
  55. package/dist/picker/render.js.map +1 -1
  56. package/dist/picker/styles.d.ts +7 -7
  57. package/dist/picker/styles.d.ts.map +1 -1
  58. package/dist/picker/styles.js +7 -36
  59. package/dist/picker/styles.js.map +1 -1
  60. package/dist/picker/view.d.ts +8 -4
  61. package/dist/picker/view.d.ts.map +1 -1
  62. package/dist/picker/view.js +4 -3
  63. package/dist/picker/view.js.map +1 -1
  64. package/dist/picker/words.d.ts +12 -10
  65. package/dist/picker/words.d.ts.map +1 -1
  66. package/dist/picker/words.js +12 -8
  67. package/dist/picker/words.js.map +1 -1
  68. package/dist/reevaluate/parts.d.ts +130 -0
  69. package/dist/reevaluate/parts.d.ts.map +1 -0
  70. package/dist/reevaluate/parts.js +260 -0
  71. package/dist/reevaluate/parts.js.map +1 -0
  72. package/dist/reevaluate/render.d.ts +18 -11
  73. package/dist/reevaluate/render.d.ts.map +1 -1
  74. package/dist/reevaluate/render.js +21 -135
  75. package/dist/reevaluate/render.js.map +1 -1
  76. package/dist/reevaluate/styles.d.ts +1 -1
  77. package/dist/reevaluate/styles.d.ts.map +1 -1
  78. package/dist/reevaluate/styles.js +26 -0
  79. package/dist/reevaluate/styles.js.map +1 -1
  80. package/dist/reevaluate/view.d.ts +16 -1
  81. package/dist/reevaluate/view.d.ts.map +1 -1
  82. package/dist/reevaluate/view.js +21 -1
  83. package/dist/reevaluate/view.js.map +1 -1
  84. package/dist/reevaluate/words.d.ts +7 -0
  85. package/dist/reevaluate/words.d.ts.map +1 -1
  86. package/dist/scale/ladder.d.ts +62 -6
  87. package/dist/scale/ladder.d.ts.map +1 -1
  88. package/dist/scale/ladder.js +129 -11
  89. package/dist/scale/ladder.js.map +1 -1
  90. package/dist/scale/render.d.ts +44 -0
  91. package/dist/scale/render.d.ts.map +1 -1
  92. package/dist/scale/render.js +206 -28
  93. package/dist/scale/render.js.map +1 -1
  94. package/dist/scale/styles.d.ts +11 -5
  95. package/dist/scale/styles.d.ts.map +1 -1
  96. package/dist/scale/styles.js +133 -4
  97. package/dist/scale/styles.js.map +1 -1
  98. package/dist/workspace/chrome.d.ts +1 -1
  99. package/dist/workspace/chrome.d.ts.map +1 -1
  100. package/dist/workspace/chrome.js +48 -0
  101. package/dist/workspace/chrome.js.map +1 -1
  102. package/dist/workspace/firstpass.d.ts +166 -0
  103. package/dist/workspace/firstpass.d.ts.map +1 -0
  104. package/dist/workspace/firstpass.js +151 -0
  105. package/dist/workspace/firstpass.js.map +1 -0
  106. package/dist/workspace/host.d.ts +283 -11
  107. package/dist/workspace/host.d.ts.map +1 -1
  108. package/dist/workspace/host.js +614 -43
  109. package/dist/workspace/host.js.map +1 -1
  110. package/dist/workspace/inspector.d.ts +72 -2
  111. package/dist/workspace/inspector.d.ts.map +1 -1
  112. package/dist/workspace/inspector.js +26 -0
  113. package/dist/workspace/inspector.js.map +1 -1
  114. package/dist/workspace/mount.d.ts +75 -6
  115. package/dist/workspace/mount.d.ts.map +1 -1
  116. package/dist/workspace/mount.js +1851 -60
  117. package/dist/workspace/mount.js.map +1 -1
  118. package/dist/workspace/rail.d.ts +5 -2
  119. package/dist/workspace/rail.d.ts.map +1 -1
  120. package/dist/workspace/rail.js.map +1 -1
  121. package/dist/workspace/recovery.d.ts +155 -0
  122. package/dist/workspace/recovery.d.ts.map +1 -0
  123. package/dist/workspace/recovery.js +156 -0
  124. package/dist/workspace/recovery.js.map +1 -0
  125. package/dist/workspace/render.d.ts +779 -2
  126. package/dist/workspace/render.d.ts.map +1 -1
  127. package/dist/workspace/render.js +1727 -61
  128. package/dist/workspace/render.js.map +1 -1
  129. package/dist/workspace/selection.d.ts +11 -0
  130. package/dist/workspace/selection.d.ts.map +1 -1
  131. package/dist/workspace/selection.js +10 -0
  132. package/dist/workspace/selection.js.map +1 -1
  133. package/dist/workspace/styles.d.ts +1 -1
  134. package/dist/workspace/styles.d.ts.map +1 -1
  135. package/dist/workspace/styles.js +1405 -42
  136. package/dist/workspace/styles.js.map +1 -1
  137. package/package.json +4 -4
@@ -143,7 +143,7 @@ function compareMembers(a, b) {
143
143
  * and no detector can produce one, so silence would hide a defect rather than
144
144
  * tolerate an input.
145
145
  */
146
- function finding(kind, members, detail) {
146
+ function finding(kind, members, detail, walk, edge) {
147
147
  const spec = AUDIT_CLASS_SPECS[kind];
148
148
  // A SORTED SET. Sorting is what makes two runs over one document produce
149
149
  // equal findings; deduplication matters because the row grammar counts one
@@ -151,12 +151,34 @@ function finding(kind, members, detail) {
151
151
  const named = Object.freeze([...new Set(members)].sort());
152
152
  if (named.length === 0)
153
153
  throw new Error(`unreachable: a ${kind} finding names no issues`);
154
+ // COPIED AND FROZEN LIKE `named`, AND FOR THE SAME REASON ONE LINE UP: this
155
+ // one comes straight off a HOST's function, so without the copy the finding
156
+ // holds an array its caller can still reach and reorder. Not sorted and not
157
+ // deduplicated, though — the order IS the value here, and a walk that repeats
158
+ // a ref would be a defect in the reader rather than an input to normalize.
159
+ // AN EMPTY WALK IS AN ABSENT ONE. No conforming reader answers `[]` — a
160
+ // component it declines to order answers `null` — but the two would otherwise
161
+ // be different values that draw identically and key differently in `distinct`
162
+ // below, which is the absence-rendered-as-a-value shape this module refuses
163
+ // elsewhere.
164
+ const walked = walk === null || walk === undefined || walk.length === 0
165
+ ? undefined
166
+ : Object.freeze([...walk]);
154
167
  return Object.freeze({
155
168
  kind,
156
169
  severity: spec.severity,
157
170
  keepAsHistory: spec.keepAsHistory,
158
171
  members: named,
159
172
  detail,
173
+ // SPREAD RATHER THAN ASSIGNED `undefined`, because an explicitly-undefined
174
+ // property is not the same value as an absent one to a caller enumerating
175
+ // keys — `distinct` below is one such caller. (`exactOptionalPropertyTypes`
176
+ // would permit the plain assignment: the field is declared `| undefined`.)
177
+ ...(walked === undefined ? {} : { walk: walked }),
178
+ // SPREAD FOR THE REASON THE LINE ABOVE IS, and the same reason again: an
179
+ // explicitly-undefined property is not an absent one to `distinct`, which
180
+ // enumerates.
181
+ ...(edge === undefined || edge === null ? {} : { edge }),
160
182
  });
161
183
  }
162
184
  function edgesOfKind(document, kind) {
@@ -219,12 +241,36 @@ resolveFrom) {
219
241
  * An empty group is skipped rather than drawn: a finding naming nobody would
220
242
  * add to the header count while giving a reader nothing to navigate to.
221
243
  */
244
+ /**
245
+ * The first walk any member of `members` names, or `null`.
246
+ *
247
+ * See the call site for why it asks more than one.
248
+ */
249
+ function walkOfComponent(graph, members) {
250
+ for (const ref of members) {
251
+ const walk = graph.cycleWalk?.(ref);
252
+ if (walk !== null && walk !== undefined)
253
+ return walk;
254
+ }
255
+ return null;
256
+ }
222
257
  function cycleFindings(graph) {
223
258
  return graph.cycles
224
259
  .filter((members) => members.length > 0)
225
260
  .map((members) => [...members].sort())
226
261
  .sort((a, b) => compareMembers(a, b))
227
- .map((members) => finding('cycle', members, `${members.join(' · ')} form a blocked-by cycle; no member can ever become ready`));
262
+ .map((members) => finding('cycle', members, `${members.join(' · ')} form a blocked-by cycle; no member can ever become ready`,
263
+ // ASKED PER COMPONENT AND STILL A PASS-THROUGH. The reader decides
264
+ // whether there IS a walk; this module neither computes nor
265
+ // second-guesses that. Asking by KEY rather than by position is what
266
+ // lets the filter and the two sorts above stay exactly as they were —
267
+ // there is no index left to keep in step.
268
+ //
269
+ // EVERY MEMBER, NOT JUST THE FIRST. Within the READER's group they all
270
+ // answer the same walk, so one would do — but `members` is the HOST's
271
+ // array, and a single ref the reader does not hold would drop the walk
272
+ // for the whole component if it happened to sort first.
273
+ walkOfComponent(graph, members)));
228
274
  }
229
275
  /**
230
276
  * A `blocked-by` whose EFFECTIVE target is closed.
@@ -272,7 +318,11 @@ function staleBlockerFindings(document, graph, refused) {
272
318
  // spelling shape that forced the dead-duplicate change cannot reach here:
273
319
  // a target the document does not carry is never resolved on the `'to'`
274
320
  // side, so the finding is withheld as unknown rather than mis-membered.
275
- findings.push(finding('stale-blocker', [edge.from, edge.to].sort(), `${edge.from} is blocked-by ${effective}${via}, which is closed; readiness is already satisfied`));
321
+ findings.push(finding('stale-blocker', [edge.from, edge.to].sort(), `${edge.from} is blocked-by ${effective}${via}, which is closed; readiness is already satisfied`, null,
322
+ // THE DECLARER'S EDGE, which is what the paragraph above already says
323
+ // this finding's remedy sits on. Now it is carried rather than only
324
+ // described, so `Remove the edge` can name it.
325
+ { id: edge.id, from: edge.from, to: edge.to }));
276
326
  }
277
327
  return findings.sort((a, b) => compareMembers(a.members, b.members));
278
328
  }
@@ -327,7 +377,11 @@ function deadDuplicateFindings(document, graph, refused) {
327
377
  const canonical = verdict.effective;
328
378
  const via = canonical === edge.to ? '' : ` (through ${edge.to})`;
329
379
  // `finding` deduplicates, so the same-spelling case stays two members.
330
- findings.push(finding('dead-duplicate-ref', [edge.from, edge.to, canonical].sort(), `${edge.from} is duplicate-of ${canonical}${via}, which is closed; its work is excluded from the order and tracked nowhere`));
380
+ findings.push(finding('dead-duplicate-ref', [edge.from, edge.to, canonical].sort(), `${edge.from} is duplicate-of ${canonical}${via}, which is closed; its work is excluded from the order and tracked nowhere`, null,
381
+ // THE DECLARED `duplicate-of`, NOT the chain's end. `Repoint or clear`
382
+ // acts on the edge the reader wrote; `canonical` may be several hops
383
+ // away and is named in the sentence instead.
384
+ { id: edge.id, from: edge.from, to: edge.to }));
331
385
  }
332
386
  return findings.sort((a, b) => compareMembers(a.members, b.members));
333
387
  }
@@ -370,11 +424,64 @@ export function auditDocument(input) {
370
424
  const { document, graph } = input;
371
425
  const refusals = input.encodingRefused ?? [];
372
426
  const refused = new Set(refusals.map((refusal) => refusal.ref));
373
- return Object.freeze([
427
+ return Object.freeze(distinct([
374
428
  ...cycleFindings(graph),
375
429
  ...staleBlockerFindings(document, graph, refused),
376
430
  ...deadDuplicateFindings(document, graph, refused),
377
431
  ...encodingRefusedFindings(refusals),
378
- ]);
432
+ ]));
433
+ }
434
+ /**
435
+ * One entry per distinct finding, keeping the first of any repeat.
436
+ *
437
+ * A FINDING IS WHAT IT SAYS. `detail` is composed from the very edge or members
438
+ * the finding is about, so two findings with one kind, one member set and one
439
+ * sentence are not two findings — they are one, found twice.
440
+ *
441
+ * THE INPUT THAT PRODUCES THEM IS SUPPORTED REDUNDANCY, NOT MALFORMED DATA.
442
+ * `@issuegraph/viewer`'s `indexEdges` collapses an exact repeated directed edge
443
+ * into one relationship without a diagnostic, so a store document carrying the
444
+ * same `blocked-by` twice is ordinary; the audit reads that document
445
+ * unnormalized and its per-edge detectors duly emit one finding per occurrence.
446
+ *
447
+ * IT IS DONE HERE RATHER THAN IN EACH DETECTOR, and rather than in a renderer.
448
+ * A detector deduplicating its own output would be four copies of one rule, and
449
+ * `encodingRefusedFindings` already carries a fifth for refusals. A renderer
450
+ * doing it would leave the HEADER COUNT wrong — a repeated edge would have said
451
+ * "3 encoding problems" over a list of two.
452
+ *
453
+ * THE COUNT NOW SPANS TWO SURFACES, AND THAT DOES NOT RELAX THIS RULE. §17d's
454
+ * fourth class is drawn by `./refused.ts` rather than listed by `./panel.ts`,
455
+ * so the ambient count in `./surface.ts` is a count of the panel's cards PLUS
456
+ * the refused block's. `./refused.ts` repeats the by-ref rule above for its own
457
+ * list — one line, stated in its header, and pinned by `./panel.test.ts` —
458
+ * because a card count that disagreed with the finding count would break the
459
+ * same arithmetic, one surface over.
460
+ */
461
+ function distinct(findings) {
462
+ const seen = new Set();
463
+ const out = [];
464
+ for (const found of findings) {
465
+ // THE MEMBERS ARE IN THE KEY AS WELL AS THE SENTENCE. `detail` determines
466
+ // them today for every detector, but the key should not rest on a property
467
+ // of the prose: a class that ever states two member sets in one sentence
468
+ // would silently drop a finding rather than fail a test.
469
+ // AND THE WALK, by the same argument the paragraph above makes about the
470
+ // sentence: two findings that agree on class, members and prose but name
471
+ // different orderings are two findings, and a key that cannot see the
472
+ // difference would drop one silently. No conforming reader produces that
473
+ // pair — a component has one walk — which is precisely why the key should
474
+ // not be the thing that depends on it staying true.
475
+ // AND THE EDGE, by the argument the two paragraphs above make about the
476
+ // sentence and the walk: two findings agreeing on class, members and prose
477
+ // while naming different edges are two findings, and a key that cannot see
478
+ // the difference drops one silently.
479
+ const key = `${found.kind}\u0000${found.members.join('\u0001')}\u0000${found.detail}\u0000${(found.walk ?? []).join('\u0001')}\u0000${found.edge?.id ?? ''}`;
480
+ if (seen.has(key))
481
+ continue;
482
+ seen.add(key);
483
+ out.push(found);
484
+ }
485
+ return out;
379
486
  }
380
487
  //# sourceMappingURL=findings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/audit/findings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"findings.js","sourceRoot":"","sources":["../../src/audit/findings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,277 @@
1
+ /**
2
+ * §17d's findings panel: the three RELATIONSHIP findings, as a list.
3
+ *
4
+ * `./surface.ts` draws the ambient half — the persistent header count and the
5
+ * left-bar on an affected rail row. Neither says what was found. This module
6
+ * draws the list, so a reader who sees a count has somewhere to read it.
7
+ *
8
+ * ## Three classes, not four — the fourth is `./refused.ts`'
9
+ *
10
+ * `encoding-refused` is drawn OUTSIDE this panel, and SPEC is why: a refusal is
11
+ * *"surfaced on the issue itself, because until it parses the issue has no
12
+ * edges at all and would otherwise look simply unencoded"*. The other three
13
+ * say something about a relationship that exists; that one says the
14
+ * relationships cannot be read.
15
+ *
16
+ * SO THERE ARE TWO COUNTS NOW, AND THEY ARE DIFFERENT NUMBERS ON PURPOSE.
17
+ * `./surface.ts`'s ambient count stays every finding — it is the persistent
18
+ * control, it sits in the workspace chrome beside both surfaces, and a reader
19
+ * works through all four classes. The count in THIS panel's head is this
20
+ * panel's own cards, because it is enclosed by the list it counts. See
21
+ * {@link renderAuditPanel}.
22
+ *
23
+ * ## It is the module `./surface.ts` predicted
24
+ *
25
+ * That file's rule is *"findings travel as data; whatever lists them owns their
26
+ * escaping"*, and it is still true of it: `renderAuditHeader` concatenates by
27
+ * hand and is safe because the only value reaching it is a COUNT. A `detail` is
28
+ * not a number — it is prose about issues a host supplied — so this module is
29
+ * the lister that owns the escaping, and it owns it the way every other leaf in
30
+ * this package does: it builds an {@link ElementSpec} tree and the caller renders
31
+ * it through the viewer's `renderMarkup`. Nothing here writes a tag.
32
+ *
33
+ * ## The card is THREE lines, or FOUR when the finding carries a walk
34
+ *
35
+ * The frame draws a chip, a title, a mono line of the refs, and a prose
36
+ * paragraph. This module long drew three, on this argument: `AuditFinding.detail`
37
+ * ALREADY OPENS WITH THE MEMBERS — `${members.join(' · ')} form a blocked-by
38
+ * cycle; …` — so *"drawing a members line beside it prints every reference
39
+ * twice"*.
40
+ *
41
+ * THAT ARGUMENT WAS RIGHT ABOUT A LINE THE FRAME DOES NOT DRAW. The frame's
42
+ * third line is `#544 → #551 → #560 → #544` — a WALK, not the `·`-joined set
43
+ * the sentence opens with. Calling it "a mono line of the refs" was the slip:
44
+ * the line that was declined and the line drawn below are not the same line, and
45
+ * the refs are the only thing they have in common.
46
+ *
47
+ * SO THE COST IS CONCEDED RATHER THAN ARGUED AWAY. On a card that carries a
48
+ * walk the refs really do appear twice, and the head three times. What buys it
49
+ * is the one thing the sentence cannot say: `#544 · #551 · #560` does not say
50
+ * who waits on whom, and a stuck group's ordering is the first thing a groomer
51
+ * needs in order to pick an edge to cut. Direction appears nowhere else on the
52
+ * card.
53
+ *
54
+ * `detail` IS LEFT BYTE-IDENTICAL, and composing the walk INTO it was the
55
+ * alternative. It is rejected on §17d rather than on the accessible name — a
56
+ * walk-composed sentence would be collision-free by the same construction the
57
+ * current one is, so that cost is not real. The reason is that the frame draws a
58
+ * SEPARATE line and this section is delivered as a frame/implementation pair, so
59
+ * folding it into the sentence deviates from the artifact the work is measured
60
+ * against; and it would give `detail` two shapes, since a component §6.6
61
+ * declines to order has no walk to compose.
62
+ *
63
+ * THE ARROW GLYPH IS `aria-hidden`, AND THAT IS A GAP RATHER THAN A WIN. The
64
+ * only thing the line adds is direction, and the glyph does not carry it: `→`
65
+ * announces as "right arrow", not "waits on". Announcing the line anyway would
66
+ * repeat three refs `detail` has just named, in a form that has lost the reason
67
+ * it was drawn — the same trade `renderAuditPanel`'s `◆` makes below. The
68
+ * remaining options were a visually-hidden utility this package does not have,
69
+ * or an `aria-label` on a `p` with no role, which is not reliably announced. So
70
+ * a screen reader hears exactly what it heard before this line existed, and the
71
+ * ordering is genuinely lost to it. Filed, not resolved here.
72
+ *
73
+ * THE TITLE IS PER CLASS, AND THE FRAME'S ARE PER FINDING. `AuditFinding` has no
74
+ * title field, and this package appends numbers rather than interpolating them
75
+ * (`WorkspaceWords.whyRank` records why), so a per-finding title would need a
76
+ * template language this package has twice refused to ship. Four fixed titles
77
+ * keep the frame's type hierarchy at no cost to the data model; the difference
78
+ * is a stated deviation rather than a silent one.
79
+ *
80
+ * ## The chip carries `data-ig-audit-kind`, NEVER `data-ig-audit`
81
+ *
82
+ * `./styles.ts` ends with an UNQUALIFIED `[data-ig-audit]` rule — deliberately,
83
+ * because it lands on a row the viewer rendered and this layer may not rewrite
84
+ * that row's `class`. So an element out here carrying the same attribute picks
85
+ * up the rail's 2px gold left-bar whatever hue it was given, and the four-hue
86
+ * chip mapping would draw one gold bar on all four. The severity attribute stays
87
+ * reserved for the rail rows it was scoped for.
88
+ *
89
+ * ## There is no filter control here, and that is SPEC's call rather than a cut
90
+ *
91
+ * The frame's panel header carries `filter the rail to these`. SPEC §17a gives
92
+ * the workspace *"an audit **filter** … for focus; an audit **mode** does not"*,
93
+ * and §17d gives the header count one job — *"always the same click"*. That is
94
+ * one control, which `./surface.ts` already draws and which is on screen beside
95
+ * this panel. A second element on `data-ig-audit-filter` would be a second
96
+ * TOGGLE for one boolean (`workspace/host.ts` flips rather than sets), one
97
+ * announcing `aria-pressed` and one not.
98
+ *
99
+ * The frame needs its own because it draws the panel STANDALONE, with no
100
+ * workspace header in the artboard. Composed, it has one.
101
+ *
102
+ * ## `Show the loop` is in, because §17d's rule is navigation
103
+ *
104
+ * `./surface.ts` states the section's own doctrine: *"every finding is a
105
+ * judgment call, so the surface offers navigation and never a remedy."* The
106
+ * frame's other three buttons are remedies and are deferred. Without this one
107
+ * the panel is a paragraph you cannot act on or navigate from, sitting at the
108
+ * top of a column whose whole job is the selection.
109
+ *
110
+ * IT PUBLISHES `reveal-issue`, NOT the `select-issue` the inspector's hold rows
111
+ * use, and the difference is the whole of the control's safety. `select-issue`
112
+ * is a POINTER: with a relationship draft awaiting its target, `workspace/host
113
+ * .ts` reads a pointer as CHOOSING that target and emits the create proposal.
114
+ * So "go and look" would have declared a relationship — a write, from the one
115
+ * surface whose stated rule is that it never offers one. `reveal-issue` moves
116
+ * the selection and abandons the draft, and can produce no edit at all.
117
+ *
118
+ * AND IT IS DRAWN ONLY FOR A LOADED MEMBER — see {@link navigableMember}.
119
+ *
120
+ * @see https://github.com/autnmy/issuegraph/blob/main/SPEC.md
121
+ */
122
+ import { type ElementSpec } from '@issuegraph/viewer';
123
+ import type { AuditClass } from './findings.ts';
124
+ import type { AuditOverlay } from './surface.ts';
125
+ /**
126
+ * The attribute a severity chip carries.
127
+ *
128
+ * ITS OWN NAME RATHER THAN `AUDIT_SEVERITY_ATTRIBUTE`, for the reason in this
129
+ * module's header: that one is matched by an unqualified rule meant for rail
130
+ * rows, and a chip wearing it would draw the ambient bar.
131
+ */
132
+ export declare const AUDIT_KIND_ATTRIBUTE = "data-ig-audit-kind";
133
+ /**
134
+ * The words this package will not invent.
135
+ *
136
+ * TOTAL RECORDS OVER {@link AuditClass}, the shape `AUDIT_CLASS_SPECS` already
137
+ * uses, so adding a fifth class is a type error here rather than a chip that
138
+ * silently draws its own key.
139
+ */
140
+ export interface AuditWords {
141
+ /** Reads the panel's header after the count — the frame's `encoding problems`. */
142
+ readonly heading: string;
143
+ /** The chip on each card. The frame's `cycle`, `stale`, `dead ref`, `refused`. */
144
+ readonly classes: Readonly<Record<AuditClass, string>>;
145
+ /**
146
+ * The card's title line.
147
+ *
148
+ * ONE PER CLASS. See this module's header for why the frame's per-finding
149
+ * titles are not reconstructible.
150
+ */
151
+ readonly titles: Readonly<Record<AuditClass, string>>;
152
+ /** The navigation control on each card — the frame's `Show the loop`. */
153
+ readonly show: string;
154
+ /**
155
+ * The panel head's filter control — the frame's `filter the rail to these`.
156
+ *
157
+ * IT LIVES HERE NOW RATHER THAN IN THE HEADER. §17d draws it in the panel
158
+ * head, and `RULINGS.md` §3 gives the header count one job instead: anchoring
159
+ * this overlay. One control, one meaning, each.
160
+ */
161
+ readonly filter: string;
162
+ /**
163
+ * §17d's REMEDIES, one label per control the frame draws.
164
+ *
165
+ * `RULINGS.md` §3 makes these required and forbids auto-fix in the same
166
+ * breath: *"Every button it draws costs one deliberate human keystroke."*
167
+ * None of them writes. Each selects the finding's subject and hands the work
168
+ * to the inspector, which already owns every edit affordance — so the label
169
+ * names the reader's INTENT and the inspector performs it.
170
+ *
171
+ * ONE RECORD, NOT ONE PER CLASS, because the frame gives each class its own
172
+ * wording rather than a shared verb: a `blocked-by` is removed, a
173
+ * `duplicate-of` is repointed, and a cycle is neither.
174
+ */
175
+ readonly remedies: AuditRemedyWords;
176
+ /**
177
+ * The refused block's own heading — the frame's `Encoding refused`.
178
+ *
179
+ * THE LAST THREE BELONG TO `./refused.ts`, AND THEY LIVE HERE ANYWAY. §17d is
180
+ * one section and its words are one record: a host wiring the audit supplies
181
+ * `AuditWords` once, and splitting a second record off for the fourth class
182
+ * would let a host supply half a section. `classes` and `titles` are already
183
+ * total over `AuditClass`, which includes `encoding-refused` — so the words
184
+ * for that class were never going to sit anywhere else.
185
+ */
186
+ readonly refusedHeading: string;
187
+ /** The outward link's label. The package draws the `↗`. */
188
+ readonly refusedOpen: string;
189
+ /** The reveal control's label — the frame's `Rewrite from editor`. */
190
+ readonly refusedRewrite: string;
191
+ }
192
+ /**
193
+ * The four remedy labels §17d draws, and no others.
194
+ *
195
+ * NOT TOTAL OVER `AuditClass`, unlike `classes` and `titles`. The frame gives
196
+ * `cycle` one remedy, `stale-blocker` two, `dead-duplicate-ref` one and
197
+ * `encoding-refused` none — the refusal's own controls are `refusedOpen` and
198
+ * `refusedRewrite`, which already exist. A record keyed by class would make a
199
+ * host supply a label for a button nothing draws.
200
+ */
201
+ export interface AuditRemedyWords {
202
+ /** The frame's `pick one edge to drop`, on a cycle. */
203
+ readonly pickEdge: string;
204
+ /** The frame's `Remove the edge`, on a stale blocker. */
205
+ readonly removeEdge: string;
206
+ /**
207
+ * The frame's `Keep as history`, on a stale blocker and nowhere else.
208
+ *
209
+ * Drawn from {@link AuditFinding.keepAsHistory}, which the class table
210
+ * already sets — `true` for `stale-blocker` alone. The field predates this
211
+ * control and was waiting for it.
212
+ */
213
+ readonly keepAsHistory: string;
214
+ /** The frame's `Repoint or clear`, on a dead duplicate ref. */
215
+ readonly repoint: string;
216
+ }
217
+ export interface AuditPanelOptions {
218
+ readonly words: AuditWords;
219
+ /**
220
+ * The edge ids the drawn surface actually holds.
221
+ *
222
+ * THE SAME ARGUMENT `known` MAKES ONE FIELD UP, and it needs its own field
223
+ * for the reason a review round proved: the endpoints do not answer it. Two
224
+ * issues can both be on the drawn page while the edge between them is NOT —
225
+ * `mount.ts` deliberately preserves such omissions — and a remedy gated on
226
+ * the ends alone then publishes `select-edge` for an edge the host cannot
227
+ * resolve, leaving the reader with a button that clears their selection and
228
+ * opens an inspector with no subject.
229
+ *
230
+ * That was the first fix's mistake: "both ends drawn" is a PROXY for "the
231
+ * edge is drawn", and this is the thing itself.
232
+ */
233
+ readonly edges: ReadonlySet<string>;
234
+ /**
235
+ * Whether the rail is currently narrowed to these findings.
236
+ *
237
+ * The panel DRAWS the state and never holds it: §2's ruling makes the filter
238
+ * a thing the reader can see is on and clear in one click, and the host owns
239
+ * which rows the rail is showing.
240
+ */
241
+ readonly filtered?: boolean | undefined;
242
+ /**
243
+ * The keys the surface being drawn actually carries, so navigation can only
244
+ * name somewhere the reader can arrive.
245
+ *
246
+ * REQUIRED, AND IT IS THE CALLER'S ANSWER RATHER THAN ONE DERIVED HERE. The
247
+ * audit reads a document that is not always the document on screen: a host
248
+ * audits the whole repository it holds and renders a page of it — the demo's
249
+ * own projection audits `held` while drawing `landed`, which can be empty —
250
+ * so a ref present in `AuditInput.document` may still have no row to reach.
251
+ * The overlay cannot see that difference, and neither can this module.
252
+ *
253
+ * THE SAME SET AND THE SAME RULE `holdRow` ALREADY USES. A hold's subject
254
+ * control is withheld for "a subject the inspector could not resolve", which
255
+ * is this question asked one panel over; `renderWorkspace` computes the set
256
+ * once, off the NORMALIZED document it draws, and hands it to both.
257
+ */
258
+ readonly known: ReadonlySet<string>;
259
+ }
260
+ /**
261
+ * The panel, or `null` when there is nothing to list.
262
+ *
263
+ * `null` RATHER THAN AN EMPTY PANEL, and it is not the same decision as the
264
+ * header count's. The count is drawn at zero on purpose — `./surface.ts`:
265
+ * *"a control that appears when there is bad news is a control the eye has to
266
+ * re-find"* — because it IS the control. A list of nothing is not a control; it
267
+ * is a heading over an empty region in a column whose space belongs to the
268
+ * selection. So the ambient half stays put at zero and the list goes away.
269
+ *
270
+ * IT IS THE LISTED FINDINGS THAT DECIDE, NOT `overlay.findings`. A document
271
+ * whose only findings are encoding refusals has a non-zero count, a bar on
272
+ * every affected row, and NOTHING for this panel to list — so it draws the
273
+ * refused block and no panel at all. Testing the overlay instead would have
274
+ * drawn a panel whose head said `2` above an empty list.
275
+ */
276
+ export declare function renderAuditPanel(overlay: AuditOverlay, options: AuditPanelOptions): ElementSpec | null;
277
+ //# sourceMappingURL=panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel.d.ts","sourceRoot":"","sources":["../../src/audit/panel.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwHG;AAGH,OAAO,EAAE,KAAK,WAAW,EAAW,MAAM,oBAAoB,CAAC;AAE/D,OAAO,KAAK,EAAE,UAAU,EAA2B,MAAM,eAAe,CAAC;AAEzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,uBAAuB,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD;;;;;OAKG;IACH,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAC;IACpC;;;;;;;;;OASG;IACH,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,sEAAsE;IACtE,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uDAAuD;IACvD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;;;;OAMG;IACH,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,+DAA+D;IAC/D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;IAC3B;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IACxC;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACrC;AAuQD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,YAAY,EACrB,OAAO,EAAE,iBAAiB,GACzB,WAAW,GAAG,IAAI,CAgGpB"}