@itwin/core-markup 4.0.0-dev.48 → 4.0.0-dev.50

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 (50) hide show
  1. package/lib/cjs/Markup.d.ts +310 -310
  2. package/lib/cjs/Markup.js +419 -419
  3. package/lib/cjs/Markup.js.map +1 -1
  4. package/lib/cjs/MarkupTool.d.ts +38 -38
  5. package/lib/cjs/MarkupTool.js +88 -88
  6. package/lib/cjs/MarkupTool.js.map +1 -1
  7. package/lib/cjs/RedlineTool.d.ts +145 -145
  8. package/lib/cjs/RedlineTool.js +512 -512
  9. package/lib/cjs/RedlineTool.js.map +1 -1
  10. package/lib/cjs/SelectTool.d.ts +126 -126
  11. package/lib/cjs/SelectTool.js +741 -741
  12. package/lib/cjs/SelectTool.js.map +1 -1
  13. package/lib/cjs/SvgJsExt.d.ts +85 -85
  14. package/lib/cjs/SvgJsExt.js +185 -185
  15. package/lib/cjs/SvgJsExt.js.map +1 -1
  16. package/lib/cjs/TextEdit.d.ts +43 -43
  17. package/lib/cjs/TextEdit.js +196 -196
  18. package/lib/cjs/TextEdit.js.map +1 -1
  19. package/lib/cjs/Undo.d.ts +46 -46
  20. package/lib/cjs/Undo.js +168 -168
  21. package/lib/cjs/Undo.js.map +1 -1
  22. package/lib/cjs/core-markup.d.ts +18 -18
  23. package/lib/cjs/core-markup.js +34 -34
  24. package/lib/cjs/core-markup.js.map +1 -1
  25. package/lib/esm/Markup.d.ts +310 -310
  26. package/lib/esm/Markup.js +414 -414
  27. package/lib/esm/Markup.js.map +1 -1
  28. package/lib/esm/MarkupTool.d.ts +38 -38
  29. package/lib/esm/MarkupTool.js +84 -84
  30. package/lib/esm/MarkupTool.js.map +1 -1
  31. package/lib/esm/RedlineTool.d.ts +145 -145
  32. package/lib/esm/RedlineTool.js +498 -498
  33. package/lib/esm/RedlineTool.js.map +1 -1
  34. package/lib/esm/SelectTool.d.ts +126 -126
  35. package/lib/esm/SelectTool.js +734 -734
  36. package/lib/esm/SelectTool.js.map +1 -1
  37. package/lib/esm/SvgJsExt.d.ts +85 -85
  38. package/lib/esm/SvgJsExt.js +180 -180
  39. package/lib/esm/SvgJsExt.js.map +1 -1
  40. package/lib/esm/TextEdit.d.ts +43 -43
  41. package/lib/esm/TextEdit.js +191 -191
  42. package/lib/esm/TextEdit.js.map +1 -1
  43. package/lib/esm/Undo.d.ts +46 -46
  44. package/lib/esm/Undo.js +164 -164
  45. package/lib/esm/Undo.js.map +1 -1
  46. package/lib/esm/core-markup.d.ts +18 -18
  47. package/lib/esm/core-markup.js +22 -22
  48. package/lib/esm/core-markup.js.map +1 -1
  49. package/lib/public/locales/en/MarkupTools.json +98 -98
  50. package/package.json +11 -11
