@issuegraph/viewer 0.3.0 → 0.9.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.
Files changed (59) hide show
  1. package/dist/clusters.d.ts +116 -0
  2. package/dist/clusters.d.ts.map +1 -1
  3. package/dist/clusters.js +85 -2
  4. package/dist/clusters.js.map +1 -1
  5. package/dist/document.d.ts +228 -5
  6. package/dist/document.d.ts.map +1 -1
  7. package/dist/document.js +204 -3
  8. package/dist/document.js.map +1 -1
  9. package/dist/element.d.ts +11 -0
  10. package/dist/element.d.ts.map +1 -1
  11. package/dist/element.js.map +1 -1
  12. package/dist/index.d.ts +17 -6
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +31 -4
  15. package/dist/index.js.map +1 -1
  16. package/dist/layout.d.ts +79 -50
  17. package/dist/layout.d.ts.map +1 -1
  18. package/dist/layout.js +371 -170
  19. package/dist/layout.js.map +1 -1
  20. package/dist/marks.d.ts +105 -0
  21. package/dist/marks.d.ts.map +1 -0
  22. package/dist/marks.js +430 -0
  23. package/dist/marks.js.map +1 -0
  24. package/dist/mount.d.ts +13 -0
  25. package/dist/mount.d.ts.map +1 -1
  26. package/dist/mount.js +69 -1
  27. package/dist/mount.js.map +1 -1
  28. package/dist/navigation.d.ts +14 -0
  29. package/dist/navigation.d.ts.map +1 -1
  30. package/dist/navigation.js +51 -0
  31. package/dist/navigation.js.map +1 -1
  32. package/dist/parts.d.ts +308 -2
  33. package/dist/parts.d.ts.map +1 -1
  34. package/dist/parts.js +845 -65
  35. package/dist/parts.js.map +1 -1
  36. package/dist/projections/graph.d.ts +25 -0
  37. package/dist/projections/graph.d.ts.map +1 -1
  38. package/dist/projections/graph.js +476 -335
  39. package/dist/projections/graph.js.map +1 -1
  40. package/dist/projections/linear.d.ts +135 -0
  41. package/dist/projections/linear.d.ts.map +1 -1
  42. package/dist/projections/linear.js +266 -31
  43. package/dist/projections/linear.js.map +1 -1
  44. package/dist/projections/tree.d.ts.map +1 -1
  45. package/dist/projections/tree.js +29 -3
  46. package/dist/projections/tree.js.map +1 -1
  47. package/dist/styles.d.ts +10 -1
  48. package/dist/styles.d.ts.map +1 -1
  49. package/dist/styles.js +1275 -132
  50. package/dist/styles.js.map +1 -1
  51. package/dist/theme.d.ts +5 -6
  52. package/dist/theme.d.ts.map +1 -1
  53. package/dist/theme.js +119 -7
  54. package/dist/theme.js.map +1 -1
  55. package/dist/vocabulary.d.ts +39 -0
  56. package/dist/vocabulary.d.ts.map +1 -1
  57. package/dist/vocabulary.js +27 -0
  58. package/dist/vocabulary.js.map +1 -1
  59. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0c/B,CAAC"}
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../src/styles.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO;EACP,KAAK;;;;;;;;;;EAUL,KAAK;;;;EAIL,KAAK;;;;;;;;;EASL,KAAK;;;;;;;;;;EAUL,KAAK;;;;;;;;;;;;;EAaL,KAAK;;;;;;;;EAQL,KAAK;;;;;;;;;;;;;;;;;;EAkBL,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2BL,KAAK;;;;EAIL,KAAK;EACL,KAAK;;;;;;;EAOL,KAAK;;;;;;;;;;;;;;;;;;;EAmBL,KAAK;;;;;;;;EAQL,KAAK;;;;;;;;;;;;;;;;;;;EAmBL,KAAK;;;;;;;;;;;;;;EAcL,KAAK;;;;;;;;;;;;EAYL,KAAK;;;;;EAKL,KAAK;;;;;EAKL,KAAK;;;;;;;EAOL,KAAK;;;;;;;;;;;;;;;;;;;;;;;EAuBL,KAAK;EACL,KAAK;EACL,KAAK;;;;;;;;;;;;;;;;EAgBL,KAAK;;;;EAIL,KAAK;;;CAGN,CAAC;AACF,CAAC;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsc9B,WAAW,CAAC,gCAAgC,CAAC;;;;;;;;;;;;;EAa7C,WAAW,CAAC,kCAAkC,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA80BhD,CAAC"}
package/dist/theme.d.ts CHANGED
@@ -31,10 +31,10 @@ export type ColorToken = (typeof COLOR_TOKENS)[number];
31
31
  * and {@link METRIC_TOKENS} would give both a `px` unit and silently void the
