@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
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one place a write state becomes a position.
|
|
3
|
+
*
|
|
4
|
+
* ## What this module is for
|
|
5
|
+
*
|
|
6
|
+
* `attachEdgeOverlays` draws everything an overlay can say by reusing the path's
|
|
7
|
+
* own position — a halo is the path stroked wider, a ghost is the path dashed
|
|
8
|
+
* differently. What it cannot draw is the half that needs a NEW position: a chip
|
|
9
|
+
* on the two nodes, a cross beside the terminal, a reason beside the line, and a
|
|
10
|
+
* conflict's second version on the line's perpendicular. Those travel as
|
|
11
|
+
* {@link EdgeOverlay.marks}, declared here rather than half-drawn there.
|
|
12
|
+
*
|
|
13
|
+
* Layer 1 places them, because it is the layer that computed the layout. This
|
|
14
|
+
* module is the translation that lets it do so without learning anything: it
|
|
15
|
+
* turns each declared mark into an {@link EdgeMark} whose vocabulary is
|
|
16
|
+
* POSITIONAL, so the viewer receives `companion` and never `conflict`.
|
|
17
|
+
*
|
|
18
|
+
* ## The mapping is the seam, so it lives on one table
|
|
19
|
+
*
|
|
20
|
+
* One entry per mark the grammar can declare, and the table is exhaustive over
|
|
21
|
+
* that union rather than a switch with a default — a fifth mark added to the
|
|
22
|
+
* grammar should fail to compile here, not silently stop being drawn. That is
|
|
23
|
+
* the failure this whole area has had twice: a channel declared in a table and
|
|
24
|
+
* rendered by nothing.
|
|
25
|
+
*
|
|
26
|
+
* ## The words stay on this side
|
|
27
|
+
*
|
|
28
|
+
* `writing…` and `✕` are this package's vocabulary — the same strings
|
|
29
|
+
* `renderOverlayMark` puts in the host-facing slot — and they are handed over as
|
|
30
|
+
* opaque content. A host that translates translates one vocabulary, and the
|
|
31
|
+
* viewer never holds a word it could be asked to translate.
|
|
32
|
+
*
|
|
33
|
+
* The hue travels as a token NAME, read from the treatment table rather than
|
|
34
|
+
* copied, so a retheme moves the mark and the stroke together. Where a state has
|
|
35
|
+
* no hue of its own this asks for NONE, and layer 1 fills in the relationship's.
|
|
36
|
+
*
|
|
37
|
+
* That last clause used to say the mark "inherits the relationship's — which is
|
|
38
|
+
* the same rule the dashed clone follows", and both halves were wrong. A mark is
|
|
39
|
+
* a SIBLING of the edge, so it inherits the viewer's body text and not the hue
|
|
40
|
+
* `.ig-edge[data-edge=…]` gives the line; and the dashed clone does not inherit
|
|
41
|
+
* either — `render.ts` states its stroke inline for exactly that reason, in a
|
|
42
|
+
* comment about exactly this trap. A `pending-write` chip therefore rendered
|
|
43
|
+
* grey beside the red line it belonged to.
|
|
44
|
+
*
|
|
45
|
+
* So "no tone" is a REQUEST for the kind's hue rather than a decision to have
|
|
46
|
+
* none, and the layer that owns the relationship vocabulary is the one that
|
|
47
|
+
* resolves it.
|
|
48
|
+
*/
|
|
49
|
+
import { OVERLAY_TREATMENTS, overlayFor, } from "./grammar.js";
|
|
50
|
+
/**
|
|
51
|
+
* Where each declared mark goes, and what it says when it gets there.
|
|
52
|
+
*
|
|
53
|
+
* `glyph` is `null` for a mark whose whole form is the line — a companion is not
|
|
54
|
+
* a symbol, it is the relationship drawn a second time.
|
|
55
|
+
*/
|
|
56
|
+
const MARK_PLACEMENTS = Object.freeze({
|
|
57
|
+
// §17b: "writing… chip on both nodes". Both, not one — an optimistic edit is
|
|
58
|
+
// in flight at both ends of what it joins, and a single chip reads as a
|
|
59
|
+
// property of whichever end happened to get it.
|
|
60
|
+
'node-chip': { placement: 'both-ends', glyph: 'writing…' },
|
|
61
|
+
// A glyph rather than a word, for the reason the edge vocabulary uses glyphs:
|
|
62
|
+
// it is the non-colour channel, and it needs no translation. `marks.ts` steps
|
|
63
|
+
// it clear of the terminal marker rather than over it.
|
|
64
|
+
'terminal-cross': { placement: 'terminal', glyph: '✕' },
|
|
65
|
+
// THE SENTENCE IS STILL THE HOST'S. What goes on the canvas is the symbol that
|
|
66
|
+
// says a reason exists and where it belongs; the reason itself is keyed off
|
|
67
|
+
// the store's `InvalidCode` in the panel, exactly as `renderOverlayMark`'s
|
|
68
|
+
// slot does. Putting prose on a canvas would also put it outside the rail that
|
|
69
|
+
// carries every readable thing about this document.
|
|
70
|
+
'inline-reason': { placement: 'beside', glyph: '!' },
|
|
71
|
+
'second-version': { placement: 'companion', glyph: null },
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* The marks one overlay asks layer 1 to draw.
|
|
75
|
+
*
|
|
76
|
+
* Empty for an overlay with no marks, which is most of them: `selected` declares
|
|
77
|
+
* none at all, and its halo is drawn from the path's own position.
|
|
78
|
+
*/
|
|
79
|
+
export function marksFor(overlay) {
|
|
80
|
+
const marks = [];
|
|
81
|
+
for (const mark of overlay.marks) {
|
|
82
|
+
const spec = MARK_PLACEMENTS[mark];
|
|
83
|
+
// THE HUE OF THE STATE THAT DECLARED THIS MARK, not of the overlay as a
|
|
84
|
+
// whole. An edge can be `selected` and `conflict` at once, and the overlay's
|
|
85
|
+
// own `line` carries whichever won on precedence — so reading the tone from
|
|
86
|
+
// there would paint a conflict's companion in the focus colour the moment a
|
|
87
|
+
// reader clicked it.
|
|
88
|
+
const owner = overlay.states.find((state) => {
|
|
89
|
+
// Widened at the read, because each entry's `marks` is a literal tuple —
|
|
90
|
+
// `selected`'s is empty, so an unwidened `includes` takes `never` and the
|
|
91
|
+
// lookup does not compile.
|
|
92
|
+
const declared = OVERLAY_TREATMENTS[state].marks;
|
|
93
|
+
return declared.includes(mark);
|
|
94
|
+
});
|
|
95
|
+
const tone = owner === undefined ? null : OVERLAY_TREATMENTS[owner].hueToken;
|
|
96
|
+
// NO ACCESSIBLE NAME, and there is no longer a field for one. The canvas is
|
|
97
|
+
// `aria-hidden`, so nothing inside it can carry a name however it is marked
|
|
98
|
+
// up — and the state is already announced once, on the edge's own
|
|
99
|
+
// `aria-label`, by `attachEdgeOverlays`. Saying it twice is what the hidden
|
|
100
|
+
// canvas exists to prevent.
|
|
101
|
+
marks.push({ placement: spec.placement, glyph: spec.glyph, tone });
|
|
102
|
+
}
|
|
103
|
+
return marks;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Every overlay's marks, keyed the way layer 1 keys its edges.
|
|
107
|
+
*
|
|
108
|
+
* `ProjectedEdge.id` is `edgeIdentity(field, from, to)` — the same string the
|
|
109
|
+
* viewer publishes on `data-ig-group` — so the two sides agree with no
|
|
110
|
+
* reconstruction and nothing to keep in step.
|
|
111
|
+
*
|
|
112
|
+
* An overlay with no marks is left OUT rather than mapped to an empty list: the
|
|
113
|
+
* absence of a key and a key with nothing under it should not be two ways of
|
|
114
|
+
* saying the same thing to a reader of this map.
|
|
115
|
+
*/
|
|
116
|
+
export function edgeMarkRequests(edges) {
|
|
117
|
+
const requests = new Map();
|
|
118
|
+
// Folded through `overlayFor`, the same function `attachEdgeOverlays` uses, so
|
|
119
|
+
// the marks drawn and the states announced cannot come from two readings of
|
|
120
|
+
// one projection.
|
|
121
|
+
for (const edge of edges) {
|
|
122
|
+
const marks = marksFor(overlayFor(edge));
|
|
123
|
+
if (marks.length === 0)
|
|
124
|
+
continue;
|
|
125
|
+
requests.set(edge.id, marks);
|
|
126
|
+
}
|
|
127
|
+
return requests;
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=request.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request.js","sourceRoot":"","sources":["../../src/overlay/request.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAKH,OAAO,EAGL,kBAAkB,EAClB,UAAU,GACX,MAAM,cAAc,CAAC;AAEtB;;;;;GAKG;AACH,MAAM,eAAe,GAEjB,MAAM,CAAC,MAAM,CAAC;IAChB,6EAA6E;IAC7E,wEAAwE;IACxE,gDAAgD;IAChD,WAAW,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE;IAC1D,8EAA8E;IAC9E,8EAA8E;IAC9E,uDAAuD;IACvD,gBAAgB,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,EAAE;IACvD,+EAA+E;IAC/E,4EAA4E;IAC5E,2EAA2E;IAC3E,+EAA+E;IAC/E,oDAAoD;IACpD,eAAe,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,EAAE;IACpD,gBAAgB,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE;CAC1D,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAoB;IAC3C,MAAM,KAAK,GAAe,EAAE,CAAC;IAE7B,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;QACnC,wEAAwE;QACxE,6EAA6E;QAC7E,4EAA4E;QAC5E,4EAA4E;QAC5E,qBAAqB;QACrB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE;YAC1C,yEAAyE;YACzE,0EAA0E;YAC1E,2BAA2B;YAC3B,MAAM,QAAQ,GAA2B,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC;YACzE,OAAO,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC;QAC7E,4EAA4E;QAC5E,4EAA4E;QAC5E,kEAAkE;QAClE,4EAA4E;QAC5E,4BAA4B;QAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA+B,CAAC;IACxD,+EAA+E;IAC/E,4EAA4E;IAC5E,kBAAkB;IAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACzC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACjC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
package/dist/overlay/styles.d.ts
CHANGED
|
@@ -37,5 +37,5 @@
|
|
|
37
37
|
* and the dash pattern carry that on their own, so the movement is what drops
|
|
38
38
|
* rather than the signal.
|
|
39
39
|
*/
|
|
40
|
-
export declare const edgeOverlayStylesheet = "\n.ig-overlay {\n pointer-events: none;\n}\n\n.ig-overlay-halo {\n fill: none;\n stroke: var(--ig-focus);\n stroke-linecap: round;\n}\n\n/* The stroke is set per element from the treatment table \u2014 a state's own hue\n where it has one, the relationship's where it does not \u2014 for the same reason\n the viewer sets its dash per element: one source for a channel. */\n.ig-overlay-dash {\n fill: none;\n}\n\n.ig-overlay-marching {\n stroke-dasharray: 4 4;\n animation: ig-overlay-march 1s linear infinite;\n}\n\n.ig-overlay-dotted {\n stroke-dasharray: 1 3;\n}\n\n@keyframes ig-overlay-march {\n to {\n stroke-dashoffset: -8;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .ig-overlay-marching {\n animation: none;\n }\n}\n\n/*
|
|
40
|
+
export declare const edgeOverlayStylesheet = "\n.ig-overlay {\n pointer-events: none;\n}\n\n.ig-overlay-halo {\n fill: none;\n stroke: var(--ig-focus);\n stroke-linecap: round;\n}\n\n/* The stroke is set per element from the treatment table \u2014 a state's own hue\n where it has one, the relationship's where it does not \u2014 for the same reason\n the viewer sets its dash per element: one source for a channel. */\n.ig-overlay-dash {\n fill: none;\n}\n\n.ig-overlay-marching {\n stroke-dasharray: 4 4;\n animation: ig-overlay-march 1s linear infinite;\n}\n\n.ig-overlay-dotted {\n stroke-dasharray: 1 3;\n}\n\n@keyframes ig-overlay-march {\n to {\n stroke-dashoffset: -8;\n }\n}\n\n@media (prefers-reduced-motion: reduce) {\n .ig-overlay-marching {\n animation: none;\n }\n}\n\n/* QUALIFIED, AND THE QUALIFICATION IS THE WHOLE RULE \u2014 it is what makes these\n three declarations apply at all.\n\n They used to be bare, and the comment here explained why: a together-with was\n drawn as a CONNECTOR rather than an edge path, so an edge-anchored rule left\n one of the five relationships unstyled. Both halves of that have since stopped\n being true, and nothing noticed either.\n\n The connector is gone \u2014 layer 1's section-16 pass draws a together unit as ONE\n card with its members listed inside, so the relationship's whole drawn form is\n its badge, and the badge rules below are what reach it.\n\n And the bare selector never painted an edge. A drawn path carries BOTH the edge\n class with its kind attribute, which the viewer hues at specificity (0,2,0), and\n the state attribute, which at (0,1,0) loses to it \u2014 and specificity beats source\n order, so concatenating this sheet last changed nothing. Measured in a browser:\n a conflicted blocked-by edge computed the relationship's own red, never the\n state's gold.\n\n So the bare rules matched exactly two kinds of element and were dead on both.\n On a path they lost the cascade; on a badge they set a stroke, which a span has\n no use for.\n\n invalid was the only state that looked right, and by accident: it is the one\n settled state carrying a dash, so render.ts builds a CLONE for it, and a clone\n drops its class \u2014 which is precisely why that file sets the stroke inline on\n one. The states that build no clone had nothing to fall back on, which is why\n failed rendered identically to invalid, and conflict identically to a settled\n edge.\n\n The kind attribute is carried by every drawn path and by nothing else, so adding\n it reaches (0,3,0) and wins OUTRIGHT rather than by tying and being placed later.\n A tie would work today and would break the first time a host reordered the\n sheets \u2014 and this rule has already failed silently once.\n\n (No backticks in here: this is inside a template literal, and one ends it.) */\n.ig-edge[data-edge][data-ig-state~='invalid'] {\n stroke: var(--ig-state-invalid);\n}\n\n.ig-edge[data-edge][data-ig-state~='failed'] {\n stroke: var(--ig-state-failed);\n}\n\n.ig-edge[data-edge][data-ig-state~='conflict'] {\n stroke: var(--ig-state-conflict);\n}\n\n/* A BADGE IS NOT A STROKE, AND SOME RELATIONSHIPS ARE ONLY A BADGE.\n together-with is drawn as no line at all \u2014 it shares a rank rather than\n ordering anything, and layer 1 draws the unit as one card with its members\n listed inside \u2014 so the chip that names it is its entire representation. The\n marks this module clones from a stroke cannot be cloned from a span, and the\n stroke rules above paint a property a span does not have: an in-flight or\n refused together-edge therefore read exactly like a settled one, with the\n state visible only to a screen reader.\n\n So a chip states the state with what a chip HAS: its border and its ink.\n Every state the drawn edge distinguishes, distinguished here too \u2014 including\n the two that have no hue of their own, where a stroke uses a ghost or a halo\n and a chip uses a dash and the focus ring. */\n.ig-badge[data-ig-state~='invalid'] {\n border-color: var(--ig-state-invalid);\n color: var(--ig-state-invalid);\n}\n\n.ig-badge[data-ig-state~='failed'] {\n border-color: var(--ig-state-failed);\n color: var(--ig-state-failed);\n}\n\n.ig-badge[data-ig-state~='conflict'] {\n border-color: var(--ig-state-conflict);\n color: var(--ig-state-conflict);\n}\n\n/* Pending is the state with no hue: the drawn edge says it with a dashed ghost,\n and a chip says it with a dashed border of its own. */\n.ig-badge[data-ig-state~='pending-write'] {\n border-style: dashed;\n}\n\n/* Selected is the focus ring's meaning, and the theme says so where it declares\n the token \u2014 selected is deliberately not an edit-state hue. */\n.ig-badge[data-ig-state~='selected'] {\n box-shadow: 0 0 0 var(--ig-stroke) var(--ig-focus);\n}\n\n.ig-overlay-chip {\n background: var(--ig-surface-2);\n color: var(--ig-text-muted);\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n padding: var(--ig-space-tight);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size-small);\n}\n\n.ig-overlay-cross {\n color: var(--ig-state-failed);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size);\n}\n\n.ig-overlay-reason {\n color: var(--ig-state-invalid);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size-small);\n}\n\n.ig-overlay-held {\n color: var(--ig-state-conflict);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size-small);\n}\n";
|
|
41
41
|
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/overlay/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,eAAO,MAAM,qBAAqB,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/overlay/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,eAAO,MAAM,qBAAqB,k7KA0JjC,CAAC"}
|
package/dist/overlay/styles.js
CHANGED
|
@@ -76,23 +76,94 @@ export const edgeOverlayStylesheet = `
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
|
|
79
|
-
/*
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
79
|
+
/* QUALIFIED, AND THE QUALIFICATION IS THE WHOLE RULE — it is what makes these
|
|
80
|
+
three declarations apply at all.
|
|
81
|
+
|
|
82
|
+
They used to be bare, and the comment here explained why: a together-with was
|
|
83
|
+
drawn as a CONNECTOR rather than an edge path, so an edge-anchored rule left
|
|
84
|
+
one of the five relationships unstyled. Both halves of that have since stopped
|
|
85
|
+
being true, and nothing noticed either.
|
|
86
|
+
|
|
87
|
+
The connector is gone — layer 1's section-16 pass draws a together unit as ONE
|
|
88
|
+
card with its members listed inside, so the relationship's whole drawn form is
|
|
89
|
+
its badge, and the badge rules below are what reach it.
|
|
90
|
+
|
|
91
|
+
And the bare selector never painted an edge. A drawn path carries BOTH the edge
|
|
92
|
+
class with its kind attribute, which the viewer hues at specificity (0,2,0), and
|
|
93
|
+
the state attribute, which at (0,1,0) loses to it — and specificity beats source
|
|
94
|
+
order, so concatenating this sheet last changed nothing. Measured in a browser:
|
|
95
|
+
a conflicted blocked-by edge computed the relationship's own red, never the
|
|
96
|
+
state's gold.
|
|
97
|
+
|
|
98
|
+
So the bare rules matched exactly two kinds of element and were dead on both.
|
|
99
|
+
On a path they lost the cascade; on a badge they set a stroke, which a span has
|
|
100
|
+
no use for.
|
|
101
|
+
|
|
102
|
+
invalid was the only state that looked right, and by accident: it is the one
|
|
103
|
+
settled state carrying a dash, so render.ts builds a CLONE for it, and a clone
|
|
104
|
+
drops its class — which is precisely why that file sets the stroke inline on
|
|
105
|
+
one. The states that build no clone had nothing to fall back on, which is why
|
|
106
|
+
failed rendered identically to invalid, and conflict identically to a settled
|
|
107
|
+
edge.
|
|
108
|
+
|
|
109
|
+
The kind attribute is carried by every drawn path and by nothing else, so adding
|
|
110
|
+
it reaches (0,3,0) and wins OUTRIGHT rather than by tying and being placed later.
|
|
111
|
+
A tie would work today and would break the first time a host reordered the
|
|
112
|
+
sheets — and this rule has already failed silently once.
|
|
113
|
+
|
|
83
114
|
(No backticks in here: this is inside a template literal, and one ends it.) */
|
|
84
|
-
[data-ig-state~='invalid'] {
|
|
115
|
+
.ig-edge[data-edge][data-ig-state~='invalid'] {
|
|
85
116
|
stroke: var(--ig-state-invalid);
|
|
86
117
|
}
|
|
87
118
|
|
|
88
|
-
[data-ig-state~='failed'] {
|
|
119
|
+
.ig-edge[data-edge][data-ig-state~='failed'] {
|
|
89
120
|
stroke: var(--ig-state-failed);
|
|
90
121
|
}
|
|
91
122
|
|
|
92
|
-
[data-ig-state~='conflict'] {
|
|
123
|
+
.ig-edge[data-edge][data-ig-state~='conflict'] {
|
|
93
124
|
stroke: var(--ig-state-conflict);
|
|
94
125
|
}
|
|
95
126
|
|
|
127
|
+
/* A BADGE IS NOT A STROKE, AND SOME RELATIONSHIPS ARE ONLY A BADGE.
|
|
128
|
+
together-with is drawn as no line at all — it shares a rank rather than
|
|
129
|
+
ordering anything, and layer 1 draws the unit as one card with its members
|
|
130
|
+
listed inside — so the chip that names it is its entire representation. The
|
|
131
|
+
marks this module clones from a stroke cannot be cloned from a span, and the
|
|
132
|
+
stroke rules above paint a property a span does not have: an in-flight or
|
|
133
|
+
refused together-edge therefore read exactly like a settled one, with the
|
|
134
|
+
state visible only to a screen reader.
|
|
135
|
+
|
|
136
|
+
So a chip states the state with what a chip HAS: its border and its ink.
|
|
137
|
+
Every state the drawn edge distinguishes, distinguished here too — including
|
|
138
|
+
the two that have no hue of their own, where a stroke uses a ghost or a halo
|
|
139
|
+
and a chip uses a dash and the focus ring. */
|
|
140
|
+
.ig-badge[data-ig-state~='invalid'] {
|
|
141
|
+
border-color: var(--ig-state-invalid);
|
|
142
|
+
color: var(--ig-state-invalid);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
.ig-badge[data-ig-state~='failed'] {
|
|
146
|
+
border-color: var(--ig-state-failed);
|
|
147
|
+
color: var(--ig-state-failed);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
.ig-badge[data-ig-state~='conflict'] {
|
|
151
|
+
border-color: var(--ig-state-conflict);
|
|
152
|
+
color: var(--ig-state-conflict);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/* Pending is the state with no hue: the drawn edge says it with a dashed ghost,
|
|
156
|
+
and a chip says it with a dashed border of its own. */
|
|
157
|
+
.ig-badge[data-ig-state~='pending-write'] {
|
|
158
|
+
border-style: dashed;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
/* Selected is the focus ring's meaning, and the theme says so where it declares
|
|
162
|
+
the token — selected is deliberately not an edit-state hue. */
|
|
163
|
+
.ig-badge[data-ig-state~='selected'] {
|
|
164
|
+
box-shadow: 0 0 0 var(--ig-stroke) var(--ig-focus);
|
|
165
|
+
}
|
|
166
|
+
|
|
96
167
|
.ig-overlay-chip {
|
|
97
168
|
background: var(--ig-surface-2);
|
|
98
169
|
color: var(--ig-text-muted);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/overlay/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/overlay/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG;AAEH,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0JpC,CAAC"}
|
package/dist/picker/render.d.ts
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The type picker
|
|
2
|
+
* The type picker — the five kinds an edge can be retyped to — as markup.
|
|
3
|
+
*
|
|
4
|
+
* ## The direction statement and the flip are NOT here, and once were
|
|
5
|
+
*
|
|
6
|
+
* §17b's direction card belongs to the panel that has an edge selected, and
|
|
7
|
+
* `renderWorkspace` draws it: the relationship row already states the pair and
|
|
8
|
+
* the kind, and the flip sits at the end of that row where frame 17b draws it.
|
|
9
|
+
* They lived here because this surface landed first, and a picker composed into
|
|
10
|
+
* that panel then drew a second statement and a second flip one element from
|
|
11
|
+
* the first — which is the encoding ambiguity §17b exists to remove, produced by
|
|
12
|
+
* the surface meant to remove it.
|
|
13
|
+
*
|
|
14
|
+
* {@link ./view.ts PickerView} still carries `direction` and `flip`: they are
|
|
15
|
+
* the MODEL, `reduceHost` builds its proposal from them, and a host that wants
|
|
16
|
+
* another arrangement renders them itself — `PickerView` carries the ordered
|
|
17
|
+
* pair and the kind and no word order beyond that, which is what makes such a
|
|
18
|
+
* host cheap. What moved is the drawing, not the answer.
|
|
3
19
|
*
|
|
4
20
|
* ## Every readable byte comes from the host or from the document
|
|
5
21
|
*
|
|
@@ -9,24 +25,18 @@
|
|
|
9
25
|
* being worded here is a RELATIONSHIP, so a phrase written in would be an
|
|
10
26
|
* English clause in the one place the design says a reader most often gets the
|
|
11
27
|
* encoding wrong. `render.test.ts` enforces it by asserting that every text node
|
|
12
|
-
* is
|
|
13
|
-
*
|
|
14
|
-
* slipping in.
|
|
15
|
-
*
|
|
16
|
-
* ## The default word order is a DEFAULT
|
|
28
|
+
* is a {@link ./words.ts PickerWords} entry — a total claim rather than a spot
|
|
29
|
+
* check, so a word added later fails rather than slipping in.
|
|
17
30
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
* kind and no order beyond that, so a host that needs another arrangement
|
|
23
|
-
* renders the view model. Nothing here is load-bearing for it.
|
|
31
|
+
* IT NO LONGER ADMITS AN ISSUE REFERENCE EITHER, and the tightening is the
|
|
32
|
+
* statement leaving rather than a decision: the two references this surface
|
|
33
|
+
* used to draw were the statement's. A list of KINDS naming an ISSUE would now
|
|
34
|
+
* itself be the finding.
|
|
24
35
|
*
|
|
25
36
|
* ## It publishes commands and wires nothing
|
|
26
37
|
*
|
|
27
|
-
* `data-ig-command="retype"` with a `data-ig-kind
|
|
28
|
-
*
|
|
29
|
-
* mount, exactly as the scale ladder and the re-evaluate surface already defer
|
|
38
|
+
* `data-ig-command="retype"` with a `data-ig-kind`. Listener wiring, focus and
|
|
39
|
+
* dispatch belong to the mount, exactly as the scale ladder and the re-evaluate surface already defer
|
|
30
40
|
* them — and the proposal each command stands for is on the view model, so a
|
|
31
41
|
* mount reads it rather than reconstructing it from attributes.
|
|
32
42
|
*
|
|
@@ -54,7 +64,7 @@ export interface PickerOptions {
|
|
|
54
64
|
}
|
|
55
65
|
export interface PickerResult {
|
|
56
66
|
readonly view: PickerView;
|
|
57
|
-
/** The
|
|
67
|
+
/** The kind list, under one root. */
|
|
58
68
|
readonly markup: string;
|
|
59
69
|
/**
|
|
60
70
|
* The theme and this surface's own stylesheet. Install both.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/picker/render.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/picker/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,EAEL,KAAK,KAAK,EAKX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE/D,OAAO,EAAmB,KAAK,UAAU,EAAc,MAAM,WAAW,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,aAAa;IAC5B;;;OAGG;IACH,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IACnC,mEAAmE;IACnE,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,qCAAqC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB;;;;;;;;;OASG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAkCD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,aAAa,EACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,aAAa,GACrB,YAAY,CAsBd"}
|
package/dist/picker/render.js
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* The type picker
|
|
2
|
+
* The type picker — the five kinds an edge can be retyped to — as markup.
|
|
3
|
+
*
|
|
4
|
+
* ## The direction statement and the flip are NOT here, and once were
|
|
5
|
+
*
|
|
6
|
+
* §17b's direction card belongs to the panel that has an edge selected, and
|
|
7
|
+
* `renderWorkspace` draws it: the relationship row already states the pair and
|
|
8
|
+
* the kind, and the flip sits at the end of that row where frame 17b draws it.
|
|
9
|
+
* They lived here because this surface landed first, and a picker composed into
|
|
10
|
+
* that panel then drew a second statement and a second flip one element from
|
|
11
|
+
* the first — which is the encoding ambiguity §17b exists to remove, produced by
|
|
12
|
+
* the surface meant to remove it.
|
|
13
|
+
*
|
|
14
|
+
* {@link ./view.ts PickerView} still carries `direction` and `flip`: they are
|
|
15
|
+
* the MODEL, `reduceHost` builds its proposal from them, and a host that wants
|
|
16
|
+
* another arrangement renders them itself — `PickerView` carries the ordered
|
|
17
|
+
* pair and the kind and no word order beyond that, which is what makes such a
|
|
18
|
+
* host cheap. What moved is the drawing, not the answer.
|
|
3
19
|
*
|
|
4
20
|
* ## Every readable byte comes from the host or from the document
|
|
5
21
|
*
|
|
@@ -9,24 +25,18 @@
|
|
|
9
25
|
* being worded here is a RELATIONSHIP, so a phrase written in would be an
|
|
10
26
|
* English clause in the one place the design says a reader most often gets the
|
|
11
27
|
* encoding wrong. `render.test.ts` enforces it by asserting that every text node
|
|
12
|
-
* is
|
|
13
|
-
*
|
|
14
|
-
* slipping in.
|
|
28
|
+
* is a {@link ./words.ts PickerWords} entry — a total claim rather than a spot
|
|
29
|
+
* check, so a word added later fails rather than slipping in.
|
|
15
30
|
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* offered as the ordinary case and bypassed the same way the re-evaluate
|
|
21
|
-
* summary's is: {@link ./view.ts PickerView} carries the ordered pair and the
|
|
22
|
-
* kind and no order beyond that, so a host that needs another arrangement
|
|
23
|
-
* renders the view model. Nothing here is load-bearing for it.
|
|
31
|
+
* IT NO LONGER ADMITS AN ISSUE REFERENCE EITHER, and the tightening is the
|
|
32
|
+
* statement leaving rather than a decision: the two references this surface
|
|
33
|
+
* used to draw were the statement's. A list of KINDS naming an ISSUE would now
|
|
34
|
+
* itself be the finding.
|
|
24
35
|
*
|
|
25
36
|
* ## It publishes commands and wires nothing
|
|
26
37
|
*
|
|
27
|
-
* `data-ig-command="retype"` with a `data-ig-kind
|
|
28
|
-
*
|
|
29
|
-
* mount, exactly as the scale ladder and the re-evaluate surface already defer
|
|
38
|
+
* `data-ig-command="retype"` with a `data-ig-kind`. Listener wiring, focus and
|
|
39
|
+
* dispatch belong to the mount, exactly as the scale ladder and the re-evaluate surface already defer
|
|
30
40
|
* them — and the proposal each command stands for is on the view model, so a
|
|
31
41
|
* mount reads it rather than reconstructing it from attributes.
|
|
32
42
|
*
|
|
@@ -64,20 +74,6 @@ function optionSpec(option, words) {
|
|
|
64
74
|
]),
|
|
65
75
|
]);
|
|
66
76
|
}
|
|
67
|
-
/**
|
|
68
|
-
* The direction statement.
|
|
69
|
-
*
|
|
70
|
-
* The two references are the DOCUMENT's, not this package's words, and each
|
|
71
|
-
* carries the role it plays so a host can restyle or reorder them without
|
|
72
|
-
* parsing the sentence back apart.
|
|
73
|
-
*/
|
|
74
|
-
function directionSpec(direction, words) {
|
|
75
|
-
return element('p', { class: 'ig-picker-direction', 'data-ig-kind': direction.kind }, [
|
|
76
|
-
element('span', { class: 'ig-picker-ref', 'data-ig-role': 'from' }, [direction.from]),
|
|
77
|
-
element('span', { class: 'ig-picker-phrase' }, [words.kinds[direction.kind]]),
|
|
78
|
-
element('span', { class: 'ig-picker-ref', 'data-ig-role': 'to' }, [direction.to]),
|
|
79
|
-
]);
|
|
80
|
-
}
|
|
81
77
|
/**
|
|
82
78
|
* The picker for one existing edge.
|
|
83
79
|
*
|
|
@@ -94,13 +90,6 @@ export function renderPicker(document, edgeId, options) {
|
|
|
94
90
|
view.options.length === 0
|
|
95
91
|
? null
|
|
96
92
|
: element('ul', { class: 'ig-picker-kinds', 'aria-label': words.heading }, view.options.map((option) => optionSpec(option, words))),
|
|
97
|
-
// Symmetric kinds render NEITHER of the next two. The absence is the
|
|
98
|
-
// finding: a control to reverse a relationship that carries no direction
|
|
99
|
-
// would claim the format says something it does not.
|
|
100
|
-
view.direction === null ? null : directionSpec(view.direction, words),
|
|
101
|
-
view.flip === null
|
|
102
|
-
? null
|
|
103
|
-
: element('button', { type: 'button', class: 'ig-picker-flip', 'data-ig-command': 'flip' }, [words.flip]),
|
|
104
93
|
]);
|
|
105
94
|
return {
|
|
106
95
|
view,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/picker/render.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/picker/render.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AAEH,OAAO,EAGL,OAAO,EACP,YAAY,EACZ,YAAY,EACZ,QAAQ,GACT,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAoC,UAAU,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAgC/C,gFAAgF;AAChF,SAAS,UAAU,CAAC,MAAkB,EAAE,KAAkB;IACxD,OAAO,OAAO,CACZ,IAAI,EACJ;QACE,KAAK,EAAE,gBAAgB;QACvB,cAAc,EAAE,MAAM,CAAC,IAAI;QAC3B,eAAe,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;QACnD,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;KAClD,EACD;QACE,OAAO,CACL,QAAQ,EACR;YACE,IAAI,EAAE,QAAQ;YACd,KAAK,EAAE,kBAAkB;YACzB,iBAAiB,EAAE,QAAQ;YAC3B,cAAc,EAAE,MAAM,CAAC,IAAI;YAC3B,oEAAoE;YACpE,kEAAkE;YAClE,kEAAkE;YAClE,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO;SAClD,EACD;YACE,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;YAC1E,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI;SACzF,CACF;KACF,CACF,CAAC;AACJ,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAC1B,QAAuB,EACvB,MAAc,EACd,OAAsB;IAEtB,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC1C,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC1C,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1B,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE;QACnF,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7D,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC;YACvB,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,OAAO,CACL,IAAI,EACJ,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,KAAK,CAAC,OAAO,EAAE,EACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CACxD;KACN,CAAC,CAAC;IAEH,OAAO;QACL,IAAI;QACJ,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC;QAC1B,MAAM,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,KAAK,gBAAgB,EAAE;QACnF,WAAW,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;KACnC,CAAC;AACJ,CAAC"}
|
package/dist/picker/styles.d.ts
CHANGED
|
@@ -10,17 +10,17 @@
|
|
|
10
10
|
* IT ADDS SELECTORS RATHER THAN REDEFINING THEM. Nothing here reaches into the
|
|
11
11
|
* viewer's own classes; this file styles only what the picker introduces.
|
|
12
12
|
*
|
|
13
|
-
* ##
|
|
13
|
+
* ## §17b's direction statement is no longer styled here
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
15
|
+
* This sheet once laid the statement out as a flex row so a host could reorder
|
|
16
|
+
* it with the CSS order property. The statement is `renderWorkspace`'s
|
|
17
|
+
* relationship row now — see `picker/render.ts`'s header for why — and its
|
|
18
|
+
* layout went with it, to `workspace/styles.ts`. Nothing here draws a
|
|
19
|
+
* relationship any more; this sheet styles the kind list and nothing else.
|
|
20
20
|
*
|
|
21
21
|
* Shipped as a string for the same reason the viewer's is: an entry that
|
|
22
22
|
* imports CSS cannot be loaded by a bare Node runtime, and a string needs no
|
|
23
23
|
* bundler.
|
|
24
24
|
*/
|
|
25
|
-
export declare const pickerStylesheet = "\n.ig-picker {\n display: flex;\n flex-direction: column;\n gap: var(--ig-space);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size);\n line-height: var(--ig-line-height);\n color: var(--ig-text-body);\n}\n\n.ig-picker-heading {\n margin: 0;\n font-weight: normal;\n font-size: var(--ig-font-size-small);\n color: var(--ig-text-muted);\n}\n\n.ig-picker-kinds {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--ig-space-tight);\n}\n\n.ig-picker-choice {\n display: flex;\n align-items: baseline;\n gap: var(--ig-space-tight);\n width: 100%;\n text-align: left;\n background: var(--ig-surface);\n color: var(--ig-text-body);\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n padding: var(--ig-space-tight);\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n.ig-picker-choice:focus-visible
|
|
25
|
+
export declare const pickerStylesheet = "\n.ig-picker {\n display: flex;\n flex-direction: column;\n gap: var(--ig-space);\n font-family: var(--ig-font-ui);\n font-size: var(--ig-font-size);\n line-height: var(--ig-line-height);\n color: var(--ig-text-body);\n}\n\n.ig-picker-heading {\n margin: 0;\n font-weight: normal;\n font-size: var(--ig-font-size-small);\n color: var(--ig-text-muted);\n}\n\n.ig-picker-kinds {\n list-style: none;\n margin: 0;\n padding: 0;\n display: flex;\n flex-direction: column;\n gap: var(--ig-space-tight);\n}\n\n.ig-picker-choice {\n display: flex;\n align-items: baseline;\n gap: var(--ig-space-tight);\n width: 100%;\n text-align: left;\n background: var(--ig-surface);\n color: var(--ig-text-body);\n border: var(--ig-stroke) solid var(--ig-line);\n border-radius: var(--ig-radius);\n padding: var(--ig-space-tight);\n font-family: inherit;\n font-size: inherit;\n line-height: inherit;\n}\n\n.ig-picker-choice:focus-visible {\n outline: var(--ig-focus-ring) solid var(--ig-focus);\n outline-offset: var(--ig-stroke);\n}\n\n/* The kind the edge already carries. Marked on the ROW rather than on the\n button, so a host restyling the control keeps the distinction. */\n.ig-picker-kind[data-current='true'] .ig-picker-choice {\n background: var(--ig-surface-2);\n border-color: var(--ig-accent);\n color: var(--ig-text);\n}\n\n.ig-picker-current {\n margin-left: auto;\n font-size: var(--ig-font-size-small);\n color: var(--ig-text-muted);\n}\n";
|
|
26
26
|
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/picker/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,eAAO,MAAM,gBAAgB,
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/picker/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,eAAO,MAAM,gBAAgB,y8CA6D5B,CAAC"}
|
package/dist/picker/styles.js
CHANGED
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
* IT ADDS SELECTORS RATHER THAN REDEFINING THEM. Nothing here reaches into the
|
|
11
11
|
* viewer's own classes; this file styles only what the picker introduces.
|
|
12
12
|
*
|
|
13
|
-
* ##
|
|
13
|
+
* ## §17b's direction statement is no longer styled here
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
15
|
+
* This sheet once laid the statement out as a flex row so a host could reorder
|
|
16
|
+
* it with the CSS order property. The statement is `renderWorkspace`'s
|
|
17
|
+
* relationship row now — see `picker/render.ts`'s header for why — and its
|
|
18
|
+
* layout went with it, to `workspace/styles.ts`. Nothing here draws a
|
|
19
|
+
* relationship any more; this sheet styles the kind list and nothing else.
|
|
20
20
|
*
|
|
21
21
|
* Shipped as a string for the same reason the viewer's is: an entry that
|
|
22
22
|
* imports CSS cannot be loaded by a bare Node runtime, and a string needs no
|
|
@@ -65,8 +65,7 @@ export const pickerStylesheet = `
|
|
|
65
65
|
line-height: inherit;
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
.ig-picker-choice:focus-visible
|
|
69
|
-
.ig-picker-flip:focus-visible {
|
|
68
|
+
.ig-picker-choice:focus-visible {
|
|
70
69
|
outline: var(--ig-focus-ring) solid var(--ig-focus);
|
|
71
70
|
outline-offset: var(--ig-stroke);
|
|
72
71
|
}
|
|
@@ -84,33 +83,5 @@ export const pickerStylesheet = `
|
|
|
84
83
|
font-size: var(--ig-font-size-small);
|
|
85
84
|
color: var(--ig-text-muted);
|
|
86
85
|
}
|
|
87
|
-
|
|
88
|
-
/* Wraps rather than truncates: a qualified reference is long, and a statement
|
|
89
|
-
whose object is cut off says something other than what the format holds. */
|
|
90
|
-
.ig-picker-direction {
|
|
91
|
-
margin: 0;
|
|
92
|
-
display: flex;
|
|
93
|
-
flex-wrap: wrap;
|
|
94
|
-
align-items: baseline;
|
|
95
|
-
gap: var(--ig-space-tight);
|
|
96
|
-
color: var(--ig-text-body);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
.ig-picker-ref {
|
|
100
|
-
font-family: var(--ig-font-mono);
|
|
101
|
-
color: var(--ig-accent);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
.ig-picker-flip {
|
|
105
|
-
align-self: flex-start;
|
|
106
|
-
background: var(--ig-surface);
|
|
107
|
-
color: var(--ig-text-body);
|
|
108
|
-
border: var(--ig-stroke) solid var(--ig-line);
|
|
109
|
-
border-radius: var(--ig-radius);
|
|
110
|
-
padding: var(--ig-space-tight);
|
|
111
|
-
font-family: inherit;
|
|
112
|
-
font-size: var(--ig-font-size-small);
|
|
113
|
-
line-height: inherit;
|
|
114
|
-
}
|
|
115
86
|
`;
|
|
116
87
|
//# sourceMappingURL=styles.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/picker/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/picker/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6D/B,CAAC"}
|
package/dist/picker/view.d.ts
CHANGED
|
@@ -50,11 +50,12 @@
|
|
|
50
50
|
* The rejected shape was a per-option PREVIEW: every option carrying the
|
|
51
51
|
* statement it would produce, so the direction is chosen at the same moment as
|
|
52
52
|
* the kind. It was rejected because it doubles what the picker says in order to
|
|
53
|
-
* pre-empt a case the surface already answers — the retype lands,
|
|
53
|
+
* pre-empt a case the surface already answers — the retype lands, this model
|
|
54
54
|
* re-derives from the new document, and the direction is then STATED with a
|
|
55
55
|
* flip beside it, one act from correct. §17b's rule is that direction is stated
|
|
56
|
-
* rather than inferred, and it is stated
|
|
57
|
-
*
|
|
56
|
+
* rather than inferred, and it is stated: on `renderWorkspace`'s relationship
|
|
57
|
+
* row, which is where both the statement and the flip are drawn. Revisit this
|
|
58
|
+
* if the flip turns out to be reached often enough to be the real cost.
|
|
58
59
|
*
|
|
59
60
|
* ## It writes no words and holds no state
|
|
60
61
|
*
|
|
@@ -72,7 +73,10 @@ import { type EdgeId, type EdgeKind, type GraphDocument, type IssueRef, type Pro
|
|
|
72
73
|
* The kind travels with them because a pair alone cannot be worded.
|
|
73
74
|
*
|
|
74
75
|
* There is deliberately no `text`. A host renders "#530 is blocked by #602" in
|
|
75
|
-
* its own language and its own word order
|
|
76
|
+
* its own language and its own word order — and no shipped surface words one
|
|
77
|
+
* from this shape any more: `renderWorkspace`'s row states the direction from
|
|
78
|
+
* layer 1's `EDGE_TREATMENTS`, and this pair is here for the hosts that draw
|
|
79
|
+
* their own.
|
|
76
80
|
*/
|
|
77
81
|
export interface DirectionStatement {
|
|
78
82
|
readonly kind: EdgeKind;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/picker/view.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"view.d.ts","sourceRoot":"","sources":["../../src/picker/view.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiEG;AAGH,OAAO,EACL,KAAK,MAAM,EACX,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,QAAQ,EAEd,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;GAYG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;CACvB;AAED,oCAAoC;AACpC,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,8DAA8D;IAC9D,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,wEAAwE;IACxE,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;IACtC,gFAAgF;IAChF,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,UAAU;IACzB,uEAAuE;IACvE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,QAAQ,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,CAAC;IACxC,mEAAmE;IACnE,QAAQ,CAAC,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAAC;IAC9C,yEAAyE;IACzE,QAAQ,CAAC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;IAClC,QAAQ,CAAC,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;CACzC;AAkBD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,UAAU,CAwB9E"}
|
package/dist/picker/view.js
CHANGED
|
@@ -50,11 +50,12 @@
|
|
|
50
50
|
* The rejected shape was a per-option PREVIEW: every option carrying the
|
|
51
51
|
* statement it would produce, so the direction is chosen at the same moment as
|
|
52
52
|
* the kind. It was rejected because it doubles what the picker says in order to
|
|
53
|
-
* pre-empt a case the surface already answers — the retype lands,
|
|
53
|
+
* pre-empt a case the surface already answers — the retype lands, this model
|
|
54
54
|
* re-derives from the new document, and the direction is then STATED with a
|
|
55
55
|
* flip beside it, one act from correct. §17b's rule is that direction is stated
|
|
56
|
-
* rather than inferred, and it is stated
|
|
57
|
-
*
|
|
56
|
+
* rather than inferred, and it is stated: on `renderWorkspace`'s relationship
|
|
57
|
+
* row, which is where both the statement and the flip are drawn. Revisit this
|
|
58
|
+
* if the flip turns out to be reached often enough to be the real cost.
|
|
58
59
|
*
|
|
59
60
|
* ## It writes no words and holds no state
|
|
60
61
|
*
|