@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
@@ -33,7 +33,7 @@
33
33
  * overlay on this screen reads — so a capsule's `cycle` badge and an audit's
34
34
  * `cycle` finding are one answer rendered twice, not two answers.
35
35
  */
36
- import { CLUSTER_ONLY_BUDGET, GRAPH_NODE_BUDGET, clustersOf, normalizeDocument, } from '@issuegraph/viewer';
36
+ import { CLUSTER_ONLY_BUDGET, GRAPH_NODE_BUDGET, clusterReach, clustersOf, normalizeDocument, } from '@issuegraph/viewer';
37
37
  import { INITIAL_SCALE_STATE } from "./commands.js";
38
38
  /**
39
39
  * The ladder, as the design's table rather than as branches — and pinned to the
@@ -101,9 +101,16 @@ function narrow(input, keep) {
101
101
  cycles: input.cycles
102
102
  .map((cycle) => cycle.filter((member) => keep.has(member)))
103
103
  .filter((cycle) => cycle.length > 0),
104
- // NO `host`, ON PURPOSE. The canvas answers "what surrounds this issue";
105
- // the header, the NOW row and the freshness stamp are the rail's to draw,
106
- // and carrying the facts here would draw them twice in one workspace.
104
+ // NO HOST CHROME, ON PURPOSE. The canvas answers "what surrounds this
105
+ // issue"; the header, the NOW row and the freshness stamp are the rail's to
106
+ // draw, and carrying those here would draw them twice in one workspace.
107
+ //
108
+ // THE CONDITION SURVIVES, and it is the one fact that must. It draws nothing
109
+ // itself under `chrome: false`; what it does is stop this canvas explaining
110
+ // an emptiness the host has already accounted for — otherwise a focus with
111
+ // nothing to draw says "no issue in this document declares a relationship"
112
+ // beside a rail saying the index could not be read.
113
+ ...(input.host?.condition === undefined ? {} : { host: { condition: input.host.condition } }),
107
114
  };
108
115
  }
109
116
  /**
@@ -115,21 +122,106 @@ function narrow(input, keep) {
115
122
  * `clustersOf` never returns one today; this is what keeps that from becoming a
116
123
  * silent contract.
117
124
  */