@@ -1,181 +1,181 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module MarkupApp
7
- */
8
- import { Transform } from "@itwin/core-geometry";
9
- import { Box, extend, G, Element as MarkupElement, Matrix, nodeOrNew, Rect, register, Text } from "@svgdotjs/svg.js";
10
- import { MarkupApp } from "./Markup";
11
- const OLDCOLOR = "Color";
12
- /** this is the SVG.js way of adding methods to classes */
13
- extend(MarkupElement, {
14
- forElementsOfGroup(fn) {
15
- const me = this;
16
- if (me instanceof G)
17
- me.each((i, children) => { const child = children[i]; if (child instanceof MarkupElement)
18
- fn(child); }, false);
19
- },
20
- cloneMarkup() {
21
- const me = this;
22
- const cloned = me.clone();
23
- cloned.node.removeAttribute("id");
24
- cloned.resetColor();
25
- return cloned;
26
- },
27
- overrideColor(color) {
28
- const me = this;
29
- me.forElementsOfGroup((child) => child.overrideColor(color)); // Do children first, getComputedStyle will inherit from group for unspecified values...
30
- let oldColor = me.data(OLDCOLOR);
31
- if (undefined === oldColor) {
32
- const css = window.getComputedStyle(me.node);
33
- const colorOrNone = (c) => (c && c !== "none") ? c : "none";
34
- oldColor = { fill: colorOrNone(css.fill), stroke: colorOrNone(css.stroke) };
35
- me.data(OLDCOLOR, oldColor);
36
- }
37
- const toColor = (val) => (!val || val === "none") ? "none" : color;
38
- me.css({ fill: toColor(oldColor.fill), stroke: toColor(oldColor.stroke) });
39
- },
40
- resetColor() {
41
- const me = this;
42
- const oldColor = me.data(OLDCOLOR);
43
- if (undefined !== oldColor)
44
- me.css(oldColor).data(OLDCOLOR, null); // change to old color and remove data object
45
- me.forElementsOfGroup((child) => child.resetColor());
46
- },
47
- hilite() { const me = this; if (!me.inSelection) {
48
- me.overrideColor(MarkupApp.props.hilite.color);
49
- me.inSelection = true;
50
- } },
51
- unHilite() { const me = this; if (me.inSelection) {
52
- me.resetColor();
53
- me.inSelection = undefined;
54
- } },
55
- flash() { const me = this; if (!me.inSelection)
56
- me.overrideColor(MarkupApp.props.hilite.flash); },
57
- unFlash() { const me = this; if (!me.inSelection)
58
- me.resetColor(); },
59
- markupStretch(w, h, x, y, _mtx) { const me = this; me.size(w, h).move(x, y); },
60
- isChildOf(svg) {
61
- const parent = this.parent();
62
- return (parent === svg) ? true : (parent instanceof MarkupElement) ? parent.isChildOf(svg) : false;
63
- },
64
- getChildOrGroupOf(svg) {
65
- const me = this;
66
- const parents = me.parents(svg.parent());
67
- if (0 === parents.length || parents[parents.length - 1].node !== svg.node)
68
- return undefined;
69
- if (parents.length > 1) {
70
- for (let index = parents.length - 2; index >= 0; --index)
71
- if (parents[index] instanceof G || parents[index] instanceof Text)
72
- return parents[index];
73
- }
74
- return me;
75
- },
76
- getNpcToVp() {
77
- const me = this;
78
- const bb = me.bbox();
79
- return new Matrix().scaleO(bb.w, bb.h).translateO(bb.x, bb.y).lmultiplyO(me.matrixify());
80
- },
81
- getOutline(expand) {
82
- const me = this;
83
- const box = me.bbox();
84
- if (expand === undefined)
85
- expand = 0;
86
- return new Rect().move(box.x - expand, box.y - expand).size(box.w + (expand * 2), box.h + (expand * 2)).transform(me.matrixify());
87
- },
88
- });
89
- extend(G, {
90
- markupStretch(_w, _h, _x, _y, mtx) { this.attr("transform", mtx); },
91
- });
92
- extend(Text, {
93
- getFontSize() { const me = this; return parseFloat(window.getComputedStyle(me.node).fontSize); },
94
- markupStretch(_w, _h, _x, _y, mtx) { this.attr("transform", mtx); },
95
- getMarkup() {
96
- const node = this.node;
97
- let text = "";
98
- node.childNodes.forEach((child) => {
99
- if (child.nodeName === "tspan" || child.nodeName === "#text") {
100
- if (text.length !== 0)
101
- text += "\n";
102
- text += child.textContent;
103
- }
104
- });
105
- return text;
106
- },
107
- createMarkup(val, spacing) {
108
- spacing = spacing ? spacing : 1;
109
- const me = this;
110
- me.clear();
111
- if (val === "")
112
- return;
113
- const lines = val.split("\n");
114
- me.plain(lines[0]);
115
- const x = me.attr("x");
116
- me.build(true);
117
- for (let i = 1; i < lines.length; ++i) {
118
- const tspan = me.tspan(lines[i]);
119
- tspan.dy(spacing);
120
- tspan.x(x);
121
- }
122
- me.build(false);
123
- me.dom = {};
124
- },
125
- // override for Text so that empty text will return a size
126
- getOutline(expand) {
127
- const me = this;
128
- const node = me.node;
129
- const content = node.textContent;
130
- if (content !== null && content.length > 0)
131
- return MarkupElement.prototype.getOutline.call(me, expand);
132
- node.textContent = "M";
133
- const outline = MarkupElement.prototype.getOutline.call(me, expand);
134
- node.textContent = content;
135
- return outline;
136
- },
137
- writeDataToDom() {
138
- const me = this;
139
- const dom = me.dom; // strip off useless "leading" data
140
- me.dom = {};
141
- MarkupElement.prototype.writeDataToDom.call(me);
142
- me.dom = dom;
143
- return me;
144
- },
145
- });
146
- extend(Matrix, {
147
- toIModelTransform() {
148
- const m = this;
149
- return Transform.createRowValues(m.a, m.c, 0, m.e, m.b, m.d, 0, m.f, 0, 0, 1, 0);
150
- },
151
- fromIModelTransform(t) {
152
- const m = this;
153
- const o = t.origin;
154
- const mtx = t.matrix;
155
- m.a = mtx.coffs[0];
156
- m.b = mtx.coffs[3];
157
- m.c = mtx.coffs[1];
158
- m.d = mtx.coffs[4];
159
- m.e = o.x;
160
- m.f = o.y;
161
- return this;
162
- },
163
- });
164
- /** Dummy class so a <title> inside a <g> will work.
165
- * @internal
166
- */
167
- export class Title extends MarkupElement {
168
- constructor(node) { super(nodeOrNew("title", node)); }
169
- scale() { return this; }
170
- size() { return this; }
171
- move() { return this; }
172
- dmove() { return this; }
173
- bbox() { return new Box(); }
174
- screenCTM() { return new Matrix(); }
175
- }
176
- register(Title, "Title");
177
- /** only for tests
178
- * @internal
179
- */
180
- export function initSvgExt() { }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module MarkupApp
7
+ */
8
+ import { Transform } from "@itwin/core-geometry";
9
+ import { Box, extend, G, Element as MarkupElement, Matrix, nodeOrNew, Rect, register, Text } from "@svgdotjs/svg.js";
10
+ import { MarkupApp } from "./Markup";
11
+ const OLDCOLOR = "Color";
12
+ /** this is the SVG.js way of adding methods to classes */
13
+ extend(MarkupElement, {
14
+ forElementsOfGroup(fn) {
15
+ const me = this;
16
+ if (me instanceof G)
17
+ me.each((i, children) => { const child = children[i]; if (child instanceof MarkupElement)
18
+ fn(child); }, false);
19
+ },
20
+ cloneMarkup() {
21
+ const me = this;
22
+ const cloned = me.clone();
23
+ cloned.node.removeAttribute("id");
24
+ cloned.resetColor();
25
+ return cloned;
26
+ },
27
+ overrideColor(color) {
28
+ const me = this;
29
+ me.forElementsOfGroup((child) => child.overrideColor(color)); // Do children first, getComputedStyle will inherit from group for unspecified values...
30
+ let oldColor = me.data(OLDCOLOR);
31
+ if (undefined === oldColor) {
32
+ const css = window.getComputedStyle(me.node);
33
+ const colorOrNone = (c) => (c && c !== "none") ? c : "none";
34
+ oldColor = { fill: colorOrNone(css.fill), stroke: colorOrNone(css.stroke) };
35
+ me.data(OLDCOLOR, oldColor);
36
+ }
37
+ const toColor = (val) => (!val || val === "none") ? "none" : color;
38
+ me.css({ fill: toColor(oldColor.fill), stroke: toColor(oldColor.stroke) });
39
+ },
40
+ resetColor() {
41
+ const me = this;
42
+ const oldColor = me.data(OLDCOLOR);
43
+ if (undefined !== oldColor)
44
+ me.css(oldColor).data(OLDCOLOR, null); // change to old color and remove data object
45
+ me.forElementsOfGroup((child) => child.resetColor());
46
+ },
47
+ hilite() { const me = this; if (!me.inSelection) {
48
+ me.overrideColor(MarkupApp.props.hilite.color);
49
+ me.inSelection = true;
50
+ } },
51
+ unHilite() { const me = this; if (me.inSelection) {
52
+ me.resetColor();
53
+ me.inSelection = undefined;
54
+ } },
55
+ flash() { const me = this; if (!me.inSelection)
56
+ me.overrideColor(MarkupApp.props.hilite.flash); },
57
+ unFlash() { const me = this; if (!me.inSelection)
58
+ me.resetColor(); },
59
+ markupStretch(w, h, x, y, _mtx) { const me = this; me.size(w, h).move(x, y); },
60
+ isChildOf(svg) {
61
+ const parent = this.parent();
62
+ return (parent === svg) ? true : (parent instanceof MarkupElement) ? parent.isChildOf(svg) : false;
63
+ },
64
+ getChildOrGroupOf(svg) {
65
+ const me = this;
66
+ const parents = me.parents(svg.parent());
67
+ if (0 === parents.length || parents[parents.length - 1].node !== svg.node)
68
+ return undefined;
69
+ if (parents.length > 1) {
70
+ for (let index = parents.length - 2; index >= 0; --index)
71
+ if (parents[index] instanceof G || parents[index] instanceof Text)
72
+ return parents[index];
73
+ }
74
+ return me;
75
+ },
76
+ getNpcToVp() {
77
+ const me = this;
78
+ const bb = me.bbox();
79
+ return new Matrix().scaleO(bb.w, bb.h).translateO(bb.x, bb.y).lmultiplyO(me.matrixify());
80
+ },
81
+ getOutline(expand) {
82
+ const me = this;
83
+ const box = me.bbox();
84
+ if (expand === undefined)
85
+ expand = 0;
86
+ return new Rect().move(box.x - expand, box.y - expand).size(box.w + (expand * 2), box.h + (expand * 2)).transform(me.matrixify());
87
+ },
88
+ });
89
+ extend(G, {
90
+ markupStretch(_w, _h, _x, _y, mtx) { this.attr("transform", mtx); },
91
+ });
92
+ extend(Text, {
93
+ getFontSize() { const me = this; return parseFloat(window.getComputedStyle(me.node).fontSize); },
94
+ markupStretch(_w, _h, _x, _y, mtx) { this.attr("transform", mtx); },
95
+ getMarkup() {
96
+ const node = this.node;
97
+ let text = "";
98
+ node.childNodes.forEach((child) => {
99
+ if (child.nodeName === "tspan" || child.nodeName === "#text") {
100
+ if (text.length !== 0)
101
+ text += "\n";
102
+ text += child.textContent;
103
+ }
104
+ });
105
+ return text;
106
+ },
107
+ createMarkup(val, spacing) {
108
+ spacing = spacing ? spacing : 1;
109
+ const me = this;
110
+ me.clear();
111
+ if (val === "")
112
+ return;
113
+ const lines = val.split("\n");
114
+ me.plain(lines[0]);
115
+ const x = me.attr("x");
116
+ me.build(true);
117
+ for (let i = 1; i < lines.length; ++i) {
118
+ const tspan = me.tspan(lines[i]);
119
+ tspan.dy(spacing);
120
+ tspan.x(x);
121
+ }
122
+ me.build(false);
123
+ me.dom = {};
124
+ },
125
+ // override for Text so that empty text will return a size
126
+ getOutline(expand) {
127
+ const me = this;
128
+ const node = me.node;
129
+ const content = node.textContent;
130
+ if (content !== null && content.length > 0)
131
+ return MarkupElement.prototype.getOutline.call(me, expand);
132
+ node.textContent = "M";
133
+ const outline = MarkupElement.prototype.getOutline.call(me, expand);
134
+ node.textContent = content;
135
+ return outline;
136
+ },
137
+ writeDataToDom() {
138
+ const me = this;
139
+ const dom = me.dom; // strip off useless "leading" data
140
+ me.dom = {};
141
+ MarkupElement.prototype.writeDataToDom.call(me);
142
+ me.dom = dom;
143
+ return me;
144
+ },
145
+ });
146
+ extend(Matrix, {
147
+ toIModelTransform() {
148
+ const m = this;
149
+ return Transform.createRowValues(m.a, m.c, 0, m.e, m.b, m.d, 0, m.f, 0, 0, 1, 0);
150
+ },
151
+ fromIModelTransform(t) {
152
+ const m = this;
153
+ const o = t.origin;
154
+ const mtx = t.matrix;
155
+ m.a = mtx.coffs[0];
156
+ m.b = mtx.coffs[3];
157
+ m.c = mtx.coffs[1];
158
+ m.d = mtx.coffs[4];
159
+ m.e = o.x;
160
+ m.f = o.y;
161
+ return this;
162
+ },
163
+ });
164
+ /** Dummy class so a <title> inside a <g> will work.
165
+ * @internal
166
+ */
167
+ export class Title extends MarkupElement {
168
+ constructor(node) { super(nodeOrNew("title", node)); }
169
+ scale() { return this; }
170
+ size() { return this; }
171
+ move() { return this; }
172
+ dmove() { return this; }
173
+ bbox() { return new Box(); }
174
+ screenCTM() { return new Matrix(); }
175
+ }
176
+ register(Title, "Title");
177
+ /** only for tests
178
+ * @internal
179
+ */
180
+ export function initSvgExt() { }
181
181
  //# sourceMappingURL=SvgJsExt.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"SvgJsExt.js","sourceRoot":"","sources":["../../src/SvgJsExt.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module MarkupApp\n */\n\nimport { Transform } from \"@itwin/core-geometry\";\nimport { Box, extend, G, Element as MarkupElement, Matrix, nodeOrNew, Rect, register, Svg, Text } from \"@svgdotjs/svg.js\";\nimport { MarkupApp } from \"./Markup\";\n\n// cspell:ignore lmultiply matrixify dmove\n/* eslint-disable nonblock-statement-body-position */\n/* eslint-disable max-statements-per-line */\n\n/** @public */\nexport interface MarkupColor {\n fill: any;\n stroke: any;\n}\n\n/** Add methods and classes to svg.js library for Markup.\n * @public\n */\ndeclare module \"@svgdotjs/svg.js\" {\n function register(subclass: typeof MarkupElement, name?: string): void; // eslint-disable-line @typescript-eslint/no-shadow\n function nodeOrNew(name: string, node: any): any; // eslint-disable-line @typescript-eslint/no-shadow\n\n interface Dom {\n css(val: object): this;\n }\n /** @public */\n interface Element {\n inSelection?: boolean;\n originalEl?: Element;\n\n /** make a copy of this Element, set its `isMarkup` flag, and reset its color if it was hilited. */\n cloneMarkup(): this;\n /** if this element is currently hilited or flashed, reset to its original color */\n resetColor(): void;\n /** override the color of this element to a new color, saving original */\n overrideColor(color: string): void;\n /** turn on `inSelection` and set its color to hilite */\n hilite(): void;\n /** turn off hilite, turn off `inSelection` flag */\n unHilite(): void;\n /** set this element to the flash color */\n flash(): void;\n /** turn off flash color */\n unFlash(): void;\n /** reposition and resize this element */\n markupStretch(x: number, y: number, w: number, h: number, mtx: Matrix): void;\n /** return true if this element is a child of the supplied Svg. */\n isChildOf(svg: Svg): boolean;\n /** return selectable element or the outermost group containing this element if it's a child of the supplied Svg. */\n getChildOrGroupOf(svg: G): MarkupElement | undefined;\n\n /** @internal */\n forElementsOfGroup(fn: (child: MarkupElement) => void): void;\n /** @internal */\n getNpcToVp(): Matrix;\n /** @internal */\n getOutline(expand?: number): Rect;\n }\n /** @public */\n interface Text {\n getMarkup(): string;\n createMarkup(val: string, spacing: number): void;\n getFontSize(): number;\n }\n\n /** @public */\n interface Matrix {\n /** convert this SVG.Matrix into an iModel Transform */\n toIModelTransform(): Transform;\n fromIModelTransform(t: Transform): this;\n }\n\n /** @internal */\n interface Container {\n foreignObject(width: number, height: number): ForeignObject;\n }\n class ForeignObject extends Container {\n }\n}\n\nconst OLDCOLOR = \"Color\";\n\n/** this is the SVG.js way of adding methods to classes */\nextend(MarkupElement, {\n forElementsOfGroup(fn: (child: MarkupElement) => void): void {\n const me = this as MarkupElement;\n if (me instanceof G)\n me.each((i, children) => { const child = children[i]; if (child instanceof MarkupElement) fn(child); }, false);\n },\n cloneMarkup(): MarkupElement {\n const me = this as MarkupElement;\n const cloned = me.clone();\n cloned.node.removeAttribute(\"id\");\n cloned.resetColor();\n return cloned;\n },\n overrideColor(color: string) {\n const me = this as MarkupElement;\n me.forElementsOfGroup((child) => child.overrideColor(color)); // Do children first, getComputedStyle will inherit from group for unspecified values...\n let oldColor = me.data(OLDCOLOR) as MarkupColor | undefined;\n if (undefined === oldColor) {\n const css = window.getComputedStyle(me.node);\n const colorOrNone = (c: string | null) => (c && c !== \"none\") ? c : \"none\";\n oldColor = { fill: colorOrNone(css.fill), stroke: colorOrNone(css.stroke) };\n me.data(OLDCOLOR, oldColor);\n }\n const toColor = (val: string | null) => (!val || val === \"none\") ? \"none\" : color;\n me.css({ fill: toColor(oldColor.fill), stroke: toColor(oldColor.stroke) });\n },\n resetColor() {\n const me = this as MarkupElement;\n const oldColor = me.data(OLDCOLOR) as MarkupColor;\n if (undefined !== oldColor)\n me.css(oldColor).data(OLDCOLOR, null); // change to old color and remove data object\n me.forElementsOfGroup((child) => child.resetColor());\n },\n hilite() { const me = this as MarkupElement; if (!me.inSelection) { me.overrideColor(MarkupApp.props.hilite.color); me.inSelection = true; } },\n unHilite() { const me = this as MarkupElement; if (me.inSelection) { me.resetColor(); me.inSelection = undefined; } },\n flash() { const me = this as MarkupElement; if (!me.inSelection) me.overrideColor(MarkupApp.props.hilite.flash); },\n unFlash() { const me = this as MarkupElement; if (!me.inSelection) me.resetColor(); },\n markupStretch(w: number, h: number, x: number, y: number, _mtx: Matrix) { const me = this as MarkupElement; me.size(w, h).move(x, y); },\n isChildOf(svg: Svg) {\n const parent = (this as MarkupElement).parent();\n return (parent === svg) ? true : (parent instanceof MarkupElement) ? parent.isChildOf(svg) : false;\n },\n getChildOrGroupOf(svg: G): MarkupElement | undefined {\n const me = this as MarkupElement;\n const parents = me.parents(svg.parent());\n if (0 === parents.length || parents[parents.length - 1].node !== svg.node)\n return undefined;\n if (parents.length > 1) {\n for (let index = parents.length - 2; index >= 0; --index)\n if (parents[index] instanceof G || parents[index] instanceof Text)\n return parents[index];\n }\n return me;\n },\n getNpcToVp(): Matrix {\n const me = this as MarkupElement;\n const bb = me.bbox();\n return new Matrix().scaleO(bb.w, bb.h).translateO(bb.x, bb.y).lmultiplyO(me.matrixify());\n },\n getOutline(expand?: number): Rect {\n const me = this as MarkupElement;\n const box = me.bbox();\n if (expand === undefined) expand = 0;\n return new Rect().move(box.x - expand, box.y - expand).size(box.w + (expand * 2), box.h + (expand * 2)).transform(me.matrixify());\n },\n});\n\nextend(G, {\n markupStretch(_w: number, _h: number, _x: number, _y: number, mtx: Matrix) { (this as G).attr(\"transform\", mtx); },\n});\nextend(Text, {\n getFontSize(): number { const me = this as Text; return parseFloat(window.getComputedStyle(me.node).fontSize); },\n markupStretch(_w: number, _h: number, _x: number, _y: number, mtx: Matrix) { (this as Text).attr(\"transform\", mtx); },\n getMarkup() {\n const node = (this as Text).node;\n let text = \"\";\n node.childNodes.forEach((child) => {\n if (child.nodeName === \"tspan\" || child.nodeName === \"#text\") {\n if (text.length !== 0) text += \"\\n\";\n text += child.textContent;\n }\n });\n return text;\n },\n createMarkup(val: string, spacing: number) {\n spacing = spacing ? spacing : 1;\n const me = this as Text;\n me.clear();\n if (val === \"\")\n return;\n const lines = val.split(\"\\n\");\n me.plain(lines[0]);\n const x = me.attr(\"x\");\n me.build(true);\n for (let i = 1; i < lines.length; ++i) {\n const tspan = me.tspan(lines[i]);\n tspan.dy(spacing);\n tspan.x(x);\n }\n me.build(false);\n me.dom = {};\n },\n // override for Text so that empty text will return a size\n getOutline(expand?: number): Rect {\n const me = this as Text;\n const node = me.node;\n const content = node.textContent;\n if (content !== null && content.length > 0)\n return MarkupElement.prototype.getOutline.call(me, expand);\n node.textContent = \"M\";\n const outline = MarkupElement.prototype.getOutline.call(me, expand);\n node.textContent = content;\n return outline;\n },\n writeDataToDom() {\n const me = this as Text;\n const dom = me.dom; // strip off useless \"leading\" data\n me.dom = {};\n MarkupElement.prototype.writeDataToDom.call(me);\n me.dom = dom;\n return me;\n },\n});\n\nextend(Matrix, {\n toIModelTransform() {\n const m = this as Matrix;\n return Transform.createRowValues(m.a, m.c, 0, m.e, m.b, m.d, 0, m.f, 0, 0, 1, 0);\n },\n fromIModelTransform(t: Transform) {\n const m = this as Matrix;\n const o = t.origin;\n const mtx = t.matrix;\n m.a = mtx.coffs[0];\n m.b = mtx.coffs[3];\n m.c = mtx.coffs[1];\n m.d = mtx.coffs[4];\n m.e = o.x;\n m.f = o.y;\n return this;\n },\n});\n\n/** Dummy class so a <title> inside a <g> will work.\n * @internal\n */\nexport class Title extends MarkupElement {\n constructor(node: any) { super(nodeOrNew(\"title\", node)); }\n public override scale() { return this; }\n public override size() { return this; }\n public override move() { return this; }\n public override dmove() { return this; }\n public override bbox() { return new Box(); }\n public override screenCTM() { return new Matrix(); }\n\n}\nregister(Title, \"Title\");\n\n/** only for tests\n * @internal\n */\nexport function initSvgExt() { }\n"]}
1
+ {"version":3,"file":"SvgJsExt.js","sourceRoot":"","sources":["../../src/SvgJsExt.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n/** @packageDocumentation\r\n * @module MarkupApp\r\n */\r\n\r\nimport { Transform } from \"@itwin/core-geometry\";\r\nimport { Box, extend, G, Element as MarkupElement, Matrix, nodeOrNew, Rect, register, Svg, Text } from \"@svgdotjs/svg.js\";\r\nimport { MarkupApp } from \"./Markup\";\r\n\r\n// cspell:ignore lmultiply matrixify dmove\r\n/* eslint-disable nonblock-statement-body-position */\r\n/* eslint-disable max-statements-per-line */\r\n\r\n/** @public */\r\nexport interface MarkupColor {\r\n fill: any;\r\n stroke: any;\r\n}\r\n\r\n/** Add methods and classes to svg.js library for Markup.\r\n * @public\r\n */\r\ndeclare module \"@svgdotjs/svg.js\" {\r\n function register(subclass: typeof MarkupElement, name?: string): void; // eslint-disable-line @typescript-eslint/no-shadow\r\n function nodeOrNew(name: string, node: any): any; // eslint-disable-line @typescript-eslint/no-shadow\r\n\r\n interface Dom {\r\n css(val: object): this;\r\n }\r\n /** @public */\r\n interface Element {\r\n inSelection?: boolean;\r\n originalEl?: Element;\r\n\r\n /** make a copy of this Element, set its `isMarkup` flag, and reset its color if it was hilited. */\r\n cloneMarkup(): this;\r\n /** if this element is currently hilited or flashed, reset to its original color */\r\n resetColor(): void;\r\n /** override the color of this element to a new color, saving original */\r\n overrideColor(color: string): void;\r\n /** turn on `inSelection` and set its color to hilite */\r\n hilite(): void;\r\n /** turn off hilite, turn off `inSelection` flag */\r\n unHilite(): void;\r\n /** set this element to the flash color */\r\n flash(): void;\r\n /** turn off flash color */\r\n unFlash(): void;\r\n /** reposition and resize this element */\r\n markupStretch(x: number, y: number, w: number, h: number, mtx: Matrix): void;\r\n /** return true if this element is a child of the supplied Svg. */\r\n isChildOf(svg: Svg): boolean;\r\n /** return selectable element or the outermost group containing this element if it's a child of the supplied Svg. */\r\n getChildOrGroupOf(svg: G): MarkupElement | undefined;\r\n\r\n /** @internal */\r\n forElementsOfGroup(fn: (child: MarkupElement) => void): void;\r\n /** @internal */\r\n getNpcToVp(): Matrix;\r\n /** @internal */\r\n getOutline(expand?: number): Rect;\r\n }\r\n /** @public */\r\n interface Text {\r\n getMarkup(): string;\r\n createMarkup(val: string, spacing: number): void;\r\n getFontSize(): number;\r\n }\r\n\r\n /** @public */\r\n interface Matrix {\r\n /** convert this SVG.Matrix into an iModel Transform */\r\n toIModelTransform(): Transform;\r\n fromIModelTransform(t: Transform): this;\r\n }\r\n\r\n /** @internal */\r\n interface Container {\r\n foreignObject(width: number, height: number): ForeignObject;\r\n }\r\n class ForeignObject extends Container {\r\n }\r\n}\r\n\r\nconst OLDCOLOR = \"Color\";\r\n\r\n/** this is the SVG.js way of adding methods to classes */\r\nextend(MarkupElement, {\r\n forElementsOfGroup(fn: (child: MarkupElement) => void): void {\r\n const me = this as MarkupElement;\r\n if (me instanceof G)\r\n me.each((i, children) => { const child = children[i]; if (child instanceof MarkupElement) fn(child); }, false);\r\n },\r\n cloneMarkup(): MarkupElement {\r\n const me = this as MarkupElement;\r\n const cloned = me.clone();\r\n cloned.node.removeAttribute(\"id\");\r\n cloned.resetColor();\r\n return cloned;\r\n },\r\n overrideColor(color: string) {\r\n const me = this as MarkupElement;\r\n me.forElementsOfGroup((child) => child.overrideColor(color)); // Do children first, getComputedStyle will inherit from group for unspecified values...\r\n let oldColor = me.data(OLDCOLOR) as MarkupColor | undefined;\r\n if (undefined === oldColor) {\r\n const css = window.getComputedStyle(me.node);\r\n const colorOrNone = (c: string | null) => (c && c !== \"none\") ? c : \"none\";\r\n oldColor = { fill: colorOrNone(css.fill), stroke: colorOrNone(css.stroke) };\r\n me.data(OLDCOLOR, oldColor);\r\n }\r\n const toColor = (val: string | null) => (!val || val === \"none\") ? \"none\" : color;\r\n me.css({ fill: toColor(oldColor.fill), stroke: toColor(oldColor.stroke) });\r\n },\r\n resetColor() {\r\n const me = this as MarkupElement;\r\n const oldColor = me.data(OLDCOLOR) as MarkupColor;\r\n if (undefined !== oldColor)\r\n me.css(oldColor).data(OLDCOLOR, null); // change to old color and remove data object\r\n me.forElementsOfGroup((child) => child.resetColor());\r\n },\r\n hilite() { const me = this as MarkupElement; if (!me.inSelection) { me.overrideColor(MarkupApp.props.hilite.color); me.inSelection = true; } },\r\n unHilite() { const me = this as MarkupElement; if (me.inSelection) { me.resetColor(); me.inSelection = undefined; } },\r\n flash() { const me = this as MarkupElement; if (!me.inSelection) me.overrideColor(MarkupApp.props.hilite.flash); },\r\n unFlash() { const me = this as MarkupElement; if (!me.inSelection) me.resetColor(); },\r\n markupStretch(w: number, h: number, x: number, y: number, _mtx: Matrix) { const me = this as MarkupElement; me.size(w, h).move(x, y); },\r\n isChildOf(svg: Svg) {\r\n const parent = (this as MarkupElement).parent();\r\n return (parent === svg) ? true : (parent instanceof MarkupElement) ? parent.isChildOf(svg) : false;\r\n },\r\n getChildOrGroupOf(svg: G): MarkupElement | undefined {\r\n const me = this as MarkupElement;\r\n const parents = me.parents(svg.parent());\r\n if (0 === parents.length || parents[parents.length - 1].node !== svg.node)\r\n return undefined;\r\n if (parents.length > 1) {\r\n for (let index = parents.length - 2; index >= 0; --index)\r\n if (parents[index] instanceof G || parents[index] instanceof Text)\r\n return parents[index];\r\n }\r\n return me;\r\n },\r\n getNpcToVp(): Matrix {\r\n const me = this as MarkupElement;\r\n const bb = me.bbox();\r\n return new Matrix().scaleO(bb.w, bb.h).translateO(bb.x, bb.y).lmultiplyO(me.matrixify());\r\n },\r\n getOutline(expand?: number): Rect {\r\n const me = this as MarkupElement;\r\n const box = me.bbox();\r\n if (expand === undefined) expand = 0;\r\n return new Rect().move(box.x - expand, box.y - expand).size(box.w + (expand * 2), box.h + (expand * 2)).transform(me.matrixify());\r\n },\r\n});\r\n\r\nextend(G, {\r\n markupStretch(_w: number, _h: number, _x: number, _y: number, mtx: Matrix) { (this as G).attr(\"transform\", mtx); },\r\n});\r\nextend(Text, {\r\n getFontSize(): number { const me = this as Text; return parseFloat(window.getComputedStyle(me.node).fontSize); },\r\n markupStretch(_w: number, _h: number, _x: number, _y: number, mtx: Matrix) { (this as Text).attr(\"transform\", mtx); },\r\n getMarkup() {\r\n const node = (this as Text).node;\r\n let text = \"\";\r\n node.childNodes.forEach((child) => {\r\n if (child.nodeName === \"tspan\" || child.nodeName === \"#text\") {\r\n if (text.length !== 0) text += \"\\n\";\r\n text += child.textContent;\r\n }\r\n });\r\n return text;\r\n },\r\n createMarkup(val: string, spacing: number) {\r\n spacing = spacing ? spacing : 1;\r\n const me = this as Text;\r\n me.clear();\r\n if (val === \"\")\r\n return;\r\n const lines = val.split(\"\\n\");\r\n me.plain(lines[0]);\r\n const x = me.attr(\"x\");\r\n me.build(true);\r\n for (let i = 1; i < lines.length; ++i) {\r\n const tspan = me.tspan(lines[i]);\r\n tspan.dy(spacing);\r\n tspan.x(x);\r\n }\r\n me.build(false);\r\n me.dom = {};\r\n },\r\n // override for Text so that empty text will return a size\r\n getOutline(expand?: number): Rect {\r\n const me = this as Text;\r\n const node = me.node;\r\n const content = node.textContent;\r\n if (content !== null && content.length > 0)\r\n return MarkupElement.prototype.getOutline.call(me, expand);\r\n node.textContent = \"M\";\r\n const outline = MarkupElement.prototype.getOutline.call(me, expand);\r\n node.textContent = content;\r\n return outline;\r\n },\r\n writeDataToDom() {\r\n const me = this as Text;\r\n const dom = me.dom; // strip off useless \"leading\" data\r\n me.dom = {};\r\n MarkupElement.prototype.writeDataToDom.call(me);\r\n me.dom = dom;\r\n return me;\r\n },\r\n});\r\n\r\nextend(Matrix, {\r\n toIModelTransform() {\r\n const m = this as Matrix;\r\n return Transform.createRowValues(m.a, m.c, 0, m.e, m.b, m.d, 0, m.f, 0, 0, 1, 0);\r\n },\r\n fromIModelTransform(t: Transform) {\r\n const m = this as Matrix;\r\n const o = t.origin;\r\n const mtx = t.matrix;\r\n m.a = mtx.coffs[0];\r\n m.b = mtx.coffs[3];\r\n m.c = mtx.coffs[1];\r\n m.d = mtx.coffs[4];\r\n m.e = o.x;\r\n m.f = o.y;\r\n return this;\r\n },\r\n});\r\n\r\n/** Dummy class so a <title> inside a <g> will work.\r\n * @internal\r\n */\r\nexport class Title extends MarkupElement {\r\n constructor(node: any) { super(nodeOrNew(\"title\", node)); }\r\n public override scale() { return this; }\r\n public override size() { return this; }\r\n public override move() { return this; }\r\n public override dmove() { return this; }\r\n public override bbox() { return new Box(); }\r\n public override screenCTM() { return new Matrix(); }\r\n\r\n}\r\nregister(Title, \"Title\");\r\n\r\n/** only for tests\r\n * @internal\r\n */\r\nexport function initSvgExt() { }\r\n"]}
@@ -1,44 +1,44 @@
1
- /** @packageDocumentation
2
- * @module MarkupTools
3
- */
4
- import { BeButtonEvent, EventHandled } from "@itwin/core-frontend";
5
- import { G, Text as MarkupText } from "@svgdotjs/svg.js";
6
- import { MarkupTool } from "./MarkupTool";
7
- import { RedlineTool } from "./RedlineTool";
8
- /** Tool to place new text notes on a Markup.
9
- * @public
10
- */
11
- export declare class PlaceTextTool extends RedlineTool {
12
- static toolId: string;
13
- static iconSpec: string;
14
- protected _nRequiredPoints: number;
15
- protected _minPoints: number;
16
- protected _value: string;
17
- onPostInstall(): Promise<void>;
18
- protected showPrompt(): void;
19
- protected createMarkup(svg: G, ev: BeButtonEvent, isDynamics: boolean): Promise<void>;
20
- onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
21
- }
22
- /** Tool for editing text. Started automatically by the place text tool and by clicking on text from the SelectTool
23
- * @public
24
- */
25
- export declare class EditTextTool extends MarkupTool {
26
- text?: G | MarkupText | undefined;
27
- private _fromPlaceTool;
28
- static toolId: string;
29
- static iconSpec: string;
30
- editor?: HTMLTextAreaElement;
31
- editDiv?: HTMLDivElement;
32
- boxed?: G;
33
- constructor(text?: G | MarkupText | undefined, _fromPlaceTool?: boolean);
34
- protected showPrompt(): void;
35
- /** Open the text editor */
36
- startEditor(): void;
37
- /** Called when EditText exits, saves the edited value into the text element */
38
- onCleanup(): Promise<void>;
39
- onInstall(): Promise<boolean>;
40
- onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
41
- onDataButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
42
- onMouseStartDrag(_ev: BeButtonEvent): Promise<EventHandled>;
43
- }
1
+ /** @packageDocumentation
2
+ * @module MarkupTools
3
+ */
4
+ import { BeButtonEvent, EventHandled } from "@itwin/core-frontend";
5
+ import { G, Text as MarkupText } from "@svgdotjs/svg.js";
6
+ import { MarkupTool } from "./MarkupTool";
7
+ import { RedlineTool } from "./RedlineTool";
8
+ /** Tool to place new text notes on a Markup.
9
+ * @public
10
+ */
11
+ export declare class PlaceTextTool extends RedlineTool {
12
+ static toolId: string;
13
+ static iconSpec: string;
14
+ protected _nRequiredPoints: number;
15
+ protected _minPoints: number;
16
+ protected _value: string;
17
+ onPostInstall(): Promise<void>;
18
+ protected showPrompt(): void;
19
+ protected createMarkup(svg: G, ev: BeButtonEvent, isDynamics: boolean): Promise<void>;
20
+ onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
21
+ }
22
+ /** Tool for editing text. Started automatically by the place text tool and by clicking on text from the SelectTool
23
+ * @public
24
+ */
25
+ export declare class EditTextTool extends MarkupTool {
26
+ text?: G | MarkupText | undefined;
27
+ private _fromPlaceTool;
28
+ static toolId: string;
29
+ static iconSpec: string;
30
+ editor?: HTMLTextAreaElement;
31
+ editDiv?: HTMLDivElement;
32
+ boxed?: G;
33
+ constructor(text?: G | MarkupText | undefined, _fromPlaceTool?: boolean);
34
+ protected showPrompt(): void;
35
+ /** Open the text editor */
36
+ startEditor(): void;
37
+ /** Called when EditText exits, saves the edited value into the text element */
38
+ onCleanup(): Promise<void>;
39
+ onInstall(): Promise<boolean>;
40
+ onResetButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
41
+ onDataButtonUp(_ev: BeButtonEvent): Promise<EventHandled>;
42
+ onMouseStartDrag(_ev: BeButtonEvent): Promise<EventHandled>;
43
+ }
44
44
  //# sourceMappingURL=TextEdit.d.ts.map