@diagrammo/dgmo 0.26.0 → 0.27.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 (136) hide show
  1. package/README.md +3 -3
  2. package/dist/advanced.cjs +4182 -2704
  3. package/dist/advanced.d.cts +266 -58
  4. package/dist/advanced.d.ts +266 -58
  5. package/dist/advanced.js +4182 -2698
  6. package/dist/auto.cjs +4042 -2581
  7. package/dist/auto.js +124 -122
  8. package/dist/auto.mjs +4042 -2581
  9. package/dist/cli.cjs +172 -170
  10. package/dist/editor.cjs +4 -0
  11. package/dist/editor.js +4 -0
  12. package/dist/highlight.cjs +4 -0
  13. package/dist/highlight.js +4 -0
  14. package/dist/index.cjs +4067 -2583
  15. package/dist/index.d.cts +33 -8
  16. package/dist/index.d.ts +33 -8
  17. package/dist/index.js +4067 -2583
  18. package/dist/internal.cjs +4182 -2704
  19. package/dist/internal.d.cts +266 -58
  20. package/dist/internal.d.ts +266 -58
  21. package/dist/internal.js +4182 -2698
  22. package/dist/map-data/PROVENANCE.json +1 -1
  23. package/dist/map-data/airport-collisions.json +1 -0
  24. package/dist/map-data/airports.json +1 -0
  25. package/docs/language-reference.md +68 -18
  26. package/gallery/fixtures/boxes-and-lines-diverging.dgmo +15 -0
  27. package/gallery/fixtures/map-choropleth-diverging.dgmo +9 -0
  28. package/gallery/fixtures/map-region-values.dgmo +13 -0
  29. package/gallery/fixtures/map-subnational-zoom.dgmo +12 -0
  30. package/gallery/fixtures/map-tagged-legs.dgmo +16 -0
  31. package/gallery/fixtures/map-undirected-edges.dgmo +12 -0
  32. package/package.json +1 -1
  33. package/src/advanced.ts +1 -6
  34. package/src/auto/index.ts +1 -1
  35. package/src/boxes-and-lines/layout.ts +146 -26
  36. package/src/boxes-and-lines/parser.ts +43 -8
  37. package/src/boxes-and-lines/renderer.ts +223 -96
  38. package/src/boxes-and-lines/types.ts +9 -2
  39. package/src/c4/layout.ts +14 -32
  40. package/src/c4/parser.ts +9 -5
  41. package/src/c4/renderer.ts +34 -39
  42. package/src/class/layout.ts +118 -18
  43. package/src/class/parser.ts +35 -0
  44. package/src/class/renderer.ts +58 -2
  45. package/src/class/types.ts +3 -0
  46. package/src/cli.ts +4 -4
  47. package/src/completion.ts +26 -12
  48. package/src/cycle/layout.ts +55 -72
  49. package/src/cycle/renderer.ts +11 -6
  50. package/src/d3.ts +78 -117
  51. package/src/diagnostics.ts +16 -0
  52. package/src/echarts.ts +46 -33
  53. package/src/editor/keywords.ts +4 -0
  54. package/src/er/layout.ts +114 -22
  55. package/src/er/parser.ts +28 -0
  56. package/src/er/renderer.ts +55 -2
  57. package/src/er/types.ts +3 -0
  58. package/src/gantt/renderer.ts +46 -38
  59. package/src/gantt/resolver.ts +9 -2
  60. package/src/graph/edge-spline.ts +29 -0
  61. package/src/graph/flowchart-parser.ts +34 -1
  62. package/src/graph/flowchart-renderer.ts +78 -64
  63. package/src/graph/layout.ts +206 -23
  64. package/src/graph/notes.ts +21 -0
  65. package/src/graph/state-parser.ts +26 -1
  66. package/src/graph/state-renderer.ts +78 -64
  67. package/src/graph/types.ts +13 -0
  68. package/src/index.ts +1 -1
  69. package/src/infra/layout.ts +46 -26
  70. package/src/infra/renderer.ts +16 -7
  71. package/src/journey-map/layout.ts +38 -49
  72. package/src/journey-map/renderer.ts +22 -45
  73. package/src/kanban/renderer.ts +15 -6
  74. package/src/label-layout.ts +3 -3
  75. package/src/map/completion.ts +77 -22
  76. package/src/map/context-labels.ts +57 -12
  77. package/src/map/data/PROVENANCE.json +1 -1
  78. package/src/map/data/airport-collisions.json +1 -0
  79. package/src/map/data/airports.json +1 -0
  80. package/src/map/data/types.ts +19 -0
  81. package/src/map/layout.ts +1196 -90
  82. package/src/map/legend-band.ts +2 -2
  83. package/src/map/load-data.ts +10 -1
  84. package/src/map/parser.ts +61 -32
  85. package/src/map/renderer.ts +284 -12
  86. package/src/map/resolved-types.ts +15 -1
  87. package/src/map/resolver.ts +132 -12
  88. package/src/map/types.ts +28 -8
  89. package/src/migrate/embedded.ts +9 -7
  90. package/src/mindmap/text-wrap.ts +13 -14
  91. package/src/org/layout.ts +19 -17
  92. package/src/org/renderer.ts +11 -4
  93. package/src/palettes/color-utils.ts +82 -21
  94. package/src/palettes/index.ts +0 -19
  95. package/src/palettes/registry.ts +1 -1
  96. package/src/palettes/types.ts +2 -2
  97. package/src/pert/layout.ts +48 -40
  98. package/src/pert/renderer.ts +30 -43
  99. package/src/pyramid/renderer.ts +4 -5
  100. package/src/raci/renderer.ts +34 -68
  101. package/src/render.ts +1 -1
  102. package/src/ring/renderer.ts +1 -2
  103. package/src/sequence/parser.ts +100 -22
  104. package/src/sequence/renderer.ts +75 -50
  105. package/src/sitemap/layout.ts +27 -19
  106. package/src/sitemap/renderer.ts +12 -5
  107. package/src/tech-radar/renderer.ts +11 -35
  108. package/src/utils/arrow-markers.ts +51 -0
  109. package/src/utils/fit-canvas.ts +64 -0
  110. package/src/utils/legend-constants.ts +8 -54
  111. package/src/utils/legend-d3.ts +10 -7
  112. package/src/utils/legend-layout.ts +7 -4
  113. package/src/utils/legend-types.ts +10 -4
  114. package/src/utils/note-box/constants.ts +25 -0
  115. package/src/utils/note-box/index.ts +11 -0
  116. package/src/utils/note-box/metrics.ts +90 -0
  117. package/src/utils/note-box/svg.ts +331 -0
  118. package/src/utils/notes/bounds.ts +30 -0
  119. package/src/utils/notes/build.ts +131 -0
  120. package/src/utils/notes/index.ts +18 -0
  121. package/src/utils/notes/model.ts +19 -0
  122. package/src/utils/notes/parse.ts +131 -0
  123. package/src/utils/notes/place.ts +177 -0
  124. package/src/utils/notes/resolve.ts +88 -0
  125. package/src/utils/number-format.ts +36 -0
  126. package/src/utils/parsing.ts +41 -0
  127. package/src/utils/reserved-key-registry.ts +4 -0
  128. package/src/utils/text-measure.ts +122 -0
  129. package/src/wireframe/layout.ts +4 -2
  130. package/src/wireframe/renderer.ts +8 -6
  131. package/src/palettes/dracula.ts +0 -68
  132. package/src/palettes/gruvbox.ts +0 -85
  133. package/src/palettes/monokai.ts +0 -68
  134. package/src/palettes/one-dark.ts +0 -70
  135. package/src/palettes/rose-pine.ts +0 -84
  136. package/src/palettes/solarized.ts +0 -77
