@danielsimonjr/mathts-plot 0.4.3 → 0.4.4

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/dist/index.js CHANGED
@@ -136,30 +136,101 @@ function fmt(n) {
136
136
  return String(Math.round(n * 1e6) / 1e6);
137
137
  }
138
138
  var r2 = (n) => Math.round(n * 100) / 100;
139
+ var ATTR_ENTITIES = {
140
+ "&": "&",
141
+ "<": "&lt;",
142
+ ">": "&gt;",
143
+ '"': "&quot;",
144
+ "'": "&#39;"
145
+ };
146
+ function escAttr(v) {
147
+ return String(v).replace(/[&<>"']/g, (c) => ATTR_ENTITIES[c]);
148
+ }
149
+ function el(tag, attrs, body) {
150
+ let s = `<${tag}`;
151
+ for (const [name, value] of attrs) if (value !== void 0) s += ` ${name}="${escAttr(value)}"`;
152
+ return body === void 0 ? `${s}/>` : `${s}>${body}</${tag}>`;
153
+ }
154
+ var opacityAttr = (opacity) => opacity !== void 0 && opacity < 1 ? Math.round(opacity * 1e3) / 1e3 : void 0;
155
+ var points = (pts) => pts.map(([x, y]) => `${r2(x)},${r2(y)}`).join(" ");
139
156
  function svgDoc(width, height, body, bg) {
140
- return `<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 ${width} ${height}" width="100%" role="img"><rect x="0" y="0" width="${width}" height="${height}" fill="${bg}"/>${body}</svg>`;
157
+ return el(
158
+ "svg",
159
+ [
160
+ ["xmlns", "http://www.w3.org/2000/svg"],
161
+ ["viewBox", `0 0 ${width} ${height}`],
162
+ ["width", "100%"],
163
+ ["role", "img"]
164
+ ],
165
+ el("rect", [
166
+ ["x", 0],
167
+ ["y", 0],
168
+ ["width", width],
169
+ ["height", height],
170
+ ["fill", bg]
171
+ ]) + body
172
+ );
141
173
  }
142
174
  function line(x1, y1, x2, y2, stroke, w = 1, opacity) {
143
- const op = opacity !== void 0 && opacity < 1 ? ` stroke-opacity="${Math.round(opacity * 1e3) / 1e3}"` : "";
144
- return `<line x1="${r2(x1)}" y1="${r2(y1)}" x2="${r2(x2)}" y2="${r2(y2)}" stroke="${stroke}" stroke-width="${w}"${op}/>`;
175
+ return el("line", [
176
+ ["x1", r2(x1)],
177
+ ["y1", r2(y1)],
178
+ ["x2", r2(x2)],
179
+ ["y2", r2(y2)],
180
+ ["stroke", stroke],
181
+ ["stroke-width", w],
182
+ ["stroke-opacity", opacityAttr(opacity)]
183
+ ]);
145
184
  }
146
185
  function circle(cx, cy, r, fill, opacity) {
147
- const op = opacity !== void 0 && opacity < 1 ? ` fill-opacity="${Math.round(opacity * 1e3) / 1e3}"` : "";
148
- return `<circle cx="${r2(cx)}" cy="${r2(cy)}" r="${r}" fill="${fill}"${op}/>`;
186
+ return el("circle", [
187
+ ["cx", r2(cx)],
188
+ ["cy", r2(cy)],
189
+ ["r", r],
190
+ ["fill", fill],
191
+ ["fill-opacity", opacityAttr(opacity)]
192
+ ]);
149
193
  }
150
194
  function rect(x, y, w, h, fill) {
151
- return `<rect x="${r2(x)}" y="${r2(y)}" width="${r2(w)}" height="${r2(h)}" fill="${fill}"/>`;
195
+ return el("rect", [
196
+ ["x", r2(x)],
197
+ ["y", r2(y)],
198
+ ["width", r2(w)],
199
+ ["height", r2(h)],
200
+ ["fill", fill]
201
+ ]);
152
202
  }
153
203
  function polyline(pts, stroke, w = 2) {
154
- const p = pts.map(([x, y]) => `${r2(x)},${r2(y)}`).join(" ");
155
- return `<polyline points="${p}" fill="none" stroke="${stroke}" stroke-width="${w}"/>`;
204
+ return el("polyline", [
205
+ ["points", points(pts)],
206
+ ["fill", "none"],
207
+ ["stroke", stroke],
208
+ ["stroke-width", w]
209
+ ]);
156
210
  }
157
211
  function polygon(pts, fill, stroke = "none") {
158
- const p = pts.map(([x, y]) => `${r2(x)},${r2(y)}`).join(" ");
159
- return `<polygon points="${p}" fill="${fill}" stroke="${stroke}"/>`;
212
+ return el("polygon", [
213
+ ["points", points(pts)],
214
+ ["fill", fill],
215
+ ["stroke", stroke]
216
+ ]);
160
217
  }
161
- function text(x, y, s, fill, anchor = "start", size = 12) {
162
- return `<text x="${r2(x)}" y="${r2(y)}" text-anchor="${anchor}" font-family="system-ui,sans-serif" font-size="${size}" fill="${fill}">${esc(s)}</text>`;
218
+ function text(x, y, s, fill, anchor = "start", size = 12, transform) {
219
+ const pos = transform === void 0 ? [
220
+ ["x", r2(x)],
221
+ ["y", r2(y)]
222
+ ] : [["transform", transform]];
223
+ return el(
224
+ "text",
225
+ [
226
+ ...pos,
227
+ ["text-anchor", anchor],
228
+ ["font-family", "system-ui,sans-serif"],
229
+ ["font-size", size],
230
+ ["fill", fill]
231
+ ],
232
+ esc(s)
233
+ );
163
234
  }
164
235
  function primSVG(p) {
165
236
  switch (p.k) {
@@ -174,7 +245,15 @@ function primSVG(p) {
174
245
  case "polygon":
175
246
  return polygon(p.pts, p.fill, p.stroke);
176
247
  case "text":
177
- return p.rotate !== void 0 ? `<text transform="translate(${p.x},${p.y}) rotate(${p.rotate})" text-anchor="${p.anchor}" font-family="system-ui,sans-serif" font-size="${p.size}" fill="${p.fill}">${esc(p.s)}</text>` : text(p.x, p.y, p.s, p.fill, p.anchor, p.size);
248
+ return p.rotate !== void 0 ? text(
249
+ p.x,
250
+ p.y,
251
+ p.s,
252
+ p.fill,
253
+ p.anchor,
254
+ p.size,
255
+ `translate(${p.x},${p.y}) rotate(${p.rotate})`
256
+ ) : text(p.x, p.y, p.s, p.fill, p.anchor, p.size);
178
257
  }
179
258
  }
180
259
  function emitSVG(scene) {
@@ -342,6 +421,7 @@ function texEsc(s) {
342
421
  }
343
422
  });
344
423
  }
424
+ var TIKZ_COLOR_NAME = /^[A-Za-z][A-Za-z0-9!.]*$/;
345
425
  function tikzColor(c) {
346
426
  if (c === "none") return { color: "none", alpha: 1 };
347
427
  if (c.startsWith("#")) {
@@ -352,7 +432,7 @@ function tikzColor(c) {
352
432
  const alpha = h.length >= 8 ? Math.round(parseInt(h.slice(6, 8), 16) / 255 * 100) / 100 : 1;
353
433
  return { color: `{rgb,255:red,${r};green,${g};blue,${b}}`, alpha };
354
434
  }
355
- return { color: c, alpha: 1 };
435
+ return { color: TIKZ_COLOR_NAME.test(c) ? c : "black", alpha: 1 };
356
436
  }
357
437
  var round = (n) => Math.round(n * 100) / 100;
358
438
  var ANCHOR = {
@@ -736,13 +816,13 @@ function contour(z, opts = {}) {
736
816
  // src/three/project.ts
737
817
  function project(p, cam) {
738
818
  const az = cam.azim * Math.PI / 180;
739
- const el = cam.elev * Math.PI / 180;
819
+ const el2 = cam.elev * Math.PI / 180;
740
820
  const [x, y, z] = p;
741
821
  const xa = x * Math.cos(az) - y * Math.sin(az);
742
822
  const ya = x * Math.sin(az) + y * Math.cos(az);
743
823
  const sx = xa;
744
- const sy = z * Math.cos(el) - ya * Math.sin(el);
745
- const depth = z * Math.sin(el) + ya * Math.cos(el);
824
+ const sy = z * Math.cos(el2) - ya * Math.sin(el2);
825
+ const depth = z * Math.sin(el2) + ya * Math.cos(el2);
746
826
  return [sx, sy, depth];
747
827
  }
748
828
 
@@ -1128,7 +1208,7 @@ function curve3d(x, y, z, opts = {}) {
1128
1208
  }
1129
1209
 
1130
1210
  // src/index.ts
1131
- var VERSION = "0.4.3";
1211
+ var VERSION = "0.4.4";
1132
1212
  export {
1133
1213
  VERSION,
1134
1214
  area,
@@ -4,6 +4,7 @@ export declare class PlotRenderError extends Error {
4
4
  readonly missingTool?: string | undefined;
5
5
  constructor(message: string, missingTool?: string | undefined);
6
6
  }
7
+ /** Options for the file render bridge. `tool` selects one allowed external tool. `timeoutMs` limits each tool run (default 30 s for SVG conversion, 60 s for LaTeX). `density` and `background` apply only to PNG output from rsvg-convert. */
7
8
  export interface RenderOptions {
8
9
  tool?: string;
9
10
  timeoutMs?: number;
@@ -1 +1 @@
1
- {"version":3,"file":"render-file.d.ts","sourceRoot":"","sources":["../src/render-file.ts"],"names":[],"mappings":"AAWA;gFACgF;AAChF,qBAAa,eAAgB,SAAQ,KAAK;IAGtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IAF/B,YACE,OAAO,EAAE,MAAM,EACN,WAAW,CAAC,EAAE,MAAM,YAAA,EAI9B;CACF;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;+DAC+D;AAC/D,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,SAAS,CAAC,CAuBpB;AAED,oEAAoE;AACpE,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5D;AAED;;kFAEkF;AAClF,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;iEACiE;AACjE,wBAAgB,SAAS,CACvB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,MAAM,EAAE,CAcV;AAED;;kFAEkF;AAClF,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAwCf"}
1
+ {"version":3,"file":"render-file.d.ts","sourceRoot":"","sources":["../src/render-file.ts"],"names":[],"mappings":"AAWA;gFACgF;AAChF,qBAAa,eAAgB,SAAQ,KAAK;IAGtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM;IAF/B,YACE,OAAO,EAAE,MAAM,EACN,WAAW,CAAC,EAAE,MAAM,YAAA,EAI9B;CACF;AAED,+OAA+O;AAC/O,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAID;+DAC+D;AAC/D,wBAAgB,OAAO,CACrB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,IAAI,GAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAChD,OAAO,CAAC,SAAS,CAAC,CAuBpB;AAED,oEAAoE;AACpE,wBAAsB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO5D;AAED;;kFAEkF;AAClF,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CA2Df;AAED;iEACiE;AACjE,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAcpF;AAED;;kFAEkF;AAClF,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,GAAE,aAAkB,GACvB,OAAO,CAAC,IAAI,CAAC,CAwCf"}
package/dist/svg.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { Scene } from './scene.js';
2
+ /** Color scheme for SVG chart output: foreground, muted, grid, axis and background colors, and an ordered list of data-series colors. */
2
3
  export interface Theme {
3
4
  fg: string;
4
5
  muted: string;
@@ -8,15 +9,26 @@ export interface Theme {
8
9
  series: string[];
9
10
  }
10
11
  export declare const THEMES: Record<'light' | 'dark', Theme>;
12
+ /** Replace `&`, `<` and `>` in a string with their XML entities. Quote characters stay unchanged, so use the result as element text only. Attribute values go through `escAttr`. */
11
13
  export declare function esc(s: string): string;
14
+ /** Format a number as a tick label. A non-finite value gives an empty string. A non-zero value with magnitude below 1e-3 or at or above 1e6 uses exponential notation with two decimals. Other values are rounded to six decimal places. */
12
15
  export declare function fmt(n: number): string;
16
+ /** Escape a value for use inside a quoted XML attribute. Replaces `&`, `<`, `>`, `"` and `'` with entities. A number is converted with `String` first, so a value typed `number` but passed as a string at run time cannot end the attribute. */
17
+ export declare function escAttr(v: string | number): string;
18
+ /** Wrap SVG body markup in a complete `<svg>` document of the given size, with a full-size background rectangle and the `img` ARIA role. Every attribute value is escaped with `escAttr`. */
13
19
  export declare function svgDoc(width: number, height: number, body: string, bg: string): string;
20
+ /** Make an SVG `<line>` element between two points. Coordinates are rounded to two decimals. The `stroke-opacity` attribute is added only when the opacity is below 1. Every attribute value is escaped with `escAttr`. */
14
21
  export declare function line(x1: number, y1: number, x2: number, y2: number, stroke: string, w?: number, opacity?: number): string;
22
+ /** Make an SVG `<circle>` element. The `fill-opacity` attribute is added only when the opacity is below 1. Every attribute value is escaped with `escAttr`. */
15
23
  export declare function circle(cx: number, cy: number, r: number, fill: string, opacity?: number): string;
24
+ /** Make a filled SVG `<rect>` element. Position and size are rounded to two decimals. Every attribute value is escaped with `escAttr`. */
16
25
  export declare function rect(x: number, y: number, w: number, h: number, fill: string): string;
26
+ /** Make an SVG `<polyline>` element with no fill from a list of [x, y] points. Every attribute value is escaped with `escAttr`. */
17
27
  export declare function polyline(pts: Array<[number, number]>, stroke: string, w?: number): string;
28
+ /** Make an SVG `<polygon>` element from a list of [x, y] vertices. The stroke is `none` by default. Every attribute value is escaped with `escAttr`. */
18
29
  export declare function polygon(pts: Array<[number, number]>, fill: string, stroke?: string): string;
19
- export declare function text(x: number, y: number, s: string, fill: string, anchor?: string, size?: number): string;
30
+ /** Make an SVG `<text>` element. The text content is escaped with `esc`, and every attribute value with `escAttr`. When `transform` is given it replaces the `x`/`y` attributes. */
31
+ export declare function text(x: number, y: number, s: string, fill: string, anchor?: string, size?: number, transform?: string): string;
20
32
  /** Serialize a Scene to a self-contained SVG string (reuses the exported builders). */
21
33
  export declare function emitSVG(scene: Scene): string;
22
34
  //# sourceMappingURL=svg.d.ts.map
package/dist/svg.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,YAAY,CAAC;AAE9C,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAaD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,KAAK,CAiBlD,CAAC;AAEF,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErC;AAED,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrC;AAID,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAKtF;AAED,wBAAgB,IAAI,CAClB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,CAAC,SAAI,EACL,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAMR;AACD,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAMhG;AACD,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAErF;AACD,wBAAgB,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,MAAM,CAGpF;AACD,wBAAgB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,GAAG,MAAM,CAG3F;AACD,wBAAgB,IAAI,CAClB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,MAAM,SAAU,EAChB,IAAI,SAAK,GACR,MAAM,CAER;AAuBD,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE5C"}
1
+ {"version":3,"file":"svg.d.ts","sourceRoot":"","sources":["../src/svg.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,YAAY,CAAC;AAE9C,yIAAyI;AACzI,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAaD,eAAO,MAAM,MAAM,EAAE,MAAM,CAAC,OAAO,GAAG,MAAM,EAAE,KAAK,CAiBlD,CAAC;AAEF,oLAAoL;AACpL,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAErC;AAED,4OAA4O;AAC5O,wBAAgB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAKrC;AAYD,iPAAiP;AACjP,wBAAgB,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAElD;AAwBD,6LAA6L;AAC7L,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAiBtF;AAED,2NAA2N;AAC3N,wBAAgB,IAAI,CAClB,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,EAAE,EAAE,MAAM,EACV,MAAM,EAAE,MAAM,EACd,CAAC,SAAI,EACL,OAAO,CAAC,EAAE,MAAM,GACf,MAAM,CAUR;AACD,+JAA+J;AAC/J,wBAAgB,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAQhG;AACD,0IAA0I;AAC1I,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQrF;AACD,mIAAmI;AACnI,wBAAgB,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,SAAI,GAAG,MAAM,CAOpF;AACD,wJAAwJ;AACxJ,wBAAgB,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,SAAS,GAAG,MAAM,CAM3F;AACD,oLAAoL;AACpL,wBAAgB,IAAI,CAClB,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,CAAC,EAAE,MAAM,EACT,IAAI,EAAE,MAAM,EACZ,MAAM,SAAU,EAChB,IAAI,SAAK,EACT,SAAS,CAAC,EAAE,MAAM,GACjB,MAAM,CAmBR;AA+BD,uFAAuF;AACvF,wBAAgB,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAE5C"}
@@ -1,3 +1,4 @@
1
+ /** View direction for the orthographic projection. Both angles are in degrees. */
1
2
  export interface Camera {
2
3
  azim: number;
3
4
  elev: number;
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/three/project.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAY1F"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/three/project.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAY1F"}
@@ -1 +1 @@
1
- {"version":3,"file":"tikz.d.ts","sourceRoot":"","sources":["../src/tikz.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;2DAC2D;AAC3D,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAaxC;AA+DD,gGAAgG;AAChG,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,WAAgB,GAAG,MAAM,CAYrE"}
1
+ {"version":3,"file":"tikz.d.ts","sourceRoot":"","sources":["../src/tikz.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAQ,MAAM,YAAY,CAAC;AAC9C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C;2DAC2D;AAC3D,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAaxC;AAsED,gGAAgG;AAChG,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,WAAgB,GAAG,MAAM,CAYrE"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@danielsimonjr/mathts-plot",
3
- "version": "0.4.3",
4
- "description": "Headless SVG 2D/3D plotting for MathTS \u2014 dependency-light, expression-aware, built on core/functions/expression",
3
+ "version": "0.4.4",
4
+ "description": "Headless SVG 2D/3D plotting for MathTS — dependency-light, expression-aware, built on core/functions/expression",
5
5
  "author": "Daniel Simon Jr.",
6
6
  "license": "MIT",
7
7
  "type": "module",
@@ -40,6 +40,7 @@
40
40
  },
41
41
  "devDependencies": {
42
42
  "@types/node": "^26.4.0",
43
+ "@xmldom/xmldom": "^0.9.12",
43
44
  "tsup": "^8.0.0",
44
45
  "typescript": "^7.0.2",
45
46
  "vitest": "^5.0.0"