@actdim/utico 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/LICENSE +8 -0
  2. package/README.md +1 -0
  3. package/dist/array.d.ts +2 -0
  4. package/dist/array.d.ts.map +1 -0
  5. package/dist/array.es.js +7 -0
  6. package/dist/array.es.js.map +1 -0
  7. package/dist/arrayExtensions.d.ts +27 -0
  8. package/dist/arrayExtensions.d.ts.map +1 -0
  9. package/dist/arrayExtensions.es.js +67 -0
  10. package/dist/arrayExtensions.es.js.map +1 -0
  11. package/dist/cache/cacheDb.d.ts +30 -0
  12. package/dist/cache/cacheDb.d.ts.map +1 -0
  13. package/dist/cache/cacheDb.es.js +50 -0
  14. package/dist/cache/cacheDb.es.js.map +1 -0
  15. package/dist/cache/memoryCache.d.ts +33 -0
  16. package/dist/cache/memoryCache.d.ts.map +1 -0
  17. package/dist/cache/memoryCache.es.js +54 -0
  18. package/dist/cache/memoryCache.es.js.map +1 -0
  19. package/dist/cache/persistentCache.d.ts +50 -0
  20. package/dist/cache/persistentCache.d.ts.map +1 -0
  21. package/dist/cache/persistentCache.es.js +156 -0
  22. package/dist/cache/persistentCache.es.js.map +1 -0
  23. package/dist/dataFormats.d.ts +5 -0
  24. package/dist/dataFormats.d.ts.map +1 -0
  25. package/dist/dataFormats.es.js +8 -0
  26. package/dist/dataFormats.es.js.map +1 -0
  27. package/dist/dateTimeDataFormat.d.ts +26 -0
  28. package/dist/dateTimeDataFormat.d.ts.map +1 -0
  29. package/dist/dateTimeDataFormat.es.js +97 -0
  30. package/dist/dateTimeDataFormat.es.js.map +1 -0
  31. package/dist/gfx/canvasUtils.d.ts +20 -0
  32. package/dist/gfx/canvasUtils.d.ts.map +1 -0
  33. package/dist/gfx/canvasUtils.es.js +150 -0
  34. package/dist/gfx/canvasUtils.es.js.map +1 -0
  35. package/dist/gfx/color.d.ts +16 -0
  36. package/dist/gfx/color.d.ts.map +1 -0
  37. package/dist/gfx/color.es.js +92 -0
  38. package/dist/gfx/color.es.js.map +1 -0
  39. package/dist/i18n/cultures.d.ts +60 -0
  40. package/dist/i18n/cultures.d.ts.map +1 -0
  41. package/dist/i18n/cultures.es.js +10 -0
  42. package/dist/i18n/cultures.es.js.map +1 -0
  43. package/dist/i18n/enUsCulture.d.ts +30 -0
  44. package/dist/i18n/enUsCulture.d.ts.map +1 -0
  45. package/dist/i18n/enUsCulture.es.js +40 -0
  46. package/dist/i18n/enUsCulture.es.js.map +1 -0
  47. package/dist/index.d.ts +1 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.es.js +2 -0
  50. package/dist/index.es.js.map +1 -0
  51. package/dist/math.d.ts +2 -0
  52. package/dist/math.d.ts.map +1 -0
  53. package/dist/math.es.js +13 -0
  54. package/dist/math.es.js.map +1 -0
  55. package/dist/metadata.d.ts +7 -0
  56. package/dist/metadata.d.ts.map +1 -0
  57. package/dist/metadata.es.js +29 -0
  58. package/dist/metadata.es.js.map +1 -0
  59. package/dist/mutex.d.ts +8 -0
  60. package/dist/mutex.d.ts.map +1 -0
  61. package/dist/mutex.es.js +27 -0
  62. package/dist/mutex.es.js.map +1 -0
  63. package/dist/patterns.d.ts +2 -0
  64. package/dist/patterns.d.ts.map +1 -0
  65. package/dist/patterns.es.js +6 -0
  66. package/dist/patterns.es.js.map +1 -0
  67. package/dist/storage/persistentStorage.d.ts +11 -0
  68. package/dist/storage/persistentStorage.d.ts.map +1 -0
  69. package/dist/storage/persistentStorage.es.js +28 -0
  70. package/dist/storage/persistentStorage.es.js.map +1 -0
  71. package/dist/storage/storageContracts.d.ts +6 -0
  72. package/dist/storage/storageContracts.d.ts.map +1 -0
  73. package/dist/storage/storageContracts.es.js +2 -0
  74. package/dist/storage/storageContracts.es.js.map +1 -0
  75. package/dist/stringCore.d.ts +9 -0
  76. package/dist/stringCore.d.ts.map +1 -0
  77. package/dist/stringCore.es.js +35 -0
  78. package/dist/stringCore.es.js.map +1 -0
  79. package/dist/structEvent.d.ts +15 -0
  80. package/dist/structEvent.d.ts.map +1 -0
  81. package/dist/structEvent.es.js +34 -0
  82. package/dist/structEvent.es.js.map +1 -0
  83. package/dist/typeCore.d.ts +84 -0
  84. package/dist/typeCore.d.ts.map +1 -0
  85. package/dist/typeCore.es.js +7 -0
  86. package/dist/typeCore.es.js.map +1 -0
  87. package/dist/typeUtils.d.ts +42 -0
  88. package/dist/typeUtils.d.ts.map +1 -0
  89. package/dist/typeUtils.es.js +227 -0
  90. package/dist/typeUtils.es.js.map +1 -0
  91. package/dist/utils.d.ts +12 -0
  92. package/dist/utils.d.ts.map +1 -0
  93. package/dist/utils.es.js +71 -0
  94. package/dist/utils.es.js.map +1 -0
  95. package/dist/watchable.d.ts +13 -0
  96. package/dist/watchable.d.ts.map +1 -0
  97. package/dist/watchable.es.js +38 -0
  98. package/dist/watchable.es.js.map +1 -0
  99. package/package.json +78 -0
