@issuegraph/editor 0.4.0 → 0.10.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 +31 -6
- package/dist/a11y/baseline.d.ts +182 -0
- package/dist/a11y/baseline.d.ts.map +1 -0
- package/dist/a11y/baseline.js +430 -0
- package/dist/a11y/baseline.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 +1 -1
- package/dist/create/draft.d.ts +17 -0
- package/dist/create/draft.d.ts.map +1 -1
- package/dist/create/draft.js +19 -0
- package/dist/create/draft.js.map +1 -1
- package/dist/create/keys.d.ts +70 -5
- package/dist/create/keys.d.ts.map +1 -1
- package/dist/create/keys.js +78 -17
- 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 +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -2
- package/dist/index.js.map +1 -1
- package/dist/overlay/render.d.ts.map +1 -1
- package/dist/overlay/render.js +54 -14
- package/dist/overlay/render.js.map +1 -1
- package/dist/overlay/styles.d.ts +1 -1
- package/dist/overlay/styles.d.ts.map +1 -1
- package/dist/overlay/styles.js +40 -0
- 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/scale/ladder.d.ts.map +1 -1
- package/dist/scale/ladder.js +10 -3
- package/dist/scale/ladder.js.map +1 -1
- package/dist/scale/render.d.ts.map +1 -1
- package/dist/scale/render.js +9 -1
- package/dist/scale/render.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 +200 -10
- package/dist/workspace/host.d.ts.map +1 -1
- package/dist/workspace/host.js +420 -42
- package/dist/workspace/host.js.map +1 -1
- package/dist/workspace/inspector.d.ts +45 -1
- package/dist/workspace/inspector.d.ts.map +1 -1
- package/dist/workspace/inspector.js +11 -0
- package/dist/workspace/inspector.js.map +1 -1
- package/dist/workspace/mount.d.ts +52 -5
- package/dist/workspace/mount.d.ts.map +1 -1
- package/dist/workspace/mount.js +1366 -58
- package/dist/workspace/mount.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 +402 -1
- package/dist/workspace/render.d.ts.map +1 -1
- package/dist/workspace/render.js +941 -35
- package/dist/workspace/render.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 +554 -41
- package/dist/workspace/styles.js.map +1 -1
- package/package.json +3 -3
package/dist/workspace/host.d.ts
CHANGED
|
@@ -26,12 +26,13 @@
|
|
|
26
26
|
* of which a host reducer should know about, and each of which the demo now
|
|
27
27
|
* handles beside the mount rather than through it.
|
|
28
28
|
*/
|
|
29
|
-
import {
|
|
30
|
-
import type { GraphDocument, MutationId, Proposal, StoredIssue } from '@issuegraph/store';
|
|
29
|
+
import type { EdgeId, GraphDocument, MutationId, Proposal, StoredIssue } from '@issuegraph/store';
|
|
31
30
|
import { type CreateDraft } from '../create/draft.ts';
|
|
32
31
|
import type { KeyIntent } from '../create/keys.ts';
|
|
33
32
|
import type { Point } from '../create/placement.ts';
|
|
33
|
+
import type { CandidateId } from '../firstpass/candidates.ts';
|
|
34
34
|
import { type ScaleState } from '../scale/commands.ts';
|
|
35
|
+
import { type FirstPassCommand, type FirstPassState } from './firstpass.ts';
|
|
35
36
|
import { type WorkspaceSelection } from './selection.ts';
|
|
36
37
|
export interface HostState {
|
|
37
38
|
readonly selection: WorkspaceSelection;
|
|
@@ -46,16 +47,37 @@ export interface HostState {
|
|
|
46
47
|
readonly drag: string | null;
|
|
47
48
|
/** Where a canvas drop landed, so the kind chooser can be placed there. */
|
|
48
49
|
readonly drop: Point | null;
|
|
50
|
+
/** The first-pass surface: shut, scanning, failed, or holding a queue. */
|
|
51
|
+
readonly firstPass: FirstPassState;
|
|
52
|
+
/**
|
|
53
|
+
* Which conflicted write has its held document on show, if any.
|
|
54
|
+
*
|
|
55
|
+
* ONE AT A TIME: the difference is drawn inside a panel rather than a dialog,
|
|
56
|
+
* and two open at once would push the second past the fold on the surface
|
|
57
|
+
* whose whole job is to be read at a glance.
|
|
58
|
+
*
|
|
59
|
+
* PRUNED BY THE SHELL, NOT BY `reconcileHost`. Its lifetime is the WRITE
|
|
60
|
+
* LEDGER's and reconciliation sees only the landed document — a mutation id
|
|
61
|
+
* is not answerable from a `GraphDocument`. `mountWorkspace` already walks
|
|
62
|
+
* the ledger to prune `writeCarriers` and clears this in the same pass, on a
|
|
63
|
+
* rule stricter than "still in the ledger": a `retry on latest` reserves its
|
|
64
|
+
* record as `pending` and a resolve whose re-check refuses leaves it
|
|
65
|
+
* `invalid`, and in BOTH the record is still there with its held document
|
|
66
|
+
* gone. So the rule is "still a conflict".
|
|
67
|
+
*/
|
|
68
|
+
readonly diffOpen: MutationId | null;
|
|
49
69
|
}
|
|
50
70
|
export declare const INITIAL_HOST_STATE: HostState;
|
|
51
71
|
/**
|
|
52
72
|
* What the shell saw.
|
|
53
73
|
*
|
|
54
74
|
* `control` carries a `data-ig-command` — the package's own vocabulary
|
|
55
|
-
* (`select-edge`, `focus`, `
|
|
56
|
-
* chrome
|
|
57
|
-
*
|
|
58
|
-
*
|
|
75
|
+
* (`select-edge`, `focus`, `add`, `kind`, `delete`, `cancel`, …) and the
|
|
76
|
+
* mount's chrome, which is now the handful of controls that need a DOM or a
|
|
77
|
+
* host's own surface (`target-query`, `target`, `audit-filter`, `retry`,
|
|
78
|
+
* `discard`) — share one channel because the shell reads one attribute.
|
|
79
|
+
* `point` and `group` are the viewer's two identities: a focusable issue key,
|
|
80
|
+
* and a mark naming an edge or a slot.
|
|
59
81
|
*/
|
|
60
82
|
export type HostCommand = {
|
|
61
83
|
readonly kind: 'point';
|
|
@@ -81,11 +103,38 @@ export type HostCommand = {
|
|
|
81
103
|
readonly kind: 'drop';
|
|
82
104
|
readonly key: string | null;
|
|
83
105
|
readonly at: Point;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* A first-pass act that did not arrive as a `data-ig-command` string.
|
|
109
|
+
*
|
|
110
|
+
* The keyboard's intent is already a typed {@link FirstPassCommand}-shaped
|
|
111
|
+
* value and a scan's answer is a list of candidates, so both reach this
|
|
112
|
+
* reducer as VALUES rather than being flattened into an attribute and parsed
|
|
113
|
+
* back out. The controls that DO arrive as attributes still come through
|
|
114
|
+
* `control`, and both routes end in the same arm below.
|
|
115
|
+
*/
|
|
116
|
+
| {
|
|
117
|
+
readonly kind: 'first-pass';
|
|
118
|
+
readonly command: FirstPassCommand;
|
|
84
119
|
};
|
|
85
120
|
/** What the shell performs against the store after reducing. */
|
|
86
121
|
export type HostEffect = {
|
|
87
122
|
readonly kind: 'propose';
|
|
88
123
|
readonly proposal: Proposal;
|
|
124
|
+
/**
|
|
125
|
+
* The issue this edit is about, answered ONCE — here, and never again.
|
|
126
|
+
*
|
|
127
|
+
* THE SHELL REMEMBERS IT AGAINST THE WRITE. A refusal arrives from the
|
|
128
|
+
* store long after the act that caused it, by which time a sibling write
|
|
129
|
+
* may have taken the relationship away; asking then is asking a document
|
|
130
|
+
* that no longer holds the answer. See {@link editCarrier} for what the
|
|
131
|
+
* remaining sources can and cannot say, and `mount.ts` for the map this
|
|
132
|
+
* value is recorded in.
|
|
133
|
+
*
|
|
134
|
+
* `null` when the document holds NEITHER end — there is no panel for an
|
|
135
|
+
* issue this backlog does not carry, so there is nowhere to state it.
|
|
136
|
+
*/
|
|
137
|
+
readonly carrier: string | null;
|
|
89
138
|
} | {
|
|
90
139
|
readonly kind: 'retry';
|
|
91
140
|
readonly mutationId: MutationId;
|
|
@@ -94,15 +143,118 @@ export type HostEffect = {
|
|
|
94
143
|
readonly mutationId: MutationId;
|
|
95
144
|
} | {
|
|
96
145
|
readonly kind: 'dismiss-change';
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Run the host's candidate scan under this generation.
|
|
149
|
+
*
|
|
150
|
+
* The port is asynchronous by declaration, so the scan is an EFFECT and its
|
|
151
|
+
* answer comes back as a command. The generation rides along because a close
|
|
152
|
+
* and a re-open can leave two scans in flight — see `firstpass.ts`.
|
|
153
|
+
*/
|
|
154
|
+
| {
|
|
155
|
+
readonly kind: 'find-candidates';
|
|
156
|
+
readonly scan: number;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* An `apply`: propose this create, and REMEMBER which candidate it was.
|
|
160
|
+
*
|
|
161
|
+
* Its own arm rather than a plain `propose`, because the shell has to be able
|
|
162
|
+
* to find this exact write again if the reader takes the answer back — and it
|
|
163
|
+
* cannot do that from the create's fields. `candidates.ts` mints a distinct
|
|
164
|
+
* {@link CandidateId} per finding precisely so two detectors proposing the
|
|
165
|
+
* same pair stay two findings, so `kind`/`from`/`to` does not identify a
|
|
166
|
+
* write; only the `MutationId` the store returns does, and only the shell
|
|
167
|
+
* ever sees it.
|
|
168
|
+
*/
|
|
169
|
+
| {
|
|
170
|
+
readonly kind: 'first-pass-apply';
|
|
171
|
+
readonly candidateId: CandidateId;
|
|
172
|
+
readonly proposal: Proposal;
|
|
173
|
+
/** As on `propose`, and for the same reason — this arm emits a write too. */
|
|
174
|
+
readonly carrier: string | null;
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* An `undo` took back an `apply`, and the shell decides what the store can do
|
|
178
|
+
* about it.
|
|
179
|
+
*
|
|
180
|
+
* The CANDIDATE rather than a proposal: this reducer does not build a
|
|
181
|
+
* `Proposal` for a write it is not making, and the shell matches the create
|
|
182
|
+
* against the store's own records by the candidate's own fields.
|
|
183
|
+
*/
|
|
184
|
+
| {
|
|
185
|
+
readonly kind: 'first-pass-withdraw';
|
|
186
|
+
readonly candidateId: CandidateId;
|
|
97
187
|
};
|
|
98
188
|
export interface HostResult {
|
|
99
189
|
readonly state: HostState;
|
|
100
190
|
readonly effects: readonly HostEffect[];
|
|
191
|
+
/**
|
|
192
|
+
* Whether this reducer HAS AN ARM for the command, rather than whether the
|
|
193
|
+
* command changed anything.
|
|
194
|
+
*
|
|
195
|
+
* The two are different and only one of them is answerable here. Plenty of
|
|
196
|
+
* arms settle without changing state — a `retype` with no edge selected, a
|
|
197
|
+
* `focus` that was already focused — and those are still this reducer's acts.
|
|
198
|
+
* What `false` means is narrower and is the `default` arm's own words: a
|
|
199
|
+
* command published on the same attribute that belongs to the HOST's chrome,
|
|
200
|
+
* which this reducer must not guess at.
|
|
201
|
+
*
|
|
202
|
+
* IT EXISTS FOR THE KEYBOARD. A shell activating a control from a key press
|
|
203
|
+
* has to cancel the press, or the browser's own activation behaviour fires a
|
|
204
|
+
* second click and the act happens twice — but cancelling a press whose
|
|
205
|
+
* command this reducer never owned suppresses the native click the host's own
|
|
206
|
+
* listener was waiting for, and the host's control silently stops answering
|
|
207
|
+
* the keyboard. The shell cannot tell those apart from the outside; this
|
|
208
|
+
* reducer already knows, so it says.
|
|
209
|
+
*/
|
|
210
|
+
readonly claimed: boolean;
|
|
101
211
|
}
|
|
212
|
+
/**
|
|
213
|
+
* Which issue an edit is ABOUT — the panel that states it, and the panel it is
|
|
214
|
+
* refused on.
|
|
215
|
+
*
|
|
216
|
+
* THE SUBJECT OF AN EDIT IS DECIDED ONCE, AND THAT MEANS ONCE IN TIME AS WELL
|
|
217
|
+
* AS ONCE IN THE SOURCE. It used to be decided twice and in two vocabularies:
|
|
218
|
+
* the panel derived its own subject from the selection (canonicalized onto a
|
|
219
|
+
* together unit's lead), and the inspector separately asked whether the REFUSED
|
|
220
|
+
* EDGE's identity named that subject. Two derivations of one fact diverge, and
|
|
221
|
+
* they did, three times over. This function replaced the second derivation —
|
|
222
|
+
* and then a fourth divergence appeared inside it, because it was still being
|
|
223
|
+
* CALLED twice: once when the edit went out, and again when the refusal came
|
|
224
|
+
* back, against a document a sibling write had changed in between. So the shell
|
|
225
|
+
* calls it at the moment of emission, records the answer against the write, and
|
|
226
|
+
* reads the record afterwards. See `HostEffect`'s `carrier` and `mount.ts`.
|
|
227
|
+
*
|
|
228
|
+
* THE CARRIER'S END WINS, AND THE FAR END IS THE FALLBACK. The relationship is
|
|
229
|
+
* declared in the carrier's block, so that is the panel a reader made the edit
|
|
230
|
+
* from and the panel that can undo it. A create naming an unknown SOURCE has
|
|
231
|
+
* no such panel, and stating the refusal on the target's — the only issue the
|
|
232
|
+
* document holds — beats stating it nowhere.
|
|
233
|
+
*
|
|
234
|
+
* AND WITH ONLY AN IDENTITY LEFT, THE SAME RANKING APPLIES AS FAR AS THE FORMAT
|
|
235
|
+
* KEPT IT. `edgeIdentity` discards the declaring end of a SYMMETRIC pair and
|
|
236
|
+
* keeps it for a directed one, so `edgeIdentityEnd` names the carrier of a
|
|
237
|
+
* directed identity and answers `either` for a symmetric one — and both arms
|
|
238
|
+
* here rank by one rule instead of two. THIS ARM HAS BEEN WRONG IN BOTH
|
|
239
|
+
* DIRECTIONS: ranking a symmetric identity's segments invented an order the
|
|
240
|
+
* format had thrown away and stated a refusal on the far end's panel, and the
|
|
241
|
+
* correction — ranking nothing at all — discarded the order a DIRECTED identity
|
|
242
|
+
* still carries, so a host proposing on the shared store had its refusal placed
|
|
243
|
+
* under whichever end `document.issues` listed first. `either`, and a directed
|
|
244
|
+
* identity whose carrier this backlog does not hold, both fall through to the
|
|
245
|
+
* fallback this arm always had: "an issue this backlog holds and this edit was
|
|
246
|
+
* between", in the document's own order. The reader's own edits reach none of
|
|
247
|
+
* it, because their carrier was taken while the edge was still there.
|
|
248
|
+
*
|
|
249
|
+
* `null` when the document holds NEITHER end, which is not a refusal being
|
|
250
|
+
* dropped: there is no panel for an issue this backlog does not carry, so
|
|
251
|
+
* there is nowhere the reader could be standing to read it.
|
|
252
|
+
*/
|
|
253
|
+
export declare function editCarrier(document: GraphDocument, proposal: Proposal): string | null;
|
|
102
254
|
/** The one reducer. `document` is the landed document, for edge lookups. */
|
|
103
255
|
export declare function reduceHost(state: HostState, command: HostCommand, document: GraphDocument): HostResult;
|
|
104
256
|
/**
|
|
105
|
-
* Bring the state back into agreement with
|
|
257
|
+
* Bring the state back into agreement with what the reader can SEE.
|
|
106
258
|
*
|
|
107
259
|
* The store re-renders on every landed write, and a write can remove what the
|
|
108
260
|
* state names: a retype or a flip gives the edge a NEW identity, a delete
|
|
@@ -111,12 +263,50 @@ export declare function reduceHost(state: HostState, command: HostCommand, docum
|
|
|
111
263
|
* the inspector showing a picker for nothing — the viewer already refuses a
|
|
112
264
|
* stale selection the same way, so the host does too, from the document
|
|
113
265
|
* rather than from memory of what it just proposed.
|
|
266
|
+
*
|
|
267
|
+
* ## `hidden` is the OTHER half of "no longer carries", and the landed
|
|
268
|
+
* document cannot state it
|
|
269
|
+
*
|
|
270
|
+
* `document` is what LANDED, and an unsettled retype or flip lands nothing —
|
|
271
|
+
* so the edge the reader was inspecting is still in it, and the check above
|
|
272
|
+
* passes, while the store's projection has already hidden that edge and the
|
|
273
|
+
* workspace has already stopped drawing it. Two documents were answering
|
|
274
|
+
* "does this selection resolve", and they disagreed for the whole life of the
|
|
275
|
+
* write: the panel resolved the selection to `none` and drew the empty
|
|
276
|
+
* sentence, and — because a refusal is only drawn for the subject it names —
|
|
277
|
+
* the reason the edit was refused was drawn nowhere at all. A reader who
|
|
278
|
+
* retyped an edge into a relationship that already exists saw the picker
|
|
279
|
+
* close and nothing else. `hidden` is the store's own set of landed edges its
|
|
280
|
+
* projection is not showing, so both halves of the question are asked here
|
|
281
|
+
* and the answer is one.
|
|
282
|
+
*
|
|
283
|
+
* A HIDDEN EDGE RETURNS THE PANEL TO ITS CARRIER, not to nothing. Through
|
|
284
|
+
* {@link carrierOf}, which is the same rule the refusal's own carrier was taken
|
|
285
|
+
* by when the edit went out — so the panel this lands on and the panel the
|
|
286
|
+
* refusal is stated under are one answer rather than two that agree. Clearing to `none`
|
|
287
|
+
* instead would be the same silence the check above already produced.
|
|
288
|
+
*
|
|
289
|
+
* IT IS A BACKSTOP NOW, NOT THE ONLY GUARD. `emitting` already puts the panel
|
|
290
|
+
* on the carrier the moment the reader's own edit goes out, so the route this
|
|
291
|
+
* paragraph was written for cannot reach here any more. What still can is a
|
|
292
|
+
* SIBLING write: another edit's retype or flip hiding the edge this selection
|
|
293
|
+
* names, which no act of the reader's announced.
|
|
294
|
+
*
|
|
295
|
+
* RECONCILING ONTO THE PROJECTED REPLACEMENT was the other candidate — follow
|
|
296
|
+
* the selection to the identity the edit produced — and it cannot be done from
|
|
297
|
+
* here or anywhere else. It works only when that identity happens to be
|
|
298
|
+
* landed, which is exactly one of the two refusals this route reaches:
|
|
299
|
+
* `duplicate-edge` produces an edge that already exists, but `cardinality`
|
|
300
|
+
* produces a PHANTOM, and a selection naming an edge the landed document does
|
|
301
|
+
* not carry is dropped by the first check in this very function on the next
|
|
302
|
+
* render. Measured: `reconcileHost` returns `{ kind: 'none' }` for it. That is
|
|
303
|
+
* the same vanishing one frame later, and it is the same decision the phantom
|
|
304
|
+
* capsule already records by publishing no `select-edge` — there is nothing
|
|
305
|
+
* there to select.
|
|
114
306
|
*/
|
|
115
|
-
export declare function reconcileHost(state: HostState, document: GraphDocument): HostState;
|
|
307
|
+
export declare function reconcileHost(state: HostState, document: GraphDocument, hidden: ReadonlySet<EdgeId>): HostState;
|
|
116
308
|
/** The issues a target search offers, by reference or title, never the source itself. */
|
|
117
309
|
export declare function targetMatches(issues: readonly StoredIssue[], query: string, source: string | null, limit?: number): readonly StoredIssue[];
|
|
118
|
-
/** The edge kinds, in the format's order — the keyboard path's `1`–`5` is this list. */
|
|
119
|
-
export declare const KINDS: readonly EdgeField[];
|
|
120
310
|
/** How far the reader may scroll into the rail window before it is re-cut around them, in rows. */
|
|
121
311
|
export declare const RAIL_SLACK = 20;
|
|
122
312
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/workspace/host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;
|
|
1
|
+
{"version":3,"file":"host.d.ts","sourceRoot":"","sources":["../../src/workspace/host.ts"],"names":[],"mappings":"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"}
|