@diagrammo/dgmo 0.64.1 → 0.66.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 (150) hide show
  1. package/LICENSE +1 -1
  2. package/dist/advanced.d.ts +6773 -0
  3. package/dist/advanced.js +71 -71
  4. package/dist/block.d.ts +159 -0
  5. package/dist/block.js +21 -16
  6. package/dist/chart-meta-CpicJ1kj.d.ts +239 -0
  7. package/dist/chart-meta.d.ts +3 -0
  8. package/dist/chart-meta.js +3 -3
  9. package/dist/{charts-d3-ZTXJWEHI.js → charts-d3-I6OE5K3B.js} +9 -9
  10. package/dist/{chunk-C6DMG2V6.js → chunk-27YPE7NO.js} +28 -12
  11. package/dist/{chunk-RBAW7VUG.js → chunk-2EPV7CLY.js} +5 -7
  12. package/dist/{chunk-SCJ7CAJF.js → chunk-3HOCNSPD.js} +2 -2
  13. package/dist/{chunk-VOJOARA6.js → chunk-3OT63FS4.js} +82 -77
  14. package/dist/{chunk-Z2ADWRSW.js → chunk-3PSPUYT5.js} +3 -3
  15. package/dist/{chunk-RBBJIHNL.js → chunk-4IE42ODL.js} +11 -11
  16. package/dist/{chunk-SMCUX42K.js → chunk-4TM7MWU4.js} +7 -6
  17. package/dist/{chunk-H3HFC3SQ.js → chunk-5GM6BZO7.js} +3 -3
  18. package/dist/{chunk-7T3A2UK3.js → chunk-5T7K6QND.js} +15 -16
  19. package/dist/{chunk-NKRCPBTJ.js → chunk-6BOPYGJC.js} +6 -6
  20. package/dist/{chunk-MHI6W6XS.js → chunk-6IUL6LER.js} +10 -7
  21. package/dist/{chunk-S5RWWISJ.js → chunk-7L53J53J.js} +4 -4
  22. package/dist/{chunk-WDJ4HAGO.js → chunk-A6CTYC7O.js} +2 -2
  23. package/dist/{chunk-CDMF7P5A.js → chunk-BBCKUAUR.js} +2 -2
  24. package/dist/{chunk-AA4M6F2P.js → chunk-BBY57XAA.js} +3 -3
  25. package/dist/{chunk-NKRVFQGO.js → chunk-BDI25HWH.js} +18 -6
  26. package/dist/{chunk-SVR3YFM3.js → chunk-C666LP3O.js} +20 -15
  27. package/dist/{chunk-KRTO7NRK.js → chunk-D2WHS23S.js} +2 -2
  28. package/dist/{chunk-LYTEVE2N.js → chunk-DBF4IM4U.js} +20 -15
  29. package/dist/{chunk-PCWPYOT4.js → chunk-ET4R3AU5.js} +4 -4
  30. package/dist/{chunk-2KOBOIB2.js → chunk-FBD5ASMB.js} +2 -2
  31. package/dist/{chunk-ES66QH6J.js → chunk-FG24NXKN.js} +2 -2
  32. package/dist/{chunk-3CIOJ5YJ.js → chunk-FJ57274M.js} +3 -1
  33. package/dist/{chunk-6BVIZW5N.js → chunk-FLFBY5GN.js} +14 -12
  34. package/dist/{chunk-XUN3MIO3.js → chunk-G64OVYUT.js} +2 -2
  35. package/dist/{chunk-RQL25P3U.js → chunk-G7QZF6T3.js} +9 -9
  36. package/dist/{chunk-IGIJZHB6.js → chunk-GC7CBX6C.js} +6 -6
  37. package/dist/{chunk-B6AONGTI.js → chunk-GDQN2TPX.js} +21 -14
  38. package/dist/{chunk-CZUSH6NI.js → chunk-GMLSYNFP.js} +10 -9
  39. package/dist/{chunk-R6HCNSP6.js → chunk-GOW5VO6M.js} +2 -2
  40. package/dist/{chunk-SPHC4RYF.js → chunk-GXOMKWQ5.js} +10 -9
  41. package/dist/{chunk-MQHOKBJ6.js → chunk-IJ4FUFTR.js} +5 -5
  42. package/dist/{chunk-V3UQSKWJ.js → chunk-IJSFEU4J.js} +9 -9
  43. package/dist/{chunk-LSFZDBAP.js → chunk-IKHV5IJB.js} +2 -2
  44. package/dist/{chunk-LMXAB4YM.js → chunk-IZ6RWMBM.js} +9 -9
  45. package/dist/{chunk-6VJCURWU.js → chunk-J2EXBAPZ.js} +4 -5
  46. package/dist/{chunk-IX6N5MCY.js → chunk-JCL4K7AK.js} +12 -11
  47. package/dist/{chunk-OBKM6GIJ.js → chunk-JTUDM7S4.js} +10 -10
  48. package/dist/{chunk-CVVICCSB.js → chunk-L65WI4HO.js} +4 -4
  49. package/dist/{chunk-67D4MN2H.js → chunk-LK6LTSLH.js} +2 -2
  50. package/dist/{chunk-KOHIF4LD.js → chunk-MBODBL7C.js} +6 -5
  51. package/dist/chunk-MTGGOCND.js +638 -0
  52. package/dist/{chunk-VJARCVMH.js → chunk-MU3CJPJF.js} +2 -2
  53. package/dist/{chunk-RKTIIU7Z.js → chunk-N6XI5VTA.js} +4 -4
  54. package/dist/{chunk-ODUT5WMC.js → chunk-NVOU7N6C.js} +2 -2
  55. package/dist/{chunk-DB2KQ5DN.js → chunk-O274UTXH.js} +5 -5
  56. package/dist/{chunk-T4QXHE34.js → chunk-OWUWLZJT.js} +13 -11
  57. package/dist/{chunk-LDVUPGWC.js → chunk-OWVDD5EC.js} +2 -2
  58. package/dist/{chunk-M4HYPDER.js → chunk-P5OCINCI.js} +8 -8
  59. package/dist/{chunk-YLK3JNWP.js → chunk-QNCXONBR.js} +2 -2
  60. package/dist/{chunk-I2ATN25N.js → chunk-R4XM44BW.js} +25 -16
  61. package/dist/{chunk-37EHGTQ2.js → chunk-R7S5542V.js} +4 -4
  62. package/dist/{chunk-DJCZWQ2A.js → chunk-RTTZIX34.js} +4 -4
  63. package/dist/{chunk-OMTBYLKN.js → chunk-TPKNA2U5.js} +9 -7
  64. package/dist/{chunk-DN5HEDE4.js → chunk-TT5B36WO.js} +16 -20
  65. package/dist/{chunk-SF3JAWMY.js → chunk-TWILCDUE.js} +3 -3
  66. package/dist/{chunk-NIZM3LAG.js → chunk-UINRIO77.js} +10 -10
  67. package/dist/{chunk-5H2LIQIH.js → chunk-UJXCDF4E.js} +4 -4
  68. package/dist/{chunk-Z5ID35YP.js → chunk-UTCPNJND.js} +2 -4
  69. package/dist/{chunk-U42ZEK7L.js → chunk-V4BYBIBU.js} +24 -15
  70. package/dist/{chunk-L4IN4OBB.js → chunk-VLI5SYXW.js} +7 -7
  71. package/dist/{chunk-43E26CDA.js → chunk-VS2M72PF.js} +4 -4
  72. package/dist/{chunk-KZ3PCDUJ.js → chunk-VV6HZQ5K.js} +2 -2
  73. package/dist/{chunk-Z5BTSBWW.js → chunk-WF2HDQPG.js} +4 -4
  74. package/dist/{chunk-JU2VMFYC.js → chunk-X26BF4T2.js} +2 -2
  75. package/dist/{chunk-TAJ2XFTT.js → chunk-XKMCL2YJ.js} +19 -16
  76. package/dist/{chunk-7GUYGQR4.js → chunk-XVEPB2UU.js} +4 -4
  77. package/dist/{chunk-YHTKDIF2.js → chunk-YGFNITPC.js} +11 -11
  78. package/dist/{chunk-I24O2RWT.js → chunk-YJOOIOSR.js} +84 -14
  79. package/dist/{chunk-KPX2OWZR.js → chunk-YKWHUPBP.js} +13 -14
  80. package/dist/{chunk-FRC4LDTQ.js → chunk-YMYPFX4O.js} +36 -30
  81. package/dist/cloud-reference.d.ts +96 -0
  82. package/dist/completion-registry.d.ts +129 -0
  83. package/dist/d3-Bfhj-XBX.d.ts +496 -0
  84. package/dist/{dgmo-router-QWRF7ZKM.js → dgmo-router-464FE256.js} +4 -4
  85. package/dist/dgmo-router-EAW7XiBE.d.ts +280 -0
  86. package/dist/{dimensions-ES6O2T4H.js → dimensions-RD3Y7FCF.js} +7 -7
  87. package/dist/{flowchart-renderer-EXMRHFTQ.js → flowchart-renderer-6JKM2FA4.js} +7 -7
  88. package/dist/index.d.ts +210 -0
  89. package/dist/index.js +15 -15
  90. package/dist/{layout-HBWT2G23.js → layout-4LNMXLVK.js} +3 -3
  91. package/dist/{layout-UU4VJTOP.js → layout-62ERBWCM.js} +3 -3
  92. package/dist/{layout-N6X46MWG.js → layout-6SKHNQYO.js} +4 -4
  93. package/dist/{layout-OH4VQ3OI.js → layout-7JULRP4Y.js} +4 -4
  94. package/dist/{layout-QTZO6CW5.js → layout-FA37VP7V.js} +4 -4
  95. package/dist/layout-IN53LAE6.js +9 -0
  96. package/dist/{layout-H4H4OFE4.js → layout-IO6ORC5T.js} +3 -3
  97. package/dist/{layout-54P3DAXY.js → layout-LVMWK4QY.js} +5 -5
  98. package/dist/{layout-WCOEZPOI.js → layout-MNOTDWXW.js} +4 -4
  99. package/dist/{layout-2T2VCCTM.js → layout-RD7GDM4I.js} +5 -5
  100. package/dist/{layout-SKQMIXTG.js → layout-SBQTN2YM.js} +4 -4
  101. package/dist/{layout-5E2NQZNM.js → layout-SGYR6HBX.js} +3 -3
  102. package/dist/{layout-W3ZBJOIK.js → layout-WIMQIHBU.js} +5 -5
  103. package/dist/{layout-search-AJ6VUVUI.js → layout-search-C44CJQOB.js} +5 -5
  104. package/dist/{legend-constants-QQU3QYBF.js → legend-constants-RGINV5SF.js} +3 -3
  105. package/dist/live-link-resolve.d.ts +73 -0
  106. package/dist/{parser-KSIYWKYF.js → parser-CSKF2KNO.js} +8 -4
  107. package/dist/{parser-2BGDJJ2L.js → parser-WLL63XH7.js} +2 -2
  108. package/dist/{renderer-XLEYPLVL.js → renderer-2UIQVKXK.js} +8 -8
  109. package/dist/{renderer-KOWVTTYR.js → renderer-3GG2DEFQ.js} +7 -7
  110. package/dist/{renderer-XLPNUOYA.js → renderer-6NDYVZXQ.js} +10 -10
  111. package/dist/{renderer-2ARNFXSC.js → renderer-6ST44AVP.js} +10 -10
  112. package/dist/{renderer-YLM4CGBG.js → renderer-ALP46W2X.js} +8 -8
  113. package/dist/{renderer-HLWEJQJW.js → renderer-BEVY3UP5.js} +5 -5
  114. package/dist/{renderer-H6AQ4UIR.js → renderer-BXPWSNTJ.js} +13 -13
  115. package/dist/{renderer-BYWLJDT4.js → renderer-EWTETTII.js} +8 -8
  116. package/dist/{renderer-KK2534AF.js → renderer-FHXAWDNI.js} +4 -4
  117. package/dist/{renderer-OB77AT7V.js → renderer-FI4IKF4I.js} +7 -7
  118. package/dist/{renderer-DMVUBKP7.js → renderer-GHYH6DLG.js} +4 -4
  119. package/dist/{renderer-LSBXYOID.js → renderer-GYYJ4APT.js} +10 -10
  120. package/dist/{renderer-M43ROWET.js → renderer-JFOHE3YB.js} +9 -9
  121. package/dist/{renderer-OA7FSZ4A.js → renderer-L5QGQTLV.js} +3 -3
  122. package/dist/{renderer-7OOC2ZO2.js → renderer-L7S6YVM6.js} +4 -4
  123. package/dist/{renderer-YELZR4QT.js → renderer-LCHVBTV4.js} +12 -12
  124. package/dist/{renderer-IN3UPTZS.js → renderer-M4DAYNWC.js} +3 -3
  125. package/dist/{renderer-WN47AMUM.js → renderer-NXIK3LOA.js} +8 -8
  126. package/dist/{renderer-QR5343AR.js → renderer-OWUXQDHM.js} +3 -3
  127. package/dist/{renderer-FCO42JLK.js → renderer-PJNJOCLB.js} +8 -8
  128. package/dist/{renderer-OYTERGAO.js → renderer-QQBUBD66.js} +9 -9
  129. package/dist/{renderer-PM7JPC3J.js → renderer-REFE3YFH.js} +11 -11
  130. package/dist/{renderer-C6KOE774.js → renderer-RL2JGVPC.js} +10 -10
  131. package/dist/{renderer-ZNTLBQ45.js → renderer-RVFPPKWN.js} +9 -9
  132. package/dist/{renderer-QEHUJHRK.js → renderer-SFQHFPC5.js} +10 -10
  133. package/dist/{renderer-LO4FXQHP.js → renderer-T4CMBGA5.js} +8 -8
  134. package/dist/{renderer-NHFRVCDC.js → renderer-T66477EQ.js} +9 -9
  135. package/dist/{renderer-M3PQKXK2.js → renderer-TJD6A3AK.js} +13 -13
  136. package/dist/{renderer-2E7LQC32.js → renderer-URPIVAPI.js} +3 -3
  137. package/dist/{renderer-T5CUGSXP.js → renderer-WENGQEX6.js} +7 -7
  138. package/dist/{renderer-WR3FA3FF.js → renderer-WR6J7NKH.js} +8 -8
  139. package/dist/{renderer-YBEZ5V2H.js → renderer-X3V2G4UL.js} +3 -3
  140. package/dist/{renderer-KPEQ72FY.js → renderer-YAW4VHAI.js} +11 -11
  141. package/dist/{renderer-radial-XWAKJACV.js → renderer-radial-HOUGPUPW.js} +7 -7
  142. package/dist/{state-renderer-LIESKSBO.js → state-renderer-JJSQJZEL.js} +11 -11
  143. package/dist/tag-groups-NUA2F1I5.d.ts +263 -0
  144. package/dist/themes-Dem5xalq.d.ts +139 -0
  145. package/docs/ai-integration.md +1 -1
  146. package/docs/language-reference.md +5 -0
  147. package/gallery/fixtures/er.dgmo +1 -1
  148. package/package.json +5 -3
  149. package/dist/chunk-4ASYQ347.js +0 -185
  150. package/dist/layout-5XGYNYVT.js +0 -9