32
32
  * declaration.
33
33
  */
34
- export declare const TYPE_TOKENS: readonly ["--ig-font-ui", "--ig-font-mono", "--ig-font-size", "--ig-font-size-small", "--ig-line-height", "--ig-font-size-micro", "--ig-font-size-pill", "--ig-weight-regular", "--ig-weight-medium", "--ig-weight-strong", "--ig-weight-heavy", "--ig-tracking-label", "--ig-tracking-group", "--ig-tracking-pill", "--ig-tracking-badge"];
34
+ export declare const TYPE_TOKENS: readonly ["--ig-font-ui", "--ig-font-mono", "--ig-font-size", "--ig-font-size-small", "--ig-line-height", "--ig-font-size-micro", "--ig-font-size-pill", "--ig-weight-regular", "--ig-weight-medium", "--ig-weight-strong", "--ig-weight-heavy", "--ig-tracking-label", "--ig-tracking-group", "--ig-tracking-pill", "--ig-tracking-badge", "--ig-font-size-meta", "--ig-font-size-compact", "--ig-font-size-row", "--ig-font-size-rank"];
35
35
  export type TypeToken = (typeof TYPE_TOKENS)[number];
36
36
  /** Geometry tokens. Every value is a number of CSS pixels. */
37
- export declare const METRIC_TOKENS: readonly ["--ig-space", "--ig-space-tight", "--ig-radius", "--ig-row-height", "--ig-station-size", "--ig-station-halo", "--ig-stroke", "--ig-stroke-connector", "--ig-terminal-length", "--ig-terminal-width", "--ig-gutter-width", "--ig-spine-width", "--ig-char-width", "--ig-label-char-width", "--ig-focus-ring", "--ig-space-micro", "--ig-space-snug", "--ig-space-loose", "--ig-space-wide", "--ig-radius-small", "--ig-radius-large", "--ig-row-min-height", "--ig-row-padding-block", "--ig-band-rail"];
37
+ export declare const METRIC_TOKENS: readonly ["--ig-space", "--ig-space-tight", "--ig-radius", "--ig-row-height", "--ig-station-size", "--ig-station-halo", "--ig-stroke", "--ig-stroke-connector", "--ig-stroke-audit", "--ig-terminal-length", "--ig-terminal-width", "--ig-gutter-width", "--ig-spine-width", "--ig-char-width", "--ig-label-char-width", "--ig-focus-ring", "--ig-space-micro", "--ig-space-snug", "--ig-space-loose", "--ig-space-wide", "--ig-radius-small", "--ig-radius-large", "--ig-row-min-height", "--ig-row-padding-block", "--ig-band-rail", "--ig-rank-column", "--ig-row-height-dense", "--ig-row-padding-block-dense", "--ig-rank-column-dense", "--ig-row-title-line", "--ig-row-meta-line", "--ig-row-line-gap", "--ig-station-box", "--ig-card-line"];
38
38
  export type MetricToken = (typeof METRIC_TOKENS)[number];
