@meltemi/diagrams-render 0.0.0-stage → 1.9.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.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Architecture Studio contributors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,3 +1,55 @@
1
- # Temporary Holding Version
1
+ # @meltemi/diagrams-render
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ Renders a vector scene to portable SVG: one file with its fonts embedded, outlined or named,
4
+ accessible titles and descriptions, links, and nothing that needs a network.
5
+
6
+ It is part of [Meltemi Diagrams](https://github.com/askenaz-dev/meltemi-diagrams#readme), diagrams as code with a canvas, motion and
7
+ exports. Every package of the product has the same version.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ npm install @meltemi/diagrams-render
13
+ ```
14
+
15
+ Node 22.12.0 or later. The package is an ES module with type declarations.
16
+
17
+ ## Use
18
+
19
+ ```ts
20
+ import { createNodeFontLibrary } from "@meltemi/diagrams-fonts/node";
21
+ import { layoutDiagram } from "@meltemi/diagrams-layout";
22
+ import { createElkEngine } from "@meltemi/diagrams-layout-elk";
23
+ import { compile } from "@meltemi/diagrams-model";
24
+ import { renderSvg } from "@meltemi/diagrams-render";
25
+
26
+ const text = `language "0.2"
27
+
28
+ diagram shop: flow {
29
+ web["Web shop"]
30
+ api["Orders API"]
31
+ db[("Orders")]
32
+ web -> api: "HTTPS" as call
33
+ api -> db: "SQL" as store
34
+ }
35
+ `;
36
+
37
+ const fonts = createNodeFontLibrary();
38
+ const compilation = compile(text);
39
+ const { scene } = layoutDiagram(compilation, compilation.document.diagrams[0]!, {
40
+ measurer: fonts,
41
+ engine: createElkEngine(),
42
+ });
43
+ const svg = renderSvg(scene!, { fonts: "embedded", provider: fonts });
44
+ console.log(svg.includes("@font-face")); // true: the picture carries its fonts
45
+ ```
46
+
47
+ ## Documentation
48
+
49
+ - [SVG export](https://github.com/askenaz-dev/meltemi-diagrams/blob/main/docs/language/svg-export.md)
50
+ - [Fonts](https://github.com/askenaz-dev/meltemi-diagrams/blob/main/docs/language/fonts.md)
51
+ - [All documentation](https://github.com/askenaz-dev/meltemi-diagrams/blob/main/docs/README.md)
52
+
53
+ ## Licence
54
+
55
+ MIT. Third-party components and their licences are listed in [THIRD_PARTY_LICENSES.md](https://github.com/askenaz-dev/meltemi-diagrams/blob/main/THIRD_PARTY_LICENSES.md).
@@ -0,0 +1,3 @@
1
+ export declare const PACKAGE_NAME = "@meltemi/diagrams-render";
2
+ export { embeddableFaces, escapeXml, fontFaceRule, fontFaceRules, renderSvg, type EmbeddableFace, type FontPolicy, type FontProvider, type RenderOptions, } from "./svg.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,6BAA6B,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,UAAU,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export const PACKAGE_NAME = "@meltemi/diagrams-render";
2
+ export { embeddableFaces, escapeXml, fontFaceRule, fontFaceRules, renderSvg, } from "./svg.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,0BAA0B,CAAC;AAEvD,OAAO,EACL,eAAe,EACf,SAAS,EACT,YAAY,EACZ,aAAa,EACb,SAAS,GAKV,MAAM,UAAU,CAAC"}
package/dist/svg.d.ts ADDED
@@ -0,0 +1,48 @@
1
+ import type { Scene } from "@meltemi/diagrams-layout";
2
+ /** How text reaches the viewer: font names, embedded fonts, or glyph outlines. */
3
+ export type FontPolicy = "system" | "embedded" | "outlined";
4
+ /** A font file to embed, limited by `unicodeRange` to the characters used (empty: whole font). */
5
+ export interface EmbeddableFace {
6
+ readonly family: string;
7
+ readonly weight: number;
8
+ readonly subset: string;
9
+ readonly format: "woff2" | "woff" | "truetype" | "opentype";
10
+ readonly data: Uint8Array;
11
+ readonly unicodeRange: string;
12
+ }
13
+ /** Fonts for the `embedded` and `outlined` policies, such as `@meltemi/diagrams-fonts`. */
14
+ export interface FontProvider {
15
+ /** The provider's family for a CSS font stack, or undefined when it has none. */
16
+ family(fontStack: string): string | undefined;
17
+ faces(family: string, weight: number, text: string): readonly EmbeddableFace[];
18
+ /** Text as a path in pixels, baseline at y = 0, starting at x = 0. */
19
+ outline(text: string, family: string, weight: number, size: number): {
20
+ d: string;
21
+ width: number;
22
+ };
23
+ /** False when a family's licence forbids embedding or outlining; such text stays `<text>`. */
24
+ embeddable?(family: string): boolean;
25
+ }
26
+ export interface RenderOptions {
27
+ /** Defaults to `system`. */
28
+ readonly fonts?: FontPolicy;
29
+ readonly provider?: FontProvider;
30
+ }
31
+ /** Escapes text for element content and attribute values. */
32
+ export declare function escapeXml(text: string): string;
33
+ /**
34
+ * Serialises a scene to standalone SVG. Portable by construction: inline presentation attributes,
35
+ * linear gradients and patterns in `<defs>` only when the scene declares them, no markers, no
36
+ * `dominant-baseline`, and no CSS except the `@font-face` rules of the `embedded` font policy.
37
+ */
38
+ export declare function renderSvg(scene: Scene, options?: RenderOptions): string;
39
+ /**
40
+ * The font faces the text of `scenes` needs, each subset once, ordered by family, weight and subset;
41
+ * a face's `unicodeRange` covers the characters of every scene.
42
+ */
43
+ export declare function embeddableFaces(scenes: readonly Scene[], provider: FontProvider): EmbeddableFace[];
44
+ /** The `@font-face` rule of a face, with its file inline. */
45
+ export declare function fontFaceRule(face: EmbeddableFace): string;
46
+ /** `@font-face` rules for the faces the scene's text needs, ordered by family, weight, subset. */
47
+ export declare function fontFaceRules(scene: Scene, provider: FontProvider): string[];
48
+ //# sourceMappingURL=svg.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EAKN,MAAM,0BAA0B,CAAC;AAIlC,kFAAkF;AAClF,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAE5D,kGAAkG;AAClG,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5D,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AASD,2FAA2F;AAC3F,MAAM,WAAW,YAAY;IAC3B,iFAAiF;IACjF,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAC9C,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,cAAc,EAAE,CAAC;IAC/E,sEAAsE;IACtE,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAClG,8FAA8F;IAC9F,UAAU,CAAC,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,QAAQ,CAAC,EAAE,YAAY,CAAC;CAClC;AAOD,6DAA6D;AAC7D,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,aAAkB,GAAG,MAAM,CAiD3E;AA6FD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,SAAS,KAAK,EAAE,EACxB,QAAQ,EAAE,YAAY,GACrB,cAAc,EAAE,CAqBlB;AAED,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAGzD;AAED,kGAAkG;AAClG,wBAAgB,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,EAAE,CAE5E"}
package/dist/svg.js ADDED
@@ -0,0 +1,255 @@
1
+ const DASH = "5 4";
2
+ const FONT_MIME = {
3
+ woff2: "font/woff2",
4
+ woff: "font/woff",
5
+ truetype: "font/ttf",
6
+ opentype: "font/otf",
7
+ };
8
+ function n(value) {
9
+ const rounded = Math.round(value * 100) / 100;
10
+ return String(Object.is(rounded, -0) ? 0 : rounded);
11
+ }
12
+ /** Escapes text for element content and attribute values. */
13
+ export function escapeXml(text) {
14
+ return text
15
+ .replace(/&/g, "&amp;")
16
+ .replace(/</g, "&lt;")
17
+ .replace(/>/g, "&gt;")
18
+ .replace(/"/g, "&quot;");
19
+ }
20
+ /**
21
+ * Serialises a scene to standalone SVG. Portable by construction: inline presentation attributes,
22
+ * linear gradients and patterns in `<defs>` only when the scene declares them, no markers, no
23
+ * `dominant-baseline`, and no CSS except the `@font-face` rules of the `embedded` font policy.
24
+ */
25
+ export function renderSvg(scene, options = {}) {
26
+ const policy = options.fonts ?? "system";
27
+ if (policy !== "system" && !options.provider) {
28
+ throw new Error(`The "${policy}" font policy needs a font provider.`);
29
+ }
30
+ const fonts = policy === "system" ? null : { policy, provider: options.provider };
31
+ const out = [];
32
+ const w = n(scene.width);
33
+ const h = n(scene.height);
34
+ const box = scene.viewBox
35
+ ? `${n(scene.viewBox.x)} ${n(scene.viewBox.y)} ${n(scene.viewBox.width)} ${n(scene.viewBox.height)}`
36
+ : `0 0 ${w} ${h}`;
37
+ out.push(`<svg xmlns="http://www.w3.org/2000/svg" width="${w}" height="${h}" viewBox="${box}" font-family="${escapeXml(scene.fonts.body)}">`);
38
+ if (scene.title !== null)
39
+ out.push(` <title>${escapeXml(scene.title)}</title>`);
40
+ if (scene.description !== null)
41
+ out.push(` <desc>${escapeXml(scene.description)}</desc>`);
42
+ if (scene.styleSheet) {
43
+ // The animated profile: CSS only, no scripts; `]]>` cannot occur in the generated rules.
44
+ out.push(" <style><![CDATA[");
45
+ for (const line of scene.styleSheet.split("\n"))
46
+ out.push(line === "" ? "" : ` ${line}`);
47
+ out.push(" ]]></style>");
48
+ }
49
+ const fontFaces = fonts?.policy === "embedded" ? fontFaceRules(scene, fonts.provider) : [];
50
+ if (scene.gradients.length > 0 || scene.patterns.length > 0 || fontFaces.length > 0) {
51
+ out.push(" <defs>");
52
+ if (fontFaces.length > 0) {
53
+ out.push(" <style>");
54
+ for (const rule of fontFaces)
55
+ out.push(` ${rule}`);
56
+ out.push(" </style>");
57
+ }
58
+ for (const gradient of scene.gradients)
59
+ out.push(...gradientDef(gradient));
60
+ for (const pattern of scene.patterns)
61
+ out.push(...patternDef(pattern));
62
+ out.push(" </defs>");
63
+ }
64
+ out.push(` <rect x="0" y="0" width="${w}" height="${h}" fill="${escapeXml(scene.background)}"/>`);
65
+ const outline = fonts?.policy === "outlined" ? fonts.provider : null;
66
+ // A picture that links somewhere is one link around everything drawn.
67
+ if (scene.link) {
68
+ out.push(` <a href="${escapeXml(scene.link)}">`);
69
+ for (const item of scene.items)
70
+ emit(item, out, " ", scene, outline);
71
+ out.push(" </a>");
72
+ }
73
+ else {
74
+ for (const item of scene.items)
75
+ emit(item, out, " ", scene, outline);
76
+ }
77
+ out.push("</svg>");
78
+ return `${out.join("\n")}\n`;
79
+ }
80
+ /**
81
+ * The dash of a stroke: an explicit pattern and offset, the default dash, round dots, or none.
82
+ * Dots are dashes of length 0 with round caps, spaced by the line's width; `roundCaps` says the
83
+ * element already writes them.
84
+ */
85
+ function dashOf(item, roundCaps = false) {
86
+ if (item.dash) {
87
+ return ` stroke-dasharray="${item.dash.array.map(n).join(" ")}" stroke-dashoffset="${n(item.dash.offset)}"`;
88
+ }
89
+ if (item.dashed === "dotted") {
90
+ const caps = roundCaps ? "" : ' stroke-linecap="round"';
91
+ return ` stroke-dasharray="0 ${n(1.5 * item.strokeWidth + 3)}"${caps}`;
92
+ }
93
+ return item.dashed ? ` stroke-dasharray="${DASH}"` : "";
94
+ }
95
+ function opacityOf(opacity) {
96
+ return opacity !== undefined ? ` opacity="${n(opacity)}"` : "";
97
+ }
98
+ function classOf(item) {
99
+ return item.className ? ` class="${escapeXml(item.className)}"` : "";
100
+ }
101
+ /** A coordinate written as a number or kept as written (`50%`). */
102
+ const coordinate = (value) => typeof value === "number" ? n(value) : escapeXml(value);
103
+ /** A `<linearGradient>` or `<radialGradient>` with its units, transform, spread and stops. */
104
+ function gradientDef(gradient) {
105
+ const element = gradient.kind === "linear" ? "linearGradient" : "radialGradient";
106
+ const attributes = [`id="${escapeXml(gradient.id)}"`];
107
+ if (gradient.units)
108
+ attributes.push(`gradientUnits="${gradient.units}"`);
109
+ const keys = gradient.kind === "linear"
110
+ ? ["x1", "y1", "x2", "y2"]
111
+ : ["cx", "cy", "r", "fx", "fy"];
112
+ for (const key of keys) {
113
+ const value = gradient[key];
114
+ if (value !== undefined)
115
+ attributes.push(`${key}="${coordinate(value)}"`);
116
+ }
117
+ if (gradient.transform)
118
+ attributes.push(`gradientTransform="${escapeXml(gradient.transform)}"`);
119
+ if (gradient.spread)
120
+ attributes.push(`spreadMethod="${gradient.spread}"`);
121
+ const lines = [` <${element} ${attributes.join(" ")}>`];
122
+ for (const stop of gradient.stops) {
123
+ const opacity = stop.opacity !== undefined ? ` stop-opacity="${n(stop.opacity)}"` : "";
124
+ lines.push(` <stop offset="${n(stop.offset)}" stop-color="${escapeXml(stop.color)}"${opacity}/>`);
125
+ }
126
+ lines.push(` </${element}>`);
127
+ return lines;
128
+ }
129
+ /** Opacity of pattern strokes and dots, so the fill below stays readable. */
130
+ const PATTERN_OPACITY = 0.35;
131
+ /** A `<pattern>` tile: diagonal lines (`hatch`), a dot grid (`dots`) or a diagonal grid (`cross`). */
132
+ function patternDef(pattern) {
133
+ const size = n(pattern.size);
134
+ const color = escapeXml(pattern.color);
135
+ const rotate = pattern.kind === "dots" ? "" : ' patternTransform="rotate(45)"';
136
+ const open = ` <pattern id="${escapeXml(pattern.id)}" patternUnits="userSpaceOnUse" width="${size}" height="${size}"${rotate}>`;
137
+ let shape;
138
+ if (pattern.kind === "dots") {
139
+ const c = n(pattern.size / 2);
140
+ shape = ` <circle cx="${c}" cy="${c}" r="${n(pattern.size * 0.15)}" fill="${color}" fill-opacity="${PATTERN_OPACITY}"/>`;
141
+ }
142
+ else {
143
+ const d = pattern.kind === "hatch" ? `M0 0V${size}` : `M0 0V${size}M0 0H${size}`;
144
+ shape = ` <path d="${d}" stroke="${color}" stroke-width="1.5" stroke-opacity="${PATTERN_OPACITY}" fill="none"/>`;
145
+ }
146
+ return [open, shape, " </pattern>"];
147
+ }
148
+ function stackOf(item, scene) {
149
+ return item.font === "mono" ? scene.fonts.mono : scene.fonts.body;
150
+ }
151
+ function textItems(items) {
152
+ return items.flatMap((item) => item.kind === "text" ? [item] : item.kind === "group" ? textItems(item.items) : []);
153
+ }
154
+ /**
155
+ * The font faces the text of `scenes` needs, each subset once, ordered by family, weight and subset;
156
+ * a face's `unicodeRange` covers the characters of every scene.
157
+ */
158
+ export function embeddableFaces(scenes, provider) {
159
+ const texts = new Map();
160
+ for (const scene of scenes) {
161
+ for (const item of textItems(scene.items)) {
162
+ const family = provider.family(stackOf(item, scene));
163
+ if (!family)
164
+ continue;
165
+ const key = `${family}|${item.weight}`;
166
+ const entry = texts.get(key) ?? { family, weight: item.weight, text: "" };
167
+ entry.text += item.text;
168
+ texts.set(key, entry);
169
+ }
170
+ }
171
+ const faces = [...texts.values()].flatMap((entry) => provider.faces(entry.family, entry.weight, entry.text));
172
+ return faces.sort((a, b) => (a.family < b.family ? -1 : a.family > b.family ? 1 : 0) ||
173
+ a.weight - b.weight ||
174
+ (a.subset < b.subset ? -1 : a.subset > b.subset ? 1 : 0));
175
+ }
176
+ /** The `@font-face` rule of a face, with its file inline. */
177
+ export function fontFaceRule(face) {
178
+ const range = face.unicodeRange === "" ? "" : `;unicode-range:${face.unicodeRange}`;
179
+ return `@font-face{font-family:"${face.family}";font-weight:${face.weight};src:url(data:${FONT_MIME[face.format]};base64,${base64(face.data)}) format("${face.format}")${range}}`;
180
+ }
181
+ /** `@font-face` rules for the faces the scene's text needs, ordered by family, weight, subset. */
182
+ export function fontFaceRules(scene, provider) {
183
+ return embeddableFaces([scene], provider).map(fontFaceRule);
184
+ }
185
+ /** Base64 without `Buffer`, so the renderer runs in browsers too. */
186
+ function base64(bytes) {
187
+ let binary = "";
188
+ const chunk = 0x8000;
189
+ for (let i = 0; i < bytes.length; i += chunk) {
190
+ binary += String.fromCharCode(...bytes.subarray(i, i + chunk));
191
+ }
192
+ return btoa(binary);
193
+ }
194
+ function emit(item, out, indent, scene, outline) {
195
+ switch (item.kind) {
196
+ case "group": {
197
+ const transform = item.transform ? ` transform="${escapeXml(item.transform)}"` : "";
198
+ const layer = item.layer ? ` data-layer="${escapeXml(item.layer)}"` : "";
199
+ out.push(`${indent}<g data-id="${escapeXml(item.id)}" data-role="${item.role}"${layer}${transform}${opacityOf(item.opacity)}${classOf(item)}>`);
200
+ if (item.href) {
201
+ // The element's drawing is a link; its group keeps its identity for tools.
202
+ out.push(`${indent} <a href="${escapeXml(item.href)}">`);
203
+ for (const child of item.items)
204
+ emit(child, out, `${indent} `, scene, outline);
205
+ out.push(`${indent} </a>`);
206
+ }
207
+ else {
208
+ for (const child of item.items)
209
+ emit(child, out, `${indent} `, scene, outline);
210
+ }
211
+ out.push(`${indent}</g>`);
212
+ return;
213
+ }
214
+ case "rect":
215
+ out.push(`${indent}<rect x="${n(item.x)}" y="${n(item.y)}" width="${n(item.width)}" height="${n(item.height)}" rx="${n(item.radius)}" fill="${escapeXml(item.fill)}" stroke="${escapeXml(item.stroke)}" stroke-width="${n(item.strokeWidth)}"${dashOf(item)}${opacityOf(item.opacity)}${classOf(item)}/>`);
216
+ return;
217
+ case "path": {
218
+ const rounded = item.rounded ? ' stroke-linecap="round" stroke-linejoin="round"' : "";
219
+ const extra = [
220
+ item.transform ? ` transform="${escapeXml(item.transform)}"` : "",
221
+ item.opacity !== undefined ? ` opacity="${n(item.opacity)}"` : "",
222
+ item.fillOpacity !== undefined ? ` fill-opacity="${n(item.fillOpacity)}"` : "",
223
+ item.strokeOpacity !== undefined ? ` stroke-opacity="${n(item.strokeOpacity)}"` : "",
224
+ item.fillRule === "evenodd" ? ' fill-rule="evenodd"' : "",
225
+ ].join("");
226
+ out.push(`${indent}<path d="${escapeXml(item.d)}"${extra} fill="${escapeXml(item.fill)}" stroke="${escapeXml(item.stroke)}" stroke-width="${n(item.strokeWidth)}"${rounded}${dashOf(item, !!item.rounded)}${classOf(item)}/>`);
227
+ return;
228
+ }
229
+ case "image": {
230
+ const open = `${indent}<image x="${n(item.x)}" y="${n(item.y)}" width="${n(item.width)}" height="${n(item.height)}" href="${escapeXml(item.href)}" preserveAspectRatio="xMidYMid meet"`;
231
+ out.push(item.title === null
232
+ ? `${open}/>`
233
+ : `${open}><title>${escapeXml(item.title)}</title></image>`);
234
+ return;
235
+ }
236
+ case "polyline":
237
+ out.push(`${indent}<polyline points="${item.points.map((p) => `${n(p.x)},${n(p.y)}`).join(" ")}" fill="none" stroke="${escapeXml(item.stroke)}" stroke-width="${n(item.strokeWidth)}" stroke-linejoin="round" stroke-linecap="round"${dashOf(item, true)}${opacityOf(item.opacity)}${classOf(item)}/>`);
238
+ return;
239
+ case "text": {
240
+ const family = outline?.family(stackOf(item, scene));
241
+ if (outline && family && (outline.embeddable?.(family) ?? true)) {
242
+ const shape = outline.outline(item.text, family, item.weight, item.size);
243
+ if (shape.d === "")
244
+ return;
245
+ const shift = item.anchor === "start" ? 0 : item.anchor === "middle" ? shape.width / 2 : shape.width;
246
+ out.push(`${indent}<path transform="translate(${n(item.x - shift)} ${n(item.baseline)})" d="${shape.d}" fill="${escapeXml(item.fill)}" aria-label="${escapeXml(item.text)}"/>`);
247
+ return;
248
+ }
249
+ const familyAttribute = item.font === "mono" ? ` font-family="${escapeXml(scene.fonts.mono)}"` : "";
250
+ out.push(`${indent}<text x="${n(item.x)}" y="${n(item.baseline)}" text-anchor="${item.anchor}" font-size="${n(item.size)}" font-weight="${item.weight}"${familyAttribute} fill="${escapeXml(item.fill)}">${escapeXml(item.text)}</text>`);
251
+ return;
252
+ }
253
+ }
254
+ }
255
+ //# sourceMappingURL=svg.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"svg.js","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,45 @@
1
1
  {
2
2
  "name": "@meltemi/diagrams-render",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
3
+ "version": "1.9.0",
4
+ "description": "Renders a vector scene to portable SVG.",
5
+ "license": "MIT",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/askenaz-dev/meltemi-diagrams.git",
9
+ "directory": "packages/render"
10
+ },
11
+ "homepage": "https://github.com/askenaz-dev/meltemi-diagrams/tree/main/packages/render#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/askenaz-dev/meltemi-diagrams/issues"
14
+ },
15
+ "engines": {
16
+ "node": ">=22.12.0"
17
+ },
18
+ "type": "module",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "default": "./dist/index.js"
23
+ }
24
+ },
25
+ "files": [
26
+ "dist"
27
+ ],
28
+ "dependencies": {
29
+ "@meltemi/diagrams-language": "1.9.0",
30
+ "@meltemi/diagrams-model": "1.9.0",
31
+ "@meltemi/diagrams-layout": "1.9.0"
32
+ },
33
+ "devDependencies": {
34
+ "@meltemi/diagrams-assets": "1.9.0",
35
+ "@meltemi/diagrams-layout-elk": "1.9.0",
36
+ "@meltemi/diagrams-fonts": "1.9.0"
37
+ },
38
+ "publishConfig": {
39
+ "access": "public"
40
+ },
41
+ "scripts": {
42
+ "build": "tsc -p tsconfig.build.json",
43
+ "typecheck": "tsc -p tsconfig.json"
44
+ }
6
45
  }