@issuegraph/editor 0.1.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.
Files changed (143) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +238 -0
  3. package/dist/audit/findings.d.ts +225 -0
  4. package/dist/audit/findings.d.ts.map +1 -0
  5. package/dist/audit/findings.js +348 -0
  6. package/dist/audit/findings.js.map +1 -0
  7. package/dist/audit/styles.d.ts +37 -0
  8. package/dist/audit/styles.d.ts.map +1 -0
  9. package/dist/audit/styles.js +72 -0
  10. package/dist/audit/styles.js.map +1 -0
  11. package/dist/audit/surface.d.ts +155 -0
  12. package/dist/audit/surface.d.ts.map +1 -0
  13. package/dist/audit/surface.js +202 -0
  14. package/dist/audit/surface.js.map +1 -0
  15. package/dist/create/draft.d.ts +119 -0
  16. package/dist/create/draft.d.ts.map +1 -0
  17. package/dist/create/draft.js +114 -0
  18. package/dist/create/draft.js.map +1 -0
  19. package/dist/create/keys.d.ts +225 -0
  20. package/dist/create/keys.d.ts.map +1 -0
  21. package/dist/create/keys.js +228 -0
  22. package/dist/create/keys.js.map +1 -0
  23. package/dist/create/placement.d.ts +69 -0
  24. package/dist/create/placement.d.ts.map +1 -0
  25. package/dist/create/placement.js +76 -0
  26. package/dist/create/placement.js.map +1 -0
  27. package/dist/firstpass/batch.d.ts +190 -0
  28. package/dist/firstpass/batch.d.ts.map +1 -0
  29. package/dist/firstpass/batch.js +143 -0
  30. package/dist/firstpass/batch.js.map +1 -0
  31. package/dist/firstpass/candidates.d.ts +128 -0
  32. package/dist/firstpass/candidates.d.ts.map +1 -0
  33. package/dist/firstpass/candidates.js +39 -0
  34. package/dist/firstpass/candidates.js.map +1 -0
  35. package/dist/firstpass/keys.d.ts +90 -0
  36. package/dist/firstpass/keys.d.ts.map +1 -0
  37. package/dist/firstpass/keys.js +112 -0
  38. package/dist/firstpass/keys.js.map +1 -0
  39. package/dist/firstpass/queue.d.ts +183 -0
  40. package/dist/firstpass/queue.d.ts.map +1 -0
  41. package/dist/firstpass/queue.js +159 -0
  42. package/dist/firstpass/queue.js.map +1 -0
  43. package/dist/firstpass/render.d.ts +100 -0
  44. package/dist/firstpass/render.d.ts.map +1 -0
  45. package/dist/firstpass/render.js +216 -0
  46. package/dist/firstpass/render.js.map +1 -0
  47. package/dist/firstpass/styles.d.ts +36 -0
  48. package/dist/firstpass/styles.d.ts.map +1 -0
  49. package/dist/firstpass/styles.js +148 -0
  50. package/dist/firstpass/styles.js.map +1 -0
  51. package/dist/firstpass/view.d.ts +82 -0
  52. package/dist/firstpass/view.d.ts.map +1 -0
  53. package/dist/firstpass/view.js +60 -0
  54. package/dist/firstpass/view.js.map +1 -0
  55. package/dist/firstpass/words.d.ts +105 -0
  56. package/dist/firstpass/words.d.ts.map +1 -0
  57. package/dist/firstpass/words.js +28 -0
  58. package/dist/firstpass/words.js.map +1 -0
  59. package/dist/index.d.ts +150 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +147 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/overlay/grammar.d.ts +259 -0
  64. package/dist/overlay/grammar.d.ts.map +1 -0
  65. package/dist/overlay/grammar.js +223 -0
  66. package/dist/overlay/grammar.js.map +1 -0
  67. package/dist/overlay/render.d.ts +125 -0
  68. package/dist/overlay/render.d.ts.map +1 -0
  69. package/dist/overlay/render.js +439 -0
  70. package/dist/overlay/render.js.map +1 -0
  71. package/dist/overlay/styles.d.ts +41 -0
  72. package/dist/overlay/styles.d.ts.map +1 -0
  73. package/dist/overlay/styles.js +124 -0
  74. package/dist/overlay/styles.js.map +1 -0
  75. package/dist/picker/render.d.ts +80 -0
  76. package/dist/picker/render.d.ts.map +1 -0
  77. package/dist/picker/render.js +112 -0
  78. package/dist/picker/render.js.map +1 -0
  79. package/dist/picker/styles.d.ts +26 -0
  80. package/dist/picker/styles.d.ts.map +1 -0
  81. package/dist/picker/styles.js +116 -0
  82. package/dist/picker/styles.js.map +1 -0
  83. package/dist/picker/view.d.ts +135 -0
  84. package/dist/picker/view.d.ts.map +1 -0
  85. package/dist/picker/view.js +117 -0
  86. package/dist/picker/view.js.map +1 -0
  87. package/dist/picker/words.d.ts +53 -0
  88. package/dist/picker/words.d.ts.map +1 -0
  89. package/dist/picker/words.js +28 -0
  90. package/dist/picker/words.js.map +1 -0
  91. package/dist/reevaluate/render.d.ts +77 -0
  92. package/dist/reevaluate/render.d.ts.map +1 -0
  93. package/dist/reevaluate/render.js +211 -0
  94. package/dist/reevaluate/render.js.map +1 -0
  95. package/dist/reevaluate/styles.d.ts +24 -0
  96. package/dist/reevaluate/styles.d.ts.map +1 -0
  97. package/dist/reevaluate/styles.js +182 -0
  98. package/dist/reevaluate/styles.js.map +1 -0
  99. package/dist/reevaluate/view.d.ts +102 -0
  100. package/dist/reevaluate/view.d.ts.map +1 -0
  101. package/dist/reevaluate/view.js +111 -0
  102. package/dist/reevaluate/view.js.map +1 -0
  103. package/dist/reevaluate/words.d.ts +54 -0
  104. package/dist/reevaluate/words.d.ts.map +1 -0
  105. package/dist/reevaluate/words.js +29 -0
  106. package/dist/reevaluate/words.js.map +1 -0
  107. package/dist/scale/commands.d.ts +60 -0
  108. package/dist/scale/commands.d.ts.map +1 -0
  109. package/dist/scale/commands.js +49 -0
  110. package/dist/scale/commands.js.map +1 -0
  111. package/dist/scale/ladder.d.ts +141 -0
  112. package/dist/scale/ladder.d.ts.map +1 -0
  113. package/dist/scale/ladder.js +243 -0
  114. package/dist/scale/ladder.js.map +1 -0
  115. package/dist/scale/render.d.ts +85 -0
  116. package/dist/scale/render.d.ts.map +1 -0
  117. package/dist/scale/render.js +194 -0
  118. package/dist/scale/render.js.map +1 -0
  119. package/dist/scale/styles.d.ts +21 -0
  120. package/dist/scale/styles.d.ts.map +1 -0
  121. package/dist/scale/styles.js +105 -0
  122. package/dist/scale/styles.js.map +1 -0
  123. package/dist/workspace/inspector.d.ts +117 -0
  124. package/dist/workspace/inspector.d.ts.map +1 -0
  125. package/dist/workspace/inspector.js +140 -0
  126. package/dist/workspace/inspector.js.map +1 -0
  127. package/dist/workspace/rail.d.ts +122 -0
  128. package/dist/workspace/rail.d.ts.map +1 -0
  129. package/dist/workspace/rail.js +216 -0
  130. package/dist/workspace/rail.js.map +1 -0
  131. package/dist/workspace/render.d.ts +139 -0
  132. package/dist/workspace/render.d.ts.map +1 -0
  133. package/dist/workspace/render.js +366 -0
  134. package/dist/workspace/render.js.map +1 -0
  135. package/dist/workspace/selection.d.ts +92 -0
  136. package/dist/workspace/selection.d.ts.map +1 -0
  137. package/dist/workspace/selection.js +83 -0
  138. package/dist/workspace/selection.js.map +1 -0
  139. package/dist/workspace/styles.d.ts +39 -0
  140. package/dist/workspace/styles.d.ts.map +1 -0
  141. package/dist/workspace/styles.js +313 -0
  142. package/dist/workspace/styles.js.map +1 -0
  143. package/package.json +58 -0
