@issuegraph/viewer 0.12.0 → 0.13.0
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 +13 -0
- package/dist/index.d.ts +5 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mount.d.ts +20 -1
- package/dist/mount.d.ts.map +1 -1
- package/dist/mount.js +228 -18
- package/dist/mount.js.map +1 -1
- package/dist/navigation.d.ts +26 -3
- package/dist/navigation.d.ts.map +1 -1
- package/dist/navigation.js +34 -2
- package/dist/navigation.js.map +1 -1
- package/dist/parts.d.ts +15 -1
- package/dist/parts.d.ts.map +1 -1
- package/dist/parts.js +35 -1
- package/dist/parts.js.map +1 -1
- package/dist/projections/graph.d.ts.map +1 -1
- package/dist/projections/graph.js +42 -17
- package/dist/projections/graph.js.map +1 -1
- package/dist/projections/linear.d.ts +25 -2
- package/dist/projections/linear.d.ts.map +1 -1
- package/dist/projections/linear.js +16 -8
- package/dist/projections/linear.js.map +1 -1
- package/dist/projections/tree.d.ts.map +1 -1
- package/dist/projections/tree.js +2 -1
- package/dist/projections/tree.js.map +1 -1
- package/dist/recede.d.ts +40 -0
- package/dist/recede.d.ts.map +1 -0
- package/dist/recede.js +67 -0
- package/dist/recede.js.map +1 -0
- package/dist/scene.d.ts +1 -1
- package/dist/scene.d.ts.map +1 -1
- package/dist/scene.js +5 -3
- package/dist/scene.js.map +1 -1
- package/dist/selection.d.ts +65 -0
- package/dist/selection.d.ts.map +1 -0
- package/dist/selection.js +127 -0
- package/dist/selection.js.map +1 -0
- package/dist/styles.d.ts.map +1 -1
- package/dist/styles.js +142 -13
- package/dist/styles.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -99,6 +99,8 @@ Roughly half of what the design draws is not derivable from the graph. The forma
|
|
|
99
99
|
|
|
100
100
|
**The rail sits on the canvas, not above it.** Ranks and readiness stations are HTML — SVG text is not selectable, not reflowable and announces poorly — but they are the labels *for* the spine nodes, so each row is positioned at the coordinates the layout computed for its own node. One stage carries both at the layout's own size, so one SVG unit is one CSS pixel and the two cannot drift; it scrolls rather than shrinking, because shrinking would silently break that alignment.
|
|
101
101
|
|
|
102
|
+
**A selection recedes the rest of the graph, so its neighbours read first.** With `selected` set to an issue key, that issue, every issue it shares an edge with, and those edges stay at full strength; everything else in the graph recedes. With `selectedEdge` set to a relationship's `edgeIdentity`, that edge and its two ends stay. `recedingOf(document, { key, edge })` returns what recedes, and `key` may also be a set of issue keys. **Issues win:** when any selected key names an issue in the document, `selectedEdge` is ignored. The graph and the list recede; the tree draws a selection as before. `mountViewer` works out `selectedEdge` from its own selection, so a clicked relationship recedes the rest and clearing it restores everything, and a `selectedEdge` or a `receding` passed in its options is ignored. It also recedes by the selection as it was made: selecting one member of a together unit keeps that member's neighbours, not its partners', even though the handle and `onSelect` report the unit's lead for a single selected member.
|
|
103
|
+
|
|
102
104
|
**The graph refuses rather than degrades.** Past 60 nodes it stops drawing and shows connected components as capsules — size, blocking count, cycle flag, chain depth — and past 300 it shows clusters only. Each refusal names the next move. A refusal with a route forward reads as competence; a hairball reads as a bug.
|
|
103
105
|
|
|
104
106
|
**A row's badges are budgeted; the order is not.** The linear and tree projections draw every row at any size — that is the promise the refusal routes a reader to — so what they bound is the relationships *per row*: past `ROW_BADGE_BUDGET` (12) a row draws the first twelve in the format's field order, `blocked-by` first, and one `+N more relationships` chip carrying `data-omitted`, its name in its visible text because ARIA prohibits naming a generic span. Nothing is cut silently, and the chip carries no edge identity because it names no single edge; an omitted edge is still selectable, since the drawn-check answers from the document before it consults the markup.
|
|
@@ -121,6 +123,12 @@ The `together-with` **connector** lives in this layer, declared deliberately: a
|
|
|
121
123
|
|
|
122
124
|
**They name different subjects, and a host must not assume an issue key.** The enclosure names its **slot** — its `data-ig-group` is the slot's lead, so clicking it selects the unit. Every **edge** mark names the edge itself, with the identity `edgeIdentity` derives, which is exactly the `id` `@issuegraph/store` gives the matching `StoredEdge` — so `findEdge(document, key)` resolves it. That covers all five relationships: the four drawn as arcs, on both the stroke and the arrowhead that caps it, and `together-with` on its connector. One connector is drawn per declared `together-with` edge rather than per adjacent member, because a group is joined by pointing at any existing member (§4.3.7) and a star would otherwise publish a pair the document never declared.
|
|
123
125
|
|
|
126
|
+
**A selection can be a set of issues.** In the mounted viewer a plain click replaces the selection, a Cmd-click or Ctrl-click adds or drops one issue, a Shift-click adds a range in rank order from the most recently added issue, with the clicked issue last, and Shift with an arrow key extends the range to the issue focus moves to. Esc clears the selection; with nothing selected, Esc is left to the host. A relationship stays single-select: a click on one, with or without a modifier, replaces any set of issues, and a modifier click on blank graph space keeps the set. A host can pass a set as `selected` (an array of keys in the order they were added) to `renderViewer` or `mountViewer`.
|
|
127
|
+
|
|
128
|
+
**`onSelectionChange(selection)` reports the whole selection** as a `ViewerSelection` — `{ kind: 'none' }`, `{ kind: 'edge', edgeId }`, or `{ kind: 'issues', keys }` with the keys as the reader added them, a fresh frozen array each time. It fires once per change, including an `update` that drops a selected member, and never for a redraw, a projection switch, an unchanged `update`, or a repeated selection of what is already selected. It fires before `onSelect`. `nextSelection`, `viewerSelectionOf`, `storedSelectionOf` and `sameSelection` are exported, so a host building a set from its own input follows the same rules.
|
|
129
|
+
|
|
130
|
+
**`onSelect(key)` still reports one key.** It receives `null` for none and the identity for a relationship. For one selected issue it receives the key the handle holds, which is a together unit's lead when a member was selected. For a set of two or more issues it receives the most recently added key exactly as given, never its unit's lead. It also keeps firing on every click, `Enter` or `select()`, even when the selection does not change, as it always has; `onSelectionChange` stays silent then.
|
|
131
|
+
|
|
124
132
|
So `onSelect` reports **either** an issue key or an edge identity. Distinguish them the way you already hold your data — an issue key is a key in the document you passed in — rather than by parsing the string. Selecting an edge deliberately does **not** move the keyboard tab stop: `navigable` lists issues, and focus is left where the reader put it.
|
|
125
133
|
|
|
126
134
|
## Theming
|
|
@@ -158,6 +166,11 @@ const paper = extendTheme(defaultTheme, {
|
|
|
158
166
|
'--ig-edge-together-with': '#0A5B8A',
|
|
159
167
|
'--ig-edge-duplicate-of': '#6B2E9E',
|
|
160
168
|
'--ig-edge-decomposed-from': '#A31257',
|
|
169
|
+
// Dark, because a state hue is drawn faded and the blend that lands on a
|
|
170
|
+
// light surface must still clear 3:1; the default theme's pale hues do not.
|
|
171
|
+
'--ig-state-invalid': '#5A0000',
|
|
172
|
+
'--ig-state-failed': '#3D0F00',
|
|
173
|
+
'--ig-state-conflict': '#5C4300',
|
|
161
174
|
},
|
|
162
175
|
});
|
|
163
176
|
|
package/dist/index.d.ts
CHANGED
|
@@ -42,7 +42,7 @@ export type { SkeletonOptions, SkeletonResult } from './skeleton.ts';
|
|
|
42
42
|
export { renderViewerSkeleton, skeletonSpec } from './skeleton.ts';
|
|
43
43
|
export type { MountElement, MountEvent, MountOptions, ViewerHandle, } from './mount.ts';
|
|
44
44
|
export { mountViewer } from './mount.ts';
|
|
45
|
-
export type { NavigationCommand, NavigationResult, NavigationState } from './navigation.ts';
|
|
45
|
+
export type { NavigationCommand, NavigationModifiers, NavigationResult, NavigationState } from './navigation.ts';
|
|
46
46
|
export { initialNavigationState, navigate, reconcile } from './navigation.ts';
|
|
47
47
|
export type { ColorToken, EffectToken, MetricToken, Theme, ThemeOverride, TypeToken, } from './theme.ts';
|
|
48
48
|
export { resolveTheme, COLOR_TOKENS, EFFECT_TOKENS, METRIC_TOKENS, THEME_TOKENS, TYPE_TOKENS, defaultTheme, extendTheme, themeCss, } from './theme.ts';
|
|
@@ -50,6 +50,10 @@ export { viewerStylesheet } from './styles.ts';
|
|
|
50
50
|
export type { EdgeDash, EdgeTerminal, EdgeTreatment, OrderingEffect } from './vocabulary.ts';
|
|
51
51
|
export { EDGE_TREATMENTS, dashArrayFor, labelFrom, treatmentFor } from './vocabulary.ts';
|
|
52
52
|
export { CLUSTER_ONLY_BUDGET, GRAPH_NODE_BUDGET, relatedKeys } from './projections/graph.ts';
|
|
53
|
+
export type { RecedeSelection, Receding } from './recede.ts';
|
|
54
|
+
export { RECEDE_ALPHA, recedingOf } from './recede.ts';
|
|
55
|
+
export type { SelectionGesture, StoredSelection, ViewerSelection } from './selection.ts';
|
|
56
|
+
export { isNarrowBox, nextSelection, sameSelection, storedSelectionOf, viewerSelectionOf, } from './selection.ts';
|
|
53
57
|
export { isFooterSlot } from './projections/linear.ts';
|
|
54
58
|
/**
|
|
55
59
|
* The mark vocabulary, and it is deliberately the ONLY thing `marks.ts` puts on
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AAEH,YAAY,EACV,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,SAAS,EACT,SAAS,EACT,UAAU,EACV,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,WAAW,EACX,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,EACX,eAAe,EACf,WAAW,EACX,cAAc,EACd,UAAU,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,WAAW,EACX,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE9D,YAAY,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE3C,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAEnE,YAAY,EACV,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,YAAY,GACb,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -55,6 +55,8 @@ export { EDGE_TREATMENTS, dashArrayFor, labelFrom, treatmentFor } from "./vocabu
|
|
|
55
55
|
// editor's scale ladder decides the same tiers against the same constants, so it
|
|
56
56
|
// reads the canvas's own count rather than spelling "related" a second time.
|
|
57
57
|
export { CLUSTER_ONLY_BUDGET, GRAPH_NODE_BUDGET, relatedKeys } from "./projections/graph.js";
|
|
58
|
+
export { RECEDE_ALPHA, recedingOf } from "./recede.js";
|
|
59
|
+
export { isNarrowBox, nextSelection, sameSelection, storedSelectionOf, viewerSelectionOf, } from "./selection.js";
|
|
58
60
|
// `isFooterSlot` IS ON THE SURFACE FOR THE EDITOR'S RAIL, which windows the
|
|
59
61
|
// sequence and carries the footer's slots whole. Which slots belong to the
|
|
60
62
|
// footer is this package's rule — any tracker-family hold — and a rail that
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AA4BH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAQnE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU9E,OAAO,EAAE,YAAY,EACnB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,0EAA0E;AAC1E,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAC9E,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzF,+EAA+E;AAC/E,iFAAiF;AACjF,6EAA6E;AAC7E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AA4BH,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAG9D,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAQnE,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAGzC,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAU9E,OAAO,EAAE,YAAY,EACnB,YAAY,EACZ,aAAa,EACb,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAG/C,6EAA6E;AAC7E,8EAA8E;AAC9E,6EAA6E;AAC7E,0EAA0E;AAC1E,gFAAgF;AAChF,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAC9E,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzF,+EAA+E;AAC/E,iFAAiF;AACjF,6EAA6E;AAC7E,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAO7F,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAOvD,OAAO,EACL,WAAW,EACX,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAExB,4EAA4E;AAC5E,2EAA2E;AAC3E,4EAA4E;AAC5E,8EAA8E;AAC9E,uEAAuE;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAYvD,OAAO,EAAE,eAAe,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AACvE,iFAAiF;AACjF,8EAA8E;AAC9E,qDAAqD;AACrD,+EAA+E;AAC/E,yEAAyE;AACzE,6DAA6D;AAC7D,6EAA6E;AAC7E,2EAA2E;AAC3E,qEAAqE;AACrE,2EAA2E;AAC3E,qBAAqB;AACrB,0EAA0E;AAC1E,8EAA8E;AAC9E,6EAA6E;AAC7E,8EAA8E;AAC9E,0EAA0E;AAC1E,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,aAAa,EACb,WAAW,EACX,QAAQ,EACR,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG5E,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC"}
|
package/dist/mount.d.ts
CHANGED
|
@@ -18,6 +18,7 @@ import { type SpecDocument, type SpecElement, type SpecNode } from './element.ts
|
|
|
18
18
|
import { type NavigationState } from './navigation.ts';
|
|
19
19
|
import { type RenderOptions } from './render.ts';
|
|
20
20
|
import { type Projection } from './scene.ts';
|
|
21
|
+
import { type ViewerSelection } from './selection.ts';
|
|
21
22
|
/** The slice of an element `mount` needs beyond building. */
|
|
22
23
|
export interface MountElement extends SpecElement {
|
|
23
24
|
readonly ownerDocument: SpecDocument;
|
|
@@ -35,11 +36,29 @@ export interface MountEvent {
|
|
|
35
36
|
readonly target?: MountElement | null;
|
|
36
37
|
/** Present on a keyboard event. */
|
|
37
38
|
readonly key?: string;
|
|
39
|
+
/** Shift-click ranges; Shift with an arrow extends. */
|
|
40
|
+
readonly shiftKey?: boolean;
|
|
41
|
+
/** Cmd-click adds or drops one issue. */
|
|
42
|
+
readonly metaKey?: boolean;
|
|
43
|
+
/** Ctrl-click adds or drops one issue, as Cmd-click does. */
|
|
44
|
+
readonly ctrlKey?: boolean;
|
|
38
45
|
preventDefault?(): void;
|
|
39
46
|
}
|
|
40
47
|
export interface MountOptions extends RenderOptions {
|
|
41
|
-
/**
|
|
48
|
+
/**
|
|
49
|
+
* Called when a key is selected — by click, `Enter`, or `select()`. Reports
|
|
50
|
+
* `null` for none, the identity for a relationship, a single issue as the
|
|
51
|
+
* station it is drawn on, and for a set of two or more issues the most
|
|
52
|
+
* recently added key exactly as given.
|
|
53
|
+
*/
|
|
42
54
|
readonly onSelect?: ((key: string | null) => void) | undefined;
|
|
55
|
+
/**
|
|
56
|
+
* Called once per change of the selection, with the whole selection as the
|
|
57
|
+
* reader made it: never for a redraw, a projection switch, or a repeated
|
|
58
|
+
* selection of what is already selected. Fires before `onSelect`. The keys
|
|
59
|
+
* are a fresh frozen array each time.
|
|
60
|
+
*/
|
|
61
|
+
readonly onSelectionChange?: ((selection: ViewerSelection) => void) | undefined;
|
|
43
62
|
/** Called with the hovered key, and with `null` when nothing is hovered. */
|
|
44
63
|
readonly onHover?: ((key: string | null) => void) | undefined;
|
|
45
64
|
/**
|
package/dist/mount.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAA2B,KAAK,cAAc,EAAqB,MAAM,eAAe,CAAC;AAChG,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAe,MAAM,cAAc,CAAC;AAC/F,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,KAAK,aAAa,EAAY,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAkC,KAAK,UAAU,EAAc,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"mount.d.ts","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"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"}
|
package/dist/mount.js
CHANGED
|
@@ -17,9 +17,10 @@ import { edgeIdentity } from '@issuegraph/core';
|
|
|
17
17
|
import { normalizeDocument } from "./document.js";
|
|
18
18
|
import { materialize } from "./element.js";
|
|
19
19
|
import { initialNavigationState, navigate, reconcile, } from "./navigation.js";
|
|
20
|
-
import { COMMAND_ATTRIBUTE } from "./parts.js";
|
|
20
|
+
import { COMMAND_ATTRIBUTE, stationsOf } from "./parts.js";
|
|
21
21
|
import { sceneFor } from "./render.js";
|
|
22
22
|
import { GROUP_ATTRIBUTE, KEY_ATTRIBUTE } from "./scene.js";
|
|
23
|
+
import { nextSelection, sameSelection, selectedKeysOf, storedSelectionOf, viewerSelectionOf, } from "./selection.js";
|
|
23
24
|
import { resolveTheme } from "./theme.js";
|
|
24
25
|
/**
|
|
25
26
|
* Elements that own their own keyboard activation.
|
|
@@ -113,6 +114,18 @@ export function mountViewer(container, input, options = {}) {
|
|
|
113
114
|
focused: options.focused ?? initialNavigationState.focused,
|
|
114
115
|
selected: options.selected ?? initialNavigationState.selected,
|
|
115
116
|
};
|
|
117
|
+
/**
|
|
118
|
+
* The selection exactly as the reader or host made it, which the graph and
|
|
119
|
+
* the list recede by.
|
|
120
|
+
*
|
|
121
|
+
* `state.selected` cannot serve, because each draw moves a selected unit
|
|
122
|
+
* member to its unit's lead, and a member keeps only its own neighbours and
|
|
123
|
+
* lines, not its partners'. Every other reader — the tree, the handle and
|
|
124
|
+
* `onSelect` — still sees `state.selected`. Written wherever
|
|
125
|
+
* `state.selected` is chosen or dropped, and re-checked on every draw by
|
|
126
|
+
* `asGivenSelection`.
|
|
127
|
+
*/
|
|
128
|
+
let selectedAsGiven = state.selected;
|
|
116
129
|
let root = null;
|
|
117
130
|
let keyed = new Map();
|
|
118
131
|
// EVERY IDENTITY THE LAST DRAW PUT UNDER THE POINTER — issues AND decoration.
|
|
@@ -181,6 +194,118 @@ export function mountViewer(container, input, options = {}) {
|
|
|
181
194
|
* and an `update` that removes an edge still drops it.
|
|
182
195
|
*/
|
|
183
196
|
const stillDrawn = (key) => normalized.byKey.has(key) || isDocumentEdge(key) || pointable.has(key);
|
|
197
|
+
/**
|
|
198
|
+
* A selection with every member that no longer names something dropped.
|
|
199
|
+
* A single key is kept or dropped whole, as before; a set loses only the
|
|
200
|
+
* members that went, and collapses to one key or none as they go.
|
|
201
|
+
*/
|
|
202
|
+
const keepDrawn = (selected) => typeof selected === 'string' || selected === null
|
|
203
|
+
? selected !== null && stillDrawn(selected) ? selected : null
|
|
204
|
+
: storedSelectionOf({ kind: 'issues', keys: selected.filter((key) => stillDrawn(key) && !isDocumentEdge(key)) });
|
|
205
|
+
/**
|
|
206
|
+
* The remembered selection, while it still names what `state.selected`
|
|
207
|
+
* names; otherwise `state.selected` itself.
|
|
208
|
+
*
|
|
209
|
+
* It must name something this document carries and stand on the same
|
|
210
|
+
* station as `state.selected`. An update that removes a selected member, or
|
|
211
|
+
* a later selection of another subject, therefore falls back to the issue
|
|
212
|
+
* the graph and the list mark and the handle reports, so they never disagree.
|
|
213
|
+
*/
|
|
214
|
+
const asGivenSelection = () => {
|
|
215
|
+
const selected = state.selected;
|
|
216
|
+
const given = selectedAsGiven;
|
|
217
|
+
if (selected === null || given === null)
|
|
218
|
+
return selected;
|
|
219
|
+
const stations = stationsOf(normalized);
|
|
220
|
+
// Each station once, where its member was last added: the order `reconcile`
|
|
221
|
+
// names a set's stations in, so a set and its stations compare by value.
|
|
222
|
+
const stationsIn = (keys) => {
|
|
223
|
+
const named = keys.map((key) => stations.get(key) ?? key);
|
|
224
|
+
return JSON.stringify(named.filter((key, index) => named.lastIndexOf(key) === index));
|
|
225
|
+
};
|
|
226
|
+
const stillNamed = selectedKeysOf(given).filter((key) => normalized.byKey.has(key) || isDocumentEdge(key));
|
|
227
|
+
return stillNamed.length > 0 && stationsIn(stillNamed) === stationsIn(selectedKeysOf(selected))
|
|
228
|
+
? storedSelectionOf(viewerSelectionOf(normalized, stillNamed.length === 1 ? (stillNamed[0] ?? null) : stillNamed))
|
|
229
|
+
: selected;
|
|
230
|
+
};
|
|
231
|
+
/**
|
|
232
|
+
* A SET IS ITS MEMBERS AS GIVEN, ON EVERY DRAW. The members this document
|
|
233
|
+
* still carries are the selection, and their stations are derived from them
|
|
234
|
+
* afresh; nothing else is. Falling back to the stations the handle held
|
|
235
|
+
* selected a removed member's lead, an issue the reader never picked, and
|
|
236
|
+
* keeping old stations after an update moved a lead silently dropped a
|
|
237
|
+
* member that was still there. An edge identity is never a member. A single
|
|
238
|
+
* selection keeps today's rule — a removed member falls back to its lead —
|
|
239
|
+
* which `asGivenSelection` applies. `undefined` when the selection is not a
|
|
240
|
+
* set.
|
|
241
|
+
*/
|
|
242
|
+
const survivingSet = () => {
|
|
243
|
+
const given = selectedAsGiven;
|
|
244
|
+
if (given === null || typeof given === 'string')
|
|
245
|
+
return undefined;
|
|
246
|
+
return storedSelectionOf({ kind: 'issues', keys: given.filter((key) => normalized.byKey.has(key)) });
|
|
247
|
+
};
|
|
248
|
+
/** The selection as the reader made it, which `onSelectionChange` reports. */
|
|
249
|
+
const selectionAsGiven = () => viewerSelectionOf(normalized, selectedAsGiven);
|
|
250
|
+
/**
|
|
251
|
+
* What `onSelect` reports: for a set of two or more issues, the most recently
|
|
252
|
+
* added key exactly as given; otherwise the one key the handle holds, a unit
|
|
253
|
+
* member as its lead.
|
|
254
|
+
*/
|
|
255
|
+
const reportedKey = () => {
|
|
256
|
+
const given = selectionAsGiven();
|
|
257
|
+
if (given.kind === 'issues' && given.keys.length > 1)
|
|
258
|
+
return given.keys.at(-1) ?? null;
|
|
259
|
+
return selectedKeysOf(state.selected).at(-1) ?? null;
|
|
260
|
+
};
|
|
261
|
+
// WHAT THE HOST WAS LAST TOLD, compared by value, never by array identity.
|
|
262
|
+
// Seeded from the options, so mounting a selection is not a change.
|
|
263
|
+
let announced = selectionAsGiven();
|
|
264
|
+
let lastReported = reportedKey();
|
|
265
|
+
// ONE QUEUE FOR EVERY NOTICE, so a host that changes the selection from
|
|
266
|
+
// inside a callback is told about it after the notices already due, in
|
|
267
|
+
// order, and none is skipped or reported out of turn.
|
|
268
|
+
const notices = [];
|
|
269
|
+
let draining = false;
|
|
270
|
+
const deliver = (notice) => {
|
|
271
|
+
notices.push(notice);
|
|
272
|
+
if (draining)
|
|
273
|
+
return;
|
|
274
|
+
draining = true;
|
|
275
|
+
try {
|
|
276
|
+
for (let next = notices.shift(); next !== undefined; next = notices.shift())
|
|
277
|
+
next();
|
|
278
|
+
}
|
|
279
|
+
finally {
|
|
280
|
+
draining = false;
|
|
281
|
+
}
|
|
282
|
+
};
|
|
283
|
+
/**
|
|
284
|
+
* Tell the host about the selection, from ONE place. `onSelectionChange`
|
|
285
|
+
* fires when the selection as given changed by value; `onSelect` fires with
|
|
286
|
+
* it, and also when the key it reports changed (a projection switch that
|
|
287
|
+
* renames a unit member to its lead), and — `force` — on every click,
|
|
288
|
+
* `Enter` or `select()`, even of what is already selected, as it always has.
|
|
289
|
+
*/
|
|
290
|
+
const announce = (force) => {
|
|
291
|
+
const selection = selectionAsGiven();
|
|
292
|
+
const key = reportedKey();
|
|
293
|
+
const changed = !sameSelection(announced, selection);
|
|
294
|
+
const reported = changed || force || key !== lastReported;
|
|
295
|
+
announced = selection;
|
|
296
|
+
lastReported = key;
|
|
297
|
+
// A FRESH FROZEN COPY per notice, so a host that mutates what it was
|
|
298
|
+
// handed changes nothing here.
|
|
299
|
+
const handed = selection.kind === 'issues'
|
|
300
|
+
? Object.freeze({ kind: 'issues', keys: Object.freeze([...selection.keys]) })
|
|
301
|
+
: Object.freeze({ ...selection });
|
|
302
|
+
deliver(() => {
|
|
303
|
+
if (changed)
|
|
304
|
+
currentOptions.onSelectionChange?.(handed);
|
|
305
|
+
if (reported)
|
|
306
|
+
currentOptions.onSelect?.(key);
|
|
307
|
+
});
|
|
308
|
+
};
|
|
184
309
|
let hovered = null;
|
|
185
310
|
let destroyed = false;
|
|
186
311
|
// Set by the first `draw()` below, which runs before any listener can fire.
|
|
@@ -224,7 +349,6 @@ export function mountViewer(container, input, options = {}) {
|
|
|
224
349
|
// host has to hear about BOTH. Keying the notice on a single `dropped` flag
|
|
225
350
|
// covered only the first, so `setProjection` renamed the selection and told
|
|
226
351
|
// nobody: the handle read the station while the host still held the member.
|
|
227
|
-
const selectedBefore = state.selected;
|
|
228
352
|
// A DECORATION SELECTION IS NOT AN ISSUE AND MUST SURVIVE THIS TEST. The
|
|
229
353
|
// subject can be a `together-with` connector, whose identity is an edge and
|
|
230
354
|
// is therefore absent from `byKey` by construction — dropping on document
|
|
@@ -240,13 +364,32 @@ export function mountViewer(container, input, options = {}) {
|
|
|
240
364
|
// The post-materialize check settles it a few lines down, against a scene
|
|
241
365
|
// that exists; deferring costs one frame in which nothing renders an edge
|
|
242
366
|
// selection anyway.
|
|
243
|
-
|
|
244
|
-
|
|
367
|
+
const surviving = survivingSet();
|
|
368
|
+
if (surviving !== undefined) {
|
|
369
|
+
selectedAsGiven = surviving;
|
|
370
|
+
state = { ...state, selected: surviving };
|
|
245
371
|
}
|
|
372
|
+
else if (currentScene !== null) {
|
|
373
|
+
state = { ...state, selected: keepDrawn(state.selected) };
|
|
374
|
+
}
|
|
375
|
+
selectedAsGiven = asGivenSelection();
|
|
246
376
|
if (root !== null)
|
|
247
377
|
container.removeChild(root);
|
|
248
378
|
const scene = sceneFor(normalized, projection, {
|
|
249
379
|
...currentOptions,
|
|
380
|
+
// THE GRAPH AND THE LIST ARE HANDED THE SELECTION AS GIVEN, because they
|
|
381
|
+
// are the projections that recede. Each still marks the unit's lead,
|
|
382
|
+
// since it moves a member to its lead before it marks anything. The tree
|
|
383
|
+
// does not recede and keeps the lead the handle reports.
|
|
384
|
+
selected: projection === 'tree' ? state.selected : selectedAsGiven,
|
|
385
|
+
// DERIVED FROM THE SELECTION, never taken from the host's options, so a
|
|
386
|
+
// relationship recedes only while it is the selection and a clear
|
|
387
|
+
// always restores everything.
|
|
388
|
+
selectedEdge: typeof state.selected === 'string' && isDocumentEdge(state.selected) ? state.selected : null,
|
|
389
|
+
// NEVER TAKEN FROM THE HOST'S OPTIONS either, for the same reason: the
|
|
390
|
+
// mount draws its whole document, so the list works out what recedes
|
|
391
|
+
// from the live selection above.
|
|
392
|
+
receding: undefined,
|
|
250
393
|
// NEVER DETACHED HERE. The mount draws every row it is handed, so it is
|
|
251
394
|
// its own extent and the inline footer is already after the last of
|
|
252
395
|
// them. It also materializes `scene.root` and nothing else — a detached
|
|
@@ -254,7 +397,6 @@ export function mountViewer(container, input, options = {}) {
|
|
|
254
397
|
// walking into keys the page does not have. See `SceneOptions.detachFooter`.
|
|
255
398
|
detachFooter: false,
|
|
256
399
|
theme: currentOptions.theme ?? theme,
|
|
257
|
-
selected: state.selected,
|
|
258
400
|
focused: state.focused,
|
|
259
401
|
});
|
|
260
402
|
state = reconcile(scene, state);
|
|
@@ -342,19 +484,54 @@ export function mountViewer(container, input, options = {}) {
|
|
|
342
484
|
// by `byKey` and by `reconcile`; this covers the decoration case those two
|
|
343
485
|
// cannot see. It runs BEFORE the notice below, so a subject that went away
|
|
344
486
|
// is reported exactly once, through the same channel as every other change.
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
}
|
|
487
|
+
state = { ...state, selected: keepDrawn(state.selected) };
|
|
488
|
+
selectedAsGiven = state.selected === null ? null : asGivenSelection();
|
|
348
489
|
// TOLD, NOT JUST DROPPED. The host was told a selection began, so leaving it
|
|
349
490
|
// to infer the ending from a document it happens to have replaced is the
|
|
350
491
|
// same divergence `clearHover` exists to prevent one line up. Fired AFTER
|
|
351
492
|
// the DOM is in place, exactly as the hover clear is, so a host that redraws
|
|
352
493
|
// from this callback finds the viewer already consistent.
|
|
353
|
-
if (announceSelection
|
|
354
|
-
|
|
355
|
-
|
|
494
|
+
if (announceSelection)
|
|
495
|
+
announce(false);
|
|
496
|
+
};
|
|
497
|
+
/**
|
|
498
|
+
* The rank order a Shift range walks: every member of every ranked slot, in
|
|
499
|
+
* the order the document ranks them, so a range across a unit adds each of
|
|
500
|
+
* its members as given.
|
|
501
|
+
*/
|
|
502
|
+
const rankOrder = () => normalized.order.slots.filter((slot) => slot.rank !== null).flatMap((slot) => slot.members);
|
|
503
|
+
/**
|
|
504
|
+
* The selection after `gesture`, with everything this document cannot name
|
|
505
|
+
* dropped BEFORE it is written, so no notice ever names it: an issue key the
|
|
506
|
+
* scene cannot point at, or an edge identity inside a set of issues.
|
|
507
|
+
*/
|
|
508
|
+
const selectionAfter = (gesture) => {
|
|
509
|
+
const next = nextSelection(selectionAsGiven(), gesture, rankOrder());
|
|
510
|
+
if (next.kind === 'edge')
|
|
511
|
+
return stillDrawn(next.edgeId) ? next.edgeId : null;
|
|
512
|
+
if (next.kind === 'none')
|
|
513
|
+
return null;
|
|
514
|
+
return storedSelectionOf({
|
|
515
|
+
kind: 'issues',
|
|
516
|
+
keys: next.keys.filter((key) => stillDrawn(key) && !isDocumentEdge(key)),
|
|
517
|
+
});
|
|
518
|
+
};
|
|
519
|
+
/** What a pointer or key press on `key` asks for, given the modifiers held. */
|
|
520
|
+
const gestureFor = (key, event) => {
|
|
521
|
+
// A RELATIONSHIP UNDER ANY MODIFIER IS A PLAIN RELATIONSHIP CLICK: a set
|
|
522
|
+
// holds issues only, so it replaces any set.
|
|
523
|
+
if (isDocumentEdge(key))
|
|
524
|
+
return { kind: 'edge', edgeId: key };
|
|
525
|
+
if (event.metaKey === true || event.ctrlKey === true)
|
|
526
|
+
return { kind: 'toggle', key };
|
|
527
|
+
if (event.shiftKey === true)
|
|
528
|
+
return { kind: 'range', key };
|
|
529
|
+
return { kind: 'replace', key };
|
|
356
530
|
};
|
|
357
531
|
const emitSelect = (key) => {
|
|
532
|
+
applyGesture(key === null ? { kind: 'clear' } : isDocumentEdge(key) ? { kind: 'edge', edgeId: key } : { kind: 'replace', key }, key);
|
|
533
|
+
};
|
|
534
|
+
const applyGesture = (gesture, key) => {
|
|
358
535
|
// A KEY THIS DOCUMENT DOES NOT CARRY IS A SELECTION OF NOTHING, and it has
|
|
359
536
|
// to be resolved HERE, before the state is written. `select()` is documented
|
|
360
537
|
// to fire `onSelect` exactly as a click does — and a click can only ever
|
|
@@ -374,6 +551,7 @@ export function mountViewer(container, input, options = {}) {
|
|
|
374
551
|
// arm a connector click resolved to `null`, so the host was told a
|
|
375
552
|
// selection ENDED by the one gesture that was starting one.
|
|
376
553
|
const resolved = key !== null && stillDrawn(key) ? key : null;
|
|
554
|
+
const selected = selectionAfter(gesture);
|
|
377
555
|
// FOCUS FOLLOWS AN ISSUE, NEVER A DECORATION IDENTITY. `navigable` lists
|
|
378
556
|
// issues, and `navigate` resolves a key it cannot find to -1 and throws the
|
|
379
557
|
// reader back to the top of the order — which is why `onKeyDown` already
|
|
@@ -397,7 +575,8 @@ export function mountViewer(container, input, options = {}) {
|
|
|
397
575
|
(currentScene?.navigable.includes(station) ?? false)
|
|
398
576
|
? resolved
|
|
399
577
|
: null;
|
|
400
|
-
state = { ...state, selected
|
|
578
|
+
state = { ...state, selected, focused: focusable ?? state.focused };
|
|
579
|
+
selectedAsGiven = selected;
|
|
401
580
|
// SILENCED, because this function reports the result itself once the draw
|
|
402
581
|
// has settled it. Letting the draw announce too would fire `onSelect` twice
|
|
403
582
|
// for one selection whenever reconciliation renamed it — and a caller
|
|
@@ -434,7 +613,10 @@ export function mountViewer(container, input, options = {}) {
|
|
|
434
613
|
// would tell the host a key the handle does not hold, which is the very
|
|
435
614
|
// disagreement between the two notifications this function was written to
|
|
436
615
|
// end. `select()` stays equivalent to the click it documents itself as.
|
|
437
|
-
|
|
616
|
+
// FORCED, because `onSelect` has always reported every click, `Enter` and
|
|
617
|
+
// `select()`, even of what is already selected; `onSelectionChange` still
|
|
618
|
+
// fires only on a change.
|
|
619
|
+
announce(true);
|
|
438
620
|
};
|
|
439
621
|
const onClick = (event) => {
|
|
440
622
|
// AN ACTIVATION ON A CONTROL THAT ACTIVATES ITSELF IS THAT CONTROL'S — the
|
|
@@ -458,10 +640,22 @@ export function mountViewer(container, input, options = {}) {
|
|
|
458
640
|
}
|
|
459
641
|
if (ownsItsOwnActivation(event.target, container))
|
|
460
642
|
return;
|
|
643
|
+
// A CLICK ON NOTHING KEYED CLEARS A SELECTION ON THE GRAPH ONLY, exactly as
|
|
644
|
+
// `select(null)` does, so a reader can restore a receded graph by clicking
|
|
645
|
+
// blank space. The list and the tree ignore such a click as they always
|
|
646
|
+
// did. With nothing selected there is nothing to clear, so it neither
|
|
647
|
+
// redraws nor tells the host.
|
|
648
|
+
// A MODIFIER CLICK ON BLANK SPACE KEEPS THE SET: the reader was building
|
|
649
|
+
// one and missed, which is not a request to throw it away.
|
|
461
650
|
const key = keyAt(event.target, container);
|
|
462
|
-
|
|
651
|
+
const modified = event.shiftKey === true || event.metaKey === true || event.ctrlKey === true;
|
|
652
|
+
const clearsSelection = projection === 'graph' && state.selected !== null && !modified;
|
|
653
|
+
if (key === null) {
|
|
654
|
+
if (clearsSelection)
|
|
655
|
+
emitSelect(null);
|
|
463
656
|
return;
|
|
464
|
-
|
|
657
|
+
}
|
|
658
|
+
applyGesture(gestureFor(key, event), key);
|
|
465
659
|
};
|
|
466
660
|
const onPointerOver = (event) => {
|
|
467
661
|
const key = keyAt(event.target, container);
|
|
@@ -499,7 +693,7 @@ export function mountViewer(container, input, options = {}) {
|
|
|
499
693
|
if (standingOn !== null && standingOn !== state.focused && currentScene.navigable.includes(standingOn)) {
|
|
500
694
|
state = { ...state, focused: standingOn };
|
|
501
695
|
}
|
|
502
|
-
const result = navigate(currentScene, state, event.key);
|
|
696
|
+
const result = navigate(currentScene, state, event.key, { shift: event.shiftKey === true });
|
|
503
697
|
if (result.command.kind === 'none')
|
|
504
698
|
return;
|
|
505
699
|
event.preventDefault?.();
|
|
@@ -507,6 +701,21 @@ export function mountViewer(container, input, options = {}) {
|
|
|
507
701
|
emitSelect(result.command.key);
|
|
508
702
|
return;
|
|
509
703
|
}
|
|
704
|
+
// SHIFT WITH AN ARROW IS A SHIFT-CLICK ON THE NEWLY FOCUSED ISSUE.
|
|
705
|
+
if (result.command.kind === 'extend') {
|
|
706
|
+
state = result.state;
|
|
707
|
+
applyGesture({ kind: 'range', key: result.command.key }, result.command.key);
|
|
708
|
+
return;
|
|
709
|
+
}
|
|
710
|
+
if (result.command.kind === 'clear') {
|
|
711
|
+
applyGesture({ kind: 'clear' }, null);
|
|
712
|
+
// THE REDRAW DESTROYED THE ROW HOLDING FOCUS, and a clear names no subject
|
|
713
|
+
// for `applyGesture` to refocus, so the tab stop the reader kept is
|
|
714
|
+
// focused again — this is the viewer's own key press, not a host update.
|
|
715
|
+
if (state.focused !== null)
|
|
716
|
+
keyed.get(state.focused)?.focus?.();
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
510
719
|
// A COMMAND IS THE HOST'S TO COMPLETE, exactly like the header's own
|
|
511
720
|
// buttons: this package cannot switch its own projection or resize its own
|
|
512
721
|
// column. It travels on the same channel a click on those buttons does, so
|
|
@@ -553,8 +762,9 @@ export function mountViewer(container, input, options = {}) {
|
|
|
553
762
|
// or a NOW row, and neither carries a focus key — so `keyed` missed them
|
|
554
763
|
// and the scroll this promises never happened for the subjects the two
|
|
555
764
|
// views place furthest apart.
|
|
556
|
-
|
|
557
|
-
|
|
765
|
+
const subject = selectedKeysOf(state.selected).at(-1);
|
|
766
|
+
if (subject !== undefined) {
|
|
767
|
+
drawn.get(subject)?.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });
|
|
558
768
|
}
|
|
559
769
|
},
|
|
560
770
|
select(key) {
|
package/dist/mount.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mount.js","sourceRoot":"","sources":["../src/mount.ts"],"names":[],"mappings":"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"}
|
package/dist/navigation.d.ts
CHANGED
|
@@ -14,11 +14,20 @@
|
|
|
14
14
|
* a coordinate.
|
|
15
15
|
*/
|
|
16
16
|
import { type Scene } from './scene.ts';
|
|
17
|
+
import type { StoredSelection } from './selection.ts';
|
|
17
18
|
export interface NavigationState {
|
|
18
19
|
/** The roving tab stop. `null` before anything has been focused. */
|
|
19
20
|
readonly focused: string | null;
|
|
20
|
-
/**
|
|
21
|
-
|
|
21
|
+
/**
|
|
22
|
+
* The selection, which survives a projection change: one issue or one
|
|
23
|
+
* relationship as a string, or a set of issues in the order they were added
|
|
24
|
+
* — see `StoredSelection`.
|
|
25
|
+
*/
|
|
26
|
+
readonly selected: StoredSelection;
|
|
27
|
+
}
|
|
28
|
+
/** The modifier keys `navigate` reads. */
|
|
29
|
+
export interface NavigationModifiers {
|
|
30
|
+
readonly shift?: boolean | undefined;
|
|
22
31
|
}
|
|
23
32
|
/** What the shell should do. `none` means the host keeps its own shortcut. */
|
|
24
33
|
export type NavigationCommand = {
|
|
@@ -30,6 +39,20 @@ export type NavigationCommand = {
|
|
|
30
39
|
readonly kind: 'select';
|
|
31
40
|
readonly key: string;
|
|
32
41
|
}
|
|
42
|
+
/**
|
|
43
|
+
* Shift with an arrow: focus moved to `key`, and the shell extends the
|
|
44
|
+
* selection to it as a Shift-click on it would — a range in rank order.
|
|
45
|
+
* `navigate` cannot build the set itself: the range rule needs the set as
|
|
46
|
+
* the reader made it, which only the shell holds.
|
|
47
|
+
*/
|
|
48
|
+
| {
|
|
49
|
+
readonly kind: 'extend';
|
|
50
|
+
readonly key: string;
|
|
51
|
+
}
|
|
52
|
+
/** Escape with something selected: the shell clears the selection. */
|
|
53
|
+
| {
|
|
54
|
+
readonly kind: 'clear';
|
|
55
|
+
}
|
|
33
56
|
/**
|
|
34
57
|
* A command the SHELL cannot complete on its own.
|
|
35
58
|
*
|
|
@@ -66,5 +89,5 @@ export declare function reconcile(scene: Scene, state: NavigationState): Navigat
|
|
|
66
89
|
* boundary. An unhandled key returns the state untouched and `none`, so a host
|
|
67
90
|
* keeps every shortcut this package does not claim.
|
|
68
91
|
*/
|
|
69
|
-
export declare function navigate(scene: Scene, state: NavigationState, key: string): NavigationResult;
|
|
92
|
+
export declare function navigate(scene: Scene, state: NavigationState, key: string, modifiers?: NavigationModifiers): NavigationResult;
|
|
70
93
|
//# sourceMappingURL=navigation.d.ts.map
|