@stocksharp/diagram 1.1.0 → 1.2.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.
@@ -0,0 +1,111 @@
1
+ import { Diagram } from './canvas-renderer.js';
2
+ import { parseDiagramDocument } from './core/document.js';
3
+ /** A 2D context that answers every call and remembers nothing: the drawing goes to the SVG surface. */
4
+ function createContext() {
5
+ const own = {
6
+ globalAlpha: 1,
7
+ measureText: (text) => ({ width: text.length * 7 }),
8
+ };
9
+ return new Proxy(own, {
10
+ get: (target, property) => property in target ? target[property] : () => undefined,
11
+ set: (target, property, value) => {
12
+ target[property] = value;
13
+ return true;
14
+ },
15
+ });
16
+ }
17
+ class StubElement {
18
+ constructor() {
19
+ this.style = {};
20
+ this.className = '';
21
+ this.tabIndex = 0;
22
+ this.width = 0;
23
+ this.height = 0;
24
+ this.textContent = '';
25
+ this.children = [];
26
+ this.classList = { toggle: () => false, add: () => undefined, remove: () => undefined };
27
+ this.context = createContext();
28
+ }
29
+ appendChild(child) {
30
+ this.children.push(child);
31
+ return child;
32
+ }
33
+ removeChild(child) {
34
+ const at = this.children.indexOf(child);
35
+ if (at >= 0)
36
+ this.children.splice(at, 1);
37
+ return child;
38
+ }
39
+ remove() { }
40
+ setAttribute() { }
41
+ focus() { }
42
+ addEventListener() { }
43
+ removeEventListener() { }
44
+ getContext() { return this.context; }
45
+ getBoundingClientRect() {
46
+ return { left: 0, top: 0, right: this.width, bottom: this.height, width: this.width, height: this.height, x: 0, y: 0, toJSON: () => ({}) };
47
+ }
48
+ get clientWidth() { return this.width; }
49
+ get clientHeight() { return this.height; }
50
+ }
51
+ const GLOBAL_KEYS = ['window', 'document', 'requestAnimationFrame', 'cancelAnimationFrame', 'Image', 'getComputedStyle', 'performance'];
52
+ /** Puts the stubs in place, and hands back the function that removes exactly what it added. */
53
+ function installGlobals() {
54
+ const target = globalThis;
55
+ if (target.document !== undefined)
56
+ return () => undefined;
57
+ const before = new Map();
58
+ for (const key of GLOBAL_KEYS)
59
+ before.set(key, target[key]);
60
+ const stubDocument = Object.assign(new StubElement(), {
61
+ documentElement: new StubElement(),
62
+ createElement: () => new StubElement(),
63
+ });
64
+ Object.assign(target, {
65
+ window: Object.assign(new StubElement(), { devicePixelRatio: 1 }),
66
+ document: stubDocument,
67
+ requestAnimationFrame: () => 1,
68
+ cancelAnimationFrame: () => undefined,
69
+ Image: class {
70
+ },
71
+ getComputedStyle: () => ({ getPropertyValue: () => '' }),
72
+ // A host without a browser may have no clock either -- an embedded JS engine has none. The drawing
73
+ // reads it for animation, and a still picture has no animation to advance.
74
+ performance: globalThis.performance ?? { now: () => 0 },
75
+ });
76
+ return () => {
77
+ for (const [key, value] of before) {
78
+ if (value === undefined)
79
+ delete target[key];
80
+ else
81
+ target[key] = value;
82
+ }
83
+ };
84
+ }
85
+ /**
86
+ * Draws a saved diagram and returns the SVG for it. The source is the document as text or as an object;
87
+ * the frame follows the content by default, since a picture made without a viewport has none to crop to.
88
+ */
89
+ export function renderDiagramSvg(source, options = {}) {
90
+ const { hostWidth = 1200, hostHeight = 800, ...screenshot } = options;
91
+ const restore = installGlobals();
92
+ try {
93
+ const host = new StubElement();
94
+ host.width = hostWidth;
95
+ host.height = hostHeight;
96
+ const diagram = new Diagram({ host: host });
97
+ try {
98
+ // Whatever shape it arrived in -- text off the wire, an object already in hand -- the library's
99
+ // own reader decides what a document is.
100
+ diagram.loadDocument(parseDiagramDocument(source));
101
+ return diagram.takeSvg({ scope: 'content', ...screenshot });
102
+ }
103
+ finally {
104
+ diagram.destroy();
105
+ }
106
+ }
107
+ finally {
108
+ restore();
109
+ }
110
+ }
111
+ //# sourceMappingURL=headless.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"headless.js","sourceRoot":"","sources":["../../src/headless.ts"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -1,4 +1,5 @@
1
1
  export { DiagramDocumentError, cloneDiagramDocument, createDiagramDocument, parseDiagramDocument, serializeDiagramDocument, } from './core/document.js';
2
+ export { renderDiagramSvg } from './headless.js';
2
3
  export { DiagramActionRegistry } from './core/action-registry.js';
3
4
  export { DiagramCommandHistory } from './core/history.js';
4
5
  export { DIAGRAM_DOCUMENT_VERSION } from './core/model.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,GAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAMlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAO1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAuB3D,OAAO,EACH,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,gCAAgC,GACnC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACH,0BAA0B,EAC1B,qBAAqB,EACrB,8BAA8B,EAC9B,qBAAqB,EACrB,yBAAyB,GAC5B,MAAM,sBAAsB,CAAC;AAqB9B,OAAO,EACH,iBAAiB,GACpB,MAAM,iCAAiC,CAAC;AAkDzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EACH,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EACH,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,GACX,MAAM,oBAAoB,CAAC;AAkB5B,OAAO,EACH,sBAAsB,EACtB,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACf,MAAM,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,oBAAoB,EACpB,oBAAoB,EACpB,qBAAqB,EACrB,oBAAoB,EACpB,wBAAwB,GAC3B,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAGjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAMlE,OAAO,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AAO1D,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAuB3D,OAAO,EACH,gCAAgC,EAChC,6BAA6B,EAC7B,6BAA6B,EAC7B,yBAAyB,EACzB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,EACtB,sBAAsB,EACtB,gCAAgC,GACnC,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACH,0BAA0B,EAC1B,qBAAqB,EACrB,8BAA8B,EAC9B,qBAAqB,EACrB,yBAAyB,GAC5B,MAAM,sBAAsB,CAAC;AAqB9B,OAAO,EACH,iBAAiB,GACpB,MAAM,iCAAiC,CAAC;AAkDzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EACH,iBAAiB,EACjB,iBAAiB,GACpB,MAAM,sBAAsB,CAAC;AAS9B,OAAO,EACH,WAAW,EACX,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,GACX,MAAM,oBAAoB,CAAC;AAkB5B,OAAO,EACH,sBAAsB,EACtB,SAAS,EACT,gBAAgB,EAChB,gBAAgB,EAChB,YAAY,GACf,MAAM,YAAY,CAAC"}