118
- function capsuleOf(cluster) {
119
- // `members` is already in the viewer's deterministic order, so the first is a
120
- // stable handle rather than whichever member the walk happened to reach first.
121
- const lead = cluster.members[0];
125
+ function capsuleOf(cluster, titleOf, rankOf) {
126
+ // THE ANCHOR IS THE HIGHEST-RANKED MEMBER, WHICH IS NOT WHAT THIS PICKED.
127
+ //
128
+ // `clustersOf` ends with `members.sort()` — a plain lexicographic sort of
129
+ // KEYS — so `members[0]` was the alphabetically first key and nothing else.
130
+ // The old comment called that "the viewer's deterministic order", which is
131
+ // true and irrelevant: deterministic is not the same as meaningful, and on
132
+ // the demo it fronted a seventy-two issue component with whichever key sorted
133
+ // first.
134
+ //
135
+ // `RULINGS.md` §4: a capsule is identified by its ANCHOR, *"the
136
+ // highest-ranked member"*. That is the member a reader would reach this
137
+ // component through, and it is the one the focus control should name.
138
+ //
139
+ // TIES AND UNRANKED MEMBERS FALL BACK TO THE OLD HANDLE, deliberately: a
140
+ // component can be entirely unplaced, in which case no member has a rank and
141
+ // the sorted key is as good an answer as exists. What matters is that a
142
+ // RANKED member always wins over an unranked one, so a component is entered
143
+ // through the earliest position the order states for it.
144
+ //
145
+ // THAT POSITION NEED NOT BE READY WORK, and since `RULINGS.md` §1 it often
146
+ // is not: a held slot whose blocker is inside the order carries a rank, so a
147
+ // held issue can be the anchor. This comment used to promise ready work and
148
+ // that promise is now false. The anchor is still right, and deliberately
149
+ // unchanged — §4 defines it as the highest-RANKED member, not the highest
150
+ // ready one, and nothing downstream needs readiness: selection minimises
151
+ // rank, activation moves the focus key, focus keeps the whole component, and
152
+ // no consumer here starts work. An anchor is where you ENTER a component,
153
+ // not a claim that the component can run.
154
+ let lead = cluster.members[0];
155
+ let best = Number.POSITIVE_INFINITY;
156
+ for (const member of cluster.members) {
157
+ const rank = rankOf.get(member);
158
+ if (rank === undefined)
159
+ continue;
160
+ if (rank < best) {
161
+ best = rank;
162
+ lead = member;
163
+ }
164
+ }
122
165
  if (lead === undefined)
123
166
  return null;
124
167
  return {
125
168
  lead,
169
+ // THE KEY IS THE FALLBACK, NOT AN EMPTY NAME. Every member came out of the
170
+ // normalized document so a title is always there; the `??` keeps a capsule
171
+ // named rather than blank if that ever stops being true.
172
+ name: titleOf.get(lead) ?? lead,
126
173
  size: cluster.members.length,
127
174
  blockedByEdges: cluster.blockedByEdges,
128
175
  chainDepth: cluster.chainDepth,
129
176
  hasCycle: cluster.hasCycle,
177
+ reach: clusterReach(cluster),
130
178
  members: cluster.members,
131
179
  };
132
180
  }
181
+ /**
182
+ * The omitted components, summarised.
183
+ *
184
+ * COMPUTED FROM THE COMPONENTS THEMSELVES rather than from the two list
185
+ * lengths, because the omitted set is not only the slice past the limit: a
186
+ * component `capsuleOf` refuses also leaves the list, and a count derived by
187
+ * subtraction cannot say how big either kind was.
188
+ */
189
+ function omittedFrom(listable, shown) {
190
+ const drawn = new Set(shown.map((capsule) => capsule.lead));
191
+ // A COMPONENT OF NO ISSUES IS NOT A SIZE. `capsuleOf` refuses exactly the
192
+ // memberless cluster, so the very components this function exists to count
193
+ // separately are the ones that would contribute `0` — and "2 further
194
+ // components are not listed · 0–7 issues each" reports a component of no
195
+ // issues, which is the state `capsulesOmitted`'s own `null` exists to refuse.
196
+ // They are still counted; they just do not stretch the range.
197
+ const omitted = listable.filter((cluster) => {
198
+ const lead = cluster.members[0];
199
+ return lead === undefined || !drawn.has(lead);
200
+ });
201
+ // FOLDED, NOT SPREAD. `Math.min(...sizes)` passes one argument per component,
202
+ // and this runs on the refusal path — reached BECAUSE the document is large,
203
+ // whose worst case `clustersOf` names as "10,000 disconnected pairs". Node
204
+ // throws `RangeError: Maximum call stack size exceeded` somewhere past
205
+ // ~100,000 arguments, so a spread turns the surface that exists to survive a
206
+ // huge backlog into the one that crashes on it.
207
+ let count = 0;
208
+ let smallest = Number.POSITIVE_INFINITY;
209
+ let largest = 0;
210
+ for (const cluster of omitted) {
211
+ count += 1;
212
+ const size = cluster.members.length;
213
+ if (size === 0)
214
+ continue;
215
+ if (size < smallest)
216
+ smallest = size;
217
+ if (size > largest)
218
+ largest = size;
219
+ }
220
+ if (count === 0)
221
+ return null;
222
+ // Every omitted component was memberless: counted, with no range to state.
223
+ return { count, range: largest === 0 ? null : { smallest, largest } };
224
+ }
133
225
  /** Why the canvas declined, in the reader's terms. One sentence, three cases. */
134
226
  function reasonFor(tier, nodeCount, focused) {
135
227
  if (focused) {
@@ -177,7 +269,19 @@ function searchFor(query, document, leadOf) {
177
269
  // ONLY ISSUES THAT SIT IN A COMPONENT. This search exists to focus one, and
178
270
  // an issue with no relationship has none to focus — offering it would be a
179
271
  // match that cannot be acted on. The issues it leaves out are the ones the
180
- // isolated chip is for, which is why the chip is not optional chrome.
272
+ // isolated chip is for, which is why the ROUTE TO THEM IS NOT OPTIONAL.
273
+ //
274
+ // THE ROUTE IS THE INVARIANT; THE CHIP IS ONE DRAWING OF IT. This sentence
275
+ // read "the chip is not optional chrome" until a caller needed to draw the
276
+ // same route somewhere else, and the two claims are not the same: what may
277
+ // never be suppressed is a way to reach these issues, because this search
278
+ // will not offer them and nothing else on the ladder does either. So
279
+ // `ScaleLadderOptions.isolatedChip` lets a caller that draws the route
280
+ // ITSELF — the count, the toggle and the list — turn the ladder's own copy
281
+ // off, and forbids it to anyone who does not. `renderWorkspace` is that
282
+ // caller: §17a puts the count at the foot of the order rail, and two copies
283
+ // of one control would also give `mount.ts`'s focus restore two elements
284
+ // under its single `isolated` identity.
181
285
  const lead = leadOf.get(issue.key);
182
286
  if (lead === undefined)
183
287
  continue;
@@ -229,9 +333,23 @@ export function scaleLadder(input, state = INITIAL_SCALE_STATE) {
229
333
  // read as an offer to focus what is already focused.
230
334
  const listable = focusedCluster === null ? clusters : [];
231
335
  const shown = tier === 'clusters' ? listable.slice(0, CAPSULE_LIMIT) : listable;
336
+ const titleOf = new Map(document.issues.map((issue) => [issue.key, issue.title]));
337
+ // THE RANK OF EVERY MEMBER THAT HAS ONE, for the anchor. Built from the
338
+ // order's own slots rather than from the issues, because rank is a fact about
339
+ // a SLOT: a together unit is one rank over several members, and each of them
340
+ // is equally the rank the component would be entered at.
341
+ const rankOf = new Map();
342
+ for (const slot of document.order.slots) {
343
+ if (slot.rank === null)
344
+ continue;
345
+ for (const member of slot.members)
346
+ rankOf.set(member, slot.rank);
347
+ }
232
348
  const capsules = tier === 'direct'
233
349
  ? []
234
- : shown.map(capsuleOf).filter((capsule) => capsule !== null);
350
+ : shown
351
+ .map((cluster) => capsuleOf(cluster, titleOf, rankOf))
352
+ .filter((capsule) => capsule !== null);
235
353
  const isolatedIssues = document.issues.filter((issue) => !related.has(issue.key));
236
354
  const isolated = {
237
355
  count: isolatedIssues.length,
@@ -249,7 +367,7 @@ export function scaleLadder(input, state = INITIAL_SCALE_STATE) {
249
367
  // COUNTED AGAINST WHAT WAS LISTED, not against what was sliced. A component
250
368
  // dropped for having no members is as absent from the list as one past the
251
369
  // limit, and reporting only the slice would under-count it.
252
- capsulesOmitted: tier === 'direct' ? 0 : listable.length - capsules.length,
370
+ capsulesOmitted: tier === 'direct' ? null : omittedFrom(listable, capsules),
253
371
  isolated,
254
372
  search: tier === 'direct' ? null : searchFor(state.query, document, leadOf),
255
373
  canvas,
@@ -1 +1 @@
1
- {"version":3,"file":"ladder.js","sourceRoot":"","sources":["../../src/scale/ladder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ladder.js","sourceRoot":"","sources":["../../src/scale/ladder.ts"],"names":[],"mappings":"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"}
@@ -90,6 +90,50 @@ export interface ScaleLadderOptions {
90
90
  * because `overlayFor` reads a list of states.
91
91
  */
92
92
  readonly projected?: readonly ProjectedEdge[] | undefined;
93
+ /**
94
+ * Whether this ladder draws its own isolated CHIP. Default `true`.
95
+ *
96
+ * SUPPRESS THIS ONLY IF YOU DRAW THE CONTROL YOURSELF. `searchFor`
97
+ * deliberately omits every issue with no component (`ladder.ts`, and the
98
+ * reasoning is recorded there), so this is the only way these issues are
99
+ * reachable from the ladder's own surface. What may never be optional is a
100
+ * route to them; this option says who draws its control, not whether it
101
+ * exists.
102
+ *
103
+ * THE LIST IS NOT OPTIONAL AND IS NOT PART OF THIS. `isolatedSpec` keeps
104
+ * drawing it whatever this says, because the caller that wants the control
105
+ * has nowhere better to put the rows: `renderWorkspace`'s rail is virtualized
106
+ * on a fixed row pitch, and content of arbitrary height inside that scroll
107
+ * track breaks the offset-to-row arithmetic the window is re-cut from. This
108
+ * zone has no such constraint.
109
+ *
110
+ * A BOOLEAN AMONG DATA-SHAPED OPTIONS, and it is one deliberately. Its three
111
+ * siblings hand this renderer a VALUE it could not otherwise know — what is
112
+ * selected, which edges are in flight. This one answers a different question:
113
+ * whether a caller has already drawn a control this renderer would otherwise
114
+ * draw. There is no value that carries that fact, because it is a fact about
115
+ * the caller's own markup.
116
+ *
117
+ * DEFAULT `true`, so a standalone ladder is unchanged. It has no rail to put
118
+ * a footer at the foot of, which is why the control lives in its chrome by
119
+ * default rather than by accident; `renderWorkspace` is the caller that has
120
+ * one, and §17a puts the count there.
121
+ */
122
+ readonly isolatedChip?: boolean | undefined;
123
+ /**
124
+ * The id to put on the isolated list, for a caller whose control is elsewhere.
125
+ *
126
+ * MINTED BY THE CALLER, BECAUSE ONLY THE CALLER KNOWS THE PAGE. `searchSpec`
127
+ * records why this renderer must not invent one: a host rendering two
128
+ * documents side by side emits the markup twice, and a duplicated `id` makes
129
+ * the second surface's reference resolve to the first surface's element. The
130
+ * caller drawing the remote control is the one that can make the value unique
131
+ * and use the same string on both halves.
132
+ *
133
+ * Absent, the list carries no `id` and no control names it — which is right
134
+ * for the adjacent chip, whose list is already its next sibling.
135
+ */
136
+ readonly isolatedListId?: string | undefined;
93
137
  }
94
138
  export interface ScaleLadderResult {
95
139
  readonly ladder: ScaleLadder;
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/scale/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAEL,KAAK,KAAK,EACV,KAAK,cAAc,EAOpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKvD,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAEL,KAAK,WAAW,EAIjB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,CAAC;CAC3D;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAyHD,kDAAkD;AAClD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA+DnB"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/scale/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,cAAc,EAQpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAIL,KAAK,WAAW,EAIjB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,GAAG,SAAS,CAAC;IACxC,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C;;;;;;;;;;;OAWG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAC9C;;;;;;;;;;;;;;;;;;;OAmBG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IAClD;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,aAAa,EAAE,GAAG,SAAS,CAAC;IAC1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA4BG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5C;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9C;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,0EAA0E;IAC1E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AA0RD,kDAAkD;AAClD,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,cAAc,EACrB,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAoFnB"}
@@ -29,39 +29,154 @@
29
29
  * its own refusal beside this one — two refusals about one document, one of
30
30
  * which has no routes.
31
31
  */
32
- import { element, renderMarkup, renderViewer, resolveTheme, themeCss, viewerStylesheet, } from '@issuegraph/viewer';
32
+ import { EDGE_TREATMENTS, clusterReachLabel, element, renderMarkup, renderViewer, resolveTheme, themeCss, viewerStylesheet, } from '@issuegraph/viewer';
33
33
  import { overlaysFor } from "../overlay/projected.js";
34
34
  import { attachEdgeOverlays } from "../overlay/render.js";
35
+ import { edgeMarkRequests } from "../overlay/request.js";
35
36
  import { edgeOverlayStylesheet } from "../overlay/styles.js";
36
37
  import { INITIAL_SCALE_STATE } from "./commands.js";
37
38
  import { scaleLadder, } from "./ladder.js";
38
39
  import { scaleLadderStylesheet } from "./styles.js";
40
+ /**
41
+ * What the capsule list left out, with the size range frame `17f` draws under
42
+ * it — "+ 5 more" over "2-7 issues each".
43
+ *
44
+ * THE RANGE IS THE HALF THAT SAYS WHETHER THE TAIL MATTERS. A bare count leaves
45
+ * the reader unable to tell five components of two from five of ninety, and
46
+ * only one of those is safe to leave alone. A single omitted size, or several
47
+ * of one size, states that size once rather than as a range against itself.
48
+ */
49
+ function omittedSpec(omitted) {
50
+ if (omitted === null)
51
+ return null;
52
+ const { range } = omitted;
53
+ const span = range === null
54
+ ? ''
55
+ : range.smallest === range.largest
56
+ ? ` \u00b7 ${String(range.smallest)} ${range.smallest === 1 ? 'issue' : 'issues'} each`
57
+ : ` \u00b7 ${String(range.smallest)}\u2013${String(range.largest)} issues each`;
58
+ return element('p', { class: 'ig-refusal-omitted' }, [
59
+ `${String(omitted.count)} further ${omitted.count === 1 ? 'component is' : 'components are'} not listed${span}.`,
60
+ ]);
61
+ }
62
+ /**
63
+ * The capsule's accessible name — the same facts as a sentence.
64
+ *
65
+ * ONE FACT, ONE WORDING still holds: the reach comes from `clusterReachLabel`
66
+ * exactly as the visible text does, so the two can never describe a component
67
+ * differently. What differs is only what a glyph cannot carry.
68
+ *
69
+ * THE LEAD IS IN IT BECAUSE THE TITLE IS NOT UNIQUE. A component has no name of
70
+ * its own, so `name` is the LEAD ISSUE'S TITLE — and two components whose leads
71
+ * share a title and agree on size, blocking count and reach would otherwise
72
+ * carry the same accessible name, with no key drawn on the card to tell them
73
+ * apart either. The lead key is unique by construction, because components
74
+ * partition the document's keys; naming it keeps the guarantee the old
75
+ * `Focus <lead>` label had by accident.
76
+ */
77
+ function capsuleLabel(capsule) {
78
+ const blocking = capsule.reach.kind === 'cyclic'
79
+ ? 'holds a cycle'
80
+ : `${String(capsule.blockedByEdges)} blocked-by ${capsule.blockedByEdges === 1 ? 'edge' : 'edges'}`;
81
+ // THE ACCESSIBLE NAME SAYS "around" TOO, so what is heard and what is drawn
82
+ // make the same claim. It used to read "Focus <title> (<key>)", which names
83
+ // the component after one issue in the one channel that cannot show the
84
+ // layout making it an anchor.
85
+ return `Focus the component around ${capsule.lead}, ${capsule.name} \u2014 ${String(capsule.size)} issues, ${blocking}, ${clusterReachLabel(capsule.reach)}`;
86
+ }
87
+ /**
88
+ * One component, as frame `17f` draws it: a card whose whole surface enters it.
89
+ *
90
+ * THE CAPSULE IS THE CONTROL, not a row with a button in it. The frame says
91
+ * "click to enter one; the spine renders inside it", and a `Focus #101` button
92
+ * beside four static spans makes the pointer target a fraction of what is drawn
93
+ * as one surface — while putting the LEAST informative thing, a raw key, first
94
+ * in the reading order.
95
+ *
96
+ * THIS IS LAYER 2 AND ONLY LAYER 2. `graph.ts` deliberately draws its §16
97
+ * capsule as an inert `li`, because that package does not narrow and a control
98
+ * there could never complete the action it advertises. Layer 2 narrows, so here
99
+ * the control is real — the same reasoning, landing on the opposite answer.
100
+ *
101
+ * ORDERED BY WHAT CHANGES BEHAVIOUR, which is the frame's own annotation:
102
+ * count, then the blocking count or the cycle that voids it, then the name,
103
+ * then the reach. The accessible name is written rather than left to the
104
+ * contents, and carries the lead key so two capsules are told apart by their
105
+ * own identity rather than by position.
106
+ */
107
+ function capsuleSpec(capsule) {
108
+ // A CELL, NOT A CAPSULE. `.ig-capsule` is layer 1's own CARD — background,
109
+ // border, radius, padding and a top margin (`viewer/src/styles.ts`) — so
110
+ // keeping it here drew a bordered box inside a bordered box, put the stuck
111
+ // tint and the hover on the INNER border only, and made the row gutter wider
112
+ // than the column gutter by that margin. Resetting it from layer 2 would be
113
+ // redefining a layer 1 class, which this package's stylesheet opens by
114
+ // refusing to do; the list item simply stops claiming to be one.
115
+ return element('li', { class: 'ig-capsule-cell' }, [
116
+ element('button', {
117
+ type: 'button',
118
+ class: 'ig-capsule-enter',
119
+ 'data-ig-command': 'focus',
120
+ 'data-ig-target': capsule.lead,
121
+ // THE REACH AS AN ATTRIBUTE, so the frame's tint on a stuck card is a
122
+ // rule rather than a second branch in the markup, and a host styling
123
+ // the board can reach the same distinction.
124
+ 'data-reach': capsule.reach.kind,
125
+ // WRITTEN, NOT LEFT TO THE CONTENTS. `element` concatenates children
126
+ // with no whitespace — the trap `.ig-isolated-list` already records —
127
+ // so the four parts below would reach a screen reader as one run:
128
+ // "20\u2298 19Issue c0-1deepest chain 19". The gap that separates them
129
+ // is CSS, which the accessibility tree does not read. This also spells
130
+ // out the glyph, which is a shape with no name of its own.
131
+ 'aria-label': capsuleLabel(capsule),
132
+ }, [
133
+ element('span', { class: 'ig-capsule-size' }, [String(capsule.size)]),
134
+ // THE CYCLE STANDS WHERE THE BLOCKING COUNT STANDS. On a stuck
135
+ // component the number of blocking edges is not the fact that changes
136
+ // what the reader does: none of the members is reachable however few
137
+ // there are.
138
+ //
139
+ // NEITHER SLOT TAKES `.ig-count`, and that is not a style preference:
140
+ // layer 1 gives that class a cell's padding (`styles.ts`), which inside
141
+ // a card indents the text off the grid line the count above it sits on.
142
+ // The `ig-capsule-*` classes are this card's own, so it can place its
143
+ // four parts without editing a class §16's capsule also draws.
144
+ capsule.reach.kind === 'cyclic'
145
+ ? element('span', { class: 'ig-capsule-load ig-badge', 'data-edge': 'blocked-by' }, [
146
+ 'cycle',
147
+ ])
148
+ : element('span', { class: 'ig-capsule-load' }, [
149
+ `${EDGE_TREATMENTS['blocked-by'].glyph} ${String(capsule.blockedByEdges)}`,
150
+ ]),
151
+ // THE ANCHOR, WORDED AS ONE. `RULINGS.md` §4: a capsule is identified
152
+ // by "around #488 · Extract session store adapter", never by a name —
153
+ // because a connected component HAS no name and one must not be
154
+ // invented. The title alone read as the component's name, which is a
155
+ // claim about a seventy-two issue group made from one member's title.
156
+ //
157
+ // ONE HARDCODED WORD, AND IT IS FLAGGED RATHER THAN HIDDEN. This
158
+ // surface takes no words port — `capsuleLabel` above already spells
159
+ // "Focus" in English — so "around" joins it. That is a gap in this
160
+ // module, not a decision: the rest of this package hands every sentence
161
+ // to the host, and a scale surface that cannot be translated is worth
162
+ // fixing when the port is added.
163
+ element('span', { class: 'ig-capsule-name' }, [
164
+ element('span', { class: 'ig-capsule-anchor' }, ['around ']),
165
+ element('span', { class: 'ig-id' }, [capsule.lead]),
166
+ ' \u00b7 ',
167
+ capsule.name,
168
+ ]),
169
+ element('span', { class: 'ig-capsule-reach' }, [clusterReachLabel(capsule.reach)]),
170
+ ]),
171
+ ]);
172
+ }
39
173
  function refusalSpec(refusal, ladder) {
40
174
  return element('section', { class: 'ig-refusal', role: 'note' }, [
41
175
  element('p', {}, [refusal.reason]),
42
176
  ladder.capsules.length === 0
43
177
  ? null
44
- : element('ol', { class: 'ig-list', 'aria-label': 'connected components' }, ladder.capsules.map((capsule) => element('li', { class: 'ig-capsule' }, [
45
- element('button', {
46
- type: 'button',
47
- 'data-ig-command': 'focus',
48
- 'data-ig-target': capsule.lead,
49
- }, [`Focus ${capsule.lead}`]),
50
- element('span', { class: 'ig-count' }, [`${String(capsule.size)} issues`]),
51
- element('span', { class: 'ig-count' }, [
52
- `${String(capsule.blockedByEdges)} blocking`,
53
- ]),
54
- element('span', { class: 'ig-count' }, [`depth ${String(capsule.chainDepth)}`]),
55
- capsule.hasCycle
56
- ? element('span', { class: 'ig-badge', 'data-edge': 'blocked-by' }, ['cycle'])
57
- : null,
58
- element('span', { class: 'ig-id' }, [capsule.members.slice(0, 3).join(', ')]),
59
- ]))),
60
- ladder.capsulesOmitted > 0
61
- ? element('p', { class: 'ig-refusal-omitted' }, [
62
- `${String(ladder.capsulesOmitted)} further ${ladder.capsulesOmitted === 1 ? 'component is' : 'components are'} not listed.`,
63
- ])
64
- : null,
178
+ : element('ol', { class: 'ig-list', 'aria-label': 'connected components' }, ladder.capsules.map((capsule) => capsuleSpec(capsule))),
179
+ omittedSpec(ladder.capsulesOmitted),
65
180
  element('ul', { class: 'ig-ladder-routes', 'aria-label': 'what to do next' }, refusal.routes.map((route) => element('li', { class: 'ig-refusal-next', 'data-route': route.kind }, [route.label]))),
66
181
  ]);
67
182
  }
@@ -94,23 +209,66 @@ function searchSpec(search) {
94
209
  : null,
95
210
  ]);
96
211
  }
97
- function isolatedSpec(isolated) {
212
+ /**
213
+ * The isolated set: a chip that toggles it, and the list it opens.
214
+ *
215
+ * `chip` DROPS THE CONTROL AND KEEPS THE LIST, which is the whole shape
216
+ * `ScaleLadderOptions.isolatedChip` needs. A caller drawing the toggle
217
+ * elsewhere still has nowhere of its own to put 248 rows: the workspace's rail
218
+ * is VIRTUALIZED — `railRowAt` maps a scroll offset to a row index by
219
+ * `floor((scrollTop - chrome) / pitch)` — so a list of arbitrary height inside
220
+ * that track makes every offset below it name the wrong row, and the window
221
+ * re-cuts against a geometry that no longer holds. This zone has no such
222
+ * arithmetic, so the list stays here and only the control moves.
223
+ */
224
+ function isolatedSpec(isolated, chip, listId) {
98
225
  // NOTHING IS DRAWN FOR AN EMPTY SET. A chip reading "0 isolated issues" is a
99
226
  // control that opens nothing, and the count IS the information these issues
100
227
  // carry — so with no issues there is nothing to say.
101
228
  if (isolated.count === 0)
102
229
  return null;
230
+ // NO CONTROL AND NOTHING OPEN IS NOTHING AT ALL. A caller that drew the chip
231
+ // elsewhere leaves this with only the list to draw, and a shut list is no
232
+ // list — so the wrapper would be an empty bordered box, which is the chrome
233
+ // carrying no fact that the count-zero rule above already refuses.
234
+ if (!chip && !isolated.open)
235
+ return null;
103
236
  return element('div', { class: 'ig-ladder-isolated' }, [
104
- element('button', {
237
+ !chip ? null : element('button', {
105
238
  type: 'button',
106
239
  class: 'ig-chip',
107
240
  'aria-expanded': isolated.open ? 'true' : 'false',
241
+ // NO `aria-controls` WHEN THIS CHIP IS THE CONTROL, AND THAT IS NOT AN
242
+ // OMISSION. The list is this button's immediate next sibling, so the
243
+ // relationship is already there in reading order; `aria-controls` earns
244
+ // its keep for a REMOTE disclosure, which is why the workspace's footer
245
+ // carries one and this does not.
246
+ //
247
+ // AND A FIXED ID HERE WOULD BE A DEFECT, not a shortcut. `searchSpec`
248
+ // below nests its input inside its label precisely so it needs no `id`,
249
+ // recording that "a host rendering two documents side by side would emit
250
+ // it twice" — the same host, the same page, and the second list would
251
+ // then answer to the first surface's button. An earlier revision of this
252
+ // file shipped a module constant with a comment claiming fixed ids were
253
+ // the norm on these surfaces; the control ten lines down had already
254
+ // decided otherwise.
255
+ ...(isolated.open && listId !== undefined ? { 'aria-controls': listId } : {}),
108
256
  'data-ig-command': isolated.open ? 'close-isolated' : 'open-isolated',
109
257
  }, [isolated.label]),
110
258
  // A LIST, NEVER A CANVAS. These issues have no relationship to draw, which
111
259
  // is exactly why they were collapsed in the first place.
112
260
  isolated.open
113
- ? element('ol', { class: 'ig-isolated-list', 'aria-label': 'isolated issues' }, isolated.issues.map((issue) => element('li', {}, [
261
+ ? element('ol',
262
+ // THE ID IS THE CALLER'S, OR THERE IS NONE. Only a caller drawing the
263
+ // control somewhere else needs to name this list, and only that caller
264
+ // knows what else is on its page — so it mints the value and passes it
265
+ // to both halves. This renderer inventing one would be the collision
266
+ // `searchSpec` avoids.
267
+ {
268
+ class: 'ig-isolated-list',
269
+ ...(listId === undefined ? {} : { id: listId }),
270
+ 'aria-label': 'isolated issues',
271
+ }, isolated.issues.map((issue) => element('li', {}, [
114
272
  element('span', { class: 'ig-id' }, [issue.key]),
115
273
  element('span', { class: 'ig-title' }, [issue.title]),
116
274
  ])))
@@ -122,8 +280,25 @@ export function renderScaleLadder(input, options = {}) {
122
280
  const state = options.state ?? INITIAL_SCALE_STATE;
123
281
  const ladder = scaleLadder(input, state);
124
282
  const theme = resolveTheme(options.theme);
283
+ // THE OVERLAYS ARE RESOLVED BEFORE THE CANVAS IS DRAWN, because the marks
284
+ // among them are an INPUT to the drawing rather than something added over it.
285
+ // A mark needs a position, and the only layer that has one is the layer that
286
+ // computes the layout — so the request goes in with the render and the placed
287
+ // marks come back inside the scene. The stroke-derived overlays still go the
288
+ // other way, attached to the scene afterwards, because those reuse a position
289
+ // that is already solved.
290
+ const requestedOverlays = overlaysFor(ladder.canvas.edges, options.projected, options.selectedEdge);
125
291
  const canvas = ladder.tier === 'direct'
126
- ? renderViewer(ladder.canvas, { projection: 'graph', theme, selected: options.selected ?? null })
292
+ ? renderViewer(ladder.canvas, {
293
+ projection: 'graph',
294
+ theme,
295
+ selected: options.selected ?? null,
296
+ // THE PANEL HAS ONE HEADER, and the rail beside this canvas is
297
+ // drawing it. Two would mean two projection toggles disagreeing
298
+ // about which projection is current.
299
+ chrome: false,
300
+ edgeMarks: edgeMarkRequests(requestedOverlays),
301
+ })
127
302
  : null;
128
303
  // THE SELECTION HALO AND THE WRITE STATES, attached to the scene the canvas
129
304
  // just drew. Resolved against `ladder.canvas.edges` — the document this canvas
@@ -132,7 +307,7 @@ export function renderScaleLadder(input, options = {}) {
132
307
  // promise every zone makes. A selection is a NAME, and a name that no longer
133
308
  // resolves renders as nothing selected. The merge itself is `overlaysFor`,
134
309
  // shared with the workspace's tree canvas so the two cannot drift.
135
- const overlays = canvas === null ? [] : overlaysFor(ladder.canvas.edges, options.projected, options.selectedEdge);
310
+ const overlays = canvas === null ? [] : requestedOverlays;
136
311
  // `unattached` IS DELIBERATELY NOT SURFACED HERE, and the reason is a fact
137
312
  // about this call site rather than about the value.
138
313
  //
@@ -155,7 +330,10 @@ export function renderScaleLadder(input, options = {}) {
155
330
  : element('button', { type: 'button', class: 'ig-chip', 'data-ig-command': 'clear-focus' }, ['Return to every component']),
156
331
  ladder.refusal === null ? null : refusalSpec(ladder.refusal, ladder),
157
332
  ladder.search === null ? null : searchSpec(ladder.search),
158
- isolatedSpec(ladder.isolated),
333
+ // THE CONTROL, UNLESS THE CALLER DREW IT — the LIST is drawn either way.
334
+ // See `ScaleLadderOptions.isolatedChip`, and `ladder.ts`'s `searchFor` for
335
+ // why there has to be a route at all.
336
+ isolatedSpec(ladder.isolated, options.isolatedChip ?? true, options.isolatedListId),
159
337
  ]);
160
338
  return {
161
339
  ladder,
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/scale/render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/scale/render.ts"],"names":[],"mappings":"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"}