@@ -0,0 +1,105 @@
1
+ /**
2
+ * The words. Supplied by the host, never by this package.
3
+ *
4
+ * Same contract `reevaluate/words.ts` and `picker/words.ts` already carry here,
5
+ * and this surface has the strongest claim on it of the three: what is being
6
+ * worded is a QUESTION about a relationship, asked of an owner who is about to
7
+ * answer sixty of them at speed. A phrase written in would be an English clause
8
+ * in the one place the design says the reader most needs to be sure what they
9
+ * are agreeing to.
10
+ *
11
+ * REQUIRED, NOT DEFAULTED, on the same reasoning `StoreConfig.derive` is
12
+ * required: a default vocabulary is a second implementation of the thing the
13
+ * host was asked to supply, and a language choice this package is not entitled
14
+ * to make. A host that ships a default gets one it cannot theme away and cannot
15
+ * translate.
16
+ *
17
+ * ## Progress is worded by the host too, and that is not an oversight
18
+ *
19
+ * §17e is emphatic that "100% encoded is never the goal and the workspace never
20
+ * implies it is". The number is safe — {@link ./queue.ts queueProgress} cannot
21
+ * compute the wrong denominator — but the SENTENCE around it is where the
22
+ * implication would creep back in: "12 of 64 complete" reads as a target where
23
+ * "12 of 64 answered" reads as an activity. That is a wording decision with a
24
+ * design consequence, which is exactly the kind this package hands over rather
25
+ * than makes.
26
+ */
27
+ import type { Answer } from './queue.ts';
28
+ export interface FirstPassWords {
29
+ /**
30
+ * The accessible name of the surface as a whole.
31
+ *
32
+ * REQUIRED, and it is the one entry here that exists because of what
33
+ * `render.ts` REFUSES to do. That module declines to draw a heading, on the
34
+ * grounds that a heading level is a claim about the HOST's document outline
35
+ * which a package rendered into an unknown page cannot make. That reasoning
36
+ * is sound and unchanged — but a `<section>` with neither a heading nor a
37
+ * label is exposed to a screen reader navigating by landmarks as an unnamed
38
+ * generic region, so the refusal was quietly costing the reader the ability
39
+ * to find this surface at all.
40
+ *
41
+ * An `aria-label` is the half the package CAN supply without making that
42
+ * claim: it names the region without asserting where it sits in an outline.
43
+ * The word is the host's, for the same reason every other word here is.
44
+ */
45
+ readonly label: string;
46
+ /**
47
+ * One label per answer.
48
+ *
49
+ * `Record<Answer, string>` rather than a partial map: an answer with no word
50
+ * would render a bare control, and the reader would be one keystroke from
51
+ * consenting to something unlabelled. Adding an answer fails a host's build
52
+ * here, which is where it can be fixed.
53
+ */
54
+ readonly answers: Readonly<Record<Answer, string>>;
55
+ /**
56
+ * Names the group of answer controls, for assistive technology.
57
+ *
58
+ * ITS OWN ENTRY rather than reusing {@link evidence}, which an earlier
59
+ * revision did: a group of buttons labelled "Why" tells a screen-reader user
60
+ * that the three controls are the evidence, which is the opposite of what
61
+ * they are. The two blocks sit next to each other and name different things,
62
+ * so they need different words — and a shared one is the sort of label that
63
+ * looks fine in markup and is wrong only when read aloud.
64
+ */
65
+ readonly answersLabel: string;
66
+ /** The undo control. */
67
+ readonly undo: string;
68
+ /**
69
+ * Names the evidence block — what the host calls the reasons it offered.
70
+ *
71
+ * The evidence ITEMS are the host's own sentences already
72
+ * ({@link ./candidates.ts CandidateEvidence}); this words the container they
73
+ * sit in, which is the only part of that block this package draws.
74
+ */
75
+ readonly evidence: string;
76
+ /**
77
+ * Words the progress indicator, given the two numbers.
78
+ *
79
+ * A FUNCTION rather than a template string, because the grammar around a
80
+ * count is not substitutable across languages — plural forms, number
81
+ * agreement and word order all depend on the values themselves. A
82
+ * `"{answered} of {found}"` field would work in English and quietly produce
83
+ * wrong grammar everywhere else, which is the failure this package hands the
84
+ * whole decision over to avoid.
85
+ */
86
+ readonly progress: (answered: number, found: number) => string;
87
+ /**
88
+ * Shown when every candidate has been answered.
89
+ *
90
+ * NOT AN EMPTY STATE — the finding, in the sense `reevaluate/words.ts` uses
91
+ * the distinction. A finished first pass is the design's success condition,
92
+ * and §17e insists it be reachable rather than asymptotic.
93
+ */
94
+ readonly finished: string;
95
+ /**
96
+ * Shown when the host found no candidates at all.
97
+ *
98
+ * DISTINCT FROM {@link finished}, and the distinction matters more than it
99
+ * looks: "there was nothing to encode" and "you encoded everything" are
100
+ * different facts about the backlog, and collapsing them would tell an owner
101
+ * whose detector is misconfigured that they were done.
102
+ */
103
+ readonly noCandidates: string;
104
+ }
105
+ //# sourceMappingURL=words.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"words.d.ts","sourceRoot":"","sources":["../../src/firstpass/words.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B;;;;;;;;;;;;;;;OAeG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD;;;;;;;;;OASG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,wBAAwB;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;OASG;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC/D;;;;;;OAMG;IACH,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;;;OAOG;IACH,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * The words. Supplied by the host, never by this package.
3
+ *
4
+ * Same contract `reevaluate/words.ts` and `picker/words.ts` already carry here,
5
+ * and this surface has the strongest claim on it of the three: what is being
6
+ * worded is a QUESTION about a relationship, asked of an owner who is about to
7
+ * answer sixty of them at speed. A phrase written in would be an English clause
8
+ * in the one place the design says the reader most needs to be sure what they
9
+ * are agreeing to.
10
+ *
11
+ * REQUIRED, NOT DEFAULTED, on the same reasoning `StoreConfig.derive` is
12
+ * required: a default vocabulary is a second implementation of the thing the
13
+ * host was asked to supply, and a language choice this package is not entitled
14
+ * to make. A host that ships a default gets one it cannot theme away and cannot
15
+ * translate.
16
+ *
17
+ * ## Progress is worded by the host too, and that is not an oversight
18
+ *
19
+ * §17e is emphatic that "100% encoded is never the goal and the workspace never
20
+ * implies it is". The number is safe — {@link ./queue.ts queueProgress} cannot
21
+ * compute the wrong denominator — but the SENTENCE around it is where the
22
+ * implication would creep back in: "12 of 64 complete" reads as a target where
23
+ * "12 of 64 answered" reads as an activity. That is a wording decision with a
24
+ * design consequence, which is exactly the kind this package hands over rather
25
+ * than makes.
26
+ */
27
+ export {};
28
+ //# sourceMappingURL=words.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"words.js","sourceRoot":"","sources":["../../src/firstpass/words.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG"}
@@ -0,0 +1,150 @@
1
+ /**
2
+ * `@issuegraph/editor` — everything that mutates an Issuegraph document.
3
+ *
4
+ * Layer 2 of the three-layer seam. Its whole contract is a composition:
5
+ *
6
+ * composes @issuegraph/viewer (layer 1) — the node, edge and badge grammar
7
+ * composes @issuegraph/store — the document, the edit set, the port
8
+ * never fetching, auth, persistence, or a write of its own
9
+ *
10
+ * An edit is a `Proposal` handed to the store, which dispatches it to the host's
11
+ * injected `DataSource`. The editor performs none of that itself, which is what
12
+ * lets it be published: what editing drags in — auth, network, the
13
+ * fail-or-conflict state machine — is host-shaped and injected.
14
+ *
15
+ * ## The seam, and why it is a test rather than a sentence
16
+ *
17
+ * Layer 1 and layer 2 ship as separate packages, so the boundary between them is
18
+ * no longer enforced by a repository line. The design says so in as many words:
19
+ * the seam "stops being enforced by construction and becomes discipline — layer 2
20
+ * composes layer 1 through its public surface and never reaches past it."
21
+ *
22
+ * Discipline that nothing checks is a comment. The check is in
23
+ * `eslint.config.mjs`, over the AST: every import of a sibling package must be
24
+ * its BARE specifier, and `require()` is banned outright because it is the one
25
+ * call that walks past every import rule. A reach into
26
+ * `@issuegraph/viewer/src/...` fails lint rather than a code review that might
27
+ * not happen, and `scripts/eslint-rules.test.mjs` proves the rules fire by
28
+ * running them against deliberate violations.
29
+ *
30
+ * The same config carries the purity claim for this package and the viewer — no
31
+ * fetch, no storage, no credentials, no Node builtin. `purity.test.ts` keeps the
32
+ * half no static rule can do: it loads every shipped module with the browser
33
+ * globals removed, which is what catches a computed access like
34
+ * `globalThis['fet' + 'ch']`.
35
+ *
36
+ * ## The one declared crossing
37
+ *
38
+ * The `together-with` connector lives in the VIEWER, not here. A `together-with`
39
+ * edge must be individually selectable, retypeable and deletable, and an
40
+ * enclosure has no edge to click — so the connector is a hit target, and only
41
+ * the layer that computes the layout knows where its endpoints are. Adding it
42
+ * from out here would mean re-deriving positions layer 1 already has, which is
43
+ * the drifting second implementation the package split exists to avoid.
44
+ *
45
+ * It is written down as a declared crossing rather than discovered later. Treat
46
+ * it as the precedent for DECLARING a crossing, never as permission for more.
47
+ *
48
+ * ## The surface
49
+ *
50
+ * The SCALE LADDER, the AUDIT, the RE-EVALUATE SURFACE, the EDGE
51
+ * MUTATION-STATE OVERLAYS, the TYPE PICKER, the CREATE PATHS, the FIRST PASS
52
+ * and the THREE-ZONE WORKSPACE that assembles them. This file's shape is
53
+ * settled: the workspace was the change that decided it.
54
+ *
55
+ * The first pass is the first thing here to take a PORT of its own. The create
56
+ * paths take a target from the host because searching a backlog needs the
57
+ * backlog; the first pass goes further and takes the whole question set,
58
+ * because the evidence §17e describes — two bodies referencing one path, a
59
+ * comment linking an issue — is not derivable from a `GraphDocument` at all. A
60
+ * heuristic shipped in here would be an un-themeable product opinion inside a
61
+ * published package, which is the same reason the store fetches nothing.
62
+ *
63
+ * The workspace is the assembly leaf, and what it adds is a SEAM rather than
64
+ * another surface: `renderWorkspace` composes the rail, the ladder and the
65
+ * audit through the same public entry points a host would use, so nothing here
66
+ * is re-derived. The two facts it owns are the ones no single leaf could:
67
+ *
68
+ * - ONE SELECTION crosses all three zones. §17b makes `selected` the only edge
69
+ * state that also filters the inspector, so the workspace holds exactly one
70
+ * value and the zones read it. Three synchronised copies is the shape it
71
+ * exists to prevent.
72
+ * - THE RAIL IS VIRTUALISED AND THE CANVAS REFUSES, and assembling them must
73
+ * not average the two (§17f). The rail's MODEL stays complete at any backlog
74
+ * size while its WINDOW is bounded; the ladder keeps the whole document, so
75
+ * its budget does not follow the reader's scroll position.
76
+ *
77
+ * It is also where the deferred positioning from the leaves below lands: the
78
+ * audit's left-bar is applied by walking the rail's `ElementSpec` tree, which is
79
+ * how a mark reaches a row the viewer drew without this package ever splicing a
80
+ * rendered string.
81
+ *
82
+ * The create paths are the first thing here to be shaped by a requirement that
83
+ * three surfaces be EQUIVALENT rather than merely present. They gather the same
84
+ * three facts in different orders, so the draft is modelled as a set of slots
85
+ * rather than a sequence of steps, and there is exactly one emitter — which is
86
+ * what makes "the inspector is not a fallback" structural instead of a promise.
87
+ * The only thing that genuinely differs between them is where the picker is
88
+ * drawn, and that is geometry rather than state.
89
+
90
+ *
91
+ * The picker is the first thing here to compose @issuegraph/core directly. The
92
+ * split between directed and symmetric relationships is a fact about the
93
+ * FORMAT, and core owns it; a local list out here would be the drifting second
94
+ * implementation the package family removes everywhere else. Core is the layer
95
+ * both siblings already sit on, and the seam refuses a sibling's SUBPATH rather
96
+ * than its bare specifier, so reaching for the shared foundation is not
97
+ * reaching past a surface.
98
+ *
99
+ * The re-evaluate surface is the first thing here to compose the STORE as well
100
+ * as the viewer — it presents `diffOrder`'s output and computes no diff of its
101
+ * own — and the first to require words from its host rather than writing them.
102
+ *
103
+ * The overlays are the first to compose the store's PROJECTION, and they draw
104
+ * only what reuses a path's own position: a halo, a ghost, a dash. Anything
105
+ * needing a new position — the chips, the ✕, the inline reason, a conflict's
106
+ * second version — is declared as a mark for the layer that computed the
107
+ * layout. The workspace is that layer, and it landed.
108
+ *
109
+ * A published package can add an export later and can never take one back, so
110
+ * nothing is exported before something is owed.
111
+ *
112
+ * @see https://github.com/autnmy/issuegraph/blob/main/SPEC.md
113
+ */
114
+ export type { AuditClass, AuditClassSpec, AuditFinding, AuditGraph, AuditInput, AuditSeverity, EncodingRefusal, } from './audit/findings.ts';
115
+ export { AUDIT_CLASSES, AUDIT_CLASS_SPECS, auditDocument } from './audit/findings.ts';
116
+ export type { AuditHeaderOptions, AuditOverlay, AuditRow } from './audit/surface.ts';
117
+ export { AUDIT_COUNT_ATTRIBUTE, AUDIT_FILTER_ATTRIBUTE, AUDIT_SEVERITY_ATTRIBUTE, auditFilterKeeps, auditOverlay, auditRowAttributes, renderAuditHeader, } from './audit/surface.ts';
118
+ export { auditStylesheet } from './audit/styles.ts';
119
+ export { INITIAL_SCALE_STATE, type ScaleCommand, type ScaleState, scaleReducer, } from './scale/commands.ts';
120
+ export { type IsolatedChip, type ScaleCapsule, type ScaleLadder, type ScaleMatch, type ScaleRefusal, type ScaleRoute, type ScaleRouteKind, type ScaleSearch, type ScaleTier, scaleLadder, } from './scale/ladder.ts';
121
+ export { type ScaleLadderOptions, type ScaleLadderResult, renderScaleLadder, } from './scale/render.ts';
122
+ export { scaleLadderStylesheet } from './scale/styles.ts';
123
+ export { OVERLAY_TREATMENTS, STATE_ATTRIBUTE, type EdgeOverlay, type OverlayAffordance, type OverlayDash, type OverlayMark, type OverlayStroke, type OverlayTreatment, overlayFor, overlayLabel, treatmentForState, } from './overlay/grammar.ts';
124
+ export { OVERLAY_CLASS, type AttachResult, type OverlayOptions, attachEdgeOverlays, renderOverlayMark, } from './overlay/render.ts';
125
+ export { edgeOverlayStylesheet } from './overlay/styles.ts';
126
+ export { type DirectionStatement, type FlipControl, type KindOption, type PickerView, pickerView, } from './picker/view.ts';
127
+ export { type PickerWords } from './picker/words.ts';
128
+ export { type PickerOptions, type PickerResult, renderPicker, } from './picker/render.ts';
129
+ export { pickerStylesheet } from './picker/styles.ts';
130
+ export { type CreateCommand, type CreateDraft, type CreateResult, IDLE_CREATE_DRAFT, createReducer, } from './create/draft.ts';
131
+ export { type CreateInteraction, type KeyIntent, type KeyPress, type KeyboardContext, keyIntent, } from './create/keys.ts';
132
+ export { type Bounds, type PickerPlacement, type Point, type Size, pickerPlacement, } from './create/placement.ts';
133
+ export { type ChangeFacet, type ChangeSummary, type PlacedChip, type ReevaluateView, type SummaryPart, CHANGE_FACETS, reevaluateView, summaryOf, } from './reevaluate/view.ts';
134
+ export { type ChangeWords } from './reevaluate/words.ts';
135
+ export { type ReevaluateOptions, type ReevaluateResult, renderReevaluate, } from './reevaluate/render.ts';
136
+ export { reevaluateStylesheet } from './reevaluate/styles.ts';
137
+ export type { Candidate, CandidateEvidence, CandidateId, CandidateSource, } from './firstpass/candidates.ts';
138
+ export { type Answer, type Answered, type QueueCommand, type QueueProgress, type QueueResult, type QueueState, currentCandidate, isAnswered, openQueue, queueProgress, queueReducer, skippedCandidates, } from './firstpass/queue.ts';
139
+ export { type BatchDirection, type BatchOutcome, type BatchPlan, type BatchRefusal, type BatchRequest, type BatchSettlement, planBatch, resumeBatch, } from './firstpass/batch.ts';
140
+ export { type FirstPassContext, type FirstPassInteraction, type FirstPassIntent, firstPassIntent, } from './firstpass/keys.ts';
141
+ export { type FirstPassQuestion, type FirstPassView, firstPassView, } from './firstpass/view.ts';
142
+ export { type FirstPassWords } from './firstpass/words.ts';
143
+ export { ANSWERED_ATTRIBUTE, ANSWER_ATTRIBUTE, COMMAND_ATTRIBUTE, EVIDENCE_TOKEN_ATTRIBUTE, FOUND_ATTRIBUTE, type FirstPassOptions, type FirstPassResult, renderFirstPass, } from './firstpass/render.ts';
144
+ export { firstPassStylesheet } from './firstpass/styles.ts';
145
+ export { type SelectionCommand, type WorkspaceSelection, INITIAL_SELECTION, selectedEdgeId, selectedKey, selectionReducer, } from './workspace/selection.ts';
146
+ export { type RailWindow, type RailWindowOptions, RAIL_WINDOW, railWindow, } from './workspace/rail.ts';
147
+ export { type InspectorPosition, type InspectorRelationship, type InspectorView, inspectorView, } from './workspace/inspector.ts';
148
+ export { type Zone, type WorkspaceOptions, type WorkspaceResult, type WorkspaceView, type WorkspaceWords, ZONES, renderWorkspace, } from './workspace/render.ts';
149
+ export { workspaceStylesheet } from './workspace/styles.ts';
150
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,147 @@
1
+ /**
2
+ * `@issuegraph/editor` — everything that mutates an Issuegraph document.
3
+ *
4
+ * Layer 2 of the three-layer seam. Its whole contract is a composition:
5
+ *
6
+ * composes @issuegraph/viewer (layer 1) — the node, edge and badge grammar
7
+ * composes @issuegraph/store — the document, the edit set, the port
8
+ * never fetching, auth, persistence, or a write of its own
9
+ *
10
+ * An edit is a `Proposal` handed to the store, which dispatches it to the host's
11
+ * injected `DataSource`. The editor performs none of that itself, which is what
12
+ * lets it be published: what editing drags in — auth, network, the
13
+ * fail-or-conflict state machine — is host-shaped and injected.
14
+ *
15
+ * ## The seam, and why it is a test rather than a sentence
16
+ *
17
+ * Layer 1 and layer 2 ship as separate packages, so the boundary between them is
18
+ * no longer enforced by a repository line. The design says so in as many words:
19
+ * the seam "stops being enforced by construction and becomes discipline — layer 2
20
+ * composes layer 1 through its public surface and never reaches past it."
21
+ *
22
+ * Discipline that nothing checks is a comment. The check is in
23
+ * `eslint.config.mjs`, over the AST: every import of a sibling package must be
24
+ * its BARE specifier, and `require()` is banned outright because it is the one
25
+ * call that walks past every import rule. A reach into
26
+ * `@issuegraph/viewer/src/...` fails lint rather than a code review that might
27
+ * not happen, and `scripts/eslint-rules.test.mjs` proves the rules fire by
28
+ * running them against deliberate violations.
29
+ *
30
+ * The same config carries the purity claim for this package and the viewer — no
31
+ * fetch, no storage, no credentials, no Node builtin. `purity.test.ts` keeps the
32
+ * half no static rule can do: it loads every shipped module with the browser
33
+ * globals removed, which is what catches a computed access like
34
+ * `globalThis['fet' + 'ch']`.
35
+ *
36
+ * ## The one declared crossing
37
+ *
38
+ * The `together-with` connector lives in the VIEWER, not here. A `together-with`
39
+ * edge must be individually selectable, retypeable and deletable, and an
40
+ * enclosure has no edge to click — so the connector is a hit target, and only
41
+ * the layer that computes the layout knows where its endpoints are. Adding it
42
+ * from out here would mean re-deriving positions layer 1 already has, which is
43
+ * the drifting second implementation the package split exists to avoid.
44
+ *
45
+ * It is written down as a declared crossing rather than discovered later. Treat
46
+ * it as the precedent for DECLARING a crossing, never as permission for more.
47
+ *
48
+ * ## The surface
49
+ *
50
+ * The SCALE LADDER, the AUDIT, the RE-EVALUATE SURFACE, the EDGE
51
+ * MUTATION-STATE OVERLAYS, the TYPE PICKER, the CREATE PATHS, the FIRST PASS
52
+ * and the THREE-ZONE WORKSPACE that assembles them. This file's shape is
53
+ * settled: the workspace was the change that decided it.
54
+ *
55
+ * The first pass is the first thing here to take a PORT of its own. The create
56
+ * paths take a target from the host because searching a backlog needs the
57
+ * backlog; the first pass goes further and takes the whole question set,
58
+ * because the evidence §17e describes — two bodies referencing one path, a
59
+ * comment linking an issue — is not derivable from a `GraphDocument` at all. A
60
+ * heuristic shipped in here would be an un-themeable product opinion inside a
61
+ * published package, which is the same reason the store fetches nothing.
62
+ *
63
+ * The workspace is the assembly leaf, and what it adds is a SEAM rather than
64
+ * another surface: `renderWorkspace` composes the rail, the ladder and the
65
+ * audit through the same public entry points a host would use, so nothing here
66
+ * is re-derived. The two facts it owns are the ones no single leaf could:
67
+ *
68
+ * - ONE SELECTION crosses all three zones. §17b makes `selected` the only edge
69
+ * state that also filters the inspector, so the workspace holds exactly one
70
+ * value and the zones read it. Three synchronised copies is the shape it
71
+ * exists to prevent.
72
+ * - THE RAIL IS VIRTUALISED AND THE CANVAS REFUSES, and assembling them must
73
+ * not average the two (§17f). The rail's MODEL stays complete at any backlog
74
+ * size while its WINDOW is bounded; the ladder keeps the whole document, so
75
+ * its budget does not follow the reader's scroll position.
76
+ *
77
+ * It is also where the deferred positioning from the leaves below lands: the
78
+ * audit's left-bar is applied by walking the rail's `ElementSpec` tree, which is
79
+ * how a mark reaches a row the viewer drew without this package ever splicing a
80
+ * rendered string.
81
+ *
82
+ * The create paths are the first thing here to be shaped by a requirement that
83
+ * three surfaces be EQUIVALENT rather than merely present. They gather the same
84
+ * three facts in different orders, so the draft is modelled as a set of slots
85
+ * rather than a sequence of steps, and there is exactly one emitter — which is
86
+ * what makes "the inspector is not a fallback" structural instead of a promise.
87
+ * The only thing that genuinely differs between them is where the picker is
88
+ * drawn, and that is geometry rather than state.
89
+
90
+ *
91
+ * The picker is the first thing here to compose @issuegraph/core directly. The
92
+ * split between directed and symmetric relationships is a fact about the
93
+ * FORMAT, and core owns it; a local list out here would be the drifting second
94
+ * implementation the package family removes everywhere else. Core is the layer
95
+ * both siblings already sit on, and the seam refuses a sibling's SUBPATH rather
96
+ * than its bare specifier, so reaching for the shared foundation is not
97
+ * reaching past a surface.
98
+ *
99
+ * The re-evaluate surface is the first thing here to compose the STORE as well
100
+ * as the viewer — it presents `diffOrder`'s output and computes no diff of its
101
+ * own — and the first to require words from its host rather than writing them.
102
+ *
103
+ * The overlays are the first to compose the store's PROJECTION, and they draw
104
+ * only what reuses a path's own position: a halo, a ghost, a dash. Anything
105
+ * needing a new position — the chips, the ✕, the inline reason, a conflict's
106
+ * second version — is declared as a mark for the layer that computed the
107
+ * layout. The workspace is that layer, and it landed.
108
+ *
109
+ * A published package can add an export later and can never take one back, so
110
+ * nothing is exported before something is owed.
111
+ *
112
+ * @see https://github.com/autnmy/issuegraph/blob/main/SPEC.md
113
+ */
114
+ export { AUDIT_CLASSES, AUDIT_CLASS_SPECS, auditDocument } from "./audit/findings.js";
115
+ export { AUDIT_COUNT_ATTRIBUTE, AUDIT_FILTER_ATTRIBUTE, AUDIT_SEVERITY_ATTRIBUTE, auditFilterKeeps, auditOverlay, auditRowAttributes, renderAuditHeader, } from "./audit/surface.js";
116
+ export { auditStylesheet } from "./audit/styles.js";
117
+ export { INITIAL_SCALE_STATE, scaleReducer, } from "./scale/commands.js";
118
+ export { scaleLadder, } from "./scale/ladder.js";
119
+ export { renderScaleLadder, } from "./scale/render.js";
120
+ export { scaleLadderStylesheet } from "./scale/styles.js";
121
+ export { OVERLAY_TREATMENTS, STATE_ATTRIBUTE, overlayFor, overlayLabel, treatmentForState, } from "./overlay/grammar.js";
122
+ export { OVERLAY_CLASS, attachEdgeOverlays, renderOverlayMark, } from "./overlay/render.js";
123
+ export { edgeOverlayStylesheet } from "./overlay/styles.js";
124
+ export { pickerView, } from "./picker/view.js";
125
+ export {} from "./picker/words.js";
126
+ export { renderPicker, } from "./picker/render.js";
127
+ export { pickerStylesheet } from "./picker/styles.js";
128
+ export { IDLE_CREATE_DRAFT, createReducer, } from "./create/draft.js";
129
+ export { keyIntent, } from "./create/keys.js";
130
+ export { pickerPlacement, } from "./create/placement.js";
131
+ export { CHANGE_FACETS, reevaluateView, summaryOf, } from "./reevaluate/view.js";
132
+ export {} from "./reevaluate/words.js";
133
+ export { renderReevaluate, } from "./reevaluate/render.js";
134
+ export { reevaluateStylesheet } from "./reevaluate/styles.js";
135
+ export { currentCandidate, isAnswered, openQueue, queueProgress, queueReducer, skippedCandidates, } from "./firstpass/queue.js";
136
+ export { planBatch, resumeBatch, } from "./firstpass/batch.js";
137
+ export { firstPassIntent, } from "./firstpass/keys.js";
138
+ export { firstPassView, } from "./firstpass/view.js";
139
+ export {} from "./firstpass/words.js";
140
+ export { ANSWERED_ATTRIBUTE, ANSWER_ATTRIBUTE, COMMAND_ATTRIBUTE, EVIDENCE_TOKEN_ATTRIBUTE, FOUND_ATTRIBUTE, renderFirstPass, } from "./firstpass/render.js";
141
+ export { firstPassStylesheet } from "./firstpass/styles.js";
142
+ export { INITIAL_SELECTION, selectedEdgeId, selectedKey, selectionReducer, } from "./workspace/selection.js";
143
+ export { RAIL_WINDOW, railWindow, } from "./workspace/rail.js";
144
+ export { inspectorView, } from "./workspace/inspector.js";
145
+ export { ZONES, renderWorkspace, } from "./workspace/render.js";
146
+ export { workspaceStylesheet } from "./workspace/styles.js";
147
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgHG;AAWH,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGtF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,mBAAmB,EAGnB,YAAY,GACb,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAUL,WAAW,GACZ,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAGL,iBAAiB,GAClB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAE1D,OAAO,EACL,kBAAkB,EAClB,eAAe,EAOf,UAAU,EACV,YAAY,EACZ,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,aAAa,EAGb,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,OAAO,EAKL,UAAU,GACX,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAoB,MAAM,mBAAmB,CAAC;AAErD,OAAO,EAGL,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD,OAAO,EAIL,iBAAiB,EACjB,aAAa,GACd,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAKL,SAAS,GACV,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAKL,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAML,aAAa,EACb,cAAc,EACd,SAAS,GACV,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAoB,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAGL,gBAAgB,GACjB,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAU9D,OAAO,EAOL,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAOL,SAAS,EACT,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAIL,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAGL,aAAa,GACd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAuB,MAAM,sBAAsB,CAAC;AAE3D,OAAO,EACL,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,wBAAwB,EACxB,eAAe,EAGf,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,EAGL,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAGL,WAAW,EACX,UAAU,GACX,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAIL,aAAa,GACd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAML,KAAK,EACL,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC"}