@@ -0,0 +1,280 @@
1
+ import { P as PaletteConfig, D as DgmoError } from './tag-groups-NUA2F1I5.js';
2
+
3
+ /** Validate that a hex string is well-formed (#RGB or #RRGGBB). */
4
+ declare function isValidHex(value: string): boolean;
5
+ /**
6
+ * Register a palette. Called at module initialization.
7
+ * Validates that all 19 color fields per mode are present and valid hex.
8
+ * Throws on malformed palettes to catch errors at startup, not at render time.
9
+ */
10
+ declare function registerPalette(palette: PaletteConfig): void;
11
+ /** Get palette by id. Silently returns the default palette if id is unrecognized. */
12
+ declare function getPalette(id: string): PaletteConfig;
13
+ /**
14
+ * Resolve a palette by id, falling back to the default palette when the id is
15
+ * unregistered. If a `warn` callback is supplied, it is invoked once with a
16
+ * human-readable fallback message on a miss — the single place the "resolve,
17
+ * fall back, warn" policy lives, so each host can surface it its own way
18
+ * (console.warn, Obsidian Notice, MCP response). Silent when the id resolves or
19
+ * when no callback is passed.
20
+ */
21
+ declare function resolvePaletteOrFallback(id: string, warn?: (message: string) => void): PaletteConfig;
22
+ /** List all registered palettes alphabetically (for the selector UI). */
23
+ declare function getAvailablePalettes(): PaletteConfig[];
24
+
25
+ interface ChartTypeMeta {
26
+ readonly id: string;
27
+ readonly description: string;
28
+ readonly fallback?: true;
29
+ /**
30
+ * Routable but never OFFERED. The type parses, routes and renders like any
31
+ * other, but no surface that enumerates types for a human or a model may list
32
+ * it — nobody hand-authors one, so a picker entry would produce a file the
33
+ * user cannot complete.
34
+ *
35
+ * Honoured at five edges, and deliberately NOT inside `getAllChartTypes()`,
36
+ * which keeps meaning "everything routable":
37
+ * 1. `cli.ts` — `dgmo types` (plain and `--json`)
38
+ * 2. `completion-registry.ts` — the chart-type completion popup
39
+ * 3. `dgmo-mcp/src/index.ts` — the `list_chart_types` tool
40
+ * 4. `dgmo-mcp/src/suggest/scoring.ts` — the suggester's candidate pool
41
+ * 5. `scripts/gen-ai-core.mjs` — the generated AI core every model reads
42
+ * `tests/internal-chart-types.test.ts` is this flag's specification; without
43
+ * it the flag is a convention and the next refactor drops an edge silently.
44
+ */
45
+ readonly internal?: true;
46
+ }
47
+ declare const chartTypesData: readonly [{
48
+ readonly id: "journey-map";
49
+ readonly description: "User experience flow with emotion scores, phases, and annotations";
50
+ }, {
51
+ readonly id: "c4";
52
+ readonly description: "System architecture (context, container, component, deployment)";
53
+ }, {
54
+ readonly id: "er";
55
+ readonly description: "Database schemas and relationships";
56
+ }, {
57
+ readonly id: "class";
58
+ readonly description: "UML class hierarchies";
59
+ }, {
60
+ readonly id: "sequence";
61
+ readonly description: "Message request and response interaction flows";
62
+ readonly fallback: true;
63
+ }, {
64
+ readonly id: "state";
65
+ readonly description: "State machine / lifecycle transitions";
66
+ }, {
67
+ readonly id: "infra";
68
+ readonly description: "Infrastructure traffic flow with RPS computation";
69
+ }, {
70
+ readonly id: "gantt";
71
+ readonly description: "Project scheduling with task dependencies and milestones";
72
+ }, {
73
+ readonly id: "pert";
74
+ readonly description: "Project network with three-point estimates, critical path, and uncertainty (Beta-PERT, Monte Carlo)";
75
+ }, {
76
+ readonly id: "swimlane";
77
+ readonly description: "Cross-functional process flow with lanes, phases and gateways (BPMN-style)";
78
+ }, {
79
+ readonly id: "version-control";
80
+ readonly description: "Git / version-control branch-and-merge graph: commits, branches, merges, rebase, HEAD and remote-tracking (gitGraph-style)";
81
+ }, {
82
+ readonly id: "timeline";
83
+ readonly description: "Events, eras, and date ranges";
84
+ }, {
85
+ readonly id: "event-line";
86
+ readonly description: "Annotated narrative timeline — events on a horizontal line with descriptions (not the date-scaled timeline)";
87
+ }, {
88
+ readonly id: "body";
89
+ readonly description: "Human anatomy figure annotated by muscle/bone/joint name — for medical, exercise, and educational diagrams";
90
+ }, {
91
+ readonly id: "org";
92
+ readonly description: "Reporting hierarchy";
93
+ }, {
94
+ readonly id: "family";
95
+ readonly description: "Family tree / genealogy: unions (couples), children, remarriage, adoption, and GEDCOM-style metadata";
96
+ }, {
97
+ readonly id: "sitemap";
98
+ readonly description: "Site / app navigation structure";
99
+ }, {
100
+ readonly id: "bracket";
101
+ readonly description: "Single-elimination tournament bracket: winners auto-advance up a tree; seed the field for a day-0 skeleton or list results for a casual bracket, with two sides mirroring inward to a championship";
102
+ }, {
103
+ readonly id: "kanban";
104
+ readonly description: "Task board columns";
105
+ }, {
106
+ readonly id: "raci";
107
+ readonly description: "Tasks × roles responsibility matrix with constraint linting";
108
+ }, {
109
+ readonly id: "tech-radar";
110
+ readonly description: "Technology adoption quadrants (adopt/trial/assess/hold)";
111
+ }, {
112
+ readonly id: "mindmap";
113
+ readonly description: "Radial hierarchy of ideas branching from a central topic";
114
+ }, {
115
+ readonly id: "wireframe";
116
+ readonly description: "Low-fidelity UI layout with panels, controls, and annotations";
117
+ }, {
118
+ readonly id: "cycle";
119
+ readonly description: "Cyclical process visualization (PDCA, OODA, DevOps loops)";
120
+ }, {
121
+ readonly id: "pyramid";
122
+ readonly description: "Stacked hierarchy of layers with descriptions (Maslow, DIKW)";
123
+ }, {
124
+ readonly id: "ring";
125
+ readonly description: "Concentric rings showing nested or hierarchical categories (read core-out)";
126
+ }, {
127
+ readonly id: "treemap";
128
+ readonly description: "Nested rectangles sized by value — show a hierarchy’s proportions (budgets, disk usage, portfolios) with color by category, value heatmap, or branch";
129
+ }, {
130
+ readonly id: "block";
131
+ readonly description: "Block diagram: an author-controlled grid of rectangular blocks with nested, collapsible containers — system/hardware/architecture layouts where the 2-D arrangement is the meaning";
132
+ }, {
133
+ readonly id: "sketch";
134
+ readonly description: "GUI-first constrained canvas: uniformly-sized shapes placed freely on a snap grid, arrows between them, meaning through tags — the markup is generated by the canvas editor";
135
+ }, {
136
+ readonly id: "goal";
137
+ readonly description: "Single progress-toward-a-target value (now vs target) as a progress bar, thermometer, or gauge — KPIs, fundraising, quotas, completion";
138
+ }, {
139
+ readonly id: "countdown";
140
+ readonly description: "Live \"N days until X\" that ticks every second and is accurate on every load — trip dates, launches, deadlines; the only dynamic chart type";
141
+ }, {
142
+ readonly id: "clock";
143
+ readonly description: "Live world-clock board: current time for people/places across time zones, ticking every second, with optional working-hours status and sundown line";
144
+ }, {
145
+ readonly id: "map";
146
+ readonly description: "Geographic concept map: highlight/score regions, drop points of interest, connect with routes or edges";
147
+ }, {
148
+ readonly id: "quadrant";
149
+ readonly description: "2x2 positioning matrix";
150
+ }, {
151
+ readonly id: "venn";
152
+ readonly description: "Set overlaps";
153
+ }, {
154
+ readonly id: "funnel";
155
+ readonly description: "Conversion pipeline";
156
+ }, {
157
+ readonly id: "slope";
158
+ readonly description: "Change between 2 time periods";
159
+ }, {
160
+ readonly id: "sankey";
161
+ readonly description: "Flow / allocation visualization";
162
+ }, {
163
+ readonly id: "arc";
164
+ readonly description: "Network relationships (linear or circular via `layout`)";
165
+ }, {
166
+ readonly id: "wordcloud";
167
+ readonly description: "Term frequency visualization";
168
+ }, {
169
+ readonly id: "heatmap";
170
+ readonly description: "Matrix intensity visualization";
171
+ }, {
172
+ readonly id: "function";
173
+ readonly description: "Mathematical expressions";
174
+ }, {
175
+ readonly id: "bar";
176
+ readonly description: "Categorical comparisons for 3 - 5 figures";
177
+ readonly fallback: true;
178
+ }, {
179
+ readonly id: "line";
180
+ readonly description: "Trends over time";
181
+ readonly fallback: true;
182
+ }, {
183
+ readonly id: "pie";
184
+ readonly description: "Part-to-whole proportions";
185
+ }, {
186
+ readonly id: "radar";
187
+ readonly description: "Multi-dimensional metrics";
188
+ }, {
189
+ readonly id: "polar-area";
190
+ readonly description: "Radial bar chart";
191
+ }, {
192
+ readonly id: "scatter";
193
+ readonly description: "2D data points or bubble chart";
194
+ }, {
195
+ readonly id: "flowchart";
196
+ readonly description: "Decision trees and process flows";
197
+ readonly fallback: true;
198
+ }, {
199
+ readonly id: "boxes-and-lines";
200
+ readonly description: "General-purpose node-edge diagrams with groups and tags";
201
+ readonly fallback: true;
202
+ }, {
203
+ readonly id: "live-link";
204
+ readonly description: "A pointer to a diagram published at Diagrammo Cloud";
205
+ readonly internal: true;
206
+ }];
207
+ /**
208
+ * Every chart type the router can dispatch — the "routable" set.
209
+ *
210
+ * Distinct from the "offered" set (`utils/offered-types.ts`), which drops the
211
+ * `internal` types nobody hand-authors. A live link is routable but never
212
+ * offered.
213
+ *
214
+ * This union is the reason the id list lives here: `chart-type-registry.ts`
215
+ * keys its `Record` by it, so a chart type missing from the registry is a
216
+ * compile error, and `ALL_CHART_TYPES` / the editor's `CHART_TYPES` derive from
217
+ * the same array rather than restating it.
218
+ */
219
+ type ChartTypeId = (typeof chartTypesData)[number]['id'];
220
+ declare const chartTypes: readonly ChartTypeMeta[];
221
+
222
+ /** User-visible rendering category for dispatch and routing. */
223
+ type RenderCategory = 'data-chart' | 'visualization' | 'diagram';
224
+
225
+ /**
226
+ * Extracts the chart type from raw file content.
227
+ * First tries the first non-empty, non-comment line as a bare chart type name
228
+ * (e.g., `gantt Product Launch`).
229
+ * Falls back to inference when no explicit chart type is found.
230
+ */
231
+ declare function parseDgmoChartType(content: string): string | null;
232
+
233
+ /**
234
+ * Returns the render category for a given chart type, or `null` if unknown.
235
+ * Use this instead of the internal framework map for dispatch in consumers.
236
+ */
237
+ declare function getRenderCategory(chartType: string): RenderCategory | null;
238
+ /**
239
+ * Returns true if the chart type is an extended chart type
240
+ * handled by parseExtendedChart (scatter, sankey, function, heatmap, funnel).
241
+ * Returns false for standard chart types and all other types.
242
+ */
243
+ declare function isExtendedChartType(chartType: string): boolean;
244
+ /**
245
+ * Returns all supported chart type identifiers in canonical (tier) order,
246
+ * derived from `chartTypes`. Consumers that need alphabetical order should
247
+ * call `.sort()` explicitly.
248
+ */
249
+ declare function getAllChartTypes(): string[];
250
+ /**
251
+ * Canonical descriptions for every supported chart type. Derived from
252
+ * `chartTypes` so there is exactly one place to update when adding a new
253
+ * type. Consumed by the CLI `dgmo types` command, the editor autocomplete
254
+ * popup, and the MCP `list_chart_types` tool.
255
+ */
256
+ declare const CHART_TYPE_DESCRIPTIONS: Record<string, string>;
257
+ type ParseResult = {
258
+ diagnostics: readonly DgmoError[];
259
+ };
260
+ type ParseFn = (content: string) => ParseResult;
261
+ /**
262
+ * Maps every chart-type id to the parser that handles it, DERIVED from
263
+ * `CHART_TYPE_REGISTRY` (src/chart-type-registry.ts). Adding a new chart type
264
+ * means adding ONE descriptor there plus its `chartTypes` metadata entry; the
265
+ * `chart-type-registry.test.ts` cross-check asserts the registry, `chartTypes`,
266
+ * the render-category sites, and the export handlers all stay in sync.
267
+ */
268
+ declare const chartTypeParsers: ReadonlyArray<readonly [string, ParseFn]>;
269
+ /** Ids in the same order as `chartTypeParsers`; used for cross-checks. */
270
+ declare const knownChartTypeIds: readonly string[];
271
+ /**
272
+ * Parse DGMO content and return diagnostics without rendering.
273
+ * Useful for the CLI and editor to surface all errors before attempting render.
274
+ */
275
+ declare function parseDgmo(content: string): {
276
+ diagnostics: DgmoError[];
277
+ chartType: string | null;
278
+ };
279
+
280
+ export { type ChartTypeId as C, type RenderCategory as R, type ChartTypeMeta as a, CHART_TYPE_DESCRIPTIONS as b, chartTypes as c, chartTypeParsers as d, getAllChartTypes as e, getAvailablePalettes as f, getPalette as g, getRenderCategory as h, isExtendedChartType as i, isValidHex as j, knownChartTypeIds as k, parseDgmoChartType as l, registerPalette as m, parseDgmo as p, resolvePaletteOrFallback as r };
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  mapContentAspect,
3
3
  mapExportDimensions
