@actdim/utico 1.1.1 → 1.1.2

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.
@@ -1,45 +1,45 @@
1
1
  const g = window.URL || window.webkitURL;
2
2
  function L(t, e) {
3
- const n = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"), o = n.getContext("2d");
4
- return o && (o.imageSmoothingQuality = "high"), n.width = t, n.height = e, { canvas: n, context: o };
3
+ const n = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"), i = n.getContext("2d");
4
+ return i && (i.imageSmoothingQuality = "high"), n.width = t, n.height = e, { canvas: n, context: i };
5
5
  }
6
- const f = "actualBoundingBoxRight" in TextMetrics.prototype;
7
- function R(t, e = "", n, o = t.canvas.width, r = "Arial") {
8
- let a = 1;
6
+ const b = "actualBoundingBoxRight" in TextMetrics.prototype;
7
+ function B(t, e = "", n, i = t.canvas.width, a = "Arial") {
8
+ let r = 1;
9
9
  const s = () => {
10
- t.font = a + "px " + r;
10
+ t.font = r + "px " + a;
11
11
  };
12
12
  s();
13
- let i = l(e);
14
- for (; i && i <= o; )
15
- a++, s(), i = l(e);
16
- for (; i && i > o; )
17
- a -= 0.1, s(), i = l(e);
18
- a += 0.1, s();
19
- const c = t.measureText(e).actualBoundingBoxLeft || 0, [d, h] = n(a);
20
- t.fillText(e, d + c, h);
21
- function l(w) {
13
+ let o = c(e);
14
+ for (; o && o <= i; )
15
+ r++, s(), o = c(e);
16
+ for (; o && o > i; )
17
+ r -= 0.1, s(), o = c(e);
18
+ r += 0.1, s();
19
+ const l = t.measureText(e).actualBoundingBoxLeft || 0, [m, h] = n(r);
20
+ t.fillText(e, m + l, h);
21
+ function c(w) {
22
22
  const u = t.measureText(w);
23
- return f ? u.actualBoundingBoxLeft + u.actualBoundingBoxRight : u.width;
23
+ return b ? u.actualBoundingBoxLeft + u.actualBoundingBoxRight : u.width;
24
24
  }
25
25
  }
26
- function b(t) {
26
+ function f(t) {
27
27
  return window.encodeURIComponent(t).replace(/%([0-9A-F]{2})/g, (e, n) => String.fromCharCode(parseInt(n, 16)));
28
28
  }
29
- const y = (() => {
29
+ const R = (() => {
30
30
  const t = new XMLSerializer();
31
- return async (e, n, o) => {
32
- const r = n[0], a = n[1];
31
+ return async (e, n, i) => {
32
+ const a = n[0], r = n[1];
33
33
  let s = e.map(
34
- (c) => `<foreignObject width="${r}" height="${a}">
34
+ (l) => `<foreignObject width="${a}" height="${r}">
35
35
  <body xmlns="http://www.w3.org/1999/xhtml">
36
- ${c.outerHTML}
36
+ ${l.outerHTML}
37
37
  </body>
38
38
  </foreignObject>`
39
39
  ).join("");
40
- s = `<style>${o}</style>${s}`;
41
- var i = document.createElementNS("http://www.w3.org/2000/svg", "svg");
42
- return i.setAttributeNS(null, "viewBox", `0 0 ${r} ${a}`), i.setAttributeNS(null, "width", r + ""), i.setAttributeNS(null, "height", a + ""), i.innerHTML = s, t.serializeToString(i);
40
+ s = `<style>${i}</style>${s}`;
41
+ var o = document.createElementNS("http://www.w3.org/2000/svg", "svg");
42
+ return o.setAttributeNS(null, "viewBox", `0 0 ${a} ${r}`), o.setAttributeNS(null, "width", a + ""), o.setAttributeNS(null, "height", r + ""), o.innerHTML = s, t.serializeToString(o);
43
43
  };
44
44
  })();
45
45
  function v(t) {
@@ -47,9 +47,9 @@ function v(t) {
47
47
  return g.createObjectURL(e);
48
48
  }
49
49
  function S(t) {
50
- return "data:image/svg+xml;base64," + window.btoa(b(t));
50
+ return "data:image/svg+xml;base64," + window.btoa(f(t));
51
51
  }
52
- const B = (() => {
52
+ const U = (() => {
53
53
  const t = new XMLSerializer();
54
54
  return (e) => {
55
55
  const n = document.querySelector(e);
@@ -57,105 +57,98 @@ const B = (() => {
57
57
  };
58
58
  })();
59
59
  function p(t, e = "image/png", n) {
60
- return new Promise((o, r) => {
60
+ return new Promise((i, a) => {
61
61
  try {
62
62
  t.toBlob(
63
- (a) => {
64
- o(URL.createObjectURL(a));
63
+ (r) => {
64
+ i(URL.createObjectURL(r));
65
65
  },
66
66
  e,
67
67
  n
68
68
  );
69
- } catch (a) {
70
- r(a);
69
+ } catch (r) {
70
+ a(r);
71
71
  }
72
72
  });
73
73
  }
74
74
  function T(t, e) {
75
- return new Promise((n, o) => {
75
+ return new Promise((n, i) => {
76
76
  try {
77
- const r = new Image();
78
- r.crossOrigin = "anonymous", r.onload = () => {
79
- e.drawImage(r, 0, 0, r.width, r.height, 0, 0, e.canvas.width, e.canvas.height), n();
80
- }, r.src = t;
81
- } catch (r) {
82
- o(r);
77
+ const a = new Image();
78
+ a.crossOrigin = "anonymous", a.onload = () => {
79
+ e.drawImage(a, 0, 0, a.width, a.height, 0, 0, e.canvas.width, e.canvas.height), n();
80
+ }, a.src = t;
81
+ } catch (a) {
82
+ i(a);
83
83
  }
84
84
  });
85
85
  }
86
- const U = (t, e, n = !1) => {
87
- const o = n ? S(t) : v(t);
88
- return T(o, e).finally(() => g.revokeObjectURL(o));
86
+ const O = (t, e, n = !1) => {
87
+ const i = n ? S(t) : v(t);
88
+ return T(i, e).finally(() => g.revokeObjectURL(i));
89
89
  };
90
- function O(t, e, n = "image/png", o) {
91
- const r = new Image();
92
- r.crossOrigin = "anonymous", e && (e[0] && (r.width = e[0]), e[1] && (r.height = e[1]));
93
- const a = t.toDataURL(n, o);
94
- return r.src = a, r;
95
- }
96
- async function A(t, e, n = "image/png", o) {
97
- const r = new Image();
98
- r.crossOrigin = "anonymous", e && (e[0] && (r.width = e[0]), e[1] && (r.height = e[1]));
99
- const a = await p(t, n, o);
100
- return r.onload = () => g.revokeObjectURL(a), r.src = a, r;
90
+ async function y(t, e, n = "image/png", i) {
91
+ const a = new Image();
92
+ a.crossOrigin = "anonymous", e && (e[0] && (a.width = e[0]), e[1] && (a.height = e[1]));
93
+ const r = await p(t, n, i);
94
+ return a.onload = () => g.revokeObjectURL(r), a.src = r, a;
101
95
  }
102
- async function I(t) {
96
+ async function j(t) {
103
97
  const n = await (await fetch(t)).blob();
104
- return new Promise((o, r) => {
98
+ return new Promise((i, a) => {
105
99
  try {
106
- const a = new FileReader();
107
- a.onloadend = () => o(a.result), a.readAsDataURL(n);
108
- } catch (a) {
109
- r(a);
100
+ const r = new FileReader();
101
+ r.onloadend = () => i(r.result), r.readAsDataURL(n);
102
+ } catch (r) {
103
+ a(r);
110
104
  }
111
105
  });
112
106
  }
113
- const j = (() => {
107
+ const M = (() => {
114
108
  const t = new DOMParser();
115
109
  return (e) => {
116
- const o = t.parseFromString(e, "text/xml").querySelector("svg");
117
- return m(o);
110
+ const i = t.parseFromString(e, "text/xml").querySelector("svg");
111
+ return d(i);
118
112
  };
119
113
  })();
120
- function m(t) {
114
+ function d(t) {
121
115
  let e = 0;
122
116
  t.width.baseVal.unitType === 5 && (e = t.width.baseVal.value), e || (e = t.width.baseVal.value), e || (e = t.viewBox.baseVal.width);
123
117
  let n = 0;
124
118
  return t.height.baseVal.unitType === 5 && (n = t.height.baseVal.value), n || (n = t.height.baseVal.value), n || (n = t.viewBox.baseVal.height), [e, n];
125
119
  }
126
- const M = (() => {
120
+ const C = (() => {
127
121
  const t = new DOMParser();
128
122
  return (e) => {
129
- const o = t.parseFromString(e, "text/xml").querySelector("svg"), r = m(o);
130
- return o.setAttribute("width", `${r[0]}px`), o.setAttribute("height", `${r[1]}px`), o.outerHTML;
123
+ const i = t.parseFromString(e, "text/xml").querySelector("svg"), a = d(i);
124
+ return i.setAttribute("width", `${a[0]}px`), i.setAttribute("height", `${a[1]}px`), i.outerHTML;
131
125
  };
132
126
  })();
133
- function C(t, e, n, o, r, a) {
134
- if (typeof a == "number")
135
- a = { tl: a, tr: a, br: a, bl: a };
127
+ function I(t, e, n, i, a, r) {
128
+ if (typeof r == "number")
129
+ r = { tl: r, tr: r, br: r, bl: r };
136
130
  else {
137
131
  const s = { tl: 0, tr: 0, br: 0, bl: 0 };
138
- for (let i in s)
139
- a[i] = a[i] || s[i];
132
+ for (let o in s)
133
+ r[o] = r[o] || s[o];
140
134
  }
141
- t.beginPath(), t.moveTo(e + a.tl, n), t.lineTo(e + o - a.tr, n), t.quadraticCurveTo(e + o, n, e + o, n + a.tr), t.lineTo(e + o, n + r - a.br), t.quadraticCurveTo(e + o, n + r, e + o - a.br, n + r), t.lineTo(e + a.bl, n + r), t.quadraticCurveTo(e, n + r, e, n + r - a.bl), t.lineTo(e, n + a.tl), t.quadraticCurveTo(e, n, e + a.tl, n), t.closePath();
135
+ t.beginPath(), t.moveTo(e + r.tl, n), t.lineTo(e + i - r.tr, n), t.quadraticCurveTo(e + i, n, e + i, n + r.tr), t.lineTo(e + i, n + a - r.br), t.quadraticCurveTo(e + i, n + a, e + i - r.br, n + a), t.lineTo(e + r.bl, n + a), t.quadraticCurveTo(e, n + a, e, n + a - r.bl), t.lineTo(e, n + r.tl), t.quadraticCurveTo(e, n, e + r.tl, n), t.closePath();
142
136
  }
143
137
  export {
144
- O as canvasToImage,
145
- A as canvasToImageAsync,
138
+ y as canvasToImage,
146
139
  L as createCanvas,
147
- T as drawImageAsync,
148
- C as drawRoundedRect,
149
- U as drawSvgAsync,
150
- R as fitText,
151
- m as getSvgElementSize,
140
+ T as drawImage,
141
+ I as drawRoundedRect,
142
+ O as drawSvg,
143
+ B as fitText,
144
+ d as getSvgElementSize,
152
145
  S as getSvgImageDataUrl,
153
146
  v as getSvgImageObjectUrl,
154
- j as getSvgSize,
155
- y as html2SvgAsync,
156
- I as objectUrlToDataURL,
157
- B as querySvgData,
158
- M as refineSvg,
147
+ M as getSvgSize,
148
+ R as html2Svg,
149
+ j as objectUrlToDataURL,
150
+ U as querySvgData,
151
+ C as refineSvg,
159
152
  p as toObjectUrl
160
153
  };
161
154
  //# 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":["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 html2SvgAsync = (() => {\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 drawImageAsync(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 drawSvgAsync = (svgData: string, context: CanvasRenderingContext2D, useDataUrl = false) => {\r\n const imageSrc = useDataUrl ? getSvgImageDataUrl(svgData) : getSvgImageObjectUrl(svgData);\r\n return drawImageAsync(imageSrc, context).finally(() => DOMURL.revokeObjectURL(imageSrc));\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\nexport async function canvasToImageAsync(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":["DOMURL","createCanvas","w","h","canvas","context","supportExtendedMetrics","fitText","ctx","text","sizeProvider","targetWidth","fontFamily","fontSize","updateFont","width","getBBOxWidth","offsetLeft","x","y","measure","encodeUnicode","str","_","s","html2SvgAsync","xmlSerializer","elements","viewBoxSize","css","html","el","svgElement","getSvgImageObjectUrl","svgData","svgBlob","getSvgImageDataUrl","querySvgData","selector","svg","toObjectUrl","mimeType","quality","res","rej","blob","err","drawImageAsync","src","image","drawSvgAsync","useDataUrl","imageSrc","canvasToImage","size","canvasToImageAsync","objectUrlToDataURL","objectUrl","reader","getSvgSize","domParser","svgDoc","getSvgElementSize","refineSvg","data","drawRoundedRect","r","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":["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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"}
@@ -4,4 +4,5 @@ export type IPropertyMetadataItem = {
4
4
  export declare function updatePropertyMetadata<T extends object>(target: T, propertyName: keyof T, value: any, slotName: string): void;
5
5
  export declare function getPropertyMetadata<T extends object>(target: T, propertyName: keyof T, slotName?: string): any;
6
6
  export declare function getPropertyMetadataItem<TMetadataItem>(metadata: WeakMap<any, TMetadataItem>, obj: any): TMetadataItem;
7
+ export declare function metadata(value: any, slotName: string): (target: any, propertyKey: PropertyKey) => void;
7
8
  //# sourceMappingURL=metadata.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAAE,CAAC,WAAW,EAAE,WAAW,GAAG,GAAG,CAAA;CAAE,CAAC;AAKxE,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,QAatH;AAGD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,OAmBxG;AAED,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,GAAG,EAAE,GAAG,iBAmBrG"}
1
+ {"version":3,"file":"metadata.d.ts","sourceRoot":"","sources":["../src/metadata.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,qBAAqB,GAAG;IAAE,CAAC,WAAW,EAAE,WAAW,GAAG,GAAG,CAAA;CAAE,CAAC;AAKxE,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,QAatH;AAGD,wBAAgB,mBAAmB,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,EAAE,QAAQ,CAAC,EAAE,MAAM,OAmBxG;AAED,wBAAgB,uBAAuB,CAAC,aAAa,EAAE,QAAQ,EAAE,OAAO,CAAC,GAAG,EAAE,aAAa,CAAC,EAAE,GAAG,EAAE,GAAG,iBAmBrG;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,IAChC,QAAQ,GAAG,EAAE,aAAa,WAAW,UAGzD"}
@@ -1,29 +1,35 @@
1
1
  const p = /* @__PURE__ */ new WeakMap();
2
- function f(r, n, e, t) {
3
- let a = p.get(r);
4
- a || (a = {}, p.set(r, a));
5
- const o = n;
6
- a[o] || (a[o] = {}), a[o][t] = e;
2
+ function i(r, a, e, t) {
3
+ let n = p.get(r);
4
+ n || (n = {}, p.set(r, n));
5
+ const o = a;
6
+ n[o] || (n[o] = {}), n[o][t] = e;
7
7
  }
8
- function y(r, n, e) {
9
- if (r && n) {
10
- const t = i(p, r);
8
+ function u(r, a, e) {
9
+ if (r && a) {
10
+ const t = f(p, r);
11
11
  if (t) {
12
- const o = t[n];
12
+ const o = t[a];
13
13
  if (o)
14
14
  return e ? o[e] : o;
15
15
  }
16
16
  }
17
17
  }
18
- function i(r, n) {
18
+ function f(r, a) {
19
19
  let e = null, t;
20
- for (; t = Object.getPrototypeOf(t || n), !(!t || (e = r.get(t), e)); )
20
+ for (; t = Object.getPrototypeOf(t || a), !(!t || (e = r.get(t), e)); )
21
21
  ;
22
22
  return e;
23
23
  }
24
+ function y(r, a) {
25
+ return function(e, t) {
26
+ i(e, t, r, a);
27
+ };
28
+ }
24
29
  export {
25
- y as getPropertyMetadata,
26
- i as getPropertyMetadataItem,
27
- f as updatePropertyMetadata
30
+ u as getPropertyMetadata,
31
+ f as getPropertyMetadataItem,
32
+ y as metadata,
33
+ i as updatePropertyMetadata
28
34
  };
29
35
  //# sourceMappingURL=metadata.es.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata.es.js","sources":["D:/Src/my/actdim/public/utico/src/metadata.ts"],"sourcesContent":["export type IPropertyMetadataItem = { [propertyKey: PropertyKey]: any };\r\n\r\nconst propertyMetadataBag = new WeakMap<any, IPropertyMetadataItem>();\r\n\r\n// updateMemberMetadata\r\nexport function updatePropertyMetadata<T extends object>(target: T, propertyName: keyof T, value: any, slotName: string) {\r\n // metadata container\r\n let metadataItem = propertyMetadataBag.get(target);\r\n if (!metadataItem) {\r\n metadataItem = {};\r\n propertyMetadataBag.set(target, metadataItem);\r\n }\r\n const propertyKey = propertyName as PropertyKey;\r\n if (!metadataItem[propertyKey]) {\r\n metadataItem[propertyKey] = {};\r\n }\r\n metadataItem[propertyKey][slotName] = value;\r\n\r\n}\r\n\r\n// getMemberMetadata\r\nexport function getPropertyMetadata<T extends object>(target: T, propertyName: keyof T, slotName?: string) {\r\n // target - obj\r\n if (target && propertyName) {\r\n // metadata container\r\n const metadataItem = getPropertyMetadataItem(propertyMetadataBag, target);\r\n if (metadataItem) {\r\n const propertyKey = propertyName as PropertyKey;\r\n const propertyMetadata = metadataItem[propertyKey];\r\n if (propertyMetadata) {\r\n if (slotName) {\r\n return propertyMetadata[slotName];\r\n } else {\r\n return propertyMetadata;\r\n }\r\n }\r\n }\r\n\r\n }\r\n return undefined;\r\n}\r\n\r\nexport function getPropertyMetadataItem<TMetadataItem>(metadata: WeakMap<any, TMetadataItem>, obj: any) {\r\n\r\n // using prototype chain\r\n\r\n let result: TMetadataItem = null;\r\n let prototype;\r\n while (true) {\r\n prototype = Object.getPrototypeOf(prototype || obj);\r\n // actually for the most cases we can stop traversal when prototype === Object.prototype, but it is possible to set metadata for any lavel in prototype chain\r\n if (!prototype) {\r\n break;\r\n }\r\n result = metadata.get(prototype);\r\n if (result) {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}"],"names":["propertyMetadataBag","updatePropertyMetadata","target","propertyName","value","slotName","metadataItem","propertyKey","getPropertyMetadata","getPropertyMetadataItem","propertyMetadata","metadata","obj","result","prototype"],"mappings":"AAEA,MAAMA,wBAA0B,QAAA;AAGzB,SAASC,EAAyCC,GAAWC,GAAuBC,GAAYC,GAAkB;AAErH,MAAIC,IAAeN,EAAoB,IAAIE,CAAM;AACjD,EAAKI,MACDA,IAAe,CAAA,GACfN,EAAoB,IAAIE,GAAQI,CAAY;AAEhD,QAAMC,IAAcJ;AACpB,EAAKG,EAAaC,CAAW,MACzBD,EAAaC,CAAW,IAAI,CAAA,IAEhCD,EAAaC,CAAW,EAAEF,CAAQ,IAAID;AAE1C;AAGO,SAASI,EAAsCN,GAAWC,GAAuBE,GAAmB;AAEvG,MAAIH,KAAUC,GAAc;AAExB,UAAMG,IAAeG,EAAwBT,GAAqBE,CAAM;AACxE,QAAII,GAAc;AAEd,YAAMI,IAAmBJ,EADLH,CAC6B;AACjD,UAAIO;AACA,eAAIL,IACOK,EAAiBL,CAAQ,IAEzBK;AAAA,IAGnB;AAAA,EAEJ;AAEJ;AAEO,SAASD,EAAuCE,GAAuCC,GAAU;AAIpG,MAAIC,IAAwB,MACxBC;AACJ,SACIA,IAAY,OAAO,eAAeA,KAAaF,CAAG,GAE9C,GAACE,MAGLD,IAASF,EAAS,IAAIG,CAAS,GAC3BD;AAAJ;AAKJ,SAAOA;AACX;"}
1
+ {"version":3,"file":"metadata.es.js","sources":["D:/Src/my/actdim/public/utico/src/metadata.ts"],"sourcesContent":["export type IPropertyMetadataItem = { [propertyKey: PropertyKey]: any };\r\n\r\nconst propertyMetadataBag = new WeakMap<any, IPropertyMetadataItem>();\r\n\r\n// updateMemberMetadata\r\nexport function updatePropertyMetadata<T extends object>(target: T, propertyName: keyof T, value: any, slotName: string) {\r\n // metadata container\r\n let metadataItem = propertyMetadataBag.get(target);\r\n if (!metadataItem) {\r\n metadataItem = {};\r\n propertyMetadataBag.set(target, metadataItem);\r\n }\r\n const propertyKey = propertyName as PropertyKey;\r\n if (!metadataItem[propertyKey]) {\r\n metadataItem[propertyKey] = {};\r\n }\r\n metadataItem[propertyKey][slotName] = value;\r\n\r\n}\r\n\r\n// getMemberMetadata\r\nexport function getPropertyMetadata<T extends object>(target: T, propertyName: keyof T, slotName?: string) {\r\n // target - obj\r\n if (target && propertyName) {\r\n // metadata container\r\n const metadataItem = getPropertyMetadataItem(propertyMetadataBag, target);\r\n if (metadataItem) {\r\n const propertyKey = propertyName as PropertyKey;\r\n const propertyMetadata = metadataItem[propertyKey];\r\n if (propertyMetadata) {\r\n if (slotName) {\r\n return propertyMetadata[slotName];\r\n } else {\r\n return propertyMetadata;\r\n }\r\n }\r\n }\r\n\r\n }\r\n return undefined;\r\n}\r\n\r\nexport function getPropertyMetadataItem<TMetadataItem>(metadata: WeakMap<any, TMetadataItem>, obj: any) {\r\n\r\n // using prototype chain\r\n\r\n let result: TMetadataItem = null;\r\n let prototype;\r\n while (true) {\r\n prototype = Object.getPrototypeOf(prototype || obj);\r\n // actually for the most cases we can stop traversal when prototype === Object.prototype, but it is possible to set metadata for any lavel in prototype chain\r\n if (!prototype) {\r\n break;\r\n }\r\n result = metadata.get(prototype);\r\n if (result) {\r\n break;\r\n }\r\n }\r\n\r\n return result;\r\n}\r\n\r\nexport function metadata(value: any, slotName: string) {\r\n return function (target: any, propertyKey: PropertyKey) {\r\n updatePropertyMetadata(target, propertyKey, value, slotName);\r\n }\r\n}"],"names":["propertyMetadataBag","updatePropertyMetadata","target","propertyName","value","slotName","metadataItem","propertyKey","getPropertyMetadata","getPropertyMetadataItem","propertyMetadata","metadata","obj","result","prototype"],"mappings":"AAEA,MAAMA,wBAA0B,QAAA;AAGzB,SAASC,EAAyCC,GAAWC,GAAuBC,GAAYC,GAAkB;AAErH,MAAIC,IAAeN,EAAoB,IAAIE,CAAM;AACjD,EAAKI,MACDA,IAAe,CAAA,GACfN,EAAoB,IAAIE,GAAQI,CAAY;AAEhD,QAAMC,IAAcJ;AACpB,EAAKG,EAAaC,CAAW,MACzBD,EAAaC,CAAW,IAAI,CAAA,IAEhCD,EAAaC,CAAW,EAAEF,CAAQ,IAAID;AAE1C;AAGO,SAASI,EAAsCN,GAAWC,GAAuBE,GAAmB;AAEvG,MAAIH,KAAUC,GAAc;AAExB,UAAMG,IAAeG,EAAwBT,GAAqBE,CAAM;AACxE,QAAII,GAAc;AAEd,YAAMI,IAAmBJ,EADLH,CAC6B;AACjD,UAAIO;AACA,eAAIL,IACOK,EAAiBL,CAAQ,IAEzBK;AAAA,IAGnB;AAAA,EAEJ;AAEJ;AAEO,SAASD,EAAuCE,GAAuCC,GAAU;AAIpG,MAAIC,IAAwB,MACxBC;AACJ,SACIA,IAAY,OAAO,eAAeA,KAAaF,CAAG,GAE9C,GAACE,MAGLD,IAASF,EAAS,IAAIG,CAAS,GAC3BD;AAAJ;AAKJ,SAAOA;AACX;AAEO,SAASF,EAASP,GAAYC,GAAkB;AACnD,SAAO,SAAUH,GAAaK,GAA0B;AACpD,IAAAN,EAAuBC,GAAQK,GAAaH,GAAOC,CAAQ;AAAA,EAC/D;AACJ;"}
@@ -5,20 +5,20 @@ declare class StoreCollection<T extends MetadataRecord = MetadataRecord, TValue
5
5
  private _metadata;
6
6
  constructor(metadata: Dexie.Collection<T>);
7
7
  private get db();
8
- toArrayAsync(orderBy?: keyof T, orderDirection?: OrderDirection, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;
9
- orderByAsync(field: keyof T, direction: OrderDirection, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;
8
+ toArray(orderBy?: keyof T, orderDirection?: OrderDirection, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;
9
+ orderBy(field: keyof T, direction: OrderDirection, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;
10
10
  filter<S extends T>(filter: (x: T) => x is S): StoreCollection<S, TValue>;
11
11
  limit(n: number): StoreCollection<T, TValue>;
12
12
  offset(n: number): StoreCollection<T, TValue>;
13
- getKeysAsync(): Promise<T["key"][]>;
14
- getCountAsync(): Dexie.PromiseExtended<number>;
15
- getFilterKeysAsync(distinct: boolean): {
13
+ getKeys(): Promise<T["key"][]>;
14
+ getCount(): Dexie.PromiseExtended<number>;
15
+ getFilterKeys(distinct: boolean): {
16
16
  (): Dexie.PromiseExtended<Dexie.IndexableTypeArray>;
17
17
  <R>(thenShortcut: Dexie.ThenShortcut<Dexie.IndexableTypeArray, R>): Dexie.PromiseExtended<R>;
18
18
  };
19
- modifyMetadataAsync(callback: (metadataRecord: T) => void, transactionMode?: TransactionMode): Promise<number>;
20
- modifyDataAsync(callback: (dataRecord: DataRecord) => void, transactionMode?: TransactionMode): Promise<number>;
21
- modifyAsync(metadataCallback: (metadataRecord: T) => void, dataCallback: (dataRecord: DataRecord) => void, transactionMode?: TransactionMode): Promise<number>;
19
+ modifyMetadata(callback: (metadataRecord: T) => void, transactionMode?: TransactionMode): Promise<number>;
20
+ modifyData(callback: (dataRecord: DataRecord) => void, transactionMode?: TransactionMode): Promise<number>;
21
+ modify(metadataCallback: (metadataRecord: T) => void, dataCallback: (dataRecord: DataRecord) => void, transactionMode?: TransactionMode): Promise<number>;
22
22
  }
23
23
  interface IWhereFilter<T extends IndexableType, TResult = any> {
24
24
  constructor(source: Dexie.WhereClause<any, any>): any;
@@ -48,21 +48,21 @@ interface IWhereFilter<T extends IndexableType, TResult = any> {
48
48
  export declare class DataStore<T extends MetadataRecord> implements StoreBase {
49
49
  private _db;
50
50
  constructor(name: string, metadataFieldDefTemplate: keyof T extends string ? FieldDefTemplate<keyof T> : never);
51
- dispose(): void;
52
- openAsync(): Promise<void>;
53
- execAsync<T>(action: () => Promise<T>, transactionMode?: TransactionMode): Promise<T>;
54
- getKeysAsync(): Promise<string[]>;
55
- containsAsync(key: string, transactionMode?: TransactionMode): Promise<boolean>;
56
- deleteAsync(key: string, transactionMode?: TransactionMode): Promise<void>;
57
- bulkDeleteAsync(keys: string[], transactionMode?: TransactionMode): Promise<void>;
58
- clearAsync(transactionMode?: TransactionMode): Promise<void>;
59
- getAsync<TValue = any>(key: string, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>>;
60
- setAsync<TValue = any>(metadataRecord: T, value: TValue, transactionMode?: TransactionMode): Promise<string>;
61
- getOrSetAsync<TValue = any>(metadataRecord: T, factory: (metadataRecord: T) => TValue, transactionMode?: TransactionMode): Promise<StoreItem<T, any>>;
62
- updateAsync<TValue = any>(key: string, metadataChanges: KeyPathValueMap<T>, valueChanges?: KeyPathValueMap<TValue>, transactionMode?: TransactionMode): Promise<number>;
63
- bulkUpdateAsync(metadataChangeSets: ChangeSet<T>[], dataChangeSets?: ChangeSet<DataRecord>[], transactionMode?: TransactionMode): Promise<number>;
64
- bulkGetAsync<TValue = any>(keys: string[], transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;
65
- bulkSetAsync<TValue = any>(metadataRecords: T[], dataRecords: DataRecord<TValue>[], transactionMode?: TransactionMode): Promise<string[]>;
51
+ [Symbol.dispose](): void;
52
+ open(): any;
53
+ exec<T>(action: () => Promise<T>, transactionMode?: TransactionMode): Promise<T>;
54
+ getKeys(): Promise<string[]>;
55
+ contains(key: string, transactionMode?: TransactionMode): Promise<boolean>;
56
+ delete(key: string, transactionMode?: TransactionMode): Promise<void>;
57
+ bulkDelete(keys: string[], transactionMode?: TransactionMode): Promise<void>;
58
+ clear(transactionMode?: TransactionMode): Promise<void>;
59
+ get<TValue = any>(key: string, transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>>;
60
+ set<TValue = any>(metadataRecord: T, value: TValue, transactionMode?: TransactionMode): Promise<string>;
61
+ getOrSet<TValue = any>(metadataRecord: T, factory: (metadataRecord: T) => TValue, transactionMode?: TransactionMode): Promise<StoreItem<T, any>>;
62
+ update<TValue = any>(key: string, metadataChanges: KeyPathValueMap<T>, valueChanges?: KeyPathValueMap<TValue>, transactionMode?: TransactionMode): Promise<number>;
63
+ bulkUpdate(metadataChangeSets: ChangeSet<T>[], dataChangeSets?: ChangeSet<DataRecord>[], transactionMode?: TransactionMode): Promise<number>;
64
+ bulkGet<TValue = any>(keys: string[], transactionMode?: TransactionMode): Promise<StoreItem<T, TValue>[]>;
65
+ bulkSet<TValue = any>(metadataRecords: T[], dataRecords: DataRecord<TValue>[], transactionMode?: TransactionMode): Promise<string[]>;
66
66
  orderBy(field: keyof T, direction: OrderDirection, distinct?: boolean): StoreCollection<T, any>;
67
67
  distinct(field: keyof T): StoreCollection<T, any>;
68
68
  query<TValue = any>(): StoreCollection<T, TValue>;
@@ -1 +1 @@
1
- {"version":3,"file":"dataStore.d.ts","sourceRoot":"","sources":["../../src/store/dataStore.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,EAAE,aAAa,EAAE,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAUnL,cAAM,eAAe,CAAC,CAAC,SAAS,cAAc,GAAG,cAAc,EAAE,MAAM,GAAG,GAAG,CAAE,YAAW,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC;IACjH,OAAO,CAAC,SAAS,CAAsB;gBAGnC,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAKjC,OAAO,KAAK,EAAE,GAEb;IAEK,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,EAAE,cAAc,CAAC,EAAE,cAAc,EAAE,eAAe,GAAE,eAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC;IAuC/I,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,eAAe,GAAE,eAAqB;IAI9F,MAAM,CAAC,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;IAK5C,KAAK,CAAC,CAAC,EAAE,MAAM;IAIf,MAAM,CAAC,CAAC,EAAE,MAAM;IAIhB,YAAY,IAC+B,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;IAG9D,aAAa;IAIb,kBAAkB,CAAC,QAAQ,EAAE,OAAO;;;;IAOpC,mBAAmB,CAAC,QAAQ,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,IAAI,EAAE,eAAe,GAAE,eAAsB;IAWlG,eAAe,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,EAAE,eAAe,GAAE,eAAsB;IAYnG,WAAW,CAAC,gBAAgB,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,IAAI,EAAE,YAAY,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,EAAE,eAAe,GAAE,eAAsB;CAkBrJ;AAED,UAAU,YAAY,CAAC,CAAC,SAAS,aAAa,EAAE,OAAO,GAAG,GAAG;IACzD,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,OAAC;IAChD,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IACzB,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IAChC,KAAK,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IACzC,eAAe,CAAC,IAAI,EAAE,CAAC,SAAS,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IAC1F,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IACzB,YAAY,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IAChC,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,YAAY,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IACzF,MAAM,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;IAC1B,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IACzC,UAAU,CAAC,MAAM,EAAE,aAAa,CAAC;QAC7B,CAAC,EAAE,CAAC,CAAC;QACL,CAAC,EAAE,CAAC,CAAC;KACR,CAAC,EAAE,OAAO,CAAC,EAAE;QACV,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,aAAa,CAAC,EAAE,OAAO,CAAC;KAC3B,GAAG,OAAO,CAAC;IACZ,UAAU,CAAC,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IACrF,eAAe,CAAC,QAAQ,EAAE,CAAC,SAAS,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IAC9F,oBAAoB,CAAC,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IAC/F,yBAAyB,CAAC,QAAQ,EAAE,CAAC,SAAS,MAAM,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,CAAC,SAAS,MAAM,GAAG,OAAO,GAAG,KAAK,CAAC;IACxG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC;CAC/B;AAsBD,qBAAa,SAAS,CAAC,CAAC,SAAS,cAAc,CAAE,YAAW,SAAS;IAEjE,OAAO,CAAC,GAAG,CAAa;gBAEZ,IAAI,EAAE,MAAM,EAAE,wBAAwB,EAAE,MAAM,CAAC,SAAS,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK;IAO9G,OAAO;IAKP,SAAS;IAIT,SAAS,CAAC,CAAC,EACP,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACxB,eAAe,GAAE,eAAsB;IAI3C,YAAY;IAKZ,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,GAAE,eAAqB;IAIjE,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,eAAe,GAAE,eAAsB;IAKhE,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,eAAe,GAAE,eAAsB;IAKvE,UAAU,CAAC,eAAe,GAAE,eAAsB;IAIlD,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,GAAE,eAAsB,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAY3G,QAAQ,CAAC,MAAM,GAAG,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,GAAE,eAAsB;IAkBhG,aAAa,CAAC,MAAM,GAAG,GAAG,EAAE,cAAc,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,cAAc,EAAE,CAAC,KAAK,MAAM,EAAE,eAAe,GAAE,eAAsB;IAc9H,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,YAAY,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,GAAE,eAAsB;IAmB3J,eAAe,CAAC,kBAAkB,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,cAAc,CAAC,EAAE,SAAS,CAAC,UAAU,CAAC,EAAE,EAAE,eAAe,GAAE,eAAsB;IAqBrI,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,eAAe,GAAE,eAAqB;IAkBjF,YAAY,CAAC,MAAM,GAAG,GAAG,EAAE,eAAe,EAAE,CAAC,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,EAAE,eAAe,GAAE,eAAsB;IA4B3H,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,SAAS,EAAE,cAAc,EAAE,QAAQ,UAAQ;IAWnE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAKvB,KAAK,CAAC,MAAM,GAAG,GAAG;IAKlB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,MAAM,GAAG,GAAG,EAAE,KAAK,EAAE,CAAC,SAAS,MAAM,GAAG,CAAC,GAAG,KAAK;CAI7E"}
1
+ {"version":3,"file":"dataStore.d.ts","sourceRoot":"","sources":["../../src/store/dataStore.ts"],"names":[],"mappings":"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"}