@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.
- package/README.md +65 -9
- package/dist/a11y/baseline.d.ts +182 -0
- package/dist/a11y/baseline.d.ts.map +1 -0
- package/dist/a11y/baseline.js +434 -0
- package/dist/a11y/baseline.js.map +1 -0
- 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 +429 -1
- 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 +36 -0
- package/dist/create/draft.d.ts.map +1 -1
- package/dist/create/draft.js +40 -0
- package/dist/create/draft.js.map +1 -1
- package/dist/create/keys.d.ts +134 -9
- package/dist/create/keys.d.ts.map +1 -1
- package/dist/create/keys.js +119 -20
- package/dist/create/keys.js.map +1 -1
- package/dist/firstpass/candidates.d.ts +17 -1
- package/dist/firstpass/candidates.d.ts.map +1 -1
- package/dist/index.d.ts +42 -17
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +45 -14
- 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 +76 -20
- 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 +78 -7
- package/dist/overlay/styles.js.map +1 -1
- package/dist/picker/render.d.ts +26 -16
- package/dist/picker/render.d.ts.map +1 -1
- package/dist/picker/render.js +25 -36
- package/dist/picker/render.js.map +1 -1
- package/dist/picker/styles.d.ts +7 -7
- package/dist/picker/styles.d.ts.map +1 -1
- package/dist/picker/styles.js +7 -36
- package/dist/picker/styles.js.map +1 -1
- package/dist/picker/view.d.ts +8 -4
- package/dist/picker/view.d.ts.map +1 -1
- package/dist/picker/view.js +4 -3
- package/dist/picker/view.js.map +1 -1
- package/dist/picker/words.d.ts +12 -10
- package/dist/picker/words.d.ts.map +1 -1
- package/dist/picker/words.js +12 -8
- package/dist/picker/words.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 +129 -11
- 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 +206 -28
- 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/chrome.d.ts +1 -1
- package/dist/workspace/chrome.d.ts.map +1 -1
- package/dist/workspace/chrome.js +48 -0
- package/dist/workspace/chrome.js.map +1 -1
- package/dist/workspace/firstpass.d.ts +166 -0
- package/dist/workspace/firstpass.d.ts.map +1 -0
- package/dist/workspace/firstpass.js +151 -0
- package/dist/workspace/firstpass.js.map +1 -0
- package/dist/workspace/host.d.ts +283 -11
- package/dist/workspace/host.d.ts.map +1 -1
- package/dist/workspace/host.js +614 -43
- package/dist/workspace/host.js.map +1 -1
- package/dist/workspace/inspector.d.ts +72 -2
- package/dist/workspace/inspector.d.ts.map +1 -1
- package/dist/workspace/inspector.js +26 -0
- package/dist/workspace/inspector.js.map +1 -1
- package/dist/workspace/mount.d.ts +75 -6
- package/dist/workspace/mount.d.ts.map +1 -1
- package/dist/workspace/mount.js +1851 -60
- 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/recovery.d.ts +155 -0
- package/dist/workspace/recovery.d.ts.map +1 -0
- package/dist/workspace/recovery.js +156 -0
- package/dist/workspace/recovery.js.map +1 -0
- package/dist/workspace/render.d.ts +779 -2
- package/dist/workspace/render.d.ts.map +1 -1
- package/dist/workspace/render.js +1727 -61
- 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 +1405 -42
- package/dist/workspace/styles.js.map +1 -1
- package/package.json +4 -4
package/dist/scale/ladder.js
CHANGED
|
@@ -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
|
|
105
|
-
// the header, the NOW row and the freshness stamp are the rail's to
|
|
106
|
-
// and carrying
|
|
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
|
-
//
|
|
120
|
-
//
|
|
121
|
-
|
|
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
|
|
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
|
|
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' ?
|
|
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,
|
package/dist/scale/ladder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ladder.js","sourceRoot":"","sources":["../../src/scale/ladder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EACL,mBAAmB,
|
|
1
|
+
{"version":3,"file":"ladder.js","sourceRoot":"","sources":["../../src/scale/ladder.ts"],"names":[],"mappings":"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"}
|
package/dist/scale/render.d.ts
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/scale/render.js
CHANGED
|
@@ -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) =>
|
|
45
|
-
|
|
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
|
-
|
|
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',
|
|
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, {
|
|
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 ? [] :
|
|
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
|
-
|
|
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,
|
package/dist/scale/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/scale/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/scale/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAEH,OAAO,EACL,eAAe,EAIf,iBAAiB,EACjB,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAmB,MAAM,eAAe,CAAC;AACrE,OAAO,EAOL,WAAW,GACZ,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAkHpD;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,OAAiC;IACpD,IAAI,OAAO,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAC1B,MAAM,IAAI,GACR,KAAK,KAAK,IAAI;QACZ,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,KAAK,CAAC,QAAQ,KAAK,KAAK,CAAC,OAAO;YAChC,CAAC,CAAC,WAAW,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,OAAO;YACvF,CAAC,CAAC,WAAW,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,SAAS,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;IACtF,OAAO,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE;QACnD,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,OAAO,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,gBAAgB,cAAc,IAAI,GAAG;KACjH,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,YAAY,CAAC,OAAqB;IACzC,MAAM,QAAQ,GACZ,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;QAC7B,CAAC,CAAC,eAAe;QACjB,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,eAAe,OAAO,CAAC,cAAc,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACxG,4EAA4E;IAC5E,4EAA4E;IAC5E,wEAAwE;IACxE,8BAA8B;IAC9B,OAAO,8BAA8B,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,WAAW,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,QAAQ,KAAK,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;AAC/J,CAAC;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,SAAS,WAAW,CAAC,OAAqB;IACxC,2EAA2E;IAC3E,yEAAyE;IACzE,2EAA2E;IAC3E,6EAA6E;IAC7E,4EAA4E;IAC5E,uEAAuE;IACvE,iEAAiE;IACjE,OAAO,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE;QACjD,OAAO,CACL,QAAQ,EACR;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,kBAAkB;YACzB,iBAAiB,EAAE,OAAO;YAC1B,gBAAgB,EAAE,OAAO,CAAC,IAAI;YAC9B,sEAAsE;YACtE,qEAAqE;YACrE,4CAA4C;YAC5C,YAAY,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI;YAChC,qEAAqE;YACrE,sEAAsE;YACtE,kEAAkE;YAClE,uEAAuE;YACvE,uEAAuE;YACvE,2DAA2D;YAC3D,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC;SACpC,EACD;YACE,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACrE,+DAA+D;YAC/D,sEAAsE;YACtE,qEAAqE;YACrE,aAAa;YACb,EAAE;YACF,sEAAsE;YACtE,wEAAwE;YACxE,wEAAwE;YACxE,sEAAsE;YACtE,+DAA+D;YAC/D,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAC7B,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,0BAA0B,EAAE,WAAW,EAAE,YAAY,EAAE,EAAE;oBAChF,OAAO;iBACR,CAAC;gBACJ,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE;oBAC5C,GAAG,eAAe,CAAC,YAAY,CAAC,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;iBAC3E,CAAC;YACN,sEAAsE;YACtE,sEAAsE;YACtE,gEAAgE;YAChE,qEAAqE;YACrE,sEAAsE;YACtE,EAAE;YACF,iEAAiE;YACjE,oEAAoE;YACpE,mEAAmE;YACnE,wEAAwE;YACxE,sEAAsE;YACtE,iCAAiC;YACjC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE;gBAC5C,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC;gBAC5D,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBACnD,UAAU;gBACV,OAAO,CAAC,IAAI;aACb,CAAC;YACF,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;SACnF,CACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,WAAW,CAAC,OAAqB,EAAE,MAAmB;IAC7D,OAAO,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE;QAC/D,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;YAC1B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,CACL,IAAI,EACJ,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,sBAAsB,EAAE,EAC1D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CACvD;QACL,WAAW,CAAC,MAAM,CAAC,eAAe,CAAC;QACnC,OAAO,CACL,IAAI,EACJ,EAAE,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,iBAAiB,EAAE,EAC9D,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3B,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CACrF,CACF;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,UAAU,CAAC,MAAmB;IACrC,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE;QACnD,wEAAwE;QACxE,0EAA0E;QAC1E,sEAAsE;QACtE,yEAAyE;QACzE,2BAA2B;QAC3B,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE;YACnB,6BAA6B;YAC7B,OAAO,CAAC,OAAO,EAAE;gBACf,IAAI,EAAE,QAAQ;gBACd,iBAAiB,EAAE,QAAQ;gBAC3B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,YAAY,EAAE,KAAK;aACpB,CAAC;SACH,CAAC;QACF,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YACzB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,CACL,IAAI,EACJ,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,gBAAgB,EAAE,EACpD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3B,OAAO,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE;gBAC1C,OAAO,CACL,QAAQ,EACR,EAAE,IAAI,EAAE,QAAQ,EAAE,iBAAiB,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,CAAC,IAAI,EAAE,EAC5E,CAAC,SAAS,KAAK,CAAC,GAAG,EAAE,CAAC,CACvB;gBACD,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACtD,CAAC,CACH,CACF;QACL,MAAM,CAAC,OAAO,GAAG,CAAC;YAChB,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE;gBAC5C,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,YAAY,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,aAAa,cAAc;aACrG,CAAC;YACJ,CAAC,CAAC,IAAI;KACT,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAS,YAAY,CACnB,QAAsB,EACtB,IAAa,EACb,MAA0B;IAE1B,6EAA6E;IAC7E,4EAA4E;IAC5E,qDAAqD;IACrD,IAAI,QAAQ,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,6EAA6E;IAC7E,0EAA0E;IAC1E,4EAA4E;IAC5E,mEAAmE;IACnE,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,OAAO,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,EAAE;QACrD,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CACpB,QAAQ,EACR;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,SAAS;YAChB,eAAe,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;YACjD,uEAAuE;YACvE,qEAAqE;YACrE,wEAAwE;YACxE,wEAAwE;YACxE,iCAAiC;YACjC,EAAE;YACF,sEAAsE;YACtE,wEAAwE;YACxE,yEAAyE;YACzE,sEAAsE;YACtE,yEAAyE;YACzE,wEAAwE;YACxE,qEAAqE;YACrE,qBAAqB;YACrB,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7E,iBAAiB,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,eAAe;SACtE,EACD,CAAC,QAAQ,CAAC,KAAK,CAAC,CACjB;QACD,2EAA2E;QAC3E,yDAAyD;QACzD,QAAQ,CAAC,IAAI;YACX,CAAC,CAAC,OAAO,CACL,IAAI;YACJ,sEAAsE;YACtE,uEAAuE;YACvE,uEAAuE;YACvE,qEAAqE;YACrE,uBAAuB;YACvB;gBACE,KAAK,EAAE,kBAAkB;gBACzB,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;gBAC/C,YAAY,EAAE,iBAAiB;aAChC,EACD,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC5B,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE;gBAChB,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChD,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACtD,CAAC,CACH,CACF;YACH,CAAC,CAAC,IAAI;KACT,CAAC,CAAC;AACL,CAAC;AAED,kDAAkD;AAClD,MAAM,UAAU,iBAAiB,CAC/B,KAAqB,EACrB,UAA8B,EAAE;IAEhC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,mBAAmB,CAAC;IACnD,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAE1C,0EAA0E;IAC1E,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,0BAA0B;IAC1B,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,YAAY,CAAC,CAAC;IAEpG,MAAM,MAAM,GACV,MAAM,CAAC,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE;YAC1B,UAAU,EAAE,OAAO;YACnB,KAAK;YACL,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;YAClC,+DAA+D;YAC/D,gEAAgE;YAChE,qCAAqC;YACrC,MAAM,EAAE,KAAK;YACb,SAAS,EAAE,gBAAgB,CAAC,iBAAiB,CAAC;SAC/C,CAAC;QACJ,CAAC,CAAC,IAAI,CAAC;IAEX,4EAA4E;IAC5E,+EAA+E;IAC/E,0EAA0E;IAC1E,2EAA2E;IAC3E,6EAA6E;IAC7E,2EAA2E;IAC3E,mEAAmE;IACnE,MAAM,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC;IAC1D,2EAA2E;IAC3E,oDAAoD;IACpD,EAAE;IACF,4EAA4E;IAC5E,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,0EAA0E;IAC1E,qEAAqE;IACrE,EAAE;IACF,6EAA6E;IAC7E,wEAAwE;IACxE,8EAA8E;IAC9E,wEAAwE;IACxE,gDAAgD;IAChD,MAAM,QAAQ,GACZ,MAAM,KAAK,IAAI,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;IAE1G,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE;QAClF,MAAM,CAAC,KAAK,KAAK,IAAI;YACnB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,CACL,QAAQ,EACR,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,iBAAiB,EAAE,aAAa,EAAE,EACtE,CAAC,2BAA2B,CAAC,CAC9B;QACL,MAAM,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC;QACpE,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC;QACzD,yEAAyE;QACzE,2EAA2E;QAC3E,sCAAsC;QACtC,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,YAAY,IAAI,IAAI,EAAE,OAAO,CAAC,cAAc,CAAC;KACpF,CAAC,CAAC;IAEH,OAAO;QACL,MAAM;QACN,wEAAwE;QACxE,gEAAgE;QAChE,qEAAqE;QACrE,sDAAsD;QACtD,MAAM,EAAE,GAAG,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,EAAE;QAClH,0EAA0E;QAC1E,sEAAsE;QACtE,wEAAwE;QACxE,yCAAyC;QACzC,MAAM,EAAE,GAAG,gBAAgB,KAAK,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,qBAAqB,KAAK,qBAAqB,EAAE;QACvI,WAAW,EAAE,CAAC,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,WAAW,IAAI,EAAE,CAAC,CAAC;KACrE,CAAC;AACJ,CAAC"}
|