4
- } from "./chunk-JU2VMFYC.js";
5
- import "./chunk-37EHGTQ2.js";
4
+ } from "./chunk-X26BF4T2.js";
5
+ import "./chunk-R7S5542V.js";
6
6
  import "./chunk-4QV26TEG.js";
7
- import "./chunk-CVVICCSB.js";
7
+ import "./chunk-L65WI4HO.js";
8
8
  import "./chunk-A4GOY3PE.js";
9
- import "./chunk-ES66QH6J.js";
10
- import "./chunk-SCJ7CAJF.js";
11
- import "./chunk-4ASYQ347.js";
9
+ import "./chunk-FG24NXKN.js";
10
+ import "./chunk-3HOCNSPD.js";
11
+ import "./chunk-MTGGOCND.js";
12
12
  import "./chunk-MDI5FMWO.js";
13
13
  import "./chunk-P2PUWV3Y.js";
14
14
  import "./chunk-42IT4BG2.js";
@@ -19,4 +19,4 @@ export {
19
19
  mapContentAspect,
20
20
  mapExportDimensions
21
21
  };
22
- //# sourceMappingURL=dimensions-ES6O2T4H.js.map
22
+ //# sourceMappingURL=dimensions-RD3Y7FCF.js.map
@@ -1,22 +1,22 @@
1
1
  import {
2
2
  renderFlowchart,
3
3
  renderFlowchartForExport
4
- } from "./chunk-SMCUX42K.js";
4
+ } from "./chunk-4TM7MWU4.js";
5
5
  import "./chunk-PDKUANDZ.js";