@@ -0,0 +1,26 @@
1
+ import { Moment, default as moment } from 'moment';
2
+ export interface IDateTimeDataFormat {
3
+ serializationFormat: string;
4
+ normalize: (source: string | number | Date) => Date;
5
+ serialize: (source: string | number | Date | Moment) => string;
6
+ deserialize: (value: string) => Moment;
7
+ tryDeserialize: (value: string) => Moment;
8
+ isValid: (source: string | number | Date) => boolean;
9
+ }
10
+ export declare enum DateNumberFormat {
11
+ UnixTimeMilliseconds = 0,
12
+ UnixTimeSeconds = 1,
13
+ OADate = 2
14
+ }
15
+ export declare function getDateFromOADate(oaDate: number): Date;
16
+ export declare function getOADateFromDate(date: Date): string;
17
+ export declare function getDateFromNumber(value: number, dateNumberFormat?: DateNumberFormat): Date;
18
+ export type DateValueFormats = {
19
+ string?: string;
20
+ number?: DateNumberFormat;
21
+ };
22
+ export declare function toMoment(source: any, formats?: DateValueFormats): Moment;
23
+ export declare function formatDate(date: Date | moment.Moment, format?: string): string;
24
+ declare const dateTimeFormat: IDateTimeDataFormat;
25
+ export default dateTimeFormat;
26
+ //# sourceMappingURL=dateTimeDataFormat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateTimeDataFormat.d.ts","sourceRoot":"","sources":["../src/dateTimeDataFormat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,MAAM,MAAM,QAAQ,CAAC;AAM5B,MAAM,WAAW,mBAAmB;IAChC,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACpD,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,GAAG,MAAM,KAAK,MAAM,CAAC;IAC/D,WAAW,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACvC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC;CACxD;AAED,oBAAY,gBAAgB;IACxB,oBAAoB,IAAA;IACpB,eAAe,IAAA;IACf,MAAM,IAAA;CACT;AAiBD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,QAO/C;AAOD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,UAQ3C;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,gBAAgB,mBAAwC,QAYxG;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,gBAAgB,UAoB/D;AA+BD,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,UAiBrE;AAED,QAAA,MAAM,cAAc,EA0Df,mBAAmB,CAAC;AAEzB,eAAe,cAAc,CAAC"}
@@ -0,0 +1,97 @@
1
+ import r from "moment";
2
+ import m from "./i18n/cultures.es.js";
3
+ const d = m.invariant.dateTime.formats;
4
+ var u = /* @__PURE__ */ ((t) => (t[t.UnixTimeMilliseconds = 0] = "UnixTimeMilliseconds", t[t.UnixTimeSeconds = 1] = "UnixTimeSeconds", t[t.OADate = 2] = "OADate", t))(u || {});
5
+ const c = "YYYY-MM-DDTHH:mm:ss.SSS", i = "YYYY-MM-DDTHH:mm:ss.SSS", s = r.utc, D = (t) => new Date(t.format(c));
6
+ function p(t) {
7
+ const e = Math.floor(t), n = Math.abs((t - e) * 864e5);
8
+ return new Date(1899, 11, 30 + e, 0, 0, 0, n);
9
+ }
10
+ function g(t) {
11
+ const e = new Date(t), n = new Date(1899, 11, 30), a = Math.round((e.setHours(0, 0, 0, 0) - n.getTime()) / 864e5), f = (Math.abs((t.getTime() - e.getTime()) % 864e5) / 864e5).toFixed(10);
12
+ return a + f.substr(1);
13
+ }
14
+ function M(t, e = 0) {
15
+ if (t == null)
16
+ return null;
17
+ switch (e) {
18
+ case 0:
19
+ return new Date(t);
20
+ case 1:
21
+ return new Date(t * 1e3);
22
+ case 2:
23
+ return p(t);
24
+ }
25
+ }
26
+ function l(t, e) {
27
+ if (t == null)
28
+ return null;
29
+ let n;
30
+ if (typeof t == "string")
31
+ n = o(t, e == null ? void 0 : e.string);
32
+ else if (typeof t == "number")
33
+ n = r(M(t, e == null ? void 0 : e.number));
34
+ else if (t instanceof Date)
35
+ n = r(t);
36
+ else {
37
+ if (!r.isMoment(t))
38
+ throw new Error("Unsupported Moment Source");
39
+ n = t;
40
+ }
41
+ return n;
42
+ }
43
+ function o(t, e) {
44
+ if (t == null)
45
+ return null;
46
+ e == null && (e = i);
47
+ let n;
48
+ if (e ? n = s(t, e, !0) : n = s(t), n.format(i) !== s(t).format(i)) {
49
+ const a = `Invalid date transport value: ${t}`;
50
+ console.warn(a);
51
+ }
52
+ if (!n.isValid())
53
+ throw new Error(`Assertion. Invalid datetime format: ${t}. Expected format: ${e || i}.`);
54
+ return n;
55
+ }
56
+ function S(t, e) {
57
+ if (t == null)
58
+ return "";
59
+ const n = l(t);
60
+ return e == null && (!n.hours() && !n.minutes() && !n.seconds() ? e = d.dateShort : n.milliseconds() ? e = d.dateTime24 : e = d.dateTime24Short), n.format(e);
61
+ }
62
+ const w = {
63
+ serializationFormat: i,
64
+ isValid: (t) => t == null ? !0 : typeof t == "string" ? !!o(t, i) : t instanceof Date,
65
+ normalize: (t) => {
66
+ if (t == null)
67
+ return null;
68
+ if (typeof t == "string")
69
+ t = o(t);
70
+ else if (typeof t == "number")
71
+ t = s(t);
72
+ else if (t instanceof Date)
73
+ t = r(t);
74
+ else if (!r.isMoment(t))
75
+ throw new Error("Unsupported source");
76
+ return D(t);
77
+ },
78
+ serialize: (t, e) => t == null ? null : l(t, e).format(i),
79
+ deserialize: (t) => o(t),
80
+ tryDeserialize: (t) => {
81
+ try {
82
+ return w.deserialize(t);
83
+ } catch (e) {
84
+ return console.error(e), null;
85
+ }
86
+ }
87
+ };
88
+ export {
89
+ u as DateNumberFormat,
90
+ w as default,
91
+ S as formatDate,
92
+ M as getDateFromNumber,
93
+ p as getDateFromOADate,
94
+ g as getOADateFromDate,
95
+ l as toMoment
96
+ };
97
+ //# sourceMappingURL=dateTimeDataFormat.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateTimeDataFormat.es.js","sources":["../src/dateTimeDataFormat.ts"],"sourcesContent":["import { Moment } from \"moment\";\r\nimport moment from \"moment\";\r\nimport cultures from \"./i18n/cultures\";\r\n\r\n// TODO: use Luxon\r\nconst dtFormats = cultures.invariant.dateTime.formats;\r\n\r\nexport interface IDateTimeDataFormat {\r\n serializationFormat: string;\r\n normalize: (source: string | number | Date) => Date;\r\n serialize: (source: string | number | Date | Moment) => string;\r\n deserialize: (value: string) => Moment;\r\n tryDeserialize: (value: string) => Moment;\r\n isValid: (source: string | number | Date) => boolean;\r\n}\r\n\r\nexport enum DateNumberFormat {\r\n UnixTimeMilliseconds,\r\n UnixTimeSeconds,\r\n OADate // OLE Automation Date\r\n}\r\n\r\nconst USE_LOCAL_TIME = false; // invariant dates\r\n\r\n// dotnet: \"yyyy-MM-ddTHH:mm:ss.FFF\"\r\nconst invariantFormat = \"YYYY-MM-DDTHH:mm:ss.SSS\";\r\nconst s11nFormat = \"YYYY-MM-DDTHH:mm:ss.SSS\"; // TODO: support USE_LOCAL_TIME\r\n\r\nconst m = USE_LOCAL_TIME ? moment : moment.utc;\r\nconst toDate = USE_LOCAL_TIME ? (m: Moment) => m.toDate() : (m: Moment) => new Date(m.format(invariantFormat));\r\n\r\n// https://stackoverflow.com/questions/15549823/oadate-to-milliseconds-timestamp-in-javascript\r\n/* Convert a Microsoft OADate to ECMAScript Date\r\n ** Treat all values as local.\r\n ** @param {string|number} oaDate - OADate value\r\n ** @returns {Date}\r\n */\r\nexport function getDateFromOADate(oaDate: number) {\r\n // Treat integer part is whole days\r\n const days = Math.floor(oaDate); // parseInt(oaDate + \"\")\r\n // Treat decimal part as part of 24hr day, always +ve\r\n const ms = Math.abs((oaDate - days) * 8.64e7); // +oaDate\r\n // Add days and add ms\r\n return new Date(1899, 11, 30 + days, 0, 0, 0, ms);\r\n}\r\n\r\n/* Convert an ECMAScript Date to a Microsoft OADate\r\n ** Treat all dates as local.\r\n ** @param {Date} date - Date to convert\r\n ** @returns {Date}\r\n */\r\nexport function getOADateFromDate(date: Date) {\r\n const temp = new Date(date);\r\n // Set temp to start of day and get whole days between dates\r\n const stDate = new Date(1899, 11, 30);\r\n const days = Math.round((temp.setHours(0, 0, 0, 0) - stDate.getTime()) / 8.64e7);\r\n // Get decimal part of day, OADate always assumes 24 hours in day\r\n const partDay = (Math.abs((date.getTime() - temp.getTime()) % 8.64e7) / 8.64e7).toFixed(10);\r\n return days + partDay.substr(1);\r\n}\r\n\r\nexport function getDateFromNumber(value: number, dateNumberFormat = DateNumberFormat.UnixTimeMilliseconds) {\r\n if (value == undefined) {\r\n return null;\r\n }\r\n switch (dateNumberFormat) {\r\n case DateNumberFormat.UnixTimeMilliseconds:\r\n return new Date(value);\r\n case DateNumberFormat.UnixTimeSeconds:\r\n return new Date(value * 1000);\r\n case DateNumberFormat.OADate:\r\n return getDateFromOADate(value);\r\n }\r\n}\r\n\r\nexport type DateValueFormats = {\r\n string?: string;\r\n number?: DateNumberFormat;\r\n};\r\n\r\nexport function toMoment(source: any, formats?: DateValueFormats) {\r\n if (source == undefined) {\r\n return null;\r\n }\r\n let md: Moment;\r\n if (typeof source === \"string\") {\r\n md = parse(source, formats?.string);\r\n } else if (typeof source === \"number\") {\r\n md = moment(getDateFromNumber(source, formats?.number));\r\n } else if (source instanceof Date) {\r\n // moment.isDate?\r\n md = moment(source);\r\n } else {\r\n if (!moment.isMoment(source)) {\r\n // Invalid\r\n throw new Error(\"Unsupported Moment Source\");\r\n }\r\n md = source;\r\n }\r\n return md;\r\n}\r\n\r\nfunction parse(value: string, format?: string) {\r\n if (value == undefined) {\r\n return null;\r\n }\r\n if (format == undefined) {\r\n format = s11nFormat;\r\n }\r\n let md: Moment;\r\n if (format) {\r\n md = m(value, format, true);\r\n } else {\r\n md = m(value);\r\n // md = m(value, format, true); // ?\r\n }\r\n\r\n // assertInvariant?\r\n // !md.isSame(m(value))\r\n if (md.format(s11nFormat) !== m(value).format(s11nFormat)) {\r\n const errMsg = `Invalid date transport value: ${value}`;\r\n console.warn(errMsg);\r\n // throw new Error(errMsg);\r\n }\r\n if (!md.isValid()) {\r\n throw new Error(`Assertion. Invalid datetime format: ${value}. Expected format: ${format || s11nFormat}.`);\r\n }\r\n return md;\r\n}\r\n\r\n// dtFormats.dateTimeShort\r\nexport function formatDate(date: Date | moment.Moment, format?: string) {\r\n if (date == undefined) {\r\n return \"\";\r\n }\r\n const md = toMoment(date);\r\n if (format == undefined) {\r\n if (!md.hours() && !md.minutes() && !md.seconds()) {\r\n format = dtFormats.dateShort;\r\n } else if (md.milliseconds()) {\r\n // dtFormats.dateTime?\r\n format = dtFormats.dateTime24;\r\n } else {\r\n // dtFormats.dateTimeShort?\r\n format = dtFormats.dateTime24Short;\r\n }\r\n }\r\n return md.format(format);\r\n}\r\n\r\nconst dateTimeFormat = {\r\n serializationFormat: s11nFormat,\r\n isValid: (source: any) => {\r\n if (source == null) {\r\n return true; // no value, it is OK\r\n }\r\n if (typeof source === \"string\") {\r\n return !!parse(source, s11nFormat);\r\n }\r\n // if (typeof source === 'number') {\r\n // return true;\r\n // }\r\n if (source instanceof Date) {\r\n return true;\r\n }\r\n return false;\r\n },\r\n normalize: (source: string | number | Date | Moment) => {\r\n if (source == undefined) {\r\n return null;\r\n }\r\n if (typeof source === \"string\") {\r\n const md = parse(source);\r\n // const md = parse(source, s11nFormat);\r\n source = md;\r\n } else if (typeof source === \"number\") {\r\n // source = getMomentFromUnixTime(source); // ?\r\n source = m(source);\r\n } else if (source instanceof Date) {\r\n // return source;\r\n // not moment.utc(source)!\r\n source = moment(source);\r\n } else {\r\n if (!moment.isMoment(source)) {\r\n // Invalid\r\n throw new Error(\"Unsupported source\");\r\n }\r\n }\r\n return toDate(source);\r\n },\r\n serialize: (source: string | number | Date | Moment, formats?: DateValueFormats) => {\r\n if (source == undefined) {\r\n return null;\r\n }\r\n const md = toMoment(source, formats);\r\n return md.format(s11nFormat);\r\n },\r\n deserialize: (value: string) => {\r\n return parse(value);\r\n },\r\n tryDeserialize: (value: string) => {\r\n try {\r\n return dateTimeFormat.deserialize(value);\r\n } catch (err) {\r\n console.error(err);\r\n return null;\r\n }\r\n }\r\n} as IDateTimeDataFormat;\r\n\r\nexport default dateTimeFormat;\r\n"],"names":["dtFormats","cultures","DateNumberFormat","DateNumberFormat2","invariantFormat","s11nFormat","m","moment","toDate","getDateFromOADate","oaDate","days","ms","getOADateFromDate","date","temp","stDate","partDay","getDateFromNumber","value","dateNumberFormat","toMoment","source","formats","md","parse","format","errMsg","formatDate","dateTimeFormat","err"],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export declare function createCanvas(w: number, h: number): {
2
+ canvas: HTMLCanvasElement;
3
+ context: CanvasRenderingContext2D;
4
+ };
5
+ export type TextSizeProvider = (fontSize: number) => [number, number];
6
+ export declare function fitText(ctx: CanvasRenderingContext2D, text: string, sizeProvider: TextSizeProvider, targetWidth?: number, fontFamily?: string): void;
7
+ export declare const html2SvgAsync: (elements: HTMLElement[], viewBoxSize: number[], css: string) => Promise<string>;
8
+ export declare function getSvgImageObjectUrl(svgData: string): string;
9
+ export declare function getSvgImageDataUrl(svgData: string): string;
10
+ export declare const querySvgData: (selector: string) => string;
11
+ export declare function toObjectUrl(canvas: HTMLCanvasElement, mimeType?: string, quality?: number): Promise<string>;
12
+ export declare function drawImageAsync(src: string, context: CanvasRenderingContext2D): Promise<void>;
13
+ export declare const drawSvgAsync: (svgData: string, context: CanvasRenderingContext2D, useDataUrl?: boolean) => Promise<void>;
14
+ export declare function canvas2Image(canvas: HTMLCanvasElement, size?: number[], mimeType?: string, quality?: number): HTMLImageElement;
15
+ export declare function canvas2ImageAsync(canvas: HTMLCanvasElement, size?: number[], mimeType?: string, quality?: number): Promise<HTMLImageElement>;
16
+ export declare function objectUrlToDataURL(objectUrl: string): Promise<string>;
17
+ export declare const getSvgSize: (svg: string) => [number, number];
18
+ export declare function getSvgElementSize(svgDoc: SVGSVGElement): [number, number];
19
+ export declare const refineSvg: (data: string) => string;
20
+ //# sourceMappingURL=canvasUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasUtils.d.ts","sourceRoot":"","sources":["../../src/gfx/canvasUtils.ts"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM;;;EAsBhD;AAID,MAAM,MAAM,gBAAgB,GAAG,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAEtE,wBAAgB,OAAO,CACnB,GAAG,EAAE,wBAAwB,EAC7B,IAAI,QAAK,EACT,YAAY,EAAE,gBAAgB,EAC9B,WAAW,SAAmB,EAC9B,UAAU,SAAU,QAkCvB;AASD,eAAO,MAAM,aAAa,aAEE,WAAW,EAAE,eAAe,MAAM,EAAE,OAAO,MAAM,oBAuBzE,CAAC;AAEL,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,UAGnD;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,UAKjD;AAGD,eAAO,MAAM,YAAY,aAEH,MAAM,WAKxB,CAAC;AAEL,wBAAgB,WAAW,CAAC,MAAM,EAAE,iBAAiB,EAAE,QAAQ,SAAc,EAAE,OAAO,CAAC,EAAE,MAAM,mBAe9F;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,wBAAwB,iBAgB5E;AAED,eAAO,MAAM,YAAY,GAAI,SAAS,MAAM,EAAE,SAAS,wBAAwB,EAAE,oBAAkB,kBAGlG,CAAC;AAEF,wBAAgB,YAAY,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,SAAc,EAAE,OAAO,CAAC,EAAE,MAAM,oBAehH;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,iBAAiB,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,QAAQ,SAAc,EAAE,OAAO,CAAC,EAAE,MAAM,6BAgB3H;AAED,wBAAsB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAa3E;AAED,eAAO,MAAM,UAAU,QAEN,MAAM,qBAOnB,CAAC;AAEL,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,aAAa,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAgCzE;AAED,eAAO,MAAM,SAAS,SAEJ,MAAM,WAUpB,CAAC"}
@@ -0,0 +1,150 @@
1
+ const u = window.URL || window.webkitURL;
2
+ function x(t, e) {
3
+ const n = document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"), a = n.getContext("2d");
4
+ return a && (a.imageSmoothingQuality = "high"), n.width = t, n.height = e, { canvas: n, context: a };
5
+ }
6
+ const f = "actualBoundingBoxRight" in TextMetrics.prototype;
7
+ function L(t, e = "", n, a = t.canvas.width, r = "Arial") {
8
+ let o = 1;
9
+ const s = () => {
10
+ t.font = o + "px " + r;
11
+ };
12
+ s();
13
+ let i = g(e);
14
+ for (; i && i <= a; )
15
+ o++, s(), i = g(e);
16
+ for (; i && i > a; )
17
+ o -= 0.1, s(), i = g(e);
18
+ o += 0.1, s();
19
+ const c = t.measureText(e).actualBoundingBoxLeft || 0, [m, w] = n(o);
20
+ t.fillText(e, m + c, w);
21
+ function g(d) {
22
+ const l = t.measureText(d);
23
+ return f ? l.actualBoundingBoxLeft + l.actualBoundingBoxRight : l.width;
24
+ }
25
+ }
26
+ function v(t) {
27
+ return window.encodeURIComponent(t).replace(/%([0-9A-F]{2})/g, (e, n) => String.fromCharCode(parseInt(n, 16)));
28
+ }
29
+ const B = (() => {
30
+ const t = new XMLSerializer();
31
+ return async (e, n, a) => {
32
+ const r = n[0], o = n[1];
33
+ let s = e.map(
34
+ (c) => `<foreignObject width="${r}" height="${o}">
35
+ <body xmlns="http://www.w3.org/1999/xhtml">
36
+ ${c.outerHTML}
37
+ </body>
38
+ </foreignObject>`
39
+ ).join("");
40
+ s = `<style>${a}</style>${s}`;
41
+ var i = document.createElementNS("http://www.w3.org/2000/svg", "svg");
42
+ return i.setAttributeNS(null, "viewBox", `0 0 ${r} ${o}`), i.setAttributeNS(null, "width", r + ""), i.setAttributeNS(null, "height", o + ""), i.innerHTML = s, t.serializeToString(i);
43
+ };
44
+ })();
45
+ function b(t) {
46
+ const e = new Blob([t], { type: "image/svg+xml;charset=utf-8" });
47
+ return u.createObjectURL(e);
48
+ }
49
+ function S(t) {
50
+ return "data:image/svg+xml;base64," + window.btoa(v(t));
51
+ }
52
+ const U = (() => {
53
+ const t = new XMLSerializer();
54
+ return (e) => {
55
+ const n = document.querySelector(e);
56
+ return t.serializeToString(n);
57
+ };
58
+ })();
59
+ function y(t, e = "image/png", n) {
60
+ return new Promise((a, r) => {
61
+ try {
62
+ t.toBlob(
63
+ (o) => {
64
+ a(URL.createObjectURL(o));
65
+ },
66
+ e,
67
+ n
68
+ );
69
+ } catch (o) {
70
+ r(o);
71
+ }
72
+ });
73
+ }
74
+ function p(t, e) {
75
+ return new Promise((n, a) => {
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
+ a(r);
83
+ }
84
+ });
85
+ }
86
+ const O = (t, e, n = !1) => {
87
+ const a = n ? S(t) : b(t);
88
+ return p(a, e).finally(() => u.revokeObjectURL(a));
89
+ };
90
+ function R(t, e, n = "image/png", a) {
91
+ const r = new Image();
92
+ r.crossOrigin = "anonymous", e && (e[0] && (r.width = e[0]), e[1] && (r.height = e[1]));
93
+ const o = t.toDataURL(n, a);
94
+ return r.src = o, r;
95
+ }
96
+ async function T(t, e, n = "image/png", a) {
97
+ const r = new Image();
98
+ r.crossOrigin = "anonymous", e && (e[0] && (r.width = e[0]), e[1] && (r.height = e[1]));
99
+ const o = await y(t, n, a);
100
+ return r.onload = () => u.revokeObjectURL(o), r.src = o, r;
101
+ }
102
+ async function A(t) {
103
+ const n = await (await fetch(t)).blob();
104
+ return new Promise((a, r) => {
105
+ try {
106
+ const o = new FileReader();
107
+ o.onloadend = () => a(o.result), o.readAsDataURL(n);
108
+ } catch (o) {
109
+ r(o);
110
+ }
111
+ });
112
+ }
113
+ const I = (() => {
114
+ const t = new DOMParser();
115
+ return (e) => {
116
+ const a = t.parseFromString(e, "text/xml").querySelector("svg");
117
+ return h(a);
118
+ };
119
+ })();
120
+ function h(t) {
121
+ let e = 0;
122
+ t.width.baseVal.unitType === 5 && (e = t.width.baseVal.value), e || (e = t.width.baseVal.value), e || (e = t.viewBox.baseVal.width);
123
+ let n = 0;
124
+ 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
+ }
126
+ const j = (() => {
127
+ const t = new DOMParser();
128
+ return (e) => {
129
+ const a = t.parseFromString(e, "text/xml").querySelector("svg"), r = h(a);
130
+ return a.setAttribute("width", `${r[0]}px`), a.setAttribute("height", `${r[1]}px`), a.outerHTML;
131
+ };
132
+ })();
133
+ export {
134
+ R as canvas2Image,
135
+ T as canvas2ImageAsync,
136
+ x as createCanvas,
137
+ p as drawImageAsync,
138
+ O as drawSvgAsync,
139
+ L as fitText,
140
+ h as getSvgElementSize,
141
+ S as getSvgImageDataUrl,
142
+ b as getSvgImageObjectUrl,
143
+ I as getSvgSize,
144
+ B as html2SvgAsync,
145
+ A as objectUrlToDataURL,
146
+ U as querySvgData,
147
+ j as refineSvg,
148
+ y as toObjectUrl
149
+ };
150
+ //# sourceMappingURL=canvasUtils.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvasUtils.es.js","sources":["../../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 canvas2Image(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 canvas2ImageAsync(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"],"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","canvas2Image","size","canvas2ImageAsync","objectUrlToDataURL","objectUrl","reader","getSvgSize","domParser","svgDoc","getSvgElementSize","refineSvg","data"],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export declare function getRandomColorChannelString(brightness: number): string;
2
+ export declare function getRandom32BitColorNumber(alpha?: number, brightness?: number): number;
3
+ export declare function getRandomColorNumber(brightness?: number): number;
4
+ export declare function getColorNumberFromHexString(colorHexString: string): number;
5
+ export declare function getColorRgbaFromHexString(colorHexString: string): {
6
+ r: number;
7
+ g: number;
8
+ b: number;
9
+ a: number;
10
+ };
11
+ export declare function getColorHexStringFromNumber(color: number): string;
12
+ export declare function get32BitColorHexStringFromNumber(color: number): string;
13
+ export declare function getColorNumberFromRgba(r: number, g: number, b: number, a?: number, use24BitsForOpaque?: boolean): number;
14
+ export declare function getColorHexStringFromRgba(r: number, g: number, b: number, a?: number): string;
15
+ export declare function getColorNumberFromEvent(e: Event): number;
16
+ //# sourceMappingURL=color.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.d.ts","sourceRoot":"","sources":["../../src/gfx/color.ts"],"names":[],"mappings":"AAQA,wBAAgB,2BAA2B,CAAC,UAAU,EAAE,MAAM,UAQ7D;AAED,wBAAgB,yBAAyB,CAAC,KAAK,GAAE,MAAa,EAAE,UAAU,GAAE,MAAa,UAaxF;AAGD,wBAAgB,oBAAoB,CAAC,UAAU,GAAE,MAAa,UAU7D;AA4BD,wBAAgB,2BAA2B,CAAC,cAAc,EAAE,MAAM,UAuBjE;AAED,wBAAgB,yBAAyB,CAAC,cAAc,EAAE,MAAM;;;;;EAoD/D;AAGD,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,MAAM,UAOxD;AAED,wBAAgB,gCAAgC,CAAC,KAAK,EAAE,MAAM,UAG7D;AAKD,wBAAgB,sBAAsB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAa,EAAE,kBAAkB,GAAE,OAAc,UAW3H;AAID,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,GAAE,MAAa,UAG1F;AAGD,wBAAgB,uBAAuB,CAAC,CAAC,EAAE,KAAK,UAG/C"}
@@ -0,0 +1,92 @@
1
+ function r(t) {
2
+ const n = 255 - t;
3
+ return 0 | Math.random() * n + t;
4
+ }
5
+ function s(t) {
6
+ let e = r(t).toString(16);
7
+ return e.length == 1 && (e = "0" + e), e;
8
+ }
9
+ function C(t = null, n = null) {
10
+ n == null && (n = Math.floor(Math.random() * 255));
11
+ const e = r(n), u = r(n), o = r(n), a = t ?? r(n);
12
+ return f(e, u, o, a);
13
+ }
14
+ function N(t = null) {
15
+ t == null && (t = Math.floor(Math.random() * 255));
16
+ const n = r(t), e = r(t), u = r(t);
17
+ return f(n, e, u);
18
+ }
19
+ function i(t) {
20
+ t = t.trim().toUpperCase();
21
+ let n = !1;
22
+ return t.startsWith("-") && (n = !0, t = t.slice(1).trimLeft()), t.startsWith("0X") && (t = t.slice(2)), t.startsWith("#") && (t = t.slice(1)), n && (t = "-" + t), t;
23
+ }
24
+ function l(t) {
25
+ return t ? (t = i(t), // new Number(colorHexString).valueOf();
26
+ // parseInt(colorHexString);
27
+ parseInt(t, 16)) : 0;
28
+ }
29
+ function d(t) {
30
+ if (t) {
31
+ const n = l(t);
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
54
+ return {
55
+ r: 0,
56
+ g: 0,
57
+ b: 0,
58
+ a: 255
59
+ };
60
+ }
61
+ function m(t) {
62
+ return t = Math.floor(t), t == null || Number.isNaN(t) ? "" : "#" + ("000000" + t.toString(16)).slice(-6);
63
+ }
64
+ function c(t) {
65
+ return t = Math.floor(t), "#" + ("00000000" + t.toString(16)).slice(-8);
66
+ }
67
+ function f(t, n, e, u = null, o = !0) {
68
+ let a;
69
+ return u == null || u === 255 && o ? a = (t << 16) + (n << 8) + e << 0 : a = (t << 24) + (n << 16) + (e << 8) + u, a >>> 0;
70
+ }
71
+ function v(t, n, e, u = null) {
72
+ const o = f(t, n, e, u);
73
+ return m(o);
74
+ }
75
+ function F(t) {
76
+ var e;
77
+ const n = (e = t.target) == null ? void 0 : e.value;
78
+ return l(n);
79
+ }
80
+ export {
81
+ c as get32BitColorHexStringFromNumber,
82
+ m as getColorHexStringFromNumber,
83
+ v as getColorHexStringFromRgba,
84
+ F as getColorNumberFromEvent,
85
+ l as getColorNumberFromHexString,
86
+ f as getColorNumberFromRgba,
87
+ d as getColorRgbaFromHexString,
88
+ C as getRandom32BitColorNumber,
89
+ s as getRandomColorChannelString,
90
+ N as getRandomColorNumber
91
+ };
92
+ //# sourceMappingURL=color.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"color.es.js","sources":["../../src/gfx/color.ts"],"sourcesContent":["// see also https://css-tricks.com/converting-color-spaces-in-javascript/\r\n\r\n// getRandomColorChannelValue(Number)\r\nfunction getRandomColorChannelNumber(brightness: number) {\r\n const r = 255 - brightness;\r\n return 0 | ((Math.random() * r) + brightness);\r\n}\r\n\r\nexport function getRandomColorChannelString(brightness: number) {\r\n const n = getRandomColorChannelNumber(brightness);\r\n let result = n.toString(16);\r\n // result = ('00' + result).slice(- 2);\r\n if (result.length == 1) {\r\n result = '0' + result;\r\n }\r\n return result;\r\n}\r\n\r\nexport function getRandom32BitColorNumber(alpha: number = null, brightness: number = null) {\r\n // return Math.floor(Math.random() * 0xFFFFFFFF);\r\n\r\n // typeof brightness !== \"number\"\r\n if (brightness == undefined) {\r\n brightness = Math.floor(Math.random() * 0xFF); // 255\r\n }\r\n const r = getRandomColorChannelNumber(brightness);\r\n const g = getRandomColorChannelNumber(brightness);\r\n const b = getRandomColorChannelNumber(brightness);\r\n // typeof alpha !== \"number\"\r\n const a = alpha == undefined ? getRandomColorChannelNumber(brightness) : alpha;\r\n return getColorNumberFromRgba(r, g, b, a);\r\n}\r\n\r\n// getRandom24bitColorNumber\r\nexport function getRandomColorNumber(brightness: number = null) {\r\n // return Math.floor(Math.random() * 0xFFFFFF);\r\n // typeof brightness !== \"number\"\r\n if (brightness == undefined) {\r\n brightness = Math.floor(Math.random() * 0xFF); // 255\r\n }\r\n const r = getRandomColorChannelNumber(brightness);\r\n const g = getRandomColorChannelNumber(brightness);\r\n const b = getRandomColorChannelNumber(brightness);\r\n return getColorNumberFromRgba(r, g, b);\r\n}\r\n\r\nfunction refineColorHexString(colorHexString: string) {\r\n colorHexString = colorHexString.trim().toUpperCase();\r\n let isNegative = false;\r\n\r\n if (colorHexString.startsWith(\"-\")) {\r\n isNegative = true;\r\n colorHexString = colorHexString.slice(1).trimLeft();\r\n }\r\n\r\n if (colorHexString.startsWith(\"0X\")) {\r\n colorHexString = colorHexString.slice(2);\r\n }\r\n\r\n if (colorHexString.startsWith(\"#\")) {\r\n colorHexString = colorHexString.slice(1);\r\n }\r\n\r\n // colorHexString = \"0x\" + colorHexString;\r\n if (isNegative) {\r\n colorHexString = \"-\" + colorHexString;\r\n }\r\n\r\n return colorHexString;\r\n}\r\n\r\n// colorHexStringToNumber\r\nexport function getColorNumberFromHexString(colorHexString: string) {\r\n if (!colorHexString) {\r\n\r\n return 0;\r\n\r\n } else {\r\n // TODO: detect alpha channel\r\n // const { r, g, b, a } = getColorRgbaFromHexString(colorHexString)\r\n // return getColorNumberFromRgba(r, g, b, a);\r\n\r\n colorHexString = refineColorHexString(colorHexString);\r\n\r\n let result =\r\n // new Number(colorHexString).valueOf();\r\n // parseInt(colorHexString);\r\n parseInt(colorHexString, 16);\r\n\r\n // if (isNegative) {\r\n // result = result >>> 0; // convert to unsigned int32\r\n // }\r\n\r\n return result;\r\n }\r\n}\r\n\r\nexport function getColorRgbaFromHexString(colorHexString: string) {\r\n\r\n if (!colorHexString) {\r\n return {\r\n r: 0,\r\n g: 0,\r\n b: 0,\r\n a: 255\r\n };\r\n } else {\r\n\r\n const colorValue = getColorNumberFromHexString(colorHexString); // >>> 0\r\n if (colorValue > 0xFFFFFF) {\r\n return {\r\n r: colorValue >> 24 & 0xFF, // red\r\n // r: (colorValue & 0xFF000000) >> 24,\r\n g: colorValue >> 16 & 0xFF, // green\r\n // g: (colorValue & 0xFF0000) >> 16,\r\n b: colorValue >> 8 & 0xFF, // blue\r\n // b: (colorValue & 0xFF00) >> 8,\r\n a: colorValue & 0xFF // alpha\r\n };\r\n } else {\r\n return {\r\n r: colorValue >> 16 & 0xFF,\r\n // r: (colorValue & 0xFF0000) >> 16,\r\n g: colorValue >> 8 & 0xFF,\r\n // g: (colorValue & 0xFF00) >> 8,\r\n b: colorValue & 0xFF,\r\n // b: colorValue & 0xFF,\r\n a: 255\r\n };\r\n }\r\n\r\n // TODO: compare performance:\r\n // colorHexString = refineColorHexString(colorHexString);\r\n // // no alpha means opaque (non-transparent)\r\n // return {\r\n // r: parseInt(colorHexString.slice(0, 2), 16), // \"0x\" + ...\r\n // g: parseInt(colorHexString.slice(2, 4), 16),\r\n // b: parseInt(colorHexString.slice(4, 6), 16),\r\n // a: colorHexString.length > 6 ? parseInt(colorHexString.slice(6, 8), 16): 255\r\n // };\r\n\r\n // let hexString = input.replace('#', '');\r\n // if (hexString.length === 3) {\r\n // hexString = `${hexString[0]}${hexString[0]}${hexString[1]}${hexString[1]}${hexString[2]}${hexString[2]}`;\r\n // } \r\n // const r = parseInt(hexString.substring(0, 2), 16);\r\n // const g = parseInt(hexString.substring(2, 4), 16);\r\n // const b = parseInt(hexString.substring(4, 6), 16);\r\n }\r\n}\r\n\r\n// colorNumberToHexString\r\nexport function getColorHexStringFromNumber(color: number) {\r\n color = Math.floor(color);\r\n if (color == null || Number.isNaN(color)) {\r\n // color = 0;\r\n return \"\";\r\n }\r\n return \"#\" + ('000000' + color.toString(16)).slice(-6);\r\n}\r\n\r\nexport function get32BitColorHexStringFromNumber(color: number) {\r\n color = Math.floor(color);\r\n return \"#\" + ('00000000' + color.toString(16)).slice(-8);\r\n}\r\n\r\n// colorRgbaToNumber/colorRgbaToInt(Number)\r\n// { r: number, g: number, b: number, a?: number }\r\n// use24BitDepthForOpaque\r\nexport function getColorNumberFromRgba(r: number, g: number, b: number, a: number = null, use24BitsForOpaque: boolean = true) {\r\n let result: number;\r\n // typeof a !== \"number\"\r\n if (a == undefined || (a === 255 && use24BitsForOpaque)) { // a === 255?\r\n // 24-bit color number\r\n result = (r << 16) + (g << 8) + b << 0; // '+' can be replaced with '^' or '|' \r\n } else {\r\n // 32-bit color number\r\n result = (r << 24) + (g << 16) + (b << 8) + a;\r\n }\r\n return result >>> 0; // convert to unsigned int32\r\n}\r\n\r\n// colorRgbaToHexString\r\n// { r: number, g: number, b: number, a?: number }\r\nexport function getColorHexStringFromRgba(r: number, g: number, b: number, a: number = null) {\r\n const value = getColorNumberFromRgba(r, g, b, a);\r\n return getColorHexStringFromNumber(value);\r\n}\r\n\r\n// getColorNumberFromControlEvent\r\nexport function getColorNumberFromEvent(e: Event) {\r\n const colorHexString = (e.target as HTMLInputElement)?.value;\r\n return getColorNumberFromHexString(colorHexString);\r\n}\r\n\r\n/*\r\nfunction parse(orig: string) {\r\n if (!orig) {\r\n return {};\r\n }\r\n\r\n const result = orig.match(/(?:((hsl|rgb)a? *\\(([\\d.%]+(?:deg|g?rad|turn)?)[ ,]*([\\d.%]+)[ ,]*([\\d.%]+)[ ,/]*([\\d.%]*)\\))|(#((?:[\\d\\w]{3}){1,2})([\\d\\w]{1,2})?))/i);\r\n if (!result) {\r\n return { color: orig, opacity: 1.0 };\r\n } else if (result[7]) {\r\n let opacity = 1.0;\r\n if (result[9]) {\r\n opacity = parseInt(result[9].length == 1 ? `${result[9]}${result[9]}` : result[9], 16) * inv255;\r\n }\r\n return { color: `#${result[8]}`, opacity };\r\n } else if (result[0]) {\r\n return { color: `${result[2]}(${result[3]},${result[4]},${result[5]})`, opacity: (Number(result[6]) || 1.0) };\r\n }\r\n}\r\n*/"],"names":["getRandomColorChannelNumber","brightness","r","getRandomColorChannelString","result","getRandom32BitColorNumber","alpha","g","b","getColorNumberFromRgba","getRandomColorNumber","refineColorHexString","colorHexString","isNegative","getColorNumberFromHexString","getColorRgbaFromHexString","colorValue","getColorHexStringFromNumber","color","get32BitColorHexStringFromNumber","a","use24BitsForOpaque","getColorHexStringFromRgba","value","getColorNumberFromEvent","e","_a"],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ declare const cultures: {
2
+ "en-US": {
3
+ dateTime: {
4
+ formats: {
5
+ dateTime: string;
6
+ dateTime24: string;
7
+ dateTimeShort: string;
8
+ dateTime24Short: string;
9
+ dataTimeHM: string;
10
+ dataTimeH24M: string;
11
+ dataTimeHMShort: string;
12
+ dataTimeH24MShort: string;
13
+ date: string;
14
+ dateShort: string;
15
+ time: string;
16
+ time24: string;
17
+ timeShort: string;
18
+ time24Short: string;
19
+ timeHM: string;
20
+ timeH24M: string;
21
+ timeHMShort: string;
22
+ timeH24MShort: string;
23
+ timeHMS: string;
24
+ timeH24MS: string;
25
+ timeHMSShort: string;
26
+ timeH24MSShort: string;
27
+ };
28
+ };
29
+ };
30
+ invariant: {
31
+ dateTime: {
32
+ formats: {
33
+ dateTime: string;
34
+ dateTime24: string;
35
+ dateTimeShort: string;
36
+ dateTime24Short: string;
37
+ dataTimeHM: string;
38
+ dataTimeH24M: string;
39
+ dataTimeHMShort: string;
40
+ dataTimeH24MShort: string;
41
+ date: string;
42
+ dateShort: string;
43
+ time: string;
44
+ time24: string;
45
+ timeShort: string;
46
+ time24Short: string;
47
+ timeHM: string;
48
+ timeH24M: string;
49
+ timeHMShort: string;
50
+ timeH24MShort: string;
51
+ timeHMS: string;
52
+ timeH24MS: string;
53
+ timeHMSShort: string;
54
+ timeH24MSShort: string;
55
+ };
56
+ };
57
+ };
58
+ };
59
+ export default cultures;
60
+ //# sourceMappingURL=cultures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cultures.d.ts","sourceRoot":"","sources":["../../src/i18n/cultures.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAGb,CAAC;AACF,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,10 @@
1
+ import t from "./enUsCulture.es.js";
2
+ const r = {
3
+ "en-US": t,
4
+ invariant: t
5
+ // TODO: create invariant culture
6
+ };
7
+ export {
8
+ r as default
9
+ };
10
+ //# sourceMappingURL=cultures.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cultures.es.js","sources":["../../src/i18n/cultures.ts"],"sourcesContent":["import enUsCulture from './enUsCulture';\r\n\r\nconst cultures = {\r\n \"en-US\": enUsCulture,\r\n \"invariant\": enUsCulture // TODO: create invariant culture\r\n};\r\nexport default cultures;\r\n"],"names":["cultures","enUsCulture"],"mappings":";AAEA,MAAMA,IAAW;AAAA,EACb,SAASC;AAAA,EACT,WAAaA;AAAA;AACjB;"}
@@ -0,0 +1,30 @@
1
+ declare const enUsCulture: {
2
+ dateTime: {
3
+ formats: {
4
+ dateTime: string;
5
+ dateTime24: string;
6
+ dateTimeShort: string;
7
+ dateTime24Short: string;
8
+ dataTimeHM: string;
9
+ dataTimeH24M: string;
10
+ dataTimeHMShort: string;
11
+ dataTimeH24MShort: string;
12
+ date: string;
13
+ dateShort: string;
14
+ time: string;
15
+ time24: string;
16
+ timeShort: string;
17
+ time24Short: string;
18
+ timeHM: string;
19
+ timeH24M: string;
20
+ timeHMShort: string;
21
+ timeH24MShort: string;
22
+ timeHMS: string;
23
+ timeH24MS: string;
24
+ timeHMSShort: string;
25
+ timeH24MSShort: string;
26
+ };
27
+ };
28
+ };
29
+ export default enUsCulture;
30
+ //# sourceMappingURL=enUsCulture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enUsCulture.d.ts","sourceRoot":"","sources":["../../src/i18n/enUsCulture.ts"],"names":[],"mappings":"AAoCA,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyChB,CAAC;AAEF,eAAe,WAAW,CAAC"}