@itwin/core-markup 4.0.0-dev.52 → 4.0.0-dev.54
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/lib/cjs/Markup.d.ts +310 -310
- package/lib/cjs/Markup.js +419 -419
- package/lib/cjs/Markup.js.map +1 -1
- package/lib/cjs/MarkupTool.d.ts +38 -38
- package/lib/cjs/MarkupTool.js +88 -88
- package/lib/cjs/MarkupTool.js.map +1 -1
- package/lib/cjs/RedlineTool.d.ts +145 -145
- package/lib/cjs/RedlineTool.js +512 -512
- package/lib/cjs/RedlineTool.js.map +1 -1
- package/lib/cjs/SelectTool.d.ts +126 -126
- package/lib/cjs/SelectTool.js +741 -741
- package/lib/cjs/SelectTool.js.map +1 -1
- package/lib/cjs/SvgJsExt.d.ts +85 -85
- package/lib/cjs/SvgJsExt.js +185 -185
- package/lib/cjs/SvgJsExt.js.map +1 -1
- package/lib/cjs/TextEdit.d.ts +43 -43
- package/lib/cjs/TextEdit.js +196 -196
- package/lib/cjs/TextEdit.js.map +1 -1
- package/lib/cjs/Undo.d.ts +46 -46
- package/lib/cjs/Undo.js +168 -168
- package/lib/cjs/Undo.js.map +1 -1
- package/lib/cjs/core-markup.d.ts +18 -18
- package/lib/cjs/core-markup.js +38 -34
- package/lib/cjs/core-markup.js.map +1 -1
- package/lib/esm/Markup.d.ts +310 -310
- package/lib/esm/Markup.js +415 -414
- package/lib/esm/Markup.js.map +1 -1
- package/lib/esm/MarkupTool.d.ts +38 -38
- package/lib/esm/MarkupTool.js +85 -84
- package/lib/esm/MarkupTool.js.map +1 -1
- package/lib/esm/RedlineTool.d.ts +145 -145
- package/lib/esm/RedlineTool.js +508 -498
- package/lib/esm/RedlineTool.js.map +1 -1
- package/lib/esm/SelectTool.d.ts +126 -126
- package/lib/esm/SelectTool.js +735 -734
- package/lib/esm/SelectTool.js.map +1 -1
- package/lib/esm/SvgJsExt.d.ts +85 -85
- package/lib/esm/SvgJsExt.js +180 -180
- package/lib/esm/SvgJsExt.js.map +1 -1
- package/lib/esm/TextEdit.d.ts +43 -43
- package/lib/esm/TextEdit.js +193 -191
- package/lib/esm/TextEdit.js.map +1 -1
- package/lib/esm/Undo.d.ts +46 -46
- package/lib/esm/Undo.js +164 -164
- package/lib/esm/Undo.js.map +1 -1
- package/lib/esm/core-markup.d.ts +18 -18
- package/lib/esm/core-markup.js +22 -22
- package/lib/esm/core-markup.js.map +1 -1
- package/lib/public/locales/en/MarkupTools.json +98 -98
- package/package.json +13 -13
package/lib/cjs/SvgJsExt.js
CHANGED
|
@@ -1,186 +1,186 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*---------------------------------------------------------------------------------------------
|
|
3
|
-
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
-
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
-
*--------------------------------------------------------------------------------------------*/
|
|
6
|
-
/** @packageDocumentation
|
|
7
|
-
* @module MarkupApp
|
|
8
|
-
*/
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.initSvgExt = exports.Title = void 0;
|
|
11
|
-
const core_geometry_1 = require("@itwin/core-geometry");
|
|
12
|
-
const svg_js_1 = require("@svgdotjs/svg.js");
|
|
13
|
-
const Markup_1 = require("./Markup");
|
|
14
|
-
const OLDCOLOR = "Color";
|
|
15
|
-
/** this is the SVG.js way of adding methods to classes */
|
|
16
|
-
(0, svg_js_1.extend)(svg_js_1.Element, {
|
|
17
|
-
forElementsOfGroup(fn) {
|
|
18
|
-
const me = this;
|
|
19
|
-
if (me instanceof svg_js_1.G)
|
|
20
|
-
me.each((i, children) => { const child = children[i]; if (child instanceof svg_js_1.Element)
|
|
21
|
-
fn(child); }, false);
|
|
22
|
-
},
|
|
23
|
-
cloneMarkup() {
|
|
24
|
-
const me = this;
|
|
25
|
-
const cloned = me.clone();
|
|
26
|
-
cloned.node.removeAttribute("id");
|
|
27
|
-
cloned.resetColor();
|
|
28
|
-
return cloned;
|
|
29
|
-
},
|
|
30
|
-
overrideColor(color) {
|
|
31
|
-
const me = this;
|
|
32
|
-
me.forElementsOfGroup((child) => child.overrideColor(color)); // Do children first, getComputedStyle will inherit from group for unspecified values...
|
|
33
|
-
let oldColor = me.data(OLDCOLOR);
|
|
34
|
-
if (undefined === oldColor) {
|
|
35
|
-
const css = window.getComputedStyle(me.node);
|
|
36
|
-
const colorOrNone = (c) => (c && c !== "none") ? c : "none";
|
|
37
|
-
oldColor = { fill: colorOrNone(css.fill), stroke: colorOrNone(css.stroke) };
|
|
38
|
-
me.data(OLDCOLOR, oldColor);
|
|
39
|
-
}
|
|
40
|
-
const toColor = (val) => (!val || val === "none") ? "none" : color;
|
|
41
|
-
me.css({ fill: toColor(oldColor.fill), stroke: toColor(oldColor.stroke) });
|
|
42
|
-
},
|
|
43
|
-
resetColor() {
|
|
44
|
-
const me = this;
|
|
45
|
-
const oldColor = me.data(OLDCOLOR);
|
|
46
|
-
if (undefined !== oldColor)
|
|
47
|
-
me.css(oldColor).data(OLDCOLOR, null); // change to old color and remove data object
|
|
48
|
-
me.forElementsOfGroup((child) => child.resetColor());
|
|
49
|
-
},
|
|
50
|
-
hilite() { const me = this; if (!me.inSelection) {
|
|
51
|
-
me.overrideColor(Markup_1.MarkupApp.props.hilite.color);
|
|
52
|
-
me.inSelection = true;
|
|
53
|
-
} },
|
|
54
|
-
unHilite() { const me = this; if (me.inSelection) {
|
|
55
|
-
me.resetColor();
|
|
56
|
-
me.inSelection = undefined;
|
|
57
|
-
} },
|
|
58
|
-
flash() { const me = this; if (!me.inSelection)
|
|
59
|
-
me.overrideColor(Markup_1.MarkupApp.props.hilite.flash); },
|
|
60
|
-
unFlash() { const me = this; if (!me.inSelection)
|
|
61
|
-
me.resetColor(); },
|
|
62
|
-
markupStretch(w, h, x, y, _mtx) { const me = this; me.size(w, h).move(x, y); },
|
|
63
|
-
isChildOf(svg) {
|
|
64
|
-
const parent = this.parent();
|
|
65
|
-
return (parent === svg) ? true : (parent instanceof svg_js_1.Element) ? parent.isChildOf(svg) : false;
|
|
66
|
-
},
|
|
67
|
-
getChildOrGroupOf(svg) {
|
|
68
|
-
const me = this;
|
|
69
|
-
const parents = me.parents(svg.parent());
|
|
70
|
-
if (0 === parents.length || parents[parents.length - 1].node !== svg.node)
|
|
71
|
-
return undefined;
|
|
72
|
-
if (parents.length > 1) {
|
|
73
|
-
for (let index = parents.length - 2; index >= 0; --index)
|
|
74
|
-
if (parents[index] instanceof svg_js_1.G || parents[index] instanceof svg_js_1.Text)
|
|
75
|
-
return parents[index];
|
|
76
|
-
}
|
|
77
|
-
return me;
|
|
78
|
-
},
|
|
79
|
-
getNpcToVp() {
|
|
80
|
-
const me = this;
|
|
81
|
-
const bb = me.bbox();
|
|
82
|
-
return new svg_js_1.Matrix().scaleO(bb.w, bb.h).translateO(bb.x, bb.y).lmultiplyO(me.matrixify());
|
|
83
|
-
},
|
|
84
|
-
getOutline(expand) {
|
|
85
|
-
const me = this;
|
|
86
|
-
const box = me.bbox();
|
|
87
|
-
if (expand === undefined)
|
|
88
|
-
expand = 0;
|
|
89
|
-
return new svg_js_1.Rect().move(box.x - expand, box.y - expand).size(box.w + (expand * 2), box.h + (expand * 2)).transform(me.matrixify());
|
|
90
|
-
},
|
|
91
|
-
});
|
|
92
|
-
(0, svg_js_1.extend)(svg_js_1.G, {
|
|
93
|
-
markupStretch(_w, _h, _x, _y, mtx) { this.attr("transform", mtx); },
|
|
94
|
-
});
|
|
95
|
-
(0, svg_js_1.extend)(svg_js_1.Text, {
|
|
96
|
-
getFontSize() { const me = this; return parseFloat(window.getComputedStyle(me.node).fontSize); },
|
|
97
|
-
markupStretch(_w, _h, _x, _y, mtx) { this.attr("transform", mtx); },
|
|
98
|
-
getMarkup() {
|
|
99
|
-
const node = this.node;
|
|
100
|
-
let text = "";
|
|
101
|
-
node.childNodes.forEach((child) => {
|
|
102
|
-
if (child.nodeName === "tspan" || child.nodeName === "#text") {
|
|
103
|
-
if (text.length !== 0)
|
|
104
|
-
text += "\n";
|
|
105
|
-
text += child.textContent;
|
|
106
|
-
}
|
|
107
|
-
});
|
|
108
|
-
return text;
|
|
109
|
-
},
|
|
110
|
-
createMarkup(val, spacing) {
|
|
111
|
-
spacing = spacing ? spacing : 1;
|
|
112
|
-
const me = this;
|
|
113
|
-
me.clear();
|
|
114
|
-
if (val === "")
|
|
115
|
-
return;
|
|
116
|
-
const lines = val.split("\n");
|
|
117
|
-
me.plain(lines[0]);
|
|
118
|
-
const x = me.attr("x");
|
|
119
|
-
me.build(true);
|
|
120
|
-
for (let i = 1; i < lines.length; ++i) {
|
|
121
|
-
const tspan = me.tspan(lines[i]);
|
|
122
|
-
tspan.dy(spacing);
|
|
123
|
-
tspan.x(x);
|
|
124
|
-
}
|
|
125
|
-
me.build(false);
|
|
126
|
-
me.dom = {};
|
|
127
|
-
},
|
|
128
|
-
// override for Text so that empty text will return a size
|
|
129
|
-
getOutline(expand) {
|
|
130
|
-
const me = this;
|
|
131
|
-
const node = me.node;
|
|
132
|
-
const content = node.textContent;
|
|
133
|
-
if (content !== null && content.length > 0)
|
|
134
|
-
return svg_js_1.Element.prototype.getOutline.call(me, expand);
|
|
135
|
-
node.textContent = "M";
|
|
136
|
-
const outline = svg_js_1.Element.prototype.getOutline.call(me, expand);
|
|
137
|
-
node.textContent = content;
|
|
138
|
-
return outline;
|
|
139
|
-
},
|
|
140
|
-
writeDataToDom() {
|
|
141
|
-
const me = this;
|
|
142
|
-
const dom = me.dom; // strip off useless "leading" data
|
|
143
|
-
me.dom = {};
|
|
144
|
-
svg_js_1.Element.prototype.writeDataToDom.call(me);
|
|
145
|
-
me.dom = dom;
|
|
146
|
-
return me;
|
|
147
|
-
},
|
|
148
|
-
});
|
|
149
|
-
(0, svg_js_1.extend)(svg_js_1.Matrix, {
|
|
150
|
-
toIModelTransform() {
|
|
151
|
-
const m = this;
|
|
152
|
-
return core_geometry_1.Transform.createRowValues(m.a, m.c, 0, m.e, m.b, m.d, 0, m.f, 0, 0, 1, 0);
|
|
153
|
-
},
|
|
154
|
-
fromIModelTransform(t) {
|
|
155
|
-
const m = this;
|
|
156
|
-
const o = t.origin;
|
|
157
|
-
const mtx = t.matrix;
|
|
158
|
-
m.a = mtx.coffs[0];
|
|
159
|
-
m.b = mtx.coffs[3];
|
|
160
|
-
m.c = mtx.coffs[1];
|
|
161
|
-
m.d = mtx.coffs[4];
|
|
162
|
-
m.e = o.x;
|
|
163
|
-
m.f = o.y;
|
|
164
|
-
return this;
|
|
165
|
-
},
|
|
166
|
-
});
|
|
167
|
-
/** Dummy class so a <title> inside a <g> will work.
|
|
168
|
-
* @internal
|
|
169
|
-
*/
|
|
170
|
-
class Title extends svg_js_1.Element {
|
|
171
|
-
constructor(node) { super((0, svg_js_1.nodeOrNew)("title", node)); }
|
|
172
|
-
scale() { return this; }
|
|
173
|
-
size() { return this; }
|
|
174
|
-
move() { return this; }
|
|
175
|
-
dmove() { return this; }
|
|
176
|
-
bbox() { return new svg_js_1.Box(); }
|
|
177
|
-
screenCTM() { return new svg_js_1.Matrix(); }
|
|
178
|
-
}
|
|
179
|
-
exports.Title = Title;
|
|
180
|
-
(0, svg_js_1.register)(Title, "Title");
|
|
181
|
-
/** only for tests
|
|
182
|
-
* @internal
|
|
183
|
-
*/
|
|
184
|
-
function initSvgExt() { }
|
|
185
|
-
exports.initSvgExt = initSvgExt;
|
|
1
|
+
"use strict";
|
|
2
|
+
/*---------------------------------------------------------------------------------------------
|
|
3
|
+
* Copyright (c) Bentley Systems, Incorporated. All rights reserved.
|
|
4
|
+
* See LICENSE.md in the project root for license terms and full copyright notice.
|
|
5
|
+
*--------------------------------------------------------------------------------------------*/
|
|
6
|
+
/** @packageDocumentation
|
|
7
|
+
* @module MarkupApp
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.initSvgExt = exports.Title = void 0;
|
|
11
|
+
const core_geometry_1 = require("@itwin/core-geometry");
|
|
12
|
+
const svg_js_1 = require("@svgdotjs/svg.js");
|
|
13
|
+
const Markup_1 = require("./Markup");
|
|
14
|
+
const OLDCOLOR = "Color";
|
|
15
|
+
/** this is the SVG.js way of adding methods to classes */
|
|
16
|
+
(0, svg_js_1.extend)(svg_js_1.Element, {
|
|
17
|
+
forElementsOfGroup(fn) {
|
|
18
|
+
const me = this;
|
|
19
|
+
if (me instanceof svg_js_1.G)
|
|
20
|
+
me.each((i, children) => { const child = children[i]; if (child instanceof svg_js_1.Element)
|
|
21
|
+
fn(child); }, false);
|
|
22
|
+
},
|
|
23
|
+
cloneMarkup() {
|
|
24
|
+
const me = this;
|
|
25
|
+
const cloned = me.clone();
|
|
26
|
+
cloned.node.removeAttribute("id");
|
|
27
|
+
cloned.resetColor();
|
|
28
|
+
return cloned;
|
|
29
|
+
},
|
|
30
|
+
overrideColor(color) {
|
|
31
|
+
const me = this;
|
|
32
|
+
me.forElementsOfGroup((child) => child.overrideColor(color)); // Do children first, getComputedStyle will inherit from group for unspecified values...
|
|
33
|
+
let oldColor = me.data(OLDCOLOR);
|
|
34
|
+
if (undefined === oldColor) {
|
|
35
|
+
const css = window.getComputedStyle(me.node);
|
|
36
|
+
const colorOrNone = (c) => (c && c !== "none") ? c : "none";
|
|
37
|
+
oldColor = { fill: colorOrNone(css.fill), stroke: colorOrNone(css.stroke) };
|
|
38
|
+
me.data(OLDCOLOR, oldColor);
|
|
39
|
+
}
|
|
40
|
+
const toColor = (val) => (!val || val === "none") ? "none" : color;
|
|
41
|
+
me.css({ fill: toColor(oldColor.fill), stroke: toColor(oldColor.stroke) });
|
|
42
|
+
},
|
|
43
|
+
resetColor() {
|
|
44
|
+
const me = this;
|
|
45
|
+
const oldColor = me.data(OLDCOLOR);
|
|
46
|
+
if (undefined !== oldColor)
|
|
47
|
+
me.css(oldColor).data(OLDCOLOR, null); // change to old color and remove data object
|
|
48
|
+
me.forElementsOfGroup((child) => child.resetColor());
|
|
49
|
+
},
|
|
50
|
+
hilite() { const me = this; if (!me.inSelection) {
|
|
51
|
+
me.overrideColor(Markup_1.MarkupApp.props.hilite.color);
|
|
52
|
+
me.inSelection = true;
|
|
53
|
+
} },
|
|
54
|
+
unHilite() { const me = this; if (me.inSelection) {
|
|
55
|
+
me.resetColor();
|
|
56
|
+
me.inSelection = undefined;
|
|
57
|
+
} },
|
|
58
|
+
flash() { const me = this; if (!me.inSelection)
|
|
59
|
+
me.overrideColor(Markup_1.MarkupApp.props.hilite.flash); },
|
|
60
|
+
unFlash() { const me = this; if (!me.inSelection)
|
|
61
|
+
me.resetColor(); },
|
|
62
|
+
markupStretch(w, h, x, y, _mtx) { const me = this; me.size(w, h).move(x, y); },
|
|
63
|
+
isChildOf(svg) {
|
|
64
|
+
const parent = this.parent();
|
|
65
|
+
return (parent === svg) ? true : (parent instanceof svg_js_1.Element) ? parent.isChildOf(svg) : false;
|
|
66
|
+
},
|
|
67
|
+
getChildOrGroupOf(svg) {
|
|
68
|
+
const me = this;
|
|
69
|
+
const parents = me.parents(svg.parent());
|
|
70
|
+
if (0 === parents.length || parents[parents.length - 1].node !== svg.node)
|
|
71
|
+
return undefined;
|
|
72
|
+
if (parents.length > 1) {
|
|
73
|
+
for (let index = parents.length - 2; index >= 0; --index)
|
|
74
|
+
if (parents[index] instanceof svg_js_1.G || parents[index] instanceof svg_js_1.Text)
|
|
75
|
+
return parents[index];
|
|
76
|
+
}
|
|
77
|
+
return me;
|
|
78
|
+
},
|
|
79
|
+
getNpcToVp() {
|
|
80
|
+
const me = this;
|
|
81
|
+
const bb = me.bbox();
|
|
82
|
+
return new svg_js_1.Matrix().scaleO(bb.w, bb.h).translateO(bb.x, bb.y).lmultiplyO(me.matrixify());
|
|
83
|
+
},
|
|
84
|
+
getOutline(expand) {
|
|
85
|
+
const me = this;
|
|
86
|
+
const box = me.bbox();
|
|
87
|
+
if (expand === undefined)
|
|
88
|
+
expand = 0;
|
|
89
|
+
return new svg_js_1.Rect().move(box.x - expand, box.y - expand).size(box.w + (expand * 2), box.h + (expand * 2)).transform(me.matrixify());
|
|
90
|
+
},
|
|
91
|
+
});
|
|
92
|
+
(0, svg_js_1.extend)(svg_js_1.G, {
|
|
93
|
+
markupStretch(_w, _h, _x, _y, mtx) { this.attr("transform", mtx); },
|
|
94
|
+
});
|
|
95
|
+
(0, svg_js_1.extend)(svg_js_1.Text, {
|
|
96
|
+
getFontSize() { const me = this; return parseFloat(window.getComputedStyle(me.node).fontSize); },
|
|
97
|
+
markupStretch(_w, _h, _x, _y, mtx) { this.attr("transform", mtx); },
|
|
98
|
+
getMarkup() {
|
|
99
|
+
const node = this.node;
|
|
100
|
+
let text = "";
|
|
101
|
+
node.childNodes.forEach((child) => {
|
|
102
|
+
if (child.nodeName === "tspan" || child.nodeName === "#text") {
|
|
103
|
+
if (text.length !== 0)
|
|
104
|
+
text += "\n";
|
|
105
|
+
text += child.textContent;
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
return text;
|
|
109
|
+
},
|
|
110
|
+
createMarkup(val, spacing) {
|
|
111
|
+
spacing = spacing ? spacing : 1;
|
|
112
|
+
const me = this;
|
|
113
|
+
me.clear();
|
|
114
|
+
if (val === "")
|
|
115
|
+
return;
|
|
116
|
+
const lines = val.split("\n");
|
|
117
|
+
me.plain(lines[0]);
|
|
118
|
+
const x = me.attr("x");
|
|
119
|
+
me.build(true);
|
|
120
|
+
for (let i = 1; i < lines.length; ++i) {
|
|
121
|
+
const tspan = me.tspan(lines[i]);
|
|
122
|
+
tspan.dy(spacing);
|
|
123
|
+
tspan.x(x);
|
|
124
|
+
}
|
|
125
|
+
me.build(false);
|
|
126
|
+
me.dom = {};
|
|
127
|
+
},
|
|
128
|
+
// override for Text so that empty text will return a size
|
|
129
|
+
getOutline(expand) {
|
|
130
|
+
const me = this;
|
|
131
|
+
const node = me.node;
|
|
132
|
+
const content = node.textContent;
|
|
133
|
+
if (content !== null && content.length > 0)
|
|
134
|
+
return svg_js_1.Element.prototype.getOutline.call(me, expand);
|
|
135
|
+
node.textContent = "M";
|
|
136
|
+
const outline = svg_js_1.Element.prototype.getOutline.call(me, expand);
|
|
137
|
+
node.textContent = content;
|
|
138
|
+
return outline;
|
|
139
|
+
},
|
|
140
|
+
writeDataToDom() {
|
|
141
|
+
const me = this;
|
|
142
|
+
const dom = me.dom; // strip off useless "leading" data
|
|
143
|
+
me.dom = {};
|
|
144
|
+
svg_js_1.Element.prototype.writeDataToDom.call(me);
|
|
145
|
+
me.dom = dom;
|
|
146
|
+
return me;
|
|
147
|
+
},
|
|
148
|
+
});
|
|
149
|
+
(0, svg_js_1.extend)(svg_js_1.Matrix, {
|
|
150
|
+
toIModelTransform() {
|
|
151
|
+
const m = this;
|
|
152
|
+
return core_geometry_1.Transform.createRowValues(m.a, m.c, 0, m.e, m.b, m.d, 0, m.f, 0, 0, 1, 0);
|
|
153
|
+
},
|
|
154
|
+
fromIModelTransform(t) {
|
|
155
|
+
const m = this;
|
|
156
|
+
const o = t.origin;
|
|
157
|
+
const mtx = t.matrix;
|
|
158
|
+
m.a = mtx.coffs[0];
|
|
159
|
+
m.b = mtx.coffs[3];
|
|
160
|
+
m.c = mtx.coffs[1];
|
|
161
|
+
m.d = mtx.coffs[4];
|
|
162
|
+
m.e = o.x;
|
|
163
|
+
m.f = o.y;
|
|
164
|
+
return this;
|
|
165
|
+
},
|
|
166
|
+
});
|
|
167
|
+
/** Dummy class so a <title> inside a <g> will work.
|
|
168
|
+
* @internal
|
|
169
|
+
*/
|
|
170
|
+
class Title extends svg_js_1.Element {
|
|
171
|
+
constructor(node) { super((0, svg_js_1.nodeOrNew)("title", node)); }
|
|
172
|
+
scale() { return this; }
|
|
173
|
+
size() { return this; }
|
|
174
|
+
move() { return this; }
|
|
175
|
+
dmove() { return this; }
|
|
176
|
+
bbox() { return new svg_js_1.Box(); }
|
|
177
|
+
screenCTM() { return new svg_js_1.Matrix(); }
|
|
178
|
+
}
|
|
179
|
+
exports.Title = Title;
|
|
180
|
+
(0, svg_js_1.register)(Title, "Title");
|
|
181
|
+
/** only for tests
|
|
182
|
+
* @internal
|
|
183
|
+
*/
|
|
184
|
+
function initSvgExt() { }
|
|
185
|
+
exports.initSvgExt = initSvgExt;
|
|
186
186
|
//# sourceMappingURL=SvgJsExt.js.map
|
package/lib/cjs/SvgJsExt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SvgJsExt.js","sourceRoot":"","sources":["../../src/SvgJsExt.ts"],"names":[],"mappings":";AAAA;;;+FAG+F;AAC/F;;GAEG;;;AAEH,wDAAiD;AACjD,6CAA0H;AAC1H,qCAAqC;AA6ErC,MAAM,QAAQ,GAAG,OAAO,CAAC;AAEzB,0DAA0D;AAC1D,IAAA,eAAM,EAAC,gBAAa,EAAE;IACpB,kBAAkB,CAAC,EAAkC;QACnD,MAAM,EAAE,GAAG,IAAqB,CAAC;QACjC,IAAI,EAAE,YAAY,UAAC;YACjB,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,GAAG,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,YAAY,gBAAa;gBAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACnH,CAAC;IACD,WAAW;QACT,MAAM,EAAE,GAAG,IAAqB,CAAC;QACjC,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,aAAa,CAAC,KAAa;QACzB,MAAM,EAAE,GAAG,IAAqB,CAAC;QACjC,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,wFAAwF;QACtJ,IAAI,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAA4B,CAAC;QAC5D,IAAI,SAAS,KAAK,QAAQ,EAAE;YAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,WAAW,GAAG,CAAC,CAAgB,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3E,QAAQ,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;YAC5E,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;SAC7B;QACD,MAAM,OAAO,GAAG,CAAC,GAAkB,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;QAClF,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7E,CAAC;IACD,UAAU;QACR,MAAM,EAAE,GAAG,IAAqB,CAAC;QACjC,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAgB,CAAC;QAClD,IAAI,SAAS,KAAK,QAAQ;YACxB,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,6CAA6C;QACtF,EAAE,CAAC,kBAAkB,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;IACvD,CAAC;IACD,MAAM,KAAK,MAAM,EAAE,GAAG,IAAqB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,EAAE;QAAE,EAAE,CAAC,aAAa,CAAC,kBAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAAC,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC;KAAE,CAAC,CAAC;IAC9I,QAAQ,KAAK,MAAM,EAAE,GAAG,IAAqB,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE;QAAE,EAAE,CAAC,UAAU,EAAE,CAAC;QAAC,EAAE,CAAC,WAAW,GAAG,SAAS,CAAC;KAAE,CAAC,CAAC;IACrH,KAAK,KAAK,MAAM,EAAE,GAAG,IAAqB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW;QAAE,EAAE,CAAC,aAAa,CAAC,kBAAS,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAClH,OAAO,KAAK,MAAM,EAAE,GAAG,IAAqB,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW;QAAE,EAAE,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACrF,aAAa,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,IAAY,IAAI,MAAM,EAAE,GAAG,IAAqB,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACvI,SAAS,CAAC,GAAQ;QAChB,MAAM,MAAM,GAAI,IAAsB,CAAC,MAAM,EAAE,CAAC;QAChD,OAAO,CAAC,MAAM,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,YAAY,gBAAa,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACrG,CAAC;IACD,iBAAiB,CAAC,GAAM;QACtB,MAAM,EAAE,GAAG,IAAqB,CAAC;QACjC,MAAM,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;QACzC,IAAI,CAAC,KAAK,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;YACvE,OAAO,SAAS,CAAC;QACnB,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE;YACtB,KAAK,IAAI,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,EAAE,KAAK;gBACtD,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,UAAC,IAAI,OAAO,CAAC,KAAK,CAAC,YAAY,aAAI;oBAC/D,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;SAC3B;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,UAAU;QACR,MAAM,EAAE,GAAG,IAAqB,CAAC;QACjC,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QACrB,OAAO,IAAI,eAAM,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;IAC3F,CAAC;IACD,UAAU,CAAC,MAAe;QACxB,MAAM,EAAE,GAAG,IAAqB,CAAC;QACjC,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QACtB,IAAI,MAAM,KAAK,SAAS;YAAE,MAAM,GAAG,CAAC,CAAC;QACrC,OAAO,IAAI,aAAI,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;IACpI,CAAC;CACF,CAAC,CAAC;AAEH,IAAA,eAAM,EAAC,UAAC,EAAE;IACR,aAAa,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,GAAW,IAAK,IAAU,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;CACnH,CAAC,CAAC;AACH,IAAA,eAAM,EAAC,aAAI,EAAE;IACX,WAAW,KAAa,MAAM,EAAE,GAAG,IAAY,CAAC,CAAC,OAAO,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;IAChH,aAAa,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,GAAW,IAAK,IAAa,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IACrH,SAAS;QACP,MAAM,IAAI,GAAI,IAAa,CAAC,IAAI,CAAC;QACjC,IAAI,IAAI,GAAG,EAAE,CAAC;QACd,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAChC,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,QAAQ,KAAK,OAAO,EAAE;gBAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,IAAI,IAAI,IAAI,CAAC;gBACpC,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC;aAC3B;QACH,CAAC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC;IACd,CAAC;IACD,YAAY,CAAC,GAAW,EAAE,OAAe;QACvC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,IAAY,CAAC;QACxB,EAAE,CAAC,KAAK,EAAE,CAAC;QACX,IAAI,GAAG,KAAK,EAAE;YACZ,OAAO;QACT,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9B,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvB,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE;YACrC,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,KAAK,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC;YAClB,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACZ;QACD,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAChB,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;IACd,CAAC;IACD,0DAA0D;IAC1D,UAAU,CAAC,MAAe;QACxB,MAAM,EAAE,GAAG,IAAY,CAAC;QACxB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC;QACrB,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC;QACjC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;YACxC,OAAO,gBAAa,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,MAAM,OAAO,GAAG,gBAAa,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QACpE,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,cAAc;QACZ,MAAM,EAAE,GAAG,IAAY,CAAC;QACxB,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,mCAAmC;QACvD,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC;QACZ,gBAAa,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAChD,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC;QACb,OAAO,EAAE,CAAC;IACZ,CAAC;CACF,CAAC,CAAC;AAEH,IAAA,eAAM,EAAC,eAAM,EAAE;IACb,iBAAiB;QACf,MAAM,CAAC,GAAG,IAAc,CAAC;QACzB,OAAO,yBAAS,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IACnF,CAAC;IACD,mBAAmB,CAAC,CAAY;QAC9B,MAAM,CAAC,GAAG,IAAc,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;QACnB,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;QACrB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACV,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACV,OAAO,IAAI,CAAC;IACd,CAAC;CACF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAa,KAAM,SAAQ,gBAAa;IACtC,YAAY,IAAS,IAAI,KAAK,CAAC,IAAA,kBAAS,EAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACxB,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACvB,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACvB,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACxB,IAAI,KAAK,OAAO,IAAI,YAAG,EAAE,CAAC,CAAC,CAAC;IAC5B,SAAS,KAAK,OAAO,IAAI,eAAM,EAAE,CAAC,CAAC,CAAC;CAErD;AATD,sBASC;AACD,IAAA,iBAAQ,EAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAEzB;;GAEG;AACH,SAAgB,UAAU,KAAK,CAAC;AAAhC,gCAAgC","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
|
+
{"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"]}
|
package/lib/cjs/TextEdit.d.ts
CHANGED
|
@@ -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
|