6
- import "./chunk-LSFZDBAP.js";
6
+ import "./chunk-IKHV5IJB.js";
7
7
  import "./chunk-LP7EC4MI.js";
8
8
  import "./chunk-H52HJ26L.js";
9
9
  import "./chunk-6EK55ART.js";
10
- import "./chunk-VJARCVMH.js";
10
+ import "./chunk-MU3CJPJF.js";
11
11
  import "./chunk-5DH3KYFH.js";
12
12
  import "./chunk-NCT22MOD.js";
13
13
  import "./chunk-WGC42WJU.js";
14
- import "./chunk-3CIOJ5YJ.js";
14
+ import "./chunk-FJ57274M.js";
15
15
  import "./chunk-YYVTBZZC.js";
16
16
  import "./chunk-RU2HHHYA.js";
17
17
  import "./chunk-A4GOY3PE.js";
18
- import "./chunk-Z5ID35YP.js";
19
- import "./chunk-4ASYQ347.js";
18
+ import "./chunk-UTCPNJND.js";
19
+ import "./chunk-MTGGOCND.js";
20
20
  import "./chunk-CHOKOYSC.js";
21
21
  import "./chunk-7TF3QOOD.js";
22
22
  import "./chunk-NXMESY4J.js";
@@ -33,4 +33,4 @@ export {
33
33
  renderFlowchart,
34
34
  renderFlowchartForExport
35
35
  };