package/dist/index.d.cts CHANGED
@@ -117,9 +117,9 @@ interface PaletteColors {
117
117
  * hands out the same frozen-shape object on every `getPalette(id)`.
118
118
  */
119
119
  interface PaletteConfig {
120
- /** Registry key: 'nord', 'solarized', 'catppuccin' */
120
+ /** Registry key: 'nord', 'slate', 'catppuccin' */
121
121
  readonly id: string;
122
- /** Display name: 'Nord', 'Solarized', 'Catppuccin' */
122
+ /** Display name: 'Nord', 'Slate', 'Catppuccin' */
123
123
  readonly name: string;
124
124
  /** Light mode color definitions */
125
125
  readonly light: PaletteColors;
@@ -168,13 +168,7 @@ declare const palettes: {
168
168
  readonly tidewater: PaletteConfig;
169
169
  readonly nord: PaletteConfig;
170
170
  readonly catppuccin: PaletteConfig;
171
- readonly solarized: PaletteConfig;
172
- readonly gruvbox: PaletteConfig;
173
171
  readonly tokyoNight: PaletteConfig;
174
- readonly oneDark: PaletteConfig;
175
- readonly rosePine: PaletteConfig;
176
- readonly dracula: PaletteConfig;
177
- readonly monokai: PaletteConfig;
178
172
  };
179
173
 
180
174
  declare function getMinDimensions(content: string): {
@@ -244,6 +238,24 @@ interface Gazetteer {
244
238
  /** Folded alias → index into `cities`. Never collides with a `byName` key. */
245
239
  alt: Record<string, number>;
246
240
  }
241
+ /**
242
+ * IATA-coded airport index (a SEPARATE optional asset — `airports.json`; ADR-1).
243
+ * Lets memorized airport codes resolve to coordinates through the resolver's
244
+ * existing fold→lookup path (`poi JFK`, `route JFK -> LAX`) — no parser change.
245
+ *
246
+ * - `airports` — `GazetteerEntry` tuples `[lat, lon, iso, 0, name]`. `pop` is
247
+ * always 0 (OurAirports has no enplanement column); `name` is the full airport
248
+ * name, used for COMPLETION DISPLAY only — airports resolve by IATA code, never
249
+ * by name. Coords are rounded to 2 decimals (~1km; sub-pixel at map scale).
250
+ * - `airportIata` — folded 3-letter IATA code → index into `airports`. Consulted
251
+ * LAST in resolution (after city `byName` + `alt`), so a real city always wins
252
+ * a shared token (ADR-2). Airports never enter `cities[]`, so the city-scatter
253
+ * and reverse-geocode layers never see them.
254
+ */
255
+ interface AirportData {
256
+ readonly airports: GazetteerEntry[];
257
+ readonly airportIata: Record<string, number>;
258
+ }
247
259
  /** A fill-able region (country or US state) — the display name + its ISO id +
248
260
  * layer. Powers region-name autocomplete (completion-only; the renderer derives
249
261
  * names from the topology directly). Extracted from the topologies by
@@ -273,10 +285,23 @@ interface MapPlaceCompletion {
273
285
  readonly iso: string;
274
286
  readonly sub?: string;
275
287
  readonly pop: number;
288
+ /** `'airport'` for IATA-code entries (icon/grouping affordance); absent or
289
+ * `'city'` for gazetteer cities. Cities rank above airports for a shared
290
+ * prefix so ~1500 codes never bury city names (ADR-5). */
291
+ readonly kind?: 'city' | 'airport';
276
292
  }
277
293
  interface MapCompletionOptions {
278
294
  /** Max results (default 12). */
279
295
  readonly limit?: number;
296
+ /** IATA-coded airports (`airports.json`). When supplied, airport codes
297
+ * matching the prefix are offered as a second (post-city) group. Optional —
298
+ * absent (old DI bundles / no asset) just yields city-only completions. */
299
+ readonly airports?: AirportData;
300
+ /** Resolver-inferred map scope (country `US` or subdivision `US-CA`). Biases
301
+ * airport ranking so in-region airports sort above out-of-region same-prefix
302
+ * ones (ADR-6). Pure rank, never a filter — cross-region airports still
303
+ * appear. App passes the document's inferred scope in (Slice 2). */
304
+ readonly scopeISO?: string;
280
305
  }
281
306
  /**
282
307
  * Prefix-match city names + alternate-name aliases against the gazetteer,
package/dist/index.d.ts CHANGED
@@ -117,9 +117,9 @@ interface PaletteColors {
117
117
  * hands out the same frozen-shape object on every `getPalette(id)`.
118
118
  */
119
119
  interface PaletteConfig {
120
- /** Registry key: 'nord', 'solarized', 'catppuccin' */
120
+ /** Registry key: 'nord', 'slate', 'catppuccin' */
121
121
  readonly id: string;
122
- /** Display name: 'Nord', 'Solarized', 'Catppuccin' */
122
+ /** Display name: 'Nord', 'Slate', 'Catppuccin' */
123
123
  readonly name: string;
124
124
  /** Light mode color definitions */
125
125
  readonly light: PaletteColors;
@@ -168,13 +168,7 @@ declare const palettes: {
168
168
  readonly tidewater: PaletteConfig;
169
169
  readonly nord: PaletteConfig;
170
170
  readonly catppuccin: PaletteConfig;
171
- readonly solarized: PaletteConfig;
172
- readonly gruvbox: PaletteConfig;
173
171
  readonly tokyoNight: PaletteConfig;
174
- readonly oneDark: PaletteConfig;
175
- readonly rosePine: PaletteConfig;
176
- readonly dracula: PaletteConfig;
177
- readonly monokai: PaletteConfig;
178
172
  };
179
173
 
180
174
  declare function getMinDimensions(content: string): {
@@ -244,6 +238,24 @@ interface Gazetteer {
244
238
  /** Folded alias → index into `cities`. Never collides with a `byName` key. */
245
239
  alt: Record<string, number>;
246
240
  }
241
+ /**
242
+ * IATA-coded airport index (a SEPARATE optional asset — `airports.json`; ADR-1).
243
+ * Lets memorized airport codes resolve to coordinates through the resolver's
244
+ * existing fold→lookup path (`poi JFK`, `route JFK -> LAX`) — no parser change.
245
+ *
246
+ * - `airports` — `GazetteerEntry` tuples `[lat, lon, iso, 0, name]`. `pop` is
247
+ * always 0 (OurAirports has no enplanement column); `name` is the full airport
248
+ * name, used for COMPLETION DISPLAY only — airports resolve by IATA code, never
249
+ * by name. Coords are rounded to 2 decimals (~1km; sub-pixel at map scale).
250
+ * - `airportIata` — folded 3-letter IATA code → index into `airports`. Consulted
251
+ * LAST in resolution (after city `byName` + `alt`), so a real city always wins
252
+ * a shared token (ADR-2). Airports never enter `cities[]`, so the city-scatter
253
+ * and reverse-geocode layers never see them.
254
+ */
255
+ interface AirportData {
256
+ readonly airports: GazetteerEntry[];
257
+ readonly airportIata: Record<string, number>;
258
+ }
247
259
  /** A fill-able region (country or US state) — the display name + its ISO id +
248
260
  * layer. Powers region-name autocomplete (completion-only; the renderer derives
249
261
  * names from the topology directly). Extracted from the topologies by
@@ -273,10 +285,23 @@ interface MapPlaceCompletion {
273
285
  readonly iso: string;
274
286
  readonly sub?: string;
275
287
  readonly pop: number;
288
+ /** `'airport'` for IATA-code entries (icon/grouping affordance); absent or
289
+ * `'city'` for gazetteer cities. Cities rank above airports for a shared
290
+ * prefix so ~1500 codes never bury city names (ADR-5). */
291
+ readonly kind?: 'city' | 'airport';
276
292
  }
277
293
  interface MapCompletionOptions {
278
294
  /** Max results (default 12). */
279
295
  readonly limit?: number;
296
+ /** IATA-coded airports (`airports.json`). When supplied, airport codes
297
+ * matching the prefix are offered as a second (post-city) group. Optional —
298
+ * absent (old DI bundles / no asset) just yields city-only completions. */
299
+ readonly airports?: AirportData;
300
+ /** Resolver-inferred map scope (country `US` or subdivision `US-CA`). Biases
301
+ * airport ranking so in-region airports sort above out-of-region same-prefix
302
+ * ones (ADR-6). Pure rank, never a filter — cross-region airports still
303
+ * appear. App passes the document's inferred scope in (Slice 2). */
304
+ readonly scopeISO?: string;
280
305
  }
281
306
  /**
282
307
  * Prefix-match city names + alternate-name aliases against the gazetteer,