39
39
  /**
40
40
  * Surface-treatment tokens: values that are none of a colour, a type value or
@@ -100,10 +100,9 @@ export declare function extendTheme(base: Theme, override: ThemeOverride): Theme
100
100
  * package and stored. Adding a token then puts a hole in it, and the hole does
101
101
  * not fail loudly: a missing metric reads `undefined`, arithmetic on it yields
102
102
  * `NaN`, and every comparison against `NaN` is false. Measured when
103
- * `--ig-label-char-width` was added — a 0.1.0 theme made `fitLabel` return a
104
- * 60-character title with an ellipsis APPENDED, which is worse overflow than
105
- * the defect that token was added to fix, and `themeCss` emitted
106
- * `undefinedpx`.
103
+ * `--ig-label-char-width` was added — a 0.1.0 theme made every measured width
104
+ * `NaN`, so a card's height came out `NaN` and every station stacked at the
105
+ * same y, and `themeCss` emitted `undefinedpx`.
107
106
  *
108
107
  * A TypeScript caller is told about a new token by the compiler; a JavaScript
109
108
  * one is not, and neither is a theme deserialized from storage. This is the
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,+ZAgCd,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,6UAmCb,CAAC;AAEZ,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,8DAA8D;AAC9D,eAAO,MAAM,aAAa,mfA6Cf,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,wIAsBf,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,0DAA0D;AAC1D,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAKxC,CAAC;AAEH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,KAkKzB,CAAC;AAEH,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;CACrE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,KAAK,CAOvE;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,SAAU,GAAG,MAAM,CAWjE"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH;;;;GAIG;AACH,eAAO,MAAM,YAAY,+ZAgCd,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAEvD;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW,2aAgDb,CAAC;AAEZ,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD,8DAA8D;AAC9D,eAAO,MAAM,aAAa,utBAoEf,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,aAAa,wIAsBf,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,0DAA0D;AAC1D,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAKxC,CAAC;AAEH,MAAM,WAAW,KAAK;IACpB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IACnD,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;CACzD;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,EAAE,KA+OzB,CAAC;AAEH,mEAAmE;AACnE,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAClE,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IAC/D,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;IACpE,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;CACrE;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,aAAa,GAAG,KAAK,CAOvE;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,YAAY,CAAC,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,KAAK,CAE7D;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,SAAU,GAAG,MAAM,CAWjE"}
package/dist/theme.js CHANGED
@@ -97,6 +97,19 @@ export const TYPE_TOKENS = Object.freeze([
97
97
  '--ig-tracking-group',
98
98
  '--ig-tracking-pill',
99
99
  '--ig-tracking-badge',
100
+ // THE FOUR STEPS BETWEEN `--ig-font-size-micro` AND `--ig-font-size`, for the
101
+ // same reason the two below `small` were added: the frames draw them and this
102
+ // file named none of them, so every one had to be approximated by 11px or
103
+ // 13px. §16a alone spends 10.5 (a footer row's id), 12.5 (a footer row's
104
+ // title and §16b's node title), 13.5 (a rank row's title) and 14 (the rank
105
+ // number itself) — four values in one frame, none of them derivable from the
106
+ // two that shipped. Approximating them is what made a rank row read as one
107
+ // undifferentiated block of body copy: with title, id and provenance all at
108
+ // 11-13px, the row had no type hierarchy to see.
109
+ '--ig-font-size-meta',
110
+ '--ig-font-size-compact',
111
+ '--ig-font-size-row',
112
+ '--ig-font-size-rank',
100
113
  ]);
101
114
  /** Geometry tokens. Every value is a number of CSS pixels. */
102
115
  export const METRIC_TOKENS = Object.freeze([
@@ -108,6 +121,7 @@ export const METRIC_TOKENS = Object.freeze([
108
121
  '--ig-station-halo',
109
122
  '--ig-stroke',
110
123
  '--ig-stroke-connector',
124
+ '--ig-stroke-audit',
111
125
  '--ig-terminal-length',
112
126
  '--ig-terminal-width',
113
127
  '--ig-gutter-width',
@@ -144,6 +158,28 @@ export const METRIC_TOKENS = Object.freeze([
144
158
  // WORKING NOW band, `inset 3px 0 0`). It pairs with `--ig-tint-wash`: the
145
159
  // wash is the band's fill and this is its edge.
146
160
  '--ig-band-rail',
161
+ // §16a's rank TRACK, `grid-template-columns: 34px 1fr`. It is a column width
162
+ // rather than a derived one because the frame fixes it: the rank figure and
163
+ // the readiness dot stack inside it and the title column starts at the same
164
+ // x on every row, held or not. Deriving it from the station size and a gap
165
+ // would make the alignment grid move whenever either did, which is the one
166
+ // thing this column exists to prevent.
167
+ '--ig-rank-column',
168
+ // §17j's RAIL density, beside §16a's above rather than replacing it, because
169
+ // there are two densities and the tile says so: the provenance line is
170
+ // inline in §16a's wider panel and expand-on-demand in the rail. A host
171
+ // retheming one must be able to reach the other, so both are in the
172
+ // contract.
173
+ '--ig-row-height-dense',
174
+ '--ig-row-padding-block-dense',
175
+ '--ig-rank-column-dense',
176
+ '--ig-row-title-line',
177
+ '--ig-row-meta-line',
178
+ '--ig-row-line-gap',
179
+ // §16b's spine furniture: the station disc that sits ON the spine line, and
180
+ // the line height a card's own height is counted in.
181
+ '--ig-station-box',
182
+ '--ig-card-line',
147
183
  ]);
148
184
  /**
149
185
  * Surface-treatment tokens: values that are none of a colour, a type value or
@@ -274,6 +310,16 @@ export const defaultTheme = Object.freeze({
274
310
  // derived from the size, because these two share one.
275
311
  '--ig-tracking-pill': '0.08em',
276
312
  '--ig-tracking-badge': '0.06em',
313
+ // Read values, in the same sense as `micro` and `pill`: §16a's footer row
314
+ // prints its id at 10.5 and its title at 12.5, its rank rows print titles
315
+ // at 13.5, and the rank figure itself is 14. §16b reuses `compact` for a
316
+ // node title and `meta` for a node id, which is why they are named for
317
+ // their ROLE rather than for a position in a scale — there is no scale
318
+ // here to be a position in.
319
+ '--ig-font-size-meta': '10.5px',
320
+ '--ig-font-size-compact': '12.5px',
321
+ '--ig-font-size-row': '13.5px',
322
+ '--ig-font-size-rank': '14px',
277
323
  }),
278
324
  metrics: Object.freeze({
279
325
  '--ig-space': 12,
@@ -288,13 +334,32 @@ export const defaultTheme = Object.freeze({
288
334
  // The `together-with` hairline connector, which is deliberately finer than
289
335
  // an ordinary edge so the enclosure stays the primary read.
290
336
  '--ig-stroke-connector': 1.6,
337
+ // §17d's ambient audit bar, which the design fixes at 2px in those words —
338
+ // heavier than an edge stroke because it has to be findable while the
339
+ // reader is scrolling past it doing something else, and no heavier because
340
+ // §17d's whole argument is attention without nagging.
341
+ //
342
+ // IT LIVES IN THIS THEME, NOT THE AUDIT'S. `editor/src/audit/styles.ts`
343
+ // records shipping an `--ig-audit-bar` of its own behind a second theme
344
+ // function and reversing it: a host that installed the viewer's theme and
345
+ // forgot the second got a `var()` resolving to nothing, and the bar
346
+ // silently stopped drawing. A token here has no such state — every host
347
+ // installs this theme — so the value stays retunable without the failure
348
+ // that reversal was paid for.
349
+ '--ig-stroke-audit': 2,
291
350
  // The terminal marker's own box. It is theme data rather than a constant
292
351
  // in the drawing code because it is a SIZE, and R5 admits no exceptions:
293
352
  // a host scaling the type up needs the arrowheads to follow.
294
353
  '--ig-terminal-length': 9,
295
354
  '--ig-terminal-width': 8,
296
- '--ig-gutter-width': 208,
297
- '--ig-spine-width': 360,
355
+ // §16b's own column widths: a 250px left gutter, a 330px spine card and a
356
+ // 270px right gutter, inside an 1180px panel. One gutter token serves both
357
+ // sides — the frame's 20px difference between them carries no stated
358
+ // meaning, and two tokens would ask a host to reproduce an asymmetry it
359
+ // cannot read a reason for. The sum lands the canvas at 1164, which is the
360
+ // frame's panel less its own border and scroll allowance.
361
+ '--ig-gutter-width': 260,
362
+ '--ig-spine-width': 330,
298
363
  // The advance width of one character at `--ig-font-size` in the mono face.
299
364
  // Layout measures text with it, so a host changing the type scale changes
300
365
  // this too and the boxes stay around their contents.
@@ -306,7 +371,7 @@ export const defaultTheme = Object.freeze({
306
371
  // title overflow its node: 24 all-capital characters "fitted" 187.2px of
307
372
  // room and drew about 240px, straight across the routing channel.
308
373
  //
309
- // AN AVERAGE, because `fitLabel` scales it per character class rather than
374
+ // AN AVERAGE, because `labelWidth` scales it per character class rather than
310
375
  // assuming every glyph is the same width — see `labelWidth` there. A flat
311
376
  // CEILING was tried and is wrong in the other direction: at the widest
312
377
  // glyph's advance, ordinary titles truncate at roughly half their length,
@@ -334,6 +399,54 @@ export const defaultTheme = Object.freeze({
334
399
  '--ig-row-padding-block': 13,
335
400
  // §16a's WORKING NOW band, `box-shadow: inset 3px 0 0 var(--cyan)`.
336
401
  '--ig-band-rail': 3,
402
+ // §16a's rank track, read straight off `grid-template-columns: 34px 1fr`.
403
+ '--ig-rank-column': 34,
404
+ // ── §17j's RAIL density ────────────────────────────────────────────────
405
+ //
406
+ // THE THREE ABOVE ARE §16a's, AND §16a IS THE WIDE PANEL. Their comments
407
+ // say so — `34px 1fr` and `padding: 13px 20px` were read off that tile —
408
+ // and applying them to §17's rail is what made one density serve two
409
+ // surfaces. `RULINGS.md`'s §17j is explicit that there are two: *"The
410
+ // provenance line never renders inline here. In the rail it is
411
+ // expand-on-demand; in §16a's wider panel it is inline. Same row, two
412
+ // densities."*
413
+ //
414
+ // So these are the rail's own, read off `17j`'s stated anatomy rather than
415
+ // derived from §16a's:
416
+ //
417
+ // 9 pad + 17 title + 3 gap + 15 meta + 9 pad = 53px, divider inclusive
418
+ // tracks: 30px rank · 1fr issue · auto delta
419
+ //
420
+ // They are applied by a CONTAINER query, never a viewport one — `17j`'s
421
+ // closing consequence is that the same row renders at 390 in the workspace
422
+ // and 330 in §18's settings rail, so it *"must take its width from its
423
+ // container and pick its drop step from that"*. A package that reads the
424
+ // window cannot be dropped into someone else's settings page, which is the
425
+ // whole BYO premise.
426
+ '--ig-row-height-dense': 53,
427
+ '--ig-row-padding-block-dense': 9,
428
+ '--ig-rank-column-dense': 30,
429
+ // The two text lines the 53px is composed of, so the height is built from
430
+ // its parts rather than asserted as one number a later edit can drift from.
431
+ // The meta token was added, removed when nothing read it — this package
432
+ // fails a token with no use, and rightly — and is back now that the meta
433
+ // line exists to read it.
434
+ '--ig-row-title-line': 17,
435
+ '--ig-row-meta-line': 15,
436
+ // The 3 in 9 + 17 + 3 + 15 + 9. Its own token because the anatomy is a
437
+ // SUM: a gap borrowed from the spacing scale would drift the height the
438
+ // moment that scale moved, and the height is the thing 17j fixes.
439
+ '--ig-row-line-gap': 3,
440
+ // §16b's station disc, 26px across on the spine.
441
+ '--ig-station-box': 26,
442
+ // One line of text inside a §16b node card, which is what lets the layout
443
+ // give a card a height WITHOUT measuring one. A card's contents are known
444
+ // — a title that may wrap, an identity, a badge row — so its height is a
445
+ // count of lines times this. Chosen as a CEILING on the compact size times
446
+ // the line height (12.5 x 1.45 = 18.1), for the reason `measureLabel` gives
447
+ // about its own metric: a card that reserves slightly too much leaves a
448
+ // gap, and one that reserves too little overlaps the row beneath it.
449
+ '--ig-card-line': 18,
337
450
  }),
338
451
  effects: Object.freeze({
339
452
  // ONE PAIR FOR ALL FIVE RELATIONSHIP CHIPS, at the value §16a draws most
@@ -389,10 +502,9 @@ export function extendTheme(base, override) {
389
502
  * package and stored. Adding a token then puts a hole in it, and the hole does
390
503
  * not fail loudly: a missing metric reads `undefined`, arithmetic on it yields
391
504
  * `NaN`, and every comparison against `NaN` is false. Measured when
392
- * `--ig-label-char-width` was added — a 0.1.0 theme made `fitLabel` return a
393
- * 60-character title with an ellipsis APPENDED, which is worse overflow than
394
- * the defect that token was added to fix, and `themeCss` emitted
395
- * `undefinedpx`.
505
+ * `--ig-label-char-width` was added — a 0.1.0 theme made every measured width
506
+ * `NaN`, so a card's height came out `NaN` and every station stacked at the
507
+ * same y, and `themeCss` emitted `undefinedpx`.
396
508
  *
397
509
  * A TypeScript caller is told about a new token by the compiler; a JavaScript
398
510
  * one is not, and neither is a theme deserialized from storage. This is the
package/dist/theme.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../src/theme.ts"],"names":[],"mappings":"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"}
@@ -27,6 +27,20 @@ export interface EdgeTreatment {
27
27
  readonly hueToken: string;
28
28
  /** Announced to a screen reader, and used as the badge's accessible name. */
29
29
  readonly label: string;
30
+ /**
31
+ * The same relationship read from the OTHER end.
32
+ *
33
+ * A directed edge states one fact, and which end you stand at decides the
34
+ * verb: #488 is what #512 is blocked by, and #512 is what #488 BLOCKS. The
35
+ * badge that shipped said "blocked by #512 (incoming)" on #488's row —
36
+ * technically true, and it asks a reader to invert a sentence in their head
37
+ * on the row where the plain reading was available. §16a draws the plain
38
+ * reading, so the vocabulary carries it.
39
+ *
40
+ * A symmetric edge reads the same both ways and carries none: `undefined`
41
+ * here is what says so, rather than a duplicate of {@link label}.
42
+ */
43
+ readonly reverseLabel?: string;
30
44
  readonly ordering: OrderingEffect;
31
45
  /**
32
46
  * Whether the edge reads the same both ways. A symmetric edge is drawn once
@@ -47,6 +61,7 @@ export declare const EDGE_TREATMENTS: Readonly<{
47
61
  readonly glyph: "⊘";
48
62
  readonly hueToken: "--ig-edge-blocked-by";
49
63
  readonly label: "blocked by";
64
+ readonly reverseLabel: "blocks";
50
65
  readonly ordering: "strict-directed";
51
66
  readonly symmetric: false;
52
67
  };
@@ -74,6 +89,7 @@ export declare const EDGE_TREATMENTS: Readonly<{
74
89
  readonly glyph: "≡";
75
90
  readonly hueToken: "--ig-edge-duplicate-of";
76
91
  readonly label: "duplicate of";
92
+ readonly reverseLabel: "duplicated by";
77
93
  readonly ordering: "never-worked";
78
94
  readonly symmetric: false;
79
95
  };
@@ -83,12 +99,35 @@ export declare const EDGE_TREATMENTS: Readonly<{
83
99
  readonly glyph: "⑃";
84
100
  readonly hueToken: "--ig-edge-decomposed-from";
85
101
  readonly label: "decomposed from";
102
+ readonly reverseLabel: "decomposed into";
86
103
  readonly ordering: "provenance-only";
87
104
  readonly symmetric: false;
88
105
  };
89
106
  }>;
90
107
  /** The treatment for a relationship. Total over the format's fields. */
91
108
  export declare function treatmentFor(field: EdgeField): EdgeTreatment;
109
+ /**
110
+ * A relationship's word, read from the end the reader is standing at.
111
+ *
112
+ * THE VERB CHANGES, NOT THE NOUN. Read from the far end an asymmetric edge has
113
+ * its own plain wording and the vocabulary carries it, so a surface never has
114
+ * to say "(incoming)" and leave the reader to invert a sentence in their head.
115
+ *
116
+ * IT IS A FUNCTION HERE RATHER THAN A TEST AT EACH CALL SITE, and that is the
117
+ * whole reason it exists: the badge row in `parts.ts` and §17a's inspector row
118
+ * in `@issuegraph/editor` draw the SAME edge one zone apart on one screen, and
119
+ * two copies of this expression would be free to disagree the moment either was
120
+ * edited. They were, briefly, and a comment at one of them claimed to be "layer
121
+ * 1's own expression" while being a second copy of it — which is the failure
122
+ * this package names everywhere else: not a wrong answer, a second answer.
123
+ *
124
+ * A symmetric kind takes {@link EdgeTreatment.label} at either end, because
125
+ * `serialize-with` and `together-with` state one fact whichever way round they
126
+ * are stored; `reverseLabel` is `undefined` on them for that reason rather than
127
+ * by omission. The `??` is not a second answer to that question — it is what
128
+ * the optional field's type requires, and it lands on the same string.
129
+ */
130
+ export declare function labelFrom(treatment: EdgeTreatment, outgoing: boolean): string;
92
131
  /**
93
132
  * The dash patterns, as SVG `stroke-dasharray` values keyed by dash name.
94
133
  *
@@ -1 +1 @@
1
- {"version":3,"file":"vocabulary.d.ts","sourceRoot":"","sources":["../src/vocabulary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE/D,kFAAkF;AAClF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,KAAK,CAAC;AAEpF,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,qBAAqB,GACrB,aAAa,GACb,cAAc,GACd,iBAAiB,CAAC;AAEtB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8C0B,CAAC;AAEvD,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAE5D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAY1D;AAED,0FAA0F;AAC1F,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EAAgB,CAAC"}
1
+ {"version":3,"file":"vocabulary.d.ts","sourceRoot":"","sources":["../src/vocabulary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE/D,kFAAkF;AAClF,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAE9E,iFAAiF;AACjF,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,KAAK,CAAC;AAEpF,+CAA+C;AAC/C,MAAM,MAAM,cAAc,GACtB,iBAAiB,GACjB,qBAAqB,GACrB,aAAa,GACb,cAAc,GACd,iBAAiB,CAAC;AAEtB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,4EAA4E;IAC5E,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC;;;;OAIG;IACH,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;CAC7B;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiD0B,CAAC;AAEvD,wEAAwE;AACxE,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,aAAa,CAE5D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,SAAS,CAAC,SAAS,EAAE,aAAa,EAAE,QAAQ,EAAE,OAAO,GAAG,MAAM,CAE7E;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,IAAI,CAY1D;AAED,0FAA0F;AAC1F,eAAO,MAAM,UAAU,EAAE,SAAS,SAAS,EAAgB,CAAC"}
@@ -24,6 +24,7 @@ export const EDGE_TREATMENTS = Object.freeze({
24
24
  glyph: '⊘',
25
25
  hueToken: '--ig-edge-blocked-by',
26
26
  label: 'blocked by',
27
+ reverseLabel: 'blocks',
27
28
  ordering: 'strict-directed',
28
29
  symmetric: false,
29
30
  },
@@ -51,6 +52,7 @@ export const EDGE_TREATMENTS = Object.freeze({
51
52
  glyph: '≡',
52
53
  hueToken: '--ig-edge-duplicate-of',
53
54
  label: 'duplicate of',
55
+ reverseLabel: 'duplicated by',
54
56
  ordering: 'never-worked',
55
57
  symmetric: false,
56
58
  },
@@ -60,6 +62,7 @@ export const EDGE_TREATMENTS = Object.freeze({
60
62
  glyph: '⑃',
61
63
  hueToken: '--ig-edge-decomposed-from',
62
64
  label: 'decomposed from',
65
+ reverseLabel: 'decomposed into',
63
66
  ordering: 'provenance-only',
64
67
  symmetric: false,
65
68
  },
@@ -68,6 +71,30 @@ export const EDGE_TREATMENTS = Object.freeze({
68
71
  export function treatmentFor(field) {
69
72
  return EDGE_TREATMENTS[field];
70
73
  }
74
+ /**
75
+ * A relationship's word, read from the end the reader is standing at.
76
+ *
77
+ * THE VERB CHANGES, NOT THE NOUN. Read from the far end an asymmetric edge has
78
+ * its own plain wording and the vocabulary carries it, so a surface never has
79
+ * to say "(incoming)" and leave the reader to invert a sentence in their head.
80
+ *
81
+ * IT IS A FUNCTION HERE RATHER THAN A TEST AT EACH CALL SITE, and that is the
82
+ * whole reason it exists: the badge row in `parts.ts` and §17a's inspector row
83
+ * in `@issuegraph/editor` draw the SAME edge one zone apart on one screen, and
84
+ * two copies of this expression would be free to disagree the moment either was
85
+ * edited. They were, briefly, and a comment at one of them claimed to be "layer
86
+ * 1's own expression" while being a second copy of it — which is the failure
87
+ * this package names everywhere else: not a wrong answer, a second answer.
88
+ *
89
+ * A symmetric kind takes {@link EdgeTreatment.label} at either end, because
90
+ * `serialize-with` and `together-with` state one fact whichever way round they
91
+ * are stored; `reverseLabel` is `undefined` on them for that reason rather than
92
+ * by omission. The `??` is not a second answer to that question — it is what
93
+ * the optional field's type requires, and it lands on the same string.
94
+ */
95
+ export function labelFrom(treatment, outgoing) {
96
+ return outgoing || treatment.symmetric ? treatment.label : (treatment.reverseLabel ?? treatment.label);
97
+ }
71
98
  /**
72
99
  * The dash patterns, as SVG `stroke-dasharray` values keyed by dash name.
73
100
  *
@@ -1 +1 @@
1
- {"version":3,"file":"vocabulary.js","sourceRoot":"","sources":["../src/vocabulary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AAkC/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,YAAY,EAAE;QACZ,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,sBAAsB;QAChC,KAAK,EAAE,YAAY;QACnB,QAAQ,EAAE,iBAAiB;QAC3B,SAAS,EAAE,KAAK;KACjB;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,0BAA0B;QACpC,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,qBAAqB;QAC/B,SAAS,EAAE,IAAI;KAChB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,yBAAyB;QACnC,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,aAAa;QACvB,SAAS,EAAE,IAAI;KAChB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,eAAe;QACzB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,wBAAwB;QAClC,KAAK,EAAE,cAAc;QACrB,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,KAAK;KACjB;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,2BAA2B;QACrC,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,iBAAiB;QAC3B,SAAS,EAAE,KAAK;KACjB;CACkD,CAAC,CAAC;AAEvD,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,WAAW;YACd,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,MAAM,UAAU,GAAyB,WAAW,CAAC"}
1
+ {"version":3,"file":"vocabulary.js","sourceRoot":"","sources":["../src/vocabulary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAkB,MAAM,kBAAkB,CAAC;AAgD/D;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3C,YAAY,EAAE;QACZ,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,OAAO;QACjB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,sBAAsB;QAChC,KAAK,EAAE,YAAY;QACnB,YAAY,EAAE,QAAQ;QACtB,QAAQ,EAAE,iBAAiB;QAC3B,SAAS,EAAE,KAAK;KACjB;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,MAAM;QAChB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,0BAA0B;QACpC,KAAK,EAAE,iBAAiB;QACxB,QAAQ,EAAE,qBAAqB;QAC/B,SAAS,EAAE,IAAI;KAChB;IACD,eAAe,EAAE;QACf,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,WAAW;QACrB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,yBAAyB;QACnC,KAAK,EAAE,eAAe;QACtB,QAAQ,EAAE,aAAa;QACvB,SAAS,EAAE,IAAI;KAChB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,eAAe;QACzB,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,wBAAwB;QAClC,KAAK,EAAE,cAAc;QACrB,YAAY,EAAE,eAAe;QAC7B,QAAQ,EAAE,cAAc;QACxB,SAAS,EAAE,KAAK;KACjB;IACD,iBAAiB,EAAE;QACjB,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,GAAG;QACV,QAAQ,EAAE,2BAA2B;QACrC,KAAK,EAAE,iBAAiB;QACxB,YAAY,EAAE,iBAAiB;QAC/B,QAAQ,EAAE,iBAAiB;QAC3B,SAAS,EAAE,KAAK;KACjB;CACkD,CAAC,CAAC;AAEvD,wEAAwE;AACxE,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,SAAS,CAAC,SAAwB,EAAE,QAAiB;IACnE,OAAO,QAAQ,IAAI,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,YAAY,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AACzG,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc;IACzC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC;QACd,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,KAAK,CAAC;QACf,KAAK,WAAW;YACd,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED,0FAA0F;AAC1F,MAAM,CAAC,MAAM,UAAU,GAAyB,WAAW,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@issuegraph/viewer",
3
- "version": "0.3.0",
3
+ "version": "0.9.1",
4
4
  "description": "Render an Issuegraph document as a work order — the ordered spine with readiness stations, the five edge treatments, and three projections. Rendering only: no fetching, no mutation, no auth, and every value themeable through CSS custom properties.",
5
5
  "keywords": [
6
6
  "issuegraph",
@@ -42,7 +42,7 @@
42
42
  "node": ">=18"
43
43
  },
44
44
  "dependencies": {
45
- "@issuegraph/core": "^0.1.2"
45
+ "@issuegraph/core": "^0.1.3"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@types/node": "^22.18.0",