36
- //# sourceMappingURL=flowchart-renderer-EXMRHFTQ.js.map
36
+ //# sourceMappingURL=flowchart-renderer-6JKM2FA4.js.map
@@ -0,0 +1,210 @@
1
+ import { b as DiagnosticSpec, P as PaletteConfig, C as CompactViewState, D as DgmoError } from './tag-groups-NUA2F1I5.js';
2
+ export { c as DgmoSeverity, d as DiagnosticParams, E as EmitOptions, a as PaletteColors, e as emit, f as formatDgmoError } from './tag-groups-NUA2F1I5.js';
3
+ export { C as ChartTypeId, a as ChartTypeMeta, c as chartTypes, g as getPalette, r as resolvePaletteOrFallback, p as validate } from './dgmo-router-EAW7XiBE.js';
4
+ import { T as Theme } from './themes-Dem5xalq.js';
5
+ export { M as MapCompletionOptions, a as MapLocationMatch, b as MapPlaceCompletion, c as MapRegionCompletion, d as completeMapPlaces, e as completeMapRegions, p as palettes, s as searchMapLocations, t as themes } from './themes-Dem5xalq.js';
6
+ import { M as MapDataSource } from './d3-Bfhj-XBX.js';
7
+ export { G as Gazetteer, a as GazetteerEntry, b as MapData, R as RegionName, c as RegionNames } from './d3-Bfhj-XBX.js';
8
+
9
+ /**
10
+ * Make an SVG produced by `@diagrammo/dgmo`'s static `render()` suitable for
11
+ * responsive inline embedding in any host (Obsidian, remark/markdown, web
12
+ * pages):
13
+ *
14
+ * - dgmo renders diagrams inside a fixed export canvas (e.g.
15
+ * `viewBox="0 0 1200 800"`), with content often occupying only a fraction
16
+ * of it. We compute a tight content bounding box from element coordinates
17
+ * and set the root `viewBox` to bbox+padding, so the diagram's intrinsic
18
+ * aspect ratio matches its CONTENT — no dead space above/below or beside it.
19
+ * - Ensure the root `<svg>` has a `viewBox` so it scales responsively.
20
+ * - Strip fixed `width="N"` / `height="N"` so CSS (e.g. `width:100%;
21
+ * height:auto`, or an aspect-ratio derived from the tight viewBox) controls
22
+ * sizing.
23
+ * - The root background (the theme's opaque `palette.bg` — both the inline
24
+ * `background:` style and the full-canvas `<rect>` some renderers paint) is
25
+ * STRIPPED by default so the embed inherits the host page surface and blends
26
+ * into Obsidian / doc-site / arbitrary pages instead of showing a mismatched
27
+ * rectangle. Pass `{ background: 'opaque' }` to keep it — the embedder
28
+ * opt-out, and the automatic default for background-meaningful types like
29
+ * `map` (whose bg is the ocean) via `defaultEmbedBackground`. Standalone
30
+ * PNG/SVG export does NOT go through here and stays opaque.
31
+ *
32
+ * This is intentionally a string transform, not a DOM `getBBox()` step: dgmo
33
+ * can dual-render light/dark SVGs where one is hidden by color-mode CSS, and
34
+ * `getBBox()` returns 0 for the hidden copy. Parsing coordinates from the
35
+ * markup measures both copies reliably and works server-side (Node).
36
+ */
37
+ interface NormalizeSvgForEmbedOptions {
38
+ /**
39
+ * `transparent` (default) strips the theme's opaque root background so the
40
+ * embed inherits the host page surface. `opaque` preserves it — the embedder
41
+ * opt-out for diagrams that need their own solid backdrop. Callers that know
42
+ * the chart type should resolve this via `defaultEmbedBackground`.
43
+ */
44
+ background?: 'transparent' | 'opaque';
45
+ }
46
+ declare function normalizeSvgForEmbed(input: string, opts?: NormalizeSvgForEmbedOptions): string;
47
+ /**
48
+ * The embed background an embedder gets by default for a given chart type:
49
+ * `transparent` (blend into the host) for everything except
50
+ * background-meaningful types, which stay `opaque`.
51
+ */
52
+ declare function defaultEmbedBackground(chartType?: string): 'transparent' | 'opaque';
53
+ /**
54
+ * Parse the content bounding box of a normalized embed SVG, if one can be
55
+ * derived. Returns `null` when no usable coordinates are found (e.g. an empty
56
+ * diagram). Useful for hosts that want to set an explicit `aspect-ratio` from
57
+ * the tight viewBox.
58
+ */
59
+ declare function getEmbedSvgViewBox(svg: string): {
60
+ x: number;
61
+ y: number;
62
+ width: number;
63
+ height: number;
64
+ } | null;
65
+
66
+ interface MountD3Opts {
67
+ theme?: 'light' | 'dark' | 'transparent';
68
+ palette?: string;
69
+ /** Forwarded to the interaction adapter: source-line navigation on click. */
70
+ onNavigate?: (line: number) => void;
71
+ mutedColor?: string;
72
+ surface?: string;
73
+ text?: string;
74
+ }
75
+ interface MountedD3Chart {
76
+ /** Re-render with new content and/or theme/palette; re-attaches interactions. */
77
+ update: (content: string, opts?: Partial<MountD3Opts>) => Promise<void>;
78
+ /** Emphasize the chart element on the given source line (editor cursor sync);
79
+ * pass null to clear. */
80
+ highlight: (line: number | null) => void;
81
+ /** Tear down listeners + overlays and clear the container. */
82
+ destroy: () => void;
83
+ }
84
+ declare function mountD3DataChart(container: HTMLElement, content: string, opts?: MountD3Opts): MountedD3Chart;
85
+
86
+ interface DataChartInteractionOpts {
87
+ onNavigate?: (line: number) => void;
88
+ mutedColor?: string;
89
+ surface?: string;
90
+ text?: string;
91
+ }
92
+ interface DataChartController {
93
+ /** Remove all listeners + overlays. */
94
+ destroy: () => void;
95
+ /** Emphasize the chart element(s) on the given source line (editor cursor
96
+ * sync); pass null to clear. No-op while the pointer is actively hovering. */
97
+ highlight: (line: number | null) => void;
98
+ }
99
+ declare function attachDataChartInteractions(svg: SVGSVGElement, opts?: DataChartInteractionOpts): DataChartController;
100
+
101
+ /** All data-chart types the hand-built renderers currently cover. */
102
+ declare const D3_DATA_CHART_TYPES: Set<string>;
103
+ declare function supportsD3DataChart(type: string): boolean;
104
+
105
+ /**
106
+ * The full diagnostic catalog, sorted by code. Every coded diagnostic
107
+ * dgmo can emit — its severity, owning chart type, canonical message,
108
+ * fix hint, and a triggering example. This is the enumerable source of
109
+ * truth for the CLI `diagnostics` subcommand, the console error-review
110
+ * surface, MCP, and the language-spec catalog.
111
+ */
112
+ declare function listDiagnosticCodes(): DiagnosticSpec[];
113
+ /** Look up a single spec by its code, or `undefined` if not cataloged. */
114
+ declare function getDiagnosticSpec(code: string): DiagnosticSpec | undefined;
115
+
116
+ interface RenderOptions {
117
+ theme?: Theme;
118
+ /**
119
+ * A `PaletteConfig` (e.g. `palettes.catppuccin`) or a palette id string
120
+ * (e.g. `'catppuccin'`). Unknown ids fall back to the default palette.
121
+ */
122
+ palette?: PaletteConfig | string;
123
+ /**
124
+ * How to handle parse errors:
125
+ * 'svg' — render an inline error SVG (default)
126
+ * 'silent' — return empty svg + diagnostics; caller handles UI
127
+ * 'throw' — throw an Error with the diagnostics
128
+ */
129
+ onError?: 'svg' | 'silent' | 'throw';
130
+ /**
131
+ * Pre-applied interactive view state — collapsed sections/columns,
132
+ * active swimlane tag-group, etc. Used to render a specific view
133
+ * non-interactively (server-side render, share-link decode).
134
+ */
135
+ viewState?: CompactViewState;
136
+ /**
137
+ * Canvas to draw onto, in px. Defaults to the 1200x800 export sheet.
138
+ *
139
+ * Omit these and nothing changes. Pass them when the result is going into a
140
+ * box whose shape you already know — fitting the default sheet to a narrow
141
+ * column inherits its aspect, so a one-line meter arrives as tall as a poster.
142
+ */
143
+ width?: number;
144
+ height?: number;
145
+ /**
146
+ * Basemap assets for `map` charts — the data itself, or a loader returning
147
+ * it. `render()` reads nothing from the filesystem or the network on its own,
148
+ * so this is the only way a map obtains a basemap, and its presence here is
149
+ * what tells a caller whether a render can touch the environment.
150
+ *
151
+ * - Node / CLI / SSR: pass the `loadMapData` loader from
152
+ * `@diagrammo/dgmo/advanced`. It runs only when the content really is a
153
+ * map, so a non-map render never pays to read the assets.
154
+ * - Browser / Worker / Obsidian: pass your bundled `MapData`.
155
+ *
156
+ * Omit it and a map renders empty with an `E_MAP_DATA_NOT_SUPPLIED`
157
+ * diagnostic. Every other chart type ignores this option.
158
+ */
159
+ mapData?: MapDataSource;
160
+ }
161
+
162
+ interface RenderResult {
163
+ svg: string;
164
+ diagnostics: DgmoError[];
165
+ }
166
+ /**
167
+ * Render DGMO source to an SVG string.
168
+ *
169
+ * @example
170
+ * ```ts
171
+ * import { render, palettes, themes } from '@diagrammo/dgmo';
172
+ *
173
+ * const { svg } = await render(text, {
174
+ * palette: palettes.catppuccin,
175
+ * theme: themes.dark,
176
+ * });
177
+ * document.getElementById('chart').innerHTML = svg;
178
+ * ```
179
+ */
180
+ declare function render(text: string, options?: RenderOptions): Promise<RenderResult>;
181
+
182
+ interface EncodeDiagramUrlOptions {
183
+ baseUrl?: string;
184
+ palette?: PaletteConfig;
185
+ theme?: Theme;
186
+ filename?: string;
187
+ /**
188
+ * Initial view state to embed in the URL — re-applied when the link is
189
+ * decoded so recipients open the diagram in the same configuration.
190
+ */
191
+ viewState?: CompactViewState;
192
+ }
193
+ /**
194
+ * Encode DGMO text into a shareable URL. Returns null if the compressed
195
+ * payload exceeds the 8 KB URL limit.
196
+ */
197
+ declare function encodeDiagramUrl(text: string, options?: EncodeDiagramUrlOptions): string | null;
198
+ interface DecodedDiagramUrl {
199
+ text: string;
200
+ palette?: PaletteConfig;
201
+ theme?: Theme;
202
+ filename?: string;
203
+ }
204
+ /**
205
+ * Decode a share URL back into DGMO text plus optional palette/theme/filename.
206
+ * Returns null if the URL contains no valid DGMO payload.
207
+ */
208
+ declare function decodeDiagramUrl(url: string): DecodedDiagramUrl | null;
209
+
210
+ export { CompactViewState, D3_DATA_CHART_TYPES, type DataChartInteractionOpts, type DecodedDiagramUrl, DgmoError, DiagnosticSpec, type EncodeDiagramUrlOptions, MapDataSource, type MountD3Opts, type MountedD3Chart, type NormalizeSvgForEmbedOptions, PaletteConfig, type RenderOptions, type RenderResult, Theme, attachDataChartInteractions, decodeDiagramUrl, defaultEmbedBackground, encodeDiagramUrl, getDiagnosticSpec, getEmbedSvgViewBox, listDiagnosticCodes, mountD3DataChart, normalizeSvgForEmbed, render, supportsD3DataChart };
package/dist/index.js CHANGED
@@ -11,10 +11,10 @@ import {
11
11
  } from "./chunk-SQAG3UXH.js";
12
12
  import {
13
13
  render
14
- } from "./chunk-VOJOARA6.js";
14
+ } from "./chunk-3OT63FS4.js";
15
15
  import {
16
16
  renderErrorCard
17
- } from "./chunk-S5RWWISJ.js";
17
+ } from "./chunk-7L53J53J.js";
18
18
  import {
19
19
  MAP_DIAGNOSTICS
20
20
  } from "./chunk-EOYPX6SF.js";
@@ -22,27 +22,27 @@ import {
22
22
  D3_DATA_CHART_TYPES,
23
23
  renderDataChartD3,
24
24
  supportsD3DataChart
25
- } from "./chunk-7T3A2UK3.js";
26
- import "./chunk-CVVICCSB.js";
27
- import "./chunk-OMTBYLKN.js";
25
+ } from "./chunk-5T7K6QND.js";
26
+ import "./chunk-L65WI4HO.js";
27
+ import "./chunk-TPKNA2U5.js";
28
28
  import "./chunk-YRYKTYMQ.js";
29
29
  import "./chunk-YYVTBZZC.js";
30
- import "./chunk-67D4MN2H.js";
31
- import "./chunk-6VJCURWU.js";
30
+ import "./chunk-LK6LTSLH.js";
31
+ import "./chunk-J2EXBAPZ.js";
32
32
  import "./chunk-RU2HHHYA.js";
33
33
  import "./chunk-A4GOY3PE.js";
34
- import "./chunk-RBAW7VUG.js";
35
- import "./chunk-ES66QH6J.js";
36
- import "./chunk-Z5ID35YP.js";
37
- import "./chunk-SCJ7CAJF.js";
38
- import "./chunk-4ASYQ347.js";
34
+ import "./chunk-2EPV7CLY.js";
35
+ import "./chunk-FG24NXKN.js";
36
+ import "./chunk-UTCPNJND.js";
37
+ import "./chunk-3HOCNSPD.js";
38
+ import "./chunk-MTGGOCND.js";
39
39
  import {
40
40
  decodeDiagramUrl,
41
41
  encodeDiagramUrl
42
42
  } from "./chunk-U7VO6JAA.js";
43
43
  import {
44
44
  parseDgmo
45
- } from "./chunk-AA4M6F2P.js";
45
+ } from "./chunk-BBY57XAA.js";
46
46
  import "./chunk-2CMM36O7.js";
47
47
  import "./chunk-A2RUBBVT.js";
48
48
  import "./chunk-JWJBWNQL.js";
@@ -84,7 +84,7 @@ import {
84
84
  PERT_DIAGNOSTICS
85
85
  } from "./chunk-VXBEG3IB.js";
86
86
  import "./chunk-3TYUXC7D.js";
87
- import "./chunk-6BVIZW5N.js";
87
+ import "./chunk-FLFBY5GN.js";
88
88
  import {
89
89
  EVENT_LINE_DIAGNOSTICS
90
90
  } from "./chunk-QMYJO4EL.js";
@@ -107,7 +107,7 @@ import {
107
107
  import "./chunk-SR7NGZNM.js";
108
108
  import "./chunk-NXMESY4J.js";
109
109
  import "./chunk-EK4QX7NQ.js";
110
- import "./chunk-NKRVFQGO.js";
110
+ import "./chunk-BDI25HWH.js";
111
111
  import "./chunk-QE4GTFZS.js";
112
112
  import "./chunk-7NK42OIB.js";
113
113
  import {
@@ -2,12 +2,12 @@ import {
2
2
  fixEdgeWaypoints,
3
3
  layoutInfra,
4
4
  separateGroups
5
- } from "./chunk-43E26CDA.js";
6
- import "./chunk-4ASYQ347.js";
5
+ } from "./chunk-VS2M72PF.js";
6
+ import "./chunk-MTGGOCND.js";
7
7
  import "./chunk-5WRI5ZAA.js";
8
8
  export {
9
9
  fixEdgeWaypoints,
10
10
  layoutInfra,
11
11
  separateGroups
12
12
  };
13
- //# sourceMappingURL=layout-HBWT2G23.js.map
13
+ //# sourceMappingURL=layout-4LNMXLVK.js.map
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  layoutMindmap
3
- } from "./chunk-U42ZEK7L.js";
3
+ } from "./chunk-V4BYBIBU.js";
4
4
  import "./chunk-YYVTBZZC.js";
5
- import "./chunk-4ASYQ347.js";
5
+ import "./chunk-MTGGOCND.js";
6
6
  import "./chunk-IYULMRBE.js";
7
7
  import "./chunk-MDI5FMWO.js";
8
8
  import "./chunk-P2PUWV3Y.js";
@@ -12,4 +12,4 @@ import "./chunk-5WRI5ZAA.js";
12
12
  export {
13
13
  layoutMindmap
14
14
  };
15
- //# sourceMappingURL=layout-UU4VJTOP.js.map
15
+ //# sourceMappingURL=layout-62ERBWCM.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  focusFamily,
3
3
  layoutFamily
4
- } from "./chunk-DJCZWQ2A.js";
4
+ } from "./chunk-RTTZIX34.js";
5
5
  import "./chunk-IVKC4GID.js";
6
- import "./chunk-3CIOJ5YJ.js";
7
- import "./chunk-4ASYQ347.js";
6
+ import "./chunk-FJ57274M.js";
7
+ import "./chunk-MTGGOCND.js";
8
8
  import "./chunk-QQJUTGQH.js";
9
9
  import "./chunk-5WRI5ZAA.js";
10
10
  export {
11
11
  focusFamily,
12
12
  layoutFamily
13
13
  };
14
- //# sourceMappingURL=layout-N6X46MWG.js.map
14
+ //# sourceMappingURL=layout-6SKHNQYO.js.map