@actdim/utico 1.2.5 → 1.2.7
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/README.md +73 -3
- package/dist/arrayExtensions.es.js +64 -38
- package/dist/arrayExtensions.es.js.map +1 -1
- package/dist/asyncLock.es.js +45 -30
- package/dist/asyncLock.es.js.map +1 -1
- package/dist/cache/cacheContracts.es.js +8 -4
- package/dist/cache/cacheContracts.es.js.map +1 -1
- package/dist/cache/memoryCache.es.js +28 -13
- package/dist/cache/memoryCache.es.js.map +1 -1
- package/dist/cache/persistentCache.es.js +174 -97
- package/dist/cache/persistentCache.es.js.map +1 -1
- package/dist/dataFormats.es.js +4 -4
- package/dist/dataFormats.es.js.map +1 -1
- package/dist/dateTimeDataFormat.es.js +211 -130
- package/dist/dateTimeDataFormat.es.js.map +1 -1
- package/dist/decorators.es.js +15 -11
- package/dist/decorators.es.js.map +1 -1
- package/dist/gfx/canvasUtils.es.js +197 -114
- package/dist/gfx/canvasUtils.es.js.map +1 -1
- package/dist/gfx/color.es.js +134 -68
- package/dist/gfx/color.es.js.map +1 -1
- package/dist/i18n/cultures.es.js +8 -8
- package/dist/i18n/cultures.es.js.map +1 -1
- package/dist/i18n/enUsCulture.es.js +2 -2
- package/dist/i18n/enUsCulture.es.js.map +1 -1
- package/dist/i18n/euCulture.es.js +2 -2
- package/dist/i18n/euCulture.es.js.map +1 -1
- package/dist/i18n/invariantCulture.es.js +2 -2
- package/dist/i18n/invariantCulture.es.js.map +1 -1
- package/dist/index.es.js.map +1 -1
- package/dist/math.es.js +14 -8
- package/dist/math.es.js.map +1 -1
- package/dist/metadata.es.js +53 -25
- package/dist/metadata.es.js.map +1 -1
- package/dist/patterns.es.js +5 -3
- package/dist/patterns.es.js.map +1 -1
- package/dist/store/dataStore.es.js +241 -157
- package/dist/store/dataStore.es.js.map +1 -1
- package/dist/store/persistentStore.es.js +23 -17
- package/dist/store/persistentStore.es.js.map +1 -1
- package/dist/store/storeContracts.es.js +7 -3
- package/dist/store/storeContracts.es.js.map +1 -1
- package/dist/store/storeDb.es.js +87 -50
- package/dist/store/storeDb.es.js.map +1 -1
- package/dist/stringCore.es.js +60 -22
- package/dist/stringCore.es.js.map +1 -1
- package/dist/structEvent.es.js +30 -17
- package/dist/structEvent.es.js.map +1 -1
- package/dist/typeCore.es.js +25 -11
- package/dist/typeCore.es.js.map +1 -1
- package/dist/typeUtils.es.js +292 -182
- package/dist/typeUtils.es.js.map +1 -1
- package/dist/utils.d.ts +3 -3
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.es.js +138 -81
- package/dist/utils.es.js.map +1 -1
- package/dist/watchable.es.js +50 -27
- package/dist/watchable.es.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,154 +1,237 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
const DOMURL = window.URL || window.webkitURL;
|
|
4
|
+
function createCanvas(w, h) {
|
|
5
|
+
const canvas = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas");
|
|
6
|
+
const context = canvas.getContext("2d");
|
|
7
|
+
if (context) {
|
|
8
|
+
context["imageSmoothingQuality"] = "high";
|
|
9
|
+
}
|
|
10
|
+
canvas.width = w;
|
|
11
|
+
canvas.height = h;
|
|
12
|
+
return { canvas, context };
|
|
5
13
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
14
|
+
__name(createCanvas, "createCanvas");
|
|
15
|
+
const supportExtendedMetrics = "actualBoundingBoxRight" in TextMetrics.prototype;
|
|
16
|
+
function fitText(ctx, text = "", sizeProvider, targetWidth = ctx.canvas.width, fontFamily = "Arial") {
|
|
17
|
+
let fontSize = 1;
|
|
18
|
+
const updateFont = /* @__PURE__ */ __name(() => {
|
|
19
|
+
ctx.font = fontSize + "px " + fontFamily;
|
|
20
|
+
}, "updateFont");
|
|
21
|
+
updateFont();
|
|
22
|
+
let width = getBBOxWidth(text);
|
|
23
|
+
while (width && width <= targetWidth) {
|
|
24
|
+
fontSize++;
|
|
25
|
+
updateFont();
|
|
26
|
+
width = getBBOxWidth(text);
|
|
27
|
+
}
|
|
28
|
+
while (width && width > targetWidth) {
|
|
29
|
+
fontSize -= 0.1;
|
|
30
|
+
updateFont();
|
|
31
|
+
width = getBBOxWidth(text);
|
|
32
|
+
}
|
|
33
|
+
fontSize += 0.1;
|
|
34
|
+
updateFont();
|
|
35
|
+
const offsetLeft = ctx.measureText(text).actualBoundingBoxLeft || 0;
|
|
36
|
+
const [x, y] = sizeProvider(fontSize);
|
|
37
|
+
ctx.fillText(text, x + offsetLeft, y);
|
|
38
|
+
function getBBOxWidth(text2) {
|
|
39
|
+
const measure = ctx.measureText(text2);
|
|
40
|
+
return supportExtendedMetrics ? measure.actualBoundingBoxLeft + measure.actualBoundingBoxRight : measure.width;
|
|
24
41
|
}
|
|
42
|
+
__name(getBBOxWidth, "getBBOxWidth");
|
|
25
43
|
}
|
|
26
|
-
|
|
27
|
-
|
|
44
|
+
__name(fitText, "fitText");
|
|
45
|
+
function encodeUnicode(str) {
|
|
46
|
+
return window.encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (_, s) => String.fromCharCode(parseInt(s, 16)));
|
|
28
47
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
48
|
+
__name(encodeUnicode, "encodeUnicode");
|
|
49
|
+
const html2Svg = (() => {
|
|
50
|
+
const xmlSerializer = new XMLSerializer();
|
|
51
|
+
return async (elements, viewBoxSize, css) => {
|
|
52
|
+
const w = viewBoxSize[0];
|
|
53
|
+
const h = viewBoxSize[1];
|
|
54
|
+
let html = elements.map(
|
|
55
|
+
(el) => `<foreignObject width="${w}" height="${h}">
|
|
35
56
|
<body xmlns="http://www.w3.org/1999/xhtml">
|
|
36
|
-
${
|
|
57
|
+
${el.outerHTML}
|
|
37
58
|
</body>
|
|
38
59
|
</foreignObject>`
|
|
39
60
|
).join("");
|
|
40
|
-
|
|
41
|
-
var
|
|
42
|
-
|
|
61
|
+
html = `<style>${css}</style>${html}`;
|
|
62
|
+
var svgElement = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
63
|
+
svgElement.setAttributeNS(null, "viewBox", `0 0 ${w} ${h}`);
|
|
64
|
+
svgElement.setAttributeNS(null, "width", w + "");
|
|
65
|
+
svgElement.setAttributeNS(null, "height", h + "");
|
|
66
|
+
svgElement.innerHTML = html;
|
|
67
|
+
return xmlSerializer.serializeToString(svgElement);
|
|
43
68
|
};
|
|
44
69
|
})();
|
|
45
|
-
function
|
|
46
|
-
const
|
|
47
|
-
return
|
|
70
|
+
function getSvgImageObjectUrl(svgData) {
|
|
71
|
+
const svgBlob = new Blob([svgData], { type: "image/svg+xml;charset=utf-8" });
|
|
72
|
+
return DOMURL.createObjectURL(svgBlob);
|
|
48
73
|
}
|
|
49
|
-
|
|
50
|
-
|
|
74
|
+
__name(getSvgImageObjectUrl, "getSvgImageObjectUrl");
|
|
75
|
+
function getSvgImageDataUrl(svgData) {
|
|
76
|
+
const svgBase64 = window.btoa(encodeUnicode(svgData));
|
|
77
|
+
return "data:image/svg+xml;base64," + svgBase64;
|
|
51
78
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
79
|
+
__name(getSvgImageDataUrl, "getSvgImageDataUrl");
|
|
80
|
+
const querySvgData = (() => {
|
|
81
|
+
const xmlSerializer = new XMLSerializer();
|
|
82
|
+
return (selector) => {
|
|
83
|
+
const svg = document.querySelector(selector);
|
|
84
|
+
const svgData = xmlSerializer.serializeToString(svg);
|
|
85
|
+
return svgData;
|
|
57
86
|
};
|
|
58
87
|
})();
|
|
59
|
-
function
|
|
60
|
-
return new Promise((
|
|
88
|
+
function toObjectUrl(canvas, mimeType = "image/png", quality) {
|
|
89
|
+
return new Promise((res, rej) => {
|
|
61
90
|
try {
|
|
62
|
-
|
|
63
|
-
(
|
|
64
|
-
|
|
91
|
+
canvas.toBlob(
|
|
92
|
+
(blob) => {
|
|
93
|
+
res(URL.createObjectURL(blob));
|
|
65
94
|
},
|
|
66
|
-
|
|
67
|
-
|
|
95
|
+
mimeType,
|
|
96
|
+
quality
|
|
68
97
|
);
|
|
69
|
-
} catch (
|
|
70
|
-
|
|
98
|
+
} catch (err) {
|
|
99
|
+
rej(err);
|
|
71
100
|
}
|
|
72
101
|
});
|
|
73
102
|
}
|
|
74
|
-
|
|
75
|
-
|
|
103
|
+
__name(toObjectUrl, "toObjectUrl");
|
|
104
|
+
function drawImage(src, context) {
|
|
105
|
+
return new Promise((res, rej) => {
|
|
76
106
|
try {
|
|
77
|
-
const
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
107
|
+
const image = new Image();
|
|
108
|
+
image.crossOrigin = "anonymous";
|
|
109
|
+
image.onload = () => {
|
|
110
|
+
context.drawImage(image, 0, 0, image.width, image.height, 0, 0, context.canvas.width, context.canvas.height);
|
|
111
|
+
res();
|
|
112
|
+
};
|
|
113
|
+
image.src = src;
|
|
114
|
+
} catch (err) {
|
|
115
|
+
rej(err);
|
|
83
116
|
}
|
|
84
117
|
});
|
|
85
118
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
119
|
+
__name(drawImage, "drawImage");
|
|
120
|
+
const drawSvg = /* @__PURE__ */ __name((svgData, context, useDataUrl = false) => {
|
|
121
|
+
const imageSrc = useDataUrl ? getSvgImageDataUrl(svgData) : getSvgImageObjectUrl(svgData);
|
|
122
|
+
return drawImage(imageSrc, context).finally(() => DOMURL.revokeObjectURL(imageSrc));
|
|
123
|
+
}, "drawSvg");
|
|
124
|
+
async function canvasToImage(canvas, size, mimeType = "image/png", quality) {
|
|
125
|
+
const image = new Image();
|
|
126
|
+
image.crossOrigin = "anonymous";
|
|
127
|
+
if (size) {
|
|
128
|
+
if (size[0]) {
|
|
129
|
+
image.width = size[0];
|
|
130
|
+
}
|
|
131
|
+
if (size[1]) {
|
|
132
|
+
image.height = size[1];
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
const imageSrc = await toObjectUrl(canvas, mimeType, quality);
|
|
136
|
+
image.onload = () => DOMURL.revokeObjectURL(imageSrc);
|
|
137
|
+
image.src = imageSrc;
|
|
138
|
+
return image;
|
|
95
139
|
}
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
140
|
+
__name(canvasToImage, "canvasToImage");
|
|
141
|
+
async function objectUrlToDataURL(objectUrl) {
|
|
142
|
+
const response = await fetch(objectUrl);
|
|
143
|
+
const blob = await response.blob();
|
|
144
|
+
return new Promise((res, rej) => {
|
|
99
145
|
try {
|
|
100
|
-
const
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
146
|
+
const reader = new FileReader();
|
|
147
|
+
reader.onloadend = () => res(reader.result);
|
|
148
|
+
reader.readAsDataURL(blob);
|
|
149
|
+
} catch (err) {
|
|
150
|
+
rej(err);
|
|
104
151
|
}
|
|
105
152
|
});
|
|
106
153
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
154
|
+
__name(objectUrlToDataURL, "objectUrlToDataURL");
|
|
155
|
+
const getSvgSize = (() => {
|
|
156
|
+
const domParser = new DOMParser();
|
|
157
|
+
return (svg) => {
|
|
158
|
+
const svgDom = domParser.parseFromString(svg, "text/xml");
|
|
159
|
+
const svgDoc = svgDom.querySelector("svg");
|
|
160
|
+
return getSvgElementSize(svgDoc);
|
|
112
161
|
};
|
|
113
162
|
})();
|
|
114
|
-
function
|
|
115
|
-
let
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
163
|
+
function getSvgElementSize(svgDoc) {
|
|
164
|
+
let w = 0;
|
|
165
|
+
if (svgDoc.width.baseVal.unitType === 5) {
|
|
166
|
+
w = svgDoc.width.baseVal.value;
|
|
167
|
+
}
|
|
168
|
+
if (!w) {
|
|
169
|
+
w = svgDoc.width.baseVal.value;
|
|
170
|
+
}
|
|
171
|
+
if (!w) {
|
|
172
|
+
w = svgDoc.viewBox.baseVal.width;
|
|
173
|
+
}
|
|
174
|
+
let h = 0;
|
|
175
|
+
if (svgDoc.height.baseVal.unitType === 5) {
|
|
176
|
+
h = svgDoc.height.baseVal.value;
|
|
177
|
+
}
|
|
178
|
+
if (!h) {
|
|
179
|
+
h = svgDoc.height.baseVal.value;
|
|
180
|
+
}
|
|
181
|
+
if (!h) {
|
|
182
|
+
h = svgDoc.viewBox.baseVal.height;
|
|
183
|
+
}
|
|
184
|
+
return [w, h];
|
|
119
185
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
186
|
+
__name(getSvgElementSize, "getSvgElementSize");
|
|
187
|
+
const refineSvg = (() => {
|
|
188
|
+
const domParser = new DOMParser();
|
|
189
|
+
return (data) => {
|
|
190
|
+
const svgDom = domParser.parseFromString(data, "text/xml");
|
|
191
|
+
const svgDoc = svgDom.querySelector("svg");
|
|
192
|
+
const size = getSvgElementSize(svgDoc);
|
|
193
|
+
svgDoc.setAttribute("width", `${size[0]}px`);
|
|
194
|
+
svgDoc.setAttribute("height", `${size[1]}px`);
|
|
195
|
+
return svgDoc.outerHTML;
|
|
125
196
|
};
|
|
126
197
|
})();
|
|
127
|
-
function
|
|
128
|
-
if (typeof r
|
|
198
|
+
function drawRoundedRect(context, x, y, w, h, r) {
|
|
199
|
+
if (typeof r === "number") {
|
|
129
200
|
r = { tl: r, tr: r, br: r, bl: r };
|
|
130
|
-
else {
|
|
131
|
-
const
|
|
132
|
-
for (let
|
|
133
|
-
r[
|
|
201
|
+
} else {
|
|
202
|
+
const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };
|
|
203
|
+
for (let side in defaultRadius) {
|
|
204
|
+
r[side] = r[side] || defaultRadius[side];
|
|
205
|
+
}
|
|
134
206
|
}
|
|
135
|
-
|
|
207
|
+
context.beginPath();
|
|
208
|
+
context.moveTo(x + r.tl, y);
|
|
209
|
+
context.lineTo(x + w - r.tr, y);
|
|
210
|
+
context.quadraticCurveTo(x + w, y, x + w, y + r.tr);
|
|
211
|
+
context.lineTo(x + w, y + h - r.br);
|
|
212
|
+
context.quadraticCurveTo(x + w, y + h, x + w - r.br, y + h);
|
|
213
|
+
context.lineTo(x + r.bl, y + h);
|
|
214
|
+
context.quadraticCurveTo(x, y + h, x, y + h - r.bl);
|
|
215
|
+
context.lineTo(x, y + r.tl);
|
|
216
|
+
context.quadraticCurveTo(x, y, x + r.tl, y);
|
|
217
|
+
context.closePath();
|
|
136
218
|
}
|
|
219
|
+
__name(drawRoundedRect, "drawRoundedRect");
|
|
137
220
|
export {
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
221
|
+
canvasToImage,
|
|
222
|
+
createCanvas,
|
|
223
|
+
drawImage,
|
|
224
|
+
drawRoundedRect,
|
|
225
|
+
drawSvg,
|
|
226
|
+
fitText,
|
|
227
|
+
getSvgElementSize,
|
|
228
|
+
getSvgImageDataUrl,
|
|
229
|
+
getSvgImageObjectUrl,
|
|
230
|
+
getSvgSize,
|
|
231
|
+
html2Svg,
|
|
232
|
+
objectUrlToDataURL,
|
|
233
|
+
querySvgData,
|
|
234
|
+
refineSvg,
|
|
235
|
+
toObjectUrl
|
|
153
236
|
};
|
|
154
237
|
//# sourceMappingURL=canvasUtils.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasUtils.es.js","sources":["D:/Src/my/actdim/public/utico/src/gfx/canvasUtils.ts"],"sourcesContent":null,"names":["DOMURL","createCanvas","w","h","canvas","context","supportExtendedMetrics","fitText","ctx","text","sizeProvider","targetWidth","fontFamily","fontSize","updateFont","width","getBBOxWidth","offsetLeft","x","y","measure","encodeUnicode","str","_","s","html2Svg","xmlSerializer","elements","viewBoxSize","css","html","el","svgElement","getSvgImageObjectUrl","svgData","svgBlob","getSvgImageDataUrl","querySvgData","selector","svg","toObjectUrl","mimeType","quality","res","rej","blob","err","drawImage","src","image","drawSvg","useDataUrl","imageSrc","canvasToImage","size","objectUrlToDataURL","objectUrl","reader","getSvgSize","domParser","svgDoc","getSvgElementSize","refineSvg","data","drawRoundedRect","defaultRadius","side"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"canvasUtils.es.js","sources":["D:/Src/my/actdim/public/utico/src/gfx/canvasUtils.ts"],"sourcesContent":["const DOMURL = window.URL || window.webkitURL;\r\n\r\nexport function createCanvas(w: number, h: number /*, dpi?: number*/) {\r\n const canvas = document.createElementNS(\"http://www.w3.org/1999/xhtml\", \"canvas\") as HTMLCanvasElement;\r\n // if (!dpi) {\r\n // dpi = window.devicePixelRatio;\r\n // }\r\n // context2d\r\n const context = canvas.getContext(\"2d\");\r\n if (context) {\r\n // context.imageSmoothingEnabled = true;\r\n // context.mozImageSmoothingEnabled = true;\r\n // context.oImageSmoothingEnabled = true;\r\n // context.webkitImageSmoothingEnabled = true;\r\n context[\"imageSmoothingQuality\"] = \"high\";\r\n }\r\n canvas.width = w;\r\n // canvas.width = w * dpi;\r\n canvas.height = h;\r\n // canvas.height = h * dpi;\r\n\r\n // canvas.style.width = w + \"px\";\r\n // context.scale(dpi, dpi);\r\n return { canvas, context };\r\n}\r\n\r\nconst supportExtendedMetrics = \"actualBoundingBoxRight\" in TextMetrics.prototype;\r\n\r\nexport type TextSizeProvider = (fontSize: number) => [number, number];\r\n\r\nexport function fitText(\r\n ctx: CanvasRenderingContext2D,\r\n text = \"\",\r\n sizeProvider: TextSizeProvider,\r\n targetWidth = ctx.canvas.width,\r\n fontFamily = \"Arial\"\r\n) {\r\n let fontSize = 1;\r\n const updateFont = () => {\r\n ctx.font = fontSize + \"px \" + fontFamily;\r\n };\r\n updateFont();\r\n let width = getBBOxWidth(text);\r\n // first pass width increment = 1\r\n while (width && width <= targetWidth) {\r\n fontSize++;\r\n updateFont();\r\n width = getBBOxWidth(text);\r\n }\r\n // second pass, the other way around, with increment = -0.1\r\n while (width && width > targetWidth) {\r\n fontSize -= 0.1;\r\n updateFont();\r\n width = getBBOxWidth(text);\r\n }\r\n // revert to last valid step\r\n fontSize += 0.1;\r\n updateFont();\r\n\r\n // we need to measure where our bounding box actually starts\r\n const offsetLeft = ctx.measureText(text).actualBoundingBoxLeft || 0;\r\n const [x, y] = sizeProvider(fontSize);\r\n ctx.fillText(text, x + offsetLeft, y);\r\n\r\n function getBBOxWidth(text) {\r\n const measure = ctx.measureText(text);\r\n\r\n return supportExtendedMetrics ? measure.actualBoundingBoxLeft + measure.actualBoundingBoxRight : measure.width;\r\n }\r\n}\r\n\r\nfunction encodeUnicode(str: any) {\r\n // +(\"0x\" + s)\r\n return window.encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (_, s) => String.fromCharCode(parseInt(s, 16)));\r\n // old way\r\n // return window.unescape(window.encodeURIComponent(str))\r\n}\r\n\r\nexport const html2Svg = (() => {\r\n const xmlSerializer = new XMLSerializer();\r\n return async (elements: HTMLElement[], viewBoxSize: number[], css: string) => {\r\n const w = viewBoxSize[0];\r\n const h = viewBoxSize[1];\r\n\r\n let html = elements\r\n .map(\r\n (el) => `<foreignObject width=\"${w}\" height=\"${h}\">\r\n <body xmlns=\"http://www.w3.org/1999/xhtml\">\r\n ${el.outerHTML}\r\n </body>\r\n </foreignObject>`\r\n )\r\n .join(\"\");\r\n html = `<style>${css}</style>${html}`;\r\n\r\n var svgElement = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n svgElement.setAttributeNS(null, \"viewBox\", `0 0 ${w} ${h}`);\r\n svgElement.setAttributeNS(null, \"width\", w + \"\");\r\n svgElement.setAttributeNS(null, \"height\", h + \"\");\r\n svgElement.innerHTML = html;\r\n\r\n return xmlSerializer.serializeToString(svgElement); // svg string\r\n };\r\n})();\r\n\r\nexport function getSvgImageObjectUrl(svgData: string) {\r\n const svgBlob = new Blob([svgData], { type: \"image/svg+xml;charset=utf-8\" });\r\n return DOMURL.createObjectURL(svgBlob);\r\n}\r\n\r\nexport function getSvgImageDataUrl(svgData: string) {\r\n const svgBase64 = window.btoa(encodeUnicode(svgData));\r\n return \"data:image/svg+xml;base64,\" + svgBase64;\r\n // without base64 encoding (ok for simple SVGs):\r\n // return \"data:image/svg+xml;charset=utf-8,\" + window.encodeURIComponent(svgData); // \"data:image/svg+xml;utf8,\"; - incorrect!\r\n}\r\n\r\n// querySvgDataUrl\r\nexport const querySvgData = (() => {\r\n const xmlSerializer = new XMLSerializer();\r\n return (selector: string) => {\r\n const svg = document.querySelector(selector);\r\n const svgData = xmlSerializer.serializeToString(svg);\r\n return svgData;\r\n };\r\n})();\r\n\r\nexport function toObjectUrl(canvas: HTMLCanvasElement, mimeType = \"image/png\", quality?: number) {\r\n // 'image/jpeg', 'image/webp'\r\n return new Promise<string>((res, rej) => {\r\n try {\r\n canvas.toBlob(\r\n (blob) => {\r\n res(URL.createObjectURL(blob));\r\n },\r\n mimeType,\r\n quality\r\n );\r\n } catch (err) {\r\n rej(err);\r\n }\r\n });\r\n}\r\n\r\nexport function drawImage(src: string, context: CanvasRenderingContext2D) {\r\n return new Promise<void>((res, rej) => {\r\n try {\r\n const image = new Image();\r\n // const image = document.createElement('img');\r\n image.crossOrigin = \"anonymous\";\r\n image.onload = () => {\r\n // image.naturalWidth, image.naturalHeight\r\n context.drawImage(image, 0, 0, image.width, image.height, 0, 0, context.canvas.width, context.canvas.height);\r\n res();\r\n };\r\n image.src = src;\r\n } catch (err) {\r\n rej(err);\r\n }\r\n });\r\n}\r\n\r\nexport const drawSvg = (svgData: string, context: CanvasRenderingContext2D, useDataUrl = false) => {\r\n const imageSrc = useDataUrl ? getSvgImageDataUrl(svgData) : getSvgImageObjectUrl(svgData);\r\n return drawImage(imageSrc, context).finally(() => DOMURL.revokeObjectURL(imageSrc));\r\n};\r\n\r\n/*\r\nexport function canvasToImage(canvas: HTMLCanvasElement, size?: number[], mimeType = \"image/png\", quality?: number) {\r\n // const image = document.createElement(\"img\")\r\n const image = new Image();\r\n image.crossOrigin = \"anonymous\";\r\n if (size) {\r\n if (size[0]) {\r\n image.width = size[0];\r\n }\r\n if (size[1]) {\r\n image.height = size[1];\r\n }\r\n }\r\n const imageSrc = canvas.toDataURL(mimeType, quality);\r\n image.src = imageSrc;\r\n return image;\r\n}\r\n*/\r\n\r\nexport async function canvasToImage(canvas: HTMLCanvasElement, size?: number[], mimeType = \"image/png\", quality?: number) {\r\n // document.createElement(\"img\")\r\n const image = new Image();\r\n image.crossOrigin = \"anonymous\";\r\n if (size) {\r\n if (size[0]) {\r\n image.width = size[0];\r\n }\r\n if (size[1]) {\r\n image.height = size[1];\r\n }\r\n }\r\n const imageSrc = await toObjectUrl(canvas, mimeType, quality);\r\n image.onload = () => DOMURL.revokeObjectURL(imageSrc);\r\n image.src = imageSrc;\r\n return image;\r\n}\r\n\r\nexport async function objectUrlToDataURL(objectUrl: string): Promise<string> {\r\n const response = await fetch(objectUrl);\r\n const blob = await response.blob();\r\n\r\n return new Promise((res, rej) => {\r\n try {\r\n const reader = new FileReader();\r\n reader.onloadend = () => res(reader.result as string);\r\n reader.readAsDataURL(blob);\r\n } catch (err) {\r\n rej(err);\r\n }\r\n });\r\n}\r\n\r\nexport const getSvgSize = (() => {\r\n const domParser = new DOMParser();\r\n return (svg: string) => {\r\n const svgDom = domParser.parseFromString(svg, \"text/xml\");\r\n // svgElement/svgNode\r\n // const svgDoc = svgDom.documentElement;\r\n const svgDoc = svgDom.querySelector(\"svg\");\r\n return getSvgElementSize(svgDoc);\r\n };\r\n})();\r\n\r\nexport function getSvgElementSize(svgDoc: SVGSVGElement): [number, number] {\r\n let w = 0;\r\n if (svgDoc.width.baseVal.unitType === 5) {\r\n // units - pixels\r\n w = svgDoc.width.baseVal.value;\r\n }\r\n if (!w) {\r\n w = svgDoc.width.baseVal.value;\r\n }\r\n if (!w) {\r\n w = svgDoc.viewBox.baseVal.width;\r\n }\r\n\r\n let h = 0;\r\n if (svgDoc.height.baseVal.unitType === 5) {\r\n // units - pixels\r\n h = svgDoc.height.baseVal.value;\r\n }\r\n if (!h) {\r\n h = svgDoc.height.baseVal.value;\r\n }\r\n if (!h) {\r\n h = svgDoc.viewBox.baseVal.height;\r\n }\r\n\r\n // const attributes = svgDoc.attributes;\r\n // see also:\r\n // attributes.getNamedItem(\"viewBox\").value\r\n // attributes.getNamedItem('width').value - with units\r\n // attributes.getNamedItem('height').value - with units\r\n\r\n return [w, h];\r\n}\r\n\r\nexport const refineSvg = (() => {\r\n const domParser = new DOMParser();\r\n return (data: string) => {\r\n const svgDom = domParser.parseFromString(data, \"text/xml\");\r\n // const svgDoc = svgDom.documentElement;\r\n const svgDoc = svgDom.querySelector(\"svg\");\r\n const size = getSvgElementSize(svgDoc);\r\n // workaround for https://bugzilla.mozilla.org/show_bug.cgi?id=700533#c39\r\n svgDoc.setAttribute(\"width\", `${size[0]}px`);\r\n svgDoc.setAttribute(\"height\", `${size[1]}px`);\r\n return svgDoc.outerHTML;\r\n };\r\n})();\r\n\r\nexport function drawRoundedRect(\r\n context: CanvasRenderingContext2D,\r\n x: number,\r\n y: number,\r\n w: number,\r\n h: number,\r\n r:\r\n | number\r\n | {\r\n tl: number;\r\n tr: number;\r\n br: number;\r\n bl: number;\r\n }\r\n) {\r\n if (typeof r === \"number\") {\r\n r = { tl: r, tr: r, br: r, bl: r };\r\n } else {\r\n const defaultRadius = { tl: 0, tr: 0, br: 0, bl: 0 };\r\n for (let side in defaultRadius) {\r\n r[side] = r[side] || defaultRadius[side];\r\n }\r\n }\r\n context.beginPath();\r\n context.moveTo(x + r.tl, y);\r\n context.lineTo(x + w - r.tr, y);\r\n context.quadraticCurveTo(x + w, y, x + w, y + r.tr);\r\n context.lineTo(x + w, y + h - r.br);\r\n context.quadraticCurveTo(x + w, y + h, x + w - r.br, y + h);\r\n context.lineTo(x + r.bl, y + h);\r\n context.quadraticCurveTo(x, y + h, x, y + h - r.bl);\r\n context.lineTo(x, y + r.tl);\r\n context.quadraticCurveTo(x, y, x + r.tl, y);\r\n context.closePath();\r\n\r\n // context.fill();\r\n // context.stroke();\r\n\r\n // simple but less accurate\r\n // if (w < 2 * r) {\r\n // r = w / 2;\r\n // }\r\n // if (h < 2 * r) {\r\n // r = h / 2;\r\n // }\r\n // context.beginPath();\r\n // context.moveTo(x + r, y);\r\n // context.arcTo(x + w, y, x + w, y + h, r);\r\n // context.arcTo(x + w, y + h, x, y + h, r);\r\n // context.arcTo(x, y + h, x, y, r);\r\n // context.arcTo(x, y, x + w, y, r);\r\n // context.closePath();\r\n\r\n // https://stackoverflow.com/questions/1255512/how-to-draw-a-rounded-rectangle-on-html-canvas\r\n // + other: https://newfivefour.com/javascript-canvas-rounded-rectangle.html\r\n}\r\n"],"names":["text"],"mappings":"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"}
|
package/dist/gfx/color.es.js
CHANGED
|
@@ -1,70 +1,128 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
function getRandomColorChannelNumber(brightness) {
|
|
4
|
+
const r = 255 - brightness;
|
|
5
|
+
return 0 | Math.random() * r + brightness;
|
|
4
6
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
7
|
+
__name(getRandomColorChannelNumber, "getRandomColorChannelNumber");
|
|
8
|
+
function getRandomColorChannelString(brightness) {
|
|
9
|
+
const n = getRandomColorChannelNumber(brightness);
|
|
10
|
+
let result = n.toString(16);
|
|
11
|
+
if (result.length == 1) {
|
|
12
|
+
result = "0" + result;
|
|
13
|
+
}
|
|
14
|
+
return result;
|
|
8
15
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
16
|
+
__name(getRandomColorChannelString, "getRandomColorChannelString");
|
|
17
|
+
function getRandom32BitColorNumber(alpha = null, brightness = null) {
|
|
18
|
+
if (brightness == void 0) {
|
|
19
|
+
brightness = Math.floor(Math.random() * 255);
|
|
20
|
+
}
|
|
21
|
+
const r = getRandomColorChannelNumber(brightness);
|
|
22
|
+
const g = getRandomColorChannelNumber(brightness);
|
|
23
|
+
const b = getRandomColorChannelNumber(brightness);
|
|
24
|
+
const a = alpha == void 0 ? getRandomColorChannelNumber(brightness) : alpha;
|
|
25
|
+
return getColorNumberFromRgba(r, g, b, a);
|
|
13
26
|
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
27
|
+
__name(getRandom32BitColorNumber, "getRandom32BitColorNumber");
|
|
28
|
+
function getRandom24BitColorNumber(brightness = null) {
|
|
29
|
+
if (brightness == void 0) {
|
|
30
|
+
brightness = Math.floor(Math.random() * 255);
|
|
31
|
+
}
|
|
32
|
+
const r = getRandomColorChannelNumber(brightness);
|
|
33
|
+
const g = getRandomColorChannelNumber(brightness);
|
|
34
|
+
const b = getRandomColorChannelNumber(brightness);
|
|
35
|
+
return getColorNumberFromRgba(r, g, b);
|
|
18
36
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
37
|
+
__name(getRandom24BitColorNumber, "getRandom24BitColorNumber");
|
|
38
|
+
function refineColorHexString(colorHexString) {
|
|
39
|
+
colorHexString = colorHexString.trim().toUpperCase();
|
|
40
|
+
let isNegative = false;
|
|
41
|
+
if (colorHexString.startsWith("-")) {
|
|
42
|
+
isNegative = true;
|
|
43
|
+
colorHexString = colorHexString.slice(1).trimStart();
|
|
44
|
+
}
|
|
45
|
+
if (colorHexString.startsWith("0X")) {
|
|
46
|
+
colorHexString = colorHexString.slice(2);
|
|
47
|
+
}
|
|
48
|
+
if (colorHexString.startsWith("#")) {
|
|
49
|
+
colorHexString = colorHexString.slice(1);
|
|
50
|
+
}
|
|
51
|
+
if (isNegative) {
|
|
52
|
+
colorHexString = "-" + colorHexString;
|
|
53
|
+
}
|
|
54
|
+
return colorHexString;
|
|
23
55
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
56
|
+
__name(refineColorHexString, "refineColorHexString");
|
|
57
|
+
function getColorNumberFromHexString(colorHexString) {
|
|
58
|
+
if (!colorHexString) {
|
|
59
|
+
return 0;
|
|
60
|
+
} else {
|
|
61
|
+
colorHexString = refineColorHexString(colorHexString);
|
|
62
|
+
let result = (
|
|
63
|
+
// new Number(colorHexString).valueOf();
|
|
64
|
+
// parseInt(colorHexString);
|
|
65
|
+
parseInt(colorHexString, 16)
|
|
66
|
+
);
|
|
67
|
+
return result;
|
|
68
|
+
}
|
|
28
69
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
return n > 16777215 ? {
|
|
33
|
-
r: n >> 24 & 255,
|
|
34
|
-
// red
|
|
35
|
-
// r: (colorValue & 0xFF000000) >> 24,
|
|
36
|
-
g: n >> 16 & 255,
|
|
37
|
-
// green
|
|
38
|
-
// g: (colorValue & 0xFF0000) >> 16,
|
|
39
|
-
b: n >> 8 & 255,
|
|
40
|
-
// blue
|
|
41
|
-
// b: (colorValue & 0xFF00) >> 8,
|
|
42
|
-
a: n & 255
|
|
43
|
-
// alpha
|
|
44
|
-
} : {
|
|
45
|
-
r: n >> 16 & 255,
|
|
46
|
-
// r: (colorValue & 0xFF0000) >> 16,
|
|
47
|
-
g: n >> 8 & 255,
|
|
48
|
-
// g: (colorValue & 0xFF00) >> 8,
|
|
49
|
-
b: n & 255,
|
|
50
|
-
// b: colorValue & 0xFF,
|
|
51
|
-
a: 255
|
|
52
|
-
};
|
|
53
|
-
} else
|
|
70
|
+
__name(getColorNumberFromHexString, "getColorNumberFromHexString");
|
|
71
|
+
function getColorRgbaFromHexString(colorHexString) {
|
|
72
|
+
if (!colorHexString) {
|
|
54
73
|
return {
|
|
55
74
|
r: 0,
|
|
56
75
|
g: 0,
|
|
57
76
|
b: 0,
|
|
58
77
|
a: 255
|
|
59
78
|
};
|
|
79
|
+
} else {
|
|
80
|
+
const colorValue = getColorNumberFromHexString(colorHexString);
|
|
81
|
+
if (colorValue > 16777215) {
|
|
82
|
+
return {
|
|
83
|
+
r: colorValue >> 24 & 255,
|
|
84
|
+
// red
|
|
85
|
+
// r: (colorValue & 0xFF000000) >> 24,
|
|
86
|
+
g: colorValue >> 16 & 255,
|
|
87
|
+
// green
|
|
88
|
+
// g: (colorValue & 0xFF0000) >> 16,
|
|
89
|
+
b: colorValue >> 8 & 255,
|
|
90
|
+
// blue
|
|
91
|
+
// b: (colorValue & 0xFF00) >> 8,
|
|
92
|
+
a: colorValue & 255
|
|
93
|
+
// alpha
|
|
94
|
+
};
|
|
95
|
+
} else {
|
|
96
|
+
return {
|
|
97
|
+
r: colorValue >> 16 & 255,
|
|
98
|
+
// r: (colorValue & 0xFF0000) >> 16,
|
|
99
|
+
g: colorValue >> 8 & 255,
|
|
100
|
+
// g: (colorValue & 0xFF00) >> 8,
|
|
101
|
+
b: colorValue & 255,
|
|
102
|
+
// b: colorValue & 0xFF,
|
|
103
|
+
a: 255
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
60
107
|
}
|
|
61
|
-
|
|
62
|
-
|
|
108
|
+
__name(getColorRgbaFromHexString, "getColorRgbaFromHexString");
|
|
109
|
+
function get24bitColorHexStringFromNumber(color) {
|
|
110
|
+
if (color == null || Number.isNaN(color)) {
|
|
111
|
+
return "";
|
|
112
|
+
}
|
|
113
|
+
color = Math.floor(color);
|
|
114
|
+
return "#" + ("000000" + color.toString(16)).slice(-6);
|
|
63
115
|
}
|
|
64
|
-
|
|
65
|
-
|
|
116
|
+
__name(get24bitColorHexStringFromNumber, "get24bitColorHexStringFromNumber");
|
|
117
|
+
function get32BitColorHexStringFromNumber(color) {
|
|
118
|
+
if (color == null || Number.isNaN(color)) {
|
|
119
|
+
return "";
|
|
120
|
+
}
|
|
121
|
+
color = Math.floor(color);
|
|
122
|
+
return "#" + ("00000000" + color.toString(16)).slice(-8);
|
|
66
123
|
}
|
|
67
|
-
|
|
124
|
+
__name(get32BitColorHexStringFromNumber, "get32BitColorHexStringFromNumber");
|
|
125
|
+
const ColorDepthMode = {
|
|
68
126
|
Bit24: "24bit",
|
|
69
127
|
// always 24-bit, alpha ignored
|
|
70
128
|
Bit32: "32bit",
|
|
@@ -72,24 +130,32 @@ const M = {
|
|
|
72
130
|
Auto: "auto"
|
|
73
131
|
// 24-bit if alpha not provided, 32-bit otherwise
|
|
74
132
|
};
|
|
75
|
-
function
|
|
76
|
-
let
|
|
77
|
-
|
|
133
|
+
function getColorNumberFromRgba(r, g, b, a = void 0, mode = "auto") {
|
|
134
|
+
let result;
|
|
135
|
+
const use24 = mode === "24bit" || mode === "auto" && a == void 0;
|
|
136
|
+
if (use24) {
|
|
137
|
+
result = (r << 16) + (g << 8) + b;
|
|
138
|
+
} else {
|
|
139
|
+
result = (r << 24) + (g << 16) + (b << 8) + (a ?? 255);
|
|
140
|
+
}
|
|
141
|
+
return result >>> 0;
|
|
78
142
|
}
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
143
|
+
__name(getColorNumberFromRgba, "getColorNumberFromRgba");
|
|
144
|
+
function getColorHexStringFromRgba(r, g, b, a = void 0) {
|
|
145
|
+
const value = getColorNumberFromRgba(r, g, b, a);
|
|
146
|
+
return get24bitColorHexStringFromNumber(value);
|
|
82
147
|
}
|
|
148
|
+
__name(getColorHexStringFromRgba, "getColorHexStringFromRgba");
|
|
83
149
|
export {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
150
|
+
ColorDepthMode,
|
|
151
|
+
get24bitColorHexStringFromNumber,
|
|
152
|
+
get32BitColorHexStringFromNumber,
|
|
153
|
+
getColorHexStringFromRgba,
|
|
154
|
+
getColorNumberFromHexString,
|
|
155
|
+
getColorNumberFromRgba,
|
|
156
|
+
getColorRgbaFromHexString,
|
|
157
|
+
getRandom24BitColorNumber,
|
|
158
|
+
getRandom32BitColorNumber,
|
|
159
|
+
getRandomColorChannelString
|
|
94
160
|
};
|
|
95
161
|
//# sourceMappingURL=color.